A feeble attempt to fix #63223 that does not really work and is disabled.

svn path=/trunk/kdebase/kwin/; revision=253843
This commit is contained in:
Luboš Luňák 2003-09-25 12:17:35 +00:00
parent 0a84495ba9
commit 19c204b429
2 changed files with 18 additions and 2 deletions

View file

@ -394,7 +394,7 @@ ClientList Workspace::constrainedStackingOrder()
it2 = stacking.end(); // don't reorder
break;
}
if( (*it2)->hasTransient( *it, true ))
if( (*it2)->hasTransient( *it, true ) && keepTransientAbove( *it2, *it ))
break;
}
} // else it2 remains pointing at stacking.end()
@ -410,7 +410,7 @@ ClientList Workspace::constrainedStackingOrder()
it2 = stacking.end(); // don't reorder
break;
}
if( *it2 == (*it)->transientFor())
if( *it2 == (*it)->transientFor() && keepTransientAbove( *it2, *it ))
break;
}
}
@ -466,6 +466,21 @@ ClientList Workspace::ensureStackingOrder( const ClientList& list ) const
return result;
}
// check whether a transient should be actually kept above its mainwindow
// there may be some special cases where this rule shouldn't be enfored
bool Workspace::keepTransientAbove( const Client* mainwindow, const Client* transient )
{
return true;
// #63223 - don't keep transients above docks, because the dock is kept high,
// and e.g. dialogs for them would be too high too
// TODO this doesn't really work - the transient should be raised after clicking
// on the dock, but docks don't become active after clicking them
if( mainwindow->isDock() && !mainwindow->keepBelow()
&& !mainwindow->isActive() && !transient->isActive()) // TODO !w->group()->isActive() ???
return false;
return true;
}
//*******************************
// Client
//*******************************

View file

@ -370,6 +370,7 @@ class Workspace : public QObject, virtual public KWinInterface, public KDecorati
void updateStackingOrder( bool propagate_new_clients = false );
void propagateClients( bool propagate_new_clients ); // called only from updateStackingOrder
ClientList constrainedStackingOrder();
bool keepTransientAbove( const Client* mainwindow, const Client* transient );
void blockStackingUpdates( bool block );
void updateCurrentTopMenu();
void updateToolWindows( bool also_hide );