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

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Mon Jan 7 15:52:24 UTC 2019


 filter/source/xsltdialog/xmlfiltersettingsdialog.cxx |   37 +++++++++++++++----
 filter/source/xsltdialog/xmlfiltersettingsdialog.hxx |    3 +
 2 files changed, 34 insertions(+), 6 deletions(-)

New commits:
commit df41e426ca6aa5693abb5417b1c7ab8f77381e9e
Author:     Caolán McNamara <caolanm at redhat.com>
AuthorDate: Thu Dec 20 14:55:26 2018 +0000
Commit:     Christian Lohmaier <lohmaier+LibreOffice at googlemail.com>
CommitDate: Mon Jan 7 16:52:02 2019 +0100

    Resolves: tdf#122219 base form writer-window doesn't honour CloseVeto properly
    
    just hit this with the same all-modal hammer we now use in the extension manager,
    a modeless dialog, with modal subdialogs run by a normal non-async subloop, turns
    into a modal dialog for all other toplevels
    
    Change-Id: Ia35fad7a1be2ec493011c7e4354b70231b78a7fc
    Reviewed-on: https://gerrit.libreoffice.org/65504
    Tested-by: Jenkins
    Tested-by: Xisco Faulí <xiscofauli at libreoffice.org>
    Reviewed-by: Christian Lohmaier <lohmaier+LibreOffice at googlemail.com>

diff --git a/filter/source/xsltdialog/xmlfiltersettingsdialog.cxx b/filter/source/xsltdialog/xmlfiltersettingsdialog.cxx
index cab88b079e89..a65b5824664b 100644
--- a/filter/source/xsltdialog/xmlfiltersettingsdialog.cxx
+++ b/filter/source/xsltdialog/xmlfiltersettingsdialog.cxx
@@ -17,6 +17,7 @@
  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
  */
 
+#include <com/sun/star/beans/XPropertySet.hpp>
 #include <com/sun/star/container/XNameAccess.hpp>
 #include <com/sun/star/frame/Desktop.hpp>
 #include <com/sun/star/util/XFlushable.hpp>
@@ -27,7 +28,6 @@
 #include <com/sun/star/ui/dialogs/TemplateDescription.hpp>
 #include <tools/urlobj.hxx>
 #include <vcl/headbar.hxx>
-#include <unotools/closeveto.hxx>
 #include <unotools/pathoptions.hxx>
 #include <unotools/resmgr.hxx>
 #include <unotools/streamwrap.hxx>
@@ -132,13 +132,36 @@ void XMLFilterSettingsDialog::dispose()
     ModelessDialog::dispose();
 }
 
+void XMLFilterSettingsDialog::incBusy()
+{
+    // 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 != this)
+            xTopWin->IncModalCount();
+        xTopWin = Application::GetNextTopLevelWindow(xTopWin);
+    }
+}
+
+void XMLFilterSettingsDialog::decBusy()
+{
+    // 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 != this)
+            xTopWin->DecModalCount();
+        xTopWin = Application::GetNextTopLevelWindow(xTopWin);
+    }
+}
+
 IMPL_LINK(XMLFilterSettingsDialog, ClickHdl_Impl, Button *, pButton, void )
 {
-    // tdf#122171 block closing libreoffice until the following dialog
-    // is dismissed
-    css::uno::Reference<css::frame::XDesktop2> xDesktop(css::frame::Desktop::create(mxContext));
-    css::uno::Reference<css::frame::XFrame> xFrame(xDesktop->getCurrentFrame());
-    utl::CloseVeto aKeepDoc(xFrame);
+    // tdf#122171 block closing libreoffice until the following dialog is dismissed
+    incBusy();
 
     if (m_pPBNew == pButton)
     {
@@ -168,6 +191,8 @@ IMPL_LINK(XMLFilterSettingsDialog, ClickHdl_Impl, Button *, pButton, void )
     {
         Close();
     }
+
+    decBusy();
 }
 
 IMPL_LINK_NOARG(XMLFilterSettingsDialog, SelectionChangedHdl_Impl, SvTreeListBox*, void)
diff --git a/filter/source/xsltdialog/xmlfiltersettingsdialog.hxx b/filter/source/xsltdialog/xmlfiltersettingsdialog.hxx
index d6933dad425a..e1e1d82418d5 100644
--- a/filter/source/xsltdialog/xmlfiltersettingsdialog.hxx
+++ b/filter/source/xsltdialog/xmlfiltersettingsdialog.hxx
@@ -109,6 +109,9 @@ private:
     void    initFilterList();
     void    disposeFilterList();
 
+    void    incBusy();
+    void    decBusy();
+
     bool    insertOrEdit( filter_info_impl* pNewInfo, const filter_info_impl* pOldInfo = nullptr );
 
     OUString createUniqueFilterName( const OUString& rUIName );


More information about the Libreoffice-commits mailing list