diff --git a/client/SDL/SDL3/sdl_context.cpp b/client/SDL/SDL3/sdl_context.cpp index d4838cb71..e50a9f7bf 100644 --- a/client/SDL/SDL3/sdl_context.cpp +++ b/client/SDL/SDL3/sdl_context.cpp @@ -475,6 +475,23 @@ bool SdlContext::updateWindowList() list.size()); } +bool SdlContext::updateWindow(SDL_WindowID id) +{ + if (freerdp_settings_get_bool(_context->settings, FreeRDP_Fullscreen) || + freerdp_settings_get_bool(_context->settings, FreeRDP_UseMultimon)) + return true; + + auto& w = _windows.at(id); + auto m = w.monitor(true); + auto r = w.rect(); + m.width = r.w; + m.height = r.h; + m.attributes.physicalWidth = static_cast(r.w); + m.attributes.physicalHeight = static_cast(r.h); + w.setMonitor(m); + return true; +} + std::string SdlContext::windowTitle() const { const char* prefix = "FreeRDP:"; diff --git a/client/SDL/SDL3/sdl_context.hpp b/client/SDL/SDL3/sdl_context.hpp index 6ea8cc774..0ca9c2532 100644 --- a/client/SDL/SDL3/sdl_context.hpp +++ b/client/SDL/SDL3/sdl_context.hpp @@ -108,6 +108,7 @@ class SdlContext [[nodiscard]] bool createWindows(); [[nodiscard]] bool updateWindowList(); + [[nodiscard]] bool updateWindow(SDL_WindowID id); [[nodiscard]] bool drawToWindows(const std::vector& rects = {}); [[nodiscard]] bool drawToWindow(SdlWindow& window, const std::vector& rects = {}); diff --git a/client/SDL/SDL3/sdl_disp.cpp b/client/SDL/SDL3/sdl_disp.cpp index 02ff07a45..a0767dbba 100644 --- a/client/SDL/SDL3/sdl_disp.cpp +++ b/client/SDL/SDL3/sdl_disp.cpp @@ -281,11 +281,14 @@ bool sdlDispContext::addTimer() return true; } -bool sdlDispContext::updateMonitor([[maybe_unused]] SDL_WindowID id) +bool sdlDispContext::updateMonitor(SDL_WindowID id) { if (!freerdp_settings_get_bool(_sdl->context()->settings, FreeRDP_DynamicResolutionUpdate)) return true; + if (!_sdl->updateWindow(id)) + return false; + if (!_sdl->updateWindowList()) return false;