┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorNate Graham <[email protected]>2019-09-26 12:31:05 -0600
committerNate Graham <[email protected]>2019-09-29 10:27:56 -0600
commit983273924d2887cdccdd7c3618d332b52dc0dad6 (patch)
treeb90d7e56e01193870ea01d34f5b7f12aff16cc43 /src
parenteec49bc38f4e256b66bf16ee5428c5f5d7e97e25 (diff)
Expose full set of script execution options in settings window
Summary: Right now the script execution setting is a checkbox, capable only of handling boolean input. This is not appropriate because there are actually three options available. Accordingly, this patch replaces the checkbox with a combobox (to save space compared to radio buttons) that clearly exposes all three options. BUG: 371837 FIXED-IN: 19.12.0 Test Plan: {F7440559} - All three options do what they say they'll do - All options get saved properly - The combobox displays the correct option when the window is loaded - The {nav Defaults} button resets it to "always ask" as expected Reviewers: elvisangelaccio, #dolphin, #vdg Reviewed By: elvisangelaccio, #dolphin Subscribers: kfm-devel Tags: #dolphin Maniphest Tasks: T9932 Differential Revision: https://phabricator.kde.org/D24247
Diffstat (limited to 'src')
-rw-r--r--src/settings/general/confirmationssettingspage.cpp49
-rw-r--r--src/settings/general/confirmationssettingspage.h3
2 files changed, 42 insertions, 10 deletions
diff --git a/src/settings/general/confirmationssettingspage.cpp b/src/settings/general/confirmationssettingspage.cpp
index 1d0eebdd3..dd4d60f3b 100644
--- a/src/settings/general/confirmationssettingspage.cpp
+++ b/src/settings/general/confirmationssettingspage.cpp
@@ -25,14 +25,23 @@
#include <KLocalizedString>
#include <QCheckBox>
+#include <QComboBox>
#include <QLabel>
+#include <QHBoxLayout>
#include <QVBoxLayout>
namespace {
+ enum ScriptExecution
+ {
+ AlwaysAsk = 0,
+ Open = 1,
+ Execute = 2
+ };
+
const bool ConfirmEmptyTrash = true;
const bool ConfirmTrash = false;
const bool ConfirmDelete = true;
- const bool ConfirmScriptExecution = true;
+ const int ConfirmScriptExecution = ScriptExecution::AlwaysAsk;
}
ConfirmationsSettingsPage::ConfirmationsSettingsPage(QWidget* parent) :
@@ -58,8 +67,6 @@ ConfirmationsSettingsPage::ConfirmationsSettingsPage(QWidget* parent) :
"Emptying trash"), this);
m_confirmDelete = new QCheckBox(i18nc("@option:check Ask for confirmation when",
"Deleting files or folders"), this);
- m_confirmScriptExecution = new QCheckBox(i18nc("@option:check Ask for confirmation when",
- "Executing scripts or desktop files"), this);
QLabel* confirmLabelDolphin = new QLabel(i18nc("@title:group", "Ask for confirmation in Dolphin when:"), this);
confirmLabelDolphin->setWordWrap(true);
@@ -72,11 +79,19 @@ ConfirmationsSettingsPage::ConfirmationsSettingsPage(QWidget* parent) :
"Closing windows with a program running in the Terminal panel"), this);
#endif
+ QHBoxLayout* executableScriptLayout = new QHBoxLayout();
+ QLabel* executableScriptLabel = new QLabel(i18nc("@title:group", "When opening an executable file:"), this);
+ confirmLabelKde->setWordWrap(true);
+ executableScriptLayout->addWidget(executableScriptLabel);
+
+ m_confirmScriptExecution = new QComboBox(this);
+ m_confirmScriptExecution->addItems({i18n("Always ask"), i18n("Open in application"), i18n("Run script")});
+ executableScriptLayout->addWidget(m_confirmScriptExecution);
+
topLayout->addWidget(confirmLabelKde);
topLayout->addWidget(m_confirmMoveToTrash);
topLayout->addWidget(m_confirmEmptyTrash);
topLayout->addWidget(m_confirmDelete);
- topLayout->addWidget(m_confirmScriptExecution);
topLayout->addSpacing(Dolphin::VERTICAL_SPACER_HEIGHT);
topLayout->addWidget(confirmLabelDolphin);
topLayout->addWidget(m_confirmClosingMultipleTabs);
@@ -85,6 +100,9 @@ ConfirmationsSettingsPage::ConfirmationsSettingsPage(QWidget* parent) :
topLayout->addWidget(m_confirmClosingTerminalRunningProgram);
#endif
+ topLayout->addSpacing(Dolphin::VERTICAL_SPACER_HEIGHT);
+ topLayout->addLayout(executableScriptLayout);
+
topLayout->addStretch();
loadSettings();
@@ -92,7 +110,7 @@ ConfirmationsSettingsPage::ConfirmationsSettingsPage(QWidget* parent) :
connect(m_confirmMoveToTrash, &QCheckBox::toggled, this, &ConfirmationsSettingsPage::changed);
connect(m_confirmEmptyTrash, &QCheckBox::toggled, this, &ConfirmationsSettingsPage::changed);
connect(m_confirmDelete, &QCheckBox::toggled, this, &ConfirmationsSettingsPage::changed);
- connect(m_confirmScriptExecution, &QCheckBox::toggled, this, &ConfirmationsSettingsPage::changed);
+ connect(m_confirmScriptExecution, QOverload<int>::of(&QComboBox::currentIndexChanged), this, &ConfirmationsSettingsPage::changed);
connect(m_confirmClosingMultipleTabs, &QCheckBox::toggled, this, &ConfirmationsSettingsPage::changed);
#ifdef HAVE_TERMINAL
@@ -113,10 +131,17 @@ void ConfirmationsSettingsPage::applySettings()
confirmationGroup.writeEntry("ConfirmDelete", m_confirmDelete->isChecked());
KConfigGroup scriptExecutionGroup(kioConfig, "Executable scripts");
- if (m_confirmScriptExecution->isChecked()) {
+ const int index = m_confirmScriptExecution->currentIndex();
+ switch (index) {
+ case ScriptExecution::AlwaysAsk:
scriptExecutionGroup.writeEntry("behaviourOnLaunch", "alwaysAsk");
- } else {
+ break;
+ case ScriptExecution::Open:
scriptExecutionGroup.writeEntry("behaviourOnLaunch", "dontAsk");
+ break;
+ case ScriptExecution::Execute:
+ scriptExecutionGroup.writeEntry("behaviourOnLaunch", "execute");
+ break;
}
kioConfig->sync();
@@ -140,7 +165,7 @@ void ConfirmationsSettingsPage::restoreDefaults()
m_confirmMoveToTrash->setChecked(ConfirmTrash);
m_confirmEmptyTrash->setChecked(ConfirmEmptyTrash);
m_confirmDelete->setChecked(ConfirmDelete);
- m_confirmScriptExecution->setChecked(ConfirmScriptExecution);
+ m_confirmScriptExecution->setCurrentIndex(ConfirmScriptExecution);
}
void ConfirmationsSettingsPage::loadSettings()
@@ -153,7 +178,13 @@ void ConfirmationsSettingsPage::loadSettings()
const KConfigGroup scriptExecutionGroup(KSharedConfig::openConfig(QStringLiteral("kiorc")), "Executable scripts");
const QString value = scriptExecutionGroup.readEntry("behaviourOnLaunch", "alwaysAsk");
- m_confirmScriptExecution->setChecked(value == QLatin1String("alwaysAsk"));
+ if (value == QLatin1String("dontAsk")) {
+ m_confirmScriptExecution->setCurrentIndex(ScriptExecution::Open);
+ } else if (value == QLatin1String("execute")) {
+ m_confirmScriptExecution->setCurrentIndex(ScriptExecution::Execute);
+ } else /* if (value == QLatin1String("alwaysAsk"))*/ {
+ m_confirmScriptExecution->setCurrentIndex(ScriptExecution::AlwaysAsk);
+ }
m_confirmClosingMultipleTabs->setChecked(GeneralSettings::confirmClosingMultipleTabs());
diff --git a/src/settings/general/confirmationssettingspage.h b/src/settings/general/confirmationssettingspage.h
index 52b101b2a..c15afdc38 100644
--- a/src/settings/general/confirmationssettingspage.h
+++ b/src/settings/general/confirmationssettingspage.h
@@ -23,6 +23,7 @@
#include "settings/settingspagebase.h"
class QCheckBox;
+class QComboBox;
/**
* @brief Page for the enabling or disabling confirmation dialogs.
@@ -54,7 +55,7 @@ private:
#endif
QCheckBox* m_confirmClosingMultipleTabs;
- QCheckBox* m_confirmScriptExecution;
+ QComboBox* m_confirmScriptExecution;
};
#endif