let FbWinFrame handle decorations in fullscreen state
This commit is contained in:
parent
0689a0a4a8
commit
215939d6ed
3 changed files with 39 additions and 22 deletions
|
@ -489,6 +489,14 @@ void FbWinFrame::setFocus(bool newvalue) {
|
||||||
clearAll();
|
clearAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void FbWinFrame::setFullscreen(bool newvalue) {
|
||||||
|
if (newvalue == m_state.fullscreen)
|
||||||
|
return;
|
||||||
|
|
||||||
|
m_state.fullscreen = newvalue;
|
||||||
|
applyDecorations();
|
||||||
|
}
|
||||||
|
|
||||||
void FbWinFrame::setAlpha(bool focused, unsigned char alpha) {
|
void FbWinFrame::setAlpha(bool focused, unsigned char alpha) {
|
||||||
if (focused)
|
if (focused)
|
||||||
m_focused_alpha = alpha;
|
m_focused_alpha = alpha;
|
||||||
|
@ -842,7 +850,7 @@ void FbWinFrame::reconfigure() {
|
||||||
m_bevel = theme()->bevelWidth();
|
m_bevel = theme()->bevelWidth();
|
||||||
setBorderWidth();
|
setBorderWidth();
|
||||||
|
|
||||||
if (m_state.deco_mask & DECORM_HANDLE && theme()->handleWidth() != 0)
|
if (useHandle() && theme()->handleWidth() != 0)
|
||||||
showHandle();
|
showHandle();
|
||||||
else
|
else
|
||||||
hideHandle();
|
hideHandle();
|
||||||
|
@ -1427,6 +1435,22 @@ int FbWinFrame::getDecoMaskFromString(const string &str_label) {
|
||||||
return mask;
|
return mask;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool FbWinFrame::useBorder() const {
|
||||||
|
return !m_state.fullscreen && m_state.deco_mask & DECORM_BORDER;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool FbWinFrame::useTabs() const {
|
||||||
|
return !m_state.fullscreen && m_state.deco_mask & DECORM_TAB;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool FbWinFrame::useTitlebar() const {
|
||||||
|
return !m_state.fullscreen && m_state.deco_mask & DECORM_TITLEBAR;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool FbWinFrame::useHandle() const {
|
||||||
|
return !m_state.fullscreen && m_state.deco_mask & DECORM_HANDLE;
|
||||||
|
}
|
||||||
|
|
||||||
void FbWinFrame::applyDecorations() {
|
void FbWinFrame::applyDecorations() {
|
||||||
int grav_x=0, grav_y=0;
|
int grav_x=0, grav_y=0;
|
||||||
// negate gravity
|
// negate gravity
|
||||||
|
@ -1438,13 +1462,13 @@ void FbWinFrame::applyDecorations() {
|
||||||
// tab deocration only affects if we're external
|
// tab deocration only affects if we're external
|
||||||
// must do before the setTabMode in case it goes
|
// must do before the setTabMode in case it goes
|
||||||
// to external and is meant to be hidden
|
// to external and is meant to be hidden
|
||||||
if (m_state.deco_mask & DECORM_TAB)
|
if (useTabs())
|
||||||
client_move |= showTabs();
|
client_move |= showTabs();
|
||||||
else
|
else
|
||||||
client_move |= hideTabs();
|
client_move |= hideTabs();
|
||||||
|
|
||||||
// we rely on frame not doing anything if it is already shown/hidden
|
// we rely on frame not doing anything if it is already shown/hidden
|
||||||
if (m_state.deco_mask & DECORM_TITLEBAR) {
|
if (useTitlebar()) {
|
||||||
client_move |= showTitlebar();
|
client_move |= showTitlebar();
|
||||||
if (m_screen.getDefaultInternalTabs())
|
if (m_screen.getDefaultInternalTabs())
|
||||||
client_move |= setTabMode(INTERNAL);
|
client_move |= setTabMode(INTERNAL);
|
||||||
|
@ -1452,11 +1476,11 @@ void FbWinFrame::applyDecorations() {
|
||||||
client_move |= setTabMode(EXTERNAL);
|
client_move |= setTabMode(EXTERNAL);
|
||||||
} else {
|
} else {
|
||||||
client_move |= hideTitlebar();
|
client_move |= hideTitlebar();
|
||||||
if (m_state.deco_mask & DECORM_TAB)
|
if (useTabs())
|
||||||
client_move |= setTabMode(EXTERNAL);
|
client_move |= setTabMode(EXTERNAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_state.deco_mask & DECORM_HANDLE)
|
if (useHandle())
|
||||||
client_move |= showHandle();
|
client_move |= showHandle();
|
||||||
else
|
else
|
||||||
client_move |= hideHandle();
|
client_move |= hideHandle();
|
||||||
|
@ -1478,7 +1502,7 @@ void FbWinFrame::applyDecorations() {
|
||||||
|
|
||||||
bool FbWinFrame::setBorderWidth(bool do_move) {
|
bool FbWinFrame::setBorderWidth(bool do_move) {
|
||||||
unsigned int border_width = theme()->border().width();
|
unsigned int border_width = theme()->border().width();
|
||||||
unsigned int win_bw = m_state.deco_mask & DECORM_BORDER ? border_width : 0;
|
unsigned int win_bw = useBorder() ? border_width : 0;
|
||||||
|
|
||||||
if (border_width &&
|
if (border_width &&
|
||||||
theme()->border().color().pixel() != window().borderColor()) {
|
theme()->border().color().pixel() != window().borderColor()) {
|
||||||
|
|
|
@ -175,7 +175,7 @@ public:
|
||||||
|
|
||||||
/// set focus/unfocus style
|
/// set focus/unfocus style
|
||||||
void setFocus(bool newvalue);
|
void setFocus(bool newvalue);
|
||||||
void setFullscreen(bool value) { m_state.fullscreen = value; }
|
void setFullscreen(bool value);
|
||||||
void setMaximized(int value) { m_state.maximized = value; }
|
void setMaximized(int value) { m_state.maximized = value; }
|
||||||
|
|
||||||
void setFocusTitle(const std::string &str) { m_label.setText(str); }
|
void setFocusTitle(const std::string &str) { m_label.setText(str); }
|
||||||
|
@ -232,6 +232,12 @@ public:
|
||||||
void setDecorationMask(unsigned int mask) { m_state.deco_mask = mask; }
|
void setDecorationMask(unsigned int mask) { m_state.deco_mask = mask; }
|
||||||
void applyDecorations();
|
void applyDecorations();
|
||||||
|
|
||||||
|
/// determine if the given decoration should be shown in current state
|
||||||
|
bool useBorder() const;
|
||||||
|
bool useTabs() const;
|
||||||
|
bool useTitlebar() const;
|
||||||
|
bool useHandle() const;
|
||||||
|
|
||||||
// this function translates its arguments according to win_gravity
|
// this function translates its arguments according to win_gravity
|
||||||
// if win_gravity is negative, it does an inverse translation
|
// if win_gravity is negative, it does an inverse translation
|
||||||
void gravityTranslate(int &x, int &y, int win_gravity, unsigned int client_bw, bool move_frame = false);
|
void gravityTranslate(int &x, int &y, int win_gravity, unsigned int client_bw, bool move_frame = false);
|
||||||
|
|
|
@ -1494,9 +1494,6 @@ void FluxboxWindow::setFullscreen(bool flag) {
|
||||||
|
|
||||||
frame().setUseShape(false);
|
frame().setUseShape(false);
|
||||||
|
|
||||||
if (!m_toggled_decos)
|
|
||||||
m_old_decoration_mask = decorationMask();
|
|
||||||
|
|
||||||
m_old_layernum = layerNum();
|
m_old_layernum = layerNum();
|
||||||
if (!maximized) {
|
if (!maximized) {
|
||||||
m_old_pos_x = frame().x();
|
m_old_pos_x = frame().x();
|
||||||
|
@ -1505,8 +1502,8 @@ void FluxboxWindow::setFullscreen(bool flag) {
|
||||||
m_old_height = frame().height();
|
m_old_height = frame().height();
|
||||||
}
|
}
|
||||||
|
|
||||||
// clear decorations
|
fullscreen = true;
|
||||||
setDecorationMask(0);
|
frame().setFullscreen(true);
|
||||||
|
|
||||||
// dont call Window::moveResize here, it might ignore the
|
// dont call Window::moveResize here, it might ignore the
|
||||||
// resize if win state is not resizable;
|
// resize if win state is not resizable;
|
||||||
|
@ -1518,9 +1515,6 @@ void FluxboxWindow::setFullscreen(bool flag) {
|
||||||
screen().getHeadWidth(head), screen().getHeadHeight(head));
|
screen().getHeadWidth(head), screen().getHeadHeight(head));
|
||||||
sendConfigureNotify();
|
sendConfigureNotify();
|
||||||
|
|
||||||
fullscreen = true;
|
|
||||||
frame().setFullscreen(true);
|
|
||||||
|
|
||||||
setFullscreenLayer();
|
setFullscreenLayer();
|
||||||
if (!isFocused())
|
if (!isFocused())
|
||||||
screen().focusedWindowSig().attach(this);
|
screen().focusedWindowSig().attach(this);
|
||||||
|
@ -1531,13 +1525,6 @@ void FluxboxWindow::setFullscreen(bool flag) {
|
||||||
frame().setFullscreen(false);
|
frame().setFullscreen(false);
|
||||||
|
|
||||||
frame().setUseShape(true);
|
frame().setUseShape(true);
|
||||||
if (m_toggled_decos) {
|
|
||||||
if (m_old_decoration_mask & (FbWinFrame::DECORM_TITLEBAR | FbWinFrame::DECORM_TAB))
|
|
||||||
setDecorationMask(FbWinFrame::DECOR_NONE);
|
|
||||||
else
|
|
||||||
setDecorationMask(FbWinFrame::DECOR_NORMAL);
|
|
||||||
} else
|
|
||||||
setDecorationMask(m_old_decoration_mask);
|
|
||||||
|
|
||||||
// ensure we apply the sizehints here, otherwise some
|
// ensure we apply the sizehints here, otherwise some
|
||||||
// apps (eg xterm) end up a little bit .. crappy (visually)
|
// apps (eg xterm) end up a little bit .. crappy (visually)
|
||||||
|
|
Loading…
Reference in a new issue