In order to separate pointer and keyboard grabs, we need to introduce a keyboard grab interface but first we must rename some generic types to denote which device is holding the grab.
Type renames: wl_grab_interface -> wl_pointer_grab_interface wl_grab -> wl_pointer_grab wl_input_device_start_grab -> wl_input_device_start_pointer_grab wl_input_device_end_grab -> wl_input_device_end_pointer_grab --- src/data-device.c | 14 +++++++++----- src/wayland-server.c | 39 ++++++++++++++++++++------------------- src/wayland-server.h | 26 +++++++++++++------------- 3 files changed, 42 insertions(+), 37 deletions(-) diff --git a/src/data-device.c b/src/data-device.c index 6c254c7..334375b 100644 --- a/src/data-device.c +++ b/src/data-device.c @@ -179,7 +179,7 @@ destroy_drag_focus(struct wl_listener *listener, } static void -drag_grab_focus(struct wl_grab *grab, uint32_t time, +drag_grab_focus(struct wl_pointer_grab *grab, uint32_t time, struct wl_surface *surface, int32_t x, int32_t y) { struct wl_input_device *device = @@ -215,7 +215,7 @@ drag_grab_focus(struct wl_grab *grab, uint32_t time, } static void -drag_grab_motion(struct wl_grab *grab, +drag_grab_motion(struct wl_pointer_grab *grab, uint32_t time, int32_t x, int32_t y) { struct wl_input_device *device = @@ -227,7 +227,7 @@ drag_grab_motion(struct wl_grab *grab, } static void -drag_grab_button(struct wl_grab *grab, +drag_grab_button(struct wl_pointer_grab *grab, uint32_t time, int32_t button, int32_t state) { struct wl_input_device *device = @@ -239,6 +239,7 @@ drag_grab_button(struct wl_grab *grab, WL_DATA_DEVICE_DROP); if (device->button_count == 0 && state == 0) { +<<<<<<< HEAD wl_input_device_end_grab(device, time); if (device->drag_surface) { @@ -252,12 +253,15 @@ drag_grab_button(struct wl_grab *grab, surface_resource, NULL, 0, 0); } +======= + wl_input_device_end_pointer_grab(device, time); +>>>>>>> server: Rename wl_grab_interface. device->drag_data_source = NULL; device->drag_surface = NULL; } } -static const struct wl_grab_interface drag_grab_interface = { +static const struct wl_pointer_grab_interface drag_grab_interface = { drag_grab_focus, drag_grab_motion, drag_grab_button, @@ -282,7 +286,7 @@ data_device_start_drag(struct wl_client *client, struct wl_resource *resource, if (icon_resource) device->drag_surface = icon_resource->data; - wl_input_device_start_grab(device, &device->drag_grab, time); + wl_input_device_start_pointer_grab(device, &device->drag_grab, time); } static void diff --git a/src/wayland-server.c b/src/wayland-server.c index 8239291..7fd66f1 100644 --- a/src/wayland-server.c +++ b/src/wayland-server.c @@ -413,7 +413,7 @@ lose_keyboard_focus(struct wl_listener *listener, } static void -default_grab_focus(struct wl_grab *grab, uint32_t time, +default_grab_focus(struct wl_pointer_grab *grab, uint32_t time, struct wl_surface *surface, int32_t x, int32_t y) { struct wl_input_device *device = grab->input_device; @@ -425,7 +425,7 @@ default_grab_focus(struct wl_grab *grab, uint32_t time, } static void -default_grab_motion(struct wl_grab *grab, +default_grab_motion(struct wl_pointer_grab *grab, uint32_t time, int32_t x, int32_t y) { struct wl_resource *resource; @@ -437,7 +437,7 @@ default_grab_motion(struct wl_grab *grab, } static void -default_grab_button(struct wl_grab *grab, +default_grab_button(struct wl_pointer_grab *grab, uint32_t time, int32_t button, int32_t state) { struct wl_input_device *device = grab->input_device; @@ -455,7 +455,8 @@ default_grab_button(struct wl_grab *grab, device->current_y); } -static const struct wl_grab_interface default_grab_interface = { +static const struct wl_pointer_grab_interface + default_pointer_grab_interface = { default_grab_focus, default_grab_motion, default_grab_button @@ -470,9 +471,9 @@ wl_input_device_init(struct wl_input_device *device) device->pointer_focus_listener.func = lose_pointer_focus; device->keyboard_focus_listener.func = lose_keyboard_focus; - device->default_grab.interface = &default_grab_interface; - device->default_grab.input_device = device; - device->grab = &device->default_grab; + device->default_pointer_grab.interface = &default_pointer_grab_interface; + device->default_pointer_grab.input_device = device; + device->pointer_grab = &device->default_pointer_grab; wl_list_init(&device->drag_resource_list); device->selection_data_source = NULL; @@ -544,7 +545,7 @@ wl_input_device_set_pointer_focus(struct wl_input_device *device, device->pointer_focus_resource = resource; device->pointer_focus = surface; device->pointer_focus_time = time; - device->default_grab.focus = surface; + device->default_pointer_grab.focus = surface; } WL_EXPORT void @@ -581,28 +582,28 @@ wl_input_device_set_keyboard_focus(struct wl_input_device *device, } WL_EXPORT void -wl_input_device_start_grab(struct wl_input_device *device, - struct wl_grab *grab, uint32_t time) +wl_input_device_start_pointer_grab(struct wl_input_device *device, + struct wl_pointer_grab *grab, uint32_t time) { - const struct wl_grab_interface *interface; + const struct wl_pointer_grab_interface *interface; - device->grab = grab; - interface = device->grab->interface; + device->pointer_grab = grab; + interface = device->pointer_grab->interface; grab->input_device = device; if (device->current) - interface->focus(device->grab, time, device->current, + interface->focus(device->pointer_grab, time, device->current, device->current_x, device->current_y); } WL_EXPORT void -wl_input_device_end_grab(struct wl_input_device *device, uint32_t time) +wl_input_device_end_pointer_grab(struct wl_input_device *device, uint32_t time) { - const struct wl_grab_interface *interface; + const struct wl_pointer_grab_interface *interface; - device->grab = &device->default_grab; - interface = device->grab->interface; - interface->focus(device->grab, time, device->current, + device->pointer_grab = &device->default_pointer_grab; + interface = device->pointer_grab->interface; + interface->focus(device->pointer_grab, time, device->current, device->current_x, device->current_y); } diff --git a/src/wayland-server.h b/src/wayland-server.h index 616df3b..45778ee 100644 --- a/src/wayland-server.h +++ b/src/wayland-server.h @@ -145,18 +145,18 @@ struct wl_surface { struct wl_resource resource; }; -struct wl_grab; -struct wl_grab_interface { - void (*focus)(struct wl_grab *grab, uint32_t time, +struct wl_pointer_grab; +struct wl_pointer_grab_interface { + void (*focus)(struct wl_pointer_grab *grab, uint32_t time, struct wl_surface *surface, int32_t x, int32_t y); - void (*motion)(struct wl_grab *grab, + void (*motion)(struct wl_pointer_grab *grab, uint32_t time, int32_t x, int32_t y); - void (*button)(struct wl_grab *grab, + void (*button)(struct wl_pointer_grab *grab, uint32_t time, int32_t button, int32_t state); }; -struct wl_grab { - const struct wl_grab_interface *interface; +struct wl_pointer_grab { + const struct wl_pointer_grab_interface *interface; struct wl_input_device *input_device; struct wl_surface *focus; int32_t x, y; @@ -198,8 +198,8 @@ struct wl_input_device { struct wl_surface *current; int32_t current_x, current_y; - struct wl_grab *grab; - struct wl_grab default_grab; + struct wl_pointer_grab *pointer_grab; + struct wl_pointer_grab default_pointer_grab; uint32_t button_count; uint32_t grab_time; int32_t grab_x, grab_y; @@ -211,7 +211,7 @@ struct wl_input_device { struct wl_surface *drag_focus; struct wl_resource *drag_focus_resource; struct wl_listener drag_focus_listener; - struct wl_grab drag_grab; + struct wl_pointer_grab drag_grab; struct wl_surface *drag_surface; struct wl_data_source *selection_data_source; @@ -281,10 +281,10 @@ int wl_data_device_manager_init(struct wl_display *display); void -wl_input_device_end_grab(struct wl_input_device *device, uint32_t time); +wl_input_device_start_pointer_grab(struct wl_input_device *device, + struct wl_pointer_grab *grab, uint32_t time); void -wl_input_device_start_grab(struct wl_input_device *device, - struct wl_grab *grab, uint32_t time); +wl_input_device_end_pointer_grab(struct wl_input_device *device, uint32_t time); void wl_input_device_set_selection(struct wl_input_device *device, -- 1.7.4.1 _______________________________________________ wayland-devel mailing list wayland-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/wayland-devel