summaryrefslogtreecommitdiffstats
path: root/src/cmd/devdraw/x11-itrans.c
diff options
context:
space:
mode:
authorRuss Cox <rsc@swtch.com>2013-03-07 22:40:47 -0500
committerRuss Cox <rsc@swtch.com>2013-03-07 22:40:47 -0500
commit36bb28dc638bb3091e05996156b5fbecbc67dcd5 (patch)
tree038ccb895431d6872f5a3b38c3aaa4f61ac696d2 /src/cmd/devdraw/x11-itrans.c
parent17934beda0895d1b584e09f0253b8205b7fd6de2 (diff)
downloadplan9port-36bb28dc638bb3091e05996156b5fbecbc67dcd5.tar.gz
plan9port-36bb28dc638bb3091e05996156b5fbecbc67dcd5.zip
devdraw: control+click = button 2, alt/shift+click = button 3
For single-button mouse users. R=rsc https://codereview.appspot.com/7620043
Diffstat (limited to 'src/cmd/devdraw/x11-itrans.c')
-rw-r--r--src/cmd/devdraw/x11-itrans.c31
1 files changed, 23 insertions, 8 deletions
diff --git a/src/cmd/devdraw/x11-itrans.c b/src/cmd/devdraw/x11-itrans.c
index b08601ea..4eac847e 100644
--- a/src/cmd/devdraw/x11-itrans.c
+++ b/src/cmd/devdraw/x11-itrans.c
@@ -114,8 +114,7 @@ __xtoplan9kbd(XEvent *e)
case XK_Alt_R:
case XK_Meta_R: /* Shift Alt on PCs */
case XK_Multi_key:
- k = Kalt;
- break;
+ return -1;
default: /* not ISO-1 or tty control */
if(k>0xff) {
k = _p9keysym2ucs(k);
@@ -128,7 +127,7 @@ __xtoplan9kbd(XEvent *e)
if(k == XK_hyphen)
k = XK_minus;
/* Do control mapping ourselves if translator doesn't */
- if(e->xkey.state&ControlMask && k != Kalt)
+ if(e->xkey.state&ControlMask)
k &= 0x9f;
if(k == NoSymbol) {
return -1;
@@ -145,18 +144,33 @@ abortcompose(void)
alting = 0;
}
+static Rune* sendrune(Rune);
+
extern int _latin1(Rune*, int);
static Rune*
xtoplan9latin1(XEvent *e)
{
- static Rune k[10];
- static int nk;
- int n;
- int r;
+ Rune r;
r = __xtoplan9kbd(e);
if(r < 0)
return nil;
+ return sendrune(r);
+}
+
+void
+sendalt(void)
+{
+ sendrune(Kalt);
+}
+
+static Rune*
+sendrune(Rune r)
+{
+ static Rune k[10];
+ static int nk;
+ int n;
+
if(alting){
/*
* Kludge for Mac's X11 3-button emulation.
@@ -228,6 +242,7 @@ _xtoplan9mouse(XEvent *e, Mouse *m)
switch(e->type){
case ButtonPress:
be = (XButtonEvent*)e;
+
/*
* Fake message, just sent to make us announce snarf.
* Apparently state and button are 16 and 8 bits on
@@ -292,7 +307,7 @@ _xtoplan9mouse(XEvent *e, Mouse *m)
m->xy.x = me->x;
m->xy.y = me->y;
m->msec = me->time;
- break;
+ return 0; // do not set buttons
default:
return -1;