Introduction
Introduction Statistics Contact Development Disclaimer Help
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);
You are viewing proxied material from vernunftzentrum.de. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.