st-flexipatch

My st-flexipatch configuration
git clone git://git.ethandl.dev/st-flexipatch
Log | Files | Refs | README | LICENSE

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:
Mx.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; }