e_zone: add E_CLIENT_HOOK_STICK callback 09/298209/1
authorSooChan Lim <sc1.lim@samsung.com>
Fri, 25 Aug 2023 07:55:42 +0000 (16:55 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Mon, 4 Sep 2023 02:36:41 +0000 (11:36 +0900)
Move the client's actions at e_client to e_zone.

Change-Id: I470fd45f98b4fe285bf58425324a999dcff1ae19

src/bin/e_client.c
src/bin/e_zone.c

index eae998b..6283a41 100644 (file)
@@ -5678,31 +5678,11 @@ e_client_urgent_set(E_Client *ec, Eina_Bool urgent)
 EINTERN void
 e_client_stick(E_Client *ec)
 {
-   E_Desk *desk;
-
    E_OBJECT_CHECK(ec);
    E_OBJECT_TYPE_CHECK(ec, E_CLIENT_TYPE);
    if (ec->sticky) return;
-   desk = ec->desk;
-   ec->desk = NULL;
-   ec->sticky = 1;
-   ec->hidden = 0;
-   e_client_desk_set(ec, desk);
-   evas_object_smart_callback_call(ec->frame, "stick", NULL);
-
-   if (e_config->transient.desktop)
-     {
-        E_Client *child;
-        Eina_List *list = eina_list_clone(ec->transients);
-
-        EINA_LIST_FREE(list, child)
-          {
-             child->sticky = 1;
-             evas_object_show(ec->frame);
-          }
-     }
 
-    // call the stick hook of a client
+   // call the stick hook of a client
    _e_client_hook_call(E_CLIENT_HOOK_STICK, ec);
 
    // send the sticky property event of a client
index e585ba6..9ba42fa 100644 (file)
@@ -457,6 +457,45 @@ _e_zone_cb_hook_client_uniconify(void *d, E_Client *ec)
 }
 
 static void
+_e_zone_cb_hook_client_stick(void *d, E_Client *ec)
+{
+   E_Zone *zone;
+   E_Desk *desk;
+
+   EINA_SAFETY_ON_NULL_RETURN(ec);
+
+   zone = (E_Zone *)d;
+   EINA_SAFETY_ON_NULL_RETURN(zone);
+
+   // FIXME: A ec is set the current zone now.
+   //        We need to make a policy for the placement of the ec at the zone.
+   if (zone != e_zone_current_get()) return;
+
+   desk = e_zone_desk_find_by_ec(zone, ec);
+   EINA_SAFETY_ON_NULL_RETURN(desk);
+
+   e_desk_client_del(desk, ec);
+   ec->sticky = 1;
+   ec->hidden = 0;
+
+   e_client_desk_set(ec, desk);
+
+   evas_object_smart_callback_call(ec->frame, "stick", NULL);
+
+   if (e_config->transient.desktop)
+     {
+        E_Client *child;
+        Eina_List *list = eina_list_clone(ec->transients);
+
+        EINA_LIST_FREE(list, child)
+          {
+             child->sticky = 1;
+             evas_object_show(ec->frame);
+          }
+     }
+}
+
+static void
 _e_zone_client_data_set(E_Zone *zone, E_Client *ec)
 {
   E_Zone *data;
@@ -565,6 +604,7 @@ e_zone_new(int num, int id, int x, int y, int w, int h)
    E_LIST_HOOK_APPEND(zone->ec_hooks, E_CLIENT_HOOK_EVAL_POST_NEW_CLIENT, _e_zone_cb_hook_client_eval_post_new_client, zone);
    E_LIST_HOOK_APPEND(zone->ec_hooks, E_CLIENT_HOOK_FOCUS_SET, _e_zone_cb_hook_client_focus_set, zone);
    E_LIST_HOOK_APPEND(zone->ec_hooks, E_CLIENT_HOOK_UNICONIFY, _e_zone_cb_hook_client_uniconify, zone);
+   E_LIST_HOOK_APPEND(zone->ec_hooks, E_CLIENT_HOOK_STICK, _e_zone_cb_hook_client_stick, zone);
 
    if (starting) return zone;