File indexing completed on 2024-05-05 04:34:54

0001 /* SPDX-FileCopyrightText: 2023 Noah Davis <noahadvs@gmail.com>
0002  * SPDX-License-Identifier: LGPL-2.0-or-later
0003  */
0004 
0005 #include "ScreenShotEffect.h"
0006 
0007 #include <QDBusConnection>
0008 #include <QDBusConnectionInterface>
0009 #include <QDBusInterface>
0010 #include <QDBusMessage>
0011 #include <QDBusVariant>
0012 #include <QDBusReply>
0013 #include <QDebug>
0014 
0015 using namespace Qt::StringLiterals;
0016 
0017 static const auto s_kwinService = u"org.kde.KWin"_s;
0018 static const auto s_effectsObjectPath = u"/Effects"_s;
0019 static const auto s_effectsInterface = u"org.kde.kwin.Effects"_s;
0020 
0021 static const auto s_screenShot2Service = u"org.kde.KWin.ScreenShot2"_s;
0022 static const auto s_screenShot2ObjectPath = u"/org/kde/KWin/ScreenShot2"_s;
0023 static const auto s_screenShot2Interface = u"org.kde.KWin.ScreenShot2"_s;
0024 
0025 static bool s_isLoaded = false;
0026 static quint32 s_version = ScreenShotEffect::NullVersion;
0027 
0028 bool ScreenShotEffect::isLoaded()
0029 {
0030     if (!QDBusConnection::sessionBus().interface()->isServiceRegistered(s_kwinService)) {
0031         s_isLoaded = false;
0032     } else if (!s_isLoaded) {
0033         QDBusInterface interface(s_kwinService, s_effectsObjectPath, s_effectsInterface);
0034         QDBusReply<bool> reply = interface.call(u"isEffectLoaded"_s,
0035                                                 u"screenshot"_s);
0036         s_isLoaded = reply.value();
0037     }
0038     return s_isLoaded;
0039 }
0040 
0041 quint32 ScreenShotEffect::version()
0042 {
0043     if (!QDBusConnection::sessionBus().interface()->isServiceRegistered(s_screenShot2Service)) {
0044         s_version = ScreenShotEffect::NullVersion;
0045     } else if (s_version == ScreenShotEffect::NullVersion) {
0046         QDBusInterface interface(s_screenShot2Service, s_screenShot2ObjectPath, s_screenShot2Interface);
0047         bool ok;
0048         auto version = interface.property("Version").toUInt(&ok);
0049         s_version = ok ? version : ScreenShotEffect::NullVersion;
0050     }
0051     return s_version;
0052 }