spmenu/libs/x11/event.c
2023-07-09 23:56:34 +02:00

47 lines
1.4 KiB
C

/* See LICENSE file for copyright and license details. */
void eventloop_x11(void) {
XEvent ev;
while (!XNextEvent(dpy, &ev)) {
if (XFilterEvent(&ev, None))
continue;
switch(ev.type) {
case DestroyNotify:
if (ev.xdestroywindow.window != win)
break;
cleanup();
exit(1);
case ButtonPress:
buttonpress_x11(&ev);
break;
case MotionNotify: // currently does nothing
break;
case Expose:
if (ev.xexpose.count == 0)
draw_map(draw, win, 0, 0, sp.mw, sp.mh);
break;
case FocusIn:
// regrab focus from parent window
if (ev.xfocus.window != win)
grabfocus();
break;
case KeyPress: // read key array and call functions
keypress_x11(&ev);
break;
case SelectionNotify: // paste selection
if (ev.xselection.property == utf8)
pastesel();
break;
case VisibilityNotify:
if (ev.xvisibility.state != VisibilityUnobscured)
XRaiseWindow(dpy, win);
break;
case KeyRelease:
getcapsstate();
drawmenu();
break;
}
}
}