summarylogtreecommitdiffstats
path: root/0001-Use-QFileDialog-for-selecting-directories.patch
diff options
context:
space:
mode:
Diffstat (limited to '0001-Use-QFileDialog-for-selecting-directories.patch')
-rw-r--r--0001-Use-QFileDialog-for-selecting-directories.patch69
1 files changed, 69 insertions, 0 deletions
diff --git a/0001-Use-QFileDialog-for-selecting-directories.patch b/0001-Use-QFileDialog-for-selecting-directories.patch
new file mode 100644
index 000000000000..6910dcff1b56
--- /dev/null
+++ b/0001-Use-QFileDialog-for-selecting-directories.patch
@@ -0,0 +1,69 @@
+From eb684e42e768e4c57dbf81abf51f7597df164814 Mon Sep 17 00:00:00 2001
+From: Fabian Vogt <fabian@ritter-vogt.de>
+Date: Mon, 17 Jan 2022 22:05:09 +0100
+Subject: [PATCH 1/3] Use QFileDialog for selecting directories
+
+KFileWidget is not as good at selecting directories as KDirSelectDialog
+from plasma-integration. On top of that, directory selection appears to be
+entirely broken currently.
+
+Use KDirSelectDialog through QFileDialog if possible.
+
+BUG: 437505
+---
+ src/filechooser.cpp | 32 ++++++++++++++++++++++++++++++++
+ 1 file changed, 32 insertions(+)
+
+diff --git a/src/filechooser.cpp b/src/filechooser.cpp
+index 4302c24..97a48fc 100644
+--- a/src/filechooser.cpp
++++ b/src/filechooser.cpp
+@@ -13,6 +13,7 @@
+ #include <QDBusMetaType>
+ #include <QDialogButtonBox>
+ #include <QFile>
++#include <QFileDialog>
+ #include <QGridLayout>
+ #include <QLabel>
+ #include <QLoggingCategory>
+@@ -256,6 +257,37 @@ uint FileChooserPortal::OpenFile(const QDBusObjectPath &handle,
+ return retCode;
+ }
+
++ // Use QFileDialog for most directory requests to utilize
++ // plasma-integration's KDirSelectDialog
++ if (directory && !options.contains(QStringLiteral("choices"))) {
++ QFileDialog dirDialog;
++ dirDialog.setWindowTitle(title);
++ dirDialog.setModal(modalDialog);
++ dirDialog.setFileMode(QFileDialog::Directory);
++ dirDialog.setOptions(QFileDialog::ShowDirsOnly);
++ dirDialog.setSupportedSchemes(QStringList{QStringLiteral("file")});
++ if (!acceptLabel.isEmpty()) {
++ dirDialog.setLabelText(QFileDialog::Accept, acceptLabel);
++ }
++
++ dirDialog.winId(); // Trigger window creation
++ Utils::setParentWindow(&dirDialog, parent_window);
++
++ if (dirDialog.exec() != QDialog::Accepted) {
++ return 1;
++ }
++
++ const auto urls = dirDialog.selectedUrls();
++ if (urls.empty()) {
++ return 2;
++ }
++
++ results.insert(QStringLiteral("uris"), QUrl::toStringList(urls));
++ results.insert(QStringLiteral("writable"), true);
++
++ return 0;
++ }
++
+ // for handling of options - choices
+ QScopedPointer<QWidget> optionsWidget;
+ // to store IDs for choices along with corresponding comboboxes/checkboxes
+--
+2.35.0
+