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
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,
_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
res = wl_resource_create(client,
&tws_service_kvm_interface,
- 1,
+ 2,
id);
if (!res)
{
}
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;
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;
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);
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);