include/sfx2/sfxhelp.hxx | 2 ++ sfx2/source/appl/sfxhelp.cxx | 30 ++++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+)
New commits: commit 242119f8cdf0743afd96a5c467c81adace9a8c40 Author: Caolán McNamara <caol...@redhat.com> AuthorDate: Sun Dec 23 17:46:48 2018 +0000 Commit: Noel Grandin <noel.gran...@collabora.co.uk> CommitDate: Tue Jan 8 14:24:17 2019 +0100 tdf#122273 modal dialog on modeless dialog needs special handling Change-Id: Idb5111b3f795f55c4b5644b5bcc6145106ff1392 Reviewed-on: https://gerrit.libreoffice.org/65584 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk> diff --git a/include/sfx2/sfxhelp.hxx b/include/sfx2/sfxhelp.hxx index d7afeb2b9af0..eaee5346b30e 100644 --- a/include/sfx2/sfxhelp.hxx +++ b/include/sfx2/sfxhelp.hxx @@ -40,6 +40,8 @@ private: SAL_DLLPRIVATE virtual bool Start(const OUString& rURL, weld::Widget* pWidget) override; SAL_DLLPRIVATE static OUString GetHelpModuleName_Impl(const OUString &rHelpId); SAL_DLLPRIVATE static OUString CreateHelpURL_Impl( const OUString& aCommandURL, const OUString& rModuleName ); + SAL_DLLPRIVATE static void incBusy(const vcl::Window* pParent); + SAL_DLLPRIVATE static void decBusy(const vcl::Window* pParent); public: SfxHelp(); diff --git a/sfx2/source/appl/sfxhelp.cxx b/sfx2/source/appl/sfxhelp.cxx index 9e457b7968a8..08de23e30de6 100644 --- a/sfx2/source/appl/sfxhelp.cxx +++ b/sfx2/source/appl/sfxhelp.cxx @@ -1023,6 +1023,32 @@ namespace } } +void SfxHelp::incBusy(const vcl::Window* pParent) +{ + // lock any toplevel windows from being closed until busy is over + // ensure any dialogs are reset before entering + vcl::Window *xTopWin = Application::GetFirstTopLevelWindow(); + while (xTopWin) + { + if (xTopWin != pParent) + xTopWin->IncModalCount(); + xTopWin = Application::GetNextTopLevelWindow(xTopWin); + } +} + +void SfxHelp::decBusy(const vcl::Window* pParent) +{ + // unlock any toplevel windows from being closed until busy is over + // ensure any dialogs are reset before entering + vcl::Window *xTopWin = Application::GetFirstTopLevelWindow(); + while (xTopWin) + { + if (xTopWin != pParent) + xTopWin->DecModalCount(); + xTopWin = Application::GetNextTopLevelWindow(xTopWin); + } +} + bool SfxHelp::Start_Impl(const OUString& rURL, const vcl::Window* pWindow, const OUString& rKeyword) { OUStringBuffer aHelpRootURL("vnd.sun.star.help://"); @@ -1131,6 +1157,7 @@ bool SfxHelp::Start_Impl(const OUString& rURL, const vcl::Window* pWindow, const if(bShowOfflineHelpPopUp) { + incBusy(pWindow); std::unique_ptr<weld::Builder> xBuilder(Application::CreateBuilder(pWindow ? pWindow->GetFrameWeld() : nullptr, "sfx/ui/helpmanual.ui")); std::unique_ptr<weld::MessageDialog> xQueryBox(xBuilder->weld_message_dialog("onlinehelpmanual")); std::unique_ptr<weld::CheckButton> m_xHideOfflineHelpCB(xBuilder->weld_check_button("hidedialog")); @@ -1141,6 +1168,7 @@ bool SfxHelp::Start_Impl(const OUString& rURL, const vcl::Window* pWindow, const short OnlineHelpBox = xQueryBox->run(); bShowOfflineHelpPopUp = OnlineHelpBox != RET_OK; aHelpOptions.SetOfflineHelpPopUp(!m_xHideOfflineHelpCB->get_state()); + decBusy(pWindow); } if(!bShowOfflineHelpPopUp) { @@ -1148,8 +1176,10 @@ bool SfxHelp::Start_Impl(const OUString& rURL, const vcl::Window* pWindow, const return true; else { + incBusy(pWindow); NoHelpErrorBox aErrBox(pWindow ? pWindow->GetFrameWeld() : nullptr); aErrBox.run(); + decBusy(pWindow); return false; } } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits