diff options
author | Caolán McNamara <caolanm@redhat.com> | 2019-08-09 12:39:35 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2019-08-09 14:44:45 +0200 |
commit | 83e99babaa4ae7d5479912bbda9bcd653ab0ccb3 (patch) | |
tree | 87a692a29311562a0d49661a784084b74746a9f7 | |
parent | c060e063467555b69c55ba214b400bfc68c67c3e (diff) |
Resolves: tdf#126790 use TopLevelWindowLocker in welded help path
Change-Id: I4340d021b63609189d3179a7bcff7fac4fcef69d
Reviewed-on: https://gerrit.libreoffice.org/77195
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
-rw-r--r-- | include/vcl/waitobj.hxx | 4 | ||||
-rw-r--r-- | sfx2/source/appl/sfxhelp.cxx | 6 | ||||
-rw-r--r-- | vcl/source/window/dialog.cxx | 2 |
3 files changed, 9 insertions, 3 deletions
diff --git a/include/vcl/waitobj.hxx b/include/vcl/waitobj.hxx index a136a73b455a..682153a1e892 100644 --- a/include/vcl/waitobj.hxx +++ b/include/vcl/waitobj.hxx @@ -26,7 +26,7 @@ #include <stack> #include <vector> -namespace weld { class Window; } +namespace weld { class Widget; } class VCL_DLLPUBLIC WaitObject { @@ -48,7 +48,7 @@ private: std::stack<std::vector<VclPtr<vcl::Window>>> m_aBusyStack; public: // lock all toplevels, except the argument - void incBusy(const weld::Window* pIgnore); + void incBusy(const weld::Widget* pIgnore); // unlock previous lock void decBusy(); bool isBusy() const { return !m_aBusyStack.empty(); } diff --git a/sfx2/source/appl/sfxhelp.cxx b/sfx2/source/appl/sfxhelp.cxx index 409edaf57e16..ee6fbb63e133 100644 --- a/sfx2/source/appl/sfxhelp.cxx +++ b/sfx2/source/appl/sfxhelp.cxx @@ -1281,8 +1281,11 @@ bool SfxHelp::Start_Impl(const OUString& rURL, weld::Widget* pWidget, const OUSt SvtHelpOptions aHelpOptions; bool bShowOfflineHelpPopUp = aHelpOptions.IsOfflineHelpPopUp(); + TopLevelWindowLocker aBusy; + if(bShowOfflineHelpPopUp) { + aBusy.incBusy(pWidget); std::unique_ptr<weld::Builder> xBuilder(Application::CreateBuilder(pWidget, "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")); @@ -1293,6 +1296,7 @@ bool SfxHelp::Start_Impl(const OUString& rURL, weld::Widget* pWidget, const OUSt short OnlineHelpBox = xQueryBox->run(); bShowOfflineHelpPopUp = OnlineHelpBox != RET_OK; aHelpOptions.SetOfflineHelpPopUp(!m_xHideOfflineHelpCB->get_state()); + aBusy.decBusy(); } if(!bShowOfflineHelpPopUp) { @@ -1300,8 +1304,10 @@ bool SfxHelp::Start_Impl(const OUString& rURL, weld::Widget* pWidget, const OUSt return true; else { + aBusy.incBusy(pWidget); NoHelpErrorBox aErrBox(pWidget); aErrBox.run(); + aBusy.decBusy(); return false; } } diff --git a/vcl/source/window/dialog.cxx b/vcl/source/window/dialog.cxx index 76cbe8983af7..cc90dc3d625a 100644 --- a/vcl/source/window/dialog.cxx +++ b/vcl/source/window/dialog.cxx @@ -1598,7 +1598,7 @@ void Dialog::Activate() SystemWindow::Activate(); } -void TopLevelWindowLocker::incBusy(const weld::Window* pIgnore) +void TopLevelWindowLocker::incBusy(const weld::Widget* pIgnore) { // lock any toplevel windows from being closed until busy is over std::vector<VclPtr<vcl::Window>> aTopLevels; |