diff options
Diffstat (limited to 'src/plugins/platformthemes/flatpak/qflatpakfiledialog.cpp')
-rw-r--r-- | src/plugins/platformthemes/flatpak/qflatpakfiledialog.cpp | 64 |
1 files changed, 58 insertions, 6 deletions
diff --git a/src/plugins/platformthemes/flatpak/qflatpakfiledialog.cpp b/src/plugins/platformthemes/flatpak/qflatpakfiledialog.cpp index c31b326357..6ea8242d8a 100644 --- a/src/plugins/platformthemes/flatpak/qflatpakfiledialog.cpp +++ b/src/plugins/platformthemes/flatpak/qflatpakfiledialog.cpp @@ -101,6 +101,10 @@ const QDBusArgument &operator >>(const QDBusArgument &arg, QFlatpakFileDialog::F class QFlatpakFileDialogPrivate { public: + QFlatpakFileDialogPrivate(QPlatformFileDialogHelper *nativeFileDialog) + : nativeFileDialog(nativeFileDialog) + { } + WId winId = 0; bool modal = false; bool multipleFiles = false; @@ -111,12 +115,19 @@ public: QStringList nameFilters; QStringList mimeTypesFilters; QStringList selectedFiles; + QPlatformFileDialogHelper *nativeFileDialog = nullptr; }; -QFlatpakFileDialog::QFlatpakFileDialog() +QFlatpakFileDialog::QFlatpakFileDialog(QPlatformFileDialogHelper *nativeFileDialog) : QPlatformFileDialogHelper() - , d_ptr(new QFlatpakFileDialogPrivate) + , d_ptr(new QFlatpakFileDialogPrivate(nativeFileDialog)) { + Q_D(QFlatpakFileDialog); + + if (d->nativeFileDialog) { + connect(d->nativeFileDialog, SIGNAL(accept()), this, SIGNAL(accept())); + connect(d->nativeFileDialog, SIGNAL(reject()), this, SIGNAL(reject())); + } } QFlatpakFileDialog::~QFlatpakFileDialog() @@ -127,6 +138,9 @@ void QFlatpakFileDialog::initializeDialog() { Q_D(QFlatpakFileDialog); + if (d->nativeFileDialog) + d->nativeFileDialog->setOptions(options()); + if (options()->fileMode() == QFileDialogOptions::ExistingFiles) d->multipleFiles = true; @@ -265,6 +279,11 @@ void QFlatpakFileDialog::setDirectory(const QUrl &directory) { Q_D(QFlatpakFileDialog); + if (d->nativeFileDialog) { + d->nativeFileDialog->setOptions(options()); + d->nativeFileDialog->setDirectory(directory); + } + d->directory = directory.path(); } @@ -272,6 +291,9 @@ QUrl QFlatpakFileDialog::directory() const { Q_D(const QFlatpakFileDialog); + if (d->nativeFileDialog && options()->fileMode() == QFileDialogOptions::Directory) + return d->nativeFileDialog->directory(); + return d->directory; } @@ -279,6 +301,11 @@ void QFlatpakFileDialog::selectFile(const QUrl &filename) { Q_D(QFlatpakFileDialog); + if (d->nativeFileDialog) { + d->nativeFileDialog->setOptions(options()); + d->nativeFileDialog->selectFile(filename); + } + d->selectedFiles << filename.path(); } @@ -286,6 +313,9 @@ QList<QUrl> QFlatpakFileDialog::selectedFiles() const { Q_D(const QFlatpakFileDialog); + if (d->nativeFileDialog && options()->fileMode() == QFileDialogOptions::Directory) + return d->nativeFileDialog->selectedFiles(); + QList<QUrl> files; for (const QString &file : d->selectedFiles) { files << QUrl(file); @@ -295,13 +325,22 @@ QList<QUrl> QFlatpakFileDialog::selectedFiles() const void QFlatpakFileDialog::setFilter() { - // TODO + Q_D(QFlatpakFileDialog); + + if (d->nativeFileDialog) { + d->nativeFileDialog->setOptions(options()); + d->nativeFileDialog->setFilter(); + } } void QFlatpakFileDialog::selectNameFilter(const QString &filter) { - Q_UNUSED(filter); - // TODO + Q_D(QFlatpakFileDialog); + + if (d->nativeFileDialog) { + d->nativeFileDialog->setOptions(options()); + d->nativeFileDialog->selectNameFilter(filter); + } } QString QFlatpakFileDialog::selectedNameFilter() const @@ -312,6 +351,13 @@ QString QFlatpakFileDialog::selectedNameFilter() const void QFlatpakFileDialog::exec() { + Q_D(QFlatpakFileDialog); + + if (d->nativeFileDialog && options()->fileMode() == QFileDialogOptions::Directory) { + d->nativeFileDialog->exec(); + return; + } + // HACK we have to avoid returning until we emit that the dialog was accepted or rejected QEventLoop loop; loop.connect(this, SIGNAL(accept()), SLOT(quit())); @@ -321,18 +367,24 @@ void QFlatpakFileDialog::exec() void QFlatpakFileDialog::hide() { + Q_D(QFlatpakFileDialog); + + if (d->nativeFileDialog) + d->nativeFileDialog->hide(); } bool QFlatpakFileDialog::show(Qt::WindowFlags windowFlags, Qt::WindowModality windowModality, QWindow *parent) { Q_D(QFlatpakFileDialog); - Q_UNUSED(windowFlags); initializeDialog(); d->modal = windowModality != Qt::NonModal; d->winId = parent ? parent->winId() : 0; + if (d->nativeFileDialog && options()->fileMode() == QFileDialogOptions::Directory) + return d->nativeFileDialog->show(windowFlags, windowModality, parent); + openPortal(); return true; |