Check that creating a new data_device_interface resource does not

fail, and bail out gracefully if so.

Signed-off-by: Chris Michael <cp.michael@samsung.com>
This commit is contained in:
Chris Michael 2013-11-05 08:25:36 +00:00
parent 566b27d15e
commit 122a962cfa
1 changed files with 13 additions and 3 deletions

View File

@ -1181,7 +1181,7 @@ _unbind_data_device(struct wl_resource *resource)
}
static void
_get_data_device(struct wl_client *client, struct wl_resource *manager_resource EINA_UNUSED, uint32_t id, struct wl_resource *seat_resource)
_get_data_device(struct wl_client *client, struct wl_resource *manager_resource, uint32_t id, struct wl_resource *seat_resource)
{
struct wl_seat *seat;
struct wl_resource *resource;
@ -1190,6 +1190,11 @@ _get_data_device(struct wl_client *client, struct wl_resource *manager_resource
resource =
wl_resource_create(client, &wl_data_device_interface, 1, id);
if (!resource)
{
wl_resource_post_no_memory(manager_resource);
return;
}
wl_list_insert(&seat->drag_resource_list, wl_resource_get_link(resource));
@ -1263,12 +1268,17 @@ _default_grab_modifiers(struct wl_keyboard_grab *grab, uint32_t serial, uint32_t
}
static void
_data_device_start_drag(struct wl_client *client, struct wl_resource *resource, struct wl_resource *source_resource, struct wl_resource *origin_resource EINA_UNUSED, struct wl_resource *icon_resource, uint32_t serial EINA_UNUSED)
_data_device_start_drag(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 EINA_UNUSED)
{
struct wl_seat *seat;
seat = wl_resource_get_user_data(resource);
if ((seat->pointer->button_count == 0) ||
(seat->pointer->grab_serial != serial) ||
(seat->pointer->focus != wl_resource_get_user_data(origin_resource)))
return;
seat->drag_grab.interface = &_e_drag_grab_interface;
seat->drag_client = client;
seat->drag_data_source = NULL;
@ -1295,7 +1305,7 @@ _data_device_start_drag(struct wl_client *client, struct wl_resource *resource,
seat->drag_icon_listener.notify = _destroy_data_device_icon;
wl_signal_add(&icon->wl.destroy_signal,
&seat->drag_icon_listener);
wl_signal_emit(&seat->drag_icon_signal, icon_resource);
/* wl_signal_emit(&seat->drag_icon_signal, icon_resource); */
}
wl_pointer_set_focus(seat->pointer, NULL,