[plasma/plasma-desktop] /: kcms/componentchooser: Move to plasma-workspace

Devin Lin null at kde.org
Sat Feb 15 14:58:59 GMT 2025


Git commit 763b83770ec8512f48c463551d4cf947f4ad54cd by Devin Lin.
Committed on 15/02/2025 at 14:48.
Pushed by devinlin into branch 'master'.

kcms/componentchooser: Move to plasma-workspace

M  +0    -1    doc/kcontrol/CMakeLists.txt
D  +0    -2    doc/kcontrol/componentchooser/CMakeLists.txt
D  +0    -59   doc/kcontrol/componentchooser/index.docbook
M  +0    -1    kcms/CMakeLists.txt
D  +0    -36   kcms/componentchooser/CMakeLists.txt
D  +0    -3    kcms/componentchooser/Messages.sh
D  +0    -237  kcms/componentchooser/applicationmodel.cpp
D  +0    -65   kcms/componentchooser/applicationmodel.h
D  +0    -285  kcms/componentchooser/componentchooser.cpp
D  +0    -100  kcms/componentchooser/componentchooser.h
D  +0    -56   kcms/componentchooser/components/componentchooserarchivemanager.cpp
D  +0    -21   kcms/componentchooser/components/componentchooserarchivemanager.h
D  +0    -28   kcms/componentchooser/components/componentchooserbrowser.cpp
D  +0    -20   kcms/componentchooser/components/componentchooserbrowser.h
D  +0    -52   kcms/componentchooser/components/componentchooseremail.cpp
D  +0    -19   kcms/componentchooser/components/componentchooseremail.h
D  +0    -24   kcms/componentchooser/components/componentchooserfilemanager.cpp
D  +0    -17   kcms/componentchooser/components/componentchooserfilemanager.h
D  +0    -22   kcms/componentchooser/components/componentchoosergeo.cpp
D  +0    -18   kcms/componentchooser/components/componentchoosergeo.h
D  +0    -24   kcms/componentchooser/components/componentchooserimageviewer.cpp
D  +0    -21   kcms/componentchooser/components/componentchooserimageviewer.h
D  +0    -42   kcms/componentchooser/components/componentchoosermusicplayer.cpp
D  +0    -21   kcms/componentchooser/components/componentchoosermusicplayer.h
D  +0    -20   kcms/componentchooser/components/componentchooserpdfviewer.cpp
D  +0    -21   kcms/componentchooser/components/componentchooserpdfviewer.h
D  +0    -26   kcms/componentchooser/components/componentchoosertel.cpp
D  +0    -16   kcms/componentchooser/components/componentchoosertel.h
D  +0    -56   kcms/componentchooser/components/componentchooserterminal.cpp
D  +0    -19   kcms/componentchooser/components/componentchooserterminal.h
D  +0    -29   kcms/componentchooser/components/componentchoosertexteditor.cpp
D  +0    -21   kcms/componentchooser/components/componentchoosertexteditor.h
D  +0    -34   kcms/componentchooser/components/componentchooservideoplayer.cpp
D  +0    -21   kcms/componentchooser/components/componentchooservideoplayer.h
D  +0    -211  kcms/componentchooser/kcm_componentchooser.cpp
D  +0    -67   kcms/componentchooser/kcm_componentchooser.h
D  +0    -191  kcms/componentchooser/kcm_componentchooser.json
D  +0    -16   kcms/componentchooser/terminal_settings.kcfg
D  +0    -5    kcms/componentchooser/terminal_settings.kcfgc
D  +0    -58   kcms/componentchooser/ui/ComponentComboBox.qml
D  +0    -167  kcms/componentchooser/ui/ComponentOverlay.qml
D  +0    -40   kcms/componentchooser/ui/KcmPopupModal.qml
D  +0    -253  kcms/componentchooser/ui/main.qml

https://invent.kde.org/plasma/plasma-desktop/-/commit/763b83770ec8512f48c463551d4cf947f4ad54cd

diff --git a/doc/kcontrol/CMakeLists.txt b/doc/kcontrol/CMakeLists.txt
index 55aaaba53c..3b4de12725 100644
--- a/doc/kcontrol/CMakeLists.txt
+++ b/doc/kcontrol/CMakeLists.txt
@@ -18,7 +18,6 @@ ecm_optional_add_subdirectory(mouse)
 ecm_optional_add_subdirectory(paths)
 ecm_optional_add_subdirectory(kcmsmserver)
 ecm_optional_add_subdirectory(spellchecking)
-ecm_optional_add_subdirectory(componentchooser)
 ecm_optional_add_subdirectory(kded)
 ecm_optional_add_subdirectory(solid-device-automounter)
 ecm_optional_add_subdirectory(workspaceoptions)
diff --git a/doc/kcontrol/componentchooser/CMakeLists.txt b/doc/kcontrol/componentchooser/CMakeLists.txt
deleted file mode 100644
index 2abc9eebe0..0000000000
--- a/doc/kcontrol/componentchooser/CMakeLists.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-########### install files ###############
-kdoctools_create_handbook(index.docbook INSTALL_DESTINATION ${KDE_INSTALL_DOCBUNDLEDIR}/en SUBDIR kcontrol/componentchooser)
diff --git a/doc/kcontrol/componentchooser/index.docbook b/doc/kcontrol/componentchooser/index.docbook
deleted file mode 100644
index 0e0bee9c7e..0000000000
--- a/doc/kcontrol/componentchooser/index.docbook
+++ /dev/null
@@ -1,59 +0,0 @@
-<?xml version="1.0" ?>
-<!DOCTYPE article PUBLIC "-//KDE//DTD DocBook XML V4.5-Based Variant V1.1//EN"
-"dtd/kdedbx45.dtd" [
-<!ENTITY % addindex "IGNORE">
-<!ENTITY % English "INCLUDE" > <!-- change language only here -->
-]>
-
-<article lang="&language;" id="default-components">
-<articleinfo>
-
-<title>Default Applications</title>
-<authorgroup>
-<author>&Burkhard.Lueck;&Burkhard.Lueck.mail;</author>
-
-<!-- TRANS:ROLES_OF_TRANSLATORS -->
-</authorgroup>
-
-<date>2022-01-12</date>
-<releaseinfo>Plasma 5.24</releaseinfo>
-
-<keywordset>
-<keyword>KDE</keyword>
-<keyword>Systemsettings</keyword>
-<keyword>component</keyword>
-</keywordset>
-</articleinfo>
-
-<para>In this module, you can change &kde; default components.</para>
-
-<para>Components are programs that handle basic tasks, like the web browser, terminal emulator, the file manager, the email client, the electronic map, and the dialer. Different &kde; applications sometimes need to invoke a console emulator, send an email, manage files and folders, show the map or dial a number on your phone.</para> 
-
-<para>To do so consistently, these applications always call the same components. Here you 
-can select which programs these components are.</para>
-
-<para>The list on the left shows the configurable component types:</para>
-<itemizedlist>
-<listitem>
-<para>Web Browser</para>
-</listitem>
-<listitem>
-<para>File Manager</para>
-</listitem>
-<listitem>
-<para>Email Client</para>
-</listitem>
-<listitem>
-<para>Terminal Emulator</para>
-</listitem>
-<listitem>
-<para>Map</para>
-</listitem>
-<listitem>
-<para>Dialer</para>
-</listitem>
-</itemizedlist>
-
-<para>Click the combo box of the component you want to configure. In the list, select your favorite web browser, file manager, email client, terminal emulator, map, and dialer. Choose <guimenuitem>Other...</guimenuitem> to open the <guilabel>Choose Application</guilabel> dialog and select your application manually.</para>
-
-</article>
diff --git a/kcms/CMakeLists.txt b/kcms/CMakeLists.txt
index cea880c139..43ad7d4e41 100644
--- a/kcms/CMakeLists.txt
+++ b/kcms/CMakeLists.txt
@@ -21,7 +21,6 @@ endif()
 
 add_subdirectory(activities)
 add_subdirectory(recentFiles)
-add_subdirectory(componentchooser)
 add_subdirectory(kded)
 add_subdirectory(runners)
 add_subdirectory(spellchecking)
