Catch window close event
This commit is contained in:
parent
54bbfefcf4
commit
911eda3e37
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user