From 478628394d4c53faec399423b2e676be675c09d6 Mon Sep 17 00:00:00 2001 From: Locria Cyber <74560659+locriacyber@users.noreply.github.com> Date: Mon, 14 Mar 2022 20:03:22 +0800 Subject: [PATCH 1/3] Only handle Capslock specially --- gui-agent/vmside.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/gui-agent/vmside.c b/gui-agent/vmside.c index fd76f4db..8ab69048 100644 --- a/gui-agent/vmside.c +++ b/gui-agent/vmside.c @@ -1611,11 +1611,9 @@ static void handle_keypress(Ghandles * g, XID UNUSED(winid)) fprintf(stderr, "failed to get modifier state\n"); state.mods = key.state; } - if (!g->sync_all_modifiers) { - // ignore all but CapsLock - state.mods &= LockMask; - key.state &= LockMask; - } + // ignore all but CapsLock + state.mods &= LockMask; + key.state &= LockMask; if (state.mods != key.state) { XModifierKeymap *modmap; int mod_index; @@ -1660,6 +1658,7 @@ static void handle_keypress(Ghandles * g, XID UNUSED(winid)) } } + if (key.keycode == 66) return; // caplocks feed_xdriver(g, 'K', key.keycode, key.type == KeyPress ? 1 : 0); } From e586756d0ae92c91f451b2e4b932eac681cf1590 Mon Sep 17 00:00:00 2001 From: Locria Cyber <74560659+locriacyber@users.noreply.github.com> Date: Sun, 6 Mar 2022 15:34:50 +0800 Subject: [PATCH 2/3] Refactor; make capslock work worse --- gui-agent/vmside.c | 34 +++++++++++++++++++++------------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/gui-agent/vmside.c b/gui-agent/vmside.c index 8ab69048..c21876ff 100644 --- a/gui-agent/vmside.c +++ b/gui-agent/vmside.c @@ -40,6 +40,7 @@ #include #include #include +#include #include #include #include @@ -1611,9 +1612,13 @@ static void handle_keypress(Ghandles * g, XID UNUSED(winid)) fprintf(stderr, "failed to get modifier state\n"); state.mods = key.state; } - // ignore all but CapsLock - state.mods &= LockMask; - key.state &= LockMask; + if (!g->sync_all_modifiers) { + // ignore all but CapsLock + state.mods &= LockMask; + key.state &= LockMask; + } + bool is_press = key.type == KeyPress; + bool duplicate = false; if (state.mods != key.state) { XModifierKeymap *modmap; int mod_index; @@ -1634,7 +1639,8 @@ static void handle_keypress(Ghandles * g, XID UNUSED(winid)) // #define Mod4MapIndex 6 // #define Mod5MapIndex 7 for (mod_index = 0; mod_index < 8; mod_index++) { - if (modmap->modifiermap[mod_index*modmap->max_keypermod] == 0x00) { + uint32_t keycode = modmap->modifiermap[mod_index*modmap->max_keypermod]; + if (keycode == 0x00) { if (g->log_level > 1) fprintf(stderr, "ignoring disabled modifier %d\n", mod_index); // no key set for this modifier, ignore @@ -1644,22 +1650,24 @@ static void handle_keypress(Ghandles * g, XID UNUSED(winid)) // special case for caps lock switch by press+release if (mod_index == LockMapIndex) { if ((state.mods & mod_mask) ^ (key.state & mod_mask)) { - feed_xdriver(g, 'K', modmap->modifiermap[mod_index*modmap->max_keypermod], 1); - feed_xdriver(g, 'K', modmap->modifiermap[mod_index*modmap->max_keypermod], 0); + feed_xdriver(g, 'K', keycode, 1); + feed_xdriver(g, 'K', keycode, 0); } } else { - if ((state.mods & mod_mask) && !(key.state & mod_mask)) - feed_xdriver(g, 'K', modmap->modifiermap[mod_index*modmap->max_keypermod], 0); - else if (!(state.mods & mod_mask) && (key.state & mod_mask)) - feed_xdriver(g, 'K', modmap->modifiermap[mod_index*modmap->max_keypermod], 1); + if ((state.mods & mod_mask) && !(key.state & mod_mask)) { + feed_xdriver(g, 'K', keycode, 0); + if (keycode == key.keycode && is_press == 0) duplicate = true; + } + else if (!(state.mods & mod_mask) && (key.state & mod_mask)) { + feed_xdriver(g, 'K', keycode, 1); + if (keycode == key.keycode && is_press == 1) duplicate = true; + } } } XFreeModifiermap(modmap); } } - - if (key.keycode == 66) return; // caplocks - feed_xdriver(g, 'K', key.keycode, key.type == KeyPress ? 1 : 0); + if (!duplicate) feed_xdriver(g, 'K', key.keycode, is_press); } static void handle_button(Ghandles * g, XID winid) From 01cf529655afc8648527d129e915150d503d79ee Mon Sep 17 00:00:00 2001 From: Locria Cyber <74560659+locriacyber@users.noreply.github.com> Date: Sun, 13 Mar 2022 20:10:35 +0800 Subject: [PATCH 3/3] Modify .gitignore --- .gitignore | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/.gitignore b/.gitignore index c7ea199b..c920403b 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,14 @@ tags deb/ pkgs debian/changelog.* +/PKGBUILD* +/gui-agent/qubes-gui +/gui-common/qubes-gui-runuser +/pkg/ +*.tar.zst +/src/ +/xf86-input-mfndev/compile +/xf86-input-mfndev/config.h.in +/xf86-input-mfndev/depcomp +/xf86-input-mfndev/ltmain.sh +/xf86-qubes-common/libxf86-qubes-common.so