summaryrefslogtreecommitdiff
path: root/vcl/qt5/QtFilePicker.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'vcl/qt5/QtFilePicker.cxx')
-rw-r--r--vcl/qt5/QtFilePicker.cxx57
1 files changed, 45 insertions, 12 deletions
diff --git a/vcl/qt5/QtFilePicker.cxx b/vcl/qt5/QtFilePicker.cxx
index ca80b61ef101..3fae63fca74f 100644
--- a/vcl/qt5/QtFilePicker.cxx
+++ b/vcl/qt5/QtFilePicker.cxx
@@ -116,6 +116,8 @@ QtFilePicker::QtFilePicker(css::uno::Reference<css::uno::XComponentContext> cons
// update automatic file extension when filter is changed
connect(m_pFileDialog.get(), SIGNAL(filterSelected(const QString&)), this,
SLOT(updateAutomaticFileExtension()));
+
+ connect(m_pFileDialog.get(), SIGNAL(finished(int)), this, SLOT(finished(int)));
}
QtFilePicker::~QtFilePicker()
@@ -152,18 +154,8 @@ void SAL_CALL QtFilePicker::setTitle(const OUString& title)
[this, &title]() { m_pFileDialog->setWindowTitle(toQString(title)); });
}
-sal_Int16 SAL_CALL QtFilePicker::execute()
+void QtFilePicker::prepareExecute()
{
- SolarMutexGuard g;
- auto* pSalInst(static_cast<QtInstance*>(GetSalData()->m_pInstance));
- assert(pSalInst);
- if (!pSalInst->IsMainThread())
- {
- sal_uInt16 ret;
- pSalInst->RunInMainThread([&ret, this]() { ret = execute(); });
- return ret;
- }
-
QWidget* pTransientParent = m_pParentWidget;
if (!pTransientParent)
{
@@ -191,15 +183,56 @@ sal_Int16 SAL_CALL QtFilePicker::execute()
m_pFileDialog->setParent(pTransientParent, m_pFileDialog->windowFlags());
m_pFileDialog->show();
xDesktop->addTerminateListener(this);
- int result = m_pFileDialog->exec();
+}
+
+void QtFilePicker::finished(int nResult)
+{
+ uno::Reference<css::frame::XDesktop> xDesktop(css::frame::Desktop::create(m_context),
+ UNO_QUERY_THROW);
xDesktop->removeTerminateListener(this);
m_pFileDialog->setParent(nullptr, m_pFileDialog->windowFlags());
+ if (m_xClosedListener.is())
+ {
+ const sal_Int16 nRet = (QFileDialog::Rejected == nResult) ? ExecutableDialogResults::CANCEL
+ : ExecutableDialogResults::OK;
+ css::ui::dialogs::DialogClosedEvent aEvent(*this, nRet);
+ m_xClosedListener->dialogClosed(aEvent);
+ m_xClosedListener.clear();
+ }
+}
+
+sal_Int16 SAL_CALL QtFilePicker::execute()
+{
+ SolarMutexGuard g;
+ auto* pSalInst(static_cast<QtInstance*>(GetSalData()->m_pInstance));
+ assert(pSalInst);
+ if (!pSalInst->IsMainThread())
+ {
+ sal_uInt16 ret;
+ pSalInst->RunInMainThread([&ret, this]() { ret = execute(); });
+ return ret;
+ }
+
+ prepareExecute();
+ int result = m_pFileDialog->exec();
+
if (QFileDialog::Rejected == result)
return ExecutableDialogResults::CANCEL;
return ExecutableDialogResults::OK;
}
+// XAsynchronousExecutableDialog functions
+void SAL_CALL QtFilePicker::setDialogTitle(const OUString& _rTitle) { setTitle(_rTitle); }
+
+void SAL_CALL
+QtFilePicker::startExecuteModal(const Reference<css::ui::dialogs::XDialogClosedListener>& xListener)
+{
+ m_xClosedListener = xListener;
+ prepareExecute();
+ m_pFileDialog->show();
+}
+
void SAL_CALL QtFilePicker::setMultiSelectionMode(sal_Bool multiSelect)
{
SolarMutexGuard g;