File indexing completed on 2024-04-28 16:49:31

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