diff --git a/src/lib/elementary/efl_ui_focus_manager_sub.c b/src/lib/elementary/efl_ui_focus_manager_sub.c index 57997afd41..90ac4f7387 100644 --- a/src/lib/elementary/efl_ui_focus_manager_sub.c +++ b/src/lib/elementary/efl_ui_focus_manager_sub.c @@ -84,6 +84,7 @@ _border_flush(Eo *obj, Efl_Ui_Focus_Manager_Sub_Data *pd) eina_list_free(pd->current_border); pd->current_border = selection; + pd->self_dirty = EINA_FALSE; } static void @@ -105,7 +106,7 @@ _parent_manager_pre_flush(void *data, const Efl_Event *ev EINA_UNUSED) { MY_DATA(data, pd); - //if (!pd->self_dirty) return; //we are not interested + if (!pd->self_dirty) return; //we are not interested _border_flush(data, pd); } @@ -116,12 +117,27 @@ _redirect_changed_cb(void *data, const Efl_Event *ev EINA_UNUSED) //if (efl_ui_focus_manager_redirect_get(ev->object) != data) return; MY_DATA(data, pd); + _border_flush(data, pd); } +static void +_freeze_changed_cb(void *data, const Efl_Event *ev EINA_UNUSED) +{ + if (ev->info) + { + efl_ui_focus_manager_dirty_logic_freeze(data); + } + else + { + efl_ui_focus_manager_dirty_logic_unfreeze(data); + } +} + EFL_CALLBACKS_ARRAY_DEFINE(parent_manager, {EFL_UI_FOCUS_MANAGER_EVENT_FLUSH_PRE, _parent_manager_pre_flush}, - {EFL_UI_FOCUS_MANAGER_EVENT_REDIRECT_CHANGED, _redirect_changed_cb} + {EFL_UI_FOCUS_MANAGER_EVENT_REDIRECT_CHANGED, _redirect_changed_cb}, + {EFL_UI_FOCUS_MANAGER_EVENT_DIRTY_LOGIC_FREEZE_CHANGED, _freeze_changed_cb} ); static void @@ -198,6 +214,9 @@ _efl_ui_focus_manager_sub_efl_object_constructor(Eo *obj, Efl_Ui_Focus_Manager_S { obj = efl_constructor(efl_super(obj, MY_CLASS)); efl_event_callback_array_add(obj, self_manager(), obj); + + pd->self_dirty = EINA_TRUE; + return obj; } diff --git a/src/tests/elementary/elm_test_focus_sub.c b/src/tests/elementary/elm_test_focus_sub.c index 3f100dfae2..5454ecd414 100644 --- a/src/tests/elementary/elm_test_focus_sub.c +++ b/src/tests/elementary/elm_test_focus_sub.c @@ -93,6 +93,12 @@ _setup(Efl_Ui_Focus_Manager **m, Efl_Ui_Focus_Manager_Sub **sub, Efl_Ui_Focus_Ob Efl_Ui_Focus_Manager_Calc *subm = efl_add(EFL_UI_FOCUS_MANAGER_CALC_CLASS, focus_main, efl_ui_focus_manager_root_set(efl_added, root) ); + efl_event_callback_forwarder_add(subm, EFL_UI_FOCUS_MANAGER_EVENT_FLUSH_PRE, focus_main); + efl_event_callback_forwarder_add(subm, EFL_UI_FOCUS_MANAGER_EVENT_REDIRECT_CHANGED, focus_main); + efl_event_callback_forwarder_add(subm, EFL_UI_FOCUS_MANAGER_EVENT_FOCUS_CHANGED , focus_main); + efl_event_callback_forwarder_add(subm, EFL_UI_FOCUS_MANAGER_EVENT_COORDS_DIRTY, focus_main); + efl_event_callback_forwarder_add(subm, EFL_UI_FOCUS_MANAGER_EVENT_DIRTY_LOGIC_FREEZE_CHANGED, focus_main); + efl_composite_attach(focus_main, subm);