From b194881ac24df5e3dc9a2f899c36f7298548aea2 Mon Sep 17 00:00:00 2001 From: Johan Malm Date: Fri, 9 Jul 2021 21:58:54 +0100 Subject: [PATCH] cursor: handle alt + mouse button (issue #40) Move view on alt + left mouse button Resize view on alt + right mouse button --- src/cursor.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/cursor.c b/src/cursor.c index 5790150f..20ccd070 100644 --- a/src/cursor.c +++ b/src/cursor.c @@ -1,4 +1,5 @@ #include +#include #include "labwc.h" #include "menu/menu.h" #include "ssd.h" @@ -270,6 +271,23 @@ cursor_motion_absolute(struct wl_listener *listener, void *data) process_cursor_motion(seat->server, event->time_msec); } +static void +handle_cursor_button_with_meta_key(struct view *view, uint32_t button, + double lx, double ly) +{ + /* move */ + if (button == BTN_LEFT) { + interactive_begin(view, LAB_INPUT_STATE_MOVE, 0); + return; + } + + /* resize */ + uint32_t edges; + edges = lx < view->x + view->w / 2 ? WLR_EDGE_LEFT : WLR_EDGE_RIGHT; + edges |= ly < view->y + view->h / 2 ? WLR_EDGE_TOP : WLR_EDGE_BOTTOM; + interactive_begin(view, LAB_INPUT_STATE_RESIZE, edges); +} + void cursor_button(struct wl_listener *listener, void *data) { @@ -318,6 +336,15 @@ cursor_button(struct wl_listener *listener, void *data) return; } + /* handle alt + _press_ on view */ + struct wlr_input_device *device = seat->keyboard_group->input_device; + uint32_t modifiers = wlr_keyboard_get_modifiers(device->keyboard); + if (modifiers & XKB_KEY_Alt_L) { + handle_cursor_button_with_meta_key(view, event->button, + server->seat.cursor->x, server->seat.cursor->y); + return; + }; + /* Handle _press_ on view */ desktop_focus_view(&server->seat, view); damage_all_outputs(server);