diff --git a/kcms/componentchooser/browserconfig_ui.ui b/kcms/componentchooser/browserconfig_ui.ui
index 590d1c9ad..e5361251b 100644
--- a/kcms/componentchooser/browserconfig_ui.ui
+++ b/kcms/componentchooser/browserconfig_ui.ui
@@ -1,130 +1,197 @@
BrowserConfig_UI
+
+
+ 0
+ 0
+ 432
+ 218
+
+
-
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
0
-
<qt>Open <b>http</b> and <b>https</b> URLs</qt>
-
in an application based on the contents of the URL
true
+ -
+
+
+ in the following application:
+
+
+
+ -
+
+
-
+
+
+ Qt::Horizontal
+
+
+ QSizePolicy::Fixed
+
+
+
+ 20
+ 0
+
+
+
+
+ -
+
+
+ false
+
+
+
+
+
-
- in the following browser:
+ with the following command:
-
-
Qt::Horizontal
QSizePolicy::Fixed
20
0
-
false
-
-
+
false
...
-
Qt::Vertical
QSizePolicy::Expanding
0
20
KLineEdit
QLineEdit
+
+ radioService
+ toggled(bool)
+ browserCombo
+ setEnabled(bool)
+
+
+ 20
+ 20
+
+
+ 20
+ 20
+
+
+
radioExec
toggled(bool)
lineExec
setEnabled(bool)
20
20
20
20
radioExec
toggled(bool)
- btnSelectBrowser
+ btnSelectApplication
setEnabled(bool)
20
20
20
20
diff --git a/kcms/componentchooser/componentchooserbrowser.cpp b/kcms/componentchooser/componentchooserbrowser.cpp
index e8ad0a818..80b2a04c6 100644
--- a/kcms/componentchooser/componentchooserbrowser.cpp
+++ b/kcms/componentchooser/componentchooserbrowser.cpp
@@ -1,122 +1,149 @@
/***************************************************************************
componentchooserbrowser.cpp
-------------------
copyright : (C) 2002 by Joseph Wenninger
email : jowenn@kde.org
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License version 2 as *
* published by the Free Software Foundationi *
* *
***************************************************************************/
#include "componentchooserbrowser.h"
#include
#include
#include
#include
+#include
#include "../migrationlib/kdelibs4config.h"
#include
CfgBrowser::CfgBrowser(QWidget *parent)
: QWidget(parent), Ui::BrowserConfig_UI(),CfgPlugin()
{
setupUi(this);
connect(lineExec, &KLineEdit::textChanged, this, &CfgBrowser::configChanged);
connect(radioKIO, &QRadioButton::toggled, this, &CfgBrowser::configChanged);
+ connect(radioService, &QRadioButton::toggled, this, &CfgBrowser::configChanged);
+ connect(browserCombo, static_cast(&QComboBox::activated), this, [this](int index) {
+ const QString &storageId = browserCombo->itemData(index).toString();
+ m_browserService = KService::serviceByStorageId(storageId);
+ m_browserExec.clear();
+ emit configChanged();
+ });
connect(radioExec, &QRadioButton::toggled, this, &CfgBrowser::configChanged);
- connect(btnSelectBrowser, &QToolButton::clicked, this, &CfgBrowser::selectBrowser);
+ connect(btnSelectApplication, &QToolButton::clicked, this, &CfgBrowser::selectBrowser);
}
CfgBrowser::~CfgBrowser() {
}
void CfgBrowser::configChanged()
{
emit changed(true);
}
void CfgBrowser::defaults()
{
load(0);
}
-
void CfgBrowser::load(KConfig *)
{
const KConfigGroup config(KSharedConfig::openConfig(QStringLiteral("kdeglobals")), QStringLiteral("General") );
const QString exec = config.readPathEntry( QStringLiteral("BrowserApplication"), QString() );
- if (exec.isEmpty())
- {
+ if (exec.isEmpty()) {
radioKIO->setChecked(true);
m_browserExec = exec;
m_browserService = 0;
- }
- else
- {
+ } else {
radioExec->setChecked(true);
- if (exec.startsWith('!'))
- {
+ if (exec.startsWith('!')) {
m_browserExec = exec.mid(1);
m_browserService = 0;
- }
- else
- {
+ } else {
m_browserService = KService::serviceByStorageId( exec );
- if (m_browserService)
+ if (m_browserService) {
m_browserExec = m_browserService->desktopEntryName();
- else
+ } else {
m_browserExec.clear();
+ }
}
}
lineExec->setText(m_browserExec);
+ browserCombo->clear();
+
+ const auto &browsers = KServiceTypeTrader::self()->query(QStringLiteral("Application"),
+ QStringLiteral("'WebBrowser' in Categories"));
+ for (const auto &service : browsers) {
+ browserCombo->addItem(QIcon::fromTheme(service->icon()), service->name(), service->storageId());
+
+ if ((m_browserService && m_browserService->storageId() == service->storageId()) || service->exec() == m_browserExec) {
+ browserCombo->setCurrentIndex(browserCombo->count() - 1);
+ radioService->setChecked(true);
+ }
+ }
+
emit changed(false);
}
void CfgBrowser::save(KConfig *)
{
KSharedConfig::Ptr profile = KSharedConfig::openConfig(QStringLiteral("kdeglobals"));
KConfigGroup config(profile, QStringLiteral("General"));
QString exec;
- if (radioExec->isChecked())
- {
+ if (radioService->isChecked()) {
+ if (m_browserService) {
+ exec = m_browserService->storageId();
+ }
+ } else if (radioExec->isChecked()) {
exec = lineExec->text();
- if (m_browserService && (exec == m_browserExec))
+ if (m_browserService && (exec == m_browserExec)) {
exec = m_browserService->storageId(); // Use service
- else if (!exec.isEmpty())
+ } else if (!exec.isEmpty()) {
exec = '!' + exec; // Literal command
+ }
}
config.writePathEntry( QStringLiteral("BrowserApplication"), exec); // KConfig::Normal|KConfig::Global
config.sync();
Kdelibs4SharedConfig::syncConfigGroup(QLatin1String("General"), "kdeglobals");
KGlobalSettings::self()->emitChange(KGlobalSettings::SettingsChanged);
emit changed(false);
}
void CfgBrowser::selectBrowser()
{
QList urlList;
KOpenWithDialog dlg(urlList, i18n("Select preferred Web browser application:"), QString(), this);
if (dlg.exec() != QDialog::Accepted)
return;
m_browserService = dlg.service();
if (m_browserService) {
- m_browserExec = m_browserService->desktopEntryName();
- if (m_browserExec.isEmpty())
- m_browserExec = m_browserService->exec();
+ // check if we have listed it in the browser combo, if so, put it there instead
+ const int index = browserCombo->findData(m_browserService->storageId());
+ if (index > -1) {
+ browserCombo->setCurrentIndex(index);
+ radioService->setChecked(true);
+ } else {
+ m_browserExec = m_browserService->desktopEntryName();
+ if (m_browserExec.isEmpty()) {
+ m_browserExec = m_browserService->exec();
+ }
+ }
} else {
m_browserExec = dlg.text();
}
lineExec->setText(m_browserExec);
}