diff --git a/kcms/componentchooser/CMakeLists.txt b/kcms/componentchooser/CMakeLists.txt
--- a/kcms/componentchooser/CMakeLists.txt
+++ b/kcms/componentchooser/CMakeLists.txt
@@ -15,6 +15,7 @@
componentchooserterminal.cpp
kcm_componentchooser.cpp
)
+kconfig_add_kcfg_files(kcm_componentchooser_SRCS browser_settings.kcfgc GENERATE_MOC)
ki18n_wrap_ui(kcm_componentchooser_SRCS
browserconfig_ui.ui
@@ -46,4 +47,5 @@
########### install files ###############
install( FILES componentchooser.desktop DESTINATION ${KDE_INSTALL_KSERVICES5DIR} )
+install(FILES browser_settings.kcfg DESTINATION ${KDE_INSTALL_KCFGDIR})
diff --git a/kcms/componentchooser/browser_settings.kcfg b/kcms/componentchooser/browser_settings.kcfg
new file mode 100644
--- /dev/null
+++ b/kcms/componentchooser/browser_settings.kcfg
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/kcms/componentchooser/browser_settings.kcfgc b/kcms/componentchooser/browser_settings.kcfgc
new file mode 100644
--- /dev/null
+++ b/kcms/componentchooser/browser_settings.kcfgc
@@ -0,0 +1,5 @@
+File=browser_settings.kcfg
+ClassName=BrowserSettings
+Mutators=true
+DefaultValueGetters=true
+GenerateProperties=true
diff --git a/kcms/componentchooser/componentchooser.h b/kcms/componentchooser/componentchooser.h
--- a/kcms/componentchooser/componentchooser.h
+++ b/kcms/componentchooser/componentchooser.h
@@ -39,6 +39,9 @@
virtual void load(KConfig *cfg)=0;
virtual void save(KConfig *cfg)=0;
virtual void defaults()=0;
+ virtual bool isDefaults() {
+ return false;
+ };
};
class CfgComponent: public QWidget, public Ui::ComponentConfig_UI, public CfgPlugin
@@ -58,6 +61,7 @@
void slotComponentChanged(const QString&);
Q_SIGNALS:
void changed(bool);
+ void defaulted(bool);
};
class ComponentChooser : public QWidget, public Ui::ComponentChooser_UI
@@ -87,6 +91,7 @@
Q_SIGNALS:
void changed(bool);
+ void defaulted(bool);
};
diff --git a/kcms/componentchooser/componentchooser.cpp b/kcms/componentchooser/componentchooser.cpp
--- a/kcms/componentchooser/componentchooser.cpp
+++ b/kcms/componentchooser/componentchooser.cpp
@@ -189,8 +189,10 @@
configWidget = configWidgetMap.value(service);
if (configWidget) {
- configContainer->setCurrentWidget(configWidget);
- dynamic_cast(configWidget)->load(&cfg);
+ configContainer->setCurrentWidget(configWidget);
+ const auto plugin = dynamic_cast(configWidget);
+ plugin->load(&cfg);
+ emit defaulted(plugin->isDefaults());
}
emitChanged(false);
@@ -201,6 +203,9 @@
void ComponentChooser::emitChanged(bool val) {
somethingChanged=val;
emit changed(val);
+
+ CfgPlugin * plugin = dynamic_cast( configWidget );
+ emit defaulted(plugin->isDefaults());
}
diff --git a/kcms/componentchooser/componentchooserbrowser.h b/kcms/componentchooser/componentchooserbrowser.h
--- a/kcms/componentchooser/componentchooserbrowser.h
+++ b/kcms/componentchooser/componentchooserbrowser.h
@@ -28,6 +28,7 @@
void load(KConfig *cfg) override;
void save(KConfig *cfg) override;
void defaults() override;
+ bool isDefaults() override;
protected Q_SLOTS:
void selectBrowser();
diff --git a/kcms/componentchooser/componentchooserbrowser.cpp b/kcms/componentchooser/componentchooserbrowser.cpp
--- a/kcms/componentchooser/componentchooserbrowser.cpp
+++ b/kcms/componentchooser/componentchooserbrowser.cpp
@@ -15,7 +15,7 @@
#include "componentchooserbrowser.h"
#include
-#include
+#include "browser_settings.h"
#include
#include
@@ -52,18 +52,38 @@
void CfgBrowser::configChanged()
{
- emit changed(true);
+ bool hasChanged = false;
+ const BrowserSettings settings;
+ const QString exec = settings.browserApplication();
+
+ if (exec.isEmpty()) {
+ hasChanged |= !radioKIO->isChecked();
+ } else {
+ if (exec.startsWith('!')) {
+ hasChanged |= lineExec->text() != exec;
+ } else {
+ hasChanged |= KService::serviceByStorageId(lineExec->text()) != KService::serviceByStorageId( exec );
+ }
+ }
+
+ emit changed(hasChanged);
}
void CfgBrowser::defaults()
{
- load(nullptr);
+ emit changed(!radioKIO->isChecked());
+ radioKIO->setChecked(true);
+}
+
+bool CfgBrowser::isDefaults()
+{
+ return radioKIO->isChecked();
}
void CfgBrowser::load(KConfig *)
{
- const KConfigGroup config(KSharedConfig::openConfig(QStringLiteral("kdeglobals")), QStringLiteral("General") );
- const QString exec = config.readPathEntry( QStringLiteral("BrowserApplication"), QString() );
+ const BrowserSettings settings;
+ const QString exec = settings.browserApplication();
if (exec.isEmpty()) {
radioKIO->setChecked(true);
m_browserExec = exec;
@@ -87,8 +107,9 @@
browserCombo->clear();
- const auto &browsers = KServiceTypeTrader::self()->query(QStringLiteral("Application"),
- QStringLiteral("'WebBrowser' in Categories"));
+ const auto contraints = QStringLiteral("'WebBrowser' in Categories and"
+ " ('x-scheme-handler/http' in ServiceTypes or 'x-scheme-handler/https' in ServiceTypes)");
+ const auto &browsers = KServiceTypeTrader::self()->query(QStringLiteral("Application"), contraints);
for (const auto &service : browsers) {
browserCombo->addItem(QIcon::fromTheme(service->icon()), service->name(), service->storageId());
@@ -103,8 +124,7 @@
void CfgBrowser::save(KConfig *)
{
- KSharedConfig::Ptr profile = KSharedConfig::openConfig(QStringLiteral("kdeglobals"));
- KConfigGroup config(profile, QStringLiteral("General"));
+ BrowserSettings settings;
QString exec;
if (radioService->isChecked()) {
if (m_browserService) {
@@ -118,8 +138,8 @@
exec = '!' + exec; // Literal command
}
}
- config.writePathEntry( QStringLiteral("BrowserApplication"), exec); // KConfig::Normal|KConfig::Global
- config.sync();
+ settings.setBrowserApplication(exec);
+ settings.save();
// Save the default browser as scheme handler for http(s) in mimeapps.list
KSharedConfig::Ptr mimeAppList = KSharedConfig::openConfig(QStringLiteral("mimeapps.list"), KConfig::NoGlobals, QStandardPaths::GenericConfigLocation);
diff --git a/kcms/componentchooser/kcm_componentchooser.cpp b/kcms/componentchooser/kcm_componentchooser.cpp
--- a/kcms/componentchooser/kcm_componentchooser.cpp
+++ b/kcms/componentchooser/kcm_componentchooser.cpp
@@ -37,7 +37,7 @@
m_chooser=new ComponentChooser(this);
lay->addWidget(m_chooser);
connect(m_chooser,SIGNAL(changed(bool)),this,SIGNAL(changed(bool)));
- setButtons( Default|Apply|Help );
+ connect(m_chooser, &ComponentChooser::defaulted, this, &KCModule::defaulted);
KAboutData *about =
new KAboutData( QStringLiteral("kcmcomponentchooser"), i18n("Component Chooser"), QStringLiteral("1.0"),