diff options
author | Jan Grulich <jgrulich@redhat.com> | 2018-01-15 08:40:36 +0100 |
---|---|---|
committer | Jan Grulich <jgrulich@redhat.com> | 2018-02-02 05:54:43 +0000 |
commit | e8bf3a2ce7fcc153fbb9732b02b51167c5c4aaf5 (patch) | |
tree | 6e04f822521be98ac148825d672e16bff7676489 /src/plugins/platformthemes/flatpak | |
parent | ac0ad5c69ce9a00ebe5377da40a26b43353fae58 (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/platformthemes/flatpak')
-rw-r--r-- | src/plugins/platformthemes/flatpak/qflatpakfiledialog.cpp | 115 | ||||
-rw-r--r-- | src/plugins/platformthemes/flatpak/qflatpakfiledialog_p.h | 1 |
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; }; |