File indexing completed on 2024-04-21 05:31:06

0001 /*
0002     SPDX-FileCopyrightText: 2019 Michail Vourlakos <mvourlakos@gmail.com>
0003     SPDX-License-Identifier: GPL-2.0-or-later
0004 */
0005 
0006 #ifndef WINDOWSCURRENTSCREENTRACKER_H
0007 #define WINDOWSCURRENTSCREENTRACKER_H
0008 
0009 // local
0010 #include "../../wm/abstractwindowinterface.h"
0011 
0012 // Qt
0013 #include <QObject>
0014 
0015 namespace Latte{
0016 class View;
0017 
0018 namespace ViewPart {
0019 class WindowsTracker;
0020 }
0021 
0022 namespace WindowSystem {
0023 class AbstractWindowInterface;
0024 class SchemeColors;
0025 namespace Tracker {
0026 class LastActiveWindow;
0027 }
0028 }
0029 }
0030 
0031 namespace Latte {
0032 namespace ViewPart {
0033 namespace TrackerPart {
0034 
0035 class CurrentScreenTracker : public QObject {
0036     Q_OBJECT
0037     Q_PROPERTY(bool activeWindowMaximized READ activeWindowMaximized NOTIFY activeWindowMaximizedChanged)
0038     Q_PROPERTY(bool activeWindowTouching READ activeWindowTouching NOTIFY activeWindowTouchingChanged)
0039     Q_PROPERTY(bool activeWindowTouchingEdge READ activeWindowTouchingEdge NOTIFY activeWindowTouchingEdgeChanged)
0040     Q_PROPERTY(bool existsWindowActive READ existsWindowActive NOTIFY existsWindowActiveChanged)
0041     Q_PROPERTY(bool existsWindowMaximized READ existsWindowMaximized NOTIFY existsWindowMaximizedChanged)
0042     Q_PROPERTY(bool existsWindowTouching READ existsWindowTouching NOTIFY existsWindowTouchingChanged)
0043     Q_PROPERTY(bool existsWindowTouchingEdge READ existsWindowTouchingEdge NOTIFY existsWindowTouchingEdgeChanged)
0044     Q_PROPERTY(bool isTouchingBusyVerticalView READ isTouchingBusyVerticalView NOTIFY isTouchingBusyVerticalViewChanged)
0045     Q_PROPERTY(Latte::WindowSystem::SchemeColors *activeWindowScheme READ activeWindowScheme NOTIFY activeWindowSchemeChanged)
0046     Q_PROPERTY(Latte::WindowSystem::SchemeColors *touchingWindowScheme READ touchingWindowScheme NOTIFY touchingWindowSchemeChanged)
0047 
0048     Q_PROPERTY(Latte::WindowSystem::Tracker::LastActiveWindow *lastActiveWindow READ lastActiveWindow NOTIFY lastActiveWindowChanged)
0049 
0050 public:
0051     explicit CurrentScreenTracker(WindowsTracker *parent);
0052     virtual ~CurrentScreenTracker();
0053 
0054     bool activeWindowMaximized() const;
0055     bool activeWindowTouching() const;
0056     bool activeWindowTouchingEdge() const;
0057     bool existsWindowActive() const;
0058     bool existsWindowMaximized() const;
0059     bool existsWindowTouching() const;
0060     bool existsWindowTouchingEdge() const;
0061 
0062     bool isTouchingBusyVerticalView() const;
0063 
0064     WindowSystem::SchemeColors *activeWindowScheme() const;
0065     WindowSystem::SchemeColors *touchingWindowScheme() const;
0066 
0067     WindowSystem::Tracker::LastActiveWindow *lastActiveWindow();
0068 
0069 public slots:
0070     Q_INVOKABLE void requestMoveLastWindow(int localX, int localY);
0071 
0072 signals:
0073     void activeWindowMaximizedChanged();
0074     void activeWindowTouchingChanged();
0075     void activeWindowTouchingEdgeChanged();
0076     void existsWindowActiveChanged();
0077     void existsWindowMaximizedChanged();
0078     void existsWindowTouchingChanged();
0079     void existsWindowTouchingEdgeChanged();
0080     void isTouchingBusyVerticalViewChanged();
0081 
0082     void activeWindowSchemeChanged();
0083     void touchingWindowSchemeChanged();
0084 
0085     void lastActiveWindowChanged();
0086 
0087 private slots:
0088     void initSignalsForInformation();
0089 
0090 private:
0091     void init();
0092 
0093 private:
0094     Latte::View *m_latteView{nullptr};
0095     WindowSystem::AbstractWindowInterface *m_wm{nullptr};
0096 };
0097 
0098 }
0099 }
0100 }
0101 
0102 #endif