Commit 07664d034bc7a1d4eaeca6061d29c04d984eadad Parent: 154e507eee6d26611ee30d94b7f0108789468bb2 Author: mcol <mcol@posteo.net> Date: 2020-11-20 23:49:14 +0000 Committer: mcol <mcol@posteo.net> Committed: 2020-11-20 23:49:14 +0000 add set_modifier option to choose modifier key for bindings
src/types.h Modified
@@ -47,6 +47,7 @@ struct wl_listener request_cursor_listener; struct wl_listener request_set_selection_listener; struct wl_list keyboards; + enum wlr_keyboard_modifier mod; enum cursor_mode cursor_mode; struct view *grabbed_view; double grab_x, grab_y;
src/input.h Modified
@@ -3,6 +3,7 @@ #include "types.h" +void set_modifier(struct server *server, char *modifier); void process_cursor_move(struct server *server, uint32_t time, double zoom); void process_cursor_resize(struct server *server, uint32_t time, double zoom); bool view_at(
src/input.c Modified
@@ -10,7 +10,24 @@ #include "types.h" -enum wlr_keyboard_modifier MOD = WLR_MODIFIER_LOGO; +void set_modifier(struct server *server, char *mod) { + if (strcasecmp(mod, "shift") == 0) + server->mod = WLR_MODIFIER_SHIFT; + else if (strcasecmp(mod, "caps") == 0) + server->mod = WLR_MODIFIER_CAPS; + else if (strcasecmp(mod, "ctrl") == 0) + server->mod = WLR_MODIFIER_CTRL; + else if (strcasecmp(mod, "alt") == 0) + server->mod = WLR_MODIFIER_ALT; + else if (strcasecmp(mod, "mod2") == 0) + server->mod = WLR_MODIFIER_MOD2; + else if (strcasecmp(mod, "mod3") == 0) + server->mod = WLR_MODIFIER_MOD3; + else if (strcasecmp(mod, "mod4") == 0) + server->mod = WLR_MODIFIER_LOGO; + else if (strcasecmp(mod, "mod5") == 0) + server->mod = WLR_MODIFIER_MOD5; +} void process_cursor_move(struct server *server, uint32_t time, double zoom) { @@ -198,7 +215,7 @@ keyboard->server->seat, &keyboard->device->keyboard->modifiers ); uint32_t modifiers = wlr_keyboard_get_modifiers(keyboard->device->keyboard); - if ((modifiers & MOD)) { + if ((modifiers & keyboard->server->mod)) { keyboard->server->cursor_mode = CURSOR_PAN; } else { keyboard->server->cursor_mode = CURSOR_PASSTHROUGH; @@ -261,7 +278,7 @@ bool handled = false; uint32_t modifiers = wlr_keyboard_get_modifiers(keyboard->device->keyboard); - if ((modifiers & MOD) && event->state == WLR_KEY_PRESSED) { + if ((modifiers & server->mod) && event->state == WLR_KEY_PRESSED) { for (int i = 0; i < nsyms; i++) { handled = handle_keybinding(server, syms[i]); }
src/config.c Modified
@@ -8,6 +8,7 @@ #include "config.h" #include "desk.h" +#include "input.h" #include "types.h" #define is_decimal(s) (strspn(s, "0123456789.") == strlen(s)) @@ -90,6 +91,8 @@ wl_container_of(server->desks.next, server->current_desk, link); server->zoom_min = 0.5; server->zoom_max = 3; + + server->mod = WLR_MODIFIER_LOGO; } @@ -127,6 +130,10 @@ if ((s = strtok(NULL, " \t\n\r"))) { set_wallpaper(server, s); } + } else if (!strcasecmp(s, "set_modifier")) { + if ((s = strtok(NULL, " \t\n\r"))) { + set_modifier(server, s); + } } else if (!strcasecmp(s, "zoom_min")) { if ((s = strtok(NULL, " \t\n\r")) && is_decimal(s)) { server->zoom_min = strtod(s, NULL);