dont drag/maximize windows from different desktops

--the last active window codepath provides a way to
drag and maximize/restore the last active window. This
should not occur when the last active window is not
in the current desktop and activity.

BUG:414089
FIXED-IN:0.9.5
pull/9/head
Michail Vourlakos 5 years ago
parent 63ed290593
commit 6b5f4a952a

@ -146,6 +146,10 @@ bool AbstractWindowInterface::isRegisteredPlasmaPanel(const WindowId &wid)
return m_plasmaPanels.contains(wid);
}
bool AbstractWindowInterface::inCurrentDesktopActivity(const WindowInfoWrap &winfo) const
{
return (winfo.isValid() && winfo.isOnDesktop(currentDesktop()) && winfo.isOnActivity(currentActivity()));
}
//! Register Latte Ignored Windows in order to NOT be tracked
void AbstractWindowInterface::registerIgnoredWindow(WindowId wid)

@ -113,6 +113,8 @@ public:
virtual WindowId winIdFor(QString appId, QRect geometry) const = 0;
virtual AppData appDataFor(WindowId wid) const = 0;
bool inCurrentDesktopActivity(const WindowInfoWrap &winfo) const;
bool isIgnored(const WindowId &wid);
bool isRegisteredPlasmaPanel(const WindowId &wid);

@ -655,12 +655,6 @@ WindowInfoWrap Windows::infoFor(const WindowId &wid) const
//! Windows Criteria Functions
bool Windows::inCurrentDesktopActivity(const WindowInfoWrap &winfo)
{
return (winfo.isValid() && winfo.isOnDesktop(m_wm->currentDesktop()) && winfo.isOnActivity(m_wm->currentActivity()));
}
bool Windows::intersects(Latte::View *view, const WindowInfoWrap &winfo)
{
return (!winfo.isMinimized() && !winfo.isShaded() && winfo.geometry().intersects(view->absoluteGeometry()));
@ -873,7 +867,7 @@ void Windows::updateHints(Latte::View *view)
existsFaultyWindow = true;
}
if (winfo.isPlasmaDesktop() || !inCurrentDesktopActivity(winfo) || m_wm->isRegisteredPlasmaPanel(winfo.wid())) {
if (winfo.isPlasmaDesktop() || !m_wm->inCurrentDesktopActivity(winfo) || m_wm->isRegisteredPlasmaPanel(winfo.wid())) {
continue;
}
@ -930,7 +924,7 @@ void Windows::updateHints(Latte::View *view)
WindowId mainWindowId = activeInfo.isChildWindow() ? activeInfo.parentId() : activeWinId;
for (const auto &winfo : m_windows) {
if (winfo.isPlasmaDesktop() || !inCurrentDesktopActivity(winfo) || m_wm->isRegisteredPlasmaPanel(winfo.wid())) {
if (winfo.isPlasmaDesktop() || !m_wm->inCurrentDesktopActivity(winfo) || m_wm->isRegisteredPlasmaPanel(winfo.wid())) {
continue;
}
@ -1015,7 +1009,7 @@ void Windows::updateHints(Latte::Layout::GenericLayout *layout) {
existsFaultyWindow = true;
}
if (winfo.isPlasmaDesktop() || !inCurrentDesktopActivity(winfo) || m_wm->isRegisteredPlasmaPanel(winfo.wid())) {
if (winfo.isPlasmaDesktop() || !m_wm->inCurrentDesktopActivity(winfo) || m_wm->isRegisteredPlasmaPanel(winfo.wid())) {
continue;
}

@ -158,7 +158,6 @@ private:
void setActiveWindowScheme(Latte::Layout::GenericLayout *layout, WindowSystem::SchemeColors *scheme);
//! Windows
bool inCurrentDesktopActivity(const WindowInfoWrap &winfo);
bool intersects(Latte::View *view, const WindowInfoWrap &winfo);
bool isActive(const WindowInfoWrap &winfo);
bool isActiveInViewScreen(Latte::View *view, const WindowInfoWrap &winfo);

@ -517,6 +517,7 @@ bool WaylandInterface::windowCanBeDragged(WindowId wid) const
return (winfo.isValid()
&& w->isMovable()
&& !winfo.isMinimized()
&& inCurrentDesktopActivity(winfo)
&& !winfo.isPlasmaDesktop());
}
@ -532,6 +533,7 @@ bool WaylandInterface::windowCanBeMaximized(WindowId wid) const
return (winfo.isValid()
&& w->isMaximizeable()
&& !winfo.isMinimized()
&& inCurrentDesktopActivity(winfo)
&& !winfo.isPlasmaDesktop());
}
@ -559,7 +561,9 @@ void WaylandInterface::requestClose(WindowId wid) const
void WaylandInterface::requestMoveWindow(WindowId wid, QPoint from) const
{
if (windowCanBeDragged(wid)) {
WindowInfoWrap wInfo = requestInfo(wid);
if (windowCanBeDragged(wid) && inCurrentDesktopActivity(wInfo)) {
auto w = windowFor(wid);
if (w && isValidWindow(w)) {
@ -599,8 +603,9 @@ void WaylandInterface::requestToggleKeepAbove(WindowId wid) const
void WaylandInterface::requestToggleMinimized(WindowId wid) const
{
auto w = windowFor(wid);
WindowInfoWrap wInfo = requestInfo(wid);
if (w && isValidWindow(w)) {
if (w && isValidWindow(w) && inCurrentDesktopActivity(wInfo)) {
#if KF5_VERSION_MINOR >= 52
if (!m_currentDesktop.isEmpty()) {
w->requestEnterVirtualDesktop(m_currentDesktop);
@ -613,8 +618,9 @@ void WaylandInterface::requestToggleMinimized(WindowId wid) const
void WaylandInterface::requestToggleMaximized(WindowId wid) const
{
auto w = windowFor(wid);
WindowInfoWrap wInfo = requestInfo(wid);
if (w && isValidWindow(w) && windowCanBeMaximized(wid)) {
if (w && isValidWindow(w) && windowCanBeMaximized(wid) && inCurrentDesktopActivity(wInfo)) {
#if KF5_VERSION_MINOR >= 52
if (!m_currentDesktop.isEmpty()) {
w->requestEnterVirtualDesktop(m_currentDesktop);

@ -409,6 +409,7 @@ bool XWindowInterface::windowCanBeDragged(WindowId wid) const
return (winfo.isValid()
&& info.actionSupported(NET::ActionMove)
&& !winfo.isMinimized()
&& inCurrentDesktopActivity(winfo)
&& !winfo.isPlasmaDesktop());
}
@ -424,6 +425,7 @@ bool XWindowInterface::windowCanBeMaximized(WindowId wid) const
return (winfo.isValid()
&& !winfo.isMinimized()
&& info.actionSupported(NET::ActionMax)
&& inCurrentDesktopActivity(winfo)
&& !winfo.isPlasmaDesktop());
}
@ -468,7 +470,7 @@ void XWindowInterface::requestMoveWindow(WindowId wid, QPoint from) const
{
WindowInfoWrap wInfo = requestInfo(wid);
if (!wInfo.isValid() || wInfo.isPlasmaDesktop()) {
if (!wInfo.isValid() || wInfo.isPlasmaDesktop() || !inCurrentDesktopActivity(wInfo)) {
return;
}
@ -531,7 +533,7 @@ void XWindowInterface::requestToggleMinimized(WindowId wid) const
{
WindowInfoWrap wInfo = requestInfo(wid);
if (!wInfo.isValid() || wInfo.isPlasmaDesktop()) {
if (!wInfo.isValid() || wInfo.isPlasmaDesktop() || !inCurrentDesktopActivity(wInfo)) {
return;
}
@ -550,11 +552,12 @@ void XWindowInterface::requestToggleMinimized(WindowId wid) const
void XWindowInterface::requestToggleMaximized(WindowId wid) const
{
if (!windowCanBeMaximized(wid)) {
WindowInfoWrap wInfo = requestInfo(wid);
if (!windowCanBeMaximized(wid) || !inCurrentDesktopActivity(wInfo)) {
return;
}
WindowInfoWrap wInfo = requestInfo(wid);
bool restore = wInfo.isMaxHoriz() && wInfo.isMaxVert();
if (wInfo.isMinimized()) {

Loading…
Cancel
Save