commit ceb7bff
phoebos
·
2022-03-27 05:38:03 +0000 UTC
parent 59886ce
handle WM_DELETE_WINDOW
1 files changed,
+13,
-4
+13,
-4
1@@ -17,6 +17,7 @@
2 #include "devices/datetime.h"
3
4 static Device *devscreen, *devctrl, *devmouse;
5+static XImage *ximage;
6
7 static int
8 error(char *msg, const char *err)
9@@ -72,11 +73,8 @@ load(Uxn *u, char *filepath)
10 void
11 redraw(Display *display, Visual *visual, Window window)
12 {
13- XImage *ximage;
14 screen_redraw(&uxn_screen, uxn_screen.pixels);
15- ximage = XCreateImage(display, visual, DefaultDepth(display, DefaultScreen(display)), ZPixmap, 0, (char *)uxn_screen.pixels, uxn_screen.width, uxn_screen.height, 32, 0);
16 XPutImage(display, window, DefaultGC(display, 0), ximage, 0, 0, 0, 0, uxn_screen.width, uxn_screen.height);
17- /* XDestroyImage(ximage); */
18 }
19
20 /* /usr/include/X11/keysymdef.h */
21@@ -138,6 +136,13 @@ processEvent(Display *display, Visual *visual, Window window)
22 XMotionEvent *e = (XMotionEvent *)&ev;
23 mouse_pos(devmouse, e->x, e->y);
24 } break;
25+ case ClientMessage: {
26+ XClientMessageEvent *e = (XClientMessageEvent *)&ev;
27+ XDestroyImage(ximage);
28+ XDestroyWindow(display, window);
29+ XCloseDisplay(display);
30+ exit(0);
31+ } break;
32 }
33 if(uxn_screen.fg.changed || uxn_screen.bg.changed) {
34 redraw(display, visual, window);
35@@ -194,11 +199,15 @@ main(int argc, char **argv)
36 }
37
38 XSelectInput(display, window, ButtonPressMask | ButtonReleaseMask | PointerMotionMask | ExposureMask | KeyPressMask | KeyReleaseMask);
39+ Atom wmDelete = XInternAtom(display, "WM_DELETE_WINDOW", True);
40+ XSetWMProtocols(display, window, &wmDelete, 1);
41 XMapWindow(display, window);
42+ ximage = XCreateImage(display, visual, DefaultDepth(display, DefaultScreen(display)), ZPixmap, 0, (char *)uxn_screen.pixels, uxn_screen.width, uxn_screen.height, 32, 0);
43 while(1) {
44 processEvent(display, visual, window);
45 uxn_eval(&u, GETVECTOR(devscreen));
46 /* sleep(0.01); */
47 }
48+ XDestroyImage(ximage);
49 return 0;
50-}
51+}