1 /* 2 SPDX-FileCopyrightText: 2017 Klarälvdalens Datakonsult AB a KDAB Group company <info@kdab.com> 3 4 Work sponsored by the LiMux project of the city of Munich. 5 SPDX-FileContributor: Andras Mantia <andras.mantia@kdab.com> 6 7 SPDX-License-Identifier: GPL-2.0-or-later 8 */ 9 #ifndef SCREENMAPPER_H 10 #define SCREENMAPPER_H 11 12 #include <QObject> 13 #include <QVariantHash> 14 #include <QVector> 15 16 #include "folderplugin_private_export.h" 17 18 class QTimer; 19 20 namespace Plasma 21 { 22 class Corona; 23 } 24 25 class FOLDERPLUGIN_TESTS_EXPORT ScreenMapper : public QObject 26 { 27 Q_OBJECT 28 29 public: 30 enum MappingSignalBehavior { 31 DelayedSignal = 0, 32 ImmediateSignal, 33 }; 34 35 static ScreenMapper *instance(); 36 ~ScreenMapper() override = default; 37 38 QStringList screenMapping() const; 39 void setScreenMapping(const QStringList &mapping); 40 41 int screenForItem(const QUrl &url) const; 42 void addMapping(const QUrl &url, int screen, MappingSignalBehavior behavior = ImmediateSignal); 43 void removeFromMap(const QUrl &url); 44 void setCorona(Plasma::Corona *corona); 45 46 void addScreen(int screenId, const QUrl &screenUrl); 47 void removeScreen(int screenId, const QUrl &screenUrl); 48 int firstAvailableScreen(const QUrl &screenUrl) const; 49 void removeItemFromDisabledScreen(const QUrl &url); 50 sharedDesktops()51 bool sharedDesktops() const 52 { 53 return m_sharedDesktops; 54 } 55 void setSharedDesktop(bool sharedDesktops); 56 57 #ifdef BUILD_TESTING 58 void cleanup(); 59 #endif 60 61 static QUrl stringToUrl(const QString &path); 62 63 Q_SIGNALS: 64 void screenMappingChanged() const; 65 void screensChanged() const; 66 67 private: 68 void saveDisabledScreensMap() const; 69 void readDisabledScreensMap(); 70 71 ScreenMapper(QObject *parent = nullptr); 72 73 QHash<QUrl, int> m_screenItemMap; 74 QHash<int, QVector<QUrl>> m_itemsOnDisabledScreensMap; 75 QHash<QUrl, QVector<int>> m_screensPerPath; // screens per registered path 76 QVector<int> m_availableScreens; 77 Plasma::Corona *m_corona = nullptr; 78 QTimer *m_screenMappingChangedTimer = nullptr; 79 bool m_sharedDesktops = false; // all screens share the same desktops, disabling the screen mapping 80 }; 81 82 #endif // SCREENMAPPER_H 83