summaryrefslogtreecommitdiffstats
path: root/src/plugins
diff options
context:
space:
mode:
authorJan Grulich <jgrulich@redhat.com>2018-01-15 08:40:36 +0100
committerJan Grulich <jgrulich@redhat.com>2018-02-02 05:54:43 +0000
commite8bf3a2ce7fcc153fbb9732b02b51167c5c4aaf5 (patch)
tree6e04f822521be98ac148825d672e16bff7676489 /src/plugins
parentac0ad5c69ce9a00ebe5377da40a26b43353fae58 (diff)
Fix opening of flatpak FileChooser portal
My assumption before was that show() method calls exec(), but it seems to be vice-versa and so QML applications using QFileDialog were not able to open dialogs as they use visible property, which in turn calls show() method. I made the show() method to call new openPortal() method where I moved the actuall DBus call from exec() method. The exec() method now internally calls show(), at least this is my assumption and it seems to behave like that from my testing. Change-Id: I27a5b0198e9ff1a9ea031f9ae45b57ceae99c6ae Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/platformthemes/flatpak/qflatpakfiledialog.cpp115
-rw-r--r--src/plugins/platformthemes/flatpak/qflatpakfiledialog_p.h1
2 files changed, 61 insertions, 55 deletions
diff --git a/src/plugins/platformthemes/flatpak/qflatpakfiledialog.cpp b/src/plugins/platformthemes/flatpak/qflatpakfiledialog.cpp
index c51223186e..1a24015ce5 100644
--- a/src/plugins/platformthemes/flatpak/qflatpakfiledialog.cpp
+++ b/src/plugins/platformthemes/flatpak/qflatpakfiledialog.cpp
@@ -147,61 +147,7 @@ void QFlatpakFileDialog::initializeDialog()
setDirectory(options()->initialDirectory());
}
-bool QFlatpakFileDialog::defaultNameFilterDisables() const
-{
- return false;
-}
-
-void QFlatpakFileDialog::setDirectory(const QUrl &directory)
-{
- Q_D(QFlatpakFileDialog);
-
- d->directory = directory.path();
-}
-
-QUrl QFlatpakFileDialog::directory() const
-{
- Q_D(const QFlatpakFileDialog);
-
- return d->directory;
-}
-
-void QFlatpakFileDialog::selectFile(const QUrl &filename)
-{
- Q_D(QFlatpakFileDialog);
-
- d->selectedFiles << filename.path();
-}
-
-QList<QUrl> QFlatpakFileDialog::selectedFiles() const
-{
- Q_D(const QFlatpakFileDialog);
-
- QList<QUrl> files;
- for (const QString &file : d->selectedFiles) {
- files << QUrl(file);
- }
- return files;
-}
-
-void QFlatpakFileDialog::setFilter()
-{
- // TODO
-}
-
-void QFlatpakFileDialog::selectNameFilter(const QString &filter)
-{
- Q_UNUSED(filter);
- // TODO
-}
-
-QString QFlatpakFileDialog::selectedNameFilter() const
-{
- // TODO
- return QString();
-}
-
-void QFlatpakFileDialog::exec()
+void QFlatpakFileDialog::openPortal()
{
Q_D(const QFlatpakFileDialog);
@@ -305,7 +251,64 @@ void QFlatpakFileDialog::exec()
SLOT(gotResponse(uint,QVariantMap)));
}
});
+}
+bool QFlatpakFileDialog::defaultNameFilterDisables() const
+{
+ return false;
+}
+
+void QFlatpakFileDialog::setDirectory(const QUrl &directory)
+{
+ Q_D(QFlatpakFileDialog);
+
+ d->directory = directory.path();
+}
+
+QUrl QFlatpakFileDialog::directory() const
+{
+ Q_D(const QFlatpakFileDialog);
+
+ return d->directory;
+}
+
+void QFlatpakFileDialog::selectFile(const QUrl &filename)
+{
+ Q_D(QFlatpakFileDialog);
+
+ d->selectedFiles << filename.path();
+}
+
+QList<QUrl> QFlatpakFileDialog::selectedFiles() const
+{
+ Q_D(const QFlatpakFileDialog);
+
+ QList<QUrl> files;
+ for (const QString &file : d->selectedFiles) {
+ files << QUrl(file);
+ }
+ return files;
+}
+
+void QFlatpakFileDialog::setFilter()
+{
+ // TODO
+}
+
+void QFlatpakFileDialog::selectNameFilter(const QString &filter)
+{
+ Q_UNUSED(filter);
+ // TODO
+}
+
+QString QFlatpakFileDialog::selectedNameFilter() const
+{
+ // TODO
+ return QString();
+}
+
+void QFlatpakFileDialog::exec()
+{
// 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()));
@@ -327,6 +330,8 @@ bool QFlatpakFileDialog::show(Qt::WindowFlags windowFlags, Qt::WindowModality wi
d->modal = windowModality != Qt::NonModal;
d->winId = parent ? parent->winId() : 0;
+ openPortal();
+
return true;
}
diff --git a/src/plugins/platformthemes/flatpak/qflatpakfiledialog_p.h b/src/plugins/platformthemes/flatpak/qflatpakfiledialog_p.h
index 8f65d07e62..f3e195faa0 100644
--- a/src/plugins/platformthemes/flatpak/qflatpakfiledialog_p.h
+++ b/src/plugins/platformthemes/flatpak/qflatpakfiledialog_p.h
@@ -90,6 +90,7 @@ private Q_SLOTS:
private:
void initializeDialog();
+ void openPortal();
QScopedPointer<QFlatpakFileDialogPrivate> d_ptr;
};