rendered paste bodypackage void SingleEvent(){ //TODO only redraw on expose?
version(xlib){
XEvent event;
XNextEvent(conn, &event);
switch(event.type){
case MotionNotify:
//todo limit
windows[event.xany.window].motion(event.xmotion.x, event.xmotion.y, event.xbutton.state, event.xbutton.button);
break;
case Expose: //TODO
static bool collapse = false;
if(!collapse){
collapse = true;
checkEvents();
if(nested == 0)
foreach(w; windows)
w.display();
collapse = false;
}
break;
case KeyPress:
windows[event.xany.window].keyPress(event.xkey.x, event.xkey.y, event.xkey.state, event.xkey.keycode);
break;
case KeyRelease:
windows[event.xany.window].keyRelease(event.xkey.x, event.xkey.y, event.xkey.state, event.xkey.keycode);
break;
case ButtonPress:
windows[event.xany.window].buttonPress(event.
case ButtonRelease:
windows[event.xany.window].buttonRelease(event.xbutton.x, event.xbutton.y, event.xbutton.state, event.xbutton.button);
break;
case EnterNotify:
windows[event.xany.window].enter();
break;
case LeaveNotify:
windows[event.xany.window].leave();
break;
case ClientMessage:
if(event.xclient.data.l[0] == deleteWindow)
windows[event.xany.window].close();
break;
//resize
case ConfigureNotify: //TODO
windows[event.xany.window].internalResize(event.xconfigure.x, event.xconfigure.y, event.xconfigure.width, event.xconfigure.height);
break;
default:
break;
}
}
}
void checkEvents(){
version(xlib) while(XPending(conn)) SingleEvent();
}
void constantLoop(){
while(1){
checkEvents();
foreach(w; windows)
w.display();
}
}
void sleepyLoop(){
while(1)
SingleEvent();
}