KRun accepts the following values:
- "alwaysAsk"
- "execute"
- "open"
but currently is not possible to choose between "execute" and "open".
KRun accepts the following values:
but currently is not possible to choose between "execute" and "open".
https://git.reviewboard.kde.org/r/129383/ had a patch for this but it never got merged. Copying the diff here in case anyone wants to take over:
diff --git a/src/settings/general/behaviorsettingspage.h b/src/settings/general/behaviorsettingspage.h index 96eaf3d..51e4107 100644 --- a/src/settings/general/behaviorsettingspage.h +++ b/src/settings/general/behaviorsettingspage.h @@ -49,6 +49,8 @@ private: void loadSettings(); void setSortingChoiceValue(GeneralSettings* settings); void loadSortingChoiceSettings(); + void setScriptsChoiceValue(); + void loadScriptsChoiceSettings(); private: QUrl m_url; @@ -64,6 +66,10 @@ private: QRadioButton* m_caseSensitiveSorting; QRadioButton* m_caseInsensitiveSorting; + QRadioButton* m_openScripts; + QRadioButton* m_executeScripts; + QRadioButton* m_alwaysAskScripts; + QCheckBox* m_renameInline; QCheckBox* m_useTabForSplitViewSwitch; }; diff --git a/src/settings/general/behaviorsettingspage.cpp b/src/settings/general/behaviorsettingspage.cpp index 6d1e8bb..4af3c9f 100644 --- a/src/settings/general/behaviorsettingspage.cpp +++ b/src/settings/general/behaviorsettingspage.cpp @@ -70,6 +70,19 @@ BehaviorSettingsPage::BehaviorSettingsPage(const QUrl& url, QWidget* parent) : sortingPropsLayout->addWidget(m_caseInsensitiveSorting); sortingPropsLayout->addWidget(m_caseSensitiveSorting); + // Executable script properties + QGroupBox* scriptsPropsBox = new QGroupBox(i18nc("@title:group", "Behavior for executable scripts and desktop files in all KDE applications"), this); + scriptsPropsBox->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Maximum); + + m_alwaysAskScripts = new QRadioButton(i18nc("option:radio", "Always Ask"), scriptsPropsBox); + m_openScripts = new QRadioButton(i18nc("option:radio", "Open"), scriptsPropsBox); + m_executeScripts = new QRadioButton(i18nc("option:radio", "Execute"), scriptsPropsBox); + + QVBoxLayout* scriptsPropsLayout = new QVBoxLayout(scriptsPropsBox); + scriptsPropsLayout->addWidget(m_alwaysAskScripts); + scriptsPropsLayout->addWidget(m_openScripts); + scriptsPropsLayout->addWidget(m_executeScripts); + // 'Show tooltips' m_showToolTips = new QCheckBox(i18nc("@option:check", "Show tooltips"), this); @@ -84,6 +97,7 @@ BehaviorSettingsPage::BehaviorSettingsPage(const QUrl& url, QWidget* parent) : topLayout->addWidget(viewPropsBox); topLayout->addWidget(sortingPropsBox); + topLayout->addWidget(scriptsPropsBox); topLayout->addWidget(m_showToolTips); topLayout->addWidget(m_showSelectionToggle); topLayout->addWidget(m_renameInline); @@ -99,6 +113,9 @@ BehaviorSettingsPage::BehaviorSettingsPage(const QUrl& url, QWidget* parent) : connect(m_naturalSorting, &QRadioButton::toggled, this, &BehaviorSettingsPage::changed); connect(m_caseInsensitiveSorting, &QRadioButton::toggled, this, &BehaviorSettingsPage::changed); connect(m_caseSensitiveSorting, &QRadioButton::toggled, this, &BehaviorSettingsPage::changed); + connect(m_alwaysAskScripts, &QRadioButton::toggled, this, &BehaviorSettingsPage::changed); + connect(m_openScripts, &QRadioButton::toggled, this, &BehaviorSettingsPage::changed); + connect(m_executeScripts, &QRadioButton::toggled, this, &BehaviorSettingsPage::changed); connect(m_renameInline, &QCheckBox::toggled, this, &BehaviorSettingsPage::changed); connect(m_useTabForSplitViewSwitch, &QCheckBox::toggled, this, &BehaviorSettingsPage::changed); } @@ -117,6 +134,7 @@ void BehaviorSettingsPage::applySettings() settings->setShowToolTips(m_showToolTips->isChecked()); settings->setShowSelectionToggle(m_showSelectionToggle->isChecked()); setSortingChoiceValue(settings); + setScriptsChoiceValue(); settings->setRenameInline(m_renameInline->isChecked()); settings->setUseTabForSwitchingSplitView(m_useTabForSplitViewSwitch->isChecked()); settings->save(); @@ -135,6 +153,9 @@ void BehaviorSettingsPage::restoreDefaults() { GeneralSettings* settings = GeneralSettings::self(); settings->useDefaults(true); + KSharedConfig::Ptr kioConfig = KSharedConfig::openConfig(QStringLiteral("kiorc"), KConfig::IncludeGlobals); + KConfigGroup scriptExecutionGroup(kioConfig, "Executable scripts"); + scriptExecutionGroup.writeEntry("behaviourOnLaunch", "alwaysAsk"); loadSettings(); settings->useDefaults(false); } @@ -151,6 +172,7 @@ void BehaviorSettingsPage::loadSettings() m_useTabForSplitViewSwitch->setChecked(GeneralSettings::useTabForSwitchingSplitView()); loadSortingChoiceSettings(); + loadScriptsChoiceSettings(); } void BehaviorSettingsPage::setSortingChoiceValue(GeneralSettings *settings) @@ -182,3 +204,26 @@ void BehaviorSettingsPage::loadSortingChoiceSettings() Q_UNREACHABLE(); } } + +void BehaviorSettingsPage::setScriptsChoiceValue() +{ + KSharedConfig::Ptr kioConfig = KSharedConfig::openConfig(QStringLiteral("kiorc"), KConfig::IncludeGlobals); + KConfigGroup scriptExecutionGroup(kioConfig, "Executable scripts"); + if (m_alwaysAskScripts->isChecked()) { + scriptExecutionGroup.writeEntry("behaviourOnLaunch", "alwaysAsk"); + } else if (m_openScripts->isChecked()) { + scriptExecutionGroup.writeEntry("behaviourOnLaunch", "open"); + } else if (m_executeScripts->isChecked()) { + scriptExecutionGroup.writeEntry("behaviourOnLaunch", "execute"); + } + scriptExecutionGroup.sync(); +} + +void BehaviorSettingsPage::loadScriptsChoiceSettings() +{ + const KConfigGroup scriptExecutionGroup(KSharedConfig::openConfig(QStringLiteral("kiorc")), "Executable scripts"); + const QString value = scriptExecutionGroup.readEntry("behaviourOnLaunch", "alwaysAsk"); + m_alwaysAskScripts->setChecked(value == QLatin1String("alwaysAsk")); + m_openScripts->setChecked(value == QLatin1String("open")); + m_executeScripts->setChecked(value == QLatin1String("execute")); +} diff --git a/src/settings/general/confirmationssettingspage.h b/src/settings/general/confirmationssettingspage.h index e702fe8..f365143 100644 --- a/src/settings/general/confirmationssettingspage.h +++ b/src/settings/general/confirmationssettingspage.h @@ -47,7 +47,6 @@ private: QCheckBox* m_confirmMoveToTrash; QCheckBox* m_confirmDelete; QCheckBox* m_confirmClosingMultipleTabs; - QCheckBox* m_confirmScriptExecution; }; #endif diff --git a/src/settings/general/confirmationssettingspage.cpp b/src/settings/general/confirmationssettingspage.cpp index 2419dc0..1b0640f 100644 --- a/src/settings/general/confirmationssettingspage.cpp +++ b/src/settings/general/confirmationssettingspage.cpp @@ -48,8 +48,6 @@ 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,7 +58,6 @@ ConfirmationsSettingsPage::ConfirmationsSettingsPage(QWidget* parent) : topLayout->addWidget(confirmLabelKde); topLayout->addWidget(m_confirmMoveToTrash); topLayout->addWidget(m_confirmDelete); - topLayout->addWidget(m_confirmScriptExecution); topLayout->addWidget(confirmLabelDolphin); topLayout->addWidget(m_confirmClosingMultipleTabs); topLayout->addStretch(); @@ -69,7 +66,6 @@ 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,12 +81,6 @@ 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->save(); @@ -105,7 +95,6 @@ void ConfirmationsSettingsPage::restoreDefaults() m_confirmMoveToTrash->setChecked(ConfirmTrash); m_confirmDelete->setChecked(ConfirmDelete); - m_confirmScriptExecution->setChecked(ConfirmScriptExecution); } void ConfirmationsSettingsPage::loadSettings() @@ -115,10 +104,6 @@ void ConfirmationsSettingsPage::loadSettings() m_confirmMoveToTrash->setChecked(confirmationGroup.readEntry("ConfirmTrash", ConfirmTrash)); m_confirmDelete->setChecked(confirmationGroup.readEntry("ConfirmDelete", ConfirmDelete)); - const KConfigGroup scriptExecutionGroup(KSharedConfig::openConfig(QStringLiteral("kiorc")), "Executable scripts"); - const QString value = scriptExecutionGroup.readEntry("behaviourOnLaunch", "alwaysAsk"); - m_confirmScriptExecution->setChecked(value == QLatin1String("alwaysAsk")); - m_confirmClosingMultipleTabs->setChecked(GeneralSettings::confirmClosingMultipleTabs()); }