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)
|
switch (event.type)
|
||||||
{
|
{
|
||||||
#if 0
|
case JTK_EVENT_WINDOW_CLOSE:
|
||||||
case SDL_QUIT:
|
|
||||||
m_exit_requested = true;
|
m_exit_requested = true;
|
||||||
break;
|
break;
|
||||||
#endif
|
|
||||||
|
|
||||||
case JTK_EVENT_KEY_PRESS:
|
case JTK_EVENT_KEY_PRESS:
|
||||||
#if 0
|
#if 0
|
||||||
|
@ -329,6 +329,25 @@ static bool ProcessConfigureEvent(XEvent * x_event, Jtk_Event * event)
|
|||||||
return true;
|
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.
|
* Process an X event.
|
||||||
*
|
*
|
||||||
@ -373,6 +392,9 @@ static bool ProcessXEvent(XEvent * x_event, Jtk_Event * event)
|
|||||||
case ConfigureNotify:
|
case ConfigureNotify:
|
||||||
return ProcessConfigureEvent(x_event, event);
|
return ProcessConfigureEvent(x_event, event);
|
||||||
|
|
||||||
|
case ClientMessage:
|
||||||
|
return ProcessXClientMessageEvent(x_event, event);
|
||||||
|
|
||||||
case MappingNotify:
|
case MappingNotify:
|
||||||
XRefreshKeyboardMapping(&x_event->xmapping);
|
XRefreshKeyboardMapping(&x_event->xmapping);
|
||||||
return false;
|
return false;
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <stdlib.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_WINDOW_EXPOSE 2u
|
||||||
#define JTK_EVENT_KEY_PRESS 3u
|
#define JTK_EVENT_KEY_PRESS 3u
|
||||||
#define JTK_EVENT_KEY_RELEASE 4u
|
#define JTK_EVENT_KEY_RELEASE 4u
|
||||||
|
@ -29,6 +29,10 @@ void * Jtk_CreateWindow()
|
|||||||
return nullptr;
|
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;
|
return (void *)window;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user