File indexing completed on 2024-05-12 17:07:09

0001 /*
0002     SPDX-FileCopyrightText: 2002 Joseph Wenninger <jowenn@kde.org>
0003     SPDX-FileCopyrightText: 2020 Méven Car <meven.car@kdemail.net>
0004     SPDX-FileCopyrightText: 2020 Tobias Fella <fella@posteo.de>
0005 
0006     SPDX-License-Identifier: GPL-2.0-or-later
0007 */
0008 
0009 #include "componentchooserterminal.h"
0010 
0011 #include <QDBusConnection>
0012 #include <QDBusMessage>
0013 
0014 #include <KApplicationTrader>
0015 #include <KQuickAddons/ConfigModule>
0016 
0017 #include "terminal_settings.h"
0018 
0019 ComponentChooserTerminal::ComponentChooserTerminal(QObject *parent)
0020     : ComponentChooser(parent,
0021                        QString(),
0022                        QStringLiteral("TerminalEmulator"),
0023                        QStringLiteral("org.kde.konsole.desktop"),
0024                        i18n("Select default terminal emulator"))
0025 {
0026 }
0027 
0028 void ComponentChooserTerminal::load()
0029 {
0030     m_applications.clear();
0031 
0032     bool preferredServiceAdded = false;
0033 
0034     TerminalSettings settings;
0035     QString preferredService = settings.terminalApplication();
0036 
0037     KApplicationTrader::query([&preferredServiceAdded, preferredService, this](const KService::Ptr &service) {
0038         if (service->exec().isEmpty() || !service->categories().contains(m_type) || service->noDisplay()) {
0039             return false;
0040         }
0041         QVariantMap application;
0042         application["name"] = service->name();
0043         application["icon"] = service->icon();
0044         application["storageId"] = service->storageId();
0045         application["execLine"] = service->exec();
0046         m_applications += application;
0047         if ((!preferredService.isEmpty() && preferredService == service->exec())) {
0048             m_index = m_applications.length() - 1;
0049             preferredServiceAdded = true;
0050         }
0051         if (service->storageId() == m_defaultApplication) {
0052             m_defaultIndex = m_applications.length() - 1;
0053         }
0054         return false;
0055     });
0056     if (!preferredService.isEmpty() && !preferredServiceAdded) {
0057         // standard application was specified by the user
0058         QVariantMap application;
0059         auto service = KService::serviceByStorageId(settings.terminalService());
0060         if (service) {
0061             application["name"] = service->name();
0062             application["icon"] = service->icon();
0063             application["storageId"] = service->storageId();
0064             application["execLine"] = service->exec();
0065         } else {
0066             application["name"] = preferredService;
0067             application["icon"] = QStringLiteral("application-x-shellscript");
0068             application["execLine"] = preferredService;
0069         }
0070         m_applications += application;
0071         m_index = m_applications.length() - 1;
0072     }
0073     QVariantMap application;
0074     application["name"] = i18n("Other…");
0075     application["icon"] = QStringLiteral("application-x-shellscript");
0076     application["storageId"] = QString();
0077     m_applications += application;
0078     if (m_index == -1) {
0079         m_index = 0;
0080     }
0081 
0082     m_previousApplication = m_applications[m_index].toMap()["storageId"].toString();
0083     Q_EMIT applicationsChanged();
0084     Q_EMIT indexChanged();
0085     Q_EMIT isDefaultsChanged();
0086 }
0087 
0088 void ComponentChooserTerminal::save()
0089 {
0090     TerminalSettings terminalSettings;
0091     terminalSettings.setTerminalApplication(m_applications[m_index].toMap()["execLine"].toString());
0092     terminalSettings.setTerminalService(m_applications[m_index].toMap()["storageId"].toString());
0093     terminalSettings.save();
0094 
0095     QDBusMessage message = QDBusMessage::createMethodCall(QStringLiteral("org.kde.klauncher5"),
0096                                                           QStringLiteral("/KLauncher"),
0097                                                           QStringLiteral("org.kde.KLauncher"),
0098                                                           QStringLiteral("reparseConfiguration"));
0099     QDBusConnection::sessionBus().send(message);
0100 
0101     m_previousApplication = m_applications[m_index].toMap()["storageId"].toString();
0102 }