e_focus_policy_history: implement comp_object_show callback 50/297550/1
authorSooChan Lim <sc1.lim@samsung.com>
Thu, 10 Aug 2023 07:30:51 +0000 (16:30 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Mon, 21 Aug 2023 07:58:39 +0000 (16:58 +0900)
Add the code at the hooks call of E_COMP_OBJECT_HOOK_SHOW.

Change-Id: I942129cfcc6c939433010a92ac79567c66840ddd

src/bin/e_focus_policy_history.c

index e55fa36..9bd98a5 100644 (file)
@@ -606,7 +606,42 @@ _focus_policy_history_hook_cb_comp_object_move(void *data, E_Client *ec)
 static Eina_Bool
 _focus_policy_history_hook_cb_comp_object_show(void *data, E_Client *ec)
 {
-   // TODO:
+   E_Focus_Policy_History *history_policy;
+   Eina_List *focus_stack;
+   E_Client *focused_ec, *temp_ec;
+   Eina_List *l;
+
+   history_policy = (E_Focus_Policy_History *)data;
+   if (!history_policy) return EINA_TRUE;
+
+   focused_ec = history_policy->focused_ec;
+   focus_stack = history_policy->focus_stack;
+
+   if (!e_client_is_iconified_by_client(ec)||
+       e_policy_visibility_client_is_uniconic(ec))
+    {
+       if (!ec->iconic ||
+           e_policy_visibility_client_is_uniconic(ec))
+         {
+            if (ec->exp_iconify.not_raise &&
+                e_client_check_above_focused(ec))
+              {
+                 //e_client_focus_stack_append_current_focused(ec);
+                 focus_stack = eina_list_remove(focus_stack, ec);
+                 EINA_LIST_FOREACH(focus_stack, l, temp_ec)
+                   {
+                      if (temp_ec != focused_ec) continue;
+
+                      focus_stack = eina_list_append_relative_list(focus_stack, ec, l);
+                      break;
+                   }
+                 focus_stack = eina_list_prepend(focus_stack, ec);
+              }
+            else
+               _e_focus_policy_history_focus_defer_unset(history_policy, ec);
+
+         }
+    }
 
    return EINA_TRUE;
 }