aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/devdraw
diff options
context:
space:
mode:
authorDavid Jeannot <djeannot24@gmail.com>2012-01-16 17:08:31 -0500
committerRuss Cox <rsc@swtch.com>2012-01-16 17:08:31 -0500
commit73b0f029e107c2d015ebb48d59d32f264973de49 (patch)
treeef10e405f62b1d7033cade6ab4c65776fd3bf480 /src/cmd/devdraw
parenta995f469b3e412ae39a57efa4472592a55248aac (diff)
downloadplan9port-73b0f029e107c2d015ebb48d59d32f264973de49.tar.gz
plan9port-73b0f029e107c2d015ebb48d59d32f264973de49.tar.bz2
plan9port-73b0f029e107c2d015ebb48d59d32f264973de49.zip
devdraw: fix handling of compose key on OS X
This implementation is simpler to understand. It removes conflicts with other modifiers and with the virtual buttons. Pressing alt during a sequence now cancels it correctly. R=rsc CC=plan9port.codebot http://codereview.appspot.com/5507049
Diffstat (limited to 'src/cmd/devdraw')
-rw-r--r--src/cmd/devdraw/cocoa-screen.m15
-rw-r--r--src/cmd/devdraw/cocoa-srv.c12
2 files changed, 15 insertions, 12 deletions
diff --git a/src/cmd/devdraw/cocoa-screen.m b/src/cmd/devdraw/cocoa-screen.m
index ae7f5971..9684360c 100644
--- a/src/cmd/devdraw/cocoa-screen.m
+++ b/src/cmd/devdraw/cocoa-screen.m
@@ -98,7 +98,6 @@ struct
struct
{
NSCursor *bigarrow;
- int kalting;
int kbuttons;
int mbuttons;
NSPoint mpos;
@@ -593,6 +592,7 @@ interpretdeadkey(NSEvent *e)
static void
getkeyboard(NSEvent *e)
{
+ static int omod;
NSString *s;
char c;
int k, m;
@@ -602,8 +602,6 @@ getkeyboard(NSEvent *e)
switch([e type]){
case NSKeyDown:
- in.kalting = 0;
-
s = [e characters];
c = [s UTF8String][0];
@@ -635,15 +633,14 @@ getkeyboard(NSEvent *e)
in.kbuttons |= 4;
sendmouse();
}else
- if(m & NSAlternateKeyMask){
- in.kalting = 1;
+ if(m&NSAlternateKeyMask && (omod&NSAlternateKeyMask)==0)
keystroke(Kalt);
- }
break;
default:
panic("getkey: unexpected event type");
}
+ omod = m;
}
/*
@@ -715,12 +712,8 @@ getmouse(NSEvent *e)
if(b == 1){
m = [e modifierFlags];
if(m & NSAlternateKeyMask){
+ abortcompose();
b = 2;
- // Take the ALT away from the keyboard handler.
- if(in.kalting){
- in.kalting = 0;
- keystroke(Kalt);
- }
}else
if(m & NSCommandKeyMask)
b = 4;
diff --git a/src/cmd/devdraw/cocoa-srv.c b/src/cmd/devdraw/cocoa-srv.c
index ac6658ef..864aed7a 100644
--- a/src/cmd/devdraw/cocoa-srv.c
+++ b/src/cmd/devdraw/cocoa-srv.c
@@ -358,15 +358,25 @@ kputc(int c)
zunlock();
}
+static int alting;
+
+void
+abortcompose(void)
+{
+ if(alting)
+ keystroke(Kalt);
+}
+
void
keystroke(int c)
{
static Rune k[10];
- static int alting, nk;
+ static int nk;
int i;
if(c == Kalt){
alting = !alting;
+ nk = 0;
return;
}
if(!alting){