aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/devdraw/osx-srv.c
diff options
context:
space:
mode:
authorRuss Cox <rsc@swtch.com>2008-07-01 20:45:49 -0400
committerRuss Cox <rsc@swtch.com>2008-07-01 20:45:49 -0400
commit81a90f898bf58852ca414ae612751e6cff06566c (patch)
tree79db6a639282abe4391ecff1d89c24cdc7d26732 /src/cmd/devdraw/osx-srv.c
parent8cb7983083a94e2bdedcd24ca4ba0ccbefcf61b8 (diff)
downloadplan9port-81a90f898bf58852ca414ae612751e6cff06566c.tar.gz
plan9port-81a90f898bf58852ca414ae612751e6cff06566c.tar.bz2
plan9port-81a90f898bf58852ca414ae612751e6cff06566c.zip
devdraw: OS X alt key support
Diffstat (limited to 'src/cmd/devdraw/osx-srv.c')
-rw-r--r--src/cmd/devdraw/osx-srv.c40
1 files changed, 38 insertions, 2 deletions
diff --git a/src/cmd/devdraw/osx-srv.c b/src/cmd/devdraw/osx-srv.c
index 9dded632..fc943d16 100644
--- a/src/cmd/devdraw/osx-srv.c
+++ b/src/cmd/devdraw/osx-srv.c
@@ -395,9 +395,9 @@ mousetrack(int x, int y, int b, int ms)
matchmouse();
zunlock();
}
-
+
void
-keystroke(int c)
+kputc(int c)
{
zlock();
kbd.r[kbd.wi++] = c;
@@ -408,3 +408,39 @@ keystroke(int c)
matchkbd();
zunlock();
}
+
+void
+keystroke(int c)
+{
+ static Rune k[10];
+ static int alting, nk;
+ int i;
+
+ if(c == Kalt){
+ alting = !alting;
+ return;
+ }
+ if(!alting){
+ kputc(c);
+ return;
+ }
+ if(nk >= nelem(k)) // should not happen
+ nk = 0;
+ k[nk++] = c;
+ c = _latin1(k, nk);
+ if(c > 0){
+ alting = 0;
+ kputc(c);
+ nk = 0;
+ return;
+ }
+ if(c == -1){
+ alting = 0;
+ for(i=0; i<nk; i++)
+ kputc(k[i]);
+ nk = 0;
+ return;
+ }
+ // need more input
+ return;
+}