input: Don't send wl_pointer.motion if position didn't change
authorJonas Ådahl <jadahl@gmail.com>
Fri, 24 Apr 2015 07:26:17 +0000 (15:26 +0800)
committerJonas Ådahl <jadahl@gmail.com>
Fri, 20 Nov 2015 03:52:19 +0000 (11:52 +0800)
Signed-off-by: Jonas Ådahl <jadahl@gmail.com>
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
src/input.c

index 53e84a0..86f96b5 100644 (file)
@@ -173,6 +173,8 @@ default_grab_pointer_motion(struct weston_pointer_grab *grab, uint32_t time,
        struct wl_list *resource_list;
        struct wl_resource *resource;
        wl_fixed_t x, y;
+       wl_fixed_t old_sx = pointer->sx;
+       wl_fixed_t old_sy = pointer->sy;
 
        if (pointer->focus) {
                weston_pointer_motion_to_abs(pointer, event, &x, &y);
@@ -182,10 +184,12 @@ default_grab_pointer_motion(struct weston_pointer_grab *grab, uint32_t time,
 
        weston_pointer_move(pointer, event);
 
-       resource_list = &pointer->focus_resource_list;
-       wl_resource_for_each(resource, resource_list) {
-               wl_pointer_send_motion(resource, time,
-                                      pointer->sx, pointer->sy);
+       if (old_sx != pointer->sx || old_sy != pointer->sy) {
+               resource_list = &pointer->focus_resource_list;
+               wl_resource_for_each(resource, resource_list) {
+                       wl_pointer_send_motion(resource, time,
+                                              pointer->sx, pointer->sy);
+               }
        }
 }