I just updated from 4.9.0 to 4.9.1 and KWin often freezes when I use Alt+Tab. Checking "All other desktops" under the Task Switcher settings let KWin freeze immediately. Please ask if you need more info. Reproducible: Always Steps to Reproduce: 1. KRunner -> task switcher -> check "All other desktops" 2. Try to navigate between windows Actual Results: It freezes Expected Results: Show the next window KDE 4.9.1 (36e1388afa6e84de6ab1a8e111f5bcf1890b4bbe)
Created attachment 73656 [details] `qdbus org.kde.kwin /KWin supportInformation` output
More info: I can reproduce this with both kwin and kwin_gles. I already wiped ~/.kde4 and /var/tmp/kdecache* but doesn't help.
Reproducible without compositing too.
Just tried with many windows and this only happens when I focus on the Desktop. To summarize: Using `current desktop ` I can switch between windows but I can't focus on the Desktop otherwise kwin freezes. Using `all other desktops` kwin shows only the Desktop in the thumbnails and then it freezes.
I sometimes have the freeze when I'm switching desktops. KWin consumes 100% of the CPU and if I attach GDB the backtrace ends in TabBoxHandlerImpl::nextClientFocusChain() line 101.
whoops, sorry
please provide a screenshot of the configuration module with the settings which make it freeze
Created attachment 73657 [details] bad settings
in case it happens I assume the list is empty, right?
the list of the tasks? It shows only the Desktop.
have to get my other system, too many open windows
ok, was able to trigger the issue, not sure whether I have found a way to reproduce it, but should be fixable.
(In reply to comment #12) > ok, was able to trigger the issue, not sure whether I have found a way to > reproduce it, but should be fixable. Great! Thank you! I wait news then.
It's for pretty much sure in clientmodel.cpp, ::createClientList() TabBoxClient* c = start; if (!c) { QSharedPointer<TabBoxClient> firstClient = tabBox->firstClientFocusChain().toStrongRef(); if (firstClient) { c = firstClient.data(); } } TabBoxClient* stop = c; start will not be in the focus chain, thus stop won't thus there's no stop condition. Stop has to be the first found nextClientFocusChain() Sorry, reviewed and didn't see that either :-(
Created attachment 73658 [details] Possible patch please test this patch whether you can somehow still reproduce the freeze. I'm not yet completely sure whether the patch makes the TabBox always behave correctly, will test more tomorrow.
Created attachment 73662 [details] many windows opened, only the desktop is displayed Hi, with this patch the freeze is fixed (which is great), but I can only switch to the Desktop (see the screenshot).
> but I can only switch to the Desktop (see the screenshot) given you previous screenshot of the settings dialog that is to be expected, you want to see all windows from other desktops but not from current.
Created attachment 73663 [details] show desktop settings Oh rigth, sorry. Anyway, using these settings, when I've many windows and I focus on the Desktop, the tabbox displays only the Desktop; if I release Alt-Tab, the previous focused windows is displayed.
could we please keep anything about behavior of tabbox out of this report and concentrate on the freeze?
(In reply to comment #19) > could we please keep anything about behavior of tabbox out of this report > and concentrate on the freeze? Ok, then the freeze is fixed for me.
Created attachment 73675 [details] New version of patch This patch fixes the freeze in a different way so that the regression of bug #306275 does not happen.
(In reply to comment #21) > Created attachment 73675 [details] > New version of patch > > This patch fixes the freeze in a different way so that the regression of bug > #306275 does not happen. Yes, it does. Freeze fixed, regression fixed. Thank you again :)
the fix is not yet committed - so I better reopen :-)
Git commit 8452e6c3f01a65953705087e0d7ada87e2cc6997 by Martin Gräßlin. Committed on 05/09/2012 at 20:55. Pushed by graesslin into branch 'KDE/4.9'. Ensure that the start Client to build up the ClientModel is in the Focus Chain If the start Client is not part of the focus chain the call to nextClientFocusChain() cannot return the Client again. So the loop break condition is never reached and as the focus chain is not empty the call always returns a not null Client which means KWin is caught in an endless loop. This change checks that the starting Client is in the focus chain and if not the first Client of the focus chain is used. Related: bug 306275 FIXED-IN: 4.9.2 M +1 -1 kwin/tabbox/clientmodel.cpp M +8 -0 kwin/tabbox/tabbox.cpp M +1 -0 kwin/tabbox/tabbox.h M +14 -0 kwin/tabbox/tabboxhandler.h M +17 -0 kwin/tabbox/tests/mock_tabboxhandler.cpp M +1 -0 kwin/tabbox/tests/mock_tabboxhandler.h M +20 -0 kwin/tabbox/tests/test_tabbox_clientmodel.cpp M +7 -0 kwin/tabbox/tests/test_tabbox_clientmodel.h http://commits.kde.org/kde-workspace/8452e6c3f01a65953705087e0d7ada87e2cc6997
On Wednesday 05 September 2012 18:59:25 Martin Gräßlin wrote: > https://bugs.kde.org/show_bug.cgi?id=306260 > > Martin Gräßlin <mgraesslin@kde.org> changed: > > What |Removed |Added > ---------------------------------------------------------------------------- > Status|REOPENED |RESOLVED > Version Fixed In| |4.9.2 > Resolution|--- |FIXED Thank you for the fast fix!
*** Bug 306348 has been marked as a duplicate of this bug. ***