File indexing completed on 2024-12-08 10:57:02
0001 /* 0002 SPDX-FileCopyrightText: 2016 Marco Martin <mart@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #ifndef SCREENPOOL_H 0008 #define SCREENPOOL_H 0009 0010 // local 0011 #include "data/screendata.h" 0012 0013 // Qt 0014 #include <QObject> 0015 #include <QHash> 0016 #include <QScreen> 0017 #include <QString> 0018 #include <QTimer> 0019 0020 // KDE 0021 #include <KConfigGroup> 0022 #include <KSharedConfig> 0023 0024 class PrimaryOutputWatcher; 0025 0026 namespace Latte { 0027 0028 class ScreenPool : public QObject 0029 { 0030 Q_OBJECT 0031 0032 public: 0033 static const int FIRSTSCREENID = 10; 0034 static const int NOSCREENID = -1; 0035 0036 ScreenPool(KSharedConfig::Ptr config, QObject *parent = nullptr); 0037 ~ScreenPool() override; 0038 0039 void load(); 0040 0041 bool hasScreenId(int screenId) const; 0042 bool isScreenActive(int screenId) const; 0043 int primaryScreenId() const; 0044 QList<int> secondaryScreenIds() const; 0045 0046 void insertScreenMapping(const QString &connector); 0047 void reload(QString path); 0048 void removeScreens(const Latte::Data::ScreensTable &obsoleteScreens); 0049 0050 int id(const QString &connector) const; 0051 0052 QString connector(int id) const; 0053 0054 QScreen *screenForId(int id); 0055 QScreen *primaryScreen() const; 0056 0057 Latte::Data::ScreensTable screensTable(); 0058 0059 signals: 0060 void primaryScreenChanged(QScreen *screen); 0061 void screenGeometryChanged(); 0062 0063 protected: 0064 int firstAvailableId() const; 0065 0066 private slots: 0067 void updateScreenGeometry(const QScreen *screen); 0068 void onPrimaryOutputNameChanged(const QString &oldOutputName, const QString &newOutputName); 0069 void onScreenAdded(const QScreen *screen); 0070 void onScreenRemoved(const QScreen *screen); 0071 0072 private: 0073 void save(); 0074 void updateScreenGeometry(const int &screenId, const QRect &screenGeometry); 0075 0076 private: 0077 Latte::Data::ScreensTable m_screensTable; 0078 0079 KConfigGroup m_configGroup; 0080 0081 QTimer m_configSaveTimer; 0082 0083 PrimaryOutputWatcher *m_primaryWatcher; 0084 }; 0085 0086 } 0087 0088 #endif // SCREENPOOL_H