be sure to send the wl_data_device_send_enter when changing surface
focus and add some more debugging for dnd Signed-off-by: Chris Michael <cp.michael@samsung.com>
This commit is contained in:
parent
78bcbfff35
commit
7840d11459
|
@ -21,6 +21,7 @@ _e_comp_wl_data_offer_cb_accept(struct wl_client *client EINA_UNUSED, struct wl_
|
||||||
{
|
{
|
||||||
E_Comp_Wl_Data_Offer *offer;
|
E_Comp_Wl_Data_Offer *offer;
|
||||||
|
|
||||||
|
DBG("Data Offer Accept");
|
||||||
if (!(offer = wl_resource_get_user_data(resource)))
|
if (!(offer = wl_resource_get_user_data(resource)))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -33,6 +34,8 @@ _e_comp_wl_data_offer_cb_receive(struct wl_client *client EINA_UNUSED, struct wl
|
||||||
{
|
{
|
||||||
E_Comp_Wl_Data_Offer *offer;
|
E_Comp_Wl_Data_Offer *offer;
|
||||||
|
|
||||||
|
DBG("Data Offer Receive");
|
||||||
|
|
||||||
if (!(offer = wl_resource_get_user_data(resource)))
|
if (!(offer = wl_resource_get_user_data(resource)))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -46,6 +49,7 @@ _e_comp_wl_data_offer_cb_receive(struct wl_client *client EINA_UNUSED, struct wl
|
||||||
static void
|
static void
|
||||||
_e_comp_wl_data_offer_cb_destroy(struct wl_client *client EINA_UNUSED, struct wl_resource *resource)
|
_e_comp_wl_data_offer_cb_destroy(struct wl_client *client EINA_UNUSED, struct wl_resource *resource)
|
||||||
{
|
{
|
||||||
|
DBG("Data Offer Destroy");
|
||||||
wl_resource_destroy(resource);
|
wl_resource_destroy(resource);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -70,6 +74,7 @@ _e_comp_wl_data_offer_cb_source_destroy(struct wl_listener *listener, void *data
|
||||||
{
|
{
|
||||||
E_Comp_Wl_Data_Offer *offer;
|
E_Comp_Wl_Data_Offer *offer;
|
||||||
|
|
||||||
|
DBG("Data Offer Source Destroy");
|
||||||
offer = container_of(listener, E_Comp_Wl_Data_Offer,
|
offer = container_of(listener, E_Comp_Wl_Data_Offer,
|
||||||
source_destroy_listener);
|
source_destroy_listener);
|
||||||
if (!offer) return;
|
if (!offer) return;
|
||||||
|
@ -89,6 +94,7 @@ _e_comp_wl_data_source_cb_offer(struct wl_client *client EINA_UNUSED, struct wl_
|
||||||
{
|
{
|
||||||
E_Comp_Wl_Data_Source *source;
|
E_Comp_Wl_Data_Source *source;
|
||||||
|
|
||||||
|
DBG("Data Source Offer");
|
||||||
if (!(source = wl_resource_get_user_data(resource)))
|
if (!(source = wl_resource_get_user_data(resource)))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -100,6 +106,7 @@ _e_comp_wl_data_source_cb_offer(struct wl_client *client EINA_UNUSED, struct wl_
|
||||||
static void
|
static void
|
||||||
_e_comp_wl_data_source_cb_destroy(struct wl_client *client EINA_UNUSED, struct wl_resource *resource)
|
_e_comp_wl_data_source_cb_destroy(struct wl_client *client EINA_UNUSED, struct wl_resource *resource)
|
||||||
{
|
{
|
||||||
|
DBG("Data Source Destroy");
|
||||||
wl_resource_destroy(resource);
|
wl_resource_destroy(resource);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -124,12 +131,14 @@ _e_comp_wl_data_source_cb_resource_destroy(struct wl_resource *resource)
|
||||||
static void
|
static void
|
||||||
_e_comp_wl_data_source_target_send(E_Comp_Wl_Data_Source *source, uint32_t serial EINA_UNUSED, const char* mime_type)
|
_e_comp_wl_data_source_target_send(E_Comp_Wl_Data_Source *source, uint32_t serial EINA_UNUSED, const char* mime_type)
|
||||||
{
|
{
|
||||||
|
DBG("Data Source Target Send");
|
||||||
wl_data_source_send_target(source->resource, mime_type);
|
wl_data_source_send_target(source->resource, mime_type);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_e_comp_wl_data_source_send_send(E_Comp_Wl_Data_Source *source, const char* mime_type, int32_t fd)
|
_e_comp_wl_data_source_send_send(E_Comp_Wl_Data_Source *source, const char* mime_type, int32_t fd)
|
||||||
{
|
{
|
||||||
|
DBG("Data Source Source Send");
|
||||||
wl_data_source_send_send(source->resource, mime_type, fd);
|
wl_data_source_send_send(source->resource, mime_type, fd);
|
||||||
close(fd);
|
close(fd);
|
||||||
}
|
}
|
||||||
|
@ -137,6 +146,7 @@ _e_comp_wl_data_source_send_send(E_Comp_Wl_Data_Source *source, const char* mime
|
||||||
static void
|
static void
|
||||||
_e_comp_wl_data_source_cancelled_send(E_Comp_Wl_Data_Source *source)
|
_e_comp_wl_data_source_cancelled_send(E_Comp_Wl_Data_Source *source)
|
||||||
{
|
{
|
||||||
|
DBG("Data Source Cancelled Send");
|
||||||
wl_data_source_send_cancelled(source->resource);
|
wl_data_source_send_cancelled(source->resource);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -185,10 +195,14 @@ _e_comp_wl_data_device_data_offer_create(E_Comp_Wl_Data_Source *source, struct w
|
||||||
Eina_List *l;
|
Eina_List *l;
|
||||||
char *t;
|
char *t;
|
||||||
|
|
||||||
|
DBG("Data Offer Create");
|
||||||
|
|
||||||
offer = E_NEW(E_Comp_Wl_Data_Offer, 1);
|
offer = E_NEW(E_Comp_Wl_Data_Offer, 1);
|
||||||
if (!offer) return NULL;
|
if (!offer) return NULL;
|
||||||
|
|
||||||
offer->resource = wl_resource_create(wl_resource_get_client(data_device_res), &wl_data_offer_interface, 1, 0);
|
offer->resource =
|
||||||
|
wl_resource_create(wl_resource_get_client(data_device_res),
|
||||||
|
&wl_data_offer_interface, 1, 0);
|
||||||
if (!offer->resource)
|
if (!offer->resource)
|
||||||
{
|
{
|
||||||
free(offer);
|
free(offer);
|
||||||
|
@ -260,10 +274,8 @@ _e_comp_wl_data_device_selection_set(E_Comp_Data *cdata, E_Comp_Wl_Data_Source *
|
||||||
|
|
||||||
}
|
}
|
||||||
else if (data_device_res)
|
else if (data_device_res)
|
||||||
{
|
|
||||||
wl_data_device_send_selection(data_device_res, NULL);
|
wl_data_device_send_selection(data_device_res, NULL);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
wl_signal_emit(&cdata->selection.signal, cdata);
|
wl_signal_emit(&cdata->selection.signal, cdata);
|
||||||
|
|
||||||
|
@ -277,9 +289,37 @@ _e_comp_wl_data_device_selection_set(E_Comp_Data *cdata, E_Comp_Wl_Data_Source *
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_e_comp_wl_data_device_cb_drag_start(struct wl_client *client EINA_UNUSED, struct wl_resource *resource EINA_UNUSED, struct wl_resource *source_resource EINA_UNUSED, struct wl_resource *origin_resource EINA_UNUSED, struct wl_resource *icon_resource EINA_UNUSED, uint32_t serial EINA_UNUSED)
|
_e_comp_wl_data_device_cb_drag_start(struct wl_client *client, struct wl_resource *resource, struct wl_resource *source_resource, struct wl_resource *origin_resource, struct wl_resource *icon_resource, uint32_t serial)
|
||||||
{
|
{
|
||||||
|
E_Comp_Data *cdata;
|
||||||
|
E_Comp_Wl_Data_Source *source;
|
||||||
|
Eina_List *l;
|
||||||
|
struct wl_resource *res;
|
||||||
|
|
||||||
|
DBG("Data Device Drag Start");
|
||||||
|
|
||||||
|
if (!(cdata = wl_resource_get_user_data(resource))) return;
|
||||||
|
if ((cdata->kbd.focus) && (cdata->kbd.focus != origin_resource)) return;
|
||||||
|
|
||||||
|
if (!(source = wl_resource_get_user_data(source_resource))) return;
|
||||||
|
|
||||||
|
/* TODO: create icon for pointer ?? */
|
||||||
|
if (icon_resource)
|
||||||
|
{
|
||||||
|
E_Pixmap *cp;
|
||||||
|
|
||||||
|
DBG("\tHave Icon Resource: %p", icon_resource);
|
||||||
|
cp = wl_resource_get_user_data(icon_resource);
|
||||||
|
}
|
||||||
|
|
||||||
|
EINA_LIST_FOREACH(cdata->ptr.resources, l, res)
|
||||||
|
{
|
||||||
|
if (!e_comp_wl_input_pointer_check(res)) continue;
|
||||||
|
if (wl_resource_get_client(res) != client) continue;
|
||||||
|
wl_pointer_send_leave(res, serial, cdata->kbd.focus);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* TODO: pointer start drag */
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -290,8 +330,8 @@ _e_comp_wl_data_device_cb_selection_set(struct wl_client *client EINA_UNUSED, st
|
||||||
|
|
||||||
if (!source_resource) return;
|
if (!source_resource) return;
|
||||||
if (!(cdata = wl_resource_get_user_data(resource))) return;
|
if (!(cdata = wl_resource_get_user_data(resource))) return;
|
||||||
|
if (!(source = wl_resource_get_user_data(source_resource))) return;
|
||||||
|
|
||||||
source = wl_resource_get_user_data(source_resource);
|
|
||||||
_e_comp_wl_data_device_selection_set(cdata, source, serial);
|
_e_comp_wl_data_device_selection_set(cdata, source, serial);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -318,6 +358,8 @@ _e_comp_wl_data_manager_cb_source_create(struct wl_client *client EINA_UNUSED, s
|
||||||
{
|
{
|
||||||
E_Comp_Wl_Data_Source *source;
|
E_Comp_Wl_Data_Source *source;
|
||||||
|
|
||||||
|
DBG("Data Manager Source Create");
|
||||||
|
|
||||||
source = E_NEW(E_Comp_Wl_Data_Source, 1);
|
source = E_NEW(E_Comp_Wl_Data_Source, 1);
|
||||||
if (!source)
|
if (!source)
|
||||||
{
|
{
|
||||||
|
@ -351,7 +393,7 @@ _e_comp_wl_data_manager_cb_device_get(struct wl_client *client, struct wl_resour
|
||||||
E_Comp_Data *cdata;
|
E_Comp_Data *cdata;
|
||||||
struct wl_resource *res;
|
struct wl_resource *res;
|
||||||
|
|
||||||
DBG("Comp_Wl_Data: Get Data Device");
|
DBG("Data Manager Device Get");
|
||||||
|
|
||||||
/* try to get the compositor data */
|
/* try to get the compositor data */
|
||||||
if (!(cdata = wl_resource_get_user_data(seat_resource))) return;
|
if (!(cdata = wl_resource_get_user_data(seat_resource))) return;
|
||||||
|
@ -395,7 +437,6 @@ _e_comp_wl_data_cb_bind_manager(struct wl_client *client, void *data, uint32_t v
|
||||||
E_Comp_Data *cdata;
|
E_Comp_Data *cdata;
|
||||||
struct wl_resource *res;
|
struct wl_resource *res;
|
||||||
|
|
||||||
DBG("Comp_Wl_Data: Bind Manager");
|
|
||||||
cdata = data;
|
cdata = data;
|
||||||
|
|
||||||
/* try to create data manager resource */
|
/* try to create data manager resource */
|
||||||
|
@ -651,8 +692,7 @@ e_comp_wl_data_device_keyboard_focus_set(E_Comp_Data *cdata)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
focus = cdata->kbd.focus;
|
if (!(focus = cdata->kbd.focus))
|
||||||
if (!focus)
|
|
||||||
{
|
{
|
||||||
ERR("No focused resource");
|
ERR("No focused resource");
|
||||||
return;
|
return;
|
||||||
|
@ -666,8 +706,14 @@ e_comp_wl_data_device_keyboard_focus_set(E_Comp_Data *cdata)
|
||||||
source = (E_Comp_Wl_Data_Source*)cdata->selection.data_source;
|
source = (E_Comp_Wl_Data_Source*)cdata->selection.data_source;
|
||||||
if (source)
|
if (source)
|
||||||
{
|
{
|
||||||
|
uint32_t serial;
|
||||||
|
|
||||||
|
serial = wl_display_next_serial(cdata->wl.disp);
|
||||||
|
|
||||||
offer_res = _e_comp_wl_data_device_data_offer_create(source,
|
offer_res = _e_comp_wl_data_device_data_offer_create(source,
|
||||||
data_device_res);
|
data_device_res);
|
||||||
|
wl_data_device_send_enter(data_device_res, serial, focus,
|
||||||
|
cdata->ptr.x, cdata->ptr.y, offer_res);
|
||||||
wl_data_device_send_selection(data_device_res, offer_res);
|
wl_data_device_send_selection(data_device_res, offer_res);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue