aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/devdraw/srv.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/devdraw/srv.c')
-rw-r--r--src/cmd/devdraw/srv.c35
1 files changed, 22 insertions, 13 deletions
diff --git a/src/cmd/devdraw/srv.c b/src/cmd/devdraw/srv.c
index 570091bc..05a08fda 100644
--- a/src/cmd/devdraw/srv.c
+++ b/src/cmd/devdraw/srv.c
@@ -54,6 +54,7 @@ threadmain(int argc, char **argv)
usage();
}ARGEND
+ memimageinit();
fmtinstall('H', encodefmt);
if((p = getenv("DEVDRAWTRACE")) != nil)
trace = atoi(p);
@@ -202,8 +203,11 @@ runmsg(Client *c, Wsysmsg *m)
break;
case Tinit:
- memimageinit();
i = rpc_attach(c, m->label, m->winsize);
+ if(i == nil) {
+ replyerror(c, m);
+ break;
+ }
draw_initdisplaymemimage(c, i);
replymsg(c, m);
break;
@@ -225,6 +229,7 @@ runmsg(Client *c, Wsysmsg *m)
break;
case Trdkbd:
+ case Trdkbd4:
qlock(&c->eventlk);
if((c->kbdtags.wi+1)%nelem(c->kbdtags.t) == c->kbdtags.ri) {
qunlock(&c->eventlk);
@@ -232,7 +237,7 @@ runmsg(Client *c, Wsysmsg *m)
replyerror(c, m);
break;
}
- c->kbdtags.t[c->kbdtags.wi++] = m->tag;
+ c->kbdtags.t[c->kbdtags.wi++] = (m->tag<<1) | (m->type==Trdkbd4);
if(c->kbdtags.wi == nelem(c->kbdtags.t))
c->kbdtags.wi = 0;
c->kbd.stall = 0;
@@ -241,35 +246,35 @@ runmsg(Client *c, Wsysmsg *m)
break;
case Tmoveto:
- rpc_setmouse(c, m->mouse.xy);
+ c->impl->rpc_setmouse(c, m->mouse.xy);
replymsg(c, m);
break;
case Tcursor:
if(m->arrowcursor)
- rpc_setcursor(c, nil, nil);
+ c->impl->rpc_setcursor(c, nil, nil);
else {
scalecursor(&m->cursor2, &m->cursor);
- rpc_setcursor(c, &m->cursor, &m->cursor2);
+ c->impl->rpc_setcursor(c, &m->cursor, &m->cursor2);
}
replymsg(c, m);
break;
case Tcursor2:
if(m->arrowcursor)
- rpc_setcursor(c, nil, nil);
+ c->impl->rpc_setcursor(c, nil, nil);
else
- rpc_setcursor(c, &m->cursor, &m->cursor2);
+ c->impl->rpc_setcursor(c, &m->cursor, &m->cursor2);
replymsg(c, m);
break;
case Tbouncemouse:
- rpc_bouncemouse(c, m->mouse);
+ c->impl->rpc_bouncemouse(c, m->mouse);
replymsg(c, m);
break;
case Tlabel:
- rpc_setlabel(c, m->label);
+ c->impl->rpc_setlabel(c, m->label);
replymsg(c, m);
break;
@@ -306,12 +311,12 @@ runmsg(Client *c, Wsysmsg *m)
break;
case Ttop:
- rpc_topwin(c);
+ c->impl->rpc_topwin(c);
replymsg(c, m);
break;
case Tresize:
- rpc_resizewindow(c, m->rect);
+ c->impl->rpc_resizewindow(c, m->rect);
replymsg(c, m);
break;
}
@@ -353,13 +358,17 @@ replymsg(Client *c, Wsysmsg *m)
static void
matchkbd(Client *c)
{
+ int tag;
Wsysmsg m;
if(c->kbd.stall)
return;
while(c->kbd.ri != c->kbd.wi && c->kbdtags.ri != c->kbdtags.wi){
+ tag = c->kbdtags.t[c->kbdtags.ri++];
m.type = Rrdkbd;
- m.tag = c->kbdtags.t[c->kbdtags.ri++];
+ if(tag&1)
+ m.type = Rrdkbd4;
+ m.tag = tag>>1;
if(c->kbdtags.ri == nelem(c->kbdtags.t))
c->kbdtags.ri = 0;
m.rune = c->kbd.r[c->kbd.ri++];
@@ -513,7 +522,7 @@ gfx_keystroke(Client *c, int ch)
else
c->forcedpi = 225;
qunlock(&c->eventlk);
- rpc_resizeimg(c);
+ c->impl->rpc_resizeimg(c);
return;
}
if(!c->kbd.alting){