diff options
author | Miguel Borges de Freitas <92enen@gmail.com> | 2024-05-04 23:57:31 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-05-04 23:57:31 +0100 |
commit | 058a35d43e571c52193c8652182eb65f6cc9f61b (patch) | |
tree | b0c8aa51063bd1de1c18a01ff5a9d574b94d0784 | |
parent | db1f89bc9242f1603256555d82da92e0dacc36e7 (diff) | |
parent | 0dc8347a94f0a71eeed10903d3f3fb09b59def3b (diff) | |
download | xbmc-058a35d43e571c52193c8652182eb65f6cc9f61b.tar.xz |
Merge pull request #25121 from enen92/macos_avoid_refreshresize
Rendering: Set window dirty only on app thread
-rw-r--r-- | xbmc/application/Application.cpp | 11 | ||||
-rw-r--r-- | xbmc/application/Application.h | 2 | ||||
-rw-r--r-- | xbmc/application/ApplicationPowerHandling.cpp | 6 | ||||
-rw-r--r-- | xbmc/windowing/osx/OpenGL/WindowControllerMacOS.mm | 16 |
4 files changed, 12 insertions, 23 deletions
diff --git a/xbmc/application/Application.cpp b/xbmc/application/Application.cpp index 3a47546904..baa561879c 100644 --- a/xbmc/application/Application.cpp +++ b/xbmc/application/Application.cpp @@ -809,7 +809,16 @@ void CApplication::Render() return; // render gui layer - if (appPower->GetRenderGUI() && !m_skipGuiRender) + const bool renderGUI = appPower->GetRenderGUI(); + if (m_guiRenderLastState != std::nullopt && renderGUI && m_guiRenderLastState != renderGUI) + { + CGUIComponent* gui = CServiceBroker::GetGUI(); + if (gui) + CServiceBroker::GetGUI()->GetWindowManager().MarkDirty(); + } + m_guiRenderLastState = renderGUI; + + if (renderGUI && !m_skipGuiRender) { if (CServiceBroker::GetWinSystem()->GetGfxContext().GetStereoMode()) { diff --git a/xbmc/application/Application.h b/xbmc/application/Application.h index d31e591bcd..b3eaeb5bd4 100644 --- a/xbmc/application/Application.h +++ b/xbmc/application/Application.h @@ -24,6 +24,7 @@ #include <atomic> #include <chrono> #include <memory> +#include <optional> #include <string> #include <vector> @@ -218,6 +219,7 @@ protected: std::chrono::time_point<std::chrono::steady_clock> m_lastRenderTime; bool m_skipGuiRender = false; + std::optional<bool> m_guiRenderLastState; std::unique_ptr<MUSIC_INFO::CMusicInfoScanner> m_musicInfoScanner; diff --git a/xbmc/application/ApplicationPowerHandling.cpp b/xbmc/application/ApplicationPowerHandling.cpp index 4354b9b626..8000a7ee9e 100644 --- a/xbmc/application/ApplicationPowerHandling.cpp +++ b/xbmc/application/ApplicationPowerHandling.cpp @@ -67,12 +67,6 @@ void CApplicationPowerHandling::ResetNavigationTimer() void CApplicationPowerHandling::SetRenderGUI(bool renderGUI) { - if (renderGUI && !m_renderGUI) - { - CGUIComponent* gui = CServiceBroker::GetGUI(); - if (gui) - CServiceBroker::GetGUI()->GetWindowManager().MarkDirty(); - } m_renderGUI = renderGUI; } diff --git a/xbmc/windowing/osx/OpenGL/WindowControllerMacOS.mm b/xbmc/windowing/osx/OpenGL/WindowControllerMacOS.mm index 4f50a49dbc..c3eaa113c2 100644 --- a/xbmc/windowing/osx/OpenGL/WindowControllerMacOS.mm +++ b/xbmc/windowing/osx/OpenGL/WindowControllerMacOS.mm @@ -22,8 +22,6 @@ @implementation XBMCWindowControllerMacOS -bool m_inFullscreenTransition = false; - - (nullable instancetype)initWithTitle:(NSString*)title defaultSize:(NSSize)size { auto frame = NSMakeRect(0, 0, size.width, size.height); @@ -81,9 +79,6 @@ bool m_inFullscreenTransition = false; - (void)windowWillStartLiveResize:(NSNotification*)notification { - if (m_inFullscreenTransition) - return; - std::shared_ptr<CAppInboundProtocol> appPort = CServiceBroker::GetAppPort(); if (appPort) { @@ -93,9 +88,6 @@ bool m_inFullscreenTransition = false; - (void)windowDidEndLiveResize:(NSNotification*)notification { - if (m_inFullscreenTransition) - return; - std::shared_ptr<CAppInboundProtocol> appPort = CServiceBroker::GetAppPort(); if (appPort) { @@ -196,14 +188,8 @@ bool m_inFullscreenTransition = false; return frameSize; } -- (void)windowWillExitFullScreen:(NSNotification*)notification -{ - m_inFullscreenTransition = true; -} - - (void)windowWillEnterFullScreen:(NSNotification*)pNotification { - m_inFullscreenTransition = true; CWinSystemOSX* winSystem = dynamic_cast<CWinSystemOSX*>(CServiceBroker::GetWinSystem()); if (!winSystem) return; @@ -241,7 +227,6 @@ bool m_inFullscreenTransition = false; - (void)windowDidExitFullScreen:(NSNotification*)pNotification { - m_inFullscreenTransition = false; auto winSystem = dynamic_cast<CWinSystemOSX*>(CServiceBroker::GetWinSystem()); if (!winSystem) return; @@ -268,7 +253,6 @@ bool m_inFullscreenTransition = false; - (void)windowDidEnterFullScreen:(NSNotification*)notification { - m_inFullscreenTransition = false; auto winSystem = dynamic_cast<CWinSystemOSX*>(CServiceBroker::GetWinSystem()); if (!winSystem) return; |