File indexing completed on 2024-05-12 05:29:22
0001 /* 0002 * SPDX-FileCopyrightText: 2010-2016 Ivan Cukic <ivan.cukic@kde.org> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0005 */ 0006 0007 #pragma once 0008 0009 // Self 0010 #include "Activities.h" 0011 0012 // Qt 0013 #include <QReadWriteLock> 0014 #include <QString> 0015 #include <QTimer> 0016 0017 // KDE 0018 #include <kconfig.h> 0019 #include <kconfiggroup.h> 0020 0021 class KSMServer; 0022 0023 class Activities::Private : public QObject 0024 { 0025 Q_OBJECT 0026 0027 public: 0028 Private(Activities *parent); 0029 ~Private() override; 0030 0031 // Loads the last activity 0032 // the user has used 0033 void loadLastActivity(); 0034 0035 // If the current activity is not running, 0036 // make some other activity current 0037 void ensureCurrentActivityIsRunning(); 0038 0039 public Q_SLOTS: 0040 bool setCurrentActivity(const QString &activity); 0041 bool previousActivity(); 0042 bool nextActivity(); 0043 void updateSortedActivityList(); 0044 0045 public: 0046 void setActivityState(const QString &activity, Activities::State state); 0047 0048 QTimer configSyncTimer; 0049 KConfig config; 0050 0051 // Interface to the session management 0052 KSMServer *ksmserver; 0053 0054 QHash<QString, Activities::State> activities; 0055 QList<ActivityInfo> sortedActivities; 0056 QReadWriteLock activitiesLock; 0057 QString currentActivity; 0058 0059 public: 0060 inline KConfigGroup activityNameConfig() 0061 { 0062 return KConfigGroup(&config, QStringLiteral("activities")); 0063 } 0064 0065 inline KConfigGroup activityDescriptionConfig() 0066 { 0067 return KConfigGroup(&config, QStringLiteral("activities-descriptions")); 0068 } 0069 0070 inline KConfigGroup activityIconConfig() 0071 { 0072 return KConfigGroup(&config, QStringLiteral("activities-icons")); 0073 } 0074 0075 inline KConfigGroup mainConfig() 0076 { 0077 return KConfigGroup(&config, QStringLiteral("main")); 0078 } 0079 0080 inline QString activityName(const QString &activity) 0081 { 0082 return activityNameConfig().readEntry(activity, QString()); 0083 } 0084 0085 inline QString activityDescription(const QString &activity) 0086 { 0087 return activityDescriptionConfig().readEntry(activity, QString()); 0088 } 0089 0090 inline QString activityIcon(const QString &activity) 0091 { 0092 return activityIconConfig().readEntry(activity, QString()); 0093 } 0094 0095 public Q_SLOTS: 0096 // Schedules config syncing to be done after 0097 // a predefined time interval 0098 void scheduleConfigSync(); 0099 0100 // Immediately syncs the configuration file 0101 void configSync(); 0102 0103 QString addActivity(const QString &name); 0104 void removeActivity(const QString &activity); 0105 void activitySessionStateChanged(const QString &activity, int state); 0106 0107 private: 0108 Activities *const q; 0109 };