[hackers] [st] mouse shortcuts: don't hardcode selpaste || Avi Halachmi (:avih)

From: <git_AT_suckless.org>
Date: Sun, 13 Oct 2019 21:53:02 +0200 (CEST)

commit d2b75db8d7519a20af8bf09e9c205507f9ff828c
Author: Avi Halachmi (:avih) <avihpit_AT_yahoo.com>
AuthorDate: Fri Oct 11 02:26:10 2019 +0300
Commit: Hiltjo Posthuma <hiltjo_AT_codemadness.org>
CommitDate: Sun Oct 13 21:46:31 2019 +0200

    mouse shortcuts: don't hardcode selpaste
    
    Because selpaste is activated on release, a release flag was added to
    mouse shortcuts which controls whether activation is on press/release,
    and selpaste binding to button2 was moved to config.h .
    
    button1 remains the only hardcoded mouse button - for selection + copy.

diff --git a/config.def.h b/config.def.h
index a0a0d2d..546edda 100644
--- a/config.def.h
+++ b/config.def.h
_AT_@ -162,7 +162,8 @@ static uint forcemousemod = ShiftMask;
  * Beware that overloading Button1 will disable the selection.
  */
 static MouseShortcut mshortcuts[] = {
- /* mask button function argument */
+ /* mask button function argument release */
+ { XK_ANY_MOD, Button2, selpaste, {.i = 0}, 1 },
         { XK_ANY_MOD, Button4, ttysend, {.s = "\031"} },
         { XK_ANY_MOD, Button5, ttysend, {.s = "\005"} },
 };
diff --git a/x.c b/x.c
index c967caf..8f570c2 100644
--- a/x.c
+++ b/x.c
_AT_@ -33,6 +33,7 @@ typedef struct {
         uint button;
         void (*func)(const Arg *);
         const Arg arg;
+ uint release;
 } MouseShortcut;
 
 typedef struct {
_AT_@ -165,6 +166,7 @@ static void kpress(XEvent *);
 static void cmessage(XEvent *);
 static void resize(XEvent *);
 static void focus(XEvent *);
+static int mouseaction(XEvent *, uint);
 static void brelease(XEvent *);
 static void bpress(XEvent *);
 static void bmotion(XEvent *);
_AT_@ -416,11 +418,27 @@ mousereport(XEvent *e)
         ttywrite(buf, len, 0);
 }
 
+int
+mouseaction(XEvent *e, uint release)
+{
+ MouseShortcut *ms;
+
+ for (ms = mshortcuts; ms < mshortcuts + LEN(mshortcuts); ms++) {
+ if (ms->release == release &&
+ ms->button == e->xbutton.button &&
+ match(ms->mod, e->xbutton.state & ~forcemousemod)) {
+ ms->func(&(ms->arg));
+ return 1;
+ }
+ }
+
+ return 0;
+}
+
 void
 bpress(XEvent *e)
 {
         struct timespec now;
- MouseShortcut *ms;
         int snap;
 
         if (IS_SET(MODE_MOUSE) && !(e->xbutton.state & forcemousemod)) {
_AT_@ -428,13 +446,8 @@ bpress(XEvent *e)
                 return;
         }
 
- for (ms = mshortcuts; ms < mshortcuts + LEN(mshortcuts); ms++) {
- if (e->xbutton.button == ms->button &&
- match(ms->mod, e->xbutton.state & ~forcemousemod)) {
- ms->func(&(ms->arg));
- return;
- }
- }
+ if (mouseaction(e, 0))
+ return;
 
         if (e->xbutton.button == Button1) {
                 /*
_AT_@ -655,9 +668,9 @@ brelease(XEvent *e)
                 return;
         }
 
- if (e->xbutton.button == Button2)
- selpaste(NULL);
- else if (e->xbutton.button == Button1)
+ if (mouseaction(e, 1))
+ return;
+ if (e->xbutton.button == Button1)
                 mousesel(e, 1);
 }
 
Received on Sun Oct 13 2019 - 21:53:02 CEST

This archive was generated by hypermail 2.3.0 : Sun Oct 13 2019 - 22:00:25 CEST