e_tizen_ws_shell_manager: set/unset the service role at e_policy_desk_area 96/325596/1
authorSooChan Lim <sc1.lim@samsung.com>
Wed, 28 May 2025 12:37:41 +0000 (21:37 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Thu, 12 Jun 2025 10:40:31 +0000 (19:40 +0900)
Move the code setting/unsetting service_role to e_policy_desk_area. This logic
is for the window manager policy, not for the server implementation.

Change-Id: Ic12d56b30d440c1b7aa2cc2323609c8b60e0fc65

src/bin/server/e_tizen_ws_shell_manager.c
src/bin/windowmgr/e_policy_desk_area.c

index d0c414c09b4f2e8e7ae3521b6527614484930840..9d2a48fe7db37dbdee0939aa0eee134b205efee5 100644 (file)
@@ -1,7 +1,6 @@
 #include "e_tizen_ws_shell_manager_intern.h"
 #include "services/e_service_quickpanel_intern.h"
 #include "services/e_service_volume_intern.h"
-#include "services/e_service_lockscreen_intern.h"
 #include "services/e_service_indicator_intern.h"
 #include "services/e_service_scrsaver_intern.h"
 #include "services/e_service_launcher_intern.h"
@@ -384,50 +383,7 @@ _e_tizen_ws_shell_srv_del(E_Tizen_Ws_Shell_Srv *tzsh_srv)
    if (tzsh_srv->name)
      eina_stringshare_del(tzsh_srv->name);
 
-   if (tzsh_srv->role == TZSH_SRV_ROLE_INDICATOR)
-     {
-        E_Client *ec;
-        ec = tzsh_srv->ec;
-
-        if (ec && ec->internal)
-          {
-             e_pixmap_win_id_del(tzsh_srv->ep);
-             e_object_del(E_OBJECT(ec));
-          }
-
-        _indicator_srv_res = NULL;
-     }
-   else if (tzsh_srv->role == TZSH_SRV_ROLE_SOFTKEY)
-     {
-        E_Client *softkey_ec = NULL;
-
-        softkey_ec = tzsh_srv->ec;
-        if (softkey_ec)
-          {
-             e_service_softkey_client_unset(softkey_ec);
-          }
-     }
-   else if (tzsh_srv->role == TZSH_SRV_ROLE_MAGNIFIER)
-     {
-        E_Client *magnifier_ec = NULL;
-
-        magnifier_ec = tzsh_srv->ec;
-        if (magnifier_ec)
-          {
-             e_magnifier_owner_unset(magnifier_ec);
-             e_magnifier_del();
-          }
-     }
-   else if (tzsh_srv->role == TZSH_SRV_ROLE_LAUNCHER)
-     {
-        E_Client *launcher_ec = NULL;
-
-        launcher_ec = tzsh_srv->ec;
-        if (launcher_ec)
-          {
-             e_service_launcher_client_unset(launcher_ec);
-          }
-     }
+   e_client_service_role_unset(tzsh_srv->ec); // unset the service_role of ec
 
    ELOGF("TZSH", "FREE tzsh_srv:%p", tzsh_srv->ec, tzsh_srv);
 
@@ -1719,52 +1675,7 @@ _tzsh_iface_cb_srv_create(struct wl_client *client, struct wl_resource *res_tzsh
                                   tzsh_srv,
                                   _tzsh_cb_srv_destroy);
 
-   if (tzsh_srv->ec && tzsh_srv->ec->maximized)
-     {
-        tzsh_srv->ec->maximize_type = E_MAXIMIZE_TYPE_FULLSCREEN;
-        e_client_maximize(tzsh_srv->ec, tzsh_srv->ec->maximize_type | E_MAXIMIZE_BOTH);
-     }
-
-   if (role == TZSH_SRV_ROLE_QUICKPANEL_SYSTEM_DEFAULT)
-     e_service_quickpanel_client_add(tzsh_srv->ec, E_SERVICE_QUICKPANEL_TYPE_SYSTEM_DEFAULT);
-   else if (role == TZSH_SRV_ROLE_QUICKPANEL_CONTEXT_MENU)
-     e_service_quickpanel_client_add(tzsh_srv->ec, E_SERVICE_QUICKPANEL_TYPE_CONTEXT_MENU);
-   else if (role == TZSH_SRV_ROLE_QUICKPANEL_APPS_MENU)
-     e_service_quickpanel_client_add(tzsh_srv->ec, E_SERVICE_QUICKPANEL_TYPE_APPS_MENU);
-   else if (role == TZSH_SRV_ROLE_VOLUME)
-     e_service_volume_client_set(tzsh_srv->ec);
-   else if (role == TZSH_SRV_ROLE_LOCKSCREEN)
-     e_service_lockscreen_client_set(tzsh_srv->ec);
-   else if (role == TZSH_SRV_ROLE_SCREENSAVER_MNG)
-     e_service_scrsaver_client_set(tzsh_srv->ec);
-   else if (role == TZSH_SRV_ROLE_SCREENSAVER)
-     e_service_scrsaver_client_set(tzsh_srv->ec);
-   else if (role == TZSH_SRV_ROLE_INDICATOR)
-     e_mod_indicator_client_set(tzsh_srv->ec);
-   else if (role == TZSH_SRV_ROLE_CBHM)
-     e_service_cbhm_client_set(tzsh_srv->ec);
-   else if (role == TZSH_SRV_ROLE_SOFTKEY)
-     e_service_softkey_client_set(tzsh_srv->ec);
-   else if (role == TZSH_SRV_ROLE_MAGNIFIER)
-     {
-        e_magnifier_new();
-        e_magnifier_owner_set(tzsh_srv->ec);
-     }
-   else if (role == TZSH_SRV_ROLE_LAUNCHER)
-     e_service_launcher_client_set(tzsh_srv->ec);
-   else if (role == TZSH_SRV_ROLE_TASKBAR)
-     e_service_taskbar_client_set(tzsh_srv->ec);
-   else if (role == TZSH_SRV_ROLE_KVM)
-     {
-        E_Service_Kvm *esk = e_service_kvm_service_get(ec);
-        if (!esk)
-          {
-             esk = e_service_kvm_new();
-             e_service_kvm_client_set(esk, tzsh_srv->ec);
-          }
-     }
-
-   e_client_desk_iconify_skip_set(tzsh_srv->ec, EINA_TRUE);
+   e_client_service_role_set(ec, role); // set service role to e_client
 }
 
 // --------------------------------------------------------
