e_tizen_wl_shell: make e_tizen_wl_shell_kvm.c file 06/325606/1
authorSooChan Lim <sc1.lim@samsung.com>
Fri, 30 May 2025 06:45:05 +0000 (15:45 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Thu, 12 Jun 2025 10:40:32 +0000 (19:40 +0900)
Move the kvm impelementation to this e_tizen_ws_shell_kvm.c file.

Change-Id: I17ff858ab55d6559710885cc3970bb2a9aaa9b73

src/bin/Makefile.mk
src/bin/meson.build
src/bin/server/e_tizen_ws_shell_manager.c
src/bin/server/e_tizen_ws_shell_srv_kvm.c [new file with mode: 0644]
src/bin/server/e_tizen_ws_shell_srv_kvm_intern.h [new file with mode: 0644]

index 5e4b62587cb12d2efa6c4982ab2bdc7cca80658c..47688a49f47a9f71cd49f641538b9835d60fcd40 100644 (file)
@@ -215,6 +215,7 @@ src/bin/server/e_tizen_ws_shell_srv_softkey.c \
 src/bin/server/e_tizen_ws_shell_srv_magnifier.c \
 src/bin/server/e_tizen_ws_shell_srv_launcher.c \
 src/bin/server/e_tizen_ws_shell_srv_taskbar.c \
+src/bin/server/e_tizen_ws_shell_srv_kvm.c \
 src/bin/server/e_tizen_indicator.c \
 src/bin/server/e_tizen_clipboard.c \
 src/bin/server/e_surface_view.c \
index 3a1116d292342d1e6eb72f19bf49a05d8cb5f11c..2823084620b76ddf37f64e54c0b4b592d86674ce 100644 (file)
@@ -219,6 +219,7 @@ e_sources = [
   'server/e_tizen_ws_shell_srv_magnifier.c',
   'server/e_tizen_ws_shell_srv_launcher.c',
   'server/e_tizen_ws_shell_srv_taskbar.c',
+  'server/e_tizen_ws_shell_srv_kvm.c',
   'server/e_tizen_indicator.c',
   'server/e_tizen_clipboard.c',
   'server/e_surface_view.c',
index bab5210ba271e36585d125aa1abf4786da93a894..ff1129c02935eb0f611021d9d4713159d47fe670 100644 (file)
@@ -2,10 +2,8 @@
 #include "services/e_service_quickpanel_intern.h"
 #include "services/e_service_volume_intern.h"
 #include "services/e_service_launcher_intern.h"
-#include "services/e_service_kvm_intern.h"
 #include "services/e_service_softkey_intern.h"
 #include "e_comp_intern.h"
-#include "e_comp_wl_intern.h"
 #include "e_pixmap_intern.h"
 #include "e_zone_intern.h"
 #include "e_utils_intern.h"
@@ -22,6 +20,7 @@
 #include "e_tizen_ws_shell_srv_magnifier_intern.h"
 #include "e_tizen_ws_shell_srv_launcher_intern.h"
 #include "e_tizen_ws_shell_srv_taskbar_intern.h"
+#include "e_tizen_ws_shell_srv_kvm_intern.h"
 
 #include <tzsh_server.h>
 
@@ -871,200 +870,10 @@ _tzsh_srv_iface_cb_taskbar_get(struct wl_client *client, struct wl_resource *res
      }
 }
 
-static void
-_tzsh_srv_kvm_cb_destroy(struct wl_client *client EINA_UNUSED, struct wl_resource *resource)
-{
-   E_Tizen_Ws_Shell_Srv *tzsh_srv;
-   E_Service_Kvm *esk;
-   E_Client *ec;
-
-   tzsh_srv = wl_resource_get_user_data(resource);
-   EINA_SAFETY_ON_NULL_GOTO(tzsh_srv, res_destroy);
-
-   ec = tzsh_srv->ec;
-   EINA_SAFETY_ON_NULL_GOTO(ec, res_destroy);
-
-   esk = e_service_kvm_service_get(ec);
-   EINA_SAFETY_ON_NULL_GOTO(esk, res_destroy);
-
-   e_service_kvm_del(esk);
-
-res_destroy :
-   wl_resource_destroy(resource);
-}
-
-static void
-_tzsh_srv_kvm_cb_perform_drop(struct wl_client *client EINA_UNUSED, struct wl_resource *resource)
-{
-   E_Tizen_Ws_Shell_Srv *tzsh_srv;
-   E_Comp_Wl_Data *comp_wl;
-   E_Service_Kvm *esk;
-   E_Client *ec;
-
-   comp_wl = e_comp_wl_get();
-   if (!comp_wl->drag) return;
-
-   tzsh_srv = wl_resource_get_user_data(resource);
-   EINA_SAFETY_ON_NULL_RETURN(tzsh_srv);
-
-   ec = tzsh_srv->ec;
-   EINA_SAFETY_ON_NULL_RETURN(ec);
-
-   esk = e_service_kvm_service_get(ec);
-   EINA_SAFETY_ON_NULL_RETURN(esk);
-
-   e_service_kvm_drop_perform(esk, E_SERVICE_KVM_DROP_TARGET_KVM_SERVICE);
-}
-
-static void
-_tzsh_srv_kvm_cb_cancel_drag(struct wl_client *client EINA_UNUSED, struct wl_resource *resource)
-{
-   E_Tizen_Ws_Shell_Srv *tzsh_srv;
-   E_Comp_Wl_Data *comp_wl;
-   E_Service_Kvm *esk;
-   E_Client *ec;
-
-   comp_wl = e_comp_wl_get();
-   if (!comp_wl->drag) return;
-
-   tzsh_srv = wl_resource_get_user_data(resource);
-   EINA_SAFETY_ON_NULL_RETURN(tzsh_srv);
-
-   ec = tzsh_srv->ec;
-   EINA_SAFETY_ON_NULL_RETURN(ec);
-
-   esk = e_service_kvm_service_get(ec);
-   EINA_SAFETY_ON_NULL_RETURN(esk);
-
-   e_service_kvm_drag_cancel(esk);
-}
-
-static void
-_tzsh_srv_kvm_cb_perform_drag_enter(struct wl_client *client EINA_UNUSED, struct wl_resource *resource)
-{
-   E_Tizen_Ws_Shell_Srv *tzsh_srv;
-   E_Comp_Wl_Data *comp_wl;
-   E_Service_Kvm *esk;
-   E_Client *ec;
-
-   comp_wl = e_comp_wl_get();
-   if (!comp_wl->drag) return;
-
-   tzsh_srv = wl_resource_get_user_data(resource);
-   EINA_SAFETY_ON_NULL_RETURN(tzsh_srv);
-
-   ec = tzsh_srv->ec;
-   EINA_SAFETY_ON_NULL_RETURN(ec);
-
-   esk = e_service_kvm_service_get(ec);
-   EINA_SAFETY_ON_NULL_RETURN(esk);
-
-   e_service_kvm_perform_drag_enter(esk);
-}
-
-static void
-_tzsh_srv_kvm_cb_perform_drag_leave(struct wl_client *client EINA_UNUSED, struct wl_resource *resource)
-{
-   E_Tizen_Ws_Shell_Srv *tzsh_srv;
-   E_Comp_Wl_Data *comp_wl;
-   E_Service_Kvm *esk;
-   E_Client *ec;
-
-   comp_wl = e_comp_wl_get();
-   if (!comp_wl->drag) return;
-
-   tzsh_srv = wl_resource_get_user_data(resource);
-   EINA_SAFETY_ON_NULL_RETURN(tzsh_srv);
-
-   ec = tzsh_srv->ec;
-   EINA_SAFETY_ON_NULL_RETURN(ec);
-
-   esk = e_service_kvm_service_get(ec);
-   EINA_SAFETY_ON_NULL_RETURN(esk);
-
-   e_service_kvm_perform_drag_leave(esk);
-}
-
-static void
-_tzsh_srv_kvm_cb_secondary_selection_set(struct wl_client *client EINA_UNUSED, struct wl_resource *resource)
-{
-   E_Tizen_Ws_Shell_Srv *tzsh_srv;
-   E_Service_Kvm *esk;
-   E_Client *ec;
-
-   tzsh_srv = wl_resource_get_user_data(resource);
-   EINA_SAFETY_ON_NULL_RETURN(tzsh_srv);
-
-   ec = tzsh_srv->ec;
-   EINA_SAFETY_ON_NULL_RETURN(ec);
-
-   esk = e_service_kvm_service_get(ec);
-   EINA_SAFETY_ON_NULL_RETURN(esk);
-
-   e_service_kvm_secondary_selection_set(esk, EINA_TRUE);
-}
-
-static void
-_tzsh_srv_kvm_cb_secondary_selection_unset(struct wl_client *client EINA_UNUSED, struct wl_resource *resource)
-{
-   E_Tizen_Ws_Shell_Srv *tzsh_srv;
-   E_Service_Kvm *esk;
-   E_Client *ec;
-
-   tzsh_srv = wl_resource_get_user_data(resource);
-   EINA_SAFETY_ON_NULL_RETURN(tzsh_srv);
-
-   ec = tzsh_srv->ec;
-   EINA_SAFETY_ON_NULL_RETURN(ec);
-
-   esk = e_service_kvm_service_get(ec);
-   EINA_SAFETY_ON_NULL_RETURN(esk);
-
-   e_service_kvm_secondary_selection_set(esk, EINA_FALSE);
-}
-
-static void
-_tzsh_srv_kvm_cb_perform_drop_target(struct wl_client *client EINA_UNUSED, struct wl_resource *resource, uint32_t drop_target)
-{
-   E_Tizen_Ws_Shell_Srv *tzsh_srv;
-   E_Comp_Wl_Data *comp_wl;
-   E_Service_Kvm *esk;
-   E_Client *ec;
-
-   comp_wl = e_comp_wl_get();
-   if (!comp_wl->drag) return;
-
-   tzsh_srv = wl_resource_get_user_data(resource);
-   EINA_SAFETY_ON_NULL_RETURN(tzsh_srv);
-
-   ec = tzsh_srv->ec;
-   EINA_SAFETY_ON_NULL_RETURN(ec);
-
-   esk = e_service_kvm_service_get(ec);
-   EINA_SAFETY_ON_NULL_RETURN(esk);
-
-   e_service_kvm_drop_perform(esk, drop_target);
-}
-
-static const struct tws_service_kvm_interface _tzsh_srv_kvm_iface =
-{
-   _tzsh_srv_kvm_cb_destroy,
-   _tzsh_srv_kvm_cb_perform_drop,
-   _tzsh_srv_kvm_cb_cancel_drag,
-   _tzsh_srv_kvm_cb_perform_drag_enter,
-   _tzsh_srv_kvm_cb_perform_drag_leave,
-   _tzsh_srv_kvm_cb_secondary_selection_set,
-   _tzsh_srv_kvm_cb_secondary_selection_unset,
-   _tzsh_srv_kvm_cb_perform_drop_target,
-};
-
 static void
 _tzsh_srv_iface_cb_kvm_get(struct wl_client *client, struct wl_resource *res_tzsh_srv, uint32_t id)
 {
-   E_Service_Kvm *esk = NULL;
    E_Tizen_Ws_Shell_Srv *tzsh_srv;
-   struct wl_resource *res;
-   E_Client *ec;
 
    tzsh_srv = wl_resource_get_user_data(res_tzsh_srv);
    EINA_SAFETY_ON_NULL_RETURN(tzsh_srv);
@@ -1073,29 +882,24 @@ _tzsh_srv_iface_cb_kvm_get(struct wl_client *client, struct wl_resource *res_tzs
    if (!eina_list_data_find(g_tizen_ws_shell_mgr->tzsh_srvs, tzsh_srv))
      return;
 
-   res = wl_resource_create(client,
-                            &tws_service_kvm_interface,
-                            2,
-                            id);
-   if (!res)
+   if (tzsh_srv->role != TZSH_SRV_ROLE_KVM)
      {
-        wl_client_post_no_memory(client);
+        ERR("Could not find kvm service");
+        tizen_ws_shell_send_error(res_tzsh_srv,
+                                   TIZEN_WS_SHELL_ERROR_NO_SERVICE);
         return;
      }
 
-   ELOGF("KVM", "multi control resource created, res:%p, tzsh_srv:%p, res_tzsh_srv:%p", NULL, res, tzsh_srv, res_tzsh_srv);
-
-   ec = tzsh_srv->ec;
-   if (ec)
-     esk = e_service_kvm_service_get(ec);
+   tzsh_srv->client = client;
+   tzsh_srv->id = id;
 
-   if (esk)
+   if (!e_tizen_ws_shell_srv_kvm_init(tzsh_srv))
      {
-        ELOGF("KVM", "multi control resource set. res:%p, service:%p, ec:%p", NULL, res, esk, ec);
-        e_service_kvm_wl_resource_set(esk, res);
+        ERR("e_tizen_ws_shell_srv_kvm_init() failed.");
+        tizen_ws_shell_send_error(res_tzsh_srv,
+                                  TIZEN_WS_SHELL_ERROR_NOT_SUPPORTED);
+        return;
      }
-
-   wl_resource_set_implementation(res, &_tzsh_srv_kvm_iface, tzsh_srv, NULL);
 }
 
 static const struct tws_service_interface _tzsh_srv_iface =
diff --git a/src/bin/server/e_tizen_ws_shell_srv_kvm.c b/src/bin/server/e_tizen_ws_shell_srv_kvm.c
new file mode 100644 (file)
index 0000000..11e1d21
--- /dev/null
@@ -0,0 +1,235 @@
+#include "e_tizen_ws_shell_srv_kvm_intern.h"
+#include "services/e_service_kvm_intern.h"
+#include "e_comp_wl_intern.h"
+
+#include <tzsh_server.h>
+
+static void
+_tzsh_srv_kvm_cb_destroy(struct wl_client *client EINA_UNUSED, struct wl_resource *resource)
+{
+   E_Tizen_Ws_Shell_Srv *tzsh_srv;
+   E_Service_Kvm *esk;
+   E_Client *ec;
+
+   tzsh_srv = wl_resource_get_user_data(resource);
+   EINA_SAFETY_ON_NULL_GOTO(tzsh_srv, res_destroy);
+
+   ec = tzsh_srv->ec;
+   EINA_SAFETY_ON_NULL_GOTO(ec, res_destroy);
+
+   esk = e_service_kvm_service_get(ec);
+   EINA_SAFETY_ON_NULL_GOTO(esk, res_destroy);
+
+   e_service_kvm_del(esk);
+
+res_destroy :
+   wl_resource_destroy(resource);
+}
+
+static void
+_tzsh_srv_kvm_cb_perform_drop(struct wl_client *client EINA_UNUSED, struct wl_resource *resource)
+{
+   E_Tizen_Ws_Shell_Srv *tzsh_srv;
+   E_Comp_Wl_Data *comp_wl;
+   E_Service_Kvm *esk;
+   E_Client *ec;
+
+   comp_wl = e_comp_wl_get();
+   if (!comp_wl->drag) return;
+
+   tzsh_srv = wl_resource_get_user_data(resource);
+   EINA_SAFETY_ON_NULL_RETURN(tzsh_srv);
+
+   ec = tzsh_srv->ec;
+   EINA_SAFETY_ON_NULL_RETURN(ec);
+
+   esk = e_service_kvm_service_get(ec);
+   EINA_SAFETY_ON_NULL_RETURN(esk);
+
+   e_service_kvm_drop_perform(esk, E_SERVICE_KVM_DROP_TARGET_KVM_SERVICE);
+}
+
+static void
+_tzsh_srv_kvm_cb_cancel_drag(struct wl_client *client EINA_UNUSED, struct wl_resource *resource)
+{
+   E_Tizen_Ws_Shell_Srv *tzsh_srv;
+   E_Comp_Wl_Data *comp_wl;
+   E_Service_Kvm *esk;
+   E_Client *ec;
+
+   comp_wl = e_comp_wl_get();
+   if (!comp_wl->drag) return;
+
+   tzsh_srv = wl_resource_get_user_data(resource);
+   EINA_SAFETY_ON_NULL_RETURN(tzsh_srv);
+
+   ec = tzsh_srv->ec;
+   EINA_SAFETY_ON_NULL_RETURN(ec);
+
+   esk = e_service_kvm_service_get(ec);
+   EINA_SAFETY_ON_NULL_RETURN(esk);
+
+   e_service_kvm_drag_cancel(esk);
+}
+
+static void
+_tzsh_srv_kvm_cb_perform_drag_enter(struct wl_client *client EINA_UNUSED, struct wl_resource *resource)
+{
+   E_Tizen_Ws_Shell_Srv *tzsh_srv;
+   E_Comp_Wl_Data *comp_wl;
+   E_Service_Kvm *esk;
+   E_Client *ec;
+
+   comp_wl = e_comp_wl_get();
+   if (!comp_wl->drag) return;
+
+   tzsh_srv = wl_resource_get_user_data(resource);
+   EINA_SAFETY_ON_NULL_RETURN(tzsh_srv);
+
+   ec = tzsh_srv->ec;
+   EINA_SAFETY_ON_NULL_RETURN(ec);
+
+   esk = e_service_kvm_service_get(ec);
+   EINA_SAFETY_ON_NULL_RETURN(esk);
+
+   e_service_kvm_perform_drag_enter(esk);
+}
+
+static void
+_tzsh_srv_kvm_cb_perform_drag_leave(struct wl_client *client EINA_UNUSED, struct wl_resource *resource)
+{
+   E_Tizen_Ws_Shell_Srv *tzsh_srv;
+   E_Comp_Wl_Data *comp_wl;
+   E_Service_Kvm *esk;
+   E_Client *ec;
+
+   comp_wl = e_comp_wl_get();
+   if (!comp_wl->drag) return;
+
+   tzsh_srv = wl_resource_get_user_data(resource);
+   EINA_SAFETY_ON_NULL_RETURN(tzsh_srv);
+
+   ec = tzsh_srv->ec;
+   EINA_SAFETY_ON_NULL_RETURN(ec);
+
+   esk = e_service_kvm_service_get(ec);
+   EINA_SAFETY_ON_NULL_RETURN(esk);
+
+   e_service_kvm_perform_drag_leave(esk);
+}
+
+static void
+_tzsh_srv_kvm_cb_secondary_selection_set(struct wl_client *client EINA_UNUSED, struct wl_resource *resource)
+{
+   E_Tizen_Ws_Shell_Srv *tzsh_srv;
+   E_Service_Kvm *esk;
+   E_Client *ec;
+
+   tzsh_srv = wl_resource_get_user_data(resource);
+   EINA_SAFETY_ON_NULL_RETURN(tzsh_srv);
+
+   ec = tzsh_srv->ec;
+   EINA_SAFETY_ON_NULL_RETURN(ec);
+
+   esk = e_service_kvm_service_get(ec);
+   EINA_SAFETY_ON_NULL_RETURN(esk);
+
+   e_service_kvm_secondary_selection_set(esk, EINA_TRUE);
+}
+
+static void
+_tzsh_srv_kvm_cb_secondary_selection_unset(struct wl_client *client EINA_UNUSED, struct wl_resource *resource)
+{
+   E_Tizen_Ws_Shell_Srv *tzsh_srv;
+   E_Service_Kvm *esk;
+   E_Client *ec;
+
+   tzsh_srv = wl_resource_get_user_data(resource);
+   EINA_SAFETY_ON_NULL_RETURN(tzsh_srv);
+
+   ec = tzsh_srv->ec;
+   EINA_SAFETY_ON_NULL_RETURN(ec);
+
+   esk = e_service_kvm_service_get(ec);
+   EINA_SAFETY_ON_NULL_RETURN(esk);
+
+   e_service_kvm_secondary_selection_set(esk, EINA_FALSE);
+}
+
+static void
+_tzsh_srv_kvm_cb_perform_drop_target(struct wl_client *client EINA_UNUSED, struct wl_resource *resource, uint32_t drop_target)
+{
+   E_Tizen_Ws_Shell_Srv *tzsh_srv;
+   E_Comp_Wl_Data *comp_wl;
+   E_Service_Kvm *esk;
+   E_Client *ec;
+
+   comp_wl = e_comp_wl_get();
+   if (!comp_wl->drag) return;
+
+   tzsh_srv = wl_resource_get_user_data(resource);
+   EINA_SAFETY_ON_NULL_RETURN(tzsh_srv);
+
+   ec = tzsh_srv->ec;
+   EINA_SAFETY_ON_NULL_RETURN(ec);
+
+   esk = e_service_kvm_service_get(ec);
+   EINA_SAFETY_ON_NULL_RETURN(esk);
+
+   e_service_kvm_drop_perform(esk, drop_target);
+}
+
+static const struct tws_service_kvm_interface _tzsh_srv_kvm_iface =
+{
+   _tzsh_srv_kvm_cb_destroy,
+   _tzsh_srv_kvm_cb_perform_drop,
+   _tzsh_srv_kvm_cb_cancel_drag,
+   _tzsh_srv_kvm_cb_perform_drag_enter,
+   _tzsh_srv_kvm_cb_perform_drag_leave,
+   _tzsh_srv_kvm_cb_secondary_selection_set,
+   _tzsh_srv_kvm_cb_secondary_selection_unset,
+   _tzsh_srv_kvm_cb_perform_drop_target,
+};
+
+EINTERN Eina_Bool
+e_tizen_ws_shell_srv_kvm_init(E_Tizen_Ws_Shell_Srv *tzsh_srv)
+{
+   struct wl_client *client;
+   struct wl_resource *res;
+   uint32_t id;
+   E_Service_Kvm *esk = NULL;
+   E_Client *ec;
+
+   EINA_SAFETY_ON_NULL_RETURN_VAL(tzsh_srv, EINA_FALSE);
+
+   client = tzsh_srv->client;
+   id = tzsh_srv->id;
+
+   res = wl_resource_create(client,
+                            &tws_service_kvm_interface,
+                            2,
+                            id);
+   if (!res)
+     {
+        wl_client_post_no_memory(client);
+        return EINA_FALSE;
+     }
+
+   ELOGF("KVM", "multi control resource created, res:%p, tzsh_srv:%p", NULL,
+         res, tzsh_srv);
+
+   ec = tzsh_srv->ec;
+   if (ec)
+     esk = e_service_kvm_service_get(ec);
+
+   if (esk)
+     {
+        ELOGF("KVM", "multi control resource set. res:%p, service:%p, ec:%p",  NULL,
+              res, esk, ec);
+        e_service_kvm_wl_resource_set(esk, res);
+     }
+
+   wl_resource_set_implementation(res, &_tzsh_srv_kvm_iface, tzsh_srv, NULL);
+
+   return EINA_TRUE;
+}
diff --git a/src/bin/server/e_tizen_ws_shell_srv_kvm_intern.h b/src/bin/server/e_tizen_ws_shell_srv_kvm_intern.h
new file mode 100644 (file)
index 0000000..5a29fa2
--- /dev/null
@@ -0,0 +1,9 @@
+#ifndef E_TIZEN_WS_SHELL_SRV_KVM_INTERN_H
+#define E_TIZEN_WS_SHELL_SRV_KVM_INTERN_H
+
+#include "e_intern.h"
+#include "e_tizen_ws_shell_manager_intern.h"
+
+EINTERN Eina_Bool e_tizen_ws_shell_srv_kvm_init(E_Tizen_Ws_Shell_Srv *tzsh_srv);
+
+#endif