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:
parent
0a84495ba9
commit
19c204b429
2 changed files with 18 additions and 2 deletions
19
layers.cpp
19
layers.cpp
|
@ -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
|
||||
//*******************************
|
||||
|
|
|
@ -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 );
|
||||
|
|
Loading…
Reference in a new issue