From b985d77d58a7d25eec914d1190bbbc7a118dca48 Mon Sep 17 00:00:00 2001 From: SooChan Lim Date: Thu, 10 Aug 2023 09:24:33 +0900 Subject: [PATCH] e_focus_policy_history: make a E_COMP_OBJECT_HOOK_HIDE callback The focus may be changed at E_COMP_OBJECT_HOOK_HIDE callback. Change-Id: I02cfaf4b233c08e0dd786c8ee5d8400c21e9c947 --- src/bin/e_comp_object.c | 17 ++++++++++++++++- src/bin/e_comp_object.h | 1 + src/bin/e_focus_policy_history.c | 9 +++++++++ 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/bin/e_comp_object.c b/src/bin/e_comp_object.c index 705968f..d2f4180 100644 --- a/src/bin/e_comp_object.c +++ b/src/bin/e_comp_object.c @@ -228,6 +228,7 @@ static Eina_Inlist *_e_comp_object_hooks[] = [E_COMP_OBJECT_HOOK_LOWER] = NULL, [E_COMP_OBJECT_HOOK_MOVE] = NULL, [E_COMP_OBJECT_HOOK_SHOW] = NULL, + [E_COMP_OBJECT_HOOK_HIDE] = NULL, //#endif }; @@ -300,7 +301,8 @@ _e_comp_object_hook_call(E_Comp_Object_Hook_Point hookpoint, E_Client *ec) #ifdef REFACTOR_FOCUS_POLICY && (hookpoint != E_COMP_OBJECT_HOOK_LOWER) && (hookpoint != E_COMP_OBJECT_HOOK_MOVE) && - (hookpoint != E_COMP_OBJECT_HOOK_SHOW) + (hookpoint != E_COMP_OBJECT_HOOK_SHOW) && + (hookpoint != E_COMP_OBJECT_HOOK_HIDE) #endif ) { @@ -2370,6 +2372,9 @@ _e_comp_intercept_hide(void *data, Evas_Object *obj) /* hidden flag = just do it */ ELOGF("COMP", "Hide hidden evas_object:%p", cw->ec, obj); evas_object_hide(obj); +#ifdef REFACTOR_FOCUS_POLICY + _e_comp_object_hook_call(E_COMP_OBJECT_HOOK_HIDE, cw->ec); +#endif return; } @@ -2378,6 +2383,9 @@ _e_comp_intercept_hide(void *data, Evas_Object *obj) /* input_only = who cares */ ELOGF("COMP", "Hide input_only evas_object:%p", cw->ec, obj); evas_object_hide(obj); +#ifdef REFACTOR_FOCUS_POLICY + _e_comp_object_hook_call(E_COMP_OBJECT_HOOK_HIDE, cw->ec); +#endif return; } /* already hidden or currently animating */ @@ -2419,6 +2427,9 @@ _e_comp_intercept_hide(void *data, Evas_Object *obj) cw->defer_hide = 0; ELOGF("COMP", "Hide normal object:%p", cw->ec, obj); evas_object_hide(obj); +#ifdef REFACTOR_FOCUS_POLICY + _e_comp_object_hook_call(E_COMP_OBJECT_HOOK_HIDE, cw->ec); +#endif } static void @@ -3307,6 +3318,9 @@ _e_comp_smart_hide(Evas_Object *obj) if (cw->frame_object) edje_object_play_set(cw->frame_object, 0); } +#ifdef REFACTOR_FOCUS_POLICY + // This executes with E_COMP_OBJECT_HOOK_HIDE callback at e_focus_policy_history.c +#else /* ensure focus-out */ if (cw->ec->focused && (e_config->focus_policy_ext != E_FOCUS_EXT_TOP_STACK)) @@ -3315,6 +3329,7 @@ _e_comp_smart_hide(Evas_Object *obj) e_client_frame_focus_set(cw->ec, EINA_FALSE); e_client_focus_defer_unset(cw->ec); } +#endif e_comp_render_queue(); //force nocomp recheck TRACE_DS_END(); diff --git a/src/bin/e_comp_object.h b/src/bin/e_comp_object.h index 245389d..3752023 100644 --- a/src/bin/e_comp_object.h +++ b/src/bin/e_comp_object.h @@ -49,6 +49,7 @@ typedef enum _E_Comp_Object_Hook_Point E_COMP_OBJECT_HOOK_LOWER, E_COMP_OBJECT_HOOK_MOVE, E_COMP_OBJECT_HOOK_SHOW, + E_COMP_OBJECT_HOOK_HIDE, //#endif E_COMP_OBJECT_HOOK_LAST, } E_Comp_Object_Hook_Point; diff --git a/src/bin/e_focus_policy_history.c b/src/bin/e_focus_policy_history.c index a89b4f0..da0e3e0 100644 --- a/src/bin/e_focus_policy_history.c +++ b/src/bin/e_focus_policy_history.c @@ -117,6 +117,14 @@ _focus_policy_history_hook_cb_comp_object_show(void *data, E_Client *ec) return EINA_TRUE; } +static Eina_Bool +_focus_policy_history_hook_cb_comp_object_hide(void *data, E_Client *ec) +{ + // TODO: + + return EINA_TRUE; +} + static void _focus_policy_history_del(E_Focus_Policy_Impl *impl) { @@ -187,6 +195,7 @@ e_focus_policy_iface_history_new(E_Zone* zone) E_COMP_COMP_HOOK_APPEND(history_policy->co_hooks, E_COMP_OBJECT_HOOK_LOWER, _focus_policy_hook_history_cb_comp_object_lower, history_policy); E_COMP_COMP_HOOK_APPEND(history_policy->co_hooks, E_COMP_OBJECT_HOOK_MOVE, _focus_policy_history_hook_cb_comp_object_move, history_policy); E_COMP_COMP_HOOK_APPEND(history_policy->co_hooks, E_COMP_OBJECT_HOOK_SHOW, _focus_policy_history_hook_cb_comp_object_show, history_policy); + E_COMP_COMP_HOOK_APPEND(history_policy->co_hooks, E_COMP_OBJECT_HOOK_HIDE, _focus_policy_history_hook_cb_comp_object_hide, history_policy); return policy_iface; -- 2.7.4