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
KDE/KLineEdit
+ + 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); }