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.
This commit is contained in:
Evgeny ("Zhenya") Roubinchtein 2023-02-23 02:43:17 -08:00
parent e2a141ae09
commit 897d3c1b7b

View file

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