moved toolbar resources from screen to Toolbar

This commit is contained in:
fluxgen 2003-06-23 13:17:57 +00:00
parent 429c59cf59
commit 150db600ff
2 changed files with 254 additions and 161 deletions

View file

@ -22,7 +22,7 @@
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
// $Id: Toolbar.cc,v 1.92 2003/06/22 19:39:47 fluxgen Exp $
// $Id: Toolbar.cc,v 1.93 2003/06/23 13:17:57 fluxgen Exp $
#include "Toolbar.hh"
@ -77,14 +77,89 @@
using namespace std;
template<>
void FbTk::Resource<Toolbar::Placement>::
setFromString(const char *strval) {
if (strcasecmp(strval, "TopLeft")==0)
m_value = Toolbar::TOPLEFT;
else if (strcasecmp(strval, "BottomLeft")==0)
m_value = Toolbar::BOTTOMLEFT;
else if (strcasecmp(strval, "TopCenter")==0)
m_value = Toolbar::TOPCENTER;
else if (strcasecmp(strval, "BottomCenter")==0)
m_value = Toolbar::BOTTOMCENTER;
else if (strcasecmp(strval, "TopRight")==0)
m_value = Toolbar::TOPRIGHT;
else if (strcasecmp(strval, "BottomRight")==0)
m_value = Toolbar::BOTTOMRIGHT;
else if (strcasecmp(strval, "LeftTop") == 0)
m_value = Toolbar::LEFTTOP;
else if (strcasecmp(strval, "LeftCenter") == 0)
m_value = Toolbar::LEFTCENTER;
else if (strcasecmp(strval, "LeftBottom") == 0)
m_value = Toolbar::LEFTBOTTOM;
else if (strcasecmp(strval, "RightTop") == 0)
m_value = Toolbar::RIGHTTOP;
else if (strcasecmp(strval, "RightCenter") == 0)
m_value = Toolbar::RIGHTCENTER;
else if (strcasecmp(strval, "RightBottom") == 0)
m_value = Toolbar::RIGHTBOTTOM;
else
setDefaultValue();
}
string FbTk::Resource<Toolbar::Placement>::
getString() {
switch (m_value) {
case Toolbar::TOPLEFT:
return string("TopLeft");
break;
case Toolbar::BOTTOMLEFT:
return string("BottomLeft");
break;
case Toolbar::TOPCENTER:
return string("TopCenter");
break;
case Toolbar::BOTTOMCENTER:
return string("BottomCenter");
break;
case Toolbar::TOPRIGHT:
return string("TopRight");
break;
case Toolbar::BOTTOMRIGHT:
return string("BottomRight");
break;
case Toolbar::LEFTTOP:
return string("LeftTop");
break;
case Toolbar::LEFTCENTER:
return string("LeftCenter");
break;
case Toolbar::LEFTBOTTOM:
return string("LeftBottom");
break;
case Toolbar::RIGHTTOP:
return string("RightTop");
break;
case Toolbar::RIGHTCENTER:
return string("RightCenter");
break;
case Toolbar::RIGHTBOTTOM:
return string("RightBottom");
break;
}
//default string
return string("BottomCenter");
}
namespace {
class SetToolbarPlacementCmd: public FbTk::Command {
public:
explicit SetToolbarPlacementCmd(Toolbar &tbar, Toolbar::Placement place):m_tbar(tbar), m_place(place) { }
void execute() {
m_tbar.setPlacement(m_place);
m_tbar.reconfigure();
m_tbar.screen().saveToolbarPlacement(m_place);
m_tbar.reconfigure();
Fluxbox::instance()->save_rc();
}
private:
@ -92,102 +167,6 @@ private:
Toolbar::Placement m_place;
};
void setupMenus(Toolbar &tbar) {
I18n *i18n = I18n::instance();
using namespace FBNLS;
using namespace FbTk;
FbTk::Menu &menu = tbar.menu();
RefCount<Command> start_edit(new SimpleCommand<Toolbar>(tbar, &Toolbar::edit));
menu.insert(i18n->getMessage(FBNLS::ToolbarSet, FBNLS::ToolbarEditWkspcName,
"Edit current workspace name"),
start_edit);
menu.setLabel(i18n->getMessage(
FBNLS::ToolbarSet, FBNLS::ToolbarToolbarTitle,
"Toolbar"));
FbTk::MenuItem *toolbar_menuitem = new IntResMenuItem("Toolbar width percent",
tbar.screen().getToolbarWidthPercentResource(),
0, 100); // min/max value
FbTk::RefCount<FbTk::Command> reconfig_toolbar(new FbTk::
SimpleCommand<Toolbar>
(tbar, &Toolbar::reconfigure));
FbTk::RefCount<FbTk::Command> save_resources(new FbTk::
SimpleCommand<Fluxbox>
(*Fluxbox::instance(), &Fluxbox::save_rc));
FbTk::MacroCommand *toolbar_menuitem_macro = new FbTk::MacroCommand();
toolbar_menuitem_macro->add(reconfig_toolbar);
toolbar_menuitem_macro->add(save_resources);
FbTk::RefCount<FbTk::Command> reconfig_toolbar_and_save_resource(toolbar_menuitem_macro);
toolbar_menuitem->setCommand(reconfig_toolbar_and_save_resource);
menu.insert(toolbar_menuitem);
menu.insert(new BoolMenuItem(i18n->getMessage(FBNLS::CommonSet, FBNLS::CommonAutoHide,
"Auto hide"),
tbar.screen().doToolbarAutoHide(),
reconfig_toolbar_and_save_resource));
menu.insert("Layer...", &tbar.layermenu());
if (tbar.screen().hasXinerama()) {
menu.insert("On Head...", new XineramaHeadMenu<Toolbar>(
*tbar.screen().menuTheme(),
tbar.screen(),
tbar.screen().imageControl(),
*tbar.screen().layerManager().getLayer(Fluxbox::instance()->getMenuLayer()),
&tbar
));
}
// setup items in placement menu
struct {
int set;
int base;
const char *default_str;
Toolbar::Placement placement;
} place_menu[] = {
{0, 0, "Top Left", Toolbar::TOPLEFT},
{0, 0, "Left Top", Toolbar::LEFTTOP},
{0, 0, "Left Center", Toolbar::LEFTCENTER},
{0, 0, "Left Bottom", Toolbar::LEFTBOTTOM},
{0, 0, "Bottom Left", Toolbar::BOTTOMLEFT},
{0, 0, "Top Center", Toolbar::TOPCENTER},
{0, 0, 0, Toolbar::TOPCENTER},
{0, 0, 0, Toolbar::BOTTOMCENTER},
{0, 0, 0, Toolbar::BOTTOMCENTER},
{0, 0, "Bottom Center", Toolbar::BOTTOMCENTER},
{0, 0, "Top Right", Toolbar::TOPRIGHT},
{0, 0, "Right Top", Toolbar::RIGHTTOP},
{0, 0, "Right Center", Toolbar::RIGHTCENTER},
{0, 0, "Right Bottom", Toolbar::RIGHTBOTTOM},
{0, 0, "Bottom Right", Toolbar::BOTTOMRIGHT}
};
tbar.placementMenu().setMinimumSublevels(3);
// create items in sub menu
for (size_t i=0; i<15; ++i) {
if (place_menu[i].default_str == 0) {
tbar.placementMenu().insert("");
} else {
const char *i18n_str = i18n->getMessage(place_menu[i].set,
place_menu[i].base,
place_menu[i].default_str);
RefCount<FbTk::Command> setplace(new SetToolbarPlacementCmd(tbar, place_menu[i].placement));
tbar.placementMenu().insert(i18n_str, setplace);
}
}
menu.insert("Placement", &tbar.placementMenu());
tbar.placementMenu().update();
menu.update();
}
}; // end anonymous
// toolbar frame
@ -262,9 +241,8 @@ Toolbar::Frame::~Frame() {
}
Toolbar::Toolbar(BScreen &scrn, FbTk::XLayer &layer, FbTk::Menu &menu, size_t width):
editing(false),
hidden(scrn.doToolbarAutoHide()),
do_auto_hide(scrn.doToolbarAutoHide()),
m_editing(false),
m_hidden(false),
frame(*this, scrn.screenNumber()),
m_screen(scrn),
m_clock_timer(this), // get the clock updating every minute
@ -279,17 +257,27 @@ Toolbar::Toolbar(BScreen &scrn, FbTk::XLayer &layer, FbTk::Menu &menu, size_t wi
this,
true),
m_theme(scrn.screenNumber()),
m_place(scrn.toolbarPlacement()),
m_themelistener(*this),
m_layeritem(frame.window, layer),
m_strut(0) {
m_strut(0),
m_rc_auto_hide(scrn.resourceManager(), false,
scrn.name() + ".toolbar.autoHide", scrn.altName() + ".Toolbar.AutoHide"),
m_rc_width_percent(scrn.resourceManager(), 65,
scrn.name() + ".toolbar.widthPercent", scrn.altName() + ".Toolbar.WidthPercent"),
m_rc_layernum(scrn.resourceManager(), Fluxbox::Layer(Fluxbox::instance()->getDesktopLayer()),
scrn.name() + ".toolbar.layer", scrn.altName() + ".Toolbar.Layer"),
m_rc_on_head(scrn.resourceManager(), 0,
scrn.name() + ".toolbar.onhead", scrn.altName() + ".Toolbar.onHead"),
m_rc_placement(scrn.resourceManager(), Toolbar::BOTTOMCENTER,
scrn.name() + ".toolbar.placement", scrn.altName() + ".Toolbar.Placement")
{
// we need to get notified when the theme is reloaded
m_theme.addListener(m_themelistener);
m_layermenu.setInternalMenu();
m_placementmenu.setInternalMenu();
setupMenus(*this);
setupMenus();
// geometry settings
frame.width = width;
@ -313,8 +301,6 @@ Toolbar::Toolbar(BScreen &scrn, FbTk::XLayer &layer, FbTk::Menu &menu, size_t wi
frame.grab_x = frame.grab_y = 0;
display = FbTk::App::instance()->display();
frame.base = frame.label = frame.wlabel = frame.clk = frame.button =
frame.pbutton = None;
@ -373,7 +359,7 @@ void Toolbar::updateStrut() {
// request area on screen
int top = 0, bottom = 0, left = 0, right = 0;
switch (m_place) {
switch (placement()) {
case TOPLEFT:
case TOPCENTER:
case TOPRIGHT:
@ -400,12 +386,12 @@ void Toolbar::updateStrut() {
}
bool Toolbar::isVertical() const {
return (m_place == RIGHTCENTER ||
m_place == RIGHTTOP ||
m_place == RIGHTBOTTOM ||
m_place == LEFTCENTER ||
m_place == LEFTTOP ||
m_place == LEFTBOTTOM);
return (placement() == RIGHTCENTER ||
placement() == RIGHTTOP ||
placement() == RIGHTBOTTOM ||
placement() == LEFTCENTER ||
placement() == LEFTTOP ||
placement() == LEFTBOTTOM);
}
void Toolbar::addIcon(FluxboxWindow *w) {
@ -454,15 +440,18 @@ void Toolbar::disableIconBar() {
}
void Toolbar::raise() {
m_layeritem.raise();
}
void Toolbar::lower() {
m_layeritem.lower();
}
void Toolbar::reconfigure() {
if (do_auto_hide == false &&
do_auto_hide != screen().doToolbarAutoHide()) {
if (doAutoHide())
m_hide_timer.start();
}
do_auto_hide = screen().doToolbarAutoHide();
bool vertical = isVertical();
@ -472,7 +461,7 @@ void Toolbar::reconfigure() {
frame.bevel_w = screen().rootTheme().bevelWidth();
// recallibrate size
setPlacement(m_place);
setPlacement(placement());
#ifdef HAVE_STRFTIME
time_t ttmp = time(0);
@ -552,7 +541,7 @@ void Toolbar::reconfigure() {
frame.window_label_w = w - i;
if (hidden)
if (isHidden())
frame.window.moveResize(frame.x_hidden, frame.y_hidden,
frame.width, frame.height);
else {
@ -912,8 +901,8 @@ void Toolbar::edit() {
Window window;
int foo;
editing = true; //mark for editing
m_editing = true; //mark for editing
Display *display = FbTk::App::instance()->display();
//workspace label already has intput focus ?
if (XGetInputFocus(display, &window, &foo) &&
window == frame.workspace_label)
@ -948,6 +937,7 @@ void Toolbar::buttonPressEvent(XButtonEvent &be) {
checkClock(true, true);
}
#endif // HAVE_STRFTIME
} else if (be.button == 3) {
FluxboxWindow *fluxboxwin = 0;
// if we clicked on a icon then show window menu
@ -995,6 +985,7 @@ void Toolbar::buttonPressEvent(XButtonEvent &be) {
void Toolbar::buttonReleaseEvent(XButtonEvent &re) {
if (re.button == 1) {
raise();
if (re.window == frame.workspace_label) {
FbTk::Menu *menu = screen().getWorkspacemenu();
//move the workspace label and make it visible
@ -1031,10 +1022,10 @@ void Toolbar::buttonReleaseEvent(XButtonEvent &re) {
void Toolbar::enterNotifyEvent(XCrossingEvent &not_used) {
if (! do_auto_hide)
if (! doAutoHide())
return;
if (hidden) {
if (isHidden()) {
if (! m_hide_timer.isTiming())
m_hide_timer.start();
} else {
@ -1044,10 +1035,10 @@ void Toolbar::enterNotifyEvent(XCrossingEvent &not_used) {
}
void Toolbar::leaveNotifyEvent(XCrossingEvent &not_used) {
if (! do_auto_hide)
if (! doAutoHide())
return;
if (hidden) {
if (isHidden()) {
if (m_hide_timer.isTiming())
m_hide_timer.stop();
} else if (! m_toolbarmenu.isVisible() && ! m_hide_timer.isTiming())
@ -1059,7 +1050,7 @@ void Toolbar::leaveNotifyEvent(XCrossingEvent &not_used) {
void Toolbar::exposeEvent(XExposeEvent &ee) {
if (ee.window == frame.clock)
checkClock(true);
else if (ee.window == frame.workspace_label && (! editing))
else if (ee.window == frame.workspace_label && (! isEditing()))
redrawWorkspaceLabel();
else if (m_iconbar.get() != 0)
m_iconbar->exposeEvent(&ee);
@ -1067,7 +1058,7 @@ void Toolbar::exposeEvent(XExposeEvent &ee) {
void Toolbar::keyPressEvent(XKeyEvent &ke) {
if (ke.window != frame.workspace_label.window() || !editing)
if (ke.window != frame.workspace_label.window() || !isEditing())
return;
KeySym ks;
@ -1075,35 +1066,35 @@ void Toolbar::keyPressEvent(XKeyEvent &ke) {
XLookupString(&ke, keychar, 1, &ks, 0);
if (ks == XK_Return || ks == XK_Escape) {
editing = false;
m_editing = false;
Fluxbox * const fluxbox = Fluxbox::instance();
if (fluxbox->getFocusedWindow()) {
fluxbox->getFocusedWindow()->setInputFocus();
fluxbox->getFocusedWindow()->setFocusFlag(true);
} else
XSetInputFocus(display, PointerRoot, None, CurrentTime);
XSetInputFocus(FbTk::App::instance()->display(), PointerRoot, None, CurrentTime);
if (ks == XK_Return) //change workspace name if keypress = Return
screen().currentWorkspace()->setName(new_workspace_name.c_str());
screen().currentWorkspace()->setName(m_new_workspace_name.c_str());
new_workspace_name.erase(); //erase temporary workspace name
m_new_workspace_name.erase(); //erase temporary workspace name
reconfigure();
//save workspace names
Fluxbox::instance()->save_rc();
} else if (! IsModifierKey(ks) && !IsCursorKey(ks)) {
if (ks == XK_BackSpace && new_workspace_name.size())
new_workspace_name.erase(new_workspace_name.size()-1);
if (ks == XK_BackSpace && m_new_workspace_name.size())
m_new_workspace_name.erase(m_new_workspace_name.size() - 1);
else
new_workspace_name += keychar[0];
m_new_workspace_name += keychar[0];
frame.workspace_label.clear();
int l = new_workspace_name.size(), tw, x;
int l = m_new_workspace_name.size(), tw, x;
tw = m_theme.font().textWidth(new_workspace_name.c_str(), l);
tw = m_theme.font().textWidth(m_new_workspace_name.c_str(), l);
x = (frame.workspace_label_w - tw) / 2;
if (x < (signed) frame.bevel_w)
@ -1118,7 +1109,7 @@ void Toolbar::keyPressEvent(XKeyEvent &ke) {
m_theme.font().drawText(frame.workspace_label.window(),
screen().screenNumber(),
screen().winFrameTheme().labelTextFocusGC(),
new_workspace_name.c_str(), l,
m_new_workspace_name.c_str(), l,
x, dy);
frame.workspace_label.drawRectangle(screen().winFrameTheme().labelTextFocusGC(),
@ -1139,6 +1130,7 @@ void Toolbar::timeout() {
void Toolbar::setPlacement(Toolbar::Placement where) {
*m_rc_placement = where;
int head_x = 0,
head_y = 0,
head_w,
@ -1146,7 +1138,7 @@ void Toolbar::setPlacement(Toolbar::Placement where) {
#ifdef XINERAMA
if (screen().hasXinerama()) {
int head = screen().getToolbarOnHead();
int head = *m_rc_on_head;
head_x = screen().getHeadX(head);
head_y = screen().getHeadY(head);
head_w = screen().getHeadWidth(head);
@ -1158,9 +1150,8 @@ void Toolbar::setPlacement(Toolbar::Placement where) {
head_h = screen().height();
}
m_place = where;
frame.width = head_w * screen().getToolbarWidthPercent() / 100;
frame.width = head_w * (*m_rc_width_percent) / 100;
frame.height = m_theme.font().height();
frame.height += 2;
@ -1170,7 +1161,7 @@ void Toolbar::setPlacement(Toolbar::Placement where) {
// should we flipp sizes?
if (isVertical()) {
frame.width = frame.height;
frame.height = head_h * screen().getToolbarWidthPercent() / 100;
frame.height = head_h * (*m_rc_width_percent) / 100;
if (!m_theme.font().isRotated())
m_theme.font().rotate(90); // rotate to vertical text
@ -1289,8 +1280,9 @@ void Toolbar::HideHandler::timeout() {
toolbar->m_hide_timer.fireOnce(true);
toolbar->hidden = ! toolbar->hidden;
if (toolbar->hidden) {
// toggle hidden
toolbar->m_hidden = ! toolbar->m_hidden;
if (toolbar->isHidden()) {
toolbar->frame.window.move(toolbar->frame.x_hidden, toolbar->frame.y_hidden);
} else {
toolbar->frame.window.move(toolbar->frame.x, toolbar->frame.y);
@ -1299,5 +1291,98 @@ void Toolbar::HideHandler::timeout() {
void Toolbar::moveToLayer(int layernum) {
m_layeritem.moveToLayer(layernum);
m_screen.saveToolbarLayer((Fluxbox::Layer) layernum);
*m_rc_layernum = layernum;
}
void Toolbar::setupMenus() {
Toolbar &tbar = *this;
I18n *i18n = I18n::instance();
using namespace FBNLS;
using namespace FbTk;
FbTk::Menu &menu = tbar.menu();
RefCount<Command> start_edit(new SimpleCommand<Toolbar>(tbar, &Toolbar::edit));
menu.insert(i18n->getMessage(FBNLS::ToolbarSet, FBNLS::ToolbarEditWkspcName,
"Edit current workspace name"),
start_edit);
menu.setLabel(i18n->getMessage(FBNLS::ToolbarSet, FBNLS::ToolbarToolbarTitle,
"Toolbar"));
FbTk::MenuItem *toolbar_menuitem = new IntResMenuItem("Toolbar width percent",
m_rc_width_percent,
0, 100); // min/max value
FbTk::RefCount<FbTk::Command> reconfig_toolbar(new FbTk::
SimpleCommand<Toolbar>
(tbar, &Toolbar::reconfigure));
FbTk::RefCount<FbTk::Command> save_resources(new FbCommands::SaveResources());
FbTk::MacroCommand *toolbar_menuitem_macro = new FbTk::MacroCommand();
toolbar_menuitem_macro->add(reconfig_toolbar);
toolbar_menuitem_macro->add(save_resources);
FbTk::RefCount<FbTk::Command> reconfig_toolbar_and_save_resource(toolbar_menuitem_macro);
toolbar_menuitem->setCommand(reconfig_toolbar_and_save_resource);
menu.insert(toolbar_menuitem);
menu.insert(new BoolMenuItem(i18n->getMessage(FBNLS::CommonSet, FBNLS::CommonAutoHide,
"Auto hide"),
*m_rc_auto_hide,
reconfig_toolbar_and_save_resource));
menu.insert("Layer...", &tbar.layermenu());
if (tbar.screen().hasXinerama()) {
menu.insert("On Head...", new XineramaHeadMenu<Toolbar>(
*tbar.screen().menuTheme(),
tbar.screen(),
tbar.screen().imageControl(),
*tbar.screen().layerManager().getLayer(Fluxbox::instance()->getMenuLayer()),
&tbar
));
}
// setup items in placement menu
struct {
int set;
int base;
const char *default_str;
Toolbar::Placement placement;
} place_menu[] = {
{0, 0, "Top Left", Toolbar::TOPLEFT},
{0, 0, "Left Top", Toolbar::LEFTTOP},
{0, 0, "Left Center", Toolbar::LEFTCENTER},
{0, 0, "Left Bottom", Toolbar::LEFTBOTTOM},
{0, 0, "Bottom Left", Toolbar::BOTTOMLEFT},
{0, 0, "Top Center", Toolbar::TOPCENTER},
{0, 0, 0, Toolbar::TOPCENTER},
{0, 0, 0, Toolbar::BOTTOMCENTER},
{0, 0, 0, Toolbar::BOTTOMCENTER},
{0, 0, "Bottom Center", Toolbar::BOTTOMCENTER},
{0, 0, "Top Right", Toolbar::TOPRIGHT},
{0, 0, "Right Top", Toolbar::RIGHTTOP},
{0, 0, "Right Center", Toolbar::RIGHTCENTER},
{0, 0, "Right Bottom", Toolbar::RIGHTBOTTOM},
{0, 0, "Bottom Right", Toolbar::BOTTOMRIGHT}
};
tbar.placementMenu().setMinimumSublevels(3);
// create items in sub menu
for (size_t i=0; i<15; ++i) {
if (place_menu[i].default_str == 0) {
tbar.placementMenu().insert("");
} else {
const char *i18n_str = i18n->getMessage(place_menu[i].set,
place_menu[i].base,
place_menu[i].default_str);
RefCount<FbTk::Command> setplace(new SetToolbarPlacementCmd(tbar, place_menu[i].placement));
tbar.placementMenu().insert(i18n_str, setplace);
}
}
menu.insert("Placement", &tbar.placementMenu());
tbar.placementMenu().update();
menu.update();
}

View file

@ -22,7 +22,7 @@
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
// $Id: Toolbar.hh,v 1.34 2003/06/22 19:38:38 fluxgen Exp $
// $Id: Toolbar.hh,v 1.35 2003/06/23 13:16:50 fluxgen Exp $
#ifndef TOOLBAR_HH
#define TOOLBAR_HH
@ -73,11 +73,11 @@ public:
void delIcon(FluxboxWindow *w);
/// remove all icons
void delAllIcons();
void enableIconBar();
void disableIconBar();
void raise();
void lower();
bool containsIcon(const FluxboxWindow &win) const;
inline const FbTk::Menu &menu() const { return m_toolbarmenu; }
inline FbTk::Menu &menu() { return m_toolbarmenu; }
inline FbTk::Menu &placementMenu() { return m_placementmenu; }
@ -91,25 +91,28 @@ public:
FbTk::XLayerItem &layerItem() { return m_layeritem; }
/// are we in workspacename editing?
inline bool isEditing() const { return editing; }
inline bool isEditing() const { return m_editing; }
/// are we hidden?
inline bool isHidden() const { return hidden; }
inline bool isHidden() const { return m_hidden; }
/// do we auto hide the toolbar?
inline bool doAutoHide() const { return do_auto_hide; }
inline bool doAutoHide() const { return *m_rc_auto_hide; }
/// @return X window of the toolbar
inline const FbTk::FbWindow &window() const { return frame.window; }
inline BScreen &screen() { return m_screen; }
inline const BScreen &screen() const { return m_screen; }
inline unsigned int width() const { return frame.width; }
inline unsigned int height() const { return frame.height; }
inline unsigned int exposedHeight() const { return ((do_auto_hide) ? frame.bevel_w : frame.height); }
inline int x() const { return ((hidden) ? frame.x_hidden : frame.x); }
inline int y() const { return ((hidden) ? frame.y_hidden : frame.y); }
inline unsigned int exposedHeight() const { return doAutoHide() ? frame.bevel_w : frame.height; }
inline int x() const { return isHidden() ? frame.x_hidden : frame.x; }
inline int y() const { return isHidden() ? frame.y_hidden : frame.y; }
inline Placement placement() const { return *m_rc_placement; }
/// @return pointer to iconbar if it got one, else 0
inline const IconBar *iconBar() const { return m_iconbar.get(); }
inline const ToolbarTheme &theme() const { return m_theme; }
inline ToolbarTheme &theme() { return m_theme; }
bool isVertical() const;
bool containsIcon(const FluxboxWindow &win) const;
/**
@name eventhandlers
*/
@ -134,13 +137,12 @@ public:
private:
void setupMenus();
void clearStrut();
void updateStrut();
bool editing; ///< edit workspace label mode
bool hidden; ///< hidden state
bool do_auto_hide; ///< do we auto hide
Display *display; ///< display connection
bool m_editing; ///< edit workspace label mode
bool m_hidden; ///< hidden state
/// Toolbar frame
struct Frame {
@ -174,10 +176,10 @@ private:
LayerMenu<Toolbar> m_layermenu;
std::auto_ptr<IconBar> m_iconbar;
std::string new_workspace_name; ///< temp variable in edit workspace name mode
std::string m_new_workspace_name; ///< temp variable in edit workspace name mode
ToolbarTheme m_theme;
Placement m_place;
//!! TODO this is just temporary
class ThemeListener: public FbTk::Observer {
public:
@ -194,6 +196,12 @@ private:
FbTk::XLayerItem m_layeritem;
Strut *m_strut; ///< created and destroyed by BScreen
// resources
FbTk::Resource<bool> m_rc_auto_hide;
FbTk::Resource<int> m_rc_width_percent;
FbTk::Resource<Fluxbox::Layer> m_rc_layernum;
FbTk::Resource<int> m_rc_on_head;
FbTk::Resource<Placement> m_rc_placement;
};