Skip to content

Commit

Permalink
Make 2-1 chord via Ctrl-Button1 work under X.
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
zhenya-1007 committed Feb 23, 2023
1 parent e2a141a commit 650b88d
Showing 1 changed file with 8 additions and 2 deletions.
10 changes: 8 additions & 2 deletions src/cmd/devdraw/x11-screen.c
Original file line number Diff line number Diff line change
Expand Up @@ -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){
Expand All @@ -465,6 +465,12 @@ runxevent(XEvent *xev)
_x.kbuttons |= 2;
if(c & Mod1Mask)
_x.kbuttons |= 4;
switch (modp) {
case 2:
case 4:
m.buttons &= ~modp;
m.buttons |= 1;
}
gfx_mousetrack(w->client, m.xy.x, m.xy.y, m.buttons|_x.kbuttons, m.msec);
}
modp = 0;
Expand Down

0 comments on commit 650b88d

Please sign in to comment.