diff options
Diffstat (limited to 'extra/kdebase-workspace/fix-freeze.patch')
-rw-r--r-- | extra/kdebase-workspace/fix-freeze.patch | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/extra/kdebase-workspace/fix-freeze.patch b/extra/kdebase-workspace/fix-freeze.patch new file mode 100644 index 000000000..1926baebc --- /dev/null +++ b/extra/kdebase-workspace/fix-freeze.patch @@ -0,0 +1,56 @@ +diff --git a/kwin/tabbox/clientmodel.cpp b/kwin/tabbox/clientmodel.cpp +index 9591bab..a67d979 100644 +--- a/kwin/tabbox/clientmodel.cpp ++++ b/kwin/tabbox/clientmodel.cpp +@@ -188,7 +188,7 @@ void ClientModel::createClientList(int desktop, bool partialReset) + switch(tabBox->config().clientSwitchingMode()) { + case TabBoxConfig::FocusChainSwitching: { + TabBoxClient* c = start; +- if (!c) { ++ if (!tabBox->isInFocusChain(c)) { + QSharedPointer<TabBoxClient> firstClient = tabBox->firstClientFocusChain().toStrongRef(); + if (firstClient) { + c = firstClient.data(); +diff --git a/kwin/tabbox/tabbox.cpp b/kwin/tabbox/tabbox.cpp +index d96d0bd..7a08d37 100644 +--- a/kwin/tabbox/tabbox.cpp ++++ b/kwin/tabbox/tabbox.cpp +@@ -112,6 +112,14 @@ QWeakPointer< TabBoxClient > TabBoxHandlerImpl::firstClientFocusChain() const + } + } + ++bool TabBoxHandlerImpl::isInFocusChain(TabBoxClient *client) const ++{ ++ if (TabBoxClientImpl *c = static_cast<TabBoxClientImpl*>(client)) { ++ return Workspace::self()->globalFocusChain().contains(c->client()); ++ } ++ return false; ++} ++ + int TabBoxHandlerImpl::nextDesktopFocusChain(int desktop) const + { + return m_tabBox->nextDesktopFocusChain(desktop); +diff --git a/kwin/tabbox/tabbox.h b/kwin/tabbox/tabbox.h +index 6652f93..bba0b39 100644 +--- a/kwin/tabbox/tabbox.h ++++ b/kwin/tabbox/tabbox.h +@@ -52,6 +52,7 @@ public: + virtual QString desktopName(int desktop) const; + virtual QWeakPointer< TabBoxClient > nextClientFocusChain(TabBoxClient* client) const; + virtual QWeakPointer< TabBoxClient > firstClientFocusChain() const; ++ virtual bool isInFocusChain (TabBoxClient* client) const; + virtual int nextDesktopFocusChain(int desktop) const; + virtual int numberOfDesktops() const; + virtual TabBoxClientList stackingOrder() const; +diff --git a/kwin/tabbox/tabboxhandler.h b/kwin/tabbox/tabboxhandler.h +index 7abddfc..d9a6122 100644 +--- a/kwin/tabbox/tabboxhandler.h ++++ b/kwin/tabbox/tabboxhandler.h +@@ -119,6 +119,7 @@ public: + * @since 4.9.1 + **/ + virtual QWeakPointer<TabBoxClient> firstClientFocusChain() const = 0; ++ virtual bool isInFocusChain(TabBoxClient* client) const = 0; + /** + * @param client The client whose desktop name should be retrieved + * @return The desktop name of the given TabBoxClient. If the client is |