From ee6cbe2efd9c26098a0f8df55f490d0a54947064 Mon Sep 17 00:00:00 2001 From: Fabian Geiselhart Date: Sun, 4 Feb 2018 15:26:12 +0100 Subject: [PATCH 01/12] Comments should talk about colons not semicolons --- rootston/rootston.ini.example | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rootston/rootston.ini.example b/rootston/rootston.ini.example index 0d19b751..a6619767 100644 --- a/rootston/rootston.ini.example +++ b/rootston/rootston.ini.example @@ -2,7 +2,7 @@ # Disable X11 support. Enabled by default. xwayland=false -# Single output configuration. String after semicolon must match output's name. +# Single output configuration. String after colon must match output's name. [output:VGA-1] # Set logical (layout) coordinates for this screen x = 1920 @@ -24,7 +24,7 @@ geometry = 2500x800 # Load a custom XCursor theme theme = default -# Single device configuration. String after semicolon must match device's name. +# Single device configuration. String after colon must match device's name. [device:PixArt Dell MS116 USB Optical Mouse] # Restrict cursor movements for this mouse to single output map-to-output = VGA-1 From 8dcb2f2d6bf9c2ffb202c9b7f8b9e5e6aeea3f05 Mon Sep 17 00:00:00 2001 From: Vincent Vanlaer Date: Thu, 1 Feb 2018 20:29:03 +0100 Subject: [PATCH 02/12] Prevent cursor from getting stuck at infinity --- types/wlr_output_layout.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/types/wlr_output_layout.c b/types/wlr_output_layout.c index b01fb840..46b0bd2a 100644 --- a/types/wlr_output_layout.c +++ b/types/wlr_output_layout.c @@ -327,7 +327,11 @@ void wlr_output_layout_closest_point(struct wlr_output_layout *layout, output_distance = (x - output_x) * (x - output_x) + (y - output_y) * (y - output_y); - if (output_distance < min_distance) { + if (!isfinite(output_distance)) { + output_distance = DBL_MAX; + } + + if (output_distance <= min_distance) { min_x = output_x; min_y = output_y; min_distance = output_distance; From 7e3bb39d4994767edb972fe3039c7dd317fb63b0 Mon Sep 17 00:00:00 2001 From: Vincent Vanlaer Date: Tue, 6 Feb 2018 12:26:54 +0100 Subject: [PATCH 03/12] Always notify seat on button press When the cursor is not over a view, wlr_seat_pointer_notify_button is not called. However, this function does the bookkeeping of the pointer state with regards to the number of pressed buttons. Because this function also sends updates to the focused view, it has been moved down, after the focus has been updated. --- rootston/cursor.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/rootston/cursor.c b/rootston/cursor.c index d8753f44..59996d30 100644 --- a/rootston/cursor.c +++ b/rootston/cursor.c @@ -261,12 +261,6 @@ static void roots_cursor_press_button(struct roots_cursor *cursor, } } - if (view && surface) { - if (!is_touch) { - wlr_seat_pointer_notify_button(seat->seat, time, button, state); - } - } - switch (state) { case WLR_BUTTON_RELEASED: if (!is_touch) { @@ -277,6 +271,10 @@ static void roots_cursor_press_button(struct roots_cursor *cursor, roots_seat_set_focus(seat, view); break; } + + if (!is_touch) { + wlr_seat_pointer_notify_button(seat->seat, time, button, state); + } } void roots_cursor_handle_motion(struct roots_cursor *cursor, From 7ae8800a637f9c4b0bc0ab33e10bc40fc30f91fa Mon Sep 17 00:00:00 2001 From: Vincent Vanlaer Date: Tue, 6 Feb 2018 12:36:38 +0100 Subject: [PATCH 04/12] Cancel rootston move/resize/rotate on escape press --- include/rootston/seat.h | 6 ++++++ rootston/keyboard.c | 3 +++ rootston/seat.c | 36 ++++++++++++++++++++++++++++++++++++ 3 files changed, 45 insertions(+) diff --git a/include/rootston/seat.h b/include/rootston/seat.h index 966d98e5..70e8e867 100644 --- a/include/rootston/seat.h +++ b/include/rootston/seat.h @@ -84,11 +84,17 @@ void roots_seat_cycle_focus(struct roots_seat *seat); void roots_seat_begin_move(struct roots_seat *seat, struct roots_view *view); +void roots_seat_cancel_move(struct roots_seat *seat); + void roots_seat_begin_resize(struct roots_seat *seat, struct roots_view *view, uint32_t edges); +void roots_seat_cancel_resize(struct roots_seat *seat); + void roots_seat_begin_rotate(struct roots_seat *seat, struct roots_view *view); +void roots_seat_cancel_rotate(struct roots_seat *seat); + struct roots_seat_view *roots_seat_view_from_view( struct roots_seat *seat, struct roots_view *view); diff --git a/rootston/keyboard.c b/rootston/keyboard.c index f1123599..c29df46a 100644 --- a/rootston/keyboard.c +++ b/rootston/keyboard.c @@ -159,6 +159,9 @@ static bool keyboard_execute_compositor_binding(struct roots_keyboard *keyboard, if (keysym == XKB_KEY_Escape) { wlr_seat_pointer_end_grab(keyboard->seat->seat); wlr_seat_keyboard_end_grab(keyboard->seat->seat); + roots_seat_cancel_move(keyboard->seat); + roots_seat_cancel_resize(keyboard->seat); + roots_seat_cancel_rotate(keyboard->seat); } return false; diff --git a/rootston/seat.c b/rootston/seat.c index d7353d1e..a97f66ba 100644 --- a/rootston/seat.c +++ b/rootston/seat.c @@ -738,6 +738,18 @@ void roots_seat_begin_move(struct roots_seat *seat, struct roots_view *view) { ROOTS_XCURSOR_MOVE, seat->cursor->cursor); } +void roots_seat_cancel_move(struct roots_seat *seat) { + struct roots_cursor *cursor = seat->cursor; + struct roots_view *view = roots_seat_get_focus(seat); + + if (cursor->mode != ROOTS_CURSOR_MOVE || view == NULL) { + return; + } + + cursor->mode = ROOTS_CURSOR_PASSTHROUGH; + view_move(view, cursor->view_x, cursor->view_y); +} + void roots_seat_begin_resize(struct roots_seat *seat, struct roots_view *view, uint32_t edges) { struct roots_cursor *cursor = seat->cursor; @@ -766,6 +778,18 @@ void roots_seat_begin_resize(struct roots_seat *seat, struct roots_view *view, resize_name, seat->cursor->cursor); } +void roots_seat_cancel_resize(struct roots_seat *seat) { + struct roots_cursor *cursor = seat->cursor; + struct roots_view *view = roots_seat_get_focus(seat); + + if (cursor->mode != ROOTS_CURSOR_RESIZE || view == NULL) { + return; + } + + cursor->mode = ROOTS_CURSOR_PASSTHROUGH; + view_move_resize(view, cursor->view_x, cursor->view_y, cursor->view_width, cursor->view_height); +} + void roots_seat_begin_rotate(struct roots_seat *seat, struct roots_view *view) { struct roots_cursor *cursor = seat->cursor; cursor->mode = ROOTS_CURSOR_ROTATE; @@ -778,3 +802,15 @@ void roots_seat_begin_rotate(struct roots_seat *seat, struct roots_view *view) { wlr_xcursor_manager_set_cursor_image(seat->cursor->xcursor_manager, ROOTS_XCURSOR_ROTATE, seat->cursor->cursor); } + +void roots_seat_cancel_rotate(struct roots_seat *seat) { + struct roots_cursor *cursor = seat->cursor; + struct roots_view *view = roots_seat_get_focus(seat); + + if (cursor->mode != ROOTS_CURSOR_ROTATE || view == NULL) { + return; + } + + cursor->mode = ROOTS_CURSOR_PASSTHROUGH; + view->rotation = cursor->view_rotation; +} From 6567a359034c4a0829711e518fb284c7c5df5d44 Mon Sep 17 00:00:00 2001 From: Vincent Vanlaer Date: Tue, 6 Feb 2018 12:53:51 +0100 Subject: [PATCH 05/12] Update seat pointer on meta move/resize/rotate This will send the button pressed event to the client. This shouldn't be a problem since sebsequent pointer movements are not sent to the client. Thus the client will not for example start selecting text when it is being resized using the compositor keybindigns. --- rootston/cursor.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/rootston/cursor.c b/rootston/cursor.c index 59996d30..0b490989 100644 --- a/rootston/cursor.c +++ b/rootston/cursor.c @@ -244,6 +244,9 @@ static void roots_cursor_press_button(struct roots_cursor *cursor, roots_seat_begin_rotate(seat, view); break; } + if (!is_touch) { + wlr_seat_pointer_notify_button(seat->seat, time, button, state); + } return; } From 147e5c0f8f689d052f77bbcffda8e7da41241109 Mon Sep 17 00:00:00 2001 From: Vincent Vanlaer Date: Tue, 6 Feb 2018 13:15:27 +0100 Subject: [PATCH 06/12] Refactor roots_cursor_press_button Removed the button_count check when resizing/moving/rotating ends, since all buttons presses are now properly tracked. --- rootston/cursor.c | 40 +++++++++++++++++----------------------- 1 file changed, 17 insertions(+), 23 deletions(-) diff --git a/rootston/cursor.c b/rootston/cursor.c index 0b490989..87391e29 100644 --- a/rootston/cursor.c +++ b/rootston/cursor.c @@ -244,35 +244,29 @@ static void roots_cursor_press_button(struct roots_cursor *cursor, roots_seat_begin_rotate(seat, view); break; } - if (!is_touch) { - wlr_seat_pointer_notify_button(seat->seat, time, button, state); - } - return; - } + } else { - if (view && !surface) { - if (cursor->pointer_view) { - seat_view_deco_button(cursor->pointer_view, sx, sy, button, state); + if (view && !surface) { + if (cursor->pointer_view) { + seat_view_deco_button(cursor->pointer_view, sx, sy, button, state); + } } - } - if (state == WLR_BUTTON_RELEASED && - cursor->mode != ROOTS_CURSOR_PASSTHROUGH) { - cursor->mode = ROOTS_CURSOR_PASSTHROUGH; - if (seat->seat->pointer_state.button_count == 0) { - return; + if (state == WLR_BUTTON_RELEASED && + cursor->mode != ROOTS_CURSOR_PASSTHROUGH) { + cursor->mode = ROOTS_CURSOR_PASSTHROUGH; } - } - switch (state) { - case WLR_BUTTON_RELEASED: - if (!is_touch) { - roots_cursor_update_position(cursor, time); + switch (state) { + case WLR_BUTTON_RELEASED: + if (!is_touch) { + roots_cursor_update_position(cursor, time); + } + break; + case WLR_BUTTON_PRESSED: + roots_seat_set_focus(seat, view); + break; } - break; - case WLR_BUTTON_PRESSED: - roots_seat_set_focus(seat, view); - break; } if (!is_touch) { From 08fda567d22dfdde6a4764d8dd3466dddf39b507 Mon Sep 17 00:00:00 2001 From: Markus Ongyerth Date: Tue, 6 Feb 2018 22:45:37 +0100 Subject: [PATCH 07/12] prevents reuse of outdated wlr_output state On the drm output the wlr_drm_connector structs are reused. This struct contains the wlr_output struct, which is reused as well. The old code kept modes/edid and output state persistent over hotplug. This nulls the relevant strings, reads newer edid data and removes old modes on unplug. --- backend/drm/drm.c | 38 +++++++++++++++++++++++++++----------- 1 file changed, 27 insertions(+), 11 deletions(-) diff --git a/backend/drm/drm.c b/backend/drm/drm.c index f6cc084e..cf5af355 100644 --- a/backend/drm/drm.c +++ b/backend/drm/drm.c @@ -14,6 +14,7 @@ #include #include #include +#include #include #include #include @@ -759,22 +760,11 @@ void wlr_drm_scan_connectors(struct wlr_drm_backend *drm) { wlr_conn->old_crtc = drmModeGetCrtc(drm->fd, curr_enc->crtc_id); } - wlr_conn->output.phys_width = drm_conn->mmWidth; - wlr_conn->output.phys_height = drm_conn->mmHeight; - wlr_conn->output.subpixel = subpixel_map[drm_conn->subpixel]; snprintf(wlr_conn->output.name, sizeof(wlr_conn->output.name), "%s-%"PRIu32, conn_get_name(drm_conn->connector_type), drm_conn->connector_type_id); - wlr_drm_get_connector_props(drm->fd, wlr_conn->id, &wlr_conn->props); - - size_t edid_len = 0; - uint8_t *edid = wlr_drm_get_prop_blob(drm->fd, - wlr_conn->id, wlr_conn->props.edid, &edid_len); - parse_edid(&wlr_conn->output, edid_len, edid); - free(edid); - wl_list_insert(&drm->outputs, &wlr_conn->link); wlr_log(L_INFO, "Found display '%s'", wlr_conn->output.name); } else { @@ -795,6 +785,21 @@ void wlr_drm_scan_connectors(struct wlr_drm_backend *drm) { if (wlr_conn->state == WLR_DRM_CONN_DISCONNECTED && drm_conn->connection == DRM_MODE_CONNECTED) { wlr_log(L_INFO, "'%s' connected", wlr_conn->output.name); + + wlr_conn->output.phys_width = drm_conn->mmWidth; + wlr_conn->output.phys_height = drm_conn->mmHeight; + wlr_log(L_INFO, "Physical size: %"PRId32"x%"PRId32, + wlr_conn->output.phys_width, wlr_conn->output.phys_height); + wlr_conn->output.subpixel = subpixel_map[drm_conn->subpixel]; + + wlr_drm_get_connector_props(drm->fd, wlr_conn->id, &wlr_conn->props); + + size_t edid_len = 0; + uint8_t *edid = wlr_drm_get_prop_blob(drm->fd, + wlr_conn->id, wlr_conn->props.edid, &edid_len); + parse_edid(&wlr_conn->output, edid_len, edid); + free(edid); + wlr_log(L_INFO, "Detected modes:"); for (int i = 0; i < drm_conn->count_modes; ++i) { @@ -947,6 +952,17 @@ void wlr_drm_connector_cleanup(struct wlr_drm_connector *conn) { } } + struct wlr_drm_mode *mode; + struct wlr_drm_mode *tmp; + wl_list_for_each_safe(mode, tmp, &conn->output.modes, wlr_mode.link) { + wl_list_remove(&mode->wlr_mode.link); + free(mode); + } + + memset(&conn->output.make, 0, sizeof(conn->output.make)); + memset(&conn->output.model, 0, sizeof(conn->output.model)); + memset(&conn->output.serial, 0, sizeof(conn->output.serial)); + conn->crtc = NULL; conn->possible_crtc = 0; /* Fallthrough */ From 90eb50d9aabe7665ae081c869b2986c691150b56 Mon Sep 17 00:00:00 2001 From: Vincent Vanlaer Date: Tue, 6 Feb 2018 22:55:56 +0100 Subject: [PATCH 08/12] Merge roots_seat_cancel_* into one function --- include/rootston/seat.h | 6 +----- rootston/keyboard.c | 4 +--- rootston/seat.c | 43 +++++++++++++++-------------------------- 3 files changed, 18 insertions(+), 35 deletions(-) diff --git a/include/rootston/seat.h b/include/rootston/seat.h index 70e8e867..0eb3bee8 100644 --- a/include/rootston/seat.h +++ b/include/rootston/seat.h @@ -84,16 +84,12 @@ void roots_seat_cycle_focus(struct roots_seat *seat); void roots_seat_begin_move(struct roots_seat *seat, struct roots_view *view); -void roots_seat_cancel_move(struct roots_seat *seat); - void roots_seat_begin_resize(struct roots_seat *seat, struct roots_view *view, uint32_t edges); -void roots_seat_cancel_resize(struct roots_seat *seat); - void roots_seat_begin_rotate(struct roots_seat *seat, struct roots_view *view); -void roots_seat_cancel_rotate(struct roots_seat *seat); +void roots_seat_cancel_transform(struct roots_seat *seat); struct roots_seat_view *roots_seat_view_from_view( struct roots_seat *seat, struct roots_view *view); diff --git a/rootston/keyboard.c b/rootston/keyboard.c index c29df46a..e399ac96 100644 --- a/rootston/keyboard.c +++ b/rootston/keyboard.c @@ -159,9 +159,7 @@ static bool keyboard_execute_compositor_binding(struct roots_keyboard *keyboard, if (keysym == XKB_KEY_Escape) { wlr_seat_pointer_end_grab(keyboard->seat->seat); wlr_seat_keyboard_end_grab(keyboard->seat->seat); - roots_seat_cancel_move(keyboard->seat); - roots_seat_cancel_resize(keyboard->seat); - roots_seat_cancel_rotate(keyboard->seat); + roots_seat_cancel_transform(keyboard->seat); } return false; diff --git a/rootston/seat.c b/rootston/seat.c index a97f66ba..559a8b7f 100644 --- a/rootston/seat.c +++ b/rootston/seat.c @@ -738,18 +738,6 @@ void roots_seat_begin_move(struct roots_seat *seat, struct roots_view *view) { ROOTS_XCURSOR_MOVE, seat->cursor->cursor); } -void roots_seat_cancel_move(struct roots_seat *seat) { - struct roots_cursor *cursor = seat->cursor; - struct roots_view *view = roots_seat_get_focus(seat); - - if (cursor->mode != ROOTS_CURSOR_MOVE || view == NULL) { - return; - } - - cursor->mode = ROOTS_CURSOR_PASSTHROUGH; - view_move(view, cursor->view_x, cursor->view_y); -} - void roots_seat_begin_resize(struct roots_seat *seat, struct roots_view *view, uint32_t edges) { struct roots_cursor *cursor = seat->cursor; @@ -778,18 +766,6 @@ void roots_seat_begin_resize(struct roots_seat *seat, struct roots_view *view, resize_name, seat->cursor->cursor); } -void roots_seat_cancel_resize(struct roots_seat *seat) { - struct roots_cursor *cursor = seat->cursor; - struct roots_view *view = roots_seat_get_focus(seat); - - if (cursor->mode != ROOTS_CURSOR_RESIZE || view == NULL) { - return; - } - - cursor->mode = ROOTS_CURSOR_PASSTHROUGH; - view_move_resize(view, cursor->view_x, cursor->view_y, cursor->view_width, cursor->view_height); -} - void roots_seat_begin_rotate(struct roots_seat *seat, struct roots_view *view) { struct roots_cursor *cursor = seat->cursor; cursor->mode = ROOTS_CURSOR_ROTATE; @@ -803,14 +779,27 @@ void roots_seat_begin_rotate(struct roots_seat *seat, struct roots_view *view) { ROOTS_XCURSOR_ROTATE, seat->cursor->cursor); } -void roots_seat_cancel_rotate(struct roots_seat *seat) { +void roots_seat_cancel_transform(struct roots_seat *seat) { struct roots_cursor *cursor = seat->cursor; struct roots_view *view = roots_seat_get_focus(seat); - if (cursor->mode != ROOTS_CURSOR_ROTATE || view == NULL) { + if (view == NULL) { return; } + switch(cursor->mode) { + case ROOTS_CURSOR_MOVE: + view_move(view, cursor->view_x, cursor->view_y); + break; + case ROOTS_CURSOR_RESIZE: + view_move_resize(view, cursor->view_x, cursor->view_y, cursor->view_width, cursor->view_height); + break; + case ROOTS_CURSOR_ROTATE: + view->rotation = cursor->view_rotation; + break; + case ROOTS_CURSOR_PASSTHROUGH: + break; + } + cursor->mode = ROOTS_CURSOR_PASSTHROUGH; - view->rotation = cursor->view_rotation; } From b181f793c393527d6bc955b4762a6945cbe65d1b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lars=20Hagstr=C3=B6m?= Date: Wed, 7 Feb 2018 17:42:31 +0100 Subject: [PATCH 09/12] Make pointer button release outside window still count down the button_count. When double-clicking a maximized window title, so that the windows size is restored and the mouse pointer ends up _outside_ the window it becomes impossible to move windows. The reason is that the button_count variable is not counted down if the mouse button is released outside the window, so the button_count remains incremented even after the button is released. This patch adds a call to wlr_seat_pointer_notify_button if the mouse button is released outside the window. (I am a complete noob to wlroots, so be kind...) --- rootston/cursor.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/rootston/cursor.c b/rootston/cursor.c index d8753f44..717a3da8 100644 --- a/rootston/cursor.c +++ b/rootston/cursor.c @@ -261,7 +261,9 @@ static void roots_cursor_press_button(struct roots_cursor *cursor, } } - if (view && surface) { + if ((view && surface) || + (state == WLR_BUTTON_RELEASED && + seat->seat->pointer_state.button_count != 0)) { if (!is_touch) { wlr_seat_pointer_notify_button(seat->seat, time, button, state); } From 099c80e7d6b27ad122d15e96a02816039157d3f7 Mon Sep 17 00:00:00 2001 From: Vincent Vanlaer Date: Wed, 7 Feb 2018 18:36:08 +0100 Subject: [PATCH 10/12] Fix jitter when quickly resizing windows Surfaces and views get resized only on commit, therefore we may only change the position of a window if there are no pending commits. --- rootston/xdg_shell_v6.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rootston/xdg_shell_v6.c b/rootston/xdg_shell_v6.c index 0515263b..41353199 100644 --- a/rootston/xdg_shell_v6.c +++ b/rootston/xdg_shell_v6.c @@ -101,7 +101,7 @@ static void move_resize(struct roots_view *view, double x, double y, constrained_height); if (serial > 0) { roots_surface->pending_move_resize_configure_serial = serial; - } else { + } else if(roots_surface->pending_move_resize_configure_serial == 0) { view->x = x; view->y = y; } From 712665b83b83871c52144ea36fe9469ad06b5107 Mon Sep 17 00:00:00 2001 From: Vincent Vanlaer Date: Wed, 7 Feb 2018 20:26:30 +0100 Subject: [PATCH 11/12] Fix style error --- rootston/xdg_shell_v6.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rootston/xdg_shell_v6.c b/rootston/xdg_shell_v6.c index 41353199..884d0d05 100644 --- a/rootston/xdg_shell_v6.c +++ b/rootston/xdg_shell_v6.c @@ -101,7 +101,7 @@ static void move_resize(struct roots_view *view, double x, double y, constrained_height); if (serial > 0) { roots_surface->pending_move_resize_configure_serial = serial; - } else if(roots_surface->pending_move_resize_configure_serial == 0) { + } else if (roots_surface->pending_move_resize_configure_serial == 0) { view->x = x; view->y = y; } From 74264d4f6243fc8ff87e66faf1940d3dd9d5b501 Mon Sep 17 00:00:00 2001 From: Vincent Vanlaer Date: Thu, 8 Feb 2018 13:13:33 +0100 Subject: [PATCH 12/12] Rename roots_seat_cancel_transform --- include/rootston/seat.h | 2 +- rootston/keyboard.c | 2 +- rootston/seat.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/include/rootston/seat.h b/include/rootston/seat.h index 0eb3bee8..2be8e467 100644 --- a/include/rootston/seat.h +++ b/include/rootston/seat.h @@ -89,7 +89,7 @@ void roots_seat_begin_resize(struct roots_seat *seat, struct roots_view *view, void roots_seat_begin_rotate(struct roots_seat *seat, struct roots_view *view); -void roots_seat_cancel_transform(struct roots_seat *seat); +void roots_seat_end_compositor_grab(struct roots_seat *seat); struct roots_seat_view *roots_seat_view_from_view( struct roots_seat *seat, struct roots_view *view); diff --git a/rootston/keyboard.c b/rootston/keyboard.c index e399ac96..ddf541b4 100644 --- a/rootston/keyboard.c +++ b/rootston/keyboard.c @@ -159,7 +159,7 @@ static bool keyboard_execute_compositor_binding(struct roots_keyboard *keyboard, if (keysym == XKB_KEY_Escape) { wlr_seat_pointer_end_grab(keyboard->seat->seat); wlr_seat_keyboard_end_grab(keyboard->seat->seat); - roots_seat_cancel_transform(keyboard->seat); + roots_seat_end_compositor_grab(keyboard->seat); } return false; diff --git a/rootston/seat.c b/rootston/seat.c index 559a8b7f..edb98095 100644 --- a/rootston/seat.c +++ b/rootston/seat.c @@ -779,7 +779,7 @@ void roots_seat_begin_rotate(struct roots_seat *seat, struct roots_view *view) { ROOTS_XCURSOR_ROTATE, seat->cursor->cursor); } -void roots_seat_cancel_transform(struct roots_seat *seat) { +void roots_seat_end_compositor_grab(struct roots_seat *seat) { struct roots_cursor *cursor = seat->cursor; struct roots_view *view = roots_seat_get_focus(seat);