File indexing completed on 2024-05-12 16:59:36
0001 /* 0002 * SPDX-FileCopyrightText: 2011 Aaron Seigo <aseigo@kde.org> 0003 * 0004 * SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include "contenttracker.h" 0008 0009 //#include <KWindowSystem> 0010 0011 #include <QDBusConnection> 0012 #include <QDBusMessage> 0013 #include <QDBusPendingCallWatcher> 0014 #include <QDBusPendingReply> 0015 #include <QDBusServiceWatcher> 0016 0017 #include "activitymanagerslc_interface.h" 0018 0019 ContentTracker::ContentTracker(QObject *parent) 0020 : QObject(parent) 0021 { 0022 connectToActivityManager(); 0023 QDBusServiceWatcher *watcher = new QDBusServiceWatcher(QStringLiteral("org.kde.ActivityManager"), // 0024 QDBusConnection::sessionBus(), 0025 QDBusServiceWatcher::WatchForOwnerChange, 0026 this); 0027 connect(watcher, &QDBusServiceWatcher::serviceOwnerChanged, this, &ContentTracker::serviceChange); 0028 } 0029 0030 ContentTracker::~ContentTracker() 0031 { 0032 delete m_activityManagerIface.data(); 0033 } 0034 0035 QString ContentTracker::uri() const 0036 { 0037 return m_uri; 0038 } 0039 0040 QString ContentTracker::mimeType() const 0041 { 0042 return m_mimetype; 0043 } 0044 0045 QString ContentTracker::title() const 0046 { 0047 return m_title; 0048 } 0049 0050 void ContentTracker::focusChanged(const QString &uri, const QString &mimetype, const QString &title) 0051 { 0052 #ifndef NDEBUG 0053 qDebug() << "New URI" << uri << mimetype << title; 0054 #endif 0055 0056 m_uri = uri; 0057 m_mimetype = mimetype; 0058 m_title = title; 0059 // m_window = (int)KWindowSystem::activeWindow(); 0060 0061 Q_EMIT changed(); 0062 } 0063 0064 void ContentTracker::connectToActivityManager() 0065 { 0066 delete m_activityManagerIface.data(); 0067 m_activityManagerIface = 0068 new OrgKdeActivityManagerSLCInterface(QStringLiteral("org.kde.ActivityManager"), QStringLiteral("/SLC"), QDBusConnection::sessionBus()); 0069 if (m_activityManagerIface->isValid()) { 0070 connect(m_activityManagerIface.data(), &OrgKdeActivityManagerSLCInterface::focusChanged, this, &ContentTracker::focusChanged); 0071 } else { 0072 delete m_activityManagerIface; 0073 m_activityManagerIface = nullptr; 0074 qWarning() << "activityManager not reachable"; 0075 } 0076 } 0077 0078 void ContentTracker::serviceChange(const QString &name, const QString &oldOwner, const QString &newOwner) 0079 { 0080 #ifndef NDEBUG 0081 qDebug() << "Service" << name << "status change, old owner:" << oldOwner << "new:" << newOwner; 0082 #endif 0083 0084 if (newOwner.isEmpty()) { 0085 // unregistered 0086 delete m_activityManagerIface.data(); 0087 } else if (oldOwner.isEmpty()) { 0088 // registered 0089 connectToActivityManager(); 0090 } 0091 }