Only keep fullscreen for transients on top - not random group members
BUG: 293265 REVIEW: 103866
This commit is contained in:
parent
b052f6429f
commit
2d99ef918b
1 changed files with 26 additions and 4 deletions
30
layers.cpp
30
layers.cpp
|
@ -840,15 +840,37 @@ Layer Client::belongsToLayer() const
|
|||
return NormalLayer;
|
||||
}
|
||||
|
||||
bool rec_checkTransientOnTop(const ClientList &transients, const Client *topmost)
|
||||
{
|
||||
foreach (const Client *transient, transients) {
|
||||
if (transient == topmost || rec_checkTransientOnTop(transient->transients(), topmost)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool Client::isActiveFullScreen() const
|
||||
{
|
||||
if (!isFullScreen())
|
||||
return false;
|
||||
|
||||
// const Client* ac = workspace()->mostRecentlyActivatedClient(); // instead of activeClient() - avoids flicker
|
||||
// if (!ac)
|
||||
// return false;
|
||||
// not needed, for xinerama -> && ( ac == this || this->group() == ac->group())
|
||||
|
||||
// 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
|
||||
const Client* top = workspace()->topClientOnDesktop(workspace()->currentDesktop(), screen(), true, false);
|
||||
return(isFullScreen() && ac != NULL && top != NULL
|
||||
// not needed, for xinerama && ( ac == this || this->group() == ac->group())
|
||||
&& (top == this || this->group() == top->group()));
|
||||
if (!top)
|
||||
return false;
|
||||
|
||||
// check whether we ...
|
||||
if (top == this)
|
||||
return true;
|
||||
// ... or one of our transients is topmost
|
||||
return rec_checkTransientOnTop(transients_list, top);
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
|
Loading…
Reference in a new issue