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:
parent
053e2f669d
commit
a81ef3b07f
3 changed files with 9 additions and 6 deletions
|
@ -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
|
||||
|
|
|
@ -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();
|
||||
|
|
12
layers.cpp
12
layers.cpp
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue