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 <[email protected]> AuthorDate: Thu Dec 20 14:55:26 2018 +0000 Commit: Christian Lohmaier <[email protected]> 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í <[email protected]> Reviewed-by: Christian Lohmaier <[email protected]> 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 ); _______________________________________________ Libreoffice-commits mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
