From e256daa5693ba271a62959372f3e89cc93da9487 Mon Sep 17 00:00:00 2001 From: Arjun AK Date: Sat, 1 Nov 2014 16:41:29 +0530 Subject: [PATCH] Enable KRun's script execution prompt. This commit enables KRun's script/desktop file execution prompts, which is shown when the user launches an executable script or a desktop file. This is done so as to prevent the user from accidentaly executing programs. A checkbox to enable or disable the prompts is also being added to the preferences window REVIEW: 120171 BUG: 275405 --- src/dolphinviewcontainer.cpp | 3 ++- .../general/confirmationssettingspage.cpp | 16 ++++++++++++++++ src/settings/general/confirmationssettingspage.h | 1 + 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/dolphinviewcontainer.cpp b/src/dolphinviewcontainer.cpp index aecf7ae2fa..a9b03796b8 100644 --- a/src/dolphinviewcontainer.cpp +++ b/src/dolphinviewcontainer.cpp @@ -504,7 +504,8 @@ void DolphinViewContainer::slotItemActivated(const KFileItem& item) return; } - new KRun(item.targetUrl(), this); + KRun *run = new KRun(item.targetUrl(), this); + run->setShowScriptExecutionPrompt(true); } void DolphinViewContainer::slotItemsActivated(const KFileItemList& items) diff --git a/src/settings/general/confirmationssettingspage.cpp b/src/settings/general/confirmationssettingspage.cpp index b04ab6192b..54cc490439 100644 --- a/src/settings/general/confirmationssettingspage.cpp +++ b/src/settings/general/confirmationssettingspage.cpp @@ -31,6 +31,7 @@ namespace { const bool ConfirmTrash = false; const bool ConfirmDelete = true; + const bool ConfirmScriptExecution = true; } ConfirmationsSettingsPage::ConfirmationsSettingsPage(QWidget* parent) : @@ -48,6 +49,8 @@ ConfirmationsSettingsPage::ConfirmationsSettingsPage(QWidget* parent) : "Moving files or folders to 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 when:"), this); confirmLabelDolphin->setWordWrap(true); @@ -60,6 +63,7 @@ ConfirmationsSettingsPage::ConfirmationsSettingsPage(QWidget* parent) : topLayout->addSpacing(KDialog::spacingHint()); topLayout->addWidget(m_confirmMoveToTrash); topLayout->addWidget(m_confirmDelete); + topLayout->addWidget(m_confirmScriptExecution); topLayout->addSpacing(KDialog::spacingHint()); topLayout->addWidget(confirmLabelDolphin); topLayout->addSpacing(KDialog::spacingHint()); @@ -70,6 +74,7 @@ ConfirmationsSettingsPage::ConfirmationsSettingsPage(QWidget* parent) : connect(m_confirmMoveToTrash, &QCheckBox::toggled, this, &ConfirmationsSettingsPage::changed); connect(m_confirmDelete, &QCheckBox::toggled, this, &ConfirmationsSettingsPage::changed); + connect(m_confirmScriptExecution, &QCheckBox::toggled, this, &ConfirmationsSettingsPage::changed); connect(m_confirmClosingMultipleTabs, &QCheckBox::toggled, this, &ConfirmationsSettingsPage::changed); } @@ -85,6 +90,12 @@ void ConfirmationsSettingsPage::applySettings() confirmationGroup.writeEntry("ConfirmDelete", m_confirmDelete->isChecked()); confirmationGroup.sync(); + if (m_confirmScriptExecution->isChecked()) { + KConfigGroup scriptExecutionGroup(kioConfig, "Executable scripts"); + scriptExecutionGroup.writeEntry("behaviourOnLaunch", "alwaysAsk"); + scriptExecutionGroup.sync(); + } + GeneralSettings* settings = GeneralSettings::self(); settings->setConfirmClosingMultipleTabs(m_confirmClosingMultipleTabs->isChecked()); settings->writeConfig(); @@ -99,6 +110,7 @@ void ConfirmationsSettingsPage::restoreDefaults() m_confirmMoveToTrash->setChecked(ConfirmTrash); m_confirmDelete->setChecked(ConfirmDelete); + m_confirmScriptExecution->setChecked(ConfirmScriptExecution); } void ConfirmationsSettingsPage::loadSettings() @@ -108,6 +120,10 @@ void ConfirmationsSettingsPage::loadSettings() m_confirmMoveToTrash->setChecked(confirmationGroup.readEntry("ConfirmTrash", ConfirmTrash)); m_confirmDelete->setChecked(confirmationGroup.readEntry("ConfirmDelete", ConfirmDelete)); + const KConfigGroup scriptExecutionGroup(KSharedConfig::openConfig("kiorc"), "Executable scripts"); + const QString value = scriptExecutionGroup.readEntry("behaviourOnLaunch", "alwaysAsk"); + m_confirmScriptExecution->setChecked(value == "alwaysAsk"); + m_confirmClosingMultipleTabs->setChecked(GeneralSettings::confirmClosingMultipleTabs()); } diff --git a/src/settings/general/confirmationssettingspage.h b/src/settings/general/confirmationssettingspage.h index 45f0be1fc1..4d0a652d3e 100644 --- a/src/settings/general/confirmationssettingspage.h +++ b/src/settings/general/confirmationssettingspage.h @@ -47,6 +47,7 @@ private: QCheckBox* m_confirmMoveToTrash; QCheckBox* m_confirmDelete; QCheckBox* m_confirmClosingMultipleTabs; + QCheckBox* m_confirmScriptExecution; }; #endif