File indexing completed on 2024-12-08 04:58:27

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