summaryrefslogtreecommitdiff
path: root/filter
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2018-12-17 16:53:35 +0000
committerCaolán McNamara <caolanm@redhat.com>2018-12-17 22:07:39 +0100
commitc821da3ecc3c309be2ec2db204a4c853b53fa979 (patch)
tree84afb5b585a9c32a50ff834c44205b8c4128b366 /filter
parent7d8eec83535dbae5b392fae52fd5c41bf5afea06 (diff)
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/65282 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/xmlfilterdialogcomponent.cxx26
-rw-r--r--filter/source/xsltdialog/xmlfiltersettingsdialog.cxx4
-rw-r--r--filter/source/xsltdialog/xmlfiltersettingsdialog.hxx2
3 files changed, 17 insertions, 15 deletions
diff --git a/filter/source/xsltdialog/xmlfilterdialogcomponent.cxx b/filter/source/xsltdialog/xmlfilterdialogcomponent.cxx
index ffa2eebdcf7b..9b5dd734002f 100644
--- a/filter/source/xsltdialog/xmlfilterdialogcomponent.cxx
+++ b/filter/source/xsltdialog/xmlfilterdialogcomponent.cxx
@@ -265,7 +265,6 @@ void SAL_CALL XMLFilterDialogComponent::queryTermination( const EventObject& /*
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::disposing( const EventObject& /* Source
{
}
-
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 @@ void SAL_CALL XMLFilterDialogComponent::initialize( const Sequence< Any >& aArgu
}
}
-
extern "C"
{
SAL_DLLPUBLIC_EXPORT void * xsltdlg_component_getFactory(
diff --git a/filter/source/xsltdialog/xmlfiltersettingsdialog.cxx b/filter/source/xsltdialog/xmlfiltersettingsdialog.cxx
index f1d82327ca75..f5afa3d1125a 100644
--- a/filter/source/xsltdialog/xmlfiltersettingsdialog.cxx
+++ b/filter/source/xsltdialog/xmlfiltersettingsdialog.cxx
@@ -178,15 +178,13 @@ IMPL_LINK_NOARG(XMLFilterSettingsDialog, DoubleClickHdl_Impl, SvTreeListBox*, bo
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 816e75ac72bb..ff55a19f9b5a 100644
--- a/filter/source/xsltdialog/xmlfiltersettingsdialog.hxx
+++ b/filter/source/xsltdialog/xmlfiltersettingsdialog.hxx
@@ -92,7 +92,7 @@ public:
DECL_LINK(SelectionChangedHdl_Impl, SvTreeListBox*, void );
DECL_LINK(DoubleClickHdl_Impl, SvTreeListBox*, bool );
- virtual short Execute() override;
+ void UpdateWindow();
void onNew();
void onEdit();