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 }