leave fullscreen windows on top, even without the focus, as long as focused window is on another head
This commit is contained in:
parent
f6ee704a1d
commit
0906477984
2 changed files with 32 additions and 5 deletions
|
@ -1499,11 +1499,11 @@ void FluxboxWindow::setFullscreen(bool flag) {
|
||||||
m_last_resize_x = frame().x();
|
m_last_resize_x = frame().x();
|
||||||
m_last_resize_y = frame().y();
|
m_last_resize_y = frame().y();
|
||||||
|
|
||||||
moveToLayer(::Layer::ABOVE_DOCK);
|
|
||||||
|
|
||||||
fullscreen = true;
|
fullscreen = true;
|
||||||
|
|
||||||
stateSig().notify();
|
setFullscreenLayer();
|
||||||
|
if (!isFocused())
|
||||||
|
screen().focusedWindowSig().attach(this);
|
||||||
|
|
||||||
} else if (!flag && isFullscreen()) {
|
} else if (!flag && isFullscreen()) {
|
||||||
|
|
||||||
|
@ -1541,6 +1541,21 @@ void FluxboxWindow::setFullscreen(bool flag) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void FluxboxWindow::setFullscreenLayer() {
|
||||||
|
|
||||||
|
FluxboxWindow *foc = FocusControl::focusedFbWindow();
|
||||||
|
// if another window on the same head is focused, make sure we can see it
|
||||||
|
if (isFocused() || !foc || &foc->screen() != &screen() ||
|
||||||
|
getOnHead() != foc->getOnHead()) {
|
||||||
|
moveToLayer(::Layer::ABOVE_DOCK);
|
||||||
|
} else {
|
||||||
|
moveToLayer(m_old_layernum);
|
||||||
|
lower();
|
||||||
|
}
|
||||||
|
stateSig().notify();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Maximize window both horizontal and vertical
|
Maximize window both horizontal and vertical
|
||||||
*/
|
*/
|
||||||
|
@ -1899,10 +1914,15 @@ void FluxboxWindow::setFocusFlag(bool focus) {
|
||||||
|
|
||||||
installColormap(focus);
|
installColormap(focus);
|
||||||
|
|
||||||
|
// if we're fullscreen and another window gains focus on the same head,
|
||||||
|
// then we need to let the user see it
|
||||||
if (fullscreen && !focus)
|
if (fullscreen && !focus)
|
||||||
moveToLayer(m_old_layernum);
|
screen().focusedWindowSig().attach(this);
|
||||||
if (fullscreen && focus)
|
|
||||||
|
if (fullscreen && focus) {
|
||||||
moveToLayer(::Layer::ABOVE_DOCK);
|
moveToLayer(::Layer::ABOVE_DOCK);
|
||||||
|
screen().focusedWindowSig().detach(this);
|
||||||
|
}
|
||||||
|
|
||||||
if (focus != frame().focused())
|
if (focus != frame().focused())
|
||||||
frame().setFocus(focus);
|
frame().setFocus(focus);
|
||||||
|
@ -2922,6 +2942,11 @@ void FluxboxWindow::update(FbTk::Subject *subj) {
|
||||||
titleSig().notify();
|
titleSig().notify();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
} else if (subj && typeid(*subj) == typeid(BScreen::ScreenSubject)) {
|
||||||
|
if (subj == &screen().focusedWindowSig()) {
|
||||||
|
if (FocusControl::focusedFbWindow())
|
||||||
|
setFullscreenLayer();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -547,6 +547,8 @@ private:
|
||||||
void associateClientWindow(bool use_attrs = false, int x = 0, int y = 0, unsigned int width = 1, unsigned int height = 1, int gravity = ForgetGravity, unsigned int client_bw = 0);
|
void associateClientWindow(bool use_attrs = false, int x = 0, int y = 0, unsigned int width = 1, unsigned int height = 1, int gravity = ForgetGravity, unsigned int client_bw = 0);
|
||||||
|
|
||||||
void setState(unsigned long stateval, bool setting_up);
|
void setState(unsigned long stateval, bool setting_up);
|
||||||
|
/// set the layer of a fullscreen window
|
||||||
|
void setFullscreenLayer();
|
||||||
|
|
||||||
// modifies left and top if snap is necessary
|
// modifies left and top if snap is necessary
|
||||||
void doSnapping(int &left, int &top);
|
void doSnapping(int &left, int &top);
|
||||||
|
|
Loading…
Reference in a new issue