From 897d3c1b7b2e5b431b9ea4226684e5654d7fa901 Mon Sep 17 00:00:00 2001 From: "Evgeny (\"Zhenya\") Roubinchtein" Date: Thu, 23 Feb 2023 02:43:17 -0800 Subject: [PATCH] Make 2-1 chord via Ctrl-Button1 work under X. I noticed that, when Acme runs on MacOS X, I can simulate 2-1 chord as follows: 1. Press and hold Option key on the keyboard. 2. (while holding down Option) press mouse button 1. 3. Release Option. 4. Release mouse button 1. However, under X, the analogous chord with Control didn't work for me. I believe the reason is that Button1 never gets "pressed" when the sequence of events I described above is processed by code in x11-screen.c. I arrived at that conclusion by "walking through" the code as it processes events in my head. This PR contains one possible way to remedy the situation. The drawback is that, if someone were to do Ctrl-Button2, they'd get a spurious 2-1 chord, but I think that may be acceptable. --- src/cmd/devdraw/x11-screen.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/cmd/devdraw/x11-screen.c b/src/cmd/devdraw/x11-screen.c index 9490ab8f2..6bb61e082 100644 --- a/src/cmd/devdraw/x11-screen.c +++ b/src/cmd/devdraw/x11-screen.c @@ -450,10 +450,10 @@ runxevent(XEvent *xev) else { if(ke->keycode == kcodecontrol){ c &= ~ControlMask; - modp = 1; + modp = 2; } else if(ke->keycode == kcodealt || ke->keycode == kcodeshift){ c &= ~Mod1Mask; - modp = 1; + modp = 4; } } if(modp){ @@ -465,6 +465,10 @@ runxevent(XEvent *xev) _x.kbuttons |= 2; if(c & Mod1Mask) _x.kbuttons |= 4; + if (m.buttons & modp) { + m.buttons &= ~modp; + m.buttons |= 1; + } gfx_mousetrack(w->client, m.xy.x, m.xy.y, m.buttons|_x.kbuttons, m.msec); } modp = 0;