summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2019-08-09 12:39:35 +0100
committerCaolán McNamara <caolanm@redhat.com>2019-08-09 14:44:45 +0200
commit83e99babaa4ae7d5479912bbda9bcd653ab0ccb3 (patch)
tree87a692a29311562a0d49661a784084b74746a9f7
parentc060e063467555b69c55ba214b400bfc68c67c3e (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.hxx4
-rw-r--r--sfx2/source/appl/sfxhelp.cxx6
-rw-r--r--vcl/source/window/dialog.cxx2
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;