From: Junseok Kim Date: Tue, 4 Jun 2024 10:38:08 +0000 (+0900) Subject: e_service_kvm: Add implements for tws_service_kvm_perform_drop_target X-Git-Tag: accepted/tizen/unified/20240621.153417~6 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=58082b1f5663d6bd89d79678cf707fac49c57be7;p=platform%2Fupstream%2Fenlightenment.git e_service_kvm: Add implements for tws_service_kvm_perform_drop_target Change-Id: I4973e3a45bf587665765eb26bb368c83ed4cae81 --- diff --git a/src/bin/server/e_policy_wl.c b/src/bin/server/e_policy_wl.c index f188a3f..2e102c5 100644 --- a/src/bin/server/e_policy_wl.c +++ b/src/bin/server/e_policy_wl.c @@ -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) { diff --git a/src/bin/windowmgr/services/e_service_kvm.c b/src/bin/windowmgr/services/e_service_kvm.c index af0e983..3ed3ed0 100644 --- a/src/bin/windowmgr/services/e_service_kvm.c +++ b/src/bin/windowmgr/services/e_service_kvm.c @@ -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; diff --git a/src/bin/windowmgr/services/e_service_kvm_intern.h b/src/bin/windowmgr/services/e_service_kvm_intern.h index b7328ec..8a0a1e8 100644 --- a/src/bin/windowmgr/services/e_service_kvm_intern.h +++ b/src/bin/windowmgr/services/e_service_kvm_intern.h @@ -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);