From 1b5de7d8597ace4c20f680f73c181dd861060187 Mon Sep 17 00:00:00 2001 From: Michail Vourlakos Date: Sat, 8 Jun 2019 01:03:03 +0300 Subject: [PATCH] remove irrelevant windows from Track::History --last active windows that were minimized OR changed screen must be removed from last active window history --- app/wm/tracker/lastactivewindow.cpp | 24 +++++++++++++++--------- app/wm/tracker/trackedgeneralinfo.cpp | 9 +++++++++ app/wm/tracker/trackedgeneralinfo.h | 2 ++ app/wm/tracker/trackedviewinfo.cpp | 6 ++++++ app/wm/tracker/trackedviewinfo.h | 2 ++ 5 files changed, 34 insertions(+), 9 deletions(-) diff --git a/app/wm/tracker/lastactivewindow.cpp b/app/wm/tracker/lastactivewindow.cpp index c3eae6956..9b1421c78 100644 --- a/app/wm/tracker/lastactivewindow.cpp +++ b/app/wm/tracker/lastactivewindow.cpp @@ -284,23 +284,29 @@ void LastActiveWindow::windowChanged(const WindowId &wid) { if (m_winId == wid && !wid.isNull()) { setInformation(m_windowsTracker->infoFor(wid)); + } else if (m_history.contains(wid)) { + //! remove from history minimized windows or windows that changed screen + //! and update information accordingly with the first window found from + //! history after the removal + WindowInfoWrap winfo = m_windowsTracker->infoFor(wid); + if (winfo.isMinimized() || !m_trackedInfo->isTracking(winfo)) { + m_history.removeAll(wid); + + if (m_history.count() > 0) { + setInformation(m_windowsTracker->infoFor(m_history[0])); + } + } } } void LastActiveWindow::windowRemoved(const WindowId &wid) { - bool wasFirst{false}; - if (m_history.contains(wid)) { - if (m_history[0] == wid) { - wasFirst = true; - } - m_history.removeAll(wid); - } - if (wasFirst && !m_history.isEmpty()) { - setInformation(m_windowsTracker->infoFor(m_history[0])); + if (m_history.count() > 0) { + setInformation(m_windowsTracker->infoFor(m_history[0])); + } } } diff --git a/app/wm/tracker/trackedgeneralinfo.cpp b/app/wm/tracker/trackedgeneralinfo.cpp index 55101185d..1e9c85563 100644 --- a/app/wm/tracker/trackedgeneralinfo.cpp +++ b/app/wm/tracker/trackedgeneralinfo.cpp @@ -142,6 +142,15 @@ void TrackedGeneralInfo::setActiveWindow(const WindowId &wid) m_lastActiveWindow->setInformation(m_tracker->infoFor(wid)); } +bool TrackedGeneralInfo::isTracking(const WindowInfoWrap &winfo) const +{ + return (winfo.isValid() + && !winfo.isPlasmaDesktop() + && !winfo.isMinimized() + && winfo.isOnDesktop(m_wm->currentDesktop()) + && winfo.isOnActivity(m_wm->currentActivity())); +} + } } } diff --git a/app/wm/tracker/trackedgeneralinfo.h b/app/wm/tracker/trackedgeneralinfo.h index 61e0fad7c..913249d80 100644 --- a/app/wm/tracker/trackedgeneralinfo.h +++ b/app/wm/tracker/trackedgeneralinfo.h @@ -76,6 +76,8 @@ public: void setActiveWindow(const WindowId &wid); + virtual bool isTracking(const WindowInfoWrap &winfo) const; + signals: void lastActiveWindowChanged(); diff --git a/app/wm/tracker/trackedviewinfo.cpp b/app/wm/tracker/trackedviewinfo.cpp index b8c613047..c7183dce8 100644 --- a/app/wm/tracker/trackedviewinfo.cpp +++ b/app/wm/tracker/trackedviewinfo.cpp @@ -95,6 +95,12 @@ void TrackedViewInfo::setTouchingWindowScheme(SchemeColors *scheme) m_touchingWindowScheme = scheme; } +bool TrackedViewInfo::isTracking(const WindowInfoWrap &winfo) const +{ + return TrackedGeneralInfo::isTracking(winfo) + && m_availableScreenGeometry.contains(winfo.geometry().center()); +} + } } } diff --git a/app/wm/tracker/trackedviewinfo.h b/app/wm/tracker/trackedviewinfo.h index c92a52bd2..ce2ec461d 100644 --- a/app/wm/tracker/trackedviewinfo.h +++ b/app/wm/tracker/trackedviewinfo.h @@ -62,6 +62,8 @@ public: SchemeColors *touchingWindowScheme() const; void setTouchingWindowScheme(SchemeColors *scheme); + bool isTracking(const WindowInfoWrap &winfo) const override; + private: bool m_activeWindowTouching; bool m_existsWindowTouching;