index d09f8d19a6be71e556860aa47b686dd0ef7515fd..c12483be9071a73e32d0410bab1f12aedb797848 100644 (file)
 #include "e_canvas_intern.h"
 #include "e_config_intern.h"
 #include "e_comp_cfdata_intern.h"
-
+#include "services/e_service_quickpanel_intern.h"
+#include "services/e_service_volume_intern.h"
+#include "services/e_service_lockscreen_intern.h"
+#include "services/e_service_indicator_intern.h"
+#include "services/e_service_scrsaver_intern.h"
+#include "services/e_service_launcher_intern.h"
+#include "services/e_service_taskbar_intern.h"
+#include "services/e_service_kvm_intern.h"
+#include "services/e_service_softkey_intern.h"
+#include "services/e_service_cbhm_intern.h"
+#include "e_tizen_ws_shell_manager_intern.h"
+#include "e_magnifier_intern.h"
 
 typedef struct _E_Policy_Desk_Area_Private_Client  E_Policy_Desk_Area_Private_Client;
 
@@ -99,6 +110,7 @@ struct _E_Policy_Desk_Area_Private_Client
 {
    E_Desk_Area *eda;
    E_Client *ec;
+   int service_role;
 
    // client listeners
    struct wl_listener client_destroy;
@@ -124,6 +136,8 @@ struct _E_Policy_Desk_Area_Private_Client
    struct wl_listener delete_request;
    struct wl_listener kill_request;
    struct wl_listener redirect;
+   struct wl_listener client_service_role_set;
+   struct wl_listener client_service_role_unset;
 
    // comp_object listeners
    struct wl_listener comp_object_raise;
@@ -2075,6 +2089,100 @@ _desk_area_cb_client_layer_get(struct wl_listener *listener, void *data)
      layer_data->layer = E_LAYER_BOTTOM; //not on E_LAYER_CLIENT
 }
 
