diff options
| author | Mario Schlack | 2016-07-21 19:40:36 +0200 |
|---|---|---|
| committer | Mario Schlack | 2016-07-21 19:40:36 +0200 |
| commit | d04ada397318bd895360b2000e2091a431854fb9 (patch) | |
| tree | 71f745b2cfdcdec68053f6fbd95b04c76fc5c4ff /platform/x11/os_x11.cpp | |
| parent | b623acb718c50b86219027e0f6f7bebd11d96909 (diff) | |
| download | godot-d04ada397318bd895360b2000e2091a431854fb9.tar.gz godot-d04ada397318bd895360b2000e2091a431854fb9.tar.zst godot-d04ada397318bd895360b2000e2091a431854fb9.zip | |
Implement OS.request_attention() for X11
Diffstat (limited to 'platform/x11/os_x11.cpp')
| -rw-r--r-- | platform/x11/os_x11.cpp | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/platform/x11/os_x11.cpp b/platform/x11/os_x11.cpp index 20fae72ab..a9a8c73a7 100644 --- a/platform/x11/os_x11.cpp +++ b/platform/x11/os_x11.cpp @@ -1043,6 +1043,26 @@ bool OS_X11::is_window_maximized() const { return false; } +void OS_X11::request_attention() { + // Using EWMH -- Extended Window Manager Hints + // + // Sets the _NET_WM_STATE_DEMANDS_ATTENTION atom for WM_STATE + // Will be unset by the window manager after user react on the request for attention + // + XEvent xev; + Atom wm_state = XInternAtom(x11_display, "_NET_WM_STATE", False); + Atom wm_attention = XInternAtom(x11_display, "_NET_WM_STATE_DEMANDS_ATTENTION", False); + + memset(&xev, 0, sizeof(xev)); + xev.type = ClientMessage; + xev.xclient.window = x11_window; + xev.xclient.message_type = wm_state; + xev.xclient.format = 32; + xev.xclient.data.l[0] = _NET_WM_STATE_ADD; + xev.xclient.data.l[1] = wm_attention; + + XSendEvent(x11_display, DefaultRootWindow(x11_display), False, SubstructureRedirectMask | SubstructureNotifyMask, &xev); +} InputModifierState OS_X11::get_key_modifier_state(unsigned int p_x11_state) { |
