Fixed missing ICCCM protocol message checks.

This commit is contained in:
Camilla Berglund
2014-03-09 13:24:17 +01:00
parent 98552f1d75
commit 9309f75704
4 changed files with 28 additions and 16 deletions
+3
View File
@@ -430,6 +430,9 @@ static GLboolean initExtensions(void)
Bool supported;
// Find or create window manager atoms
_glfw.x11.WM_PROTOCOLS = XInternAtom(_glfw.x11.display,
"WM_PROTOCOLS",
False);
_glfw.x11.WM_STATE = XInternAtom(_glfw.x11.display, "WM_STATE", False);
_glfw.x11.WM_DELETE_WINDOW = XInternAtom(_glfw.x11.display,
"WM_DELETE_WINDOW",
+1
View File
@@ -107,6 +107,7 @@ typedef struct _GLFWlibraryX11
XContext context;
// Window manager atoms
Atom WM_PROTOCOLS;
Atom WM_STATE;
Atom WM_DELETE_WINDOW;
Atom NET_WM_NAME;
+23 -16
View File
@@ -739,25 +739,32 @@ static void processEvent(XEvent *event)
{
// Custom client message, probably from the window manager
if ((Atom) event->xclient.data.l[0] == _glfw.x11.WM_DELETE_WINDOW)
{
// The window manager was asked to close the window, for example by
// the user pressing a 'close' window decoration button
if (event->xclient.message_type == None)
break;
_glfwInputWindowCloseRequest(window);
}
else if (_glfw.x11.NET_WM_PING &&
(Atom) event->xclient.data.l[0] == _glfw.x11.NET_WM_PING)
if (event->xclient.message_type == _glfw.x11.WM_PROTOCOLS)
{
// The window manager is pinging the application to ensure it's
// still responding to events
if (_glfw.x11.WM_DELETE_WINDOW &&
(Atom) event->xclient.data.l[0] == _glfw.x11.WM_DELETE_WINDOW)
{
// The window manager was asked to close the window, for example by
// the user pressing a 'close' window decoration button
event->xclient.window = _glfw.x11.root;
XSendEvent(_glfw.x11.display,
event->xclient.window,
False,
SubstructureNotifyMask | SubstructureRedirectMask,
event);
_glfwInputWindowCloseRequest(window);
}
else if (_glfw.x11.NET_WM_PING &&
(Atom) event->xclient.data.l[0] == _glfw.x11.NET_WM_PING)
{
// The window manager is pinging the application to ensure it's
// still responding to events
event->xclient.window = _glfw.x11.root;
XSendEvent(_glfw.x11.display,
event->xclient.window,
False,
SubstructureNotifyMask | SubstructureRedirectMask,
event);
}
}
else if (event->xclient.message_type == _glfw.x11.XdndEnter)
{