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 }