diff --git a/abstract_client.h b/abstract_client.h --- a/abstract_client.h +++ b/abstract_client.h @@ -786,6 +786,7 @@ virtual void doSetSkipTaskbar(); virtual void doSetSkipPager(); + virtual void doSetSkipSwitcher(); void setupWindowManagementInterface(); void destroyWindowManagementInterface(); diff --git a/abstract_client.cpp b/abstract_client.cpp --- a/abstract_client.cpp +++ b/abstract_client.cpp @@ -142,6 +142,7 @@ if (set == skipSwitcher()) return; m_skipSwitcher = set; + doSetSkipSwitcher(); updateWindowRules(Rules::SkipSwitcher); emit skipSwitcherChanged(); } @@ -186,6 +187,11 @@ } +void AbstractClient::doSetSkipSwitcher() +{ + +} + void AbstractClient::setIcon(const QIcon &icon) { m_icon = icon; @@ -703,6 +709,7 @@ }; updateAppId(); w->setSkipTaskbar(skipTaskbar()); + w->setSkipSwitcher(skipSwitcher()); w->setPid(pid()); w->setShadeable(isShadeable()); w->setShaded(isShade()); @@ -716,6 +723,11 @@ w->setSkipTaskbar(skipTaskbar()); } ); + connect(this, &AbstractClient::skipSwitcherChanged, w, + [w, this] { + w->setSkipSwitcher(skipSwitcher()); + } + ); connect(this, &AbstractClient::captionChanged, w, [w, this] { w->setTitle(caption()); }); connect(this, &AbstractClient::desktopChanged, w, [w, this] { diff --git a/client.h b/client.h --- a/client.h +++ b/client.h @@ -388,6 +388,7 @@ void doMinimize() override; void doSetSkipPager() override; void doSetSkipTaskbar() override; + void doSetSkipSwitcher() override; bool belongsToDesktop() const override; void setGeometryRestore(const QRect &geo) override; void updateTabGroupStates(TabGroup::States states) override; diff --git a/client.cpp b/client.cpp --- a/client.cpp +++ b/client.cpp @@ -1196,6 +1196,11 @@ info->setState(skipPager() ? NET::SkipPager : NET::States(0), NET::SkipPager); } +void Client::doSetSkipSwitcher() +{ + info->setState(skipSwitcher() ? NET::SkipSwitcher : NET::States(0), NET::SkipSwitcher); +} + void Client::doSetDesktop(int desktop, int was_desk) { Q_UNUSED(desktop) diff --git a/kcmkwin/kwinrules/ruleswidget.cpp b/kcmkwin/kwinrules/ruleswidget.cpp --- a/kcmkwin/kwinrules/ruleswidget.cpp +++ b/kcmkwin/kwinrules/ruleswidget.cpp @@ -756,7 +756,7 @@ CHECKBOX_PREFILL(noborder, , info.frameGeometry() == info.geometry()); CHECKBOX_PREFILL(skiptaskbar, , info.state() & NET::SkipTaskbar); CHECKBOX_PREFILL(skippager, , info.state() & NET::SkipPager); - CHECKBOX_PREFILL(skipswitcher, , false); + CHECKBOX_PREFILL(skipswitcher, , info.state() & NET::SkipSwitcher); //CHECKBOX_PREFILL( acceptfocus, ); //CHECKBOX_PREFILL( closeable, ); //CHECKBOX_PREFILL( autogroup, ); diff --git a/manage.cpp b/manage.cpp --- a/manage.cpp +++ b/manage.cpp @@ -159,6 +159,7 @@ setOriginalSkipTaskbar((info->state() & NET::SkipTaskbar) != 0); setSkipPager((info->state() & NET::SkipPager) != 0); + setSkipSwitcher((info->state() & NET::SkipSwitcher) != 0); readFirstInTabBox(firstInTabBoxCookie); setupCompositing(); @@ -557,7 +558,7 @@ setKeepBelow(rules()->checkKeepBelow(info->state() & NET::KeepBelow, !isMapped)); setOriginalSkipTaskbar(rules()->checkSkipTaskbar(info->state() & NET::SkipTaskbar, !isMapped)); setSkipPager(rules()->checkSkipPager(info->state() & NET::SkipPager, !isMapped)); - setSkipSwitcher(rules()->checkSkipSwitcher(false, !isMapped)); + setSkipSwitcher(rules()->checkSkipSwitcher(info->state() & NET::SkipSwitcher, !isMapped)); if (info->state() & NET::DemandsAttention) demandAttention(); if (info->state() & NET::Modal) diff --git a/netinfo.cpp b/netinfo.cpp --- a/netinfo.cpp +++ b/netinfo.cpp @@ -95,7 +95,8 @@ NET::Hidden | NET::FullScreen | NET::KeepBelow | - NET::DemandsAttention; + NET::DemandsAttention | + NET::SkipSwitcher; NET::Properties2 properties2 = NET::WM2UserTime | NET::WM2StartupId | NET::WM2AllowedActions | @@ -284,6 +285,8 @@ m_client->setOriginalSkipTaskbar((state & NET::SkipTaskbar) != 0); if (mask & NET::SkipPager) m_client->setSkipPager((state & NET::SkipPager) != 0); + if (mask & NET::SkipSwitcher) + m_client->setSkipSwitcher((state & NET::SkipSwitcher) != 0); if (mask & NET::DemandsAttention) m_client->demandAttention((state & NET::DemandsAttention) != 0); if (mask & NET::Modal) diff --git a/shell_client.cpp b/shell_client.cpp --- a/shell_client.cpp +++ b/shell_client.cpp @@ -1299,6 +1299,11 @@ connect(surface, &PlasmaShellSurfaceInterface::skipTaskbarChanged, this, [this] { setSkipTaskbar(m_plasmaShellSurface->skipTaskbar()); }); + + setSkipSwitcher(surface->skipSwitcher()); + connect(surface, &PlasmaShellSurfaceInterface::skipSwitcherChanged, this, [this] { + setSkipSwitcher(m_plasmaShellSurface->skipSwitcher()); + }); } void ShellClient::updateShowOnScreenEdge()