From a1203df1a95ac2aea7bc1b01ed014a24cb90ccb6 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Mon, 19 Aug 2002 03:09:25 +0000 Subject: [PATCH] Fullscreen windows are always topmost under Windows --- src/video/windib/SDL_dibvideo.c | 18 ++++++++++++------ src/video/windx5/SDL_dx5video.c | 14 ++++++++++---- 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/src/video/windib/SDL_dibvideo.c b/src/video/windib/SDL_dibvideo.c index 907a00fd9..5238f8134 100644 --- a/src/video/windib/SDL_dibvideo.c +++ b/src/video/windib/SDL_dibvideo.c @@ -573,9 +573,9 @@ SDL_Surface *DIB_SetVideoMode(_THIS, SDL_Surface *current, #endif } - /* DJM: Don't piss of anyone who has setup his own window */ - if (!SDL_windowid) - SetWindowLong(SDL_Window, GWL_STYLE, style); + /* DJM: Don't piss of anyone who has setup his own window */ + if (!SDL_windowid) + SetWindowLong(SDL_Window, GWL_STYLE, style); /* Delete the old bitmap if necessary */ if ( screen_bmp != NULL ) { @@ -651,6 +651,7 @@ SDL_Surface *DIB_SetVideoMode(_THIS, SDL_Surface *current, /* Resize the window */ if ( SDL_windowid == NULL ) { + HWND top; UINT swp_flags; SDL_resizing = 1; @@ -671,14 +672,19 @@ SDL_Surface *DIB_SetVideoMode(_THIS, SDL_Surface *current, y -= GetSystemMetrics(SM_CYCAPTION)/2; } #ifndef _WIN32_WCE - swp_flags = (SWP_NOCOPYBITS | SWP_NOZORDER | SWP_SHOWWINDOW); + swp_flags = (SWP_NOCOPYBITS | SWP_FRAMECHANGED | SWP_SHOWWINDOW); #else - swp_flags = (SWP_NOZORDER | SWP_SHOWWINDOW); + swp_flags = (SWP_FRAMECHANGED | SWP_SHOWWINDOW); #endif if ( was_visible && !(flags & SDL_FULLSCREEN) ) { swp_flags |= SWP_NOMOVE; } - SetWindowPos(SDL_Window, NULL, x, y, width, height, swp_flags); + if ( flags & SDL_FULLSCREEN ) { + top = HWND_TOPMOST; + } else { + top = HWND_NOTOPMOST; + } + SetWindowPos(SDL_Window, top, x, y, width, height, swp_flags); SDL_resizing = 0; SetForegroundWindow(SDL_Window); } diff --git a/src/video/windx5/SDL_dx5video.c b/src/video/windx5/SDL_dx5video.c index 1c3cb4d6a..695e2b144 100644 --- a/src/video/windx5/SDL_dx5video.c +++ b/src/video/windx5/SDL_dx5video.c @@ -1080,7 +1080,7 @@ SDL_Surface *DX5_SetVideoMode(_THIS, SDL_Surface *current, style = GetWindowLong(SDL_Window, GWL_STYLE); style &= ~(resizestyle|WS_MAXIMIZE); - if ( (video->flags & SDL_FULLSCREEN) == SDL_FULLSCREEN ) { + if ( video->flags & SDL_FULLSCREEN ) { style &= ~windowstyle; style |= directstyle; } else { @@ -1102,6 +1102,7 @@ SDL_Surface *DX5_SetVideoMode(_THIS, SDL_Surface *current, /* Resize the window (copied from SDL WinDIB driver) */ if ( SDL_windowid == NULL ) { + HWND top; UINT swp_flags; SDL_resizing = 1; @@ -1117,11 +1118,16 @@ SDL_Surface *DX5_SetVideoMode(_THIS, SDL_Surface *current, if ( y < 0 ) { /* Cover up title bar for more client area */ y -= GetSystemMetrics(SM_CYCAPTION)/2; } - swp_flags = (SWP_NOCOPYBITS | SWP_NOZORDER | SWP_SHOWWINDOW); - if ( was_visible && !(flags & SDL_FULLSCREEN) ) { + swp_flags = (SWP_NOCOPYBITS | SWP_FRAMECHANGED | SWP_SHOWWINDOW); + if ( was_visible && (video->flags & SDL_FULLSCREEN) ) { swp_flags |= SWP_NOMOVE; } - SetWindowPos(SDL_Window, NULL, x, y, width, height, swp_flags); + if ( video->flags & SDL_FULLSCREEN ) { + top = HWND_TOPMOST; + } else { + top = HWND_NOTOPMOST; + } + SetWindowPos(SDL_Window, top, x, y, width, height, swp_flags); SDL_resizing = 0; SetForegroundWindow(SDL_Window); }