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 }