diff --git a/app/wm/tracker/lastactivewindow.cpp b/app/wm/tracker/lastactivewindow.cpp index d332b3643..605f050b5 100644 --- a/app/wm/tracker/lastactivewindow.cpp +++ b/app/wm/tracker/lastactivewindow.cpp @@ -21,6 +21,7 @@ // local #include "trackedinfo.h" +#include "../abstractwindowinterface.h" // Qt #include @@ -31,7 +32,8 @@ namespace Tracker { LastActiveWindow::LastActiveWindow(TrackedInfo *parent) - : QObject(parent) + : QObject(parent), + m_wm(parent->wm()) { } @@ -174,6 +176,17 @@ void LastActiveWindow::setGeometry(QRect geometry) emit geometryChanged(); } +QIcon LastActiveWindow::icon() const +{ + return m_icon; +} + +void LastActiveWindow::setIcon(QIcon icon) +{ + m_icon = icon; + emit iconChanged(); +} + QVariant LastActiveWindow::winId() const { return m_winId; @@ -191,6 +204,10 @@ void LastActiveWindow::setWinId(QVariant winId) void LastActiveWindow::setInformation(const WindowInfoWrap &info) { + if (m_winId != info.wid()) { + setIcon(m_wm->iconFor(info.wid())); + } + setWinId(info.wid()); setActive(info.isActive()); diff --git a/app/wm/tracker/lastactivewindow.h b/app/wm/tracker/lastactivewindow.h index 4510a2907..877d4d6c9 100644 --- a/app/wm/tracker/lastactivewindow.h +++ b/app/wm/tracker/lastactivewindow.h @@ -29,6 +29,7 @@ namespace Latte { namespace WindowSystem { +class AbstractWindowInterface; namespace Tracker { class TrackedInfo; } @@ -55,6 +56,8 @@ class LastActiveWindow : public QObject { Q_PROPERTY(QString display READ display NOTIFY displayChanged) Q_PROPERTY(QRect geometry READ geometry NOTIFY geometryChanged) + Q_PROPERTY(QIcon icon READ icon NOTIFY iconChanged) + Q_PROPERTY(QVariant winId READ winId NOTIFY winIdChanged) public: @@ -71,11 +74,14 @@ public: QString display() const; QRect geometry() const; + QIcon icon() const; + QVariant winId() const; void setInformation(const WindowInfoWrap &info); signals: + void iconChanged(); void isActiveChanged(); void isMinimizedChanged(); void isMaximizedChanged(); @@ -99,6 +105,9 @@ private: void setDisplay(QString display); void setGeometry(QRect geometry); + + void setIcon(QIcon icon); + void setWinId(QVariant winId); private: @@ -112,8 +121,12 @@ private: QString m_display; QRect m_geometry; + QIcon m_icon; + QVariant m_winId; + AbstractWindowInterface *m_wm{nullptr}; + }; } diff --git a/app/wm/tracker/trackedinfo.cpp b/app/wm/tracker/trackedinfo.cpp index 3f9b43977..b8c9529f5 100644 --- a/app/wm/tracker/trackedinfo.cpp +++ b/app/wm/tracker/trackedinfo.cpp @@ -29,7 +29,8 @@ namespace Tracker { TrackedInfo::TrackedInfo(Tracker::Windows *parent) - : QObject(parent) + : QObject(parent), + m_wm(parent->wm()) { m_lastActiveWindow = new LastActiveWindow(this); @@ -178,6 +179,11 @@ void TrackedInfo::setTouchingWindowScheme(SchemeColors *scheme) m_touchingWindowScheme = scheme; } +AbstractWindowInterface *TrackedInfo::wm() +{ + return m_wm; +} + } } } diff --git a/app/wm/tracker/trackedinfo.h b/app/wm/tracker/trackedinfo.h index 175992edd..e40abc241 100644 --- a/app/wm/tracker/trackedinfo.h +++ b/app/wm/tracker/trackedinfo.h @@ -94,6 +94,8 @@ public: SchemeColors *touchingWindowScheme() const; void setTouchingWindowScheme(SchemeColors *scheme); + AbstractWindowInterface *wm(); + signals: void lastActiveWindowChanged(); @@ -111,6 +113,8 @@ private: SchemeColors *m_activeWindowScheme{nullptr}; SchemeColors *m_touchingWindowScheme{nullptr}; + + AbstractWindowInterface *m_wm{nullptr}; }; } diff --git a/app/wm/tracker/windows.cpp b/app/wm/tracker/windows.cpp index dcd06aafc..2078445f9 100644 --- a/app/wm/tracker/windows.cpp +++ b/app/wm/tracker/windows.cpp @@ -118,6 +118,12 @@ void Windows::initViewHints(Latte::View *view) setTouchingWindowScheme(view, nullptr); } +AbstractWindowInterface *Windows::wm() +{ + return m_wm; +} + + void Windows::addView(Latte::View *view) { if (m_views.contains(view)) { diff --git a/app/wm/tracker/windows.h b/app/wm/tracker/windows.h index cf2353afd..faee4aeaf 100644 --- a/app/wm/tracker/windows.h +++ b/app/wm/tracker/windows.h @@ -67,6 +67,8 @@ public: SchemeColors *touchingWindowScheme(Latte::View *view) const; LastActiveWindow *lastActiveWindow(Latte::View *view); + AbstractWindowInterface *wm(); + signals: void enabledChanged(const Latte::View *view); void activeWindowMaximizedChanged(const Latte::View *view);