Scare Crowe d2ebfd0519 QortalOS Titan 5.60.12
Screw the description like that inbred T3Q
2022-03-05 21:17:59 +05:00

90 lines
2.8 KiB
C++

/*
SPDX-FileCopyrightText: 2017 Weng Xuetian <wengxt@gmail.com>
SPDX-License-Identifier: LGPL-2.0-or-later
*/
#include "config-kimpanel.h"
#include <QCoreApplication>
#include <QDBusConnection>
#include <QDBusConnectionInterface>
#include <QDBusServiceWatcher>
#include <QProcess>
class IBusPanelLauncher : public QCoreApplication
{
Q_OBJECT
public:
IBusPanelLauncher(int &argc, char *argv[])
: QCoreApplication(argc, argv)
, m_watcher(new QDBusServiceWatcher(this))
{
m_watcher->setConnection(QDBusConnection::sessionBus());
QMetaObject::invokeMethod(this, "init", Qt::QueuedConnection);
}
public Q_SLOTS:
void init()
{
// already a launcher running
if (!QDBusConnection::sessionBus().registerService(QStringLiteral("org.kde.impanel.IBusPanelLauncher"))) {
quit();
return;
}
// Check if applet is still there.
connect(m_watcher, &QDBusServiceWatcher::serviceUnregistered, this, &IBusPanelLauncher::serviceUnregistered);
connect(m_watcher, &QDBusServiceWatcher::serviceRegistered, this, &IBusPanelLauncher::serviceRegistered);
m_watcher->addWatchedService(QStringLiteral("org.kde.impanel"));
m_watcher->addWatchedService(QStringLiteral("org.freedesktop.IBus"));
// check if panel is already created
QDBusConnection::sessionBus().connect(QStringLiteral("org.kde.impanel"),
QStringLiteral("/org/kde/impanel"),
QStringLiteral("org.kde.impanel2"),
QStringLiteral("PanelRegistered"),
this,
SLOT(quit()));
if (!QDBusConnection::sessionBus().interface()->isServiceRegistered(QStringLiteral("org.kde.impanel"))) {
quit();
return;
}
if (QDBusConnection::sessionBus().interface()->isServiceRegistered(QStringLiteral("org.freedesktop.IBus"))) {
serviceRegistered(QStringLiteral("org.freedesktop.IBus"));
}
}
void serviceRegistered(const QString &service)
{
if (service == QLatin1String{"org.freedesktop.IBus"}) {
launchIBusPanel();
}
}
void serviceUnregistered(const QString &service)
{
if (service == QLatin1String{"org.kde.impanel"}) {
quit();
}
}
private:
void launchIBusPanel()
{
const QString panelPath = QStringLiteral(KIMPANEL_LIBEXEC_DIR "/kimpanel-ibus-panel");
QProcess::startDetached(panelPath, QStringList());
quit();
}
private:
QDBusServiceWatcher *m_watcher;
};
int main(int argc, char *argv[])
{
IBusPanelLauncher app(argc, argv);
return app.exec();
}
#include "launcher.moc"