From 1b48b749b9a376c883ff4cc2ca3e807ac85cf21f Mon Sep 17 00:00:00 2001 From: Mark Tiefenbruck <mark@fluxbox.org> Date: Sun, 23 Dec 2007 13:28:08 -0800 Subject: make FbWinFrame aware of the decoration state --- src/FbWinFrame.cc | 1 + src/FbWinFrame.hh | 30 +++++++++++++++++++++ src/Remember.cc | 22 ++++++++-------- src/Window.cc | 79 ++++++++++++++++++++++++++++--------------------------- src/Window.hh | 28 -------------------- 5 files changed, 82 insertions(+), 78 deletions(-) diff --git a/src/FbWinFrame.cc b/src/FbWinFrame.cc index f710416..266ddea 100644 --- a/src/FbWinFrame.cc +++ b/src/FbWinFrame.cc @@ -81,6 +81,7 @@ FbWinFrame::FbWinFrame(BScreen &screen, FbWinFrameTheme &theme, FbTk::ImageContr ButtonMotionMask | ExposureMask | EnterWindowMask | LeaveWindowMask), m_bevel(1), + m_decoration_mask(DECOR_NORMAL), m_use_titlebar(true), m_use_tabs(true), m_use_handle(true), diff --git a/src/FbWinFrame.hh b/src/FbWinFrame.hh index 9bd29dd..5af852e 100644 --- a/src/FbWinFrame.hh +++ b/src/FbWinFrame.hh @@ -72,6 +72,34 @@ public: RIGHTBOTTOM, RIGHTTOP }; + /** + This enumeration represents individual decoration + attributes, they can be OR-d together to get a mask. + Useful for saving. + */ + enum DecorationMask { + DECORM_TITLEBAR = (1<<0), + DECORM_HANDLE = (1<<1), + DECORM_BORDER = (1<<2), + DECORM_ICONIFY = (1<<3), + DECORM_MAXIMIZE = (1<<4), + DECORM_CLOSE = (1<<5), + DECORM_MENU = (1<<6), + DECORM_STICKY = (1<<7), + DECORM_SHADE = (1<<8), + DECORM_TAB = (1<<9), + DECORM_ENABLED = (1<<10), + DECORM_LAST = (1<<11) // useful for getting "All" + }; + + enum Decoration { + DECOR_NONE = 0, + DECOR_NORMAL = DECORM_LAST - 1, + DECOR_TINY = DECORM_TITLEBAR|DECORM_ICONIFY|DECORM_MENU|DECORM_TAB, + DECOR_TOOL = DECORM_TITLEBAR|DECORM_MENU, + DECOR_BORDER = DECORM_BORDER|DECORM_MENU, + DECOR_TAB = DECORM_BORDER|DECORM_MENU|DECORM_TAB + }; /// create a top level window FbWinFrame(BScreen &screen, FbWinFrameTheme &theme, FbTk::ImageControl &imgctrl, @@ -161,6 +189,7 @@ public: /// remove any handler for the windows void removeEventHandler(); + void setDecorationMask(unsigned int mask) { m_decoration_mask = mask; } // these return true/false for if something changed bool hideTitlebar(); bool showTitlebar(); @@ -314,6 +343,7 @@ private: typedef std::list<FbTk::TextButton *> LabelList; IconButton *m_current_label; ///< which client button is focused at the moment int m_bevel; ///< bevel between titlebar items and titlebar + unsigned int m_decoration_mask; ///< bitmask of applied decorations bool m_use_titlebar; ///< if we should use titlebar bool m_use_tabs; ///< if we should use tabs (turns them off in external mode only) bool m_use_handle; ///< if we should use handle diff --git a/src/Remember.cc b/src/Remember.cc index 2090008..a48f399 100644 --- a/src/Remember.cc +++ b/src/Remember.cc @@ -814,25 +814,25 @@ void Remember::save() { apps_file << " [Deco]\t{NONE}" << endl; break; case (0xffffffff): - case (FluxboxWindow::DECORM_LAST - 1): + case (FbWinFrame::DECORM_LAST - 1): apps_file << " [Deco]\t{NORMAL}" << endl; break; - case (FluxboxWindow::DECORM_TITLEBAR - | FluxboxWindow::DECORM_ICONIFY - | FluxboxWindow::DECORM_MENU): + case (FbWinFrame::DECORM_TITLEBAR + | FbWinFrame::DECORM_ICONIFY + | FbWinFrame::DECORM_MENU): apps_file << " [Deco]\t{TOOL}" << endl; break; - case (FluxboxWindow::DECORM_TITLEBAR - | FluxboxWindow::DECORM_MENU): + case (FbWinFrame::DECORM_TITLEBAR + | FbWinFrame::DECORM_MENU): apps_file << " [Deco]\t{TINY}" << endl; break; - case (FluxboxWindow::DECORM_BORDER - | FluxboxWindow::DECORM_MENU): + case (FbWinFrame::DECORM_BORDER + | FbWinFrame::DECORM_MENU): apps_file << " [Deco]\t{BORDER}" << endl; break; - case (FluxboxWindow::DECORM_BORDER - | FluxboxWindow::DECORM_MENU - | FluxboxWindow::DECORM_TAB): + case (FbWinFrame::DECORM_BORDER + | FbWinFrame::DECORM_MENU + | FbWinFrame::DECORM_TAB): apps_file << " [Deco]\t{TAB}" << endl; break; default: diff --git a/src/Window.cc b/src/Window.cc index 6806afa..54f6915 100644 --- a/src/Window.cc +++ b/src/Window.cc @@ -1516,10 +1516,10 @@ void FluxboxWindow::setFullscreen(bool flag) { frame().setUseShape(true); if (m_toggled_decos) { - if (m_old_decoration_mask & (DECORM_TITLEBAR | DECORM_TAB)) - setDecorationMask(DECOR_NONE); + if (m_old_decoration_mask & (FbWinFrame::DECORM_TITLEBAR | FbWinFrame::DECORM_TAB)) + setDecorationMask(FbWinFrame::DECOR_NONE); else - setDecorationMask(DECOR_NORMAL); + setDecorationMask(FbWinFrame::DECOR_NORMAL); } else setDecorationMask(m_old_decoration_mask); @@ -3032,6 +3032,7 @@ void FluxboxWindow::applyDecorations(bool initial) { client_move = true; } + frame().setDecorationMask(decorationMask()); frame().reconfigure(); if (client_move) Fluxbox::instance()->updateFrameExtents(*this); @@ -3051,9 +3052,9 @@ void FluxboxWindow::toggleDecoration() { if (m_toggled_decos) { m_old_decoration_mask = decorationMask(); if (decorations.titlebar | decorations.tab) - setDecorationMask(DECOR_NONE); + setDecorationMask(FbWinFrame::DECOR_NONE); else - setDecorationMask(DECOR_NORMAL); + setDecorationMask(FbWinFrame::DECOR_NORMAL); } else //revert back to old decoration setDecorationMask(m_old_decoration_mask); @@ -3062,42 +3063,42 @@ void FluxboxWindow::toggleDecoration() { unsigned int FluxboxWindow::decorationMask() const { unsigned int ret = 0; if (decorations.titlebar) - ret |= DECORM_TITLEBAR; + ret |= FbWinFrame::DECORM_TITLEBAR; if (decorations.handle) - ret |= DECORM_HANDLE; + ret |= FbWinFrame::DECORM_HANDLE; if (decorations.border) - ret |= DECORM_BORDER; + ret |= FbWinFrame::DECORM_BORDER; if (decorations.iconify) - ret |= DECORM_ICONIFY; + ret |= FbWinFrame::DECORM_ICONIFY; if (decorations.maximize) - ret |= DECORM_MAXIMIZE; + ret |= FbWinFrame::DECORM_MAXIMIZE; if (decorations.close) - ret |= DECORM_CLOSE; + ret |= FbWinFrame::DECORM_CLOSE; if (decorations.menu) - ret |= DECORM_MENU; + ret |= FbWinFrame::DECORM_MENU; if (decorations.sticky) - ret |= DECORM_STICKY; + ret |= FbWinFrame::DECORM_STICKY; if (decorations.shade) - ret |= DECORM_SHADE; + ret |= FbWinFrame::DECORM_SHADE; if (decorations.tab) - ret |= DECORM_TAB; + ret |= FbWinFrame::DECORM_TAB; if (decorations.enabled) - ret |= DECORM_ENABLED; + ret |= FbWinFrame::DECORM_ENABLED; return ret; } void FluxboxWindow::setDecorationMask(unsigned int mask, bool apply) { - decorations.titlebar = mask & DECORM_TITLEBAR; - decorations.handle = mask & DECORM_HANDLE; - decorations.border = mask & DECORM_BORDER; - decorations.iconify = mask & DECORM_ICONIFY; - decorations.maximize = mask & DECORM_MAXIMIZE; - decorations.close = mask & DECORM_CLOSE; - decorations.menu = mask & DECORM_MENU; - decorations.sticky = mask & DECORM_STICKY; - decorations.shade = mask & DECORM_SHADE; - decorations.tab = mask & DECORM_TAB; - decorations.enabled = mask & DECORM_ENABLED; + decorations.titlebar = mask & FbWinFrame::DECORM_TITLEBAR; + decorations.handle = mask & FbWinFrame::DECORM_HANDLE; + decorations.border = mask & FbWinFrame::DECORM_BORDER; + decorations.iconify = mask & FbWinFrame::DECORM_ICONIFY; + decorations.maximize = mask & FbWinFrame::DECORM_MAXIMIZE; + decorations.close = mask & FbWinFrame::DECORM_CLOSE; + decorations.menu = mask & FbWinFrame::DECORM_MENU; + decorations.sticky = mask & FbWinFrame::DECORM_STICKY; + decorations.shade = mask & FbWinFrame::DECORM_SHADE; + decorations.tab = mask & FbWinFrame::DECORM_TAB; + decorations.enabled = mask & FbWinFrame::DECORM_ENABLED; // we don't want to do this during initialization if (apply) applyDecorations(); @@ -3268,7 +3269,7 @@ void FluxboxWindow::doSnapping(int &orig_left, int &orig_top) { // we only care about the left/top etc that includes borders int borderW = 0; - if (decorationMask() & (DECORM_BORDER|DECORM_HANDLE)) + if (decorationMask() & (FbWinFrame::DECORM_BORDER|FbWinFrame::DECORM_HANDLE)) borderW = frame().window().borderWidth(); int top = orig_top; // orig include the borders @@ -3340,7 +3341,7 @@ void FluxboxWindow::doSnapping(int &orig_left, int &orig_top) { if ((*it) == this) continue; // skip myself - bw = (*it)->decorationMask() & (DECORM_BORDER|DECORM_HANDLE) ? + bw = (*it)->decorationMask() & (FbWinFrame::DECORM_BORDER|FbWinFrame::DECORM_HANDLE) ? (*it)->frame().window().borderWidth() : 0; snapToWindow(dx, dy, left, right, top, bottom, @@ -4106,17 +4107,17 @@ void FluxboxWindow::associateClient(WinClient &client) { int FluxboxWindow::getDecoMaskFromString(const string &str_label) { if (strcasecmp(str_label.c_str(), "NONE") == 0) - return DECOR_NONE; + return FbWinFrame::DECOR_NONE; if (strcasecmp(str_label.c_str(), "NORMAL") == 0) - return DECOR_NORMAL; + return FbWinFrame::DECOR_NORMAL; if (strcasecmp(str_label.c_str(), "TINY") == 0) - return DECOR_TINY; + return FbWinFrame::DECOR_TINY; if (strcasecmp(str_label.c_str(), "TOOL") == 0) - return DECOR_TOOL; + return FbWinFrame::DECOR_TOOL; if (strcasecmp(str_label.c_str(), "BORDER") == 0) - return DECOR_BORDER; + return FbWinFrame::DECOR_BORDER; if (strcasecmp(str_label.c_str(), "TAB") == 0) - return DECOR_TAB; + return FbWinFrame::DECOR_TAB; int mask = -1; if (str_label.size() > 1 && str_label[0] == '0' && str_label[1] == 'x' || str_label.size() > 0 && isdigit(str_label[0])) @@ -4158,7 +4159,7 @@ void FluxboxWindow::setWindowType(Focusable::WindowType type) { */ setFocusHidden(true); setIconHidden(true); - setDecorationMask(DECOR_NONE); + setDecorationMask(FbWinFrame::DECOR_NONE); moveToLayer(::Layer::DOCK); break; case Focusable::TYPE_DESKTOP: @@ -4171,7 +4172,7 @@ void FluxboxWindow::setWindowType(Focusable::WindowType type) { setFocusHidden(true); setIconHidden(true); moveToLayer(::Layer::DESKTOP); - setDecorationMask(DECOR_NONE); + setDecorationMask(FbWinFrame::DECOR_NONE); setTabable(false); setMovable(false); setResizable(false); @@ -4183,7 +4184,7 @@ void FluxboxWindow::setWindowType(Focusable::WindowType type) { * window is a splash screen displayed as an application * is starting up. */ - setDecorationMask(DECOR_NONE); + setDecorationMask(FbWinFrame::DECOR_NONE); setFocusHidden(true); setIconHidden(true); setMovable(false); @@ -4200,7 +4201,7 @@ void FluxboxWindow::setWindowType(Focusable::WindowType type) { * application). Windows of this type may set the * WM_TRANSIENT_FOR hint indicating the main application window. */ - setDecorationMask(DECOR_TOOL); + setDecorationMask(FbWinFrame::DECOR_TOOL); setIconHidden(true); moveToLayer(::Layer::ABOVE_DOCK); break; diff --git a/src/Window.hh b/src/Window.hh index eeb7ae1..1d54d18 100644 --- a/src/Window.hh +++ b/src/Window.hh @@ -110,34 +110,6 @@ public: MAX_VERT = 2, ///< maximize vertical MAX_FULL = 3 ///< maximize full }; - /** - This enumeration represents individual decoration - attributes, they can be OR-d together to get a mask. - Useful for saving. - */ - enum DecorationMask { - DECORM_TITLEBAR = (1<<0), - DECORM_HANDLE = (1<<1), - DECORM_BORDER = (1<<2), - DECORM_ICONIFY = (1<<3), - DECORM_MAXIMIZE = (1<<4), - DECORM_CLOSE = (1<<5), - DECORM_MENU = (1<<6), - DECORM_STICKY = (1<<7), - DECORM_SHADE = (1<<8), - DECORM_TAB = (1<<9), - DECORM_ENABLED = (1<<10), - DECORM_LAST = (1<<11) // useful for getting "All" - }; - - enum Decoration { - DECOR_NONE = 0, - DECOR_NORMAL = DECORM_LAST - 1, - DECOR_TINY = DECORM_TITLEBAR|DECORM_ICONIFY|DECORM_MENU|DECORM_TAB, - DECOR_TOOL = DECORM_TITLEBAR|DECORM_MENU, - DECOR_BORDER = DECORM_BORDER|DECORM_MENU, - DECOR_TAB = DECORM_BORDER|DECORM_MENU|DECORM_TAB - }; /// Different resize modes when resizing a window enum ResizeModel { -- cgit v0.11.2