mirror of
https://github.com/Relintai/sdl2_frt.git
synced 2024-12-20 22:16:49 +01:00
Fix creating a minimized window in SDL to not cause focus to be stolen (because ShowWindow( hwnd, SW_MINIMIZE ) would be called after creation, thus changing focus to the prior window based on some per-app list in windows, rather than the window being created with WS_MINIMIZED to start with).
This means we have to consider SDL_WINDOW_MINIMIZED a window creation flag, but on non-windows platforms we just remove it and let the normal FinishWindowCreation re-apply and do the minimize as I have no idea what is right on them or if anything should change. CR: Phil
This commit is contained in:
parent
1d25135b71
commit
9d6ac3deff
@ -1322,7 +1322,7 @@ SDL_UpdateFullscreenMode(SDL_Window * window, SDL_bool fullscreen)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#define CREATE_FLAGS \
|
#define CREATE_FLAGS \
|
||||||
(SDL_WINDOW_OPENGL | SDL_WINDOW_BORDERLESS | SDL_WINDOW_RESIZABLE | SDL_WINDOW_ALLOW_HIGHDPI | SDL_WINDOW_ALWAYS_ON_TOP | SDL_WINDOW_SKIP_TASKBAR | SDL_WINDOW_POPUP_MENU | SDL_WINDOW_UTILITY | SDL_WINDOW_TOOLTIP | SDL_WINDOW_VULKAN)
|
(SDL_WINDOW_OPENGL | SDL_WINDOW_BORDERLESS | SDL_WINDOW_RESIZABLE | SDL_WINDOW_ALLOW_HIGHDPI | SDL_WINDOW_ALWAYS_ON_TOP | SDL_WINDOW_SKIP_TASKBAR | SDL_WINDOW_POPUP_MENU | SDL_WINDOW_UTILITY | SDL_WINDOW_TOOLTIP | SDL_WINDOW_VULKAN | SDL_WINDOW_MINIMIZED)
|
||||||
|
|
||||||
static void
|
static void
|
||||||
SDL_FinishWindowCreation(SDL_Window *window, Uint32 flags)
|
SDL_FinishWindowCreation(SDL_Window *window, Uint32 flags)
|
||||||
@ -1480,6 +1480,13 @@ SDL_CreateWindow(const char *title, int x, int y, int w, int h, Uint32 flags)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Clear minimized if not on windows, only windows handles it at create rather than FinishWindowCreation,
|
||||||
|
// but it's important or window focus will get broken on windows!
|
||||||
|
#if !defined(__WIN32__)
|
||||||
|
if ( window->flags & SDL_WINDOW_MINIMIZED )
|
||||||
|
window->flags &= ~SDL_WINDOW_MINIMIZED;
|
||||||
|
#endif
|
||||||
|
|
||||||
#if __WINRT__ && (NTDDI_VERSION < NTDDI_WIN10)
|
#if __WINRT__ && (NTDDI_VERSION < NTDDI_WIN10)
|
||||||
/* HACK: WinRT 8.x apps can't choose whether or not they are fullscreen
|
/* HACK: WinRT 8.x apps can't choose whether or not they are fullscreen
|
||||||
or not. The user can choose this, via OS-provided UI, but this can't
|
or not. The user can choose this, via OS-provided UI, but this can't
|
||||||
|
@ -97,6 +97,10 @@ GetWindowStyle(SDL_Window * window)
|
|||||||
if (window->flags & SDL_WINDOW_RESIZABLE) {
|
if (window->flags & SDL_WINDOW_RESIZABLE) {
|
||||||
style |= STYLE_RESIZABLE;
|
style |= STYLE_RESIZABLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Need to set initialize minimize style, or when we call ShowWindow with WS_MINIMIZE it will activate a random window */
|
||||||
|
if ( window->flags & SDL_WINDOW_MINIMIZED )
|
||||||
|
style |= WS_MINIMIZE;
|
||||||
}
|
}
|
||||||
return style;
|
return style;
|
||||||
}
|
}
|
||||||
@ -335,6 +339,9 @@ WIN_CreateWindow(_THIS, SDL_Window * window)
|
|||||||
/* Inform Windows of the frame change so we can respond to WM_NCCALCSIZE */
|
/* Inform Windows of the frame change so we can respond to WM_NCCALCSIZE */
|
||||||
SetWindowPos(hwnd, NULL, 0, 0, 0, 0, SWP_FRAMECHANGED | SWP_NOSIZE | SWP_NOZORDER | SWP_NOMOVE | SWP_NOACTIVATE);
|
SetWindowPos(hwnd, NULL, 0, 0, 0, 0, SWP_FRAMECHANGED | SWP_NOSIZE | SWP_NOZORDER | SWP_NOMOVE | SWP_NOACTIVATE);
|
||||||
|
|
||||||
|
if ( window->flags & SDL_WINDOW_MINIMIZED )
|
||||||
|
ShowWindow( hwnd, SW_SHOWMINNOACTIVE );
|
||||||
|
|
||||||
if (!(window->flags & SDL_WINDOW_OPENGL)) {
|
if (!(window->flags & SDL_WINDOW_OPENGL)) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user