make FbWinFrame aware of the decoration state

This commit is contained in:
Mark Tiefenbruck 2007-12-23 13:28:08 -08:00
parent 0676161673
commit 1b48b749b9
5 changed files with 82 additions and 78 deletions

View file

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

View file

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

View file

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

View file

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

View file

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