]> git.armaanb.net Git - st.git/commitdiff
mouse shortcuts: allow override for all shortcuts
authorAvi Halachmi (:avih) <avihpit@yahoo.com>
Thu, 10 Oct 2019 20:42:30 +0000 (23:42 +0300)
committerHiltjo Posthuma <hiltjo@codemadness.org>
Sun, 13 Oct 2019 19:46:31 +0000 (21:46 +0200)
Allow forceselmod to override all mouse shortcuts rather than only
selection, and rename it to forcemousemod as it's now more appropriate.

This will affect mouse shortcuts which use mask other than XK_ANY_MOD.

This does not affect the default behavior because the default mouse
shortcuts (wheel) use XK_ANY_MOD, where forceselmod already activated
the override also before this change.

Previously, if a mouse shortcut was configured with a specific mod and
forceselmod was held, then the shortcut did not execute unless the
configured mod included forceselmod.

config.def.h
x.c

index 36ff6ce98f4d847295758c6b9a13175693dbcf37..a0a0d2d34688a7d1b4c7f61512f5e2bbefc3d7d4 100644 (file)
@@ -150,6 +150,13 @@ static unsigned int mousebg = 0;
  */
 static unsigned int defaultattr = 11;
 
+/*
+ * Force mouse select/shortcuts while mask is active (when MODE_MOUSE is set).
+ * Note that if you want to use ShiftMask with selmasks, set this to an other
+ * modifier, set to 0 to not use it.
+ */
+static uint forcemousemod = ShiftMask;
+
 /*
  * Internal mouse shortcuts.
  * Beware that overloading Button1 will disable the selection.
@@ -213,13 +220,6 @@ static KeySym mappedkeys[] = { -1 };
  */
 static uint ignoremod = Mod2Mask|XK_SWITCH_MOD;
 
-/*
- * Override mouse-select while mask is active (when MODE_MOUSE is set).
- * Note that if you want to use ShiftMask with selmasks, set this to an other
- * modifier, set to 0 to not use it.
- */
-static uint forceselmod = ShiftMask;
-
 /*
  * This is the huge key array which defines all compatibility to the Linux
  * world. Please decide about changes wisely.
diff --git a/x.c b/x.c
index 2a05a81435f9cdd6de5cb641edace1bd8c98c8be..c967caf2cf0ce3a548bc36414bb6410ae75fb3a4 100644 (file)
--- a/x.c
+++ b/x.c
@@ -340,7 +340,7 @@ void
 mousesel(XEvent *e, int done)
 {
        int type, seltype = SEL_REGULAR;
-       uint state = e->xbutton.state & ~(Button1Mask | forceselmod);
+       uint state = e->xbutton.state & ~(Button1Mask | forcemousemod);
 
        for (type = 1; type < LEN(selmasks); ++type) {
                if (match(selmasks[type], state)) {
@@ -423,14 +423,14 @@ bpress(XEvent *e)
        MouseShortcut *ms;
        int snap;
 
-       if (IS_SET(MODE_MOUSE) && !(e->xbutton.state & forceselmod)) {
+       if (IS_SET(MODE_MOUSE) && !(e->xbutton.state & forcemousemod)) {
                mousereport(e);
                return;
        }
 
        for (ms = mshortcuts; ms < mshortcuts + LEN(mshortcuts); ms++) {
-               if (e->xbutton.button == ms->button
-                               && match(ms->mod, e->xbutton.state)) {
+               if (e->xbutton.button == ms->button &&
+                   match(ms->mod, e->xbutton.state & ~forcemousemod)) {
                        ms->func(&(ms->arg));
                        return;
                }
@@ -650,7 +650,7 @@ xsetsel(char *str)
 void
 brelease(XEvent *e)
 {
-       if (IS_SET(MODE_MOUSE) && !(e->xbutton.state & forceselmod)) {
+       if (IS_SET(MODE_MOUSE) && !(e->xbutton.state & forcemousemod)) {
                mousereport(e);
                return;
        }
@@ -664,7 +664,7 @@ brelease(XEvent *e)
 void
 bmotion(XEvent *e)
 {
-       if (IS_SET(MODE_MOUSE) && !(e->xbutton.state & forceselmod)) {
+       if (IS_SET(MODE_MOUSE) && !(e->xbutton.state & forcemousemod)) {
                mousereport(e);
                return;
        }