windows: Add SDL_WINDOW_ALWAYS_ON_TOP support.

Joshua Granick 2017-04-20 21:31:44 -04:00
parent 7382cebb41
commit 1286a7d23e
1 changed files with 15 additions and 8 deletions

View File

@ -91,7 +91,7 @@ WIN_SetWindowPositionInternal(_THIS, SDL_Window * window, UINT flags)
int w, h; int w, h;
/* Figure out what the window area will be */ /* Figure out what the window area will be */
if (SDL_ShouldAllowTopmost() && (window->flags & (SDL_WINDOW_FULLSCREEN|SDL_WINDOW_INPUT_FOCUS)) == (SDL_WINDOW_FULLSCREEN|SDL_WINDOW_INPUT_FOCUS)) { if (SDL_ShouldAllowTopmost() && ((window->flags & (SDL_WINDOW_FULLSCREEN|SDL_WINDOW_INPUT_FOCUS)) == (SDL_WINDOW_FULLSCREEN|SDL_WINDOW_INPUT_FOCUS) || window->flags & SDL_WINDOW_ALWAYS_ON_TOP)) {
top = HWND_TOPMOST; top = HWND_TOPMOST;
} else { } else {
top = HWND_NOTOPMOST; top = HWND_NOTOPMOST;
@ -560,7 +560,7 @@ WIN_SetWindowFullscreen(_THIS, SDL_Window * window, SDL_VideoDisplay * display,
int x, y; int x, y;
int w, h; int w, h;
if (SDL_ShouldAllowTopmost() && (window->flags & (SDL_WINDOW_FULLSCREEN|SDL_WINDOW_INPUT_FOCUS)) == (SDL_WINDOW_FULLSCREEN|SDL_WINDOW_INPUT_FOCUS)) { if (SDL_ShouldAllowTopmost() && ((window->flags & (SDL_WINDOW_FULLSCREEN|SDL_WINDOW_INPUT_FOCUS)) == (SDL_WINDOW_FULLSCREEN|SDL_WINDOW_INPUT_FOCUS) || window->flags & SDL_WINDOW_ALWAYS_ON_TOP)) {
top = HWND_TOPMOST; top = HWND_TOPMOST;
} else { } else {
top = HWND_NOTOPMOST; top = HWND_NOTOPMOST;
@ -791,20 +791,27 @@ SDL_HelperWindowDestroy(void)
void WIN_OnWindowEnter(_THIS, SDL_Window * window) void WIN_OnWindowEnter(_THIS, SDL_Window * window)
{ {
#ifdef WM_MOUSELEAVE
SDL_WindowData *data = (SDL_WindowData *) window->driverdata; SDL_WindowData *data = (SDL_WindowData *) window->driverdata;
TRACKMOUSEEVENT trackMouseEvent;
if (!data || !data->hwnd) { if (!data || !data->hwnd) {
/* The window wasn't fully initialized */ /* The window wasn't fully initialized */
return; return;
} }
trackMouseEvent.cbSize = sizeof(TRACKMOUSEEVENT); if (window->flags & SDL_WINDOW_ALWAYS_ON_TOP) {
trackMouseEvent.dwFlags = TME_LEAVE; WIN_SetWindowPositionInternal(_this, window, SWP_NOCOPYBITS | SWP_NOSIZE | SWP_NOACTIVATE);
trackMouseEvent.hwndTrack = data->hwnd; }
TrackMouseEvent(&trackMouseEvent); #ifdef WM_MOUSELEAVE
{
TRACKMOUSEEVENT trackMouseEvent;
trackMouseEvent.cbSize = sizeof(TRACKMOUSEEVENT);
trackMouseEvent.dwFlags = TME_LEAVE;
trackMouseEvent.hwndTrack = data->hwnd;
TrackMouseEvent(&trackMouseEvent);
}
#endif /* WM_MOUSELEAVE */ #endif /* WM_MOUSELEAVE */
} }