File indexing completed on 2024-05-12 05:35:54
0001 /* 0002 SPDX-FileCopyrightText: 2009 Aaron Seigo <aseigo@kde.org> 0003 SPDX-FileCopyrightText: 2016 Martin Gräßlin <mgraesslin@kde.org> 0004 0005 SPDX-License-Identifier: LGPL-2.0-only 0006 */ 0007 0008 #include "kwin-runner.h" 0009 0010 #include <QDBusConnection> 0011 #include <QDBusConnectionInterface> 0012 #include <QDBusServiceWatcher> 0013 0014 #include <KLocalizedString> 0015 0016 K_PLUGIN_CLASS_WITH_JSON(KWinRunner, "plasma-runner-kwin.json") 0017 0018 static const QString s_kwinService = QStringLiteral("org.kde.KWin"); 0019 static const QString s_keyword = QStringLiteral("kwin debug console"); 0020 static const QStringList s_keywords = {QStringLiteral("kwin"), QStringLiteral("debug"), QStringLiteral("console")}; 0021 0022 KWinRunner::KWinRunner(QObject *parent, const KPluginMetaData &metaData) 0023 : AbstractRunner(parent, metaData) 0024 { 0025 QDBusServiceWatcher *watcher = new QDBusServiceWatcher(s_kwinService, QDBusConnection::sessionBus(), QDBusServiceWatcher::WatchForOwnerChange, this); 0026 connect(watcher, &QDBusServiceWatcher::serviceOwnerChanged, this, &KWinRunner::checkAvailability); 0027 checkAvailability(QString(), QString(), QString()); 0028 } 0029 0030 void KWinRunner::match(RunnerContext &context) 0031 { 0032 const bool containsAnyKeyword = std::any_of(s_keywords.begin(), s_keywords.end(), [&context](const QString &keyword) { 0033 return context.query().contains(keyword, Qt::CaseInsensitive); 0034 }); 0035 if (m_enabled && containsAnyKeyword) { 0036 QueryMatch match(this); 0037 match.setId(QStringLiteral("kwin")); 0038 if (context.query().compare(s_keyword, Qt::CaseInsensitive) == 0) { 0039 match.setCategoryRelevance(QueryMatch::CategoryRelevance::Highest); 0040 } 0041 match.setIconName(QStringLiteral("kwin")); 0042 match.setText(i18n("Open KWin debug console")); 0043 match.setRelevance(1.0); 0044 context.addMatch(match); 0045 } 0046 } 0047 0048 void KWinRunner::run(const RunnerContext & /*context*/, const QueryMatch & /*match*/) 0049 { 0050 if (m_enabled) { 0051 QDBusMessage message = QDBusMessage::createMethodCall(s_kwinService, QStringLiteral("/KWin"), s_kwinService, QStringLiteral("showDebugConsole")); 0052 QDBusConnection::sessionBus().asyncCall(message); 0053 } 0054 } 0055 0056 void KWinRunner::checkAvailability(const QString &name, const QString & /*oldOwner*/, const QString &newOwner) 0057 { 0058 bool enabled = false; 0059 if (name.isEmpty()) { 0060 enabled = QDBusConnection::sessionBus().interface()->isServiceRegistered(s_kwinService).value(); 0061 } else { 0062 enabled = !newOwner.isEmpty(); 0063 } 0064 0065 if (m_enabled != enabled) { 0066 m_enabled = enabled; 0067 0068 if (m_enabled) { 0069 RunnerSyntax(s_keywords, i18n("Opens the KWin (Plasma Window Manager) debug console.")); 0070 } else { 0071 setSyntaxes(QList<RunnerSyntax>()); 0072 } 0073 } 0074 } 0075 0076 #include "kwin-runner.moc"