From fb8428bc20e4bec487326adef3275db6fe8d7551 Mon Sep 17 00:00:00 2001 From: Michail Vourlakos Date: Sat, 26 Oct 2019 21:36:53 +0300 Subject: [PATCH] optimize last active window color scheme update --- app/wm/tracker/lastactivewindow.cpp | 19 ++++++++++++++++--- app/wm/tracker/lastactivewindow.h | 1 + app/wm/tracker/schemes.cpp | 10 +++++++--- app/wm/tracker/schemes.h | 3 +++ 4 files changed, 27 insertions(+), 6 deletions(-) diff --git a/app/wm/tracker/lastactivewindow.cpp b/app/wm/tracker/lastactivewindow.cpp index bb841cddb..3edac02d3 100644 --- a/app/wm/tracker/lastactivewindow.cpp +++ b/app/wm/tracker/lastactivewindow.cpp @@ -48,6 +48,12 @@ LastActiveWindow::LastActiveWindow(TrackedGeneralInfo *trackedInfo) m_windowsTracker(trackedInfo->wm()->windowsTracker()), m_wm(trackedInfo->wm()) { + connect(m_wm->schemesTracker(), &Schemes::colorSchemeChanged, this, [&](WindowId wid) { + if (wid == m_winId) { + updateColorScheme(); + } + }); + connect(m_windowsTracker, &Windows::windowChanged, this, &LastActiveWindow::windowChanged); connect(m_windowsTracker, &Windows::windowRemoved, this, &LastActiveWindow::windowRemoved); } @@ -307,9 +313,8 @@ void LastActiveWindow::setInformation(const WindowInfoWrap &info) setGeometry(info.geometry()); setIsKeepAbove(info.isKeepAbove()); - auto scheme = m_wm->schemesTracker()->schemeForWindow(info.wid()); - if (scheme) { - setColorScheme(scheme->schemeFile()); + if (firstActiveness) { + updateColorScheme(); } if (info.appName().isEmpty()) { @@ -405,6 +410,14 @@ void LastActiveWindow::clearHistory() } } +void LastActiveWindow::updateColorScheme() +{ + auto scheme = m_wm->schemesTracker()->schemeForWindow(m_winId); + if (scheme) { + setColorScheme(scheme->schemeFile()); + } +} + //! FUNCTIONALITY void LastActiveWindow::requestActivate() diff --git a/app/wm/tracker/lastactivewindow.h b/app/wm/tracker/lastactivewindow.h index 33915259a..0e914abf6 100644 --- a/app/wm/tracker/lastactivewindow.h +++ b/app/wm/tracker/lastactivewindow.h @@ -149,6 +149,7 @@ private: void setWinId(QVariant winId); void clearHistory(); + void updateColorScheme(); private: bool m_isActive{false}; diff --git a/app/wm/tracker/schemes.cpp b/app/wm/tracker/schemes.cpp index d28efc2b0..a566b79af 100644 --- a/app/wm/tracker/schemes.cpp +++ b/app/wm/tracker/schemes.cpp @@ -54,6 +54,12 @@ void Schemes::init() { updateDefaultScheme(); + connect(this, &Schemes::colorSchemeChanged, this, [&](WindowId wid) { + if (wid == m_wm->activeWindow()) { + emit m_wm->activeWindowChanged(wid); + } + }); + connect(m_wm, &AbstractWindowInterface::windowRemoved, this, [&](WindowId wid) { m_windowScheme.remove(wid); }); @@ -129,9 +135,7 @@ void Schemes::setColorSchemeForWindow(WindowId wid, QString scheme) m_windowScheme[wid] = schemeFile; } - if (wid == m_wm->activeWindow()) { - emit m_wm->activeWindowChanged(wid); - } + emit colorSchemeChanged(wid); } } diff --git a/app/wm/tracker/schemes.h b/app/wm/tracker/schemes.h index e0f9fca5c..1b3fadf4e 100644 --- a/app/wm/tracker/schemes.h +++ b/app/wm/tracker/schemes.h @@ -48,6 +48,9 @@ public: SchemeColors *schemeForWindow(WindowId wId); void setColorSchemeForWindow(WindowId wId, QString scheme); +signals: + void colorSchemeChanged(const WindowId &wid); + private slots: void updateDefaultScheme();