e_focus_policy: make a E_COMP_OBJECT_HOOK_MOVE callback 22/297522/1
authorSooChan Lim <sc1.lim@samsung.com>
Thu, 10 Aug 2023 00:07:42 +0000 (09:07 +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_MOVE callback.

Change-Id: I9fe6e2d54a89c022850d5adaf5ea0c006454a064

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

index 5b46400..2681ebc 100644 (file)
@@ -2212,6 +2212,10 @@ _e_client_cb_evas_move(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UN
 
    ec->pre_cb.x = x; ec->pre_cb.y = y;
 
+#ifdef REFACTOR_FOCUS_POLICY
+      // This code is executed at E_COMP_OBJECT_HOOK_MOVE callback
+      // at e_focus_policy_topmost.c and at e_focus_policy_history.c
+#else
    if (ec->focused)
      {
         if (!E_INTERSECTS(ec->x, ec->y, ec->w, ec->h,
@@ -2220,6 +2224,7 @@ _e_client_cb_evas_move(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UN
              e_client_revert_focus(ec);
           }
      }
+#endif
 
    e_comp_visibility_calculation_set(EINA_TRUE);
 }
index 0e95259..5154993 100644 (file)
@@ -226,6 +226,7 @@ static Eina_Inlist *_e_comp_object_hooks[] =
    [E_COMP_OBJECT_HOOK_RENDER_UPDATE_LOCK_SET] = NULL,
 //#ifdef REFACTOR_FOCUS_POLICY
    [E_COMP_OBJECT_HOOK_LOWER] = NULL,
+   [E_COMP_OBJECT_HOOK_MOVE] = NULL,
 //#endif
 };
 
@@ -296,7 +297,8 @@ _e_comp_object_hook_call(E_Comp_Object_Hook_Point hookpoint, E_Client *ec)
             (hookpoint != E_COMP_OBJECT_HOOK_MASK_OBJECT_UNSET) &&
             (hookpoint != E_COMP_OBJECT_HOOK_RENDER_UPDATE_LOCK_SET)
 #ifdef REFACTOR_FOCUS_POLICY
-            && (hookpoint != E_COMP_OBJECT_HOOK_LOWER)
+            && (hookpoint != E_COMP_OBJECT_HOOK_LOWER) &&
+            (hookpoint != E_COMP_OBJECT_HOOK_MOVE)
 #endif
             )
           {
@@ -1647,6 +1649,10 @@ _e_comp_intercept_move(void *data, Evas_Object *obj, int x, int y)
         if (!cw->frame_object)
           x = ix, y = iy;
         evas_object_move(obj, x, y);
+
+#ifdef REFACTOR_FOCUS_POLICY
+        _e_comp_object_hook_call(E_COMP_OBJECT_HOOK_MOVE, cw->ec);
+#endif
      }
 }
 
index e35474b..0c3c617 100644 (file)
@@ -47,6 +47,7 @@ typedef enum _E_Comp_Object_Hook_Point
    E_COMP_OBJECT_HOOK_RENDER_UPDATE_LOCK_SET,
 //#ifdef REFACTOR_FOCUS_POLICY
    E_COMP_OBJECT_HOOK_LOWER,
+   E_COMP_OBJECT_HOOK_MOVE,
 //#endif
    E_COMP_OBJECT_HOOK_LAST,
 } E_Comp_Object_Hook_Point;
index 6614395..8b00d6a 100644 (file)
@@ -101,6 +101,14 @@ _focus_policy_hook_history_cb_comp_object_lower(void *data, E_Client *ec)
    return EINA_TRUE;
 }
 
+static Eina_Bool
+_focus_policy_history_hook_cb_comp_object_move(void *data, E_Client *ec)
+{
+   // TODO:
+
+   return EINA_TRUE;
+}
+
 static void
 _focus_policy_history_del(E_Focus_Policy_Impl *impl)
 {
@@ -169,6 +177,7 @@ e_focus_policy_iface_history_new(E_Zone* zone)
 
    // e_comp_object hooks
    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);
 
    return policy_iface;
 
index 65019c2..17954c6 100644 (file)
@@ -75,6 +75,14 @@ _focus_policy_hook_topmost_cb_comp_object_lower(void *data, E_Client *ec)
    return EINA_TRUE;
 }
 
+static Eina_Bool
+_focus_policy_topmost_hook_cb_comp_object_move(void *data, E_Client *ec)
+{
+   // TODO:
+
+   return EINA_TRUE;
+}
+
 static void
 _focus_policy_topmost_del(E_Focus_Policy_Impl *impl)
 {
@@ -139,6 +147,7 @@ e_focus_policy_iface_topmost_new(E_Zone* zone)
 
    // e_comp_object hooks
    E_COMP_COMP_HOOK_APPEND(topmost_policy->co_hooks, E_COMP_OBJECT_HOOK_LOWER, _focus_policy_hook_topmost_cb_comp_object_lower, topmost_policy);
+   E_COMP_COMP_HOOK_APPEND(topmost_policy->co_hooks, E_COMP_OBJECT_HOOK_MOVE,  _focus_policy_topmost_hook_cb_comp_object_move, topmost_policy);
 
    return policy_iface;