File indexing completed on 2025-01-12 13:32:44
0001 /* 0002 * Copyright 2019 Michail Vourlakos <mvourlakos@gmail.com> 0003 * 0004 * This file is part of Latte-Dock 0005 * 0006 * Latte-Dock is free software; you can redistribute it and/or 0007 * modify it under the terms of the GNU General Public License as 0008 * published by the Free Software Foundation; either version 2 of 0009 * the License, or (at your option) any later version. 0010 * 0011 * Latte-Dock is distributed in the hope that it will be useful, 0012 * but WITHOUT ANY WARRANTY; without even the implied warranty of 0013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 0014 * GNU General Public License for more details. 0015 * 0016 * You should have received a copy of the GNU General Public License 0017 * along with this program. If not, see <http://www.gnu.org/licenses/>. 0018 */ 0019 0020 #ifndef WINDOWSYSTEMLASTACTIVEWINDOW_H 0021 #define WINDOWSYSTEMLASTACTIVEWINDOW_H 0022 0023 // local 0024 #include "../windowinfowrap.h" 0025 #include "../abstractwindowinterface.h" 0026 0027 // Qt 0028 #include <QObject> 0029 #include <QRect> 0030 0031 namespace Latte { 0032 class View; 0033 namespace WindowSystem { 0034 class AbstractWindowInterface; 0035 namespace Tracker { 0036 class TrackedGeneralInfo; 0037 class Windows; 0038 } 0039 } 0040 } 0041 0042 namespace Latte { 0043 namespace WindowSystem { 0044 namespace Tracker { 0045 0046 class LastActiveWindow : public QObject { 0047 Q_OBJECT 0048 Q_PROPERTY(bool isValid READ isValid NOTIFY isValidChanged) 0049 0050 Q_PROPERTY(bool isActive READ isActive NOTIFY isActiveChanged) 0051 Q_PROPERTY(bool isMinimized READ isMinimized NOTIFY isMinimizedChanged) 0052 Q_PROPERTY(bool isMaximized READ isMaximized NOTIFY isMaximizedChanged) 0053 Q_PROPERTY(bool isFullScreen READ isFullScreen NOTIFY isFullScreenChanged) 0054 Q_PROPERTY(bool isKeepAbove READ isKeepAbove NOTIFY isKeepAboveChanged) 0055 Q_PROPERTY(bool isOnAllDesktops READ isOnAllDesktops NOTIFY isOnAllDesktopsChanged) 0056 Q_PROPERTY(bool isShaded READ isShaded NOTIFY isShadedChanged) 0057 Q_PROPERTY(bool hasSkipTaskbar READ hasSkipTaskbar NOTIFY hasSkipTaskbarChanged) 0058 0059 //! BEGIN: Window Abitilities 0060 /*since Latte v0.9.8*/ 0061 Q_PROPERTY(bool isClosable READ isClosable NOTIFY isClosableChanged) 0062 Q_PROPERTY(bool isFullScreenable READ isFullScreenable NOTIFY isFullScreenableChanged) 0063 Q_PROPERTY(bool isGroupable READ isGroupable NOTIFY isGroupableChanged) 0064 Q_PROPERTY(bool isMaximizable READ isMaximizable NOTIFY isMaximizableChanged) 0065 Q_PROPERTY(bool isMinimizable READ isMinimizable NOTIFY isMinimizableChanged) 0066 Q_PROPERTY(bool isMovable READ isMovable NOTIFY isMovableChanged) 0067 Q_PROPERTY(bool isResizable READ isResizable NOTIFY isResizableChanged) 0068 Q_PROPERTY(bool isShadeable READ isShadeable NOTIFY isShadeableChanged) 0069 Q_PROPERTY(bool isVirtualDesktopChangeable READ isVirtualDesktopChangeable NOTIFY isVirtualDesktopChangeableChanged) 0070 //! END: Window Abitilities 0071 0072 /*since Latte v0.9.4*/ 0073 Q_PROPERTY(QString colorScheme READ colorScheme NOTIFY colorSchemeChanged) 0074 0075 Q_PROPERTY(QString appName READ appName NOTIFY appNameChanged) 0076 Q_PROPERTY(QString display READ display NOTIFY displayChanged) 0077 Q_PROPERTY(QRect geometry READ geometry NOTIFY geometryChanged) 0078 0079 Q_PROPERTY(QIcon icon READ icon NOTIFY iconChanged) 0080 0081 Q_PROPERTY(QVariant winId READ winId NOTIFY winIdChanged) 0082 0083 public: 0084 LastActiveWindow(TrackedGeneralInfo *trackedInfo); 0085 ~LastActiveWindow() override; 0086 0087 bool isValid() const; 0088 bool isActive() const; 0089 bool isMinimized() const; 0090 bool isMaximized() const; 0091 bool isFullScreen() const; 0092 bool isKeepAbove() const; 0093 bool isOnAllDesktops() const; 0094 bool isShaded() const; 0095 bool hasSkipTaskbar() const; 0096 0097 //! BEGIN: Window Abitilities 0098 /*since Latte v0.9.8*/ 0099 bool isClosable() const; 0100 bool isFullScreenable() const; 0101 bool isGroupable() const; 0102 bool isMaximizable() const; 0103 bool isMinimizable() const; 0104 bool isMovable() const; 0105 bool isResizable() const; 0106 bool isShadeable() const; 0107 bool isVirtualDesktopChangeable() const; 0108 //! END: Window Abitilities 0109 0110 QString appName() const; 0111 QString colorScheme() const; 0112 QString display() const; 0113 0114 QRect geometry() const; 0115 QIcon icon() const; 0116 0117 QVariant winId() const; 0118 0119 void setInformation(const WindowInfoWrap &info); 0120 0121 public slots: 0122 Q_INVOKABLE void requestActivate(); 0123 Q_INVOKABLE void requestClose(); 0124 Q_INVOKABLE void requestToggleIsOnAllDesktops(); 0125 Q_INVOKABLE void requestToggleKeepAbove(); 0126 Q_INVOKABLE void requestToggleMinimized(); 0127 Q_INVOKABLE void requestToggleMaximized(); 0128 0129 Q_INVOKABLE bool canBeDragged(); 0130 0131 void requestMove(Latte::View *fromView, int localX, int localY); 0132 0133 private slots: 0134 void applicationDataChanged(const WindowId &wid); 0135 0136 void windowChanged(const WindowId &wid); 0137 void windowRemoved(const WindowId &wid); 0138 0139 0140 signals: 0141 void colorSchemeChanged(); 0142 void iconChanged(); 0143 void isActiveChanged(); 0144 void isMinimizedChanged(); 0145 void isMaximizedChanged(); 0146 void isFullScreenChanged(); 0147 void isKeepAboveChanged(); 0148 void isOnAllDesktopsChanged(); 0149 void isShadedChanged(); 0150 void isValidChanged(); 0151 void hasSkipTaskbarChanged(); 0152 0153 //! BEGIN: Window Abitilities 0154 /*since Latte v0.9.8*/ 0155 void isClosableChanged(); 0156 void isFullScreenableChanged(); 0157 void isGroupableChanged(); 0158 void isMaximizableChanged(); 0159 void isMinimizableChanged(); 0160 void isMovableChanged(); 0161 void isResizableChanged(); 0162 void isShadeableChanged(); 0163 void isVirtualDesktopChangeableChanged(); 0164 //! END: Window Abitilities 0165 0166 void appNameChanged(); 0167 void displayChanged(); 0168 0169 void geometryChanged(); 0170 void winIdChanged(); 0171 0172 private: 0173 void setActive(bool active); 0174 void setIsMinimized(bool minimized); 0175 void setIsMaximized(bool maximized); 0176 void setIsFullScreen(bool fullscreen); 0177 void setIsKeepAbove(bool above); 0178 void setIsOnAllDesktops(bool all); 0179 void setIsShaded(bool shaded); 0180 void setIsValid(bool valid); 0181 void setHasSkipTaskbar(bool skip); 0182 0183 //! BEGIN: Window Abitilities 0184 /*since Latte v0.9.8*/ 0185 void setIsClosable(bool closable); 0186 void setIsFullScreenable(bool fullscreenable); 0187 void setIsGroupable(bool groupable); 0188 void setIsMaximizable(bool maximizable); 0189 void setIsMinimizable(bool minimizable); 0190 void setIsMovable(bool movable); 0191 void setIsResizable(bool resizable); 0192 void setIsShadeable(bool shadeable); 0193 void setIsVirtualDesktopsChangeable(bool virtualdestkopschangeable); 0194 //! END: Window Abitilities 0195 0196 void setColorScheme(QString scheme); 0197 0198 void setAppName(QString appName); 0199 void setDisplay(QString display); 0200 0201 void setGeometry(QRect geometry); 0202 void setIcon(QIcon icon); 0203 0204 void setWinId(QVariant winId); 0205 0206 void cleanHistory(); 0207 void updateColorScheme(); 0208 0209 private: 0210 bool m_isActive{false}; 0211 bool m_isMinimized{false}; 0212 bool m_isMaximized{false}; 0213 bool m_isFullScreen{false}; 0214 bool m_isKeepAbove{false}; 0215 bool m_isOnAllDesktops{false}; 0216 bool m_isShaded{false}; 0217 bool m_isValid{false}; 0218 bool m_hasSkipTaskbar{false}; 0219 0220 //! BEGIN: Window Abitilities 0221 /*since Latte v0.9.8*/ 0222 bool m_isClosable{true}; 0223 bool m_isFullScreenable{true}; 0224 bool m_isGroupable{true}; 0225 bool m_isMaximizable{true}; 0226 bool m_isMinimizable{true}; 0227 bool m_isMovable{true}; 0228 bool m_isResizable{true}; 0229 bool m_isShadeable{true}; 0230 bool m_isVirtualDesktopsChangeable{true}; 0231 //! END: Window Abitilities 0232 0233 QString m_colorScheme; 0234 0235 QString m_appName; 0236 QString m_display; 0237 0238 QRect m_geometry; 0239 QIcon m_icon; 0240 0241 QVariant m_winId; 0242 0243 QList<WindowId> m_history; 0244 0245 TrackedGeneralInfo *m_trackedInfo{nullptr}; 0246 AbstractWindowInterface *m_wm{nullptr}; 0247 Tracker::Windows *m_windowsTracker{nullptr}; 0248 }; 0249 0250 } 0251 } 0252 } 0253 0254 #endif