Summary: | kwin crashes when switching windows | ||
---|---|---|---|
Product: | [Plasma] kwin | Reporter: | Charlie Brooks <clbrooks> |
Component: | general | Assignee: | KWin default assignee <kwin-bugs-null> |
Status: | RESOLVED FIXED | ||
Severity: | crash | ||
Priority: | NOR | ||
Version: | unspecified | ||
Target Milestone: | --- | ||
Platform: | Mandrake RPMs | ||
OS: | Linux | ||
Latest Commit: | Version Fixed In: |
Description
Charlie Brooks
2003-01-19 14:55:26 UTC
Can you reproduce the problem also with KDE3.1? Subject: KDE_3_1_BRANCH: kdebase/kwin CVS commit by lunakl: Backport r1.378, it should fix #52590,#53158 and #53323. I cannot actually reproduce the problem, but this change removes code that appears in the provided backtraces, so I suppose it will be fixed now. CCMAIL:52590-done@bugs.kde.org CCMAIL:53158-done@bugs.kde.org CCMAIL:53323-done@bugs.kde.org M +8 -10 workspace.cpp 1.372.2.11 --- kdebase/kwin/workspace.cpp #1.372.2.10:1.372.2.11 @@ -1663,5 +1663,5 @@ void Workspace::clientHidden( Client* c if( popup ) popup->close(); - active_client = 0; + setActiveClient( NULL ); should_get_focus = 0; c->setActive( FALSE ); // clear the state in the client @@ -2181,6 +2181,4 @@ void Workspace::focusToNull(){ } XSetInputFocus(qt_xdisplay(), null_focus_window, RevertToPointerRoot, qt_x_time ); - if( !block_focus ) - setActiveClient( 0 ); } @@ -2273,6 +2271,4 @@ void Workspace::setCurrentDesktop( int n return; - Client* old_active_client = active_client; - active_client = 0; if( popup ) popup->close(); @@ -2325,7 +2321,6 @@ void Workspace::setCurrentDesktop( int n // Search in focus chain - if ( focus_chain.contains( old_active_client ) && old_active_client->isVisible() ) { - c = old_active_client; - active_client = c; // the requestFocus below will fail, as the client is already active + if ( focus_chain.contains( active_client ) && active_client->isVisible() ) { + c = active_client; // the requestFocus below will fail, as the client is already active } @@ -2362,6 +2357,9 @@ void Workspace::setCurrentDesktop( int n // and active_client is sticky and under mouse (hence == old_active_client), // conserve focus (thanks to Volker Schatz <V.Schatz at thphys.uni-heidelberg.de>) - else if( old_active_client && old_active_client->isVisible() ) - c= old_active_client; + else if( active_client && active_client->isVisible() ) + c= active_client; + + if( c != active_client ) + setActiveClient( NULL ); if ( c ) { |