aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartijn Kaijser <martijn@xbmc.org>2019-03-21 21:51:24 +0100
committerGitHub <noreply@github.com>2019-03-21 21:51:24 +0100
commit26972c795a301b8b040bf8fe5e2fa7b8c36a8d78 (patch)
tree6e2e7e6a6909c8c06029d9bbc922db812a2257b7
parent40d5b2276c185174e124bb9045f6419f75718ae4 (diff)
parent25029f81a70dfe77ecae856dc7843f443119df24 (diff)
Merge pull request #15593 from DaveTBlake/winminunblockJSON
Fix waiting for window close animation blocking JSON requests after SetFullScreen
-rw-r--r--xbmc/Application.h2
-rw-r--r--xbmc/guilib/GUIWindowManager.cpp11
-rw-r--r--xbmc/guilib/IWindowManagerCallback.h1
3 files changed, 10 insertions, 4 deletions
diff --git a/xbmc/Application.h b/xbmc/Application.h
index 30cf6e7d32..57b006b60c 100644
--- a/xbmc/Application.h
+++ b/xbmc/Application.h
@@ -318,7 +318,7 @@ public:
bool SwitchToFullScreen(bool force = false);
- bool GetRenderGUI() const { return m_renderGUI; };
+ bool GetRenderGUI() const override { return m_renderGUI; };
bool SetLanguage(const std::string &strLanguage);
bool LoadLanguage(bool reload);
diff --git a/xbmc/guilib/GUIWindowManager.cpp b/xbmc/guilib/GUIWindowManager.cpp
index d5fbae93c2..3b1e63da05 100644
--- a/xbmc/guilib/GUIWindowManager.cpp
+++ b/xbmc/guilib/GUIWindowManager.cpp
@@ -1289,8 +1289,11 @@ CGUIWindow* CGUIWindowManager::GetWindow(int id) const
bool CGUIWindowManager::ProcessRenderLoop(bool renderOnly)
{
+ bool renderGui = true;
+
if (g_application.IsCurrentThread() && m_pCallback)
{
+ renderGui = m_pCallback->GetRenderGUI();
m_iNested++;
if (!renderOnly)
m_pCallback->Process();
@@ -1298,7 +1301,7 @@ bool CGUIWindowManager::ProcessRenderLoop(bool renderOnly)
m_pCallback->Render();
m_iNested--;
}
- if (g_application.m_bStop)
+ if (g_application.m_bStop || !renderGui)
return false;
else
return true;
@@ -1670,8 +1673,10 @@ void CGUIWindowManager::CloseWindowSync(CGUIWindow *window, int nextWindowID /*=
}
window->Close(false, nextWindowID);
- while (window->IsAnimating(ANIM_TYPE_WINDOW_CLOSE))
- ProcessRenderLoop(true);
+
+ bool renderLoopProcessed = true;
+ while (window->IsAnimating(ANIM_TYPE_WINDOW_CLOSE) && renderLoopProcessed)
+ renderLoopProcessed = ProcessRenderLoop(true);
}
#ifdef _DEBUG
diff --git a/xbmc/guilib/IWindowManagerCallback.h b/xbmc/guilib/IWindowManagerCallback.h
index b66edaaf89..d5fc89c4e9 100644
--- a/xbmc/guilib/IWindowManagerCallback.h
+++ b/xbmc/guilib/IWindowManagerCallback.h
@@ -26,4 +26,5 @@ public:
virtual void FrameMove(bool processEvents, bool processGUI = true) = 0;
virtual void Render() = 0;
virtual void Process() = 0;
+ virtual bool GetRenderGUI() const { return false; };
};