Added debug asserts to present windows. This will hopefully cause KWin

to crash instead of producing black screens making it easier to find the
cause. For the people who can reproduce existing crashes please resubmit
their backtraces with this change applied.
CCBUG: 185127
CCBUG: 185239

svn path=/trunk/KDE/kdebase/workspace/; revision=933187
This commit is contained in:
Lucas Murray 2009-02-28 10:18:46 +00:00
parent d5ef2a7a87
commit e0faab0e96

View file

@ -173,6 +173,8 @@ void PresentWindowsEffect::prePaintWindow( EffectWindow *w, WindowPrePaintData &
w->enablePainting( EffectWindow::PAINT_DISABLED_BY_MINIMIZE ); // Display always w->enablePainting( EffectWindow::PAINT_DISABLED_BY_MINIMIZE ); // Display always
w->enablePainting( EffectWindow::PAINT_DISABLED_BY_DESKTOP ); w->enablePainting( EffectWindow::PAINT_DISABLED_BY_DESKTOP );
assert( m_windowData.contains( w ));
// Calculate window's opacity // Calculate window's opacity
// TODO: Minimized windows or windows not on the current desktop are only 75% visible? // TODO: Minimized windows or windows not on the current desktop are only 75% visible?
if( m_windowData[w].visible ) if( m_windowData[w].visible )
@ -211,6 +213,9 @@ void PresentWindowsEffect::paintWindow( EffectWindow *w, int mask, QRegion regio
effects->paintWindow( w, mask, region, data ); effects->paintWindow( w, mask, region, data );
return; return;
} }
assert( m_windowData.contains( w ));
// Apply opacity and brightness // Apply opacity and brightness
data.opacity *= m_windowData[w].opacity; data.opacity *= m_windowData[w].opacity;
data.brightness *= interpolate( 0.7, 1.0, m_windowData[w].highlight ); data.brightness *= interpolate( 0.7, 1.0, m_windowData[w].highlight );
@ -275,6 +280,7 @@ void PresentWindowsEffect::windowClosed( EffectWindow *w )
return; return;
if( m_highlightedWindow == w ) if( m_highlightedWindow == w )
setHighlightedWindow( findFirstWindow() ); setHighlightedWindow( findFirstWindow() );
assert( m_windowData.contains( w ));
m_windowData[w].visible = false; // TODO: Fix this so they do actually fade out m_windowData[w].visible = false; // TODO: Fix this so they do actually fade out
} }
@ -282,6 +288,7 @@ void PresentWindowsEffect::windowDeleted( EffectWindow *w )
{ {
if( !m_activated ) if( !m_activated )
return; return;
assert( m_windowData.contains( w ));
delete m_windowData[w].textFrame; delete m_windowData[w].textFrame;
delete m_windowData[w].iconFrame; delete m_windowData[w].iconFrame;
m_windowData.remove( w ); m_windowData.remove( w );
@ -311,6 +318,7 @@ void PresentWindowsEffect::windowInputMouseEvent( Window w, QEvent *e )
EffectWindowList windows = m_motionManager.managedWindows(); EffectWindowList windows = m_motionManager.managedWindows();
for( int i = 0; i < windows.size(); i++ ) for( int i = 0; i < windows.size(); i++ )
{ {
assert( m_windowData.contains( windows.at( i )));
if( m_motionManager.transformedGeometry( windows.at( i )).contains( cursorPos() ) && if( m_motionManager.transformedGeometry( windows.at( i )).contains( cursorPos() ) &&
m_windowData[windows.at( i )].visible ) m_windowData[windows.at( i )].visible )
{ {
@ -468,6 +476,7 @@ void PresentWindowsEffect::rearrangeWindows()
foreach( EffectWindow *w, m_motionManager.managedWindows() ) foreach( EffectWindow *w, m_motionManager.managedWindows() )
{ {
windowlists[w->screen()].append( w ); windowlists[w->screen()].append( w );
assert( m_windowData.contains( w ));
m_windowData[w].visible = true; m_windowData[w].visible = true;
} }
} }
@ -475,6 +484,7 @@ void PresentWindowsEffect::rearrangeWindows()
{ // Can we move this filtering somewhere else? { // Can we move this filtering somewhere else?
foreach( EffectWindow *w, m_motionManager.managedWindows() ) foreach( EffectWindow *w, m_motionManager.managedWindows() )
{ {
assert( m_windowData.contains( w ));
if( w->caption().contains( m_windowFilter, Qt::CaseInsensitive ) || if( w->caption().contains( m_windowFilter, Qt::CaseInsensitive ) ||
w->windowClass().contains( m_windowFilter, Qt::CaseInsensitive ) || w->windowClass().contains( m_windowFilter, Qt::CaseInsensitive ) ||
w->windowRole().contains( m_windowFilter, Qt::CaseInsensitive )) w->windowRole().contains( m_windowFilter, Qt::CaseInsensitive ))
@ -496,6 +506,7 @@ void PresentWindowsEffect::rearrangeWindows()
// We filtered out the highlighted window // We filtered out the highlighted window
if( m_highlightedWindow ) if( m_highlightedWindow )
{ {
assert( m_windowData.contains( m_highlightedWindow ));
if( m_windowData[m_highlightedWindow].visible == false ) if( m_windowData[m_highlightedWindow].visible == false )
setHighlightedWindow( findFirstWindow() ); setHighlightedWindow( findFirstWindow() );
} }
@ -1162,6 +1173,7 @@ void PresentWindowsEffect::setActive( bool active, bool closingTab )
foreach( EffectWindow *w, effects->currentTabBoxWindowList() ) foreach( EffectWindow *w, effects->currentTabBoxWindowList() )
{ {
m_motionManager.manage( w ); m_motionManager.manage( w );
assert( m_windowData.contains( w ));
m_windowData[w].visible = effects->currentTabBoxWindowList().contains( w ); m_windowData[w].visible = effects->currentTabBoxWindowList().contains( w );
} }
// Hide windows not in the list // Hide windows not in the list
@ -1214,6 +1226,7 @@ void PresentWindowsEffect::setActive( bool active, bool closingTab )
// Fade in/out all windows // Fade in/out all windows
foreach( EffectWindow *w, effects->stackingOrder() ) foreach( EffectWindow *w, effects->stackingOrder() )
{ {
assert( m_windowData.contains( w ));
EffectWindow *activeWindow = effects->activeWindow(); EffectWindow *activeWindow = effects->activeWindow();
if( m_tabBoxEnabled ) if( m_tabBoxEnabled )
activeWindow = effects->currentTabBoxWindow(); activeWindow = effects->currentTabBoxWindow();