File indexing completed on 2024-04-28 05:30:12

0001 /*
0002     KWin - the KDE window manager
0003     This file is part of the KDE project.
0004 
0005     SPDX-FileCopyrightText: 2013 Martin Gräßlin <mgraesslin@kde.org>
0006 
0007     SPDX-License-Identifier: GPL-2.0-or-later
0008 */
0009 #pragma once
0010 
0011 #include <QObject>
0012 #include <QStringList>
0013 #include <kwin_export.h>
0014 
0015 #include <PlasmaActivities/Controller>
0016 
0017 namespace KActivities
0018 {
0019 class Controller;
0020 }
0021 
0022 namespace KWin
0023 {
0024 class Window;
0025 
0026 class KWIN_EXPORT Activities : public QObject
0027 {
0028     Q_OBJECT
0029 
0030 public:
0031     explicit Activities();
0032 
0033     bool stop(const QString &id);
0034     bool start(const QString &id);
0035     void setCurrent(const QString &activity);
0036     /**
0037      * Adds/removes window \a window to/from \a activity.
0038      *
0039      * Takes care of transients as well.
0040      */
0041     void toggleWindowOnActivity(Window *window, const QString &activity, bool dont_activate);
0042 
0043     QStringList running() const;
0044     QStringList all() const;
0045     const QString &current() const;
0046     const QString &previous() const;
0047 
0048     static QString nullUuid();
0049 
0050     KActivities::Controller::ServiceStatus serviceStatus() const;
0051 
0052 Q_SIGNALS:
0053     /**
0054      * This signal is emitted when the global
0055      * activity is changed
0056      * @param id id of the new current activity
0057      */
0058     void currentChanged(const QString &id);
0059     /**
0060      * This signal is emitted when a new activity is added
0061      * @param id id of the new activity
0062      */
0063     void added(const QString &id);
0064     /**
0065      * This signal is emitted when the activity
0066      * is removed
0067      * @param id id of the removed activity
0068      */
0069     void removed(const QString &id);
0070 
0071 private Q_SLOTS:
0072     void slotServiceStatusChanged();
0073     void slotRemoved(const QString &activity);
0074     void slotCurrentChanged(const QString &newActivity);
0075     void reallyStop(const QString &id); // dbus deadlocks suck
0076 
0077 private:
0078     QString m_previous;
0079     QString m_current;
0080     KActivities::Controller *m_controller;
0081 };
0082 
0083 inline QStringList Activities::all() const
0084 {
0085     return m_controller->activities();
0086 }
0087 
0088 inline const QString &Activities::current() const
0089 {
0090     return m_current;
0091 }
0092 
0093 inline const QString &Activities::previous() const
0094 {
0095     return m_previous;
0096 }
0097 
0098 inline QStringList Activities::running() const
0099 {
0100     return m_controller->activities(KActivities::Info::Running);
0101 }
0102 
0103 inline QString Activities::nullUuid()
0104 {
0105     // cloned from kactivities/src/lib/core/consumer.cpp
0106     return QStringLiteral("00000000-0000-0000-0000-000000000000");
0107 }
0108 
0109 }