From 268893cc9b77f7e96343bb11108d95d3d64ca4b3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Deuc=D0=B5?= <shurd@sasktel.net>
Date: Sat, 3 Jun 2023 21:13:45 -0400
Subject: [PATCH] When switching from fullscreen mode, recalculate win size.

---
 src/conio/sdl_con.c | 19 ++++++++++++++++++-
 1 file changed, 18 insertions(+), 1 deletion(-)

diff --git a/src/conio/sdl_con.c b/src/conio/sdl_con.c
index 8c84186efc..412f31f88b 100644
--- a/src/conio/sdl_con.c
+++ b/src/conio/sdl_con.c
@@ -663,8 +663,25 @@ static void sdl_add_key(unsigned int keyval, struct video_stats *vs)
 	if(keyval==0xa600 && vs != NULL) {
 		fullscreen=!fullscreen;
 		cio_api.mode=fullscreen?CIOLIB_MODE_SDL_FULLSCREEN:CIOLIB_MODE_SDL;
-		sdl.SetWindowFullscreen(win, fullscreen ? SDL_WINDOW_FULLSCREEN_DESKTOP : 0);
 		update_cvstat(vs);
+		sdl.SetWindowFullscreen(win, fullscreen ? SDL_WINDOW_FULLSCREEN_DESKTOP : 0);
+		if (!fullscreen) {
+			int w, h;
+
+			// Get current window size
+			sdl.GetWindowSize(win, &w, &h);
+			// Limit to max window size if available
+			SDL_Rect r;
+			if (sdl.GetDisplayUsableBounds(0, &r) == 0) {
+				if (w > r.w)
+					w = r.w;
+				if (h > r.h)
+					h = r.h;
+			}
+			// Set size based on current max
+			vs->scaling = bitmap_double_mult_inside(w, h);
+			bitmap_get_scaled_win_size(vs->scaling, &vs->winwidth, &vs->winheight, w, h);
+		}
 		setup_surfaces(vs);
 		return;
 	}
-- 
GitLab