while(ecankbd())
ekbd();
- sc = screen->clipr;
- replclipr(screen, 0, screen->r);
-
if(m) o = m->xy;
if(buf && len > 0)
}
k = -1;
- b = screen;
tick = n;
save = nil;
done = down = 0;
h = p.y;
w = p.x;
+ b = screen;
+ sc = b->clipr;
+ replclipr(b, 0, b->r);
+
while(!done){
p = stringsize(font, buf ? buf : "");
if(ask && ask[0]){
}
flushimage(display, 1);
+nodraw:
i = Ekeyboard;
if(m != nil)
i |= Emouse;
- switch(eread(i, &ev)){
+
+ replclipr(b, 0, sc);
+ i = eread(i, &ev);
+
+ /* screen might have been resized */
+ if(b != screen || !eqrect(screen->clipr, sc)){
+ freeimage(save);
+ save = nil;
+ }
+ b = screen;
+ sc = b->clipr;
+ replclipr(b, 0, b->r);
+
+ switch(i){
default:
done = 1;
n = -1;
}
continue;
}
+ if(k == Ketb){
+ while(tick > 0){
+ tick--;
+ if(tick == 0 ||
+ strchr(" !\"#$%&'()*+,-./:;<=>?@`[\\]^{|}~", buf[tick-1]))
+ break;
+ }
+ buf[n = tick] = 0;
+ break;
+ }
if(k == Kbs){
if(tick <= 0)
continue;
*m = ev.mouse;
if(!ptinrect(m->xy, r)){
down = 0;
- continue;
+ goto nodraw;
}
if(m->buttons & 7){
down = 1;
done = down;
break;
}
-
- draw(b, save->r, save, nil, save->r.min);
- freeimage(save);
- save = nil;
+ if(save){
+ draw(b, save->r, save, nil, save->r.min);
+ freeimage(save);
+ save = nil;
+ }
}
- replclipr(screen, 0, sc);
+ replclipr(b, 0, sc);
freeimage(backcol);
freeimage(bordcol);