aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlessandro Iezzi <aiezzi@alessandroiezzi.it>2023-05-17 17:31:33 +0200
committerAlessandro Iezzi <aiezzi@alessandroiezzi.it>2023-05-17 17:31:33 +0200
commit6a992be61bdce9f4bca95822543257321f6815e3 (patch)
tree95dfe73898d5a8ed565da2530e7bad52e656af03 /src
parent34220e6e6aaf6cb819f9d9c9e5e5cd84ba515a37 (diff)
downloadcherry-6a992be61bdce9f4bca95822543257321f6815e3.tar.gz
cherry-6a992be61bdce9f4bca95822543257321f6815e3.zip
Add events to exit from application and to close
the window
Diffstat (limited to 'src')
-rw-r--r--src/application.c5
-rw-r--r--src/window.c10
2 files changed, 14 insertions, 1 deletions
diff --git a/src/application.c b/src/application.c
index 91b1719..24ac7ba 100644
--- a/src/application.c
+++ b/src/application.c
@@ -61,7 +61,10 @@ cherry_application_main_loop(CherryApplication *app)
case ClientMessage:
atom_name = XGetAtomName(app->display, (Atom) event.xclient.data.l[0]);
- if (strcmp("WM_DELETE_WINDOW", atom_name) == 0) {
+ if (strcmp("CHERRY_DISPOSE_ON_EXIT", atom_name) == 0) {
+ /* Exit from loop */
+ finish = 1;
+ } else if (strcmp("WM_DELETE_WINDOW", atom_name) == 0) {
dispatch_event(app, event.xclient.window, DELETE_WINDOW);
}
diff --git a/src/window.c b/src/window.c
index 7311819..4ca6027 100644
--- a/src/window.c
+++ b/src/window.c
@@ -54,6 +54,16 @@ cherry_window_new(void)
None, NULL, 0,
&hints);
+ /* allow receiving mouse events */
+ XSelectInput(app->display,
+ w->window_handler,
+ ButtonPressMask | KeyPressMask | ExposureMask);
+
+ Atom wmDelete = XInternAtom(app->display, "WM_DELETE_WINDOW", True);
+ XSetWMProtocols(app->display, w->window_handler, &wmDelete, 1);
+
+ Atom wmDispose = XInternAtom(app->display, "CHERRY_DISPOSE_ON_EXIT", True);
+ XSetWMProtocols(app->display, w->window_handler, &wmDelete, 1);
w->gc = XCreateGC(app->display, w->window_handler, 0, 0);
XSetBackground(app->display, w->gc, WhitePixel(app->display, app->screen));