diff options
Diffstat (limited to 'rootston')
-rw-r--r-- | rootston/cursor.c | 43 | ||||
-rw-r--r-- | rootston/keyboard.c | 1 | ||||
-rw-r--r-- | rootston/rootston.ini.example | 4 | ||||
-rw-r--r-- | rootston/seat.c | 25 | ||||
-rw-r--r-- | rootston/xdg_shell_v6.c | 2 |
5 files changed, 48 insertions, 27 deletions
diff --git a/rootston/cursor.c b/rootston/cursor.c index 158c4708..ab32a5de 100644 --- a/rootston/cursor.c +++ b/rootston/cursor.c @@ -249,38 +249,33 @@ static void roots_cursor_press_button(struct roots_cursor *cursor, roots_seat_begin_rotate(seat, view); break; } - 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; } - } - 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) { + roots_cursor_update_position(cursor, time); + } + break; + case WLR_BUTTON_PRESSED: + roots_seat_set_focus(seat, view); + break; } } - 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; + if (!is_touch) { + wlr_seat_pointer_notify_button(seat->seat, time, button, state); } } diff --git a/rootston/keyboard.c b/rootston/keyboard.c index f1123599..ddf541b4 100644 --- a/rootston/keyboard.c +++ b/rootston/keyboard.c @@ -159,6 +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_end_compositor_grab(keyboard->seat); } return false; 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 diff --git a/rootston/seat.c b/rootston/seat.c index 5b11af4a..45e42d7d 100644 --- a/rootston/seat.c +++ b/rootston/seat.c @@ -861,3 +861,28 @@ 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_end_compositor_grab(struct roots_seat *seat) { + struct roots_cursor *cursor = seat->cursor; + struct roots_view *view = roots_seat_get_focus(seat); + + 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; +} diff --git a/rootston/xdg_shell_v6.c b/rootston/xdg_shell_v6.c index b354b77b..9bd6f76a 100644 --- a/rootston/xdg_shell_v6.c +++ b/rootston/xdg_shell_v6.c @@ -147,7 +147,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_update_position(view, x, y); } } |