summaryrefslogtreecommitdiff
path: root/filter/source
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2018-12-20 14:55:26 +0000
committerChristian Lohmaier <lohmaier+LibreOffice@googlemail.com>2019-01-07 16:52:02 +0100
commitdf41e426ca6aa5693abb5417b1c7ab8f77381e9e (patch)
tree460082c8e1f4028f08dd663a911de3030220242b /filter/source
parente3464875d4deddf51c87537299c7119c77765aa8 (diff)
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@libreoffice.org> Reviewed-by: Christian Lohmaier <lohmaier+LibreOffice@googlemail.com>
Diffstat (limited to 'filter/source')
-rw-r--r--filter/source/xsltdialog/xmlfiltersettingsdialog.cxx37
-rw-r--r--filter/source/xsltdialog/xmlfiltersettingsdialog.hxx3
2 files changed, 34 insertions, 6 deletions
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 );