diff --git a/src/lib/elementary/efl_ui_calendar.c b/src/lib/elementary/efl_ui_calendar.c index ae0e0ab69c..3e5d34dd7a 100644 --- a/src/lib/elementary/efl_ui_calendar.c +++ b/src/lib/elementary/efl_ui_calendar.c @@ -1276,6 +1276,7 @@ _efl_ui_calendar_item_day_number_set(Eo *obj, Efl_Ui_Calendar_Item_Data *pd, int pd->part = po; else pd->part = evas_object_data_get(po, "_part_access_obj"); + _efl_ui_focus_event_redirector(pd->part, obj); EINA_SAFETY_ON_NULL_RETURN(pd->part); } diff --git a/src/lib/elementary/efl_ui_focus_composition.c b/src/lib/elementary/efl_ui_focus_composition.c index ebcb051451..8a4b3dfe4c 100644 --- a/src/lib/elementary/efl_ui_focus_composition.c +++ b/src/lib/elementary/efl_ui_focus_composition.c @@ -243,10 +243,9 @@ _canvas_object_deleted(void *data, const Efl_Event *ev EINA_UNUSED) static void _new_geom(void *data, const Efl_Event *event) { - efl_event_callback_call(data, event->desc, event->info); + efl_event_callback_call(data, EFL_UI_FOCUS_OBJECT_EVENT_FOCUS_GEOMETRY_CHANGED, event->info); } - EFL_CALLBACKS_ARRAY_DEFINE(canvas_obj, {EFL_GFX_ENTITY_EVENT_RESIZE, _new_geom}, {EFL_GFX_ENTITY_EVENT_MOVE, _new_geom}, diff --git a/src/lib/elementary/efl_ui_focus_manager_calc.c b/src/lib/elementary/efl_ui_focus_manager_calc.c index 9dd444dde6..18643f92bb 100644 --- a/src/lib/elementary/efl_ui_focus_manager_calc.c +++ b/src/lib/elementary/efl_ui_focus_manager_calc.c @@ -402,6 +402,8 @@ dirty_flush_node(Efl_Ui_Focus_Manager *obj EINA_UNUSED, Efl_Ui_Focus_Manager_Cal static void dirty_flush(Efl_Ui_Focus_Manager *obj, Efl_Ui_Focus_Manager_Calc_Data *pd, Node *node) { + if (!pd->dirty) return; + efl_event_callback_call(obj, EFL_UI_FOCUS_MANAGER_EVENT_FLUSH_PRE, NULL); dirty_flush_node(obj, pd, node); @@ -465,8 +467,7 @@ _object_del_cb(void *data, const Efl_Event *event) } EFL_CALLBACKS_ARRAY_DEFINE(regular_node, - {EFL_GFX_ENTITY_EVENT_RESIZE, _node_new_geometry_cb}, - {EFL_GFX_ENTITY_EVENT_MOVE, _node_new_geometry_cb}, + {EFL_UI_FOCUS_OBJECT_EVENT_FOCUS_GEOMETRY_CHANGED, _node_new_geometry_cb}, {EFL_EVENT_INVALIDATE, _object_del_cb}, ); diff --git a/src/lib/elementary/efl_ui_focus_object.eo b/src/lib/elementary/efl_ui_focus_object.eo index b82b259a0c..0058be0d11 100644 --- a/src/lib/elementary/efl_ui_focus_object.eo +++ b/src/lib/elementary/efl_ui_focus_object.eo @@ -88,5 +88,6 @@ mixin Efl.Ui.Focus.Object logical,changed: Efl.Ui.Focus.Object; [[Emitted when a new logical parent should be used.]] child_focus,changed: bool; [[Emitted if child_focus has changed]] + focus_geometry,changed: void; [[Emitted if focus geometry of this object has changed]] } } diff --git a/src/lib/elementary/efl_ui_widget.c b/src/lib/elementary/efl_ui_widget.c index 498296ee47..d4a253191d 100644 --- a/src/lib/elementary/efl_ui_widget.c +++ b/src/lib/elementary/efl_ui_widget.c @@ -5323,6 +5323,7 @@ _efl_ui_widget_efl_object_constructor(Eo *obj, Elm_Widget_Smart_Data *sd EINA_UN Eo *parent = NULL; sd->on_create = EINA_TRUE; + _efl_ui_focus_event_redirector(obj, obj); efl_canvas_group_clipped_set(obj, EINA_FALSE); obj = efl_constructor(efl_super(obj, MY_CLASS)); efl_canvas_object_type_set(obj, MY_CLASS_NAME_LEGACY); diff --git a/src/lib/elementary/elm_calendar.c b/src/lib/elementary/elm_calendar.c index 75fde218aa..e150e54cd6 100644 --- a/src/lib/elementary/elm_calendar.c +++ b/src/lib/elementary/elm_calendar.c @@ -1955,6 +1955,8 @@ _elm_calendar_item_day_number_set(Eo *obj, Elm_Calendar_Item_Data *pd, int i) else pd->part = evas_object_data_get(po, "_part_access_obj"); + _efl_ui_focus_event_redirector(pd->part, obj); + EINA_SAFETY_ON_NULL_RETURN(pd->part); } diff --git a/src/lib/elementary/elm_colorselector.c b/src/lib/elementary/elm_colorselector.c index ef785786a9..80ffdf8129 100644 --- a/src/lib/elementary/elm_colorselector.c +++ b/src/lib/elementary/elm_colorselector.c @@ -1781,6 +1781,8 @@ _elm_color_item_efl_object_constructor(Eo *eo_item, Elm_Color_Item_Data *item) evas_object_size_hint_align_set(VIEW(item), EVAS_HINT_FILL, EVAS_HINT_FILL); evas_object_event_callback_add (VIEW(item), EVAS_CALLBACK_RESIZE, _item_resize, NULL); + _efl_ui_focus_event_redirector(VIEW(item), obj); + item->color_obj = edje_object_add(evas_object_evas_get(obj)); elm_widget_theme_object_set diff --git a/src/lib/elementary/elm_main.c b/src/lib/elementary/elm_main.c index 00f8c22ed0..ce17b986f0 100644 --- a/src/lib/elementary/elm_main.c +++ b/src/lib/elementary/elm_main.c @@ -41,6 +41,19 @@ Eina_Bool _use_build_config; static Elm_Version _version = { VMAJ, VMIN, VMIC, VREV }; EAPI Elm_Version *elm_version = &_version; +static void +_focus_ev_redirect_cb(void *data, const Efl_Event *ev) +{ + efl_event_callback_call(data, EFL_UI_FOCUS_OBJECT_EVENT_FOCUS_GEOMETRY_CHANGED, NULL); +} + +void +_efl_ui_focus_event_redirector(Efl_Ui_Focus_Object *obj, Efl_Ui_Focus_Object *goal) +{ + efl_event_callback_add(obj, EFL_GFX_ENTITY_EVENT_MOVE, _focus_ev_redirect_cb, goal); + efl_event_callback_add(obj, EFL_GFX_ENTITY_EVENT_RESIZE, _focus_ev_redirect_cb, goal); +} + void _efl_ui_focus_manager_redirect_events_del(Efl_Ui_Focus_Manager *manager, Eo *obj) { diff --git a/src/lib/elementary/elm_priv.h b/src/lib/elementary/elm_priv.h index 57aa2fa6df..665bee0e03 100644 --- a/src/lib/elementary/elm_priv.h +++ b/src/lib/elementary/elm_priv.h @@ -909,4 +909,6 @@ void legacy_child_focus_handle(Efl_Ui_Focus_Object *object); */ void legacy_object_focus_handle(Efl_Ui_Focus_Object *object); +void _efl_ui_focus_event_redirector(Efl_Ui_Focus_Object *obj, Efl_Ui_Focus_Object *goal); + #endif diff --git a/src/lib/elementary/elm_segment_control.c b/src/lib/elementary/elm_segment_control.c index 13d7a66602..e46e3802d9 100644 --- a/src/lib/elementary/elm_segment_control.c +++ b/src/lib/elementary/elm_segment_control.c @@ -596,6 +596,7 @@ _elm_segment_control_item_efl_object_constructor(Eo *obj, Elm_Segment_Control_It parent = efl_parent_get(obj); VIEW_SET(it, edje_object_add(evas_object_evas_get(parent))); + _efl_ui_focus_event_redirector(VIEW(it), obj); edje_object_scale_set(VIEW(it),efl_gfx_entity_scale_get(WIDGET(it)) * elm_config_scale_get()); evas_object_smart_member_add(VIEW(it), parent); diff --git a/src/lib/elementary/elm_toolbar.c b/src/lib/elementary/elm_toolbar.c index b01a043a79..a8f541ff7d 100644 --- a/src/lib/elementary/elm_toolbar.c +++ b/src/lib/elementary/elm_toolbar.c @@ -2413,6 +2413,7 @@ _item_new(Evas_Object *obj, WIDGET_ITEM_DATA_SET(EO_OBJ(it), data); VIEW_SET(it, elm_layout_add(obj)); + _efl_ui_focus_event_redirector(VIEW(it), eo_it); elm_widget_tree_unfocusable_set(VIEW(it), EINA_TRUE); evas_object_data_set(VIEW(it), "item", it); efl_access_object_access_type_set(VIEW(it), EFL_ACCESS_TYPE_DISABLED);