Fullscreen windows are always topmost under Windows
authorSam Lantinga <slouken@libsdl.org>
Mon, 19 Aug 2002 03:09:25 +0000
changeset 448 323c766f5a46
parent 447 16d0449891b8
child 449 8a687496061f
Fullscreen windows are always topmost under Windows
src/video/windib/SDL_dibvideo.c
src/video/windx5/SDL_dx5video.c
--- a/src/video/windib/SDL_dibvideo.c	Mon Aug 19 02:34:22 2002 +0000
+++ b/src/video/windib/SDL_dibvideo.c	Mon Aug 19 03:09:25 2002 +0000
@@ -573,9 +573,9 @@
 #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 @@
 
 	/* Resize the window */
 	if ( SDL_windowid == NULL ) {
+		HWND top;
 		UINT swp_flags;
 
 		SDL_resizing = 1;
@@ -671,14 +672,19 @@
 			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);
 	}
--- a/src/video/windx5/SDL_dx5video.c	Mon Aug 19 02:34:22 2002 +0000
+++ b/src/video/windx5/SDL_dx5video.c	Mon Aug 19 03:09:25 2002 +0000
@@ -1080,7 +1080,7 @@
 
 		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 @@
 
 		/* Resize the window (copied from SDL WinDIB driver) */
 		if ( SDL_windowid == NULL ) {
+			HWND top;
 			UINT swp_flags;
 
 			SDL_resizing = 1;
@@ -1117,11 +1118,16 @@
 			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);
 		}