]> git.mdlowis.com Git - proto/labwc.git/commitdiff
cursor: handle alt + mouse button (issue #40)
authorJohan Malm <jgm323@gmail.com>
Fri, 9 Jul 2021 20:58:54 +0000 (21:58 +0100)
committerJohan Malm <jgm323@gmail.com>
Fri, 9 Jul 2021 20:58:54 +0000 (21:58 +0100)
Move view on alt + left mouse button
Resize view on alt + right mouse button

src/cursor.c

index 5790150f102719aa5a00dbc1f69360722b0fab2d..20ccd070f886214c66d5496abf5364b0c11198ed 100644 (file)
@@ -1,4 +1,5 @@
 #include <assert.h>
+#include <linux/input-event-codes.h>
 #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);