e_focus_policy_history: make a E_POLICY_HOOK_CLIENT_STACK_TRANSIENT_FOR_DONE callback 29/297529/1
authorSooChan Lim <sc1.lim@samsung.com>
Thu, 10 Aug 2023 00:58:14 +0000 (09:58 +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_POLICY_HOOK_CLIENT_STACK_TRANSIENT_FOR_DONE callback.

Change-Id: I19b29de877dd66fcd62e1d73ecc1b410424d8ad8

src/bin/e_focus_policy_history.c
src/bin/e_policy.c
src/bin/e_policy.h
src/bin/e_policy_stack.c

index df03347..cd30f52 100644 (file)
@@ -14,6 +14,7 @@ struct _E_Focus_Policy_History_Impl
    Eina_List *ec_hooks;
    Eina_List *co_hooks;
    Eina_List *zone_hooks;
+   Eina_List *policy_hooks;
 };
 
 static void
@@ -151,6 +152,12 @@ _focus_policy_history_hook_cb_zone_focus_reset(void *data, E_Zone *zone)
 }
 
 static void
+_focus_policy_history_hook_cb_policy_client_stack_transient_for_done(void *data, E_Client *ec)
+{
+   // TODO:
+}
+
+static void
 _focus_policy_history_del(E_Focus_Policy_Impl *impl)
 {
    E_Focus_Policy_History *history_policy = (E_Focus_Policy_History *)impl;
@@ -198,6 +205,7 @@ e_focus_policy_iface_history_new(E_Zone* zone)
    E_Focus_Policy_Iface *policy_iface;
    E_Focus_Policy_History *history_policy;
    E_Zone_Hook *zone_hook;
+   E_Policy_Hook *policy_hook;
 
    policy_iface = E_NEW(E_Focus_Policy_Iface, 1);
    EINA_SAFETY_ON_NULL_RETURN_VAL(policy_iface, NULL);
@@ -232,6 +240,10 @@ e_focus_policy_iface_history_new(E_Zone* zone)
    zone_hook = e_zone_hook_add(E_ZONE_HOOK_FOCUS_RESET, _focus_policy_history_hook_cb_zone_focus_reset, history_policy);
    if (zone_hook) history_policy->zone_hooks = eina_list_append(history_policy->zone_hooks, zone_hook);
 
+   // e_policy hooks
+   policy_hook = e_policy_hook_add(E_POLICY_HOOK_CLIENT_STACK_TRANSIENT_FOR_DONE, _focus_policy_history_hook_cb_policy_client_stack_transient_for_done, history_policy);
+   if (policy_hook) history_policy->policy_hooks = eina_list_append(history_policy->zone_hooks, policy_hook);
+
    return policy_iface;
 
 fail:
index 694b365..d4d231a 100644 (file)
@@ -48,6 +48,9 @@ static Eina_Inlist *_e_policy_hooks[] =
    [E_POLICY_HOOK_CLIENT_ROTATION_GEOMETRY_SET] = NULL,
    [E_POLICY_HOOK_CLIENT_STACK_MODE_SET] = NULL,
    [E_POLICY_HOOK_CLIENT_AUX_HINT_CHANGED] = NULL,
+//#ifdef REFACTOR_FOCUS_POLICY
+   [E_POLICY_HOOK_CLIENT_STACK_TRANSIENT_FOR_DONE] = NULL,
+//#endif
 };
 
 E_API int E_EVENT_POLICY_QUICKPANEL_VISIBLE_STATE_CHANGE = -1;
index fe2dc73..d055124 100644 (file)
@@ -43,6 +43,9 @@ typedef enum _E_Policy_Hook_Point
    E_POLICY_HOOK_CLIENT_ROTATION_GEOMETRY_SET,
    E_POLICY_HOOK_CLIENT_STACK_MODE_SET,
    E_POLICY_HOOK_CLIENT_AUX_HINT_CHANGED,
+//#ifdef REFACTOR_FOCUS_POLICY
+   E_POLICY_HOOK_CLIENT_STACK_TRANSIENT_FOR_DONE,
+//#endif
    E_POLICY_HOOK_LAST
 } E_Policy_Hook_Point;
 
index b6ea178..1138278 100644 (file)
@@ -229,6 +229,10 @@ _e_policy_stack_transient_for_apply(E_Client *ec)
              ec->post_lower = EINA_FALSE;
           }
      }
+
+#ifdef REFACTOR_FOCUS_POLICY
+   e_policy_hook_call(E_POLICY_HOOK_CLIENT_STACK_TRANSIENT_FOR_DONE, ec);
+#endif
 }
 
 Eina_Bool
@@ -251,7 +255,10 @@ _e_policy_stack_transient_for_tree_check(E_Client *child, E_Client *parent)
 static void
 _e_policy_stack_fetch_transient(E_Client *ec)
 {
+#ifdef REFACTOR_FOCUS_POLICY
+#else
    E_Client *new_focus = NULL;
+#endif
    E_Client *parent = NULL;
 
    if (!ec->icccm.fetch.transient_for) return;
@@ -283,6 +290,9 @@ _e_policy_stack_fetch_transient(E_Client *ec)
 
    _e_policy_stack_transient_for_apply(ec);
 
+#ifdef REFACTOR_FOCUS_POLICY
+   // This code executes E_POLICY_HOOK_CLIENT_STACK_TRANSIENT_FOR_DONE callback at e_focus_policy_history.c
+#else
    if (ec->parent)
      {
         if (ec->parent == e_client_focused_get())
@@ -298,6 +308,7 @@ _e_policy_stack_fetch_transient(E_Client *ec)
                }
           }
      }
+#endif
 
    ec->icccm.fetch.transient_for = EINA_FALSE;
 }