e_focus_policy_history: make a E_COMP_OBJECT_HOOK_HIDE callback 24/297524/1
authorSooChan Lim <sc1.lim@samsung.com>
Thu, 10 Aug 2023 00:24:33 +0000 (09:24 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Mon, 21 Aug 2023 07:58:38 +0000 (16:58 +0900)
The focus may be changed at E_COMP_OBJECT_HOOK_HIDE callback.

Change-Id: I02cfaf4b233c08e0dd786c8ee5d8400c21e9c947

src/bin/e_comp_object.c
src/bin/e_comp_object.h
src/bin/e_focus_policy_history.c

index 705968f..d2f4180 100644 (file)
@@ -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();
index 245389d..3752023 100644 (file)
@@ -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;
index a89b4f0..da0e3e0 100644 (file)
@@ -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;