diff --git a/src/compositor.h b/src/compositor.h index 531247b2..696e1325 100644 --- a/src/compositor.h +++ b/src/compositor.h @@ -214,10 +214,7 @@ struct weston_pointer_grab_interface { struct weston_surface *surface, wl_fixed_t x, wl_fixed_t y); - void (*motion)(struct weston_pointer_grab *grab, - uint32_t time, - wl_fixed_t x, - wl_fixed_t y); + void (*motion)(struct weston_pointer_grab *grab, uint32_t time); void (*button)(struct weston_pointer_grab *grab, uint32_t time, uint32_t button, uint32_t state); }; @@ -225,8 +222,6 @@ struct weston_pointer_grab_interface { struct weston_pointer_grab { const struct weston_pointer_grab_interface *interface; struct weston_pointer *pointer; - struct weston_surface *focus; - wl_fixed_t x, y; }; struct weston_keyboard_grab; diff --git a/src/data-device.c b/src/data-device.c index e9c7ed76..03e774dc 100644 --- a/src/data-device.c +++ b/src/data-device.c @@ -252,17 +252,16 @@ drag_grab_focus(struct weston_pointer_grab *grab, drag->focus_listener.notify = destroy_drag_focus; wl_signal_add(&resource->destroy_signal, &drag->focus_listener); drag->focus_resource = resource; - grab->focus = surface; } static void -drag_grab_motion(struct weston_pointer_grab *grab, - uint32_t time, wl_fixed_t x, wl_fixed_t y) +drag_grab_motion(struct weston_pointer_grab *grab, uint32_t time) { struct weston_drag *drag = container_of(grab, struct weston_drag, grab); struct weston_pointer *pointer = drag->grab.pointer; float fx, fy; + wl_fixed_t sx, sy; if (drag->icon) { fx = wl_fixed_to_double(pointer->x) + drag->dx; @@ -271,8 +270,13 @@ drag_grab_motion(struct weston_pointer_grab *grab, weston_surface_schedule_repaint(drag->icon); } - if (drag->focus_resource) - wl_data_device_send_motion(drag->focus_resource, time, x, y); + if (drag->focus_resource) { + weston_surface_from_global_fixed(drag->focus, + pointer->x, pointer->y, + &sx, &sy); + + wl_data_device_send_motion(drag->focus_resource, time, sx, sy); + } } static void diff --git a/src/input.c b/src/input.c index 93cdf60c..d23d78b1 100644 --- a/src/input.c +++ b/src/input.c @@ -47,7 +47,7 @@ void weston_seat_repick(struct weston_seat *seat) { const struct weston_pointer_grab_interface *interface; - struct weston_surface *surface, *focus; + struct weston_surface *surface; struct weston_pointer *pointer = seat->pointer; wl_fixed_t sx, sy; @@ -61,14 +61,6 @@ weston_seat_repick(struct weston_seat *seat) interface = pointer->grab->interface; interface->focus(pointer->grab, surface, sx, sy); - - focus = (struct weston_surface *) pointer->grab->focus; - if (focus) - weston_surface_from_global_fixed(focus, - pointer->x, - pointer->y, - &pointer->grab->x, - &pointer->grab->y); } static void @@ -126,14 +118,17 @@ default_grab_focus(struct weston_pointer_grab *grab, } static void -default_grab_motion(struct weston_pointer_grab *grab, - uint32_t time, wl_fixed_t x, wl_fixed_t y) +default_grab_motion(struct weston_pointer_grab *grab, uint32_t time) { - struct wl_resource *resource; + struct weston_pointer *pointer = grab->pointer; + wl_fixed_t sx, sy; - resource = grab->pointer->focus_resource; - if (resource) - wl_pointer_send_motion(resource, time, x, y); + if (pointer->focus_resource) { + weston_surface_from_global_fixed(pointer->focus, + pointer->x, pointer->y, + &sx, &sy); + wl_pointer_send_motion(pointer->focus_resource, time, sx, sy); + } } static void @@ -477,7 +472,6 @@ weston_pointer_set_focus(struct weston_pointer *pointer, pointer->focus_resource = resource; pointer->focus = surface; - pointer->default_grab.focus = surface; wl_signal_emit(&pointer->focus_signal, pointer); } @@ -670,8 +664,7 @@ notify_motion(struct weston_seat *seat, move_pointer(seat, pointer->x + dx, pointer->y + dy); interface = pointer->grab->interface; - interface->motion(pointer->grab, time, - pointer->grab->x, pointer->grab->y); + interface->motion(pointer->grab, time); } WL_EXPORT void @@ -687,8 +680,7 @@ notify_motion_absolute(struct weston_seat *seat, move_pointer(seat, x, y); interface = pointer->grab->interface; - interface->motion(pointer->grab, time, - pointer->grab->x, pointer->grab->y); + interface->motion(pointer->grab, time); } WL_EXPORT void diff --git a/src/shell.c b/src/shell.c index bed0e4ed..3f4833d6 100644 --- a/src/shell.c +++ b/src/shell.c @@ -324,7 +324,6 @@ shell_grab_start(struct shell_grab *grab, &grab->shsurf_destroy_listener); grab->pointer = pointer; - grab->grab.focus = shsurf->surface; weston_pointer_start_grab(pointer, &grab->grab); desktop_shell_send_grab_cursor(shell->child.desktop_shell, cursor); @@ -1017,12 +1016,10 @@ static void noop_grab_focus(struct weston_pointer_grab *grab, struct weston_surface *surface, wl_fixed_t x, wl_fixed_t y) { - grab->focus = NULL; } static void -move_grab_motion(struct weston_pointer_grab *grab, - uint32_t time, wl_fixed_t x, wl_fixed_t y) +move_grab_motion(struct weston_pointer_grab *grab, uint32_t time) { struct weston_move_grab *move = (struct weston_move_grab *) grab; struct weston_pointer *pointer = grab->pointer; @@ -1113,8 +1110,7 @@ struct weston_resize_grab { }; static void -resize_grab_motion(struct weston_pointer_grab *grab, - uint32_t time, wl_fixed_t x, wl_fixed_t y) +resize_grab_motion(struct weston_pointer_grab *grab, uint32_t time) { struct weston_resize_grab *resize = (struct weston_resize_grab *) grab; struct weston_pointer *pointer = grab->pointer; @@ -1239,15 +1235,14 @@ busy_cursor_grab_focus(struct weston_pointer_grab *base, { struct shell_grab *grab = (struct shell_grab *) base; - if (grab->grab.focus != surface) { + if (grab->shsurf->surface != surface) { shell_grab_end(grab); free(grab); } } static void -busy_cursor_grab_motion(struct weston_pointer_grab *grab, - uint32_t time, int32_t x, int32_t y) +busy_cursor_grab_motion(struct weston_pointer_grab *grab, uint32_t time) { } @@ -1912,24 +1907,25 @@ popup_grab_focus(struct weston_pointer_grab *grab, if (surface && surface->resource.client == client) { weston_pointer_set_focus(pointer, surface, x, y); - grab->focus = surface; } else { weston_pointer_set_focus(pointer, NULL, wl_fixed_from_int(0), wl_fixed_from_int(0)); - grab->focus = NULL; } } static void -popup_grab_motion(struct weston_pointer_grab *grab, - uint32_t time, wl_fixed_t sx, wl_fixed_t sy) +popup_grab_motion(struct weston_pointer_grab *grab, uint32_t time) { - struct wl_resource *resource; + struct weston_pointer *pointer = grab->pointer; + wl_fixed_t sx, sy; - resource = grab->pointer->focus_resource; - if (resource) - wl_pointer_send_motion(resource, time, sx, sy); + if (pointer->focus_resource) { + weston_surface_from_global_fixed(pointer->focus, + pointer->x, pointer->y, + &sx, &sy); + wl_pointer_send_motion(pointer->focus_resource, time, sx, sy); + } } static void @@ -2649,8 +2645,7 @@ terminate_binding(struct weston_seat *seat, uint32_t time, uint32_t key, } static void -rotate_grab_motion(struct weston_pointer_grab *grab, - uint32_t time, wl_fixed_t x, wl_fixed_t y) +rotate_grab_motion(struct weston_pointer_grab *grab, uint32_t time) { struct rotate_grab *rotate = container_of(grab, struct rotate_grab, base.grab);