Skip to content

Commit 897d3c1

Browse files
committed
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.
1 parent e2a141a commit 897d3c1

File tree

1 file changed

+6
-2
lines changed

1 file changed

+6
-2
lines changed

src/cmd/devdraw/x11-screen.c

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -450,10 +450,10 @@ runxevent(XEvent *xev)
450450
else {
451451
if(ke->keycode == kcodecontrol){
452452
c &= ~ControlMask;
453-
modp = 1;
453+
modp = 2;
454454
} else if(ke->keycode == kcodealt || ke->keycode == kcodeshift){
455455
c &= ~Mod1Mask;
456-
modp = 1;
456+
modp = 4;
457457
}
458458
}
459459
if(modp){
@@ -465,6 +465,10 @@ runxevent(XEvent *xev)
465465
_x.kbuttons |= 2;
466466
if(c & Mod1Mask)
467467
_x.kbuttons |= 4;
468+
if (m.buttons & modp) {
469+
m.buttons &= ~modp;
470+
m.buttons |= 1;
471+
}
468472
gfx_mousetrack(w->client, m.xy.x, m.xy.y, m.buttons|_x.kbuttons, m.msec);
469473
}
470474
modp = 0;

0 commit comments

Comments
 (0)