diff options
author | Martijn Kaijser <martijn@xbmc.org> | 2019-03-21 21:51:24 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-03-21 21:51:24 +0100 |
commit | 26972c795a301b8b040bf8fe5e2fa7b8c36a8d78 (patch) | |
tree | 6e2e7e6a6909c8c06029d9bbc922db812a2257b7 | |
parent | 40d5b2276c185174e124bb9045f6419f75718ae4 (diff) | |
parent | 25029f81a70dfe77ecae856dc7843f443119df24 (diff) |
Merge pull request #15593 from DaveTBlake/winminunblockJSON
Fix waiting for window close animation blocking JSON requests after SetFullScreen
-rw-r--r-- | xbmc/Application.h | 2 | ||||
-rw-r--r-- | xbmc/guilib/GUIWindowManager.cpp | 11 | ||||
-rw-r--r-- | xbmc/guilib/IWindowManagerCallback.h | 1 |
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; }; }; |