e_service_kvm: Add implements for tws_service_kvm_perform_drop_target 06/313206/1
authorJunseok Kim <juns.kim@samsung.com>
Tue, 4 Jun 2024 10:38:08 +0000 (19:38 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Thu, 20 Jun 2024 05:36:01 +0000 (14:36 +0900)
Change-Id: I4973e3a45bf587665765eb26bb368c83ed4cae81

src/bin/server/e_policy_wl.c
src/bin/windowmgr/services/e_service_kvm.c
src/bin/windowmgr/services/e_service_kvm_intern.h

index f188a3f..2e102c5 100644 (file)
@@ -4631,7 +4631,7 @@ _tzsh_srv_kvm_cb_perform_drop(struct wl_client *client EINA_UNUSED, struct wl_re
 
    if (!e_comp_wl->drag) return;
 
-   e_service_kvm_drop_perform(ec);
+   e_service_kvm_drop_perform(ec, E_SERVICE_KVM_DROP_TARGET_KVM_SERVICE);
 }
 
 static void
@@ -4715,6 +4715,23 @@ _tzsh_srv_kvm_cb_secondary_selection_unset(struct wl_client *client EINA_UNUSED,
    e_service_kvm_secondary_selection_set(ec, 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_Policy_Wl_Tzsh_Srv *tzsh_srv;
+   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);
+
+   if (!e_comp_wl->drag) return;
+
+   e_service_kvm_drop_perform(ec, drop_target);
+}
+
 static const struct tws_service_kvm_interface _tzsh_srv_kvm_iface =
 {
    _tzsh_srv_kvm_cb_destroy,
@@ -4724,6 +4741,7 @@ static const struct tws_service_kvm_interface _tzsh_srv_kvm_iface =
    _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
@@ -4743,7 +4761,7 @@ _tzsh_srv_iface_cb_kvm_get(struct wl_client *client, struct wl_resource *res_tzs
 
    res = wl_resource_create(client,
                             &tws_service_kvm_interface,
-                            1,
+                            2,
                             id);
    if (!res)
      {
index af0e983..3ed3ed0 100644 (file)
@@ -218,7 +218,7 @@ e_service_kvm_send_drag_end(E_Service_Kvm *esk)
 }
 
 EINTERN Eina_Bool
-e_service_kvm_drop_perform(E_Client *ec)
+e_service_kvm_drop_perform(E_Client *ec, E_Service_Kvm_Drop_Target drop_target)
 {
    E_Service_Kvm *esk;
    E_Client *legacy_target_ec;
@@ -238,14 +238,17 @@ e_service_kvm_drop_perform(E_Client *ec)
 
    esk->perform_requested = EINA_TRUE;
 
-   legacy_target_ec = e_comp_wl->selection.target;
-   if (legacy_target_ec != ec)
+   if (drop_target == E_SERVICE_KVM_DROP_TARGET_KVM_SERVICE)
      {
-        e_comp_wl_data_device_send_leave(legacy_target_ec);
-        e_comp_wl_data_device_send_enter(ec);
+        legacy_target_ec = e_comp_wl->selection.target;
+        if (legacy_target_ec != ec)
+        {
+           e_comp_wl_data_device_send_leave(legacy_target_ec);
+           e_comp_wl_data_device_send_enter(ec);
+           e_comp_wl_data_offer_mimetype_action_accept(e_comp_wl->drag_offer);
+        }
      }
 
-   e_comp_wl_data_offer_mimetype_action_accept(e_comp_wl->drag_offer);
    e_drag_end(e_comp_wl->drag, E_DND_DRAG_TYPE_DROPPED);
 
    return EINA_TRUE;
index b7328ec..8a0a1e8 100644 (file)
@@ -5,6 +5,12 @@
 
 typedef struct _E_Service_Kvm E_Service_Kvm;
 
+typedef enum _E_Service_Kvm_Drop_Target
+{
+    E_SERVICE_KVM_DROP_TARGET_KVM_SERVICE,
+    E_SERVICE_KVM_DROP_TARGET_UNDER_POINTER,
+} E_Service_Kvm_Drop_Target;
+
 EINTERN Eina_Bool      e_service_kvm_client_set(E_Client *ec);
 EINTERN E_Client      *e_service_kvm_client_get(E_Service_Kvm *esk);
 EINTERN E_Service_Kvm *e_service_kvm_service_get(E_Client *ec);
@@ -14,7 +20,7 @@ EINTERN Eina_Bool      e_service_kvm_send_drag_start(E_Service_Kvm *esk);
 EINTERN Eina_Bool      e_service_kvm_send_drag_end(E_Service_Kvm *esk);
 
 
-EINTERN Eina_Bool      e_service_kvm_drop_perform(E_Client *ec);
+EINTERN Eina_Bool      e_service_kvm_drop_perform(E_Client *ec, E_Service_Kvm_Drop_Target drop_target);
 EINTERN Eina_Bool      e_service_kvm_drag_cancel(E_Client *ec);
 EINTERN Eina_Bool      e_service_kvm_perform_drag_enter(E_Client *ec);
 EINTERN Eina_Bool      e_service_kvm_perform_drag_leave(E_Client *ec);