If a fullscreen window has a dialog shown, still keep it on tops of other windows.

svn path=/trunk/kdebase/kwin/; revision=352347
This commit is contained in:
Luboš Luňák 2004-10-06 14:02:30 +00:00
parent 053e2f669d
commit a81ef3b07f
3 changed files with 9 additions and 6 deletions

View file

@ -451,6 +451,7 @@ void Workspace::gotFocusIn( const Client* c )
void Workspace::setShouldGetFocus( Client* c )
{
should_get_focus.append( c );
updateStackingOrder(); // e.g. fullscreens have different layer when active/not-active
}
// focus_in -> the window got FocusIn event

View file

@ -173,6 +173,7 @@ void Client::deleteClient( Client* c, allowed_t )
*/
void Client::releaseWindow( bool on_shutdown )
{
StackingUpdatesBlocker blocker( workspace());
if (moveResizeMode)
leaveMoveResize();
finishWindowRules();
@ -221,6 +222,7 @@ void Client::releaseWindow( bool on_shutdown )
// (e.g. the application closed it)
void Client::destroyClient()
{
StackingUpdatesBlocker blocker( workspace());
if (moveResizeMode)
leaveMoveResize();
finishWindowRules();

View file

@ -712,14 +712,14 @@ Layer Client::belongsToLayer() const
return DockLayer;
if( isTopMenu())
return DockLayer;
// only raise fullscreen above docks if it's the topmost window in unconstrained stacking order,
// i.e. the window set to be topmost by the user
bool raise_special_active_windows = ( workspace()->topClientOnDesktop( desktop(), true ) == this );
if( keepAbove())
return AboveLayer;
if( isFullScreen() && workspace()->activeClient() != NULL
&& ( workspace()->activeClient() == this || this->hasTransient( workspace()->activeClient(), true ))
&& raise_special_active_windows )
// only raise fullscreen above docks if it's the topmost window in unconstrained stacking order,
// i.e. the window set to be topmost by the user (also includes transients of the fullscreen window)
const Client* ac = workspace()->mostRecentlyActivatedClient(); // instead of activeClient() - avoids flicker
if( isFullScreen() && ac != NULL
&& workspace()->topClientOnDesktop( desktop(), true ) == ac
&& ( ac == this || this->hasTransient( ac, true )))
return ActiveLayer;
return NormalLayer;
}