let FbWinFrame handle decorations in fullscreen state
Mark Tiefenbruck mark@fluxbox.org
3 files changed,
39 insertions(+),
22 deletions(-)
M
src/FbWinFrame.cc
→
src/FbWinFrame.cc
@@ -489,6 +489,14 @@ applyAll();
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) { if (focused) m_focused_alpha = alpha;@@ -842,7 +850,7 @@
m_bevel = theme()->bevelWidth(); setBorderWidth(); - if (m_state.deco_mask & DECORM_HANDLE && theme()->handleWidth() != 0) + if (useHandle() && theme()->handleWidth() != 0) showHandle(); else hideHandle();@@ -1427,6 +1435,22 @@ mask = strtol(str_label.c_str(), NULL, 0);
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() { int grav_x=0, grav_y=0; // negate gravity@@ -1438,13 +1462,13 @@
// tab deocration only affects if we're external // must do before the setTabMode in case it goes // to external and is meant to be hidden - if (m_state.deco_mask & DECORM_TAB) + if (useTabs()) client_move |= showTabs(); else client_move |= hideTabs(); // 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(); if (m_screen.getDefaultInternalTabs()) client_move |= setTabMode(INTERNAL);@@ -1452,11 +1476,11 @@ else
client_move |= setTabMode(EXTERNAL); } else { client_move |= hideTitlebar(); - if (m_state.deco_mask & DECORM_TAB) + if (useTabs()) client_move |= setTabMode(EXTERNAL); } - if (m_state.deco_mask & DECORM_HANDLE) + if (useHandle()) client_move |= showHandle(); else client_move |= hideHandle();@@ -1478,7 +1502,7 @@ }
bool FbWinFrame::setBorderWidth(bool do_move) { 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 && theme()->border().color().pixel() != window().borderColor()) {
M
src/FbWinFrame.hh
→
src/FbWinFrame.hh
@@ -175,7 +175,7 @@ void clearAll();
/// set focus/unfocus style 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 setFocusTitle(const std::string &str) { m_label.setText(str); }@@ -231,6 +231,12 @@
static int getDecoMaskFromString(const std::string &str); void setDecorationMask(unsigned int mask) { m_state.deco_mask = mask; } 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 // if win_gravity is negative, it does an inverse translation
M
src/Window.cc
→
src/Window.cc
@@ -1494,9 +1494,6 @@ shade();
frame().setUseShape(false); - if (!m_toggled_decos) - m_old_decoration_mask = decorationMask(); - m_old_layernum = layerNum(); if (!maximized) { m_old_pos_x = frame().x();@@ -1505,8 +1502,8 @@ m_old_width = frame().width();
m_old_height = frame().height(); } - // clear decorations - setDecorationMask(0); + fullscreen = true; + frame().setFullscreen(true); // dont call Window::moveResize here, it might ignore the // resize if win state is not resizable;@@ -1518,9 +1515,6 @@ frame().moveResize(screen().getHeadX(head), screen().getHeadY(head),
screen().getHeadWidth(head), screen().getHeadHeight(head)); sendConfigureNotify(); - fullscreen = true; - frame().setFullscreen(true); - setFullscreenLayer(); if (!isFocused()) screen().focusedWindowSig().attach(this);@@ -1531,13 +1525,6 @@ fullscreen = false;
frame().setFullscreen(false); 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 // apps (eg xterm) end up a little bit .. crappy (visually)