---
 src/data-device.c |   19 +++++++++++++------
 1 file changed, 13 insertions(+), 6 deletions(-)

diff --git a/src/data-device.c b/src/data-device.c
index 6a81bc8..abab735 100644
--- a/src/data-device.c
+++ b/src/data-device.c
@@ -421,6 +421,7 @@ static void
 drag_grab_touch_down(struct weston_touch_grab *grab, uint32_t time,
                int touch_id, wl_fixed_t sx, wl_fixed_t sy)
 {
+       wl_signal_emit(&grab->touch->motion_signal, grab->touch);
 }
 
 static void
@@ -476,6 +477,8 @@ drag_grab_touch_motion(struct weston_touch_grab *grab, 
uint32_t time,
        wl_fixed_t view_x, view_y;
        float fx, fy;
 
+       wl_signal_emit(&grab->touch->motion_signal, grab->touch);
+
        if (touch_id != touch->grab_touch_id)
                return;
 
@@ -650,11 +653,13 @@ data_device_start_drag(struct wl_client *client, struct 
wl_resource *resource,
        struct weston_surface *icon = NULL;
        int32_t ret = 0;
 
-       if ((seat->pointer->button_count == 0 ||
+       if ((!seat->pointer ||
+           seat->pointer->button_count == 0 ||
            seat->pointer->grab_serial != serial ||
            !seat->pointer->focus ||
            seat->pointer->focus->surface != 
wl_resource_get_user_data(origin_resource)) &&
-               (seat->touch->grab_serial != serial ||
+               (!seat->touch ||
+               seat->touch->grab_serial != serial ||
                !seat->touch->focus ||
                seat->touch->focus->surface != 
wl_resource_get_user_data(origin_resource)))
                return;
@@ -672,14 +677,16 @@ data_device_start_drag(struct wl_client *client, struct 
wl_resource *resource,
                return;
        }
 
-       if (seat->pointer->button_count == 1 &&
+       if (seat->pointer &&
+               seat->pointer->button_count == 1 &&
                seat->pointer->grab_serial == serial &&
                seat->pointer->focus &&
                seat->pointer->focus->surface == 
wl_resource_get_user_data(origin_resource))
                ret = weston_pointer_start_drag(seat->pointer, source, icon, 
client);
-       else if (seat->touch->grab_serial != serial ||
-               seat->touch->focus ||
-               seat->touch->focus->surface != 
wl_resource_get_user_data(origin_resource))
+       else if (seat->touch &&
+                       (seat->touch->grab_serial != serial ||
+                       seat->touch->focus ||
+                       seat->touch->focus->surface != 
wl_resource_get_user_data(origin_resource)))
                ret = weston_touch_start_drag(seat->touch, source, icon, 
client);
 
        if (ret < 0)
-- 
1.7.9.5

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

Reply via email to