summaryrefslogtreecommitdiffstats
path: root/src/plugins/platformthemes/flatpak/qflatpakfiledialog.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/platformthemes/flatpak/qflatpakfiledialog.cpp')
-rw-r--r--src/plugins/platformthemes/flatpak/qflatpakfiledialog.cpp64
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;