Normalize mousebutton handling. - sam - An updated version of the sam text edit… | |
git clone git://vernunftzentrum.de/sam.git | |
Log | |
Files | |
Refs | |
LICENSE | |
--- | |
commit 4c5a54cd996ccf3ed80ef5b83312a267fe2e99bf | |
parent 4cc22366dbfaadaaf0439d322f6aa5ac8215e7e6 | |
Author: Rob King <[email protected]> | |
Date: Thu, 1 Sep 2016 13:43:17 -0500 | |
Normalize mousebutton handling. | |
Diffstat: | |
chords.h.def | 6 +++--- | |
libXg/gwin.c | 42 +++++++++++++++++-------------- | |
2 files changed, 26 insertions(+), 22 deletions(-) | |
--- | |
diff --git a/chords.h.def b/chords.h.def | |
@@ -10,7 +10,7 @@ | |
* - Tmouse for the layer containing the mouse | |
* | |
* The following values are available for state definitions: | |
- * None - No buttons are pressed | |
+ * Bnone - No buttons are pressed | |
* B[1-5] - Button n is pressed | |
* | |
* The Bn masks can be combined using the "|" operator, so | |
@@ -23,8 +23,8 @@ | |
{B1, B1|B2, Kcommand, Ccut, Tcurrent}, | |
{B1, B1|B3, Kcommand, Cpaste, Tcurrent}, | |
-{B4, 0, Kcommand, Cscrollupline, Tmouse}, | |
-{B5, 0, Kcommand, Cscrolldownline, Tmouse}, | |
+{B4, Bnone, Kcommand, Cscrollupline, Tmouse}, | |
+{B5, Bnone, Kcommand, Cscrolldownline, Tmouse}, | |
/* The lines below "cancel" the mouse movement that is implicit above | |
* in the Ccut and Cpaste chords. If these lines are not present, dot | |
diff --git a/libXg/gwin.c b/libXg/gwin.c | |
@@ -295,11 +295,12 @@ struct Chordmapping{ | |
int target; | |
}; | |
-#define B1 Button1Mask | |
-#define B2 Button2Mask | |
-#define B3 Button3Mask | |
-#define B4 Button4Mask | |
-#define B5 Button5Mask | |
+#define Bnone 0 | |
+#define B1 1 | |
+#define B2 2 | |
+#define B3 4 | |
+#define B4 8 | |
+#define B5 16 | |
Chordmapping chordmappings[] ={ | |
#include "../chords.h" | |
@@ -311,6 +312,7 @@ Mouseaction(Widget w, XEvent *e, String *p, Cardinal *np) | |
{ | |
int s = 0; | |
int ps = 0; /* the previous state */ | |
+ int ob = 0; | |
XButtonEvent *be = (XButtonEvent *)e; | |
XMotionEvent *me = (XMotionEvent *)e; | |
Gwinmouse m; | |
@@ -353,29 +355,31 @@ Mouseaction(Widget w, XEvent *e, String *p, Cardinal *np) | |
return; | |
} | |
+ m.buttons = 0; | |
+ | |
+ if(ps & Button1Mask) ob |= 1; | |
+ if(ps & Button2Mask) ob |= 2; | |
+ if(ps & Button3Mask) ob |= (s & ShiftMask) ? 2 : 4; | |
+ if(ps & Button4Mask) ob |= 8; | |
+ if(ps & Button5Mask) ob |= 16; | |
+ | |
+ if(s & Button1Mask) m.buttons |= 1; | |
+ if(s & Button2Mask) m.buttons |= 2; | |
+ if(s & Button3Mask) m.buttons |= (s & ShiftMask) ? 2 : 4; | |
+ if(s & Button4Mask) m.buttons |= 8; | |
+ if(s & Button5Mask) m.buttons |= 16; | |
+ | |
/* Check to see if it's a chord first. */ | |
for (Chordmapping *cm = chordmappings; cm && cm->kind != Kend; cm++){ | |
- if (ps == cm->start && s == cm->end){ | |
+ if (ob == cm->start && m.buttons == cm->end){ | |
Charfunc kf = ((GwinWidget)w)->gwin.gotchar; | |
if (kf) | |
(*kf)(cm->result, cm->kind, cm->target, m.xy.x, m.xy.y); | |
- memset(&m, 0, sizeof(m)); | |
- f = ((GwinWidget)w)->gwin.gotmouse; | |
- if(f) | |
- (*f)(&m); | |
- | |
- return; | |
+ m.buttons = 0; | |
} | |
} | |
- m.buttons = 0; | |
- if(s & Button1Mask) m.buttons |= 1; | |
- if(s & Button2Mask) m.buttons |= 2; | |
- if(s & Button3Mask) m.buttons |= (s & ShiftMask) ? 2 : 4; | |
- if(s & Button4Mask) m.buttons |= 8; | |
- if(s & Button5Mask) m.buttons |= 16; | |
- | |
f = ((GwinWidget)w)->gwin.gotmouse; | |
if(f) | |
(*f)(&m); |