File indexing completed on 2024-05-12 16:59:20

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 #ifndef ACTIVITIES_P_H
0008 #define ACTIVITIES_P_H
0009 
0010 // Self
0011 #include "Activities.h"
0012 
0013 // Qt
0014 #include <QReadWriteLock>
0015 #include <QString>
0016 #include <QTimer>
0017 
0018 // KDE
0019 #include <kconfig.h>
0020 #include <kconfiggroup.h>
0021 
0022 class KSMServer;
0023 
0024 class Activities::Private : public QObject
0025 {
0026     Q_OBJECT
0027 
0028 public:
0029     Private(Activities *parent);
0030     ~Private() override;
0031 
0032     // Loads the last activity
0033     // the user has used
0034     void loadLastActivity();
0035 
0036     // If the current activity is not running,
0037     // make some other activity current
0038     void ensureCurrentActivityIsRunning();
0039 
0040 public Q_SLOTS:
0041     bool setCurrentActivity(const QString &activity);
0042     bool previousActivity();
0043     bool nextActivity();
0044     void updateSortedActivityList();
0045 
0046 public:
0047     void setActivityState(const QString &activity, Activities::State state);
0048 
0049     // Configuration
0050     class KDE4ConfigurationTransitionChecker
0051     {
0052     public:
0053         KDE4ConfigurationTransitionChecker();
0054     } kde4ConfigurationTransitionChecker;
0055     QTimer configSyncTimer;
0056     KConfig config;
0057 
0058     // Interface to the session management
0059     KSMServer *ksmserver;
0060 
0061     QHash<QString, Activities::State> activities;
0062     QVector<ActivityInfo> sortedActivities;
0063     QReadWriteLock activitiesLock;
0064     QString currentActivity;
0065 
0066 public:
0067     inline KConfigGroup activityNameConfig()
0068     {
0069         return KConfigGroup(&config, "activities");
0070     }
0071 
0072     inline KConfigGroup activityDescriptionConfig()
0073     {
0074         return KConfigGroup(&config, "activities-descriptions");
0075     }
0076 
0077     inline KConfigGroup activityIconConfig()
0078     {
0079         return KConfigGroup(&config, "activities-icons");
0080     }
0081 
0082     inline KConfigGroup mainConfig()
0083     {
0084         return KConfigGroup(&config, "main");
0085     }
0086 
0087     inline QString activityName(const QString &activity)
0088     {
0089         return activityNameConfig().readEntry(activity, QString());
0090     }
0091 
0092     inline QString activityDescription(const QString &activity)
0093     {
0094         return activityDescriptionConfig().readEntry(activity, QString());
0095     }
0096 
0097     inline QString activityIcon(const QString &activity)
0098     {
0099         return activityIconConfig().readEntry(activity, QString());
0100     }
0101 
0102 public Q_SLOTS:
0103     // Schedules config syncing to be done after
0104     // a predefined time interval
0105     void scheduleConfigSync();
0106 
0107     // Immediately syncs the configuration file
0108     void configSync();
0109 
0110     QString addActivity(const QString &name);
0111     void removeActivity(const QString &activity);
0112     void activitySessionStateChanged(const QString &activity, int state);
0113 
0114 private:
0115     Activities *const q;
0116 };
0117 
0118 #endif // ACTIVITIES_P_H