Damage workspace when a window is unmapped to cause repainting of that area.

svn path=/branches/work/kwin_composite/; revision=607286
This commit is contained in:
Luboš Luňák 2006-11-23 23:05:50 +00:00
parent 38f4f76b31
commit cb549777ba
2 changed files with 10 additions and 0 deletions

View file

@ -183,6 +183,8 @@ void Client::releaseWindow( bool on_shutdown )
leaveMoveResize(); leaveMoveResize();
finishWindowRules(); finishWindowRules();
++block_geometry_updates; ++block_geometry_updates;
if( isNormalState()) // is mapped?
workspace()->addDamage( geometry());
setMappingState( WithdrawnState ); setMappingState( WithdrawnState );
setModal( false ); // otherwise its mainwindow wouldn't get focus setModal( false ); // otherwise its mainwindow wouldn't get focus
hidden = true; // so that it's not considered visible anymore (can't use hideClient(), it would set flags) hidden = true; // so that it's not considered visible anymore (can't use hideClient(), it would set flags)
@ -239,6 +241,8 @@ void Client::destroyClient()
leaveMoveResize(); leaveMoveResize();
finishWindowRules(); finishWindowRules();
++block_geometry_updates; ++block_geometry_updates;
if( isNormalState()) // is mapped?
workspace()->addDamage( geometry());
setModal( false ); setModal( false );
hidden = true; // so that it's not considered visible anymore hidden = true; // so that it's not considered visible anymore
workspace()->clientHidden( this ); workspace()->clientHidden( this );
@ -770,9 +774,13 @@ void Client::setShade( ShadeMode mode )
// tell xcompmgr shade's done // tell xcompmgr shade's done
_shade = 2; _shade = 2;
XChangeProperty(display(), frameId(), atoms->net_wm_window_shade, XA_CARDINAL, 32, PropModeReplace, (unsigned char *) &_shade, 1L); XChangeProperty(display(), frameId(), atoms->net_wm_window_shade, XA_CARDINAL, 32, PropModeReplace, (unsigned char *) &_shade, 1L);
if( isNormalState()) // is mapped?
workspace()->addDamage( geometry());
} }
else else
{ {
if( isNormalState()) // is mapped?
workspace()->addDamage( geometry());
int h = height(); int h = height();
shade_geometry_change = true; shade_geometry_change = true;
QSize s( sizeForClientSize( clientSize())); QSize s( sizeForClientSize( clientSize()));
@ -934,6 +942,7 @@ void Client::rawShow()
*/ */
void Client::rawHide() void Client::rawHide()
{ {
workspace()->addDamage( geometry());
// Here it may look like a race condition, as some other client might try to unmap // Here it may look like a race condition, as some other client might try to unmap
// the window between these two XSelectInput() calls. However, they're supposed to // the window between these two XSelectInput() calls. However, they're supposed to
// use XWithdrawWindow(), which also sends a synthetic event to the root window, // use XWithdrawWindow(), which also sends a synthetic event to the root window,

View file

@ -59,6 +59,7 @@ bool Unmanaged::track( Window w )
void Unmanaged::release() void Unmanaged::release()
{ {
workspace()->addDamage( geometry());
finishCompositing(); finishCompositing();
workspace()->removeUnmanaged( this, Allowed ); workspace()->removeUnmanaged( this, Allowed );
delete this; delete this;