diff options
author | Caolán McNamara <caolanm@redhat.com> | 2018-12-20 14:55:26 +0000 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2018-12-20 22:12:49 +0100 |
commit | ec61f9c97f13236cbcead7ce2d75e0122abe7969 (patch) | |
tree | ef198bf08f0d73a8d9156e5b90d27b7866383022 /filter | |
parent | daf63683ff7eec73df2ce061720f464c36e08ecb (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/65503
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'filter')
-rw-r--r-- | filter/source/xsltdialog/xmlfiltersettingsdialog.cxx | 37 | ||||
-rw-r--r-- | filter/source/xsltdialog/xmlfiltersettingsdialog.hxx | 3 |
2 files changed, 34 insertions, 6 deletions
diff --git a/filter/source/xsltdialog/xmlfiltersettingsdialog.cxx b/filter/source/xsltdialog/xmlfiltersettingsdialog.cxx index 39b3dfee190b..44a2dd30917f 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> @@ -133,13 +133,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) { @@ -169,6 +192,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 ); |