Catch window close event

This commit is contained in:
Josh Holtrop 2017-10-31 20:40:46 -04:00
parent 54bbfefcf4
commit 911eda3e37
4 changed files with 28 additions and 4 deletions

View File

@ -167,11 +167,9 @@ void Window::handle_event(Jtk_Event & event)
{
switch (event.type)
{
#if 0
case SDL_QUIT:
case JTK_EVENT_WINDOW_CLOSE:
m_exit_requested = true;
break;
#endif
case JTK_EVENT_KEY_PRESS:
#if 0

View File

@ -329,6 +329,25 @@ static bool ProcessConfigureEvent(XEvent * x_event, Jtk_Event * event)
return true;
}
/**
* Process an X ClientMessage event.
*
* @param x_event
* Pointer to the X event.
* @param event
* Pointer to the Jtk event.
*/
static bool ProcessXClientMessageEvent(XEvent * x_event, Jtk_Event * event)
{
Atom wm_delete_window_atom = XInternAtom(g_display, "WM_DELETE_WINDOW", False);
if (x_event->xclient.data.l[0] == (long)wm_delete_window_atom)
{
event->type = JTK_EVENT_WINDOW_CLOSE;
return true;
}
return false;
}
/**
* Process an X event.
*
@ -373,6 +392,9 @@ static bool ProcessXEvent(XEvent * x_event, Jtk_Event * event)
case ConfigureNotify:
return ProcessConfigureEvent(x_event, event);
case ClientMessage:
return ProcessXClientMessageEvent(x_event, event);
case MappingNotify:
XRefreshKeyboardMapping(&x_event->xmapping);
return false;

View File

@ -4,7 +4,7 @@
#include <stdint.h>
#include <stdlib.h>
#define JTK_EVENT_CLOSE_WINDOW 1u
#define JTK_EVENT_WINDOW_CLOSE 1u
#define JTK_EVENT_WINDOW_EXPOSE 2u
#define JTK_EVENT_KEY_PRESS 3u
#define JTK_EVENT_KEY_RELEASE 4u

View File

@ -29,6 +29,10 @@ void * Jtk_CreateWindow()
return nullptr;
}
/* Disable the window close button. */
Atom wm_delete_window_atom = XInternAtom(g_display, "WM_DELETE_WINDOW", False);
XSetWMProtocols(g_display, window, &wm_delete_window_atom, 1);
return (void *)window;
}