let FbWinFrame handle decorations in fullscreen state

This commit is contained in:
Mark Tiefenbruck 2008-08-15 04:46:06 -07:00
parent 0689a0a4a8
commit 215939d6ed
3 changed files with 39 additions and 22 deletions

View file

@ -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()) {

View file

@ -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);

View file

@ -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)