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>bb10
parent
ac0ad5c69c
commit
e8bf3a2ce7
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -90,6 +90,7 @@ private Q_SLOTS:
|
|||
|
||||
private:
|
||||
void initializeDialog();
|
||||
void openPortal();
|
||||
|
||||
QScopedPointer<QFlatpakFileDialogPrivate> d_ptr;
|
||||
};
|
||||
|
|
|
|||
Loading…
Reference in New Issue