+static void
+_desk_area_cb_client_service_role_set(struct wl_listener *listener, void *data)
+{
+   E_Policy_Desk_Area_Private_Client *eda_client;
+   E_Client *ec;
+   int service_role = *((int *)data);
+
+   eda_client = wl_container_of(listener, eda_client, client_service_role_set);
+   ec = eda_client->ec;
+
+   if (ec->maximized)
+   {
+      ec->maximize_type = E_MAXIMIZE_TYPE_FULLSCREEN;
+      e_client_maximize(ec, ec->maximize_type | E_MAXIMIZE_BOTH);
+   }
+
+   if (service_role == TZSH_SRV_ROLE_QUICKPANEL_SYSTEM_DEFAULT)
+     e_service_quickpanel_client_add(ec, E_SERVICE_QUICKPANEL_TYPE_SYSTEM_DEFAULT);
+   else if (service_role == TZSH_SRV_ROLE_QUICKPANEL_CONTEXT_MENU)
+     e_service_quickpanel_client_add(ec, E_SERVICE_QUICKPANEL_TYPE_CONTEXT_MENU);
+   else if (service_role == TZSH_SRV_ROLE_QUICKPANEL_APPS_MENU)
+     e_service_quickpanel_client_add(ec, E_SERVICE_QUICKPANEL_TYPE_APPS_MENU);
+   else if (service_role == TZSH_SRV_ROLE_VOLUME)
+     e_service_volume_client_set(ec);
+   else if (service_role == TZSH_SRV_ROLE_LOCKSCREEN)
+     e_service_lockscreen_client_set(ec);
+   else if (service_role == TZSH_SRV_ROLE_SCREENSAVER_MNG)
+     e_service_scrsaver_client_set(ec);
+   else if (service_role == TZSH_SRV_ROLE_SCREENSAVER)
+     e_service_scrsaver_client_set(ec);
+   else if (service_role == TZSH_SRV_ROLE_INDICATOR)
+     e_mod_indicator_client_set(ec);
+   else if (service_role == TZSH_SRV_ROLE_CBHM)
+     e_service_cbhm_client_set(ec);
+   else if (service_role == TZSH_SRV_ROLE_SOFTKEY)
+     e_service_softkey_client_set(ec);
+   else if (service_role == TZSH_SRV_ROLE_MAGNIFIER)
+     {
+        e_magnifier_new();
+        e_magnifier_owner_set(ec);
+     }
+   else if (service_role == TZSH_SRV_ROLE_LAUNCHER)
+     e_service_launcher_client_set(ec);
+   else if (service_role == TZSH_SRV_ROLE_TASKBAR)
+     e_service_taskbar_client_set(ec);
+   else if (service_role == TZSH_SRV_ROLE_KVM)
+     {
+        E_Service_Kvm *esk = e_service_kvm_service_get(ec);
+        if (!esk)
+          {
+             esk = e_service_kvm_new();
+             e_service_kvm_client_set(esk, ec);
+          }
+     }
+
+   e_client_desk_iconify_skip_set(ec, EINA_TRUE);
+
+   eda_client->service_role = service_role; // assign the service_role
+}
+
+static void
+_desk_area_cb_client_service_role_unset(struct wl_listener *listener, void *data)
+{
+   E_Policy_Desk_Area_Private_Client *eda_client;
+   E_Client *ec;
+   int service_role;
+
+   eda_client = wl_container_of(listener, eda_client, client_service_role_unset);
+   ec = eda_client->ec;
+
+   service_role = eda_client->service_role;
+
+   if (service_role == TZSH_SRV_ROLE_INDICATOR)
+     {
+        if (ec->internal)
+          {
+             e_pixmap_win_id_del(e_client_pixmap_get(ec));
+             e_object_del(E_OBJECT(ec));
+          }
+     }
+   else if (service_role == TZSH_SRV_ROLE_SOFTKEY)
+     {
+        e_service_softkey_client_unset(ec);
+     }
+   else if (service_role == TZSH_SRV_ROLE_MAGNIFIER)
+     {
+        e_magnifier_owner_unset(ec);
+        e_magnifier_del();
+     }
+   else if (service_role == TZSH_SRV_ROLE_LAUNCHER)
+     {
+        e_service_launcher_client_unset(ec);
+     }
+}
 
 static void
 _e_policy_desk_area_configure_send(E_Client *ec, Eina_Bool edges, Eina_Bool send_size)
@@ -2885,6 +2993,10 @@ _e_policy_desk_area_private_client_new(E_Client *ec)
    e_client_set_layer_listener_add(ec, &eda_client->client_layer_set);
    eda_client->client_layer_get.notify = _desk_area_cb_client_layer_get;
    e_client_get_layer_listener_add(ec, &eda_client->client_layer_get);
+   eda_client->client_service_role_set.notify = _desk_area_cb_client_service_role_set;
+   e_client_service_role_set_listener_add(ec, &eda_client->client_service_role_set);
+   eda_client->client_service_role_unset.notify = _desk_area_cb_client_service_role_unset;
+   e_client_service_role_unset_listener_add(ec, &eda_client->client_service_role_unset);
 
    // e_comp_object listeners
    eda_client->comp_object_lower.notify = _desk_area_cb_comp_object_lower;
@@ -2944,6 +3056,8 @@ _e_policy_desk_area_private_client_del(E_Policy_Desk_Area_Private_Client *eda_cl
    wl_list_remove(&eda_client->comp_object_lower.link);
    wl_list_remove(&eda_client->comp_object_raise.link);
 
+   wl_list_remove(&eda_client->client_service_role_unset.link);
+   wl_list_remove(&eda_client->client_service_role_set.link);
    wl_list_remove(&eda_client->client_layer_get.link);
    wl_list_remove(&eda_client->client_layer_set.link);
    wl_list_remove(&eda_client->client_resize_end.link);