eliminate flickering + minor fixes

svn path=/trunk/KDE/kdebase/workspace/; revision=959854
This commit is contained in:
Michael Zanetti 2009-04-27 12:57:52 +00:00
parent 144f578a5d
commit 000b7bed5c

View file

@ -76,13 +76,13 @@ void SlideBackEffect::windowActivated( EffectWindow* w )
foreach( EffectWindow *modalWindow, w->mainWindows() ) foreach( EffectWindow *modalWindow, w->mainWindows() )
{ {
modalGroupGeometry = modalGroupGeometry.united( modalWindow->geometry() ); modalGroupGeometry = modalGroupGeometry.united( modalWindow->geometry() );
/* effects->setElevatedWindow( modalWindow, true );
elevatedList.append( modalWindow );*/
} }
slideRect = getSlideDestination( modalGroupGeometry, tmp->geometry() ); slideRect = getSlideDestination( modalGroupGeometry, tmp->geometry() );
} }
else else
{
slideRect = getSlideDestination( w->geometry(), tmp->geometry() ); slideRect = getSlideDestination( w->geometry(), tmp->geometry() );
}
effects->setElevatedWindow( tmp, true ); effects->setElevatedWindow( tmp, true );
elevatedList.append( tmp ); elevatedList.append( tmp );
motionManager.manage( tmp ); motionManager.manage( tmp );
@ -182,12 +182,9 @@ void SlideBackEffect::postPaintScreen()
void SlideBackEffect::prePaintWindow( EffectWindow *w, WindowPrePaintData &data, int time ) void SlideBackEffect::prePaintWindow( EffectWindow *w, WindowPrePaintData &data, int time )
{ {
if( motionManager.areWindowsMoving() ) if( motionManager.isManaging( w ) )
{ {
if( motionManager.isManaging( w ) ) data.setTransformed();
{
data.setTransformed();
}
} }
effects->prePaintWindow( w, data, time ); effects->prePaintWindow( w, data, time );
@ -195,7 +192,7 @@ void SlideBackEffect::prePaintWindow( EffectWindow *w, WindowPrePaintData &data,
void SlideBackEffect::paintWindow( EffectWindow *w, int mask, QRegion region, WindowPaintData &data ) void SlideBackEffect::paintWindow( EffectWindow *w, int mask, QRegion region, WindowPaintData &data )
{ {
if( !motionManager.managingWindows() && stackingOrderChanged() && ( w == newTopWindow() ) ) if( stackingOrderChanged() && ( w == newTopWindow() ) )
{ {
/* This can happen because of two reasons: /* This can happen because of two reasons:
- a window has received the focus earlier without beeing raised and is raised now. -> call windowActivated() now - a window has received the focus earlier without beeing raised and is raised now. -> call windowActivated() now
@ -215,12 +212,9 @@ void SlideBackEffect::paintWindow( EffectWindow *w, int mask, QRegion region, Wi
windowActivated( w ); windowActivated( w );
} }
} }
if( motionManager.areWindowsMoving() ) if( motionManager.isManaging( w ) )
{ {
if( motionManager.isManaging( w ) ) motionManager.apply( w, data );
{
motionManager.apply( w, data );
}
} }
effects->paintWindow( w, mask, region, data ); effects->paintWindow( w, mask, region, data );
} }
@ -242,20 +236,31 @@ void SlideBackEffect::postPaintWindow( EffectWindow* w )
EffectWindowList tmpList; EffectWindowList tmpList;
foreach( EffectWindow *tmp, elevatedList ) foreach( EffectWindow *tmp, elevatedList )
{ {
if( effects->activeWindow() && effects->activeWindow()->geometry().intersects( tmp->geometry() ) ) QRect elevatedGeometry = tmp->geometry();
if( motionManager.isManaging( tmp ) )
{
elevatedGeometry = motionManager.transformedGeometry( tmp ).toAlignedRect();
}
if( effects->activeWindow() && !tmp->isDock() && effects->activeWindow()->geometry().intersects( elevatedGeometry ) )
{ {
QRect newDestination; QRect newDestination;
if( effects->activeWindow()->isModal() ) if( effects->activeWindow()->isModal() )
{ {
QRect modalGroupGeometry = w->geometry(); QRect modalGroupGeometry = effects->activeWindow()->geometry();
foreach( EffectWindow *modalWindow, effects->activeWindow()->mainWindows() ) foreach( EffectWindow *modalWindow, effects->activeWindow()->mainWindows() )
{
modalGroupGeometry = modalGroupGeometry.united( modalWindow->geometry() ); modalGroupGeometry = modalGroupGeometry.united( modalWindow->geometry() );
newDestination = getSlideDestination( modalGroupGeometry, tmp->geometry() ); }
newDestination = getSlideDestination( modalGroupGeometry, elevatedGeometry );
} }
else else
newDestination = getSlideDestination( effects->activeWindow()->geometry(), tmp->geometry() ); {
newDestination = getSlideDestination( effects->activeWindow()->geometry(), elevatedGeometry );
}
if( !motionManager.isManaging( tmp ) ) if( !motionManager.isManaging( tmp ) )
{
motionManager.manage( tmp ); motionManager.manage( tmp );
}
motionManager.moveWindow( tmp, newDestination ); motionManager.moveWindow( tmp, newDestination );
destinationList[tmp] = newDestination; destinationList[tmp] = newDestination;
} }