From f64c7809efc374caf80f9fad8c99bee81dbdd27e Mon Sep 17 00:00:00 2001 From: Michail Vourlakos Date: Tue, 23 Jul 2019 12:05:21 +0300 Subject: [PATCH] x11 fixes for invalid windows --when a window is stacked back to its parent window for example the firefox case (dragging a tab to create a new firefox window and redrag it afterwards to the main window) the wm::windows array had inconsistent window records. --This is fixed and also any X11 transient changed signals are not blocked for windowChanged signals --- app/wm/tracker/windowstracker.cpp | 12 ++++++------ app/wm/waylandinterface.cpp | 2 +- app/wm/xwindowinterface.cpp | 6 ++++-- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/app/wm/tracker/windowstracker.cpp b/app/wm/tracker/windowstracker.cpp index 0a744cf5c..1955488a3 100644 --- a/app/wm/tracker/windowstracker.cpp +++ b/app/wm/tracker/windowstracker.cpp @@ -797,12 +797,12 @@ void Windows::updateHints(Latte::View *view) //! PASS 2 if (foundActiveInCurScreen && !foundActiveTouchInCurScreen) { //! Second Pass to track also Child windows if needed - /*qDebug() << "Windows Array..."; - for (const auto &winfo : m_windows) { - qDebug() << " - " << winfo.wid() << " - " << winfo.display() << " parent : " << winfo.parentId(); - } - qDebug() << " - - - - - "; - */ + + //qDebug() << "Windows Array..."; + //for (const auto &winfo : m_windows) { + // qDebug() << " - " << winfo.wid() << " - " << winfo.isValid() << " - " << winfo.display() << " - " << winfo.geometry() << " parent : " << winfo.parentId(); + //} + //qDebug() << " - - - - - "; WindowInfoWrap activeInfo = m_windows[activeWinId]; WindowId mainWindowId = activeInfo.isChildWindow() ? activeInfo.parentId() : activeWinId; diff --git a/app/wm/waylandinterface.cpp b/app/wm/waylandinterface.cpp index 8606613b8..7a547a7bf 100644 --- a/app/wm/waylandinterface.cpp +++ b/app/wm/waylandinterface.cpp @@ -453,7 +453,7 @@ WindowInfoWrap WaylandInterface::requestInfo(WindowId wid) const winfoWrap.setActivities(QStringList()); } } else { - return {}; + winfoWrap.setIsValid(false); } return winfoWrap; diff --git a/app/wm/xwindowinterface.cpp b/app/wm/xwindowinterface.cpp index 8c942737e..114e73a4d 100644 --- a/app/wm/xwindowinterface.cpp +++ b/app/wm/xwindowinterface.cpp @@ -321,7 +321,9 @@ WindowInfoWrap XWindowInterface::requestInfo(WindowId wid) const WindowInfoWrap winfoWrap; - if (isValidWindow(winfo) && !isPlasmaDesktop) { + if (!winfo.valid()) { + winfoWrap.setIsValid(false); + } else if (isValidWindow(winfo) && !isPlasmaDesktop) { winfoWrap.setIsValid(true); winfoWrap.setWid(wid); winfoWrap.setParentId(winfo.transientFor()); @@ -645,7 +647,7 @@ void XWindowInterface::windowChangedProxy(WId wid, NET::Properties prop1, NET::P //! ignore when the user presses a key, or a window is sending X events etc. //! without needing to (e.g. Firefox, https://bugzilla.mozilla.org/show_bug.cgi?id=1389953) //! NET::WM2UserTime, NET::WM2IconPixmap etc.... - if (prop1 == 0 && !(prop2 & NET::WM2Activities)) { + if (prop1 == 0 && !(prop2 & (NET::WM2Activities | NET::WM2TransientFor))) { return; }