From 26628af183c12914994c6f71ffe5414ea8db4474 Mon Sep 17 00:00:00 2001 From: Felipe Ferreira da Silva Date: Fri, 7 Apr 2017 04:03:32 -0300 Subject: [PATCH] Use stored X11 atoms for attention request The function to request window attention was using ```XInternAtom```. Now, the atoms are stored and retrieved from the ```_GLFWlibraryX11``` structure. --- src/x11_init.c | 2 ++ src/x11_platform.h | 1 + src/x11_window.c | 7 ++----- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/x11_init.c b/src/x11_init.c index ca271546b..c66040392 100644 --- a/src/x11_init.c +++ b/src/x11_init.c @@ -438,6 +438,8 @@ static void detectEWMH(void) getSupportedAtom(supportedAtoms, atomCount, "_NET_WM_STATE_MAXIMIZED_VERT"); _glfw.x11.NET_WM_STATE_MAXIMIZED_HORZ = getSupportedAtom(supportedAtoms, atomCount, "_NET_WM_STATE_MAXIMIZED_HORZ"); + _glfw.x11.NET_WM_STATE_DEMANDS_ATTENTION = + getSupportedAtom(supportedAtoms, atomCount, "_NET_WM_STATE_DEMANDS_ATTENTION"); _glfw.x11.NET_WM_FULLSCREEN_MONITORS = getSupportedAtom(supportedAtoms, atomCount, "_NET_WM_FULLSCREEN_MONITORS"); _glfw.x11.NET_WM_WINDOW_TYPE = diff --git a/src/x11_platform.h b/src/x11_platform.h index 4ca5a1dae..465fe578d 100644 --- a/src/x11_platform.h +++ b/src/x11_platform.h @@ -194,6 +194,7 @@ typedef struct _GLFWlibraryX11 Atom NET_WM_STATE_FULLSCREEN; Atom NET_WM_STATE_MAXIMIZED_VERT; Atom NET_WM_STATE_MAXIMIZED_HORZ; + Atom NET_WM_STATE_DEMANDS_ATTENTION; Atom NET_WM_BYPASS_COMPOSITOR; Atom NET_WM_FULLSCREEN_MONITORS; Atom NET_ACTIVE_WINDOW; diff --git a/src/x11_window.c b/src/x11_window.c index 55d5316a8..40a76dfd3 100644 --- a/src/x11_window.c +++ b/src/x11_window.c @@ -2076,16 +2076,13 @@ void _glfwPlatformRequestWindowAttention(_GLFWwindow* window) { XEvent xev; - Atom wm_state = XInternAtom(_glfw.x11.display, "_NET_WM_STATE", False); - Atom wm_attention = XInternAtom(_glfw.x11.display, "_NET_WM_STATE_DEMANDS_ATTENTION", False); - memset(&xev, 0, sizeof(xev)); xev.type = ClientMessage; xev.xclient.window = window->x11.handle; - xev.xclient.message_type = wm_state; + xev.xclient.message_type = _glfw.x11.NET_WM_STATE; xev.xclient.format = 32; xev.xclient.data.l[0] = _NET_WM_STATE_ADD; - xev.xclient.data.l[1] = wm_attention; + xev.xclient.data.l[1] = _glfw.x11.NET_WM_STATE_DEMANDS_ATTENTION; XSendEvent(_glfw.x11.display, DefaultRootWindow(_glfw.x11.display), False, SubstructureRedirectMask | SubstructureNotifyMask, &xev); }