Use KWin's internal stacking order for managed windows, not the X one.
Fixes composited drawing of windows on other desktops. BUG: 161436 svn path=/trunk/KDE/kdebase/workspace/; revision=828060
This commit is contained in:
parent
2ac20938c4
commit
79bb84e119
3 changed files with 7 additions and 6 deletions
|
@ -316,7 +316,7 @@ void Workspace::performCompositing()
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// create a list of all windows in the stacking order
|
// create a list of all windows in the stacking order
|
||||||
ToplevelList windows = rootStackingOrder();
|
ToplevelList windows = compositingStackingOrder();
|
||||||
foreach( EffectWindow* c, static_cast< EffectsHandlerImpl* >( effects )->elevatedWindows())
|
foreach( EffectWindow* c, static_cast< EffectsHandlerImpl* >( effects )->elevatedWindows())
|
||||||
{
|
{
|
||||||
Toplevel* t = static_cast< EffectWindowImpl* >( c )->window();
|
Toplevel* t = static_cast< EffectWindowImpl* >( c )->window();
|
||||||
|
|
|
@ -722,20 +722,21 @@ bool Workspace::keepTransientAbove( const Client* mainwindow, const Client* tran
|
||||||
|
|
||||||
// Returns all windows in their stacking order on the root window, used only by compositing.
|
// Returns all windows in their stacking order on the root window, used only by compositing.
|
||||||
// TODO This possibly should be optimized to avoid the X roundtrip and building it every pass.
|
// TODO This possibly should be optimized to avoid the X roundtrip and building it every pass.
|
||||||
ToplevelList Workspace::rootStackingOrder() const
|
ToplevelList Workspace::compositingStackingOrder() const
|
||||||
{
|
{
|
||||||
Window dummy;
|
Window dummy;
|
||||||
Window* windows = NULL;
|
Window* windows = NULL;
|
||||||
unsigned int count = 0;
|
unsigned int count = 0;
|
||||||
XQueryTree( display(), rootWindow(), &dummy, &dummy, &windows, &count );
|
XQueryTree( display(), rootWindow(), &dummy, &dummy, &windows, &count );
|
||||||
ToplevelList ret;
|
ToplevelList ret;
|
||||||
|
// use our own stacking order, not the X one, as they may differ
|
||||||
|
foreach( Client* c, stacking_order )
|
||||||
|
ret.append( c );
|
||||||
for( unsigned int i = 0;
|
for( unsigned int i = 0;
|
||||||
i < count;
|
i < count;
|
||||||
++i )
|
++i )
|
||||||
{
|
{
|
||||||
if( Client* c = findClient( FrameIdMatchPredicate( windows[ i ] )))
|
if( Unmanaged* c = findUnmanaged( WindowMatchPredicate( windows[ i ] )))
|
||||||
ret.append( c );
|
|
||||||
else if( Unmanaged* c = findUnmanaged( WindowMatchPredicate( windows[ i ] )))
|
|
||||||
ret.append( c );
|
ret.append( c );
|
||||||
}
|
}
|
||||||
foreach( Deleted* c, deleted )
|
foreach( Deleted* c, deleted )
|
||||||
|
|
|
@ -514,7 +514,7 @@ class Workspace : public QObject, public KDecorationDefines
|
||||||
void removeTabBoxGrab();
|
void removeTabBoxGrab();
|
||||||
|
|
||||||
void updateStackingOrder( bool propagate_new_clients = false );
|
void updateStackingOrder( bool propagate_new_clients = false );
|
||||||
ToplevelList rootStackingOrder() const;
|
ToplevelList compositingStackingOrder() const;
|
||||||
void propagateClients( bool propagate_new_clients ); // called only from updateStackingOrder
|
void propagateClients( bool propagate_new_clients ); // called only from updateStackingOrder
|
||||||
ClientList constrainedStackingOrder();
|
ClientList constrainedStackingOrder();
|
||||||
void raiseClientWithinApplication( Client* c );
|
void raiseClientWithinApplication( Client* c );
|
||||||
|
|
Loading…
Reference in a new issue