all repos — fluxbox @ 150db600ffa7395cdfa1460820f87930ebdb2715

custom fork of the fluxbox windowmanager

moved toolbar resources from screen to Toolbar
fluxgen fluxgen
commit

150db600ffa7395cdfa1460820f87930ebdb2715

parent

429c59cf5992a3a30cdbde3b3a856eede13004e6

2 files changed, 254 insertions(+), 161 deletions(-)

jump to
M src/Toolbar.ccsrc/Toolbar.cc

@@ -22,7 +22,7 @@ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING

// 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 @@ #include <iostream>

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 @@ Toolbar &m_tbar;

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 @@ evm.remove(clock);

} 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 @@ *scrn.layerManager().getLayer(Fluxbox::instance()->getMenuLayer()),

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;

@@ -312,8 +300,6 @@ m_hide_timer.setTimeout(Fluxbox::instance()->getAutoRaiseDelay());

m_hide_timer.fireOnce(true); 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 @@ }

// 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 @@ screen().updateAvailableWorkspaceArea();

} 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 @@ m_iconbar.reset(0); // destroy iconbar

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

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

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 @@ frame.clock.clear();

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::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::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::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::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::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 @@ char keychar[1];

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

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::setPlacement(Toolbar::Placement where) { + *m_rc_placement = where; int head_x = 0, head_y = 0, head_w,

@@ -1146,7 +1138,7 @@ head_h;

#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 @@ head_w = screen().width();

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

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

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::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(); }
M src/Toolbar.hhsrc/Toolbar.hh

@@ -22,7 +22,7 @@ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING

// 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 @@ /// remove icon from iconbar

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

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 @@ virtual void timeout();

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 @@ FbTk::Menu m_placementmenu;

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

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