commit 914cee019d8b72d76287c686d1ca2fb3952cf85c
parent d230df08029f61ee4a83e3a86782df54e4809c0c
Author: bakkeby <bakkeby@gmail.com>
Date: Thu, 2 Apr 2020 16:23:53 +0200
[st] mouseshortcuts: fix custom modifier on release (4c84ac4)
Diffstat:
| M | x.c | | | 22 | ++++++++++++++++++---- |
1 file changed, 18 insertions(+), 4 deletions(-)
diff --git a/x.c b/x.c
@@ -198,6 +198,7 @@ static void kpress(XEvent *);
static void cmessage(XEvent *);
static void resize(XEvent *);
static void focus(XEvent *);
+static uint buttonmask(uint);
static void brelease(XEvent *);
static void bpress(XEvent *);
static void bmotion(XEvent *);
@@ -396,19 +397,32 @@ evrow(XEvent *e)
return y / win.ch;
}
+uint
+buttonmask(uint button)
+{
+ return button == Button1 ? Button1Mask
+ : button == Button2 ? Button2Mask
+ : button == Button3 ? Button3Mask
+ : button == Button4 ? Button4Mask
+ : button == Button5 ? Button5Mask
+ : 0;
+}
int
mouseaction(XEvent *e, uint release)
{
MouseShortcut *ms;
+ /* ignore Button<N>mask for Button<N> - it's set on release */
+ uint state = e->xbutton.state & ~buttonmask(e->xbutton.button);
+
#if SCROLLBACK_MOUSE_ALTSCREEN_PATCH
if (tisaltscr())
for (ms = maltshortcuts; ms < maltshortcuts + LEN(maltshortcuts); ms++) {
if (ms->release == release &&
ms->button == e->xbutton.button &&
- (match(ms->mod, e->xbutton.state) || /* exact or forced */
- match(ms->mod, e->xbutton.state & ~forcemousemod))) {
+ (match(ms->mod, state) || /* exact or forced */
+ match(ms->mod, state & ~forcemousemod))) {
ms->func(&(ms->arg));
return 1;
}
@@ -418,8 +432,8 @@ mouseaction(XEvent *e, uint release)
for (ms = mshortcuts; ms < mshortcuts + LEN(mshortcuts); ms++) {
if (ms->release == release &&
ms->button == e->xbutton.button &&
- (match(ms->mod, e->xbutton.state) || /* exact or forced */
- match(ms->mod, e->xbutton.state & ~forcemousemod))) {
+ (match(ms->mod, state) || /* exact or forced */
+ match(ms->mod, state & ~forcemousemod))) {
ms->func(&(ms->arg));
return 1;
}