}
static void
-_e_comp_wl_data_device_drag_finished(E_Drag *drag)
+_e_comp_wl_data_device_drag_finished(E_Drag *drag, E_Dnd_Drop_Type type)
{
Evas_Object *o;
if (drag_source)
{
- if (drag_source->accepted && drag_source->current_dnd_action)
+ if ((drag_source->accepted) &&
+ (drag_source->current_dnd_action) &&
+ (type == E_DND_DRAG_TYPE_DROPPED))
{
wl_data_device_send_drop(res);
if (wl_resource_get_version(drag_source->resource) >= WL_DATA_SOURCE_DND_DROP_PERFORMED_SINCE_VERSION)
};
/* local subsystem functions */
-static void _e_drag_end(E_Drag *drag);
+static void _e_drag_end(E_Drag *drag, E_Dnd_Drop_Type type);
static void _e_drag_free(E_Drag *drag);
static void _e_drag_rotation_angle_map_adjust(E_Drag *drag);
}
EINTERN E_Drag *
-e_drag_new(int x, int y,
- void (*finished_cb)(E_Drag *drag))
+e_drag_new(int x, int y, E_Drag_Finished_Cb finished_cb)
{
E_Drag *drag;
}
EINTERN void
-e_drag_end(E_Drag *drag)
+e_drag_end(E_Drag *drag, E_Dnd_Drop_Type type)
{
if (!drag) return;
- _e_drag_end(drag);
+
+ _e_drag_end(drag, type);
}
/* local subsystem functions */
static void
-_e_drag_end(E_Drag *drag)
+_e_drag_end(E_Drag *drag, E_Dnd_Drop_Type type)
{
evas_object_hide(drag->comp_object);
_e_drag_hook_call(E_DRAG_HOOK_DRAG_END, drag);
if (drag->cb.finished)
- drag->cb.finished(drag);
+ drag->cb.finished(drag, type);
drag->cb.finished = NULL;
e_object_del(E_OBJECT(drag));
e_grabinput_release(_drag_win, _drag_win);
if (drag->cb.finished)
- drag->cb.finished(drag);
+ drag->cb.finished(drag, E_DND_DRAG_TYPE_CANCELLED);
drag->cb.finished = NULL;
_drag_current = NULL;
if (_drag_current->button_mask) return ECORE_CALLBACK_RENEW;
}
- _e_drag_end(_drag_current);
+ _e_drag_end(_drag_current, E_DND_DRAG_TYPE_DROPPED);
return ECORE_CALLBACK_PASS_ON;
}
source = e_comp_wl->drag_source;
source->accepted = EINA_FALSE;
- _e_drag_end(_drag_current);
+ _e_drag_end(_drag_current, E_DND_DRAG_TYPE_DROPPED);
E_FREE(e_comp_wl->drag);
return ECORE_CALLBACK_PASS_ON;
#define E_DRAG_TYPE 0xE0b0100f
-typedef void (*E_Drag_Hook_Cb)(void *data, E_Drag *drag);
-
typedef enum _E_Drag_Hook_Point
{
E_DRAG_HOOK_DRAG_START,
E_DRAG_HOOK_LAST,
} E_Drag_Hook_Point;
+typedef enum _E_Dnd_Drop_Type
+{
+ E_DND_DRAG_TYPE_DROPPED,
+ E_DND_DRAG_TYPE_CANCELLED,
+} E_Dnd_Drop_Type;
+
+typedef void (*E_Drag_Hook_Cb)(void *data, E_Drag *drag);
+typedef void (*E_Drag_Finished_Cb)(E_Drag *drag, E_Dnd_Drop_Type type);
struct _E_Drag
{
E_Object e_obj_inherit;
struct
{
- void (*finished)(E_Drag *drag);
+ E_Drag_Finished_Cb finished;
} cb;
Evas *evas;
EINTERN E_Drag *e_drag_current_get(void);
/* x and y are the top left coords of the object that is to be dragged */
-EINTERN E_Drag *e_drag_new(int x, int y,
- void (*finished_cb)(E_Drag *drag));
+EINTERN E_Drag *e_drag_new(int x, int y, E_Drag_Finished_Cb finished_cb);
EINTERN Evas *e_drag_evas_get(const E_Drag *drag);
EINTERN void e_drag_object_set(E_Drag *drag, Evas_Object *object);
EINTERN void e_drag_reference_point_set(E_Drag *drag, int x, int y);
/* x and y are the coords where the mouse is when dragging starts */
EINTERN int e_drag_start(E_Drag *drag, int x, int y);
-EINTERN void e_drag_end(E_Drag *drag);
+EINTERN void e_drag_end(E_Drag *drag, E_Dnd_Drop_Type type);
EINTERN E_Drag_Hook * e_drag_hook_add(E_Drag_Hook_Point hookpoint, E_Drag_Hook_Cb func, const void *data);
}
e_comp_wl_data_offer_mimetype_action_accept(e_comp_wl->drag_offer);
- e_drag_end(e_comp_wl->drag);
+ e_drag_end(e_comp_wl->drag, E_DND_DRAG_TYPE_DROPPED);
return EINA_TRUE;
}
ELOGF("KVM", "Cancel drag by kvm_service request!", ec);
- e_drag_end(e_comp_wl->drag);
+ e_drag_end(e_comp_wl->drag, E_DND_DRAG_TYPE_CANCELLED);
return EINA_TRUE;
}