diff --git a/kcms/componentchooser/CMakeLists.txt b/kcms/componentchooser/CMakeLists.txt
deleted file mode 100644
index 13573afc16..0000000000
--- a/kcms/componentchooser/CMakeLists.txt
+++ /dev/null
@@ -1,36 +0,0 @@
-# KI18N Translation Domain for this library
-add_definitions(-DTRANSLATION_DOMAIN=\"kcm_componentchooser\")
-
-kcmutils_add_qml_kcm(kcm_componentchooser)
-
-target_sources(kcm_componentchooser PRIVATE
-    kcm_componentchooser.cpp
-    componentchooser.cpp
-    applicationmodel.cpp
-    components/componentchooserbrowser.cpp
-    components/componentchooseremail.cpp
-    components/componentchooserterminal.cpp
-    components/componentchooserfilemanager.cpp
-    components/componentchoosertexteditor.cpp
-    components/componentchooserimageviewer.cpp
-    components/componentchoosermusicplayer.cpp
-    components/componentchooservideoplayer.cpp
-    components/componentchooserpdfviewer.cpp
-    components/componentchooserarchivemanager.cpp
-    components/componentchoosergeo.cpp
-    components/componentchoosertel.cpp
-)
-
-kconfig_add_kcfg_files(kcm_componentchooser terminal_settings.kcfgc GENERATE_MOC)
-
-target_link_libraries(kcm_componentchooser PRIVATE
-    Qt::Core
-    KF6::CoreAddons
-    KF6::I18n
-    KF6::KCMUtilsQuick
-    KF6::Service
-    KF6::KIOWidgets
-    KF6::ConfigGui
-    KF6::KCMUtils
-)
-
diff --git a/kcms/componentchooser/Messages.sh b/kcms/componentchooser/Messages.sh
deleted file mode 100644
index f1dc0a037a..0000000000
--- a/kcms/componentchooser/Messages.sh
+++ /dev/null
@@ -1,3 +0,0 @@
-#! /usr/bin/env bash
-$EXTRACTRC `find . -name \*.kcfg` >> rc.cpp
-$XGETTEXT `find . -name "*.cpp" -o -name "*.qml"` -o $podir/kcm_componentchooser.pot
diff --git a/kcms/componentchooser/applicationmodel.cpp b/kcms/componentchooser/applicationmodel.cpp
deleted file mode 100644
index 53b69f47fa..0000000000
--- a/kcms/componentchooser/applicationmodel.cpp
+++ /dev/null
@@ -1,237 +0,0 @@
-/*
-    SPDX-FileCopyrightText: 2022 Méven Car <meven at kde.org>
-
-    SPDX-License-Identifier: GPL-2.0-or-later
-*/
-
-#include "applicationmodel.h"
-
-#include <KApplicationTrader>
-#include <KLocalizedString>
-#include <KService>
-
-#include <optional>
-
-#include "componentchooser.h"
-
-ApplicationModel::ApplicationModel(QObject *parent)
-    : QAbstractItemModel(parent)
-{
-}
-
-void ApplicationModel::addApplication(const QString &name, const QString &iconName, const QString &storageId, bool isSelected, const QString &execLine)
-{
-    QVariantMap application;
-    application[QStringLiteral("name")] = name;
-    application[QStringLiteral("icon")] = iconName;
-    application[QStringLiteral("storageId")] = storageId;
-    application[QStringLiteral("isSelected")] = isSelected;
-    application[QStringLiteral("execLine")] = execLine;
-    m_applications += application;
-}
-
-void ApplicationModel::load(const QString &mimeType,
-                            const QString &applicationCategory,
-                            const QString &defaultApplication,
-                            const KService::Ptr preferredService)
-{
-    beginResetModel();
-
-    m_applications.clear();
-
-    if (preferredService) {
-        addApplication(preferredService->name(), preferredService->icon(), preferredService->storageId(), true, preferredService->exec());
-        if (preferredService->storageId() == defaultApplication) {
-            m_defaultIndex = 0;
-        }
-    }
-
-    KApplicationTrader::query([preferredService, applicationCategory, mimeType, defaultApplication, this](const KService::Ptr &service) {
-        if (service->exec().isEmpty() || (!applicationCategory.isEmpty() && !service->categories().contains(applicationCategory))
-            || (!mimeType.isEmpty() && !ComponentChooser::serviceSupportsMimeType(service, mimeType))
-            || (preferredService && preferredService->storageId() == service->storageId())) {
-            return false;
-        }
-
-        const auto icon = service->icon().isEmpty() ? QStringLiteral("application-x-shellscript") : service->icon();
-        bool isDefault = service->storageId() == defaultApplication;
-
-        addApplication(service->name(), icon, service->storageId(), false, service->exec());
-
-        if (isDefault) {
-            m_defaultIndex = m_applications.length() - 1;
-        }
-        return false;
-    });
-
-    addApplication(i18n("Other…"), QStringLiteral("application-x-shellscript"), QString(), false, QString());
-
-    endResetModel();
-}
-
-int ApplicationModel::currentIndex() const
-{
-    int index = 0;
-    for (const auto &application : std::as_const(m_applications)) {
-        if (application["isSelected"].toBool()) {
-            return index;
-        }
-        ++index;
-    }
-
-    if (m_defaultIndex != -1) {
-        return m_defaultIndex;
-    }
-
-    return 0;
-}
-
-std::optional<int> ApplicationModel::defaultIndex() const
-{
-    if (m_defaultIndex == -1)
-        return {};
-    else {
-        return m_defaultIndex;
-    }
-}
-
-int ApplicationModel::addApplicationBeforeLast(const KServicePtr service)
-{
-    // the application will grow by 1, we want to add the new application at the before
-    // last position taking into account the future new size of m_applications
-    int newRowIndex = rowCount() - 1;
-    beginInsertRows(QModelIndex(), newRowIndex, newRowIndex);
-
-    addApplication(service->name(), service->icon(), service->storageId(), false, service->exec());
-    // addApplication adds at the end of of the list
-    // swaps the last and before last applications
-    m_applications.swapItemsAt(rowCount() - 2, rowCount() - 1);
-
-    endInsertRows();
-
-    return newRowIndex;
-}
-
-QVariant ApplicationModel::headerData(int section, Qt::Orientation orientation, int role) const
-{
-    Q_UNUSED(section)
-    Q_UNUSED(orientation)
-    Q_UNUSED(role)
-
-    return QVariant();
-}
-
-QModelIndex ApplicationModel::index(int row, int column, const QModelIndex &parent) const
-{
-    Q_UNUSED(parent)
-
-    if (row >= 0 && row < m_applications.length()) {
-        return createIndex(row, column);
-    }
-    return QModelIndex();
-}
-
-QModelIndex ApplicationModel::parent(const QModelIndex &index) const
-{
-    Q_UNUSED(index)
-    return QModelIndex();
-}
-
-int ApplicationModel::rowCount(const QModelIndex &parent) const
-{
-    Q_UNUSED(parent)
-    return m_applications.length();
-}
-
-int ApplicationModel::columnCount(const QModelIndex &parent) const
-{
-    if (!parent.isValid())
-        return 0;
-
-    return 1;
-}
-
-QVariant ApplicationModel::data(const QModelIndex &index, int role) const
-{
-    if (!isValid(index))
-        return QVariant();
-
-    int row = index.row();
-    const auto map = m_applications.at(row);
-    switch (role) {
-    case Qt::DisplayRole:
-        return map["name"];
-    case Icon:
-        return map["icon"];
-    case StorageId:
-        return map["storageId"];
-    case Selected:
-        return map["isSelected"];
-    case ExecLine:
-        return map["execLine"];
-    }
-
-    return QVariant();
-}
-
-QVariant ApplicationModel::data(const int &row, int role) const
-{
-    return data(index(row, 0), role);
-}
-
-bool ApplicationModel::isValid(const QModelIndex &index) const
-{
-    return index.column() == 0 && index.row() >= 0 && index.row() < m_applications.length();
-}
-
-bool ApplicationModel::setData(const QModelIndex &index, const QVariant &value, int role)
-{
-    if (role != Selected) {
-        return false;
-    }
-    if (!isValid(index)) {
-        return false;
-    }
-    if (!value.canConvert(QMetaType(QMetaType::Type::Bool)) && !value.toBool()) {
-        return false;
-    }
-
-    for (auto &application : m_applications) {
-        application["isSelected"] = false;
-    }
-
-    const auto row = index.row();
-
-    // auto map = m_applications[row].toMap();
-    m_applications[row]["isSelected"] = true;
-    // m_applications[row] = map;
-
-    Q_EMIT dataChanged(index, index, {role});
-
-    return true;
-}
-
-QModelIndex ApplicationModel::findByStorageId(const QString &storageId) const
-{
-    int i = 0;
-    for (const auto &application : std::as_const(m_applications)) {
-        if (application["storageId"] == storageId) {
-            return index(i, 0);
-        }
-        ++i;
-    }
-    return QModelIndex();
-}
-
-QHash<int, QByteArray> ApplicationModel::roleNames() const
-{
-    return {
-        {Qt::DisplayRole, QByteArrayLiteral("name")},
-        {Icon, QByteArrayLiteral("icon")},
-        {StorageId, QByteArrayLiteral("storageId")},
-        {Selected, QByteArrayLiteral("isSelected")},
-        {ExecLine, QByteArrayLiteral("execLine")},
-    };
-}
-
-#include "moc_applicationmodel.cpp"
diff --git a/kcms/componentchooser/applicationmodel.h b/kcms/componentchooser/applicationmodel.h
deleted file mode 100644
index 2f1a5c1dc6..0000000000
--- a/kcms/componentchooser/applicationmodel.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
-    SPDX-FileCopyrightText: 2022 Méven Car <meven at kde.org>
-
-    SPDX-License-Identifier: GPL-2.0-or-later
-*/
-
-#ifndef APPLICATION_MODEL_H
-#define APPLICATION_MODEL_H
-
-#include <KService>
-#include <QAbstractItemModel>
-
-#include <optional>
-
-class ApplicationModel : public QAbstractItemModel
-{
-    Q_OBJECT
-
-public:
-    explicit ApplicationModel(QObject *parent = nullptr);
-
-    enum Roles {
-        Icon = Qt::UserRole + 1,
-        StorageId = Qt::UserRole + 2,
-        IsDefault = Qt::UserRole + 3,
-        Selected = Qt::UserRole + 4,
-        ExecLine = Qt::UserRole + 5,
-    };
-    Q_ENUMS(Roles)
-
-    // Header:
-    QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
-
-    // Basic functionality:
-    QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const override;
-    QModelIndex parent(const QModelIndex &index) const override;
-
-    int rowCount(const QModelIndex &parent = QModelIndex()) const override;
-    int columnCount(const QModelIndex &parent = QModelIndex()) const override;
-
-    QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
-    QVariant data(const int &row, int role = Qt::DisplayRole) const;
-
-    bool setData(const QModelIndex &index, const QVariant &value, int role) override;
-
-    QModelIndex findByStorageId(const QString &storageId) const;
-
-    QHash<int, QByteArray> roleNames() const override;
-
-    void load(const QString &mimeType, const QString &applicationCategory, const QString &defaultApplication, const KService::Ptr preferredService);
-    Q_INVOKABLE int currentIndex() const;
-
-    std::optional<int> defaultIndex() const;
-
-    int addApplicationBeforeLast(const KServicePtr service);
-    void addApplication(const QString &name, const QString &iconName, const QString &storageId, bool isSelected, const QString &execLine);
-
-private:
-    bool isValid(const QModelIndex &index) const;
-
-    QList<QVariantMap> m_applications;
-    int m_defaultIndex = -1;
-};
-
-#endif // APPLICATION_MODEL_H
diff --git a/kcms/componentchooser/componentchooser.cpp b/kcms/componentchooser/componentchooser.cpp
deleted file mode 100644
index d4e00d48bb..0000000000
--- a/kcms/componentchooser/componentchooser.cpp
+++ /dev/null
@@ -1,285 +0,0 @@
-/*
-    SPDX-FileCopyrightText: 2002 Joseph Wenninger <jowenn at kde.org>
-    SPDX-FileCopyrightText: 2020 Méven Car <meven.car at kdemail.net>
-    SPDX-FileCopyrightText: 2020 Tobias Fella <fella at posteo.de>
-    SPDX-FileCopyrightText: 2022 Méven Car <meven at kde.org>
-
-    SPDX-License-Identifier: GPL-2.0-or-later
-*/
-
-#include "componentchooser.h"
-
-#include <QApplication>
-#include <QDBusConnection>
-#include <QDBusMessage>
-#include <QMimeDatabase>
-
-#include <KApplicationTrader>
-#include <KBuildSycocaProgressDialog>
-#include <KConfigGroup>
-#include <KOpenWithDialog>
-#include <KQuickConfigModule>
-#include <KService>
-#include <KSharedConfig>
-
-extern KSERVICE_EXPORT int ksycoca_ms_between_checks;
-
-ComponentChooser::ComponentChooser(QObject *parent,
-                                   const QString &mimeType,
-                                   const QString &applicationCategory,
-                                   const QString &defaultApplication,
-                                   const QString &dialogText)
-    : QObject(parent)
-    , m_mimeType(mimeType)
-    , m_applicationCategory(applicationCategory)
-    , m_defaultApplication(defaultApplication)
-    , m_dialogText(dialogText)
-{
-    qRegisterMetaType<QList<PairQml>>("QList<PairQml>");
-
-    m_model = new ApplicationModel(this);
-    connect(m_model, &QAbstractItemModel::modelReset, this, &ComponentChooser::modelChanged);
-}
-
-void ComponentChooser::defaults()
-{
-    const auto defaultIndex = m_model->defaultIndex();
-    if (defaultIndex) {
-        select(*defaultIndex);
-    }
-}
-
-void ComponentChooser::load()
-{
-    m_model->load(m_mimeType, m_applicationCategory, m_defaultApplication, KApplicationTrader::preferredService(m_mimeType));
-
-    m_index = m_model->currentIndex();
-
-    m_currentApplication = currentStorageId();
-
-    Q_EMIT indexChanged();
-    Q_EMIT isDefaultsChanged();
-}
-
-void ComponentChooser::select(int index)
-{
-    // Other selection
-    if (index == m_model->rowCount() - 1) {
-        KOpenWithDialog *dialog = new KOpenWithDialog(QList<QUrl>(), m_mimeType, m_dialogText, QString(), QApplication::activeWindow());
-        dialog->setSaveNewApplications(true);
-        dialog->setAttribute(Qt::WA_DeleteOnClose);
-        connect(dialog, &KOpenWithDialog::finished, this, [this, dialog](int result) {
-            if (result == QDialog::Rejected) {
-                Q_EMIT indexChanged();
-                Q_EMIT isDefaultsChanged();
-                return;
-            }
-
-            const auto serviceStorageId = dialog->service()->storageId();
-
-            // Check if the selected application is already in the list
-            QModelIndex modelIndex = m_model->findByStorageId(serviceStorageId);
-            if (modelIndex.isValid()) {
-                select(modelIndex.row());
-                return;
-            }
-
-            auto newIndex = m_model->addApplicationBeforeLast(dialog->service());
-            select(newIndex);
-        });
-        dialog->open();
-    } else {
-        m_index = index;
-
-        const auto selectedIndex = m_model->index(index, 0);
-        m_model->setData(selectedIndex, true, ApplicationModel::Selected);
-
-        Q_EMIT indexChanged();
-        Q_EMIT isDefaultsChanged();
-        Q_EMIT modelChanged();
-    }
-}
-
-void ComponentChooser::saveMimeTypeAssociations(const QString &storageId, const QStringList &mimeTypes, bool forceUnsupportedMimeType)
-{
-    if (storageId.isEmpty()) {
-        return;
-    }
-
-    // This grabs the configuration from mimeapps.list, which is DE agnostic and part of the XDG standard.
-    KSharedConfig::Ptr mimeAppsList = KSharedConfig::openConfig(QStringLiteral("mimeapps.list"), KConfig::NoGlobals, QStandardPaths::GenericConfigLocation);
-
-    if (mimeAppsList->isConfigWritable(true)) {
-        const auto appService = KService::serviceByStorageId(storageId);
-
-        for (const QString &mimeType : mimeTypes) {
-            if (!forceUnsupportedMimeType && appService && !serviceSupportsMimeType(appService, mimeType)) {
-                // skip mimetype association if the app does not support it at all
-                continue;
-            }
-
-            KApplicationTrader::setPreferredService(mimeType, appService);
-        }
-
-        m_currentApplication = storageId;
-    }
-}
-
-void ComponentChooser::onSaved()
-{
-    Q_EMIT indexChanged();
-    Q_EMIT isDefaultsChanged();
-}
-
-QStringList ComponentChooser::unsupportedMimeTypes() const
-{
-    const auto preferredApp = currentStorageId();
-
-    if (preferredApp.isEmpty()) {
-        return QStringList{};
-    }
-
-    const auto db = QMimeDatabase();
-
-    QStringList unsupportedMimeTypes;
-
-    const auto appService = KService::serviceByStorageId(preferredApp);
-    const auto componentMimeTypes = mimeTypes();
-    for (const QString &mimeType : componentMimeTypes) {
-        if (!serviceSupportsMimeType(appService, mimeType)) {
-            const auto preferredService = KApplicationTrader::preferredService(mimeType);
-            if (!preferredService || (preferredService->storageId() != appService->storageId())) {
-                unsupportedMimeTypes << mimeType;
-            }
-        }
-    }
-
-    return unsupportedMimeTypes;
-}
-
-void ComponentChooser::saveAssociationUnsuportedMimeTypes()
-{
-    const auto storageId = currentStorageId();
-
-    saveMimeTypeAssociations(storageId, unsupportedMimeTypes(), true);
-    forceReloadServiceCache();
-    load();
-}
-
-QList<PairQml> ComponentChooser::mimeTypesNotAssociated() const
-{
-    auto ret = QList<PairQml>();
-
-    const auto db = QMimeDatabase();
-    const auto storageId = m_currentApplication;
-
-    const auto appService = KService::serviceByStorageId(storageId);
-
-    if (!appService) {
-        return ret;
-    }
-
-    const auto mimes = mimeTypes();
-
-    for (const QString &mimeType : mimes) {
-        const auto service = KApplicationTrader::preferredService(mimeType);
-
-        if (service && service->storageId() != storageId &&
-            // only explicitly supported mimetype
-            serviceSupportsMimeType(appService, mimeType)) {
-            ret.append(PairQml(service->name(), mimeType));
-        }
-    }
-
-    return ret;
-}
-
-void ComponentChooser::saveMimeTypesNotAssociated()
-{
-    const auto mimeTypeNotAssociated = mimeTypesNotAssociated();
-
-    auto mimeTypeList = QList<QString>();
-    for (const auto &pair : mimeTypeNotAssociated) {
-        mimeTypeList.append(pair.second.toString());
-    }
-
-    const auto storageId = currentStorageId();
-    saveMimeTypeAssociations(storageId, mimeTypeList);
-
-    forceReloadServiceCache();
-    load();
-}
-
-QString ComponentChooser::currentStorageId() const
-{
-    return m_model->data(m_index, ApplicationModel::StorageId).toString();
-}
-
-QString ComponentChooser::applicationName() const
-{
-    return m_model->data(m_index, Qt::DisplayRole).toString();
-}
-
-QString ComponentChooser::applicationIcon() const
-{
-    return m_model->data(m_index, ApplicationModel::Icon).toString();
-}
-
-QStringList ComponentChooser::mimeTypes() const
-{
-    return QStringList{};
-}
-
-void ComponentChooser::forceReloadServiceCache()
-{
-    KBuildSycocaProgressDialog::rebuildKSycoca(QApplication::activeWindow());
-
-    // HACK to ensure mime cache is updated right away
-    int previous_delay = ksycoca_ms_between_checks;
-    ksycoca_ms_between_checks = 0;
-    KService::allServices();
-    ksycoca_ms_between_checks = previous_delay;
-}
-
-void ComponentChooser::save()
-{
-    // default impl for simple application kinds
-    const auto storageId = currentStorageId();
-
-    saveMimeTypeAssociations(storageId, mimeTypes());
-}
-
-bool ComponentChooser::isDefaults() const
-{
-    const auto defaultIndex = m_model->defaultIndex();
-    return !defaultIndex.has_value() || *defaultIndex == m_index;
-}
-
-bool ComponentChooser::isSaveNeeded() const
-{
-    const auto storageId = currentStorageId();
-    return m_model->rowCount() > 1 && (m_currentApplication != storageId) && storageId != "";
-}
-
-bool ComponentChooser::serviceSupportsMimeType(KService::Ptr service, const QString &targetMimeType)
-{
-    static QMimeDatabase db;
-    const QStringList mimeTypes = service->mimeTypes();
-    for (const QString &supportedMimeType : mimeTypes) {
-        if (supportedMimeType == targetMimeType) {
-            return true;
-        }
-
-        if (db.mimeTypeForName(targetMimeType).inherits(supportedMimeType)) {
-            return true;
-        }
-    }
-
-    if (targetMimeType.startsWith(QLatin1String("x-scheme-handler/")) && service->schemeHandlers().contains(targetMimeType.mid(17))) {
-        return true;
-    }
-
-    return false;
-}
-
-#include "moc_componentchooser.cpp"
diff --git a/kcms/componentchooser/componentchooser.h b/kcms/componentchooser/componentchooser.h
deleted file mode 100644
index fad268c8a0..0000000000
--- a/kcms/componentchooser/componentchooser.h
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
-    SPDX-FileCopyrightText: 2020 Tobias Fella <fella at posteo.de>
-    SPDX-FileCopyrightText: 2022 Méven Car <meven at kde.org>
-
-    SPDX-License-Identifier: GPL-2.0-or-later
-*/
-
-#pragma once
-
-#include <KLocalizedString>
-#include <QString>
-#include <QVariant>
-
-#include "applicationmodel.h"
-
-class ApplicationModel;
-
-class PairQml
-{
-    Q_GADGET
-
-    Q_PROPERTY(QVariant first MEMBER first CONSTANT FINAL)
-    Q_PROPERTY(QVariant second MEMBER second CONSTANT FINAL)
-
-public:
-    PairQml() = default;
-    PairQml(QVariant f, QVariant s)
-        : first(f)
-        , second(s)
-    {
-    }
-
-    QVariant first;
-    QVariant second;
-};
-
-class ComponentChooser : public QObject
-{
-    Q_OBJECT
-    Q_PROPERTY(ApplicationModel *applications MEMBER m_model CONSTANT)
-    Q_PROPERTY(int index MEMBER m_index NOTIFY indexChanged)
-    Q_PROPERTY(bool isDefaults READ isDefaults NOTIFY isDefaultsChanged)
-
-    Q_PROPERTY(QStringList unsupportedMimeTypes READ unsupportedMimeTypes NOTIFY modelChanged)
-    Q_PROPERTY(QList<PairQml> mimeTypesNotAssociated READ mimeTypesNotAssociated NOTIFY modelChanged)
-    Q_PROPERTY(bool isSaveNeeded READ isSaveNeeded NOTIFY indexChanged)
-
-public:
-    ComponentChooser(QObject *parent, const QString &mimeType, const QString &type, const QString &defaultApplication, const QString &dialogText);
-
-    virtual void load();
-    virtual void save();
-
-    void defaults();
-    bool isDefaults() const;
-    bool isSaveNeeded() const;
-
-    Q_INVOKABLE QString currentStorageId() const;
-    Q_INVOKABLE QString applicationName() const;
-    Q_INVOKABLE QString applicationIcon() const;
-
-    /// return the mimeTypes not supported by the currently selected application
-    QStringList unsupportedMimeTypes() const;
-
-    /// Mimetypes associated with another application than the current
-    QList<PairQml> mimeTypesNotAssociated() const;
-
-    Q_INVOKABLE void select(int index);
-    Q_INVOKABLE void saveAssociationUnsuportedMimeTypes();
-    Q_INVOKABLE void saveMimeTypesNotAssociated();
-
-    void saveMimeTypeAssociations(const QString &storageId, const QStringList &mimes, bool forceUnsupportedMimeType = false);
-
-    virtual QStringList mimeTypes() const;
-
-    static void forceReloadServiceCache();
-    static bool serviceSupportsMimeType(KService::Ptr service, const QString &mimeType);
-
-Q_SIGNALS:
-    void indexChanged();
-    void isDefaultsChanged();
-    void isSaveNeededChanged();
-    void modelChanged();
-
-public slots:
-    void onSaved();
-
-protected:
-    ApplicationModel *m_model;
-
-    int m_index = -1;
-    QString m_mimeType;
-    QString m_applicationCategory;
-    QString m_defaultApplication;
-    QString m_currentApplication;
-    QString m_dialogText;
-
-private:
-    void reBuildCacheAndLoad();
-};
diff --git a/kcms/componentchooser/components/componentchooserarchivemanager.cpp b/kcms/componentchooser/components/componentchooserarchivemanager.cpp
deleted file mode 100644
index a0768878b8..0000000000
--- a/kcms/componentchooser/components/componentchooserarchivemanager.cpp
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
-    SPDX-FileCopyrightText: 2022 Thiago Sueto <herzenschein at gmail.com>
-    SPDX-FileCopyrightText: 2022 Méven Car <meven at kde.org>
-
-    SPDX-License-Identifier: GPL-2.0-or-later
-*/
-
-#include "componentchooserarchivemanager.h"
-
-ComponentChooserArchiveManager::ComponentChooserArchiveManager(QObject *parent)
-    : ComponentChooser(parent,
-                       QStringLiteral("application/zip"),
-                       QStringLiteral("Archiving"),
-                       QStringLiteral("org.kde.ark.desktop"),
-                       i18n("Select default archive manager"))
-{
-}
-
-static const QStringList archiveMimetypes{"application/x-tar",
-                                          "application/x-compressed-tar",
-                                          "application/x-bzip-compressed-tar",
-                                          "application/x-tarz",
-                                          "application/x-xz-compressed-tar",
-                                          "application/x-lzma-compressed-tar",
-                                          "application/x-lzip-compressed-tar",
-                                          "application/x-tzo",
-                                          "application/x-lrzip-compressed-tar",
-                                          "application/x-lz4-compressed-tar",
-                                          "application/x-zstd-compressed-tar",
-                                          "application/x-cd-image",
-                                          "application/x-bcpio",
-                                          "application/x-cpio",
-                                          "application/x-cpio-compressed",
-                                          "application/x-sv4cpio",
-                                          "application/x-sv4crc",
-                                          "application/x-source-rpm",
-                                          "application/vnd.ms-cab-compressed",
-                                          "application/x-xar",
-                                          "application/x-iso9660-appimage",
-                                          "application/x-archive",
-                                          "application/vnd.rar",
-                                          "application/x-rar",
-                                          "application/x-7z-compressed",
-                                          "application/zip",
-                                          "application/x-compress",
-                                          "application/gzip",
-                                          "application/x-bzip",
-                                          "application/x-lzma",
-                                          "application/x-xz",
-                                          "application/zstd",
-                                          "application/x-lha"};
-
-QStringList ComponentChooserArchiveManager::mimeTypes() const
-{
-    return archiveMimetypes;
-}
diff --git a/kcms/componentchooser/components/componentchooserarchivemanager.h b/kcms/componentchooser/components/componentchooserarchivemanager.h
deleted file mode 100644
index 8c55e4e41c..0000000000
--- a/kcms/componentchooser/components/componentchooserarchivemanager.h
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
-    SPDX-FileCopyrightText: 2022 Thiago Sueto <herzenschein at gmail.com>
-    SPDX-FileCopyrightText: 2022 Méven Car <meven at kde.org>
-
-    SPDX-License-Identifier: GPL-2.0-or-later
-*/
-
-#ifndef COMPONENTCHOOSERARCHIVEMANAGER_H
-#define COMPONENTCHOOSERARCHIVEMANAGER_H
-
-#include "componentchooser.h"
-
-class ComponentChooserArchiveManager : public ComponentChooser
-{
-public:
-    ComponentChooserArchiveManager(QObject *parent);
-
-    QStringList mimeTypes() const override;
-};
-
-#endif
diff --git a/kcms/componentchooser/components/componentchooserbrowser.cpp b/kcms/componentchooser/components/componentchooserbrowser.cpp
deleted file mode 100644
index 305466772c..0000000000
--- a/kcms/componentchooser/components/componentchooserbrowser.cpp
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
-    SPDX-FileCopyrightText: 2002 Joseph Wenninger <jowenn at kde.org>
-    SPDX-FileCopyrightText: 2020 Méven Car <meven.car at kdemail.net>
-    SPDX-FileCopyrightText: 2020 Tobias Fella <fella at posteo.de>
-    SPDX-FileCopyrightText: 2022 Méven Car <meven at kde.org>
-
-    SPDX-License-Identifier: GPL-2.0-or-later
-*/
-
-#include "componentchooserbrowser.h"
-
-ComponentChooserBrowser::ComponentChooserBrowser(QObject *parent)
-    : ComponentChooser(parent, QStringLiteral("x-scheme-handler/http"), QString(), QStringLiteral("org.kde.falkon.desktop"), i18n("Select default browser"))
-{
-}
-
-static const QStringList browserMimetypes{"x-scheme-handler/http", "x-scheme-handler/https"};
-
-QStringList ComponentChooserBrowser::mimeTypes() const
-{
-    return browserMimetypes;
-}
-
-void ComponentChooserBrowser::save()
-{
-    const auto storageId = m_model->data(m_model->index(m_index, 0), ApplicationModel::StorageId).toString();
-    saveMimeTypeAssociations(storageId, browserMimetypes);
-}
diff --git a/kcms/componentchooser/components/componentchooserbrowser.h b/kcms/componentchooser/components/componentchooserbrowser.h
deleted file mode 100644
index 174e6f9fa4..0000000000
--- a/kcms/componentchooser/components/componentchooserbrowser.h
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
-    SPDX-FileCopyrightText: 2020 Tobias Fella <fella at posteo.de>
-    SPDX-FileCopyrightText: 2022 Méven Car <meven at kde.org>
-
-    SPDX-License-Identifier: GPL-2.0-or-later
-*/
-
-#pragma once
-
-#include "componentchooser.h"
-
-class ComponentChooserBrowser : public ComponentChooser
-{
-public:
-    ComponentChooserBrowser(QObject *parent);
-
-    QStringList mimeTypes() const override;
-
-    void save() override;
-};
diff --git a/kcms/componentchooser/components/componentchooseremail.cpp b/kcms/componentchooser/components/componentchooseremail.cpp
deleted file mode 100644
index 62c8bc3d46..0000000000
--- a/kcms/componentchooser/components/componentchooseremail.cpp
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
-    SPDX-FileCopyrightText: 2002 Joseph Wenninger <jowenn at kde.org>
-    SPDX-FileCopyrightText: 2020 Méven Car <meven.car at kdemail.net>
-    SPDX-FileCopyrightText: 2020 Tobias Fella <fella at posteo.de>
-    SPDX-FileCopyrightText: 2022 Méven Car <meven at kde.org>
-
-    SPDX-License-Identifier: GPL-2.0-or-later
-*/
-
-#include "componentchooseremail.h"
-
-#include <KEMailSettings>
-#include <KService>
-
-ComponentChooserEmail::ComponentChooserEmail(QObject *parent)
-    : ComponentChooser(parent,
-                       QStringLiteral("x-scheme-handler/mailto"),
-                       QStringLiteral("Email"),
-                       QStringLiteral("org.kde.kmail2.desktop"),
-                       i18n("Select default e-mail client"))
-{
-}
-
-static const QStringList emailMimetypes{"x-scheme-handler/mailto"};
-
-QStringList ComponentChooserEmail::mimeTypes() const
-{
-    return emailMimetypes;
-}
-
-void ComponentChooserEmail::save()
-{
-    const auto storageId = currentStorageId();
-
-    const KService::Ptr emailClientService = KService::serviceByStorageId(storageId);
-    if (!emailClientService) {
-        return;
-    }
-    const bool kmailSelected = storageId == QStringLiteral("org.kde.kmail2.desktop");
-
-    KEMailSettings *emailSettings = new KEMailSettings();
-
-    if (kmailSelected) {
-        emailSettings->setSetting(KEMailSettings::ClientProgram, QString());
-        emailSettings->setSetting(KEMailSettings::ClientTerminal, QStringLiteral("false"));
-    } else {
-        emailSettings->setSetting(KEMailSettings::ClientProgram, storageId);
-        emailSettings->setSetting(KEMailSettings::ClientTerminal, emailClientService->terminal() ? QStringLiteral("true") : QStringLiteral("false"));
-    }
-
-    saveMimeTypeAssociations(storageId, emailMimetypes);
-}
diff --git a/kcms/componentchooser/components/componentchooseremail.h b/kcms/componentchooser/components/componentchooseremail.h
deleted file mode 100644
index bfe6a676cc..0000000000
--- a/kcms/componentchooser/components/componentchooseremail.h
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
-    SPDX-FileCopyrightText: 2020 Tobias Fella <fella at posteo.de>
-    SPDX-FileCopyrightText: 2022 Méven Car <meven at kde.org>
-
-    SPDX-License-Identifier: GPL-2.0-or-later
-*/
-
-#pragma once
-
-#include "componentchooser.h"
-
-class ComponentChooserEmail : public ComponentChooser
-{
-public:
-    ComponentChooserEmail(QObject *parent);
-
-    QStringList mimeTypes() const override;
-    void save() override;
-};
diff --git a/kcms/componentchooser/components/componentchooserfilemanager.cpp b/kcms/componentchooser/components/componentchooserfilemanager.cpp
deleted file mode 100644
index d9af5b215f..0000000000
--- a/kcms/componentchooser/components/componentchooserfilemanager.cpp
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
-    SPDX-FileCopyrightText: 2020 Tobias Fella <fella at posteo.de>
-    SPDX-FileCopyrightText: 2022 Méven Car <meven at kde.org>
-
-    SPDX-License-Identifier: GPL-2.0-or-later
-*/
-
-#include "componentchooserfilemanager.h"
-
-ComponentChooserFileManager::ComponentChooserFileManager(QObject *parent)
-    : ComponentChooser(parent,
-                       QStringLiteral("inode/directory"),
-                       QStringLiteral("FileManager"),
-                       QStringLiteral("org.kde.dolphin.desktop"),
-                       i18n("Select default file manager"))
-{
-}
-
-static const QStringList fileManagerMimetypes{"inode/directory"};
-
-QStringList ComponentChooserFileManager::mimeTypes() const
-{
-    return fileManagerMimetypes;
-}
diff --git a/kcms/componentchooser/components/componentchooserfilemanager.h b/kcms/componentchooser/components/componentchooserfilemanager.h
deleted file mode 100644
index ad3a02e5e5..0000000000
--- a/kcms/componentchooser/components/componentchooserfilemanager.h
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
-    SPDX-FileCopyrightText: 2020 Tobias Fella <fella at posteo.de>
-
-    SPDX-License-Identifier: GPL-2.0-or-later
-*/
-
-#pragma once
-
-#include "componentchooser.h"
-
-class ComponentChooserFileManager : public ComponentChooser
-{
-public:
-    ComponentChooserFileManager(QObject *parent);
-
-    QStringList mimeTypes() const override;
-};
diff --git a/kcms/componentchooser/components/componentchoosergeo.cpp b/kcms/componentchooser/components/componentchoosergeo.cpp
deleted file mode 100644
index ce36c552bb..0000000000
--- a/kcms/componentchooser/components/componentchoosergeo.cpp
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
-    SPDX-FileCopyrightText: 2021 Volker Krause <vkrause at kde.org>
-    SPDX-FileCopyrightText: 2022 Méven Car <meven at kde.org>
-
-    SPDX-License-Identifier: LGPL-2.0-or-later
-*/
-
-#include "componentchoosergeo.h"
-
-#include <KService>
-
-ComponentChooserGeo::ComponentChooserGeo(QObject *parent)
-    : ComponentChooser(parent, QStringLiteral("x-scheme-handler/geo"), QString(), QStringLiteral("marble_geo.desktop"), i18n("Select default map"))
-{
-}
-
-static const QStringList geolocationMimetypes{"x-scheme-handler/geo"};
-
-QStringList ComponentChooserGeo::mimeTypes() const
-{
-    return geolocationMimetypes;
-}
diff --git a/kcms/componentchooser/components/componentchoosergeo.h b/kcms/componentchooser/components/componentchoosergeo.h
deleted file mode 100644
index 7b5b3ec862..0000000000
--- a/kcms/componentchooser/components/componentchoosergeo.h
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
-    SPDX-FileCopyrightText: 2021 Volker Krause <vkrause at kde.org>
-    SPDX-FileCopyrightText: 2022 Méven Car <meven at kde.org>
-
-    SPDX-License-Identifier: LGPL-2.0-or-later
-*/
-
-#pragma once
-
-#include "componentchooser.h"
-
-class ComponentChooserGeo : public ComponentChooser
-{
-public:
-    explicit ComponentChooserGeo(QObject *parent);
-
-    QStringList mimeTypes() const override;
-};
diff --git a/kcms/componentchooser/components/componentchooserimageviewer.cpp b/kcms/componentchooser/components/componentchooserimageviewer.cpp
deleted file mode 100644
index 0e6350e3c5..0000000000
--- a/kcms/componentchooser/components/componentchooserimageviewer.cpp
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
-    SPDX-FileCopyrightText: 2022 Thiago Sueto <herzenschein at gmail.com>
-    SPDX-FileCopyrightText: 2022 Méven Car <meven at kde.org>
-
-    SPDX-License-Identifier: GPL-2.0-or-later
-*/
-
-#include "componentchooserimageviewer.h"
-
-ComponentChooserImageViewer::ComponentChooserImageViewer(QObject *parent)
-    : ComponentChooser(parent,
-                       QStringLiteral("image/png"),
-                       QStringLiteral("Viewer"),
-                       QStringLiteral("org.kde.gwenview.desktop"),
-                       i18n("Select default image viewer"))
-{
-}
-
-static const QStringList imageViewerMimetypes{"image/png", "image/jpeg", "image/webp", "image/avif", "image/heif", "image/bmp", "image/x-icns"};
-
-QStringList ComponentChooserImageViewer::mimeTypes() const
-{
-    return imageViewerMimetypes;
-}
diff --git a/kcms/componentchooser/components/componentchooserimageviewer.h b/kcms/componentchooser/components/componentchooserimageviewer.h
deleted file mode 100644
index 643359cbcc..0000000000
--- a/kcms/componentchooser/components/componentchooserimageviewer.h
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
-    SPDX-FileCopyrightText: 2022 Thiago Sueto <herzenschein at gmail.com>
-    SPDX-FileCopyrightText: 2022 Méven Car <meven at kde.org>
-
-    SPDX-License-Identifier: GPL-2.0-or-later
-*/
-
-#ifndef COMPONENTCHOOSERIMAGEVIEWER_H
-#define COMPONENTCHOOSERIMAGEVIEWER_H
-
-#include "componentchooser.h"
-
-class ComponentChooserImageViewer : public ComponentChooser
-{
-public:
-    ComponentChooserImageViewer(QObject *parent);
-
-    QStringList mimeTypes() const override;
-};
-
-#endif
diff --git a/kcms/componentchooser/components/componentchoosermusicplayer.cpp b/kcms/componentchooser/components/componentchoosermusicplayer.cpp
deleted file mode 100644
index 5b659d29ec..0000000000
--- a/kcms/componentchooser/components/componentchoosermusicplayer.cpp
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
-    SPDX-FileCopyrightText: 2022 Thiago Sueto <herzenschein at gmail.com>
-    SPDX-FileCopyrightText: 2022 Méven Car <meven at kde.org>
-
-    SPDX-License-Identifier: GPL-2.0-or-later
-*/
-
-#include "componentchoosermusicplayer.h"
-
-ComponentChooserMusicPlayer::ComponentChooserMusicPlayer(QObject *parent)
-    : ComponentChooser(parent,
-                       QStringLiteral("audio/mpeg"),
-                       QStringLiteral("Player"),
-                       QStringLiteral("org.kde.elisa.desktop"),
-                       i18n("Select default music player"))
-{
-}
-
-static const QStringList audioMimetypes{"audio/aac",
-                                        "audio/mp4",
-                                        "audio/mpeg",
-                                        "audio/mpegurl",
-                                        "audio/ogg",
-                                        "audio/vnd.rn-realaudio",
-                                        "audio/vorbis",
-                                        "audio/x-flac",
-                                        "audio/x-mp3",
-                                        "audio/x-mpegurl",
-                                        "audio/x-ms-wma",
-                                        "audio/x-musepack",
-                                        "audio/x-oggflac",
-                                        "audio/x-pn-realaudio",
-                                        "audio/x-scpls",
-                                        "audio/x-speex",
-                                        "audio/x-vorbis",
-                                        "audio/x-vorbis+ogg",
-                                        "audio/x-wav"};
-
-QStringList ComponentChooserMusicPlayer::mimeTypes() const
-{
-    return audioMimetypes;
-}
diff --git a/kcms/componentchooser/components/componentchoosermusicplayer.h b/kcms/componentchooser/components/componentchoosermusicplayer.h
deleted file mode 100644
index d4612b86d8..0000000000
--- a/kcms/componentchooser/components/componentchoosermusicplayer.h
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
-    SPDX-FileCopyrightText: 2022 Thiago Sueto <herzenschein at gmail.com>
-    SPDX-FileCopyrightText: 2022 Méven Car <meven at kde.org>
-
-    SPDX-License-Identifier: GPL-2.0-or-later
-*/
-
-#ifndef COMPONENTCHOOSERMUSICPLAYER_H
-#define COMPONENTCHOOSERMUSICPLAYER_H
-
-#include "componentchooser.h"
-
-class ComponentChooserMusicPlayer : public ComponentChooser
-{
-public:
-    ComponentChooserMusicPlayer(QObject *parent);
-
-    QStringList mimeTypes() const override;
-};
-
-#endif
diff --git a/kcms/componentchooser/components/componentchooserpdfviewer.cpp b/kcms/componentchooser/components/componentchooserpdfviewer.cpp
deleted file mode 100644
index e4766e817c..0000000000
--- a/kcms/componentchooser/components/componentchooserpdfviewer.cpp
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
-    SPDX-FileCopyrightText: 2022 Thiago Sueto <herzenschein at gmail.com>
-    SPDX-FileCopyrightText: 2022 Méven Car <meven at kde.org>
-
-    SPDX-License-Identifier: GPL-2.0-or-later
-*/
-
-#include "componentchooserpdfviewer.h"
-
-ComponentChooserPdfViewer::ComponentChooserPdfViewer(QObject *parent)
-    : ComponentChooser(parent, QStringLiteral("application/pdf"), QString(), QStringLiteral("okularApplication_pdf.desktop"), i18n("Select default PDF viewer"))
-{
-}
-
-static const QStringList pdfMimetypes{"application/pdf"};
-
-QStringList ComponentChooserPdfViewer::mimeTypes() const
-{
-    return pdfMimetypes;
-}
diff --git a/kcms/componentchooser/components/componentchooserpdfviewer.h b/kcms/componentchooser/components/componentchooserpdfviewer.h
deleted file mode 100644
index 9d8e987acd..0000000000
--- a/kcms/componentchooser/components/componentchooserpdfviewer.h
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
-    SPDX-FileCopyrightText: 2022 Thiago Sueto <herzenschein at gmail.com>
-    SPDX-FileCopyrightText: 2022 Méven Car <meven at kde.org>
-
-    SPDX-License-Identifier: GPL-2.0-or-later
-*/
-
-#ifndef COMPONENTCHOOSERPDFVIEWER_H
-#define COMPONENTCHOOSERPDFVIEWER_H
-
-#include "componentchooser.h"
-
-class ComponentChooserPdfViewer : public ComponentChooser
-{
-public:
-    ComponentChooserPdfViewer(QObject *parent);
-
-    QStringList mimeTypes() const override;
-};
-
-#endif
diff --git a/kcms/componentchooser/components/componentchoosertel.cpp b/kcms/componentchooser/components/componentchoosertel.cpp
deleted file mode 100644
index 911827986d..0000000000
--- a/kcms/componentchooser/components/componentchoosertel.cpp
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
-    SPDX-FileCopyrightText: 2022 Kai Uwe Broulik <kde at broulik.de>
-    SPDX-FileCopyrightText: 2022 Méven Car <meven at kde.org>
-
-    SPDX-License-Identifier: LGPL-2.0-or-later
-*/
-
-#include "componentchoosertel.h"
-
-#include <KService>
-
-ComponentChooserTel::ComponentChooserTel(QObject *parent)
-    : ComponentChooser(parent,
-                       QStringLiteral("x-scheme-handler/tel"),
-                       QStringLiteral("Dialer"),
-                       QStringLiteral("org.kde.kdeconnect.handler.desktop"),
-                       i18n("Select default dialer application"))
-{
-}
-
-static const QStringList telMimetypes{"x-scheme-handler/tel"};
-
-QStringList ComponentChooserTel::mimeTypes() const
-{
-    return telMimetypes;
-}
diff --git a/kcms/componentchooser/components/componentchoosertel.h b/kcms/componentchooser/components/componentchoosertel.h
deleted file mode 100644
index 8d07a16dc7..0000000000
--- a/kcms/componentchooser/components/componentchoosertel.h
+++ /dev/null
@@ -1,16 +0,0 @@
-/*
-    SPDX-FileCopyrightText: 2022 Kai Uwe Broulik <kde at broulik.de>
-    SPDX-License-Identifier: LGPL-2.0-or-later
-*/
-
-#pragma once
-
-#include "componentchooser.h"
-
-class ComponentChooserTel : public ComponentChooser
-{
-public:
-    explicit ComponentChooserTel(QObject *parent);
-
-    QStringList mimeTypes() const override;
-};
diff --git a/kcms/componentchooser/components/componentchooserterminal.cpp b/kcms/componentchooser/components/componentchooserterminal.cpp
deleted file mode 100644
index 1c12b88153..0000000000
--- a/kcms/componentchooser/components/componentchooserterminal.cpp
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
-    SPDX-FileCopyrightText: 2002 Joseph Wenninger <jowenn at kde.org>
-    SPDX-FileCopyrightText: 2020 Méven Car <meven.car at kdemail.net>
-    SPDX-FileCopyrightText: 2020 Tobias Fella <fella at posteo.de>
-    SPDX-FileCopyrightText: 2022 Méven Car <meven at kde.org>
-
-    SPDX-License-Identifier: GPL-2.0-or-later
-*/
-
-#include "componentchooserterminal.h"
-
-#include <QDBusConnection>
-#include <QDBusMessage>
-
-#include <KQuickConfigModule>
-#include <KService>
-
-#include "terminal_settings.h"
-
-ComponentChooserTerminal::ComponentChooserTerminal(QObject *parent)
-    : ComponentChooser(parent,
-                       QString(),
-                       QStringLiteral("TerminalEmulator"),
-                       QStringLiteral("org.kde.konsole.desktop"),
-                       i18n("Select default terminal emulator"))
-{
-}
-
-void ComponentChooserTerminal::load()
-{
-    TerminalSettings terminalSettings;
-    const auto preferredStorageId = terminalSettings.terminalService();
-
-    m_model->load(m_mimeType, m_applicationCategory, m_defaultApplication, KService::KService::serviceByStorageId(preferredStorageId));
-
-    m_index = m_model->currentIndex();
-
-    m_currentApplication = currentStorageId();
-
-    Q_EMIT indexChanged();
-    Q_EMIT isDefaultsChanged();
-}
-
-void ComponentChooserTerminal::save()
-{
-    const auto modelIndex = m_model->index(m_index, 0);
-    const auto storageId = m_model->data(modelIndex, ApplicationModel::StorageId).toString();
-    const auto execLine = m_model->data(modelIndex, ApplicationModel::ExecLine).toString();
-
-    TerminalSettings terminalSettings;
-    terminalSettings.setTerminalApplication(execLine);
-    terminalSettings.setTerminalService(storageId);
-    terminalSettings.save();
-
-    m_currentApplication = storageId;
-}
diff --git a/kcms/componentchooser/components/componentchooserterminal.h b/kcms/componentchooser/components/componentchooserterminal.h
deleted file mode 100644
index 788fe71e2a..0000000000
--- a/kcms/componentchooser/components/componentchooserterminal.h
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
-    SPDX-FileCopyrightText: 2020 Tobias Fella <fella at posteo.de>
-    SPDX-FileCopyrightText: 2022 Méven Car <meven at kde.org>
-
-    SPDX-License-Identifier: GPL-2.0-or-later
-*/
-
-#pragma once
-
-#include "componentchooser.h"
-
-class ComponentChooserTerminal : public ComponentChooser
-{
-public:
-    ComponentChooserTerminal(QObject *parent);
-
-    void save() override;
-    void load() override;
-};
diff --git a/kcms/componentchooser/components/componentchoosertexteditor.cpp b/kcms/componentchooser/components/componentchoosertexteditor.cpp
deleted file mode 100644
index 0bd7319e74..0000000000
--- a/kcms/componentchooser/components/componentchoosertexteditor.cpp
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
-    SPDX-FileCopyrightText: 2022 Thiago Sueto <herzenschein at gmail.com>
-    SPDX-FileCopyrightText: 2022 Méven Car <meven at kde.org>
-
-    SPDX-License-Identifier: GPL-2.0-or-later
-*/
-
-#include "componentchoosertexteditor.h"
-
-ComponentChooserTextEditor::ComponentChooserTextEditor(QObject *parent)
-    : ComponentChooser(parent,
-                       QStringLiteral("text/plain"),
-                       QStringLiteral("TextEditor"),
-                       QStringLiteral("org.kde.kate.desktop"),
-                       i18n("Select default text editor"))
-{
-}
-
-static const QStringList textEditorMimetypes{"text/plain",
-                                             "text/x-cmake",
-                                             "text/markdown",
-                                             "application/x-docbook+xml",
-                                             "application/json",
-                                             "application/x-yaml"};
-
-QStringList ComponentChooserTextEditor::mimeTypes() const
-{
-    return textEditorMimetypes;
-}
diff --git a/kcms/componentchooser/components/componentchoosertexteditor.h b/kcms/componentchooser/components/componentchoosertexteditor.h
deleted file mode 100644
index e20c266e0f..0000000000
--- a/kcms/componentchooser/components/componentchoosertexteditor.h
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
-    SPDX-FileCopyrightText: 2022 Thiago Sueto <herzenschein at gmail.com>
-    SPDX-FileCopyrightText: 2022 Méven Car <meven at kde.org>
-
-    SPDX-License-Identifier: GPL-2.0-or-later
-*/
-
-#ifndef COMPONENTCHOOSERTEXTEDITOR_H
-#define COMPONENTCHOOSERTEXTEDITOR_H
-
-#include "componentchooser.h"
-
-class ComponentChooserTextEditor : public ComponentChooser
-{
-public:
-    ComponentChooserTextEditor(QObject *parent);
-
-    QStringList mimeTypes() const override;
-};
-
-#endif
diff --git a/kcms/componentchooser/components/componentchooservideoplayer.cpp b/kcms/componentchooser/components/componentchooservideoplayer.cpp
deleted file mode 100644
index d0dcfc62d1..0000000000
--- a/kcms/componentchooser/components/componentchooservideoplayer.cpp
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
-    SPDX-FileCopyrightText: 2022 Thiago Sueto <herzenschein at gmail.com>
-    SPDX-FileCopyrightText: 2022 Méven Car <meven at kde.org>
-
-    SPDX-License-Identifier: GPL-2.0-or-later
-*/
-
-#include "componentchooservideoplayer.h"
-
-ComponentChooserVideoPlayer::ComponentChooserVideoPlayer(QObject *parent)
-    : ComponentChooser(parent,
-                       QStringLiteral("video/mp4"),
-                       QStringLiteral("Video"),
-                       QStringLiteral("org.kde.haruna.desktop"),
-                       i18n("Select default video player"))
-{
-}
-
-static const QStringList videoMimetypes{"video/3gp",      "video/3gpp",         "video/3gpp2",
-                                        "video/avi",      "video/divx",         "video/dv",
-                                        "video/fli",      "video/flv",          "video/mp2t",
-                                        "video/mp4",      "video/mp4v-es",      "video/mpeg",
-                                        "video/msvideo",  "video/ogg",          "video/quicktime",
-                                        "video/vnd.divx", "video/vnd.mpegurl",  "video/vnd.rn-realvideo",
-                                        "video/webm",     "video/x-avi",        "video/x-flv",
-                                        "video/x-m4v",    "video/x-matroska",   "video/x-mpeg2",
-                                        "video/x-ms-asf", "video/x-msvideo",    "video/x-ms-wmv",
-                                        "video/x-ms-wmx", "video/x-ogm",        "video/x-ogm+ogg",
-                                        "video/x-theora", "video/x-theora+ogg", "application/x-matroska"};
-
-QStringList ComponentChooserVideoPlayer::mimeTypes() const
-{
-    return videoMimetypes;
-}
diff --git a/kcms/componentchooser/components/componentchooservideoplayer.h b/kcms/componentchooser/components/componentchooservideoplayer.h
deleted file mode 100644
index c2ee973b8d..0000000000
--- a/kcms/componentchooser/components/componentchooservideoplayer.h
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
-    SPDX-FileCopyrightText: 2022 Thiago Sueto <herzenschein at gmail.com>
-    SPDX-FileCopyrightText: 2022 Méven Car <meven at kde.org>
-
-    SPDX-License-Identifier: GPL-2.0-or-later
-*/
-
-#ifndef COMPONENTCHOOSERVIDEOPLAYER_H
-#define COMPONENTCHOOSERVIDEOPLAYER_H
-
-#include "componentchooser.h"
-
-class ComponentChooserVideoPlayer : public ComponentChooser
-{
-public:
-    ComponentChooserVideoPlayer(QObject *parent);
-
-    QStringList mimeTypes() const override;
-};
-
-#endif
diff --git a/kcms/componentchooser/kcm_componentchooser.cpp b/kcms/componentchooser/kcm_componentchooser.cpp
deleted file mode 100644
index 4fc002b6da..0000000000
--- a/kcms/componentchooser/kcm_componentchooser.cpp
+++ /dev/null
@@ -1,211 +0,0 @@
-/*
-    SPDX-FileCopyrightText: 2020 Tobias Fella <fella at posteo.de>
-    SPDX-FileCopyrightText: 2022 Méven Car <meven at kde.org>
-
-    SPDX-License-Identifier: GPL-2.0-or-later
-*/
-
-#include "kcm_componentchooser.h"
-
-#include <QApplication>
-#include <QDBusConnection>
-#include <QDBusMessage>
-
-#include <KBuildSycocaProgressDialog>
-#include <KLocalizedString>
-#include <KPluginFactory>
-
-#include "components/componentchooserarchivemanager.h"
-#include "components/componentchooserbrowser.h"
-#include "components/componentchooseremail.h"
-#include "components/componentchooserfilemanager.h"
-#include "components/componentchoosergeo.h"
-#include "components/componentchooserimageviewer.h"
-#include "components/componentchoosermusicplayer.h"
-#include "components/componentchooserpdfviewer.h"
-#include "components/componentchoosertel.h"
-#include "components/componentchooserterminal.h"
-#include "components/componentchoosertexteditor.h"
-#include "components/componentchooservideoplayer.h"
-
-extern KSERVICE_EXPORT int ksycoca_ms_between_checks;
-
-K_PLUGIN_FACTORY_WITH_JSON(KcmComponentChooserFactory, "kcm_componentchooser.json", registerPlugin<KcmComponentChooser>();)
-
-KcmComponentChooser::KcmComponentChooser(QObject *parent, const KPluginMetaData &metaData)
-    : KQuickManagedConfigModule(parent, metaData)
-    , m_browsers(new ComponentChooserBrowser(this))
-    , m_fileManagers(new ComponentChooserFileManager(this))
-    , m_terminalEmulators(new ComponentChooserTerminal(this))
-    , m_emailClients(new ComponentChooserEmail(this))
-    , m_geoUriHandlers(new ComponentChooserGeo(this))
-    , m_telUriHandlers(new ComponentChooserTel(this))
-    , m_textEditors(new ComponentChooserTextEditor(this))
-    , m_imageViewers(new ComponentChooserImageViewer(this))
-    , m_musicPlayers(new ComponentChooserMusicPlayer(this))
-    , m_videoPlayers(new ComponentChooserVideoPlayer(this))
-    , m_pdfViewers(new ComponentChooserPdfViewer(this))
-    , m_archiveManagers(new ComponentChooserArchiveManager(this))
-{
-    setButtons(Help | Default | Apply);
-
-    connect(browsers(), &ComponentChooser::indexChanged, this, &KcmComponentChooser::settingsChanged);
-    connect(fileManagers(), &ComponentChooser::indexChanged, this, &KcmComponentChooser::settingsChanged);
-    connect(terminalEmulators(), &ComponentChooser::indexChanged, this, &KcmComponentChooser::settingsChanged);
-    connect(emailClients(), &ComponentChooser::indexChanged, this, &KcmComponentChooser::settingsChanged);
-    connect(geoUriHandlers(), &ComponentChooser::indexChanged, this, &KcmComponentChooser::settingsChanged);
-    connect(telUriHandlers(), &ComponentChooser::indexChanged, this, &KcmComponentChooser::settingsChanged);
-    connect(textEditors(), &ComponentChooser::indexChanged, this, &KcmComponentChooser::settingsChanged);
-    connect(imageViewers(), &ComponentChooser::indexChanged, this, &KcmComponentChooser::settingsChanged);
-    connect(musicPlayers(), &ComponentChooser::indexChanged, this, &KcmComponentChooser::settingsChanged);
-    connect(videoPlayers(), &ComponentChooser::indexChanged, this, &KcmComponentChooser::settingsChanged);
-    connect(pdfViewers(), &ComponentChooser::indexChanged, this, &KcmComponentChooser::settingsChanged);
-    connect(archiveManagers(), &ComponentChooser::indexChanged, this, &KcmComponentChooser::settingsChanged);
-}
-
-ComponentChooser *KcmComponentChooser::browsers() const
-{
-    return m_browsers;
-}
-
-ComponentChooser *KcmComponentChooser::emailClients() const
-{
-    return m_emailClients;
-}
-
-ComponentChooser *KcmComponentChooser::terminalEmulators() const
-{
-    return m_terminalEmulators;
-}
-
-ComponentChooser *KcmComponentChooser::fileManagers() const
-{
-    return m_fileManagers;
-}
-
-ComponentChooser *KcmComponentChooser::geoUriHandlers() const
-{
-    return m_geoUriHandlers;
-}
-
-ComponentChooser *KcmComponentChooser::telUriHandlers() const
-{
-    return m_telUriHandlers;
-}
-
-ComponentChooser *KcmComponentChooser::textEditors() const
-{
-    return m_textEditors;
-}
-
-ComponentChooser *KcmComponentChooser::imageViewers() const
-{
-    return m_imageViewers;
-}
-
-ComponentChooser *KcmComponentChooser::musicPlayers() const
-{
-    return m_musicPlayers;
-}
-
-ComponentChooser *KcmComponentChooser::videoPlayers() const
-{
-    return m_videoPlayers;
-}
-
-ComponentChooser *KcmComponentChooser::pdfViewers() const
-{
-    return m_pdfViewers;
-}
-
-ComponentChooser *KcmComponentChooser::archiveManagers() const
-{
-    return m_archiveManagers;
-}
-
-void KcmComponentChooser::defaults()
-{
-    m_browsers->defaults();
-    m_fileManagers->defaults();
-    m_terminalEmulators->defaults();
-    m_emailClients->defaults();
-    m_geoUriHandlers->defaults();
-    m_telUriHandlers->defaults();
-    m_textEditors->defaults();
-    m_imageViewers->defaults();
-    m_musicPlayers->defaults();
-    m_videoPlayers->defaults();
-    m_pdfViewers->defaults();
-    m_archiveManagers->defaults();
-}
-
-void KcmComponentChooser::load()
-{
-    m_browsers->load();
-    m_fileManagers->load();
-    m_terminalEmulators->load();
-    m_emailClients->load();
-    m_geoUriHandlers->load();
-    m_telUriHandlers->load();
-    m_textEditors->load();
-    m_imageViewers->load();
-    m_musicPlayers->load();
-    m_videoPlayers->load();
-    m_pdfViewers->load();
-    m_archiveManagers->load();
-}
-
-void KcmComponentChooser::save()
-{
-    QList<ComponentChooser *> componentsSaved;
-
-    auto handleSave = [&componentsSaved](ComponentChooser *chooser) {
-        if (chooser->isSaveNeeded()) {
-            chooser->save();
-            componentsSaved.append(chooser);
-        }
-    };
-    handleSave(m_browsers);
-    handleSave(m_fileManagers);
-    handleSave(m_terminalEmulators);
-    handleSave(m_emailClients);
-    handleSave(m_geoUriHandlers);
-    handleSave(m_telUriHandlers);
-    handleSave(m_textEditors);
-    handleSave(m_imageViewers);
-    handleSave(m_musicPlayers);
-    handleSave(m_videoPlayers);
-    handleSave(m_pdfViewers);
-    handleSave(m_archiveManagers);
-
-    QDBusMessage message = QDBusMessage::createMethodCall(QStringLiteral("org.kde.klauncher5"),
-                                                          QStringLiteral("/KLauncher"),
-                                                          QStringLiteral("org.kde.KLauncher"),
-                                                          QStringLiteral("reparseConfiguration"));
-    QDBusConnection::sessionBus().send(message);
-
-    // HACK to ensure mime cache is updated right away
-    ComponentChooser::forceReloadServiceCache();
-
-    for (auto *componentSaved : componentsSaved) {
-        componentSaved->onSaved();
-    }
-}
-
-bool KcmComponentChooser::isDefaults() const
-{
-    return m_browsers->isDefaults() && m_fileManagers->isDefaults() && m_terminalEmulators->isDefaults() && m_emailClients->isDefaults()
-        && m_geoUriHandlers->isDefaults() && m_telUriHandlers->isDefaults() && m_textEditors->isDefaults() && m_imageViewers->isDefaults()
-        && m_musicPlayers->isDefaults() && m_videoPlayers->isDefaults() && m_pdfViewers->isDefaults() && m_archiveManagers->isDefaults();
-}
-
-bool KcmComponentChooser::isSaveNeeded() const
-{
-    return m_browsers->isSaveNeeded() || m_fileManagers->isSaveNeeded() || m_terminalEmulators->isSaveNeeded() || m_emailClients->isSaveNeeded()
-        || m_geoUriHandlers->isSaveNeeded() || m_telUriHandlers->isSaveNeeded() || m_textEditors->isSaveNeeded() || m_imageViewers->isSaveNeeded()
-        || m_musicPlayers->isSaveNeeded() || m_videoPlayers->isSaveNeeded() || m_pdfViewers->isSaveNeeded() || m_archiveManagers->isSaveNeeded();
-}
-
-#include "kcm_componentchooser.moc"
-
-#include "moc_kcm_componentchooser.cpp"
diff --git a/kcms/componentchooser/kcm_componentchooser.h b/kcms/componentchooser/kcm_componentchooser.h
deleted file mode 100644
index dc49e53d55..0000000000
--- a/kcms/componentchooser/kcm_componentchooser.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
-    SPDX-FileCopyrightText: 2020 Tobias Fella <fella at posteo.de>
-    SPDX-FileCopyrightText: 2022 Méven Car <meven at kde.org>
-
-    SPDX-License-Identifier: GPL-2.0-or-later
-*/
-
-#pragma once
-
-#include <KQuickManagedConfigModule>
-
-#include "componentchooser.h"
-
-class ComponentChooserData;
-
-class KcmComponentChooser : public KQuickManagedConfigModule
-{
-    Q_OBJECT
-    Q_PROPERTY(ComponentChooser *browsers READ browsers CONSTANT)
-    Q_PROPERTY(ComponentChooser *emailClients READ emailClients CONSTANT)
-    Q_PROPERTY(ComponentChooser *terminalEmulators READ terminalEmulators CONSTANT)
-    Q_PROPERTY(ComponentChooser *fileManagers READ fileManagers CONSTANT)
-    Q_PROPERTY(ComponentChooser *geoUriHandlers READ geoUriHandlers CONSTANT)
-    Q_PROPERTY(ComponentChooser *telUriHandlers READ telUriHandlers CONSTANT)
-    Q_PROPERTY(ComponentChooser *textEditors READ textEditors CONSTANT)
-    Q_PROPERTY(ComponentChooser *imageViewers READ imageViewers CONSTANT)
-    Q_PROPERTY(ComponentChooser *musicPlayers READ musicPlayers CONSTANT)
-    Q_PROPERTY(ComponentChooser *videoPlayers READ videoPlayers CONSTANT)
-    Q_PROPERTY(ComponentChooser *pdfViewers READ pdfViewers CONSTANT)
-    Q_PROPERTY(ComponentChooser *archiveManagers READ archiveManagers CONSTANT)
-
-public:
-    KcmComponentChooser(QObject *parent, const KPluginMetaData &metaData);
-
-    ComponentChooser *browsers() const;
-    ComponentChooser *emailClients() const;
-    ComponentChooser *terminalEmulators() const;
-    ComponentChooser *fileManagers() const;
-    ComponentChooser *geoUriHandlers() const;
-    ComponentChooser *telUriHandlers() const;
-    ComponentChooser *textEditors() const;
-    ComponentChooser *imageViewers() const;
-    ComponentChooser *musicPlayers() const;
-    ComponentChooser *videoPlayers() const;
-    ComponentChooser *pdfViewers() const;
-    ComponentChooser *archiveManagers() const;
-
-    void defaults() override;
-    void load() override;
-    void save() override;
-    bool isDefaults() const override;
-    bool isSaveNeeded() const override;
-
-private:
-    ComponentChooser *m_browsers;
-    ComponentChooser *m_fileManagers;
-    ComponentChooser *m_terminalEmulators;
-    ComponentChooser *m_emailClients;
-    ComponentChooser *m_geoUriHandlers;
-    ComponentChooser *m_telUriHandlers;
-    ComponentChooser *m_textEditors;
-    ComponentChooser *m_imageViewers;
-    ComponentChooser *m_musicPlayers;
-    ComponentChooser *m_videoPlayers;
-    ComponentChooser *m_pdfViewers;
-    ComponentChooser *m_archiveManagers;
-};
diff --git a/kcms/componentchooser/kcm_componentchooser.json b/kcms/componentchooser/kcm_componentchooser.json
deleted file mode 100644
index 47964702c1..0000000000
--- a/kcms/componentchooser/kcm_componentchooser.json
+++ /dev/null
@@ -1,191 +0,0 @@
-{
-    "KPlugin": {
-        "BugReportUrl": "https://bugs.kde.org/enter_bug.cgi?product=systemsettings&component=kcm_componentchooser",
-        "Description": "Choose default Applications",
-        "Description[ar]": "يختار التطبيقات المبدئية",
-        "Description[az]": "Standart tətbiqləri seçin",
-        "Description[be]": "Выбар прадвызначаных праграм",
-        "Description[bg]": "Избиране на стандартни програми",
-        "Description[ca at valencia]": "Seleccioneu les aplicacions predeterminades",
-        "Description[ca]": "Trieu les aplicacions predeterminades",
-        "Description[cs]": "Vyberte výchozí aplikace",
-        "Description[da]": "Vælg standardprogrammer",
-        "Description[de]": "Standard-Anwendungen auswählen",
-        "Description[el]": "Επιλογή προεπιλεγμένων εφαρμογών",
-        "Description[en_GB]": "Choose default Applications",
-        "Description[eo]": "Elekti apriorajn Aplikaĵojn",
-        "Description[es]": "Escoger las aplicaciones predeterminadas",
-        "Description[et]": "Vaikimisi rakenduste valimine",
-        "Description[eu]": "Hautatu lehenetsitako aplikazioak",
-        "Description[fi]": "Valitse oletussovellukset",
-        "Description[fr]": "Sélectionner les applications par défaut",
-        "Description[gl]": "Escoller as aplicacións predeterminadas.",
-        "Description[he]": "בחירת יישומי ברירת־מחדל",
-        "Description[hu]": "Alapértelmezett alkalmazások kiválasztása",
-        "Description[ia]": "Selige Applicationes predefinite",
-        "Description[id]": "Pilih aplikasi baku",
-        "Description[ie]": "Selecter applicationes predefinit",
-        "Description[is]": "Velja sjálfgefin forrit",
-        "Description[it]": "Scegli le applicazioni predefinite",
-        "Description[ja]": "デフォルトのアプリケーションを選択",
-        "Description[ka]": "აირჩიეთ ნაგულისხმევი აპლიკაციები",
-        "Description[ko]": "기본 앱 선택",
-        "Description[lt]": "Pasirinkti numatytąsias programas",
-        "Description[lv]": "Izvēlēties noklusējuma programmas",
-        "Description[nl]": "Standaard toepassingen kiezen",
-        "Description[nn]": "Vel standardprogram",
-        "Description[pa]": "ਮੂਲ ਐਪਲੀਕੇਸ਼ਨਾਂ ਚੁਣੋ",
-        "Description[pl]": "Wybierz domyślne programy",
-        "Description[pt]": "Escolher as Aplicações Predefinidas",
-        "Description[pt_BR]": "Escolha os aplicativos padrão",
-        "Description[ro]": "Alege aplicații implicite",
-        "Description[ru]": "Выбор приложений по умолчанию",
-        "Description[sa]": "पूर्वनिर्धारितं अनुप्रयोगं चिनोतु",
-        "Description[sk]": "Vybrať predvolené aplikácie",
-        "Description[sl]": "Izberi privzete programe",
-        "Description[sv]": "Välj standardprogram",
-        "Description[ta]": "இயல்பிருப்பு செயலிகளை தேர்ந்தெடுங்கள்",
-        "Description[tr]": "Öntanımlı Uygulamaları Seç",
-        "Description[uk]": "Вибір типових програм",
-        "Description[vi]": "Chọn ứng dụng mặc định",
-        "Description[x-test]": "xxChoose default Applicationsxx",
-        "Description[zh_CN]": "选择默认应用程序",
-        "Description[zh_TW]": "選擇預設應用程式",
-        "FormFactors": [
-            "desktop",
-            "handset",
-            "tablet",
-            "mediacenter"
-        ],
-        "Icon": "preferences-desktop-default-applications",
-        "Name": "Default Applications",
-        "Name[af]": "Verstektoepassings",
-        "Name[ar]": "التطبيقات المبدئية",
-        "Name[az]": "Standart Tətbiqlər",
-        "Name[be at latin]": "Zmoŭčanyja aplikacyi",
-        "Name[be]": "Прадвызначаныя праграмы",
-        "Name[bg]": "Стандартни програми",
-        "Name[bn]": "ডিফল্ট অ্যাপলিকেশন",
-        "Name[bn_IN]": "ডিফল্ট অ্যাপ্লিকেশন",
-        "Name[bs]": "Podrazumijevani programi",
-        "Name[ca at valencia]": "Aplicacions predeterminades",
-        "Name[ca]": "Aplicacions predeterminades",
-        "Name[cs]": "Výchozí aplikace",
-        "Name[csb]": "Domëslné programë",
-        "Name[da]": "Standardprogrammer",
-        "Name[de]": "Standard-Anwendungen",
-        "Name[el]": "Προεπιλεγμένες εφαρμογές",
-        "Name[en_GB]": "Default Applications",
-        "Name[eo]": "Aprioraj aplikaĵoj",
-        "Name[es]": "Aplicaciones predeterminadas",
-        "Name[et]": "Vaikimisi rakendused",
-        "Name[eu]": "Aplikazio lehenetsiak",
-        "Name[fa]": "کاربردهای پیش‌فرض",
-        "Name[fi]": "Oletusohjelmat",
-        "Name[fr]": "Applications par défaut",
-        "Name[fy]": "Standert applikaasjes",
-        "Name[ga]": "Feidhmchláir Réamhshocraithe",
-        "Name[gl]": "Aplicacións predeterminadas",
-        "Name[gu]": "મૂળભૂત કાર્યક્રમો",
-        "Name[he]": "יישומי ברירת־מחדל",
-        "Name[hi]": "डिफ़ॉल्ट अनुप्रयोग",
-        "Name[hne]": "डिफाल्ट अनुपरयोग",
-        "Name[hr]": "Zadane aplikacije",
-        "Name[hsb]": "Standardne aplikacije",
-        "Name[hu]": "Alapértelmezett alkalmazások",
-        "Name[ia]": "Applicationes predefinite",
-        "Name[id]": "Aplikasi Baku",
-        "Name[ie]": "Applicationes predefinit",
-        "Name[is]": "Sjálfgefin forrit",
-        "Name[it]": "Applicazioni predefinite",
-        "Name[ja]": "デフォルトのアプリケーション",
-        "Name[ka]": "ნაგულისხმევი აპლიკაციები",
-        "Name[kk]": "Әдетті қолданбалары",
-        "Name[km]": "កម្មវិធី​លំនាំដើម​",
-        "Name[kn]": "ಪೂರ್ವನಿಯೋಜಿತ (ಡಿಫಾಲ್ಟ್) ಅನ್ವಯಗಳು",
-        "Name[ko]": "기본 앱",
-        "Name[ku]": "Sepanên Standard",
-        "Name[lt]": "Numatytosios programos",
-        "Name[lv]": "Noklusētās programmas",
-        "Name[mai]": "पूर्वनिर्धारित अनुप्रयोग",
-        "Name[mk]": "Стандардни апликации",
-        "Name[ml]": "സഹജമായ പ്രയോഗങ്ങള്‍",
-        "Name[mr]": "मूलभूत अनुप्रयोग",
-        "Name[nb]": "Standardprogrammer",
-        "Name[nds]": "Standardprogrammen",
-        "Name[ne]": "पूर्वनिर्धारित अनुप्रयोग",
-        "Name[nl]": "Standaard toepassingen",
-        "Name[nn]": "Standard­program",
-        "Name[or]": "ପୂର୍ବନିର୍ଦ୍ଧାରିତ ପ୍ରୟୋଗଗୁଡ଼ିକ",
-        "Name[pa]": "ਡਿਫਾਲਟ ਐਪਲੀਕੇਸ਼ਨ",
-        "Name[pl]": "Domyślne programy",
-        "Name[pt]": "Aplicações Predefinidas",
-        "Name[pt_BR]": "Aplicativos padrão",
-        "Name[ro]": "Aplicații implicite",
-        "Name[ru]": "Приложения по умолчанию",
-        "Name[sa]": "पूर्वनिर्धारित अनुप्रयोग",
-        "Name[si]": "පෙරනිමි යෙදුම්",
-        "Name[sk]": "Štandardné aplikácie",
-        "Name[sl]": "Privzeti programi",
-        "Name[sr at ijekavian]": "Подразумијевани програми",
-        "Name[sr at ijekavianlatin]": "Podrazumijevani programi",
-        "Name[sr at latin]": "Podrazumevani programi",
-        "Name[sr]": "Подразумевани програми",
-        "Name[sv]": "Standardprogram",
-        "Name[ta]": "இயல்பிருப்பு செயலிகள்",
-        "Name[te]": "అప్రమెయ కార్యక్షేత్రాలు",
-        "Name[tg]": "Барномаҳои стандартӣ",
-        "Name[th]": "โปรแกรมปริยายต่าง ๆ",
-        "Name[tr]": "Öntanımlı Uygulamalar",
-        "Name[ug]": "كۆڭۈلدىكى پروگراممىلار",
-        "Name[uk]": "Типові програми",
-        "Name[uz at cyrillic]": "Андоза дастурлар",
-        "Name[uz]": "Andoza dasturlar",
-        "Name[vi]": "Ứng dụng mặc định",
-        "Name[wa]": "Prémetous programes",
-        "Name[x-test]": "xxDefault Applicationsxx",
-        "Name[zh_CN]": "默认应用程序",
-        "Name[zh_TW]": "預設應用程式"
-    },
-    "X-KDE-Keywords": "default applications,default apps,components,component chooser,resources,web browser,browser,internet,file manager,dolphin,email,e-mail,email client,terminal,terminal emulator,konsole,defaults,open with,file association",
-    "X-KDE-Keywords[ar]": "التطبيقات الافتراضية,التطبيقات الافتراضية,المكونات,محدد المكونات,الموارد,متصفح الويب,المتصفح,الإنترنت,مدير الملفات,دولفين,البريد الإلكتروني,البريد الإلكتروني,عميل البريد الإلكتروني,المحطة الطرفية,محاكي المحطة الطرفية,وحدة التحكم,الإعدادات الافتراضية,الفتح باستخدام,ارتباط الملف",
-    "X-KDE-Keywords[az]": "default applications,default apps,components,component chooser,resources,web browser,browser,internet,file manager,dolphin,email,e-mail,email client,terminal,terminal emulator,konsole,defaults,open with,file association,standart tətbiqlər,ilkin tətbiqlər,tərkib hissələri,komponent seçimi,mənbələr,veb-bələdçilər,bələdçi,fayl idarəedicisi,e-poçt,epoçt müştərisi,ilkin,bununla açmaq,fayl əlaqələri",
-    "X-KDE-Keywords[be]": "прадвызначаныя праграмы,кампаненты,выбар кампанентаў,рэсурсы,вэб-браўзер,браўзер,інтэрнэт,кіраўнік файлаў,dolphin,электронная пошта,email,паштовы кліент,тэрмінал, эмулятар тэрмінала, кансоль,прадвызначана,адкрыць з дапамогай,асацыяцыя файлаў",
-    "X-KDE-Keywords[bg]": "приложения по подразбиране,приложения по подразбиране,компоненти,избор на компоненти,ресурси,уеб браузър,браузър,интернет,файлов мениджър,dolphin,имейл,имейл,имейл клиент,терминал,терминален емулатор,конзола,по подразбиране,отваряне с,асоцииране на файлове",
-    "X-KDE-Keywords[ca at valencia]": "aplicacions predeterminades,components,selector de components,recursos,navegador web,navegador,internet,gestor de fitxers,dolphin,correu electrònic,correu-e,client de correu,terminal,emulador de terminal,konsole,predeterminats,obri amb,associació de fitxers",
-    "X-KDE-Keywords[ca]": "aplicacions predeterminades,components,selector de components,recursos,navegador web,navegador,internet,gestor de fitxers,dolphin,correu electrònic,correu-e,client de correu,terminal,emulador de terminal,konsole,predeterminats,obre amb,associació de fitxers",
-    "X-KDE-Keywords[en_GB]": "default applications,default apps,components,component chooser,resources,web browser,browser,internet,file manager,dolphin,email,e-mail,email client,terminal,terminal emulator,konsole,defaults,open with,file association",
-    "X-KDE-Keywords[es]": "aplicaciones predeterminadas,componentes,selector de componente,recursos,navegador web,navegador,internet,gestor de archivos,dolphin,correo electrónico,email,e-mail,cliente de correo electrónico,terminal,emulador de terminal,konsole,predeterminados,abrir con,asociación de archivos",
-    "X-KDE-Keywords[eu]": "lehenetsitako aplikazioak,lehenetsitako ap-ak,osagaiak,osagai-hautatzailea,baliabideak,web arakatzailea,arakatzailea,internet,fitxategi-kudeatzailea,dolphin,e-posta,e-posta bezeroa, terminala,terminal-emulatzailea,konsole,lehenespenak,ireki honekin,fitxategi elkarketak",
-    "X-KDE-Keywords[fi]": "oletussovellus,oletussovellukset,oletusohjelma,oletusohjelmat,osat,komponentit,osavalitsin,komponenttivalitsin,resurssit,verkkoselain,selain,internet,tiedostonhallinta,dolphin,sähköposti,sähköpostiohjelma,pääte,pääte-emulaattori,konsole,oletukset,tiedostokytkökset,tiedostokytkös",
-    "X-KDE-Keywords[fr]": "applications par défaut, composants, sélecteur de composants, ressources, navigateur Internet, navigateur, Internet, gestionnaire de fichiers, Dolphin, courrier électronique, courriel, client de courrier électronique,terminal,émulateur de terminal, Konsole, par défaut, ouvrir avec, association de fichiers",
-    "X-KDE-Keywords[gl]": "default applications,aplicacións predeterminadas,default apps,aplis predeterminadas,components,compoñentes,component chooser,selector de compoñentes,resources,recursos,web browser,navegador web,browser,navegador,internet,file manager,xestor de ficheiros,dolphin,email,correo electrónico,e-mail,email client,cliente de correo electrónico,terminal,terminal emulator,emulador de terminal,konsole,defaults,predeterminadas,predeterminados,open with,abrir con,file association,asociación de ficheiros",
-    "X-KDE-Keywords[he]": "יישומים של ברירת מחדל,אפליקציות ברירת מחדל,יישומי ברירת מחדל,רכיבים,בוחר רכיבים,משאבים,דפדפן אינטרנט,דפדפן,אינטרנט,מנהל קבצים,דולפין,דואר אלקטרוני,דוא״ל,דוא\"ל,אימייל,לקוח דואר אלקטרוני,לקוח דוא״ל,לקוח דוא\"ל,לקוח אימייל,מסוף,אמולטור מסוף,מדמה מסוף,קונסול,ברירות מחדל,פתיחה באמצעות,שיוך קבצים,קישור קבצים,בורר רכיבים,מייל,לקוח מייל,הדמיית מסוף,פתח באמצעות",
-    "X-KDE-Keywords[hu]": "alapértelmezett alkalmazások,alapértelmezett alkalmazások,komponensek,komponensválasztó,erőforrások,webböngésző,böngésző,internet,fájlkezelő,dolphin,e-mail,e-mail kliens,terminál,terminálemulátor,konsole,alapértelmezett,megnyitás mással,fájltársítás",
-    "X-KDE-Keywords[ia]": "applicationes predefinite,apps predefinite,componentes,selector de componente, ressources, navigator web,navigator,internet,gerente de file,dolphin,eposta,e-posta, cliente de eposta,terminal,emulator de terminal,konsole,predefinitas,aperi con, association de file",
-    "X-KDE-Keywords[id]": "aplikasi baku,aplikasi baku,komponen,pemilih komponen,sumber daya,peramban web,peramban,internet,pengelola file,dolphin,surel,email,klien surel,terminal,emulator terminal,konsole,baku,buka dengan,asosiasi file",
-    "X-KDE-Keywords[is]": "sjálfgefin forrit,einingar,einingaval,aðföng,vefvafri,vafri,internet,skráastjóri,dolphin,tölvupóstur,tölvupóstforrit,skjáhermir,konsole,sjálfgildi,opna með,skráavensl",
-    "X-KDE-Keywords[it]": "applicazioni predefinite,componenti,selettore componenti,risorse,browser web,browser,internet,gestore file,dolphin,email,posta elettronica,client di posta elettronica,terminale,emulatore di terminale,konsole,predefiniti,apri con,associazione dei file",
-    "X-KDE-Keywords[ka]": "default applications,default apps,components,component chooser,resources,web browser,browser,internet,file manager,dolphin,email,e-mail,email client,terminal,terminal emulator,konsole,defaults,open with,file association,ნაგულისხმევი აპლიკაციები,ნაგულისხმევი აპები,კომპონენტის ამრჩევი,რესურსები,ბრაუზერი,ინტერნეტი,ელფოსტა,ელფოსტის კლიენტი,ტერმინალი,ტერმინალის ემულატორი",
-    "X-KDE-Keywords[ko]": "default applications,default apps,components,component chooser,resources,web browser,browser,internet,file manager,dolphin,email,e-mail,email client,terminal,terminal emulator,konsole,defaults,open with,file association,기본 프로그램,구성요소,구성 요소,자원,이메일,전자 우편,전자우편,텍스트 편집기,편집기,인스턴트 메신저,메신저,터미널 에뮬레이터,터미널,웹 브라우저,인터넷,하이퍼링크,기본값,다음으로 열이,파일 연결",
-    "X-KDE-Keywords[lv]": "noklusētās programmas,noklusētās lietojumprogrammas,komponentes,komponenšu atlasītājs,resursi,tīmekļa pārlūks, pārlūks,pārlūkprogramma,internets,datņu pārvaldnieks,dolphin,delfīns,e-pasts,e-pasta klients,terminālis,termināļa emulators,konsole,noklusējumi,atvērt ar,datņu asociācijas",
-    "X-KDE-Keywords[nl]": "standaard toepassingen,componenten,componentenkiezer,hulpbronnen,webbrowser,browser,internet,bestandsbeheerder,dolphin,e-mail,e-mail-client,terminal,terminal-emulator,konsole,standaarden,openen met,bestandsassociatie",
-    "X-KDE-Keywords[nn]": "standardprogram,standardappar,komponentar,komponentveljar,ressursar,resursar,nettlesar,weblesar,Internett,filhandsamar,dolphin,e-post,e-postklient,e-postprogram,terminalemulator,konsole,standard,opna med,filtilknyting",
-    "X-KDE-Keywords[pa]": "ਮੂਲ,ਡਿਫਾਲਟ,ਡਿਫਾਲਟ ਐਪੀਲਕੇਸ਼ਨ,ਐਪਲੀਕੇਸ਼ਨ,ਭਾਗ,ਭਾਗ ਚੋਣਕਾਰ,ਸਰੋਤ,ਈਮੇਲ,ਈ-ਮੇਲ,ਈਮੇਲ ਕਲਾਇਟ,ਟਰਮੀਨਲ ਈਮੂਲੇਟਰ,ਵੈੱਬ ਬਰਾਊਜ਼ਰ,ਬਰਾਊਜ਼ਰ, ਇੰਟਰਨੈੱਟ,ਬ੍ਰਾਊਜ਼ਰ,ਫਾਇਲ ਮੈਨੇਜਰ,ਡਾਲਫਿਨ,ਈਮੇਲ,ਕਨਸੋਲ,ਇਸ ਨਾਲ ਖੋਲ੍ਹੋ,ਫਾਇਲ ਸੰਬੰਧ",
-    "X-KDE-Keywords[pl]": "domyślne aplikacje,domyślne apki,składniki,komponenty,wybór składników,zasoby,e-mail,poczta,klient pocztowy,edytor teksu,komunikator internetowy,emulator terminala,konsola,domyślne,otwórz w,skojarzenia plików",
-    "X-KDE-Keywords[pt_BR]": "aplicativos padrão,apps padrão,componentes,seletor de componentes,recursos,navegador web,navegador da internet,internet,gerenciador de arquivos,dolphin,email,e-mail,cliente de e-mail,terminal,emulador de terminal,konsole,padrões,abrir com,associação de arquivos",
-    "X-KDE-Keywords[ru]": "default applications,default apps,components,component chooser,resources,web browser,browser,internet,file manager,dolphin,email,e-mail,email client,terminal,terminal emulator,konsole,defaults,open with,file association,приложения по умолчанию,компоненты,ресурсы,браузер,интернет,диспетчер файлов,электронная почта,контакт электронной почты,эмулятор терминала,консоль,открытие файла,приложение для открытия файла,ассоциация файла,привязка файла",
-    "X-KDE-Keywords[sa]": "पूर्वनिर्धारित अनुप्रयोगाः,पूर्वनिर्धारितअनुप्रयोगाः,घटकाः,घटकचयनकर्ता,संसाधनाः,वेब ब्राउज़र,ब्राउजर,इण्टरनेट,सञ्चिकाप्रबन्धक,डॉल्फिन,ईमेल,ई-मेल,ईमेल क्लायन्ट,टर्मिनल,टर्मिनल एमुलेटर,konsole,पूर्वनिर्धारित,ओपन सह,सञ्चिकासङ्घटनम्",
-    "X-KDE-Keywords[sk]": "predvolené aplikácie,predvolené apky,komponenty,výber komponentu,zdroje,webový prehliadač,prehliadač,internet,správca súborov,dolphin,email,e-mail,emailový klient,terminál,emulátor terminálu,konsole,predvolené,otvoriť s,priradenie aplikácií",
-    "X-KDE-Keywords[sl]": "privzeti programi,privzete aplikacije,komponenta,izbirnik komponente,sestavni del,izbirnik enot,viri,spletni brskalnik,e-pošta,epošta,urejevalnik besedila,hipno sporočanje,hipni sporočilnik,posnemovalnik terminala,URL,hiperpovezave,hiper-povezave,povezave,naslov URL,konzola,privzete vrednosti,odpri z,asociacija z datotekami",
-    "X-KDE-Keywords[sv]": "standardprogram,komponenter,komponentväljare,resurser,webbläsare,Internet,filhanterare,dolphin,e-post,e-postprogram,terminal,terminalemulator,Terminal,förval,öppna med, filassociation",
-    "X-KDE-Keywords[ta]": "default applications,default apps,components,component chooser,resources,web browser,browser,internet,file manager,dolphin,email,e-mail,email client,terminal,terminal emulator,konsole,defaults,open with,file association, இயல்பிருப்பு செயலிகள் ,இயல்பிருப்பு பயன்பாடுகள், முன்னிருப்பு செயலிகள், முன்னிருப்பு பயன்பாடுகள், டால்பின்,கான்சோல், முனையக் கருவி, முனையம், மின்னஞ்சல், அஞ்சல்,உலாவி, கோப்பு உலாவி, இணையம், வலைதளம், இணைய உலாவி, இயல்பிருப்பு, இதனால் திற",
-    "X-KDE-Keywords[tr]": "varsayılan uygulamalar,öntanımlı uygulamalar,bileşenler,bileşen seçicisi,özkaynaklar,kaynaklar,web tarayıcısı,tarayıcı,internet,dosya yöneticisi,dolphin,e-posta,e-posta,e-posta istemcisi,terminal,terminal emülatörü,uçbirim,uçbirim öykünücüsü,konsole,varsayılanlar,öntanımlılar,birlikte aç,dosya ilişkilendirmesi",
-    "X-KDE-Keywords[uk]": "default applications,default apps,components,component chooser,resources,web browser,browser,internet,file manager,dolphin,email,e-mail,email client,terminal,terminal emulator,konsole,defaults,open with,file association,типові,програми,програма,додаток,типовий,типова,вибір,компонент,ресурс,веббраузер,браузер,переглядач,перегляд,інтернет,файл,керування,менеджер,долфін,дельфін,пошта,поштовий,клієнт,термінал,емулятор,консоль,типові,відкрити за допомогою,прив'язка файлів",
-    "X-KDE-Keywords[vi]": "default applications,default apps,components,component chooser,resources,web browser,browser,internet,file manager,dolphin,email,e-mail,email client,terminal,terminal emulator,konsole,defaults,open with,file association,ứng dụng mặc định,thành phần,bộ chọn thành phần,tài nguyên,trình duyệt web,trình duyệt,liên mạng,trình quản lí tệp,thư điện tử,trình khách thư,dòng lệnh,trình giả lập thiết bị đầu cuối,mặc định,mở bằng,liên kết tệp",
-    "X-KDE-Keywords[x-test]": "xxdefault applicationsxx,xxdefault appsxx,xxcomponentsxx,xxcomponent chooserxx,xxresourcesxx,xxweb browserxx,xxbrowserxx,xxinternetxx,xxfile managerxx,xxdolphinxx,xxemailxx,xxe-mailxx,xxemail clientxx,xxterminalxx,xxterminal emulatorxx,xxkonsolexx,xxdefaultsxx,xxopen withxx,xxfile associationxx",
-    "X-KDE-Keywords[zh_CN]": "default applications,default apps,components,component chooser,resources,web browser,browser,internet,file manager,dolphin,email,e-mail,email client,terminal,terminal emulator,konsole,defaults,open with,file association,morenyingyongchengxu,morenyingyong,zujian,zujianxuanzeqi,ziyuan,wangyeliulanqi,liulanqi,hulianwang,wenjianguanliqi,dianziyoujian,dianziyoujiankehuduan,zhongduan,zhongduanmoniqi,moren,dakaifangshi,shiyongqitayingyongdakai,wenjianguanlian,默认应用程序,默认应用,组件,组件选择器,资源,网页浏览器,浏览器,互联网,文件管理器,电子邮件,电子邮件客户端,终端,终端模拟器,默认,打开方式,使用其他应用打开,文件关联",
-    "X-KDE-Keywords[zh_TW]": "預設應用程式,預設程式,預設app,預設 app,網路瀏覽器,瀏覽器,網際網路,檔案管理員,檔案總管,dolphin,電子郵件,郵件,信件,客戶端,用戶端,終端機,終端機模擬器,預設值,開啟方式,開啟使用,檔案關聯",
-    "X-KDE-System-Settings-Parent-Category": "applications-defaults",
-    "X-KDE-Weight": 10
-}
diff --git a/kcms/componentchooser/terminal_settings.kcfg b/kcms/componentchooser/terminal_settings.kcfg
deleted file mode 100644
index bfa61eb9f1..0000000000
--- a/kcms/componentchooser/terminal_settings.kcfg
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<kcfg xmlns="http://www.kde.org/standards/kcfg/1.0"
-       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-       xsi:schemaLocation="http://www.kde.org/standards/kcfg/1.0
-       http://www.kde.org/standards/kcfg/1.0/kcfg.xsd" >
-   <kcfgfile name="kdeglobals"/>
-
-   <group name="General">
-     <entry name="terminalApplication" key="TerminalApplication" type="String">
-       <default>konsole</default>
-     </entry>
-     <entry name="terminalService" key="TerminalService" type="String">
-       <default>org.kde.konsole.desktop</default>
-     </entry>
-   </group>
-</kcfg>
diff --git a/kcms/componentchooser/terminal_settings.kcfgc b/kcms/componentchooser/terminal_settings.kcfgc
deleted file mode 100644
index b30245ab85..0000000000
--- a/kcms/componentchooser/terminal_settings.kcfgc
+++ /dev/null
@@ -1,5 +0,0 @@
-File=terminal_settings.kcfg
-ClassName=TerminalSettings
-Mutators=true
-DefaultValueGetters=true
-ParentInConstructor=true
diff --git a/kcms/componentchooser/ui/ComponentComboBox.qml b/kcms/componentchooser/ui/ComponentComboBox.qml
deleted file mode 100644
index 32474d88f1..0000000000
--- a/kcms/componentchooser/ui/ComponentComboBox.qml
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
-    SPDX-FileCopyrightText: 2020 Tobias Fella <fella at posteo.de>
-    SPDX-FileCopyrightText: 2023 ivan tkachenko <me at ratijas.tk>
-
-    SPDX-License-Identifier: GPL-2.0-or-later
-*/
-
-import QtQuick
-import QtQuick.Controls as QQC2
-import org.kde.kirigami as Kirigami
-import org.kde.kitemmodels as KItemModels
-
-QQC2.ComboBox {
-    id: comboBox
-
-    property var component
-
-    model: component.applications
-    textRole: "name"
-    currentIndex: component.index
-
-    onActivated: component.select(currentIndex)
-
-    // HACK QQC2 doesn't support icons, so we just tamper with the desktop style ComboBox's background
-    function loadProps() {
-        if (!background || !background.hasOwnProperty("properties")) {
-            //not a KQuickStyleItem
-            return;
-        }
-
-        const props = background.properties || {};
-
-        background.properties = Qt.binding(() => {
-            const modelIndex = model.index(currentIndex, 0);
-            const currentIcon = model.data(modelIndex, model.KItemModels.KRoleNames.role("icon"));
-            return Object.assign(props, {
-                currentIcon,
-                iconColor: Kirigami.Theme.textColor,
-            });
-        });
-    }
-
-    Connections {
-        target: comboBox.component
-        function onIndexChanged() {
-            comboBox.loadProps();
-        }
-    }
-
-    delegate: QQC2.ItemDelegate {
-        width: ListView.view.width
-        text: model.name
-        highlighted: comboBox.highlightedIndex == index
-        icon.name: model.icon
-    }
-
-    Component.onCompleted: loadProps()
-}
diff --git a/kcms/componentchooser/ui/ComponentOverlay.qml b/kcms/componentchooser/ui/ComponentOverlay.qml
deleted file mode 100644
index 471b23b6b9..0000000000
--- a/kcms/componentchooser/ui/ComponentOverlay.qml
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
-    SPDX-FileCopyrightText: 2022 Méven Car <meven at kde.org>
-
-    SPDX-License-Identifier: GPL-2.0-or-later
-*/
-
-import QtQuick
-import QtQuick.Layouts
-import QtQuick.Controls as QQC2
-import org.kde.kirigami as Kirigami
-import org.kde.kcmutils as KCM
-
-Kirigami.Dialog {
-    id: root
-
-    property QtObject componentChooser
-
-    // type: list<string>
-    property var unsupportedMimeTypes: componentChooser?.unsupportedMimeTypes ?? []
-    // type: list<{ first, second }>
-    property var mimeTypesNotAssociated: componentChooser?.mimeTypesNotAssociated ?? []
-
-    function sanitize(input: string): string {
-        // Based on QQuickStyledTextPrivate::parseEntity
-        const table = {
-            '>': '>',
-            '<': '<',
-            '&': '&',
-            "'": ''',
-            '"': '"',
-            '\u00a0': ' ',
-        };
-        return input.replace(/[<>&'"\u00a0]/g, c => table[c]);
-    }
-
-    function formatListItem(item: string): string {
-        return "<li>" + sanitize(item) + "</li>";
-    }
-
-    function formatHtmlUnorderedStringList(list: list<string>): string {
-        return "<ul>" + list.map(formatListItem).join("\n") + "</ul>";
-    }
-
-    padding: Kirigami.Units.largeSpacing
-
-    onOpened: {
-        focus = true;
-    }
-
-    onClosed: {
-        componentChooser = null;
-    }
-
-    title: i18n("Details")
-
-    modal: true
-    QQC2.Overlay.modal: KcmPopupModal {}
-
-    contentItem: ColumnLayout {
-        enabled: root.componentChooser !== null
-        spacing: Kirigami.Units.smallSpacing
-
-        RowLayout {
-            Layout.fillWidth: true
-            spacing: Kirigami.Units.largeSpacing
-
-            Kirigami.Icon {
-                Layout.preferredWidth: Kirigami.Units.iconSizes.large
-                Layout.preferredHeight: Kirigami.Units.iconSizes.large
-                source: root.componentChooser?.applicationIcon()
-            }
-
-            Kirigami.Heading {
-                text: root.componentChooser?.applicationName() ?? ""
-                textFormat: Text.PlainText
-                level: 1
-                wrapMode: Text.Wrap
-                Layout.fillWidth: true
-                Layout.alignment: Qt.AlignVCenter
-            }
-        }
-
-        Kirigami.Heading {
-            text: i18n("This application can also open these file types:")
-            textFormat: Text.PlainText
-            visible: root.mimeTypesNotAssociated.length > 0
-            level: 3
-            wrapMode: Text.Wrap
-            Layout.fillWidth: true
-            Layout.bottomMargin: Kirigami.Units.largeSpacing
-        }
-        Kirigami.SelectableLabel {
-            visible: root.mimeTypesNotAssociated.length > 0
-            text: root.formatHtmlUnorderedStringList(
-                root.mimeTypesNotAssociated.map(
-                    ({first, second}) => i18nc(
-                        "@label %1 is a MIME type and %2 is an application name",
-                        "%1 (Currently opens in %2)",
-                        second,
-                        first,
-                    )
-                )
-            )
-            Layout.fillWidth: true
-        }
-        QQC2.Button {
-            visible: root.mimeTypesNotAssociated.length > 0
-            icon.name: root.componentChooser?.applicationIcon() ?? ""
-            text: i18nc(
-                "@action:button %1 is an application name",
-                "Open All in %1",
-                root.componentChooser?.applicationName() ?? ""
-            )
-            Layout.topMargin: Kirigami.Units.largeSpacing
-            onClicked: {
-                root.close();
-                root.componentChooser.saveMimeTypesNotAssociated();
-            }
-        }
-
-        Kirigami.Separator {
-            // extra double-spacing
-            Layout.fillWidth: true
-            Layout.margins: Kirigami.Units.largeSpacing
-            visible: root.unsupportedMimeTypes.length > 0
-                && root.mimeTypesNotAssociated.length > 0
-        }
-
-        Kirigami.Heading {
-            text: i18n("This application does not advertise support for the following file types, but may be able to open them anyway:")
-            textFormat: Text.PlainText
-            visible: root.unsupportedMimeTypes.length > 0
-            level: 3
-            wrapMode: Text.Wrap
-            Layout.fillWidth: true
-            Layout.bottomMargin: Kirigami.Units.largeSpacing
-        }
-        Kirigami.SelectableLabel {
-            visible: root.unsupportedMimeTypes.length > 0
-            text: root.formatHtmlUnorderedStringList(root.unsupportedMimeTypes)
-            Layout.fillWidth: true
-        }
-        QQC2.Button {
-            visible: root.unsupportedMimeTypes.length > 0
-            icon.name: root.componentChooser?.applicationIcon() ?? ""
-            text: root.componentChooser
-                ? i18nc("@action:button", "Force All to Open in %1", root.componentChooser.applicationName())
-                : ""
-            Layout.topMargin: Kirigami.Units.largeSpacing
-            onClicked: {
-                root.close();
-                root.componentChooser.saveAssociationUnsuportedMimeTypes();
-            }
-        }
-
-        QQC2.Button {
-            Layout.topMargin: Kirigami.Units.largeSpacing
-            icon.name: "configure-symbolic"
-            text: i18n("Configure Manually…")
-            visible: root.componentChooser !== null
-            onClicked: {
-                root.close();
-                KCM.KCMLauncher.openSystemSettings("kcm_filetypes");
-            }
-        }
-    }
-}
diff --git a/kcms/componentchooser/ui/KcmPopupModal.qml b/kcms/componentchooser/ui/KcmPopupModal.qml
deleted file mode 100644
index d68d636da9..0000000000
--- a/kcms/componentchooser/ui/KcmPopupModal.qml
+++ /dev/null
@@ -1,40 +0,0 @@
-/**
- * SPDX-FileCopyrightText: 2023 ivan tkachenko <me at ratijas.tk>
- * SPDX-License-Identifier: GPL-2.0-or-later
- */
-
-import QtQuick
-import org.kde.kirigami as Kirigami
-
-// Copy of Kirigami.Dialog modal overlay, with adjustments for KCM footer margin.
-Item {
-    id: background
-
-    // to account for extra margin in KCM footer
-    property int bottomMargin: 8
-
-    Kirigami.Separator {
-        id: separator
-        visible: false
-    }
-
-    // black background, fades in and out
-    Rectangle {
-        color: Qt.rgba(0, 0, 0, 0.3)
-        anchors {
-            fill: parent
-            // Don't cover the extra footer margin area to avoid eye-bleeding
-            // experience. KCM doesn't have control over user's interactions
-            // in that area anyway.
-            bottomMargin: background.bottomMargin + separator.implicitHeight
-        }
-    }
-
-    // the opacity of the item is changed internally by QQuickPopup on open/close
-    Behavior on opacity {
-        OpacityAnimator {
-            duration: Kirigami.Units.longDuration
-            easing.type: Easing.InOutQuad
-        }
-    }
-}
diff --git a/kcms/componentchooser/ui/main.qml b/kcms/componentchooser/ui/main.qml
deleted file mode 100644
index 82ae4aeb3b..0000000000
--- a/kcms/componentchooser/ui/main.qml
+++ /dev/null
@@ -1,253 +0,0 @@
-/*
-    SPDX-FileCopyrightText: 2020 Tobias Fella <fella at posteo.de>
-
-    SPDX-License-Identifier: GPL-2.0-or-later
-*/
-
-import QtQuick
-import QtQuick.Layouts
-import QtQuick.Controls as QQC2
-import org.kde.kirigami as Kirigami
-import org.kde.kcmutils as KCM
-
-KCM.SimpleKCM {
-    id: root
-
-    function unsupportedMimeText(kcm_component) {
-        return i18n("’%1’ seems to not support the following mimetypes associated with this kind of application: %2", kcm_component.applications[kcm_component.index]["name"], kcm_component.unsupportedMimeTypes.join(", "))
-    }
-
-    topPadding: 0
-    bottomPadding: Kirigami.Units.gridUnit
-
-    ComponentOverlay {
-        id: overlay
-        parent: root.QQC2.Overlay.overlay
-        width: Math.min(root.width, Kirigami.Units.gridUnit * 25)
-    }
-
-    component MimeMessage: Kirigami.InlineMessage {
-        property var componentChooser
-        Layout.fillWidth: true
-        visible: componentChooser.unsupportedMimeTypes.length > 0 || componentChooser.mimeTypesNotAssociated.length > 0
-        type: Kirigami.MessageType.Warning
-        text: i18nc("@info:status", "This application may not be able to open all file types.");
-        actions: Kirigami.Action {
-            text: i18nc("@action:button", "View Details")
-            onTriggered: {
-                overlay.componentChooser = componentChooser
-                overlay.open()
-            }
-        }
-    }
-
-    Kirigami.FormLayout {
-        id: form
-
-        readonly property int longestComboBox: Math.max(browserCombo.implicitWidth,
-                                                        fileManagerCombo.implicitWidth,
-                                                        textEditorCombo.implicitWidth,
-                                                        pdfViewerCombo.implicitWidth,
-                                                        imageViewerCombo.implicitWidth,
-                                                        musicPlayerCombo.implicitWidth,
-                                                        videoPlayerCombo.implicitWidth,
-                                                        emailCombo.implicitWidth,
-                                                        archiveCombo.implicitWidth,
-                                                        terminalCombo.implicitWidth,
-                                                        mapCombo.implicitWidth,
-                                                        dialerCombo.implicitWidth)
-
-
-        Item {
-            Kirigami.FormData.label: i18nc("Internet related application’s category’s name", "Internet")
-            Kirigami.FormData.isSection: true
-        }
-
-        ComponentComboBox {
-            id: browserCombo
-            Kirigami.FormData.label: i18n("Web browser:")
-            component: kcm.browsers
-            Layout.preferredWidth: form.longestComboBox
-
-            KCM.SettingHighlighter {
-                highlight: !kcm.browsers.isDefaults
-            }
-        }
-        MimeMessage {
-            componentChooser: kcm.browsers
-        }
-
-        ComponentComboBox {
-            id: emailCombo
-            Kirigami.FormData.label: i18n("Email client:")
-            Layout.preferredWidth: form.longestComboBox
-            component: kcm.emailClients
-
-            KCM.SettingHighlighter {
-                highlight: !kcm.emailClients.isDefaults
-            }
-        }
-        MimeMessage {
-            componentChooser: kcm.emailClients
-        }
-
-        ComponentComboBox {
-            id: dialerCombo
-            Kirigami.FormData.label: i18nc("Default phone app", "Phone Numbers:")
-            Layout.preferredWidth: form.longestComboBox
-            component: kcm.telUriHandlers
-
-            KCM.SettingHighlighter {
-                highlight: !kcm.telUriHandlers.isDefaults
-            }
-        }
-        MimeMessage {
-            componentChooser: kcm.telUriHandlers
-        }
-
-
-        Item {
-            Kirigami.FormData.label: i18nc("Multimedia related application’s category’s name", "Multimedia")
-            Kirigami.FormData.isSection: true
-        }
-
-        ComponentComboBox {
-            id: imageViewerCombo
-            Kirigami.FormData.label: i18n("Image viewer:")
-            Layout.preferredWidth: form.longestComboBox
-            component: kcm.imageViewers
-
-            KCM.SettingHighlighter {
-                highlight: !kcm.imageViewers.isDefaults
-            }
-        }
-        MimeMessage {
-            componentChooser: kcm.imageViewers
-        }
-
-        ComponentComboBox {
-            id: musicPlayerCombo
-            Kirigami.FormData.label: i18n("Music player:")
-            Layout.preferredWidth: form.longestComboBox
-            component: kcm.musicPlayers
-
-            KCM.SettingHighlighter {
-                highlight: !kcm.musicPlayers.isDefaults
-            }
-        }
-        MimeMessage {
-            componentChooser: kcm.musicPlayers
-        }
-
-        ComponentComboBox {
-            id: videoPlayerCombo
-            Kirigami.FormData.label: i18n("Video player:")
-            Layout.preferredWidth: form.longestComboBox
-            component: kcm.videoPlayers
-
-            KCM.SettingHighlighter {
-                highlight: !kcm.videoPlayers.isDefaults
-            }
-        }
-        MimeMessage {
-            componentChooser: kcm.videoPlayers
-        }
-
-
-        Item {
-            Kirigami.FormData.label: i18nc("Documents related application’s category’s name", "Documents")
-            Kirigami.FormData.isSection: true
-        }
-
-        ComponentComboBox {
-            id: textEditorCombo
-            Kirigami.FormData.label: i18n("Text editor:")
-            Layout.preferredWidth: form.longestComboBox
-            component: kcm.textEditors
-
-            KCM.SettingHighlighter {
-                highlight: !kcm.textEditors.isDefaults
-            }
-        }
-        MimeMessage {
-            componentChooser: kcm.textEditors
-        }
-
-
-        ComponentComboBox {
-            id: pdfViewerCombo
-            Kirigami.FormData.label: i18n("PDF viewer:")
-            Layout.preferredWidth: form.longestComboBox
-            component: kcm.pdfViewers
-
-            KCM.SettingHighlighter {
-                highlight: !kcm.pdfViewers.isDefaults
-            }
-        }
-        MimeMessage {
-            componentChooser: kcm.pdfViewers
-        }
-
-
-        Item {
-            Kirigami.FormData.label: i18nc("Utilities related application’s category’s name", "Utilities")
-            Kirigami.FormData.isSection: true
-        }
-
-        ComponentComboBox {
-            id: fileManagerCombo
-            Kirigami.FormData.label: i18n("File manager:")
-            Layout.preferredWidth: form.longestComboBox
-            component: kcm.fileManagers
-
-            KCM.SettingHighlighter {
-                highlight: !kcm.fileManagers.isDefaults
-            }
-        }
-        MimeMessage {
-            componentChooser: kcm.fileManagers
-        }
-
-        ComponentComboBox {
-            id: terminalCombo
-            Kirigami.FormData.label: i18n("Terminal emulator:")
-            Layout.preferredWidth: form.longestComboBox
-            component: kcm.terminalEmulators
-
-            KCM.SettingHighlighter {
-                highlight: !kcm.terminalEmulators.isDefaults
-            }
-        }
-        MimeMessage {
-            componentChooser: kcm.terminalEmulators
-        }
-
-        ComponentComboBox {
-            id: archiveCombo
-            Kirigami.FormData.label: i18n("Archive manager:")
-            Layout.preferredWidth: form.longestComboBox
-            component: kcm.archiveManagers
-
-            KCM.SettingHighlighter {
-                highlight: !kcm.archiveManagers.isDefaults
-            }
-        }
-        MimeMessage {
-            componentChooser: kcm.archiveManagers
-        }
-
-        ComponentComboBox {
-            id: mapCombo
-            Kirigami.FormData.label: i18nc("Map related application’s category’s name", "Map:")
-            Layout.preferredWidth: form.longestComboBox
-            component: kcm.geoUriHandlers
-
-            KCM.SettingHighlighter {
-                highlight: !kcm.geoUriHandlers.isDefaults
-            }
-        }
-        MimeMessage {
-            componentChooser: kcm.geoUriHandlers
-        }
-    }
-}


More information about the kde-doc-english mailing list