summaryrefslogtreecommitdiff
path: root/extra/kdebase-workspace/fix-freeze.patch
diff options
context:
space:
mode:
Diffstat (limited to 'extra/kdebase-workspace/fix-freeze.patch')
-rw-r--r--extra/kdebase-workspace/fix-freeze.patch56
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