aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiguel Borges de Freitas <92enen@gmail.com>2024-05-04 23:57:31 +0100
committerGitHub <noreply@github.com>2024-05-04 23:57:31 +0100
commit058a35d43e571c52193c8652182eb65f6cc9f61b (patch)
treeb0c8aa51063bd1de1c18a01ff5a9d574b94d0784
parentdb1f89bc9242f1603256555d82da92e0dacc36e7 (diff)
parent0dc8347a94f0a71eeed10903d3f3fb09b59def3b (diff)
downloadxbmc-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.cpp11
-rw-r--r--xbmc/application/Application.h2
-rw-r--r--xbmc/application/ApplicationPowerHandling.cpp6
-rw-r--r--xbmc/windowing/osx/OpenGL/WindowControllerMacOS.mm16
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;