From 069f120b70f364dc83d43dfff89ce731584299b5 Mon Sep 17 00:00:00 2001 From: Tony Crisci Date: Wed, 27 Dec 2017 07:31:53 -0500 Subject: rootston: remove input event ring buffer --- include/rootston/cursor.h | 9 --------- 1 file changed, 9 deletions(-) (limited to 'include') diff --git a/include/rootston/cursor.h b/include/rootston/cursor.h index de6b7b92..19ac4034 100644 --- a/include/rootston/cursor.h +++ b/include/rootston/cursor.h @@ -10,12 +10,6 @@ enum roots_cursor_mode { ROOTS_CURSOR_ROTATE = 3, }; -struct roots_input_event { - uint32_t serial; - struct wlr_cursor *cursor; - struct wlr_input_device *device; -}; - struct roots_cursor { struct roots_seat *seat; struct wlr_cursor *cursor; @@ -32,9 +26,6 @@ struct roots_cursor { int view_x, view_y, view_width, view_height; float view_rotation; uint32_t resize_edges; - // Ring buffer of input events that could trigger move/resize/rotate - int input_events_idx; - struct roots_input_event input_events[16]; struct wl_listener motion; struct wl_listener motion_absolute; -- cgit v1.2.3 From 815d71a3aa24cfb87870741319cae99ba1726b8f Mon Sep 17 00:00:00 2001 From: Tony Crisci Date: Wed, 27 Dec 2017 08:04:01 -0500 Subject: validate grab serial for shell events --- include/wlr/types/wlr_seat.h | 6 ++++++ rootston/wl_shell.c | 1 - types/wlr_seat.c | 5 +++++ types/wlr_wl_shell.c | 10 ++++++++++ types/wlr_xdg_shell_v6.c | 15 +++++++++++++++ 5 files changed, 36 insertions(+), 1 deletion(-) (limited to 'include') diff --git a/include/wlr/types/wlr_seat.h b/include/wlr/types/wlr_seat.h index 28e9a615..f7dea52f 100644 --- a/include/wlr/types/wlr_seat.h +++ b/include/wlr/types/wlr_seat.h @@ -509,4 +509,10 @@ int wlr_seat_touch_num_points(struct wlr_seat *seat); */ bool wlr_seat_touch_has_grab(struct wlr_seat *seat); +/** + * Check whether this serial is valid to start a grab action such as an + * interactive move or resize. + */ +bool wlr_seat_validate_grab_serial(struct wlr_seat *seat, uint32_t serial); + #endif diff --git a/rootston/wl_shell.c b/rootston/wl_shell.c index 7f70acae..65067920 100644 --- a/rootston/wl_shell.c +++ b/rootston/wl_shell.c @@ -43,7 +43,6 @@ static void handle_request_resize(struct wl_listener *listener, void *data) { struct roots_input *input = view->desktop->server->input; struct wlr_wl_shell_surface_resize_event *e = data; struct roots_seat *seat = input_seat_from_wlr_seat(input, e->seat->seat); - // TODO verify input event if (!seat || seat->cursor->mode != ROOTS_CURSOR_PASSTHROUGH) { return; } diff --git a/types/wlr_seat.c b/types/wlr_seat.c index c1401b4a..b69e666b 100644 --- a/types/wlr_seat.c +++ b/types/wlr_seat.c @@ -1216,3 +1216,8 @@ int wlr_seat_touch_num_points(struct wlr_seat *seat) { bool wlr_seat_touch_has_grab(struct wlr_seat *seat) { return seat->touch_state.grab->interface != &default_touch_grab_impl; } + +bool wlr_seat_validate_grab_serial(struct wlr_seat *seat, uint32_t serial) { + return serial == seat->pointer_state.grab_serial || + serial == seat->touch_state.grab_serial; +} diff --git a/types/wlr_wl_shell.c b/types/wlr_wl_shell.c index a13717c1..03ce2c20 100644 --- a/types/wlr_wl_shell.c +++ b/types/wlr_wl_shell.c @@ -112,6 +112,11 @@ static void shell_surface_protocol_move(struct wl_client *client, struct wlr_seat_client *seat = wl_resource_get_user_data(seat_resource); + if (!wlr_seat_validate_grab_serial(seat->seat, serial)) { + wlr_log(L_DEBUG, "invalid serial for grab"); + return; + } + struct wlr_wl_shell_surface_move_event event = { .surface = surface, .seat = seat, @@ -170,6 +175,11 @@ static void shell_surface_protocol_resize(struct wl_client *client, struct wlr_seat_client *seat = wl_resource_get_user_data(seat_resource); + if (!wlr_seat_validate_grab_serial(seat->seat, serial)) { + wlr_log(L_DEBUG, "invalid serial for grab"); + return; + } + struct wlr_wl_shell_surface_resize_event event = { .surface = surface, .seat = seat, diff --git a/types/wlr_xdg_shell_v6.c b/types/wlr_xdg_shell_v6.c index 09675a7b..3d9dc404 100644 --- a/types/wlr_xdg_shell_v6.c +++ b/types/wlr_xdg_shell_v6.c @@ -565,6 +565,11 @@ static void xdg_toplevel_protocol_show_window_menu(struct wl_client *client, return; } + if (!wlr_seat_validate_grab_serial(seat->seat, serial)) { + wlr_log(L_DEBUG, "invalid serial for grab"); + return; + } + struct wlr_xdg_toplevel_v6_show_window_menu_event event = { .surface = surface, .seat = seat, @@ -590,6 +595,11 @@ static void xdg_toplevel_protocol_move(struct wl_client *client, return; } + if (!wlr_seat_validate_grab_serial(seat->seat, serial)) { + wlr_log(L_DEBUG, "invalid serial for grab"); + return; + } + struct wlr_xdg_toplevel_v6_move_event event = { .surface = surface, .seat = seat, @@ -613,6 +623,11 @@ static void xdg_toplevel_protocol_resize(struct wl_client *client, return; } + if (!wlr_seat_validate_grab_serial(seat->seat, serial)) { + wlr_log(L_DEBUG, "invalid serial for grab"); + return; + } + struct wlr_xdg_toplevel_v6_resize_event event = { .surface = surface, .seat = seat, -- cgit v1.2.3