1 /* 2 SPDX-FileCopyrightText: 2019 Michail Vourlakos <mvourlakos@gmail.com> 3 SPDX-License-Identifier: GPL-2.0-or-later 4 */ 5 6 #ifndef WINDOWSYSTEMLASTACTIVEWINDOW_H 7 #define WINDOWSYSTEMLASTACTIVEWINDOW_H 8 9 // local 10 #include "../windowinfowrap.h" 11 #include "../abstractwindowinterface.h" 12 13 // Qt 14 #include <QObject> 15 #include <QRect> 16 17 namespace Latte { 18 class View; 19 namespace WindowSystem { 20 class AbstractWindowInterface; 21 namespace Tracker { 22 class TrackedGeneralInfo; 23 class Windows; 24 } 25 } 26 } 27 28 namespace Latte { 29 namespace WindowSystem { 30 namespace Tracker { 31 32 class LastActiveWindow : public QObject { 33 Q_OBJECT 34 Q_PROPERTY(bool isValid READ isValid NOTIFY isValidChanged) 35 36 Q_PROPERTY(bool isActive READ isActive NOTIFY isActiveChanged) 37 Q_PROPERTY(bool isMinimized READ isMinimized NOTIFY isMinimizedChanged) 38 Q_PROPERTY(bool isMaximized READ isMaximized NOTIFY isMaximizedChanged) 39 Q_PROPERTY(bool isFullScreen READ isFullScreen NOTIFY isFullScreenChanged) 40 Q_PROPERTY(bool isKeepAbove READ isKeepAbove NOTIFY isKeepAboveChanged) 41 Q_PROPERTY(bool isOnAllDesktops READ isOnAllDesktops NOTIFY isOnAllDesktopsChanged) 42 Q_PROPERTY(bool isShaded READ isShaded NOTIFY isShadedChanged) 43 Q_PROPERTY(bool hasSkipTaskbar READ hasSkipTaskbar NOTIFY hasSkipTaskbarChanged) 44 45 //! BEGIN: Window Abitilities 46 /*since Latte v0.9.8*/ 47 Q_PROPERTY(bool isClosable READ isClosable NOTIFY isClosableChanged) 48 Q_PROPERTY(bool isFullScreenable READ isFullScreenable NOTIFY isFullScreenableChanged) 49 Q_PROPERTY(bool isGroupable READ isGroupable NOTIFY isGroupableChanged) 50 Q_PROPERTY(bool isMaximizable READ isMaximizable NOTIFY isMaximizableChanged) 51 Q_PROPERTY(bool isMinimizable READ isMinimizable NOTIFY isMinimizableChanged) 52 Q_PROPERTY(bool isMovable READ isMovable NOTIFY isMovableChanged) 53 Q_PROPERTY(bool isResizable READ isResizable NOTIFY isResizableChanged) 54 Q_PROPERTY(bool isShadeable READ isShadeable NOTIFY isShadeableChanged) 55 Q_PROPERTY(bool isVirtualDesktopChangeable READ isVirtualDesktopChangeable NOTIFY isVirtualDesktopChangeableChanged) 56 //! END: Window Abitilities 57 58 /*since Latte v0.9.4*/ 59 Q_PROPERTY(QString colorScheme READ colorScheme NOTIFY colorSchemeChanged) 60 61 Q_PROPERTY(QString appName READ appName NOTIFY appNameChanged) 62 Q_PROPERTY(QString display READ display NOTIFY displayChanged) 63 Q_PROPERTY(QRect geometry READ geometry NOTIFY geometryChanged) 64 65 Q_PROPERTY(QIcon icon READ icon NOTIFY iconChanged) 66 67 Q_PROPERTY(QVariant winId READ currentWinId NOTIFY currentWinIdChanged) 68 69 public: 70 LastActiveWindow(TrackedGeneralInfo *trackedInfo); 71 ~LastActiveWindow() override; 72 73 bool isValid() const; 74 bool isActive() const; 75 bool isMinimized() const; 76 bool isMaximized() const; 77 bool isFullScreen() const; 78 bool isKeepAbove() const; 79 bool isOnAllDesktops() const; 80 bool isShaded() const; 81 bool hasSkipTaskbar() const; 82 83 //! BEGIN: Window Abitilities 84 /*since Latte v0.9.8*/ 85 bool isClosable() const; 86 bool isFullScreenable() const; 87 bool isGroupable() const; 88 bool isMaximizable() const; 89 bool isMinimizable() const; 90 bool isMovable() const; 91 bool isResizable() const; 92 bool isShadeable() const; 93 bool isVirtualDesktopChangeable() const; 94 //! END: Window Abitilities 95 96 QString appName() const; 97 QString colorScheme() const; 98 QString display() const; 99 100 QRect geometry() const; 101 QIcon icon() const; 102 103 QVariant currentWinId() const; 104 105 void setInformation(const WindowInfoWrap &info); 106 107 public slots: 108 Q_INVOKABLE void requestActivate(); 109 Q_INVOKABLE void requestClose(); 110 Q_INVOKABLE void requestToggleIsOnAllDesktops(); 111 Q_INVOKABLE void requestToggleKeepAbove(); 112 Q_INVOKABLE void requestToggleMinimized(); 113 Q_INVOKABLE void requestToggleMaximized(); 114 115 Q_INVOKABLE bool canBeDragged(); 116 117 void requestMove(Latte::View *fromView, int localX, int localY); 118 119 //! Debug 120 void printHistory(); 121 122 private slots: 123 void updateInformationFromHistory(); 124 125 void applicationDataChanged(const WindowId &wid); 126 127 void windowChanged(const WindowId &wid); 128 void windowRemoved(const WindowId &wid); 129 130 signals: 131 void colorSchemeChanged(); 132 void iconChanged(); 133 void isActiveChanged(); 134 void isMinimizedChanged(); 135 void isMaximizedChanged(); 136 void isFullScreenChanged(); 137 void isKeepAboveChanged(); 138 void isOnAllDesktopsChanged(); 139 void isShadedChanged(); 140 void isValidChanged(); 141 void hasSkipTaskbarChanged(); 142 143 //! BEGIN: Window Abitilities 144 /*since Latte v0.9.8*/ 145 void isClosableChanged(); 146 void isFullScreenableChanged(); 147 void isGroupableChanged(); 148 void isMaximizableChanged(); 149 void isMinimizableChanged(); 150 void isMovableChanged(); 151 void isResizableChanged(); 152 void isShadeableChanged(); 153 void isVirtualDesktopChangeableChanged(); 154 //! END: Window Abitilities 155 156 void appNameChanged(); 157 void displayChanged(); 158 159 void geometryChanged(); 160 void currentWinIdChanged(); 161 162 //! Debug 163 void printRequested(); 164 165 private: 166 void setActive(bool active); 167 void setIsMinimized(bool minimized); 168 void setIsMaximized(bool maximized); 169 void setIsFullScreen(bool fullscreen); 170 void setIsKeepAbove(bool above); 171 void setIsOnAllDesktops(bool all); 172 void setIsShaded(bool shaded); 173 void setIsValid(bool valid); 174 void setHasSkipTaskbar(bool skip); 175 176 //! BEGIN: Window Abitilities 177 /*since Latte v0.9.8*/ 178 void setIsClosable(bool closable); 179 void setIsFullScreenable(bool fullscreenable); 180 void setIsGroupable(bool groupable); 181 void setIsMaximizable(bool maximizable); 182 void setIsMinimizable(bool minimizable); 183 void setIsMovable(bool movable); 184 void setIsResizable(bool resizable); 185 void setIsShadeable(bool shadeable); 186 void setIsVirtualDesktopsChangeable(bool virtualdestkopschangeable); 187 //! END: Window Abitilities 188 189 void setColorScheme(QString scheme); 190 191 void setAppName(QString appName); 192 void setDisplay(QString display); 193 194 void setGeometry(QRect geometry); 195 void setIcon(QIcon icon); 196 197 void setCurrentWinId(QVariant winId); 198 199 void cleanHistory(); 200 void appendInHistory(const QVariant &wid); 201 void removeFromHistory(const QVariant &wid); 202 203 void updateColorScheme(); 204 205 private: 206 bool m_isActive{false}; 207 bool m_isMinimized{false}; 208 bool m_isMaximized{false}; 209 bool m_isFullScreen{false}; 210 bool m_isKeepAbove{false}; 211 bool m_isOnAllDesktops{false}; 212 bool m_isShaded{false}; 213 bool m_isValid{false}; 214 bool m_hasSkipTaskbar{false}; 215 216 //! BEGIN: Window Abitilities 217 /*since Latte v0.9.8*/ 218 bool m_isClosable{true}; 219 bool m_isFullScreenable{true}; 220 bool m_isGroupable{true}; 221 bool m_isMaximizable{true}; 222 bool m_isMinimizable{true}; 223 bool m_isMovable{true}; 224 bool m_isResizable{true}; 225 bool m_isShadeable{true}; 226 bool m_isVirtualDesktopsChangeable{true}; 227 //! END: Window Abitilities 228 229 QString m_colorScheme; 230 231 QString m_appName; 232 QString m_display; 233 234 QRect m_geometry; 235 QIcon m_icon; 236 237 QVariant m_currentWinId; 238 239 QList<WindowId> m_history; 240 241 TrackedGeneralInfo *m_trackedInfo{nullptr}; 242 AbstractWindowInterface *m_wm{nullptr}; 243 Tracker::Windows *m_windowsTracker{nullptr}; 244 }; 245 246 } 247 } 248 } 249 250 #endif 251