Commit Diff


commit - a995f469b3e412ae39a57efa4472592a55248aac
commit + 73b0f029e107c2d015ebb48d59d32f264973de49
blob - ae7f5971436d24d8da436b666c29f740d33baae2
blob + 9684360c3643127d34afa4d375434f4bc514bc26
--- src/cmd/devdraw/cocoa-screen.m
+++ 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;
blob - ac6658efd668616da9a16b1b87b2d8daeb05e2d6
blob + 864aed7abd2d237ffb57259b6a6f3d4f48a53655
--- src/cmd/devdraw/cocoa-srv.c
+++ src/cmd/devdraw/cocoa-srv.c
@@ -356,17 +356,27 @@ kputc(int c)
 		kbd.stall = 1;
 	matchkbd();
 	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){