From 914cee019d8b72d76287c686d1ca2fb3952cf85c Mon Sep 17 00:00:00 2001 From: bakkeby Date: Thu, 2 Apr 2020 16:23:53 +0200 Subject: [PATCH] [st] mouseshortcuts: fix custom modifier on release (4c84ac4) --- x.c | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/x.c b/x.c index b37cef1..12ad9b8 100644 --- 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 Buttonmask for Button - 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; }