Toolbar::Toolbar(BScreen *scrn) {
screen = scrn;
blackbox = screen->getBlackbox();
- toolbarstr = (string)"session.screen" + itostring(screen->getScreenNumber())
- + ".toolbar.";
+ toolbarstr = "session.screen" + itostring(screen->getScreenNumber()) +
+ ".toolbar.";
config = blackbox->getConfig();
load_rc();
editing = False;
new_name_pos = 0;
- frame.grab_x = frame.grab_y = 0;
toolbarmenu = new Toolbarmenu(this);
frame.base = frame.label = frame.wlabel = frame.clk = frame.button =
frame.pbutton = None;
- screen->addStrut(&strut);
-
reconfigure();
mapToolbar();
}
XMapSubwindows(display, frame.window);
XMapWindow(display, frame.window);
}
+ screen->addStrut(&strut);
updateStrut();
}
if (toolbarmenu->isVisible())
toolbarmenu->hide();
//hidden so we can maximize over the toolbar
+ screen->removeStrut(&strut);
+ screen->updateAvailableArea();
+
XUnmapWindow(display, frame.window);
updateStrut();
}
}
+void Toolbar::drawArrow(Drawable surface, bool left) const {
+ int hh = frame.button_w / 2, hw = frame.button_w / 2;
+ XPoint pts[3];
+ const int bullet_size = 3;
+
+ if (left) {
+ pts[0].x = hw - bullet_size;
+ pts[0].y = hh;
+ pts[1].x = 2 * bullet_size;
+ pts[1].y = bullet_size;
+ pts[2].x = 0;
+ pts[2].y = -(2 * bullet_size);
+ } else {
+ pts[0].x = hw - bullet_size;
+ pts[0].y = hh - bullet_size;
+ pts[1].x = (2 * bullet_size);
+ pts[1].y = bullet_size;
+ pts[2].x = -(2 * bullet_size);
+ pts[2].y = bullet_size;
+ }
+
+ BPen pen(screen->getToolbarStyle()->b_pic);
+ XFillPolygon(display, surface, pen.gc(), pts, 3, Convex, CoordModePrevious);
+}
+
+
void Toolbar::redrawPrevWorkspaceButton(bool pressed, bool redraw) {
if (redraw) {
if (pressed) {
XClearWindow(display, frame.psbutton);
}
- int hh = frame.button_w / 2, hw = frame.button_w / 2;
-
- XPoint pts[3];
- pts[0].x = hw - 2; pts[0].y = hh;
- pts[1].x = 4; pts[1].y = 2;
- pts[2].x = 0; pts[2].y = -4;
-
- ToolbarStyle *style = screen->getToolbarStyle();
- BPen pen(style->b_pic);
- XFillPolygon(display, frame.psbutton, pen.gc(),
- pts, 3, Convex, CoordModePrevious);
+ drawArrow(frame.psbutton, True);
}
XClearWindow(display, frame.nsbutton);
}
- int hh = frame.button_w / 2, hw = frame.button_w / 2;
-
- XPoint pts[3];
- pts[0].x = hw - 2; pts[0].y = hh - 2;
- pts[1].x = 4; pts[1].y = 2;
- pts[2].x = -4; pts[2].y = 2;
-
- ToolbarStyle *style = screen->getToolbarStyle();
- BPen pen(style->b_pic);
- XFillPolygon(display, frame.nsbutton, pen.gc(),
- pts, 3, Convex, CoordModePrevious);
+ drawArrow(frame.nsbutton, False);
}
XClearWindow(display, frame.pwbutton);
}
- int hh = frame.button_w / 2, hw = frame.button_w / 2;
-
- XPoint pts[3];
- pts[0].x = hw - 2; pts[0].y = hh;
- pts[1].x = 4; pts[1].y = 2;
- pts[2].x = 0; pts[2].y = -4;
-
- ToolbarStyle *style = screen->getToolbarStyle();
- BPen pen(style->b_pic);
- XFillPolygon(display, frame.pwbutton, pen.gc(),
- pts, 3, Convex, CoordModePrevious);
+ drawArrow(frame.pwbutton, True);
}
XClearWindow(display, frame.nwbutton);
}
- int hh = frame.button_w / 2, hw = frame.button_w / 2;
-
- XPoint pts[3];
- pts[0].x = hw - 2; pts[0].y = hh - 2;
- pts[1].x = 4; pts[1].y = 2;
- pts[2].x = -4; pts[2].y = 2;
-
- ToolbarStyle *style = screen->getToolbarStyle();
- BPen pen(style->b_pic);
- XFillPolygon(display, frame.nwbutton, pen.gc(), pts, 3, Convex,
- CoordModePrevious);
+ drawArrow(frame.nwbutton, False);
}
}
-void Toolbar::buttonPressEvent(XButtonEvent *be) {
+void Toolbar::buttonPressEvent(const XButtonEvent *be) {
if (be->button == 1) {
if (be->window == frame.psbutton)
redrawPrevWorkspaceButton(True, True);
-void Toolbar::buttonReleaseEvent(XButtonEvent *re) {
+void Toolbar::buttonReleaseEvent(const XButtonEvent *re) {
if (re->button == 1) {
if (re->window == frame.psbutton) {
redrawPrevWorkspaceButton(False, True);
}
-void Toolbar::enterNotifyEvent(XCrossingEvent *) {
+void Toolbar::enterNotifyEvent(const XCrossingEvent *) {
if (! do_auto_hide)
return;
}
}
-void Toolbar::leaveNotifyEvent(XCrossingEvent *) {
+void Toolbar::leaveNotifyEvent(const XCrossingEvent *) {
if (! do_auto_hide)
return;
}
-void Toolbar::exposeEvent(XExposeEvent *ee) {
+void Toolbar::exposeEvent(const XExposeEvent *ee) {
if (ee->window == frame.clock) checkClock(True);
else if (ee->window == frame.workspace_label && (! editing))
redrawWorkspaceLabel();
}
-void Toolbar::keyPressEvent(XKeyEvent *ke) {
+void Toolbar::keyPressEvent(const XKeyEvent *ke) {
if (ke->window == frame.workspace_label && editing) {
if (new_workspace_name.empty()) {
new_name_pos = 0;
KeySym ks;
char keychar[1];
- XLookupString(ke, keychar, 1, &ks, 0);
+ XLookupString(const_cast<XKeyEvent*>(ke), keychar, 1, &ks, 0);
// either we are told to end with a return or we hit 127 chars
if (ks == XK_Return || new_name_pos == 127) {
blackbox->setFocusedWindow(0);
}
- Workspace *wkspc = screen->getCurrentWorkspace();
- wkspc->setName(new_workspace_name);
- wkspc->getMenu()->hide();
-
- screen->getWorkspacemenu()->changeItemLabel(wkspc->getID() + 2,
- wkspc->getName());
- screen->getWorkspacemenu()->update();
+ // the toolbar will be reconfigured when the change to the workspace name
+ // gets caught in the PropertyNotify event handler
+ screen->getCurrentWorkspace()->setName(new_workspace_name);
new_workspace_name.erase();
new_name_pos = 0;
else
XSetWindowBackgroundPixmap(display, frame.workspace_label,
frame.wlabel);
- reconfigure();
} else if (! (ks == XK_Shift_L || ks == XK_Shift_R ||
ks == XK_Control_L || ks == XK_Control_R ||
ks == XK_Caps_Lock || ks == XK_Shift_Lock ||
}
-int ToolbarStyle::doJustify(const std::string &text, int &start_pos,
- unsigned int max_length,
- unsigned int modifier) const {
+void ToolbarStyle::doJustify(const std::string &text, int &start_pos,
+ unsigned int max_length,
+ unsigned int modifier) const {
size_t text_len = text.size();
unsigned int length;
default:
break;
}
-
- return text_len;
}