2 # include "elementary_config.h"
5 #define ELM_INTERFACE_ATSPI_ACCESSIBLE_PROTECTED
6 #define ELM_INTERFACE_ATSPI_WIDGET_ACTION_PROTECTED
7 #define ELM_INTERFACE_ATSPI_COMPONENT_PROTECTED
9 #include <Elementary.h>
12 #include "elm_widget_hover.h"
14 #define MY_CLASS ELM_HOVER_CLASS
16 #define MY_CLASS_NAME "Elm_Hover"
17 #define MY_CLASS_NAME_LEGACY "elm_hover"
19 #define ELM_HOVER_PARTS_FOREACH unsigned int i; \
20 for (i = 0; i < sizeof(sd->subs) / sizeof(sd->subs[0]); i++)
22 #define _HOV_LEFT (&(sd->subs[0]))
23 #define _HOV_TOP_LEFT (&(sd->subs[1]))
24 #define _HOV_TOP (&(sd->subs[2]))
25 #define _HOV_TOP_RIGHT (&(sd->subs[2]))
26 #define _HOV_RIGHT (&(sd->subs[4]))
27 #define _HOV_BOTTOM_RIGHT (&(sd->subs[5]))
28 #define _HOV_BOTTOM (&(sd->subs[6]))
29 #define _HOV_BOTTOM_LEFT (&(sd->subs[7]))
30 #define _HOV_MIDDLE (&(sd->subs[8]))
32 const Elm_Layout_Part_Alias_Description _content_aliases[] =
34 {"left", "elm.swallow.slot.left"},
35 {"top-left", "elm.swallow.slot.top-left"},
36 {"top", "elm.swallow.slot.top"},
37 {"top-right", "elm.swallow.slot.top-right"},
38 {"right", "elm.swallow.slot.right"},
39 {"bottom-right", "elm.swallow.slot.bottom-right"},
40 {"bottom", "elm.swallow.slot.bottom"},
41 {"bottom-left", "elm.swallow.slot.bottom-left"},
42 {"middle", "elm.swallow.slot.middle"},
46 #define ELM_PRIV_HOVER_SIGNALS(cmd) \
47 cmd(SIG_CLICKED, "clicked", "") \
48 cmd(SIG_DISMISSED, "dismissed", "") \
49 cmd(SIG_SMART_LOCATION_CHANGED, "smart,changed", "")
51 ELM_PRIV_HOVER_SIGNALS(ELM_PRIV_STATIC_VARIABLE_DECLARE);
53 static const Evas_Smart_Cb_Description _smart_callbacks[] = {
54 ELM_PRIV_HOVER_SIGNALS(ELM_PRIV_SMART_CALLBACKS_DESC)
55 {SIG_LAYOUT_FOCUSED, ""}, /**< handled by elm_layout */
56 {SIG_LAYOUT_UNFOCUSED, ""}, /**< handled by elm_layout */
59 #undef ELM_PRIV_HOVER_SIGNALS
62 _parent_move_cb(void *data,
64 Evas_Object *obj EINA_UNUSED,
65 void *event_info EINA_UNUSED)
67 elm_layout_sizing_eval(data);
71 _parent_resize_cb(void *data,
73 Evas_Object *obj EINA_UNUSED,
74 void *event_info EINA_UNUSED)
76 elm_layout_sizing_eval(data);
80 _parent_show_cb(void *data EINA_UNUSED,
82 Evas_Object *obj EINA_UNUSED,
83 void *event_info EINA_UNUSED)
88 _parent_hide_cb(void *data,
90 Evas_Object *obj EINA_UNUSED,
91 void *event_info EINA_UNUSED)
93 evas_object_hide(data);
97 _parent_del_cb(void *data,
99 Evas_Object *obj EINA_UNUSED,
100 void *event_info EINA_UNUSED)
102 elm_hover_parent_set(data, NULL);
103 elm_layout_sizing_eval(data);
107 _elm_hover_parent_detach(Evas_Object *obj)
109 ELM_HOVER_DATA_GET(obj, sd);
113 evas_object_event_callback_del_full
114 (sd->parent, EVAS_CALLBACK_MOVE, _parent_move_cb, obj);
115 evas_object_event_callback_del_full
116 (sd->parent, EVAS_CALLBACK_RESIZE, _parent_resize_cb, obj);
117 evas_object_event_callback_del_full
118 (sd->parent, EVAS_CALLBACK_SHOW, _parent_show_cb, obj);
119 evas_object_event_callback_del_full
120 (sd->parent, EVAS_CALLBACK_HIDE, _parent_hide_cb, obj);
121 evas_object_event_callback_del_full
122 (sd->parent, EVAS_CALLBACK_DEL, _parent_del_cb, obj);
127 _elm_hover_left_space_calc(Elm_Hover_Data *sd,
133 Evas_Coord x = 0, y = 0, w = 0, h = 0, x2 = 0, y2 = 0, w2 = 0, h2 = 0;
137 evas_object_geometry_get(sd->parent, &x, &y, &w, &h);
138 if (eo_isa(sd->parent, ELM_WIN_CLASS))
144 if (sd->target) evas_object_geometry_get(sd->target, &x2, &y2, &w2, &h2);
147 *spc_r = (x + w) - (x2 + w2);
148 if (*spc_l < 0) *spc_l = 0;
149 if (*spc_r < 0) *spc_r = 0;
152 *spc_b = (y + h) - (y2 + h2);
153 if (*spc_t < 0) *spc_t = 0;
154 if (*spc_b < 0) *spc_b = 0;
157 static Content_Info *
158 _elm_hover_smart_content_location_get(Elm_Hover_Data *sd,
164 Evas_Coord c_w = 0, c_h = 0, mid_w, mid_h;
167 evas_object_size_hint_min_get(sd->smt_sub->obj, &c_w, &c_h);
171 if (spc_l > spc_r) goto left;
173 max = MAX(spc_t, spc_r);
174 max = MAX(max, spc_b);
178 if (mid_w > spc_l) return _HOV_TOP_RIGHT;
185 if (mid_h > spc_t) return _HOV_BOTTOM_RIGHT;
186 else if (mid_h > spc_b)
187 return _HOV_TOP_RIGHT;
193 return _HOV_BOTTOM_RIGHT;
198 max = MAX(spc_t, spc_l);
199 max = MAX(max, spc_b);
203 if (mid_w > spc_r) return _HOV_TOP_LEFT;
210 if (mid_h > spc_t) return _HOV_BOTTOM_LEFT;
211 else if (mid_h > spc_b)
212 return _HOV_TOP_LEFT;
217 if (mid_h > spc_r) return _HOV_BOTTOM_LEFT;
223 _elm_hover_smt_sub_re_eval(Evas_Object *obj)
225 Evas_Coord spc_l, spc_r, spc_t, spc_b;
230 ELM_HOVER_DATA_GET(obj, sd);
232 if (!sd->smt_sub) return;
235 _elm_hover_left_space_calc(sd, &spc_l, &spc_t, &spc_r, &spc_b);
236 elm_layout_content_unset(obj, sd->smt_sub->swallow);
238 sub = sd->smt_sub->obj;
240 sd->smt_sub->obj = NULL;
243 _elm_hover_smart_content_location_get(sd, spc_l, spc_t, spc_r, spc_b);
245 sd->smt_sub->obj = sub;
247 if (sd->smt_sub != prev)
248 evas_object_smart_callback_call
249 (obj, SIG_SMART_LOCATION_CHANGED, (void *)sd->smt_sub->swallow);
251 if (elm_widget_mirrored_get(obj))
253 if (sd->smt_sub == _HOV_BOTTOM_LEFT) sd->smt_sub = _HOV_BOTTOM_RIGHT;
254 else if (sd->smt_sub == _HOV_BOTTOM_RIGHT)
255 sd->smt_sub = _HOV_BOTTOM_LEFT;
256 else if (sd->smt_sub == _HOV_RIGHT)
257 sd->smt_sub = _HOV_LEFT;
258 else if (sd->smt_sub == _HOV_LEFT)
259 sd->smt_sub = _HOV_RIGHT;
260 else if (sd->smt_sub == _HOV_TOP_RIGHT)
261 sd->smt_sub = _HOV_TOP_LEFT;
262 else if (sd->smt_sub == _HOV_TOP_LEFT)
263 sd->smt_sub = _HOV_TOP_RIGHT;
266 snprintf(buf, sizeof(buf), "elm.swallow.slot.%s", sd->smt_sub->swallow);
267 elm_layout_content_set(obj, buf, sd->smt_sub->obj);
271 _hov_show_do(Evas_Object *obj)
273 ELM_HOVER_DATA_GET(obj, sd);
275 elm_layout_signal_emit(obj, "elm,action,show", "elm");
277 ELM_HOVER_PARTS_FOREACH
284 (buf, sizeof(buf), "elm,action,slot,%s,show",
285 sd->subs[i].swallow);
287 elm_layout_signal_emit(obj, buf, "elm");
292 EOLIAN static Eina_Bool
293 _elm_hover_elm_widget_theme_apply(Eo *obj, Elm_Hover_Data *sd)
295 Eina_Bool int_ret = EINA_FALSE;
296 eo_do_super(obj, MY_CLASS, int_ret = elm_obj_widget_theme_apply());
297 if (!int_ret) return EINA_FALSE;
299 if (sd->smt_sub) _elm_hover_smt_sub_re_eval(obj);
301 elm_layout_sizing_eval(obj);
303 if (evas_object_visible_get(obj)) _hov_show_do(obj);
309 _elm_hover_elm_layout_sizing_eval(Eo *obj, Elm_Hover_Data *sd)
311 Evas_Coord ofs_x, x = 0, y = 0, w = 0, h = 0, x2 = 0,
312 y2 = 0, w2 = 0, h2 = 0;
315 if (sd->on_del) return;
319 evas_object_geometry_get(sd->parent, &x, &y, &w, &h);
320 if (eo_isa(sd->parent, ELM_WIN_CLASS))
326 evas_object_geometry_get(obj, &x2, &y2, &w2, &h2);
328 if (elm_widget_mirrored_get(obj)) ofs_x = w - (x2 - x) - w2;
331 ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
332 evas_object_move(wd->resize_obj, x, y);
333 evas_object_resize(wd->resize_obj, w, h);
334 evas_object_size_hint_min_set(sd->offset, ofs_x, y2 - y);
335 evas_object_size_hint_min_set(sd->size, w2, h2);
339 _on_smt_sub_changed(void *data,
341 Evas_Object *obj EINA_UNUSED,
342 void *event_info EINA_UNUSED)
344 _elm_hover_smt_sub_re_eval(data);
347 EOLIAN static Eina_Bool
348 _elm_hover_elm_widget_sub_object_add(Eo *obj, Elm_Hover_Data *sd, Evas_Object *sobj)
350 Eina_Bool int_ret = EINA_FALSE;
352 if (evas_object_data_get(sobj, "elm-parent") == obj) return EINA_TRUE;
354 eo_do_super(obj, MY_CLASS, int_ret = elm_obj_widget_sub_object_add(sobj));
355 if (!int_ret) return EINA_FALSE;
357 if (sd->smt_sub && sd->smt_sub->obj == sobj)
358 evas_object_event_callback_add
359 (sobj, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _on_smt_sub_changed, obj);
364 EOLIAN static Eina_Bool
365 _elm_hover_elm_widget_sub_object_del(Eo *obj, Elm_Hover_Data *sd, Evas_Object *sobj)
367 Eina_Bool int_ret = EINA_FALSE;
369 eo_do_super(obj, MY_CLASS, int_ret = elm_obj_widget_sub_object_del(sobj));
370 if (!int_ret) return EINA_FALSE;
372 if (sd->smt_sub && sd->smt_sub->obj == sobj)
374 evas_object_event_callback_del_full
375 (sd->smt_sub->obj, EVAS_CALLBACK_CHANGED_SIZE_HINTS,
376 _on_smt_sub_changed, obj);
378 sd->smt_sub->obj = NULL;
383 ELM_HOVER_PARTS_FOREACH
385 if (sd->subs[i].obj == sobj)
387 sd->subs[i].obj = NULL;
397 _elm_hover_subs_del(Elm_Hover_Data *sd)
399 ELM_HOVER_PARTS_FOREACH
400 ELM_SAFE_FREE(sd->subs[i].obj, evas_object_del);
403 EOLIAN static Eina_Bool
404 _elm_hover_elm_container_content_set(Eo *obj, Elm_Hover_Data *sd, const char *swallow, Evas_Object *content)
408 if (!swallow) return EINA_FALSE;
410 if (!strcmp(swallow, "smart"))
412 if (sd->smt_sub) /* already under 'smart' mode */
414 if (sd->smt_sub->obj != content)
416 evas_object_del(sd->smt_sub->obj);
417 sd->smt_sub = _HOV_LEFT;
418 sd->smt_sub->obj = content;
423 sd->smt_sub->obj = NULL;
426 else _elm_hover_smt_sub_re_eval(obj);
430 else /* switch from pristine spots to 'smart' */
432 _elm_hover_subs_del(sd);
433 sd->smt_sub = _HOV_LEFT;
434 sd->smt_sub->obj = content;
436 _elm_hover_smt_sub_re_eval(obj);
442 eo_do_super(obj, MY_CLASS, int_ret = elm_obj_container_content_set(swallow, content));
443 if (!int_ret) return EINA_FALSE;
445 if (strstr(swallow, "elm.swallow.slot."))
446 swallow += sizeof("elm.swallow.slot.");
448 ELM_HOVER_PARTS_FOREACH
450 if (!strcmp(swallow, sd->subs[i].swallow))
452 sd->subs[i].obj = content;
458 elm_layout_sizing_eval(obj);
462 EOLIAN static Evas_Object*
463 _elm_hover_elm_container_content_get(Eo *obj, Elm_Hover_Data *sd, const char *swallow)
468 if (!swallow) return ret;
470 if (!strcmp(swallow, "smart"))
471 eo_do_super(obj, MY_CLASS, ret = elm_obj_container_content_get(sd->smt_sub->swallow));
473 eo_do_super(obj, MY_CLASS, ret = elm_obj_container_content_get(swallow));
478 EOLIAN static Evas_Object*
479 _elm_hover_elm_container_content_unset(Eo *obj, Elm_Hover_Data *sd, const char *swallow)
481 Evas_Object *ret = NULL;
483 if (!swallow) return NULL;
485 if (!strcmp(swallow, "smart"))
486 eo_do_super(obj, MY_CLASS, ret = elm_obj_container_content_unset
487 (sd->smt_sub->swallow));
489 eo_do_super(obj, MY_CLASS, ret = elm_obj_container_content_unset
495 _target_del_cb(void *data,
497 Evas_Object *obj EINA_UNUSED,
498 void *event_info EINA_UNUSED)
500 ELM_HOVER_DATA_GET(data, sd);
506 _target_move_cb(void *data,
508 Evas_Object *obj EINA_UNUSED,
509 void *event_info EINA_UNUSED)
511 elm_layout_sizing_eval(data);
512 _elm_hover_smt_sub_re_eval(data);
515 /// TIZEN_ONLY(20150917): Delay hover dismiss while handling edje signal
517 _hov_hide_cb(void *data,
518 Evas_Object *obj EINA_UNUSED,
519 const char *emission EINA_UNUSED,
520 const char *source EINA_UNUSED)
522 evas_object_hide(data);
523 evas_object_smart_callback_call(data, SIG_DISMISSED, NULL);
528 _hov_dismiss_cb(void *data,
529 Evas_Object *obj EINA_UNUSED,
530 const char *emission EINA_UNUSED,
531 const char *source EINA_UNUSED)
533 /// TIZEN_ONLY(20150917): Delay hover dismiss while handling edje signal
535 evas_object_hide(data);
536 evas_object_smart_callback_call(data, SIG_CLICKED, NULL);
537 evas_object_smart_callback_call(data, SIG_DISMISSED, NULL);
539 ELM_HOVER_DATA_GET(obj, sd);
541 elm_layout_signal_emit(obj, "elm,action,hide", "elm");
543 ELM_HOVER_PARTS_FOREACH
549 snprintf(buf, sizeof(buf), "elm,action,slot,%s,hide",
550 sd->subs[i].swallow);
551 elm_layout_signal_emit(obj, buf, "elm");
554 evas_object_smart_callback_call(data, SIG_CLICKED, NULL);
558 _elm_hover_evas_object_smart_add(Eo *obj, Elm_Hover_Data *priv)
562 eo_do_super(obj, MY_CLASS, evas_obj_smart_add());
563 elm_widget_sub_object_parent_add(obj);
565 for (i = 0; i < sizeof(priv->subs) / sizeof(priv->subs[0]); i++)
566 priv->subs[i].swallow = _content_aliases[i].alias;
568 if (!elm_layout_theme_set(obj, "hover", "base", elm_widget_style_get(obj)))
569 ERR("Failed to set layout!");
571 elm_layout_signal_callback_add
572 (obj, "elm,action,dismiss", "*", _hov_dismiss_cb, obj);
573 /// TIZEN_ONLY(20150917): Delay hover dismiss while handling edje signal
574 elm_layout_signal_callback_add
575 (obj, "elm,action,hide,finished", "elm", _hov_hide_cb, obj);
578 priv->offset = evas_object_rectangle_add(evas_object_evas_get(obj));
579 evas_object_pass_events_set(priv->offset, EINA_TRUE);
580 evas_object_color_set(priv->offset, 0, 0, 0, 0);
582 priv->size = evas_object_rectangle_add(evas_object_evas_get(obj));
583 evas_object_pass_events_set(priv->size, EINA_TRUE);
584 evas_object_color_set(priv->size, 0, 0, 0, 0);
586 elm_layout_content_set(obj, "elm.swallow.offset", priv->offset);
587 elm_layout_content_set(obj, "elm.swallow.size", priv->size);
589 elm_widget_can_focus_set(obj, EINA_FALSE);
593 _elm_hover_evas_object_smart_del(Eo *obj, Elm_Hover_Data *sd)
596 sd->on_del = EINA_TRUE;
598 if (evas_object_visible_get(obj))
600 evas_object_smart_callback_call(obj, SIG_CLICKED, NULL);
601 evas_object_smart_callback_call(obj, SIG_DISMISSED, NULL);
604 elm_hover_target_set(obj, NULL);
606 _elm_hover_parent_detach(obj);
609 eo_do_super(obj, MY_CLASS, evas_obj_smart_del());
613 _elm_hover_evas_object_smart_move(Eo *obj, Elm_Hover_Data *_pd EINA_UNUSED, Evas_Coord x, Evas_Coord y)
615 eo_do_super(obj, MY_CLASS, evas_obj_smart_move(x, y));
617 elm_layout_sizing_eval(obj);
621 _elm_hover_evas_object_smart_resize(Eo *obj, Elm_Hover_Data *_pd EINA_UNUSED, Evas_Coord w, Evas_Coord h)
623 eo_do_super(obj, MY_CLASS, evas_obj_smart_resize(w, h));
625 elm_layout_sizing_eval(obj);
629 _elm_hover_evas_object_smart_show(Eo *obj, Elm_Hover_Data *_pd EINA_UNUSED)
631 eo_do_super(obj, MY_CLASS, evas_obj_smart_show());
637 _elm_hover_evas_object_smart_hide(Eo *obj, Elm_Hover_Data *sd EINA_UNUSED)
639 eo_do_super(obj, MY_CLASS, evas_obj_smart_hide());
641 /// TIZEN_ONLY(20150917): Delay hover dismiss while handling edje signal
643 elm_layout_signal_emit(obj, "elm,action,hide", "elm");
645 ELM_HOVER_PARTS_FOREACH
651 snprintf(buf, sizeof(buf), "elm,action,slot,%s,hide",
652 sd->subs[i].swallow);
653 elm_layout_signal_emit(obj, buf, "elm");
659 EOLIAN static const Elm_Layout_Part_Alias_Description*
660 _elm_hover_elm_layout_content_aliases_get(Eo *obj EINA_UNUSED, Elm_Hover_Data *_pd EINA_UNUSED)
662 return _content_aliases;
666 elm_hover_add(Evas_Object *parent)
668 EINA_SAFETY_ON_NULL_RETURN_VAL(parent, NULL);
669 Evas_Object *obj = eo_add(MY_CLASS, parent);
674 _elm_hover_eo_base_constructor(Eo *obj, Elm_Hover_Data *_pd EINA_UNUSED)
676 eo_do_super(obj, MY_CLASS, eo_constructor());
678 evas_obj_type_set(MY_CLASS_NAME_LEGACY),
679 evas_obj_smart_callbacks_descriptions_set(_smart_callbacks),
680 elm_interface_atspi_accessible_role_set(ELM_ATSPI_ROLE_POPUP_MENU));
684 _elm_hover_target_set(Eo *obj, Elm_Hover_Data *sd, Evas_Object *target)
689 evas_object_event_callback_del_full
690 (sd->target, EVAS_CALLBACK_DEL, _target_del_cb, obj);
691 evas_object_event_callback_del_full
692 (sd->target, EVAS_CALLBACK_MOVE, _target_move_cb, obj);
693 elm_widget_hover_object_set(sd->target, NULL);
699 evas_object_event_callback_add
700 (sd->target, EVAS_CALLBACK_DEL, _target_del_cb, obj);
701 evas_object_event_callback_add
702 (sd->target, EVAS_CALLBACK_MOVE, _target_move_cb, obj);
703 elm_widget_hover_object_set(target, obj);
704 elm_layout_sizing_eval(obj);
709 elm_hover_parent_set(Evas_Object *obj,
712 ELM_HOVER_CHECK(obj);
713 eo_do(obj, elm_obj_widget_parent_set(parent));
717 _elm_hover_elm_widget_parent_set(Eo *obj, Elm_Hover_Data *sd, Evas_Object *parent)
719 _elm_hover_parent_detach(obj);
724 evas_object_event_callback_add
725 (sd->parent, EVAS_CALLBACK_MOVE, _parent_move_cb, obj);
726 evas_object_event_callback_add
727 (sd->parent, EVAS_CALLBACK_RESIZE, _parent_resize_cb, obj);
728 evas_object_event_callback_add
729 (sd->parent, EVAS_CALLBACK_SHOW, _parent_show_cb, obj);
730 evas_object_event_callback_add
731 (sd->parent, EVAS_CALLBACK_HIDE, _parent_hide_cb, obj);
732 evas_object_event_callback_add
733 (sd->parent, EVAS_CALLBACK_DEL, _parent_del_cb, obj);
736 elm_layout_sizing_eval(obj);
739 EOLIAN static Evas_Object*
740 _elm_hover_target_get(Eo *obj EINA_UNUSED, Elm_Hover_Data *sd)
746 elm_hover_parent_get(const Evas_Object *obj)
748 ELM_HOVER_CHECK(obj) NULL;
749 Evas_Object *ret = NULL;
750 eo_do((Eo *) obj, ret = elm_obj_widget_parent_get());
754 EOLIAN static Evas_Object*
755 _elm_hover_elm_widget_parent_get(Eo *obj EINA_UNUSED, Elm_Hover_Data *sd)
760 EOLIAN static const char*
761 _elm_hover_best_content_location_get(Eo *obj EINA_UNUSED, Elm_Hover_Data *sd, Elm_Hover_Axis pref_axis)
763 Evas_Coord spc_l, spc_r, spc_t, spc_b;
765 _elm_hover_left_space_calc(sd, &spc_l, &spc_t, &spc_r, &spc_b);
767 if (pref_axis == ELM_HOVER_AXIS_HORIZONTAL)
769 if (spc_l < spc_r) return (_HOV_RIGHT)->swallow;
770 else return (_HOV_LEFT)->swallow;
772 else if (pref_axis == ELM_HOVER_AXIS_VERTICAL)
774 if (spc_t < spc_b) return (_HOV_BOTTOM)->swallow;
775 else return (_HOV_TOP)->swallow;
781 return (_HOV_TOP)->swallow;
782 else if (spc_b > spc_r)
783 return (_HOV_BOTTOM)->swallow;
785 return (_HOV_RIGHT)->swallow;
789 return (_HOV_TOP)->swallow;
790 else if (spc_b > spc_r)
791 return (_HOV_BOTTOM)->swallow;
793 return (_HOV_LEFT)->swallow;
799 _elm_hover_dismiss(Eo *obj, Elm_Hover_Data *_pd EINA_UNUSED)
801 /// TIZEN_ONLY(20150917): Delay removing hover until VI ends
802 //elm_layout_signal_emit(obj, "elm,action,dismiss", ""); // XXX: for compat
804 elm_layout_signal_emit(obj, "elm,action,dismiss", "elm");
807 EOLIAN static Eina_Bool
808 _elm_hover_elm_widget_focus_next_manager_is(Eo *obj EINA_UNUSED, Elm_Hover_Data *_pd EINA_UNUSED)
813 EOLIAN static Eina_Bool
814 _elm_hover_elm_widget_focus_direction_manager_is(Eo *obj EINA_UNUSED, Elm_Hover_Data *_pd EINA_UNUSED)
821 _elm_hover_class_constructor(Eo_Class *klass)
823 evas_smart_legacy_type_register(MY_CLASS_NAME_LEGACY, klass);
827 EOLIAN static Elm_Atspi_State_Set
828 _elm_hover_elm_interface_atspi_accessible_state_set_get(Eo *obj, Elm_Hover_Data *pd EINA_UNUSED)
830 Elm_Atspi_State_Set states;
832 eo_do_super(obj, MY_CLASS, states = elm_interface_atspi_accessible_state_set_get());
834 STATE_TYPE_SET(states, ELM_ATSPI_STATE_MODAL);
840 _action_dismiss(Evas_Object *obj, const char *params EINA_UNUSED)
842 elm_hover_dismiss(obj);
846 EOLIAN const Elm_Atspi_Action *
847 _elm_hover_elm_interface_atspi_widget_action_elm_actions_get(Eo *obj EINA_UNUSED, Elm_Hover_Data *pd EINA_UNUSED)
849 static Elm_Atspi_Action atspi_actions[] = {
850 { "dismiss", "dismiss", NULL, _action_dismiss },
851 { NULL, NULL, NULL, NULL}
853 return &atspi_actions[0];
856 EOLIAN static Eina_Bool
857 _elm_hover_elm_interface_atspi_component_highlight_grab(Eo *obj, Elm_Hover_Data *sd)
859 ELM_HOVER_PARTS_FOREACH
863 elm_object_accessibility_highlight_set(sd->subs[i].obj, EINA_TRUE);
864 elm_interface_atspi_accessible_state_changed_signal_emit(obj, ELM_ATSPI_STATE_HIGHLIGHTED, EINA_TRUE);
871 EOLIAN static Eina_Bool
872 _elm_hover_elm_interface_atspi_component_highlight_clear(Eo *obj, Elm_Hover_Data *sd)
874 ELM_HOVER_PARTS_FOREACH
878 elm_object_accessibility_highlight_set(sd->subs[i].obj, EINA_FALSE);
879 elm_interface_atspi_accessible_state_changed_signal_emit(obj, ELM_ATSPI_STATE_HIGHLIGHTED, EINA_FALSE);
886 #include "elm_hover.eo.c"