[Libreoffice-commits] core.git: Branch 'libreoffice-6-2' - include/sfx2 sfx2/source

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Tue Jan 8 13:24:39 UTC 2019


 include/sfx2/sfxhelp.hxx     |    2 ++
 sfx2/source/appl/sfxhelp.cxx |   30 ++++++++++++++++++++++++++++++
 2 files changed, 32 insertions(+)

New commits:
commit 242119f8cdf0743afd96a5c467c81adace9a8c40
Author:     Caolán McNamara <caolanm at redhat.com>
AuthorDate: Sun Dec 23 17:46:48 2018 +0000
Commit:     Noel Grandin <noel.grandin at 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.grandin at 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;
                 }
             }


More information about the Libreoffice-commits mailing list