diff --git a/src/filechooser.h b/src/filechooser.h --- a/src/filechooser.h +++ b/src/filechooser.h @@ -27,6 +27,7 @@ class KFileWidget; class QDialogButtonBox; +class QCheckBox; class FileDialog : public QDialog { @@ -37,7 +38,9 @@ FileDialog(QDialog *parent = nullptr, Qt::WindowFlags flags = {}); ~FileDialog(); + bool readOnly() const; private: + QCheckBox *m_readOnlyCheckbox; QDialogButtonBox *m_buttons; protected: KFileWidget *m_fileWidget; diff --git a/src/filechooser.cpp b/src/filechooser.cpp --- a/src/filechooser.cpp +++ b/src/filechooser.cpp @@ -22,6 +22,7 @@ #include "utils.h" #include +#include #include #include #include @@ -90,6 +91,11 @@ setLayout(new QVBoxLayout); layout()->addWidget(m_fileWidget); + m_readOnlyCheckbox = new QCheckBox(this); + m_readOnlyCheckbox->setChecked(false); + m_readOnlyCheckbox->setText(i18n("Open as read-only")); + m_fileWidget->setCustomWidget(m_readOnlyCheckbox); + m_buttons = new QDialogButtonBox(this); m_buttons->addButton(m_fileWidget->okButton(), QDialogButtonBox::AcceptRole); m_buttons->addButton(m_fileWidget->cancelButton(), QDialogButtonBox::RejectRole); @@ -105,6 +111,11 @@ { } +bool FileDialog::readOnly() const +{ + return m_readOnlyCheckbox->isChecked(); +} + FileChooserPortal::FileChooserPortal(QObject *parent) : QDBusAbstractAdaptor(parent) { @@ -209,6 +220,7 @@ } results.insert(QStringLiteral("uris"), files); + results.insert(QStringLiteral("writable"), !fileDialog->readOnly()); return 0; }