gimp but for windows: a wayland compositor
git clone https://github.com/m-col/wimp
Files | Refs | Readme

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);