mirror of
https://github.com/libsdl-org/SDL.git
synced 2026-07-17 14:31:10 +00:00
wayland: Refine window raising for new windows
Generate activation tokens for new windows when necessary, and check the hint for activating windows when shown. This will allow new windows to correctly take focus in environments with elevated focus stealing prevention when possible, and it will try to prevent new windows from being activated if the hint is set to false.
(cherry picked from commit 8586f63d2a)
This commit is contained in:
@@ -2136,8 +2136,11 @@ void Wayland_ShowWindow(SDL_VideoDevice *_this, SDL_Window *window)
|
||||
Wayland_SetWindowResizable(_this, window, !!(window->flags & SDL_WINDOW_RESIZABLE));
|
||||
|
||||
// We're finally done putting the window together, raise if possible
|
||||
if (c->activation_manager) {
|
||||
/* Note that we don't check for empty strings, as that is still
|
||||
if (c->activation_manager && SDL_GetHintBoolean(SDL_HINT_WINDOW_ACTIVATE_WHEN_SHOWN, true)) {
|
||||
/* if the process was passed an activation token, use it when showing
|
||||
* the initial window.
|
||||
*
|
||||
* Note that we don't check for empty strings, as that is still
|
||||
* considered a valid activation token!
|
||||
*/
|
||||
const char *activation_token = SDL_getenv("XDG_ACTIVATION_TOKEN");
|
||||
@@ -2148,7 +2151,13 @@ void Wayland_ShowWindow(SDL_VideoDevice *_this, SDL_Window *window)
|
||||
|
||||
// Clear this variable, per the protocol's request
|
||||
SDL_unsetenv_unsafe("XDG_ACTIVATION_TOKEN");
|
||||
} else {
|
||||
// Try to generate an activation token for this window.
|
||||
Wayland_RaiseWindow(_this, window);
|
||||
}
|
||||
} else {
|
||||
// Clear the ignored activation token, as it won't be used.
|
||||
SDL_unsetenv_unsafe("XDG_ACTIVATION_TOKEN");
|
||||
}
|
||||
|
||||
// No frame callback on an external surface, as it may already have one attached.
|
||||
|
||||
Reference in New Issue
Block a user