all repos — fluxbox @ 19f4dc774c19a8b9ebe06aa41a41c4e3fc23b05f

custom fork of the fluxbox windowmanager

changed layeritem to normal type instead of pointer, added placement menu and fixed font to iconbar
fluxgen fluxgen
commit

19f4dc774c19a8b9ebe06aa41a41c4e3fc23b05f

parent

4c0fb1ff752f1cfafcac11637ce9cfec92201d13

1 files changed, 78 insertions(+), 33 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.60 2003/02/22 23:07:23 fluxgen Exp $ +// $Id: Toolbar.cc,v 1.61 2003/02/23 00:49:01 fluxgen Exp $ #include "Toolbar.hh"

@@ -71,9 +71,13 @@ using namespace std;

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); + Fluxbox::instance()->save_rc(); } private: Toolbar &m_tbar;

@@ -83,21 +87,62 @@

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( + ToolbarSet, ToolbarEditWkspcName, + "Edit current workspace name"), + start_edit); + menu.setLabel(i18n->getMessage( ToolbarSet, ToolbarToolbarTitle, "Toolbar")); menu.setInternalMenu(); - menu.insert("Layer...", tbar.layermenu()); + menu.insert("Layer...", &tbar.layermenu()); - using namespace FbTk; - RefCount<Command> start_edit(new SimpleCommand<Toolbar>(tbar, &Toolbar::edit)); - menu.insert(i18n->getMessage( - ToolbarSet, ToolbarEditWkspcName, - "Edit current workspace name"), - start_edit); - + // 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 Left", Toolbar::TOPLEFT}, + {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(); }

@@ -179,18 +224,18 @@ clock_timer(this), // get the clock updating every minute

hide_timer(&hide_handler), m_toolbarmenu(*scrn.menuTheme(), scrn.getScreenNumber(), *scrn.getImageControl()), - m_layermenu(0), + m_placementmenu(*scrn.menuTheme(), + scrn.getScreenNumber(), *scrn.getImageControl()), + m_layermenu(*scrn.menuTheme(), + scrn.getScreenNumber(), + *scrn.getImageControl(), + *scrn.layerManager().getLayer(Fluxbox::instance()->getMenuLayer()), + this), m_theme(scrn.getScreenNumber()), m_place(BOTTOMCENTER), m_themelistener(*this), - m_layeritem(0) { + m_layeritem(frame.window, layer) { - m_layermenu = new LayerMenu<Toolbar>( - *scrn.menuTheme(), - scrn.getScreenNumber(), - *scrn.getImageControl(), - *scrn.layerManager().getLayer(Fluxbox::instance()->getMenuLayer()), - this); // we need to get notified when the theme is reloaded m_theme.addListener(m_themelistener);

@@ -205,8 +250,6 @@ frame.workspace_label_w = frame.clock_w = width/3;

frame.button_w = 20; frame.bevel_w = 1; - m_layeritem = new FbTk::XLayerItem(frame.window, layer); - timeval delay; delay.tv_sec = 1; delay.tv_usec = 0;

@@ -226,7 +269,7 @@ frame.pbutton = None;

if (Fluxbox::instance()->useIconBar()) - m_iconbar.reset(new IconBar(&screen(), frame.window_label.window())); + m_iconbar.reset(new IconBar(&screen(), frame.window_label.window(), m_theme.font())); XMapSubwindows(display, frame.window.window());

@@ -246,6 +289,7 @@ frame.psbutton.setOnClick(prevworkspace);

frame.nsbutton.setOnClick(nextworkspace); frame.pwbutton.setOnClick(prevwindow); frame.nwbutton.setOnClick(nextwindow); + reconfigure();

@@ -260,8 +304,6 @@ if (frame.wlabel) image_ctrl.removeImage(frame.wlabel);

if (frame.clk) image_ctrl.removeImage(frame.clk); if (frame.button) image_ctrl.removeImage(frame.button); if (frame.pbutton) image_ctrl.removeImage(frame.pbutton); - if (m_layeritem) delete m_layeritem; - if (m_layermenu) delete m_layermenu; }

@@ -285,6 +327,10 @@ FbTk::EventManager::instance()->remove(m_iconbar->delIcon(w));

} void Toolbar::reconfigure() { + bool vertical = isVertical(); + + if (m_iconbar.get()) + m_iconbar->setVertical(vertical); frame.bevel_w = screen().getBevelWidth();

@@ -357,7 +403,7 @@ frame.window.moveResize(frame.x, frame.y,

frame.width, frame.height); } - bool vertical = isVertical(); + unsigned int next_x = frame.workspace_label_w; unsigned int next_y = frame.window.height();

@@ -370,21 +416,19 @@ frame.workspace_label.moveResize(frame.bevel_w, frame.bevel_w, next_x, next_y);

next_x = 0; next_y = 0; if (vertical) { - next_y += frame.workspace_label.height() + 1; + next_y += frame.workspace_label.height() + 1 + frame.bevel_w * 2; } else { - next_x += frame.workspace_label.width() + 1; + next_x += frame.workspace_label.width() + 1 + frame.bevel_w * 2; } - frame.psbutton.moveResize(frame.bevel_w * 2 + - next_x , next_y, + frame.psbutton.moveResize(next_x , next_y, frame.button_w, frame.button_w); if (vertical) - next_y += frame.psbutton.height() + 1; + next_y += frame.psbutton.height() + 1 + frame.bevel_w * 3; else - next_x += frame.psbutton.width() + 1; + next_x += frame.psbutton.width() + 1 + frame.bevel_w * 3; - frame.nsbutton.moveResize(frame.bevel_w * 3 + - next_x, next_y, + frame.nsbutton.moveResize(next_x, next_y, frame.button_w, frame.button_w); size_t label_w = frame.window_label_w; size_t label_h = frame.height;

@@ -436,7 +480,8 @@ frame.base = image_ctrl.renderImage(frame.window.width(),

frame.window.height(), *texture); frame.window.setBackgroundPixmap(frame.base); } - if (tmp) image_ctrl.removeImage(tmp); + if (tmp) + image_ctrl.removeImage(tmp); tmp = frame.label; texture = &(m_theme.window());

@@ -541,7 +586,7 @@ m_toolbarmenu.reconfigure();

if (Fluxbox::instance()->useIconBar()) { if (m_iconbar.get() == 0) { // create new iconbar if we don't have one - m_iconbar.reset(new IconBar(&screen(), frame.window_label.window())); + m_iconbar.reset(new IconBar(&screen(), frame.window_label.window(), m_theme.font())); if (screen().getIconCount()) { BScreen::Icons & l = screen().getIconList(); BScreen::Icons::iterator it = l.begin();