Resolves: tdf#122153 keep Execute for modal dialogs
and not modeless ones
cause you get one main loop running inside another, and everything
is running inside the modeless dialog main loop until it exits.
Change-Id: I45e92380288727669e287b62e84b815d5dc1960c
Reviewed-on: https://gerrit.libreoffice.org/65281
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
diff --git a/filter/source/xsltdialog/xmlfilterdialogcomponent.cxx b/filter/source/xsltdialog/xmlfilterdialogcomponent.cxx
index ffa2eeb..9b5dd73 100644
--- a/filter/source/xsltdialog/xmlfilterdialogcomponent.cxx
+++ b/filter/source/xsltdialog/xmlfilterdialogcomponent.cxx
@@ -265,7 +265,6 @@
mpDialog->Close();
}
void SAL_CALL XMLFilterDialogComponent::notifyTermination( const EventObject& /* Event */ )
{
// we are going down, so dispose us!
@@ -276,35 +275,41 @@
{
}
void SAL_CALL XMLFilterDialogComponent::setTitle( const OUString& /* _rTitle */ )
{
}
sal_Int16 SAL_CALL XMLFilterDialogComponent::execute( )
sal_Int16 SAL_CALL XMLFilterDialogComponent::execute()
{
::SolarMutexGuard aGuard;
if( nullptr == mpDialog )
bool bLaunch = false;
if (!mpDialog)
{
Reference< XComponent > xComp( this );
if (mxParent.is())
mpDialog = VclPtr<XMLFilterSettingsDialog>::Create(VCLUnoHelper::GetWindow(mxParent), mxContext);
else
mpDialog = VclPtr<XMLFilterSettingsDialog>::Create(nullptr, mxContext, Dialog::InitFlag::NoParent);
mpDialog->Execute();
bLaunch = true;
}
else if( !mpDialog->IsVisible() )
mpDialog->UpdateWindow();
if (!bLaunch)
{
mpDialog->Execute();
mpDialog->ToTop();
return 0;
}
mpDialog->ToTop();
mpDialog->StartExecuteAsync([this](sal_Int32)
{
mpDialog.reset();
});
return 0;
}
void SAL_CALL XMLFilterDialogComponent::initialize( const Sequence< Any >& aArguments )
{
for(const Any& rArgument : aArguments)
@@ -320,7 +325,6 @@
}
}
extern "C"
{
SAL_DLLPUBLIC_EXPORT void * xsltdlg_component_getFactory(
diff --git a/filter/source/xsltdialog/xmlfiltersettingsdialog.cxx b/filter/source/xsltdialog/xmlfiltersettingsdialog.cxx
index 1f7f769..5ae9094 100644
--- a/filter/source/xsltdialog/xmlfiltersettingsdialog.cxx
+++ b/filter/source/xsltdialog/xmlfiltersettingsdialog.cxx
@@ -179,15 +179,13 @@
return false;
}
short XMLFilterSettingsDialog::Execute()
void XMLFilterSettingsDialog::UpdateWindow()
{
m_pCtrlFilterList->GrabFocus();
disposeFilterList();
m_pFilterListBox->Clear();
initFilterList();
updateStates();
return ModelessDialog::Execute();
}
void XMLFilterSettingsDialog::updateStates()
diff --git a/filter/source/xsltdialog/xmlfiltersettingsdialog.hxx b/filter/source/xsltdialog/xmlfiltersettingsdialog.hxx
index 816e75a..ff55a19 100644
--- a/filter/source/xsltdialog/xmlfiltersettingsdialog.hxx
+++ b/filter/source/xsltdialog/xmlfiltersettingsdialog.hxx
@@ -92,7 +92,7 @@
DECL_LINK(SelectionChangedHdl_Impl, SvTreeListBox*, void );
DECL_LINK(DoubleClickHdl_Impl, SvTreeListBox*, bool );
virtual short Execute() override;
void UpdateWindow();
void onNew();
void onEdit();