Fix #558, Dodge all windows and activities

pull/1/head
Johan Smith Agudelo Rodriguez 8 years ago
parent de4f05fe9c
commit b7f9ad5685

@ -68,6 +68,7 @@ public:
virtual WindowInfoWrap requestInfo(WindowId wid) const = 0; virtual WindowInfoWrap requestInfo(WindowId wid) const = 0;
virtual WindowInfoWrap requestInfoActive() const = 0; virtual WindowInfoWrap requestInfoActive() const = 0;
virtual bool isOnCurrentDesktop(WindowId wid) const = 0; virtual bool isOnCurrentDesktop(WindowId wid) const = 0;
virtual bool isOnCurrentActivity(WindowId wid) const = 0;
virtual const std::list<WindowId> &windows() const = 0; virtual const std::list<WindowId> &windows() const = 0;
virtual void skipTaskBar(const QDialog &dialog) const = 0; virtual void skipTaskBar(const QDialog &dialog) const = 0;

@ -344,7 +344,7 @@ void VisibilityManagerPrivate::dodgeActive(WindowId wid)
winfo = wm->requestInfo(wm->activeWindow()); winfo = wm->requestInfo(wm->activeWindow());
} }
if (wm->isOnCurrentDesktop(wid)) if (wm->isOnCurrentDesktop(wid) && wm->isOnCurrentActivity(wid))
raiseDock(!intersects(winfo)); raiseDock(!intersects(winfo));
} }
@ -367,15 +367,17 @@ void VisibilityManagerPrivate::dodgeMaximized(WindowId wid)
auto isMaxVert = [&]() noexcept -> bool { auto isMaxVert = [&]() noexcept -> bool {
return winfo.isMaxVert() return winfo.isMaxVert()
|| (view->screen() && view->screen()->availableSize().height() <= winfo.geometry().height() && intersects(winfo)); || (view->screen() && view->screen()->availableSize().height() <= winfo.geometry().height()
&& intersects(winfo));
}; };
auto isMaxHoriz = [&]() noexcept -> bool { auto isMaxHoriz = [&]() noexcept -> bool {
return winfo.isMaxHoriz() return winfo.isMaxHoriz()
|| (view->screen() && view->screen()->availableSize().width() <= winfo.geometry().width() && intersects(winfo)); || (view->screen() && view->screen()->availableSize().width() <= winfo.geometry().width()
&& intersects(winfo));
}; };
if (wm->isOnCurrentDesktop(wid) && !winfo.isMinimized() && intersects(winfo)) if (wm->isOnCurrentDesktop(wid) && wm->isOnCurrentActivity(wid))
raiseDock(view->formFactor() == Plasma::Types::Vertical raiseDock(view->formFactor() == Plasma::Types::Vertical
? !isMaxHoriz() : !isMaxVert()); ? !isMaxHoriz() : !isMaxVert());
} }
@ -391,7 +393,7 @@ void VisibilityManagerPrivate::dodgeWindows(WindowId wid)
windows[wid] = wm->requestInfo(wid); windows[wid] = wm->requestInfo(wid);
auto &winfo = windows[wid]; auto &winfo = windows[wid];
if (!winfo.isValid() || !wm->isOnCurrentDesktop(wid)) if (!winfo.isValid() || !wm->isOnCurrentDesktop(wid) || !wm->isOnCurrentActivity(wid))
return; return;
if (intersects(winfo)) if (intersects(winfo))
@ -409,7 +411,7 @@ void VisibilityManagerPrivate::checkAllWindows()
for (const auto &winfo : windows) { for (const auto &winfo : windows) {
// <WindowId, WindowInfoWrap> // <WindowId, WindowInfoWrap>
if (!winfo.isValid() || !wm->isOnCurrentDesktop(winfo.wid())) if (!winfo.isValid() || !wm->isOnCurrentDesktop(winfo.wid()) || !wm->isOnCurrentActivity(winfo.wid()))
continue; continue;
if (winfo.isFullscreen()) { if (winfo.isFullscreen()) {

@ -55,6 +55,7 @@ public:
WindowInfoWrap requestInfo(WindowId wid) const override; WindowInfoWrap requestInfo(WindowId wid) const override;
WindowInfoWrap requestInfoActive() const override; WindowInfoWrap requestInfoActive() const override;
bool isOnCurrentDesktop(WindowId wid) const override; bool isOnCurrentDesktop(WindowId wid) const override;
bool isOnCurrentActivity(WindowId wid) const override;
const std::list<WindowId> &windows() const override; const std::list<WindowId> &windows() const override;
void skipTaskBar(const QDialog &dialog) const override; void skipTaskBar(const QDialog &dialog) const override;

@ -204,6 +204,14 @@ bool XWindowInterface::isOnCurrentDesktop(WindowId wid) const
return winfo.valid() && winfo.isOnCurrentDesktop(); return winfo.valid() && winfo.isOnCurrentDesktop();
} }
bool XWindowInterface::isOnCurrentActivity(WindowId wid) const
{
KWindowInfo winfo(wid.value<WId>(), 0, NET::WM2Activities);
return winfo.valid()
&& (winfo.activities().contains(m_activities->currentActivity()) || winfo.activities().empty());
}
WindowInfoWrap XWindowInterface::requestInfo(WindowId wid) const WindowInfoWrap XWindowInterface::requestInfo(WindowId wid) const
{ {
const KWindowInfo winfo{wid.value<WId>(), NET::WMFrameExtents const KWindowInfo winfo{wid.value<WId>(), NET::WMFrameExtents

@ -48,6 +48,7 @@ public:
WindowInfoWrap requestInfo(WindowId wid) const override; WindowInfoWrap requestInfo(WindowId wid) const override;
WindowInfoWrap requestInfoActive() const override; WindowInfoWrap requestInfoActive() const override;
bool isOnCurrentDesktop(WindowId wid) const override; bool isOnCurrentDesktop(WindowId wid) const override;
bool isOnCurrentActivity(WindowId wid) const override;
const std::list<WindowId> &windows() const override; const std::list<WindowId> &windows() const override;
void skipTaskBar(const QDialog &dialog) const override; void skipTaskBar(const QDialog &dialog) const override;

Loading…
Cancel
Save