From: Rob Bradford <r...@linux.intel.com>

Rather than relying on focussed resource to get the client to lookup the
drag resource with instead derive the client from the focussed surface.

This is equivalent as the focussed resource is derived from the focussed
surface in the weston_keyboard_set_focus function.
---
 src/data-device.c | 31 +++++++++++++++----------------
 1 file changed, 15 insertions(+), 16 deletions(-)

diff --git a/src/data-device.c b/src/data-device.c
index 1eb1925..e062875 100644
--- a/src/data-device.c
+++ b/src/data-device.c
@@ -421,15 +421,14 @@ destroy_selection_data_source(struct wl_listener 
*listener, void *data)
        struct weston_seat *seat = container_of(listener, struct weston_seat,
                                                selection_data_source_listener);
        struct wl_resource *data_device;
-       struct wl_resource *focus = NULL;
+       struct wl_client *client;
 
        seat->selection_data_source = NULL;
 
-       if (seat->keyboard)
-               focus = seat->keyboard->focus_resource;
-       if (focus) {
+       if (seat->keyboard && seat->keyboard->focus) {
+               client = 
wl_resource_get_client(seat->keyboard->focus->resource);
                data_device = 
wl_resource_find_for_client(&seat->drag_resource_list,
-                                                         
wl_resource_get_client(focus));
+                                                         client);
                if (data_device)
                        wl_data_device_send_selection(data_device, NULL);
        }
@@ -442,7 +441,7 @@ weston_seat_set_selection(struct weston_seat *seat,
                          struct weston_data_source *source, uint32_t serial)
 {
        struct wl_resource *data_device, *offer;
-       struct wl_resource *focus = NULL;
+       struct wl_client *client;
 
        if (seat->selection_data_source &&
            seat->selection_serial - serial < UINT32_MAX / 2)
@@ -457,11 +456,10 @@ weston_seat_set_selection(struct weston_seat *seat,
        seat->selection_data_source = source;
        seat->selection_serial = serial;
 
-       if (seat->keyboard)
-               focus = seat->keyboard->focus_resource;
-       if (focus) {
+       if (seat->keyboard && seat->keyboard->focus) {
+               client = 
wl_resource_get_client(seat->keyboard->focus->resource);
                data_device = 
wl_resource_find_for_client(&seat->drag_resource_list,
-                                                         
wl_resource_get_client(focus));
+                                                         client);
                if (data_device && source) {
                        offer = 
weston_data_source_send_offer(seat->selection_data_source,
                                                              data_device);
@@ -615,18 +613,19 @@ bind_manager(struct wl_client *client,
 WL_EXPORT void
 wl_data_device_set_keyboard_focus(struct weston_seat *seat)
 {
-       struct wl_resource *data_device, *focus, *offer;
+       struct wl_resource *data_device = NULL, *offer;
        struct weston_data_source *source;
+       struct wl_client *client;
 
        if (!seat->keyboard)
                return;
 
-       focus = seat->keyboard->focus_resource;
-       if (!focus)
-               return;
+       if (seat->keyboard && seat->keyboard->focus) {
+               client = 
wl_resource_get_client(seat->keyboard->focus->resource);
+               data_device = 
wl_resource_find_for_client(&seat->drag_resource_list,
+                                                         client);
+       }
 
-       data_device = wl_resource_find_for_client(&seat->drag_resource_list,
-                                                 
wl_resource_get_client(focus));
        if (!data_device)
                return;
 
-- 
1.8.3.1

_______________________________________________
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to