I'm seeing a weird issue with my xserver where all key press events will
be set with (state & Button1Mask), which ends up breaking all st
keyboard shortcuts. xterm works correctly because it whitelists
modifiers relevant to key press events. Do the same in st.
---
I haven't figured out why events are being reported like this, but
seeing as everything else but st works, I think we should handle it.

 st.c  | 3 ++-
 win.h | 3 +++
 2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/st.c b/st.c
index ae93ade..5184761 100644
--- a/st.c
+++ b/st.c
@@ -2619,7 +2619,8 @@ redraw(void)
 int
 match(uint mask, uint state)
 {
-       return mask == XK_ANY_MOD || mask == (state & ~ignoremod);
+       return (mask == XK_ANY_MOD ||
+               mask == (state & KeyModifiers & ~ignoremod));
 }
 
 void
diff --git a/win.h b/win.h
index 428111c..64974c2 100644
--- a/win.h
+++ b/win.h
@@ -5,6 +5,9 @@
 #define XK_NO_MOD     0
 #define XK_SWITCH_MOD (1<<13)
 
+#define KeyModifiers (ShiftMask | LockMask | ControlMask | Mod1Mask | \
+                     Mod2Mask | Mod3Mask | Mod4Mask | Mod5Mask)
+
 typedef XftGlyphFontSpec GlyphFontSpec;
 
 void draw(void);
-- 
2.12.2


Reply via email to