- int i;
- unsigned int w = 0;
- frame.workspace_label_w = 0;
-
- for (i = 0; i < screen.getWorkspaceCount(); i++) {
- if (i18n.multibyte()) {
- XRectangle ink, logical;
- XmbTextExtents(screen.getToolbarStyle()->fontset,
- screen.getWorkspace(i)->getName(),
- strlen(screen.getWorkspace(i)->getName()),
- &ink, &logical);
- w = logical.width;
- } else {
- w = XTextWidth(screen.getToolbarStyle()->font,
- screen.getWorkspace(i)->getName(),
- strlen(screen.getWorkspace(i)->getName()));
- }
- w += (frame.bevel_w * 4);
-
- if (w > frame.workspace_label_w) frame.workspace_label_w = w;
- }
-
- if (frame.workspace_label_w < frame.clock_w)
- frame.workspace_label_w = frame.clock_w;
- else if (frame.workspace_label_w > frame.clock_w)
- frame.clock_w = frame.workspace_label_w;
-
- frame.window_label_w =
- (frame.width - (frame.clock_w + (frame.button_w * 4) +
- frame.workspace_label_w + (frame.bevel_w * 8) + 6));
-
- if (m_hidden) {
- XMoveResizeWindow(display, frame.window, frame.x_hidden, frame.y_hidden,
- frame.width, frame.height);
- } else {
- XMoveResizeWindow(display, frame.window, frame.x, frame.y,
- frame.width, frame.height);
- }
-
- XMoveResizeWindow(display, frame.workspace_label, frame.bevel_w,
- frame.bevel_w, frame.workspace_label_w,
- frame.label_h);
- XMoveResizeWindow(display, frame.psbutton, (frame.bevel_w * 2) +
- frame.workspace_label_w + 1, frame.bevel_w + 1,
- frame.button_w, frame.button_w);
- XMoveResizeWindow(display ,frame.nsbutton, (frame.bevel_w * 3) +
- frame.workspace_label_w + frame.button_w + 2,
- frame.bevel_w + 1, frame.button_w, frame.button_w);
- XMoveResizeWindow(display, frame.window_label, (frame.bevel_w * 4) +
- (frame.button_w * 2) + frame.workspace_label_w + 3,
- frame.bevel_w, frame.window_label_w, frame.label_h);
- XMoveResizeWindow(display, frame.pwbutton, (frame.bevel_w * 5) +
- (frame.button_w * 2) + frame.workspace_label_w +
- frame.window_label_w + 4, frame.bevel_w + 1,
- frame.button_w, frame.button_w);
- XMoveResizeWindow(display, frame.nwbutton, (frame.bevel_w * 6) +
- (frame.button_w * 3) + frame.workspace_label_w +
- frame.window_label_w + 5, frame.bevel_w + 1,
- frame.button_w, frame.button_w);
- XMoveResizeWindow(display, frame.clock, frame.width - frame.clock_w -
- frame.bevel_w, frame.bevel_w, frame.clock_w,
- frame.label_h);
-
- Pixmap tmp = frame.base;
- BTexture *texture = &(screen.getToolbarStyle()->toolbar);
- if (texture->getTexture() == (BImage_Flat | BImage_Solid)) {
- frame.base = None;
- XSetWindowBackground(display, frame.window,
- texture->getColor()->getPixel());
- } else {
- frame.base =
- image_ctrl->renderImage(frame.width, frame.height, texture);
- XSetWindowBackgroundPixmap(display, frame.window, frame.base);
- }
- if (tmp) image_ctrl->removeImage(tmp);
-
- tmp = frame.label;
- texture = &(screen.getToolbarStyle()->window);
- if (texture->getTexture() == (BImage_Flat | BImage_Solid)) {
- frame.label = None;
- XSetWindowBackground(display, frame.window_label,
- texture->getColor()->getPixel());
- } else {
- frame.label =
- image_ctrl->renderImage(frame.window_label_w, frame.label_h, texture);
- XSetWindowBackgroundPixmap(display, frame.window_label, frame.label);
- }
- if (tmp) image_ctrl->removeImage(tmp);
-
- tmp = frame.wlabel;
- texture = &(screen.getToolbarStyle()->label);
- if (texture->getTexture() == (BImage_Flat | BImage_Solid)) {
- frame.wlabel = None;
- XSetWindowBackground(display, frame.workspace_label,
- texture->getColor()->getPixel());
- } else {
- frame.wlabel =
- image_ctrl->renderImage(frame.workspace_label_w, frame.label_h, texture);
- XSetWindowBackgroundPixmap(display, frame.workspace_label, frame.wlabel);
- }
- if (tmp) image_ctrl->removeImage(tmp);
-
- tmp = frame.clk;
- texture = &(screen.getToolbarStyle()->clock);
- if (texture->getTexture() == (BImage_Flat | BImage_Solid)) {
- frame.clk = None;
- XSetWindowBackground(display, frame.clock,
- texture->getColor()->getPixel());
- } else {
- frame.clk =
- image_ctrl->renderImage(frame.clock_w, frame.label_h, texture);
- XSetWindowBackgroundPixmap(display, frame.clock, frame.clk);
- }
- if (tmp) image_ctrl->removeImage(tmp);
-
- tmp = frame.button;
- texture = &(screen.getToolbarStyle()->button);
- if (texture->getTexture() == (BImage_Flat | BImage_Solid)) {
- frame.button = None;
-
- frame.button_pixel = texture->getColor()->getPixel();
- XSetWindowBackground(display, frame.psbutton, frame.button_pixel);
- XSetWindowBackground(display, frame.nsbutton, frame.button_pixel);
- XSetWindowBackground(display, frame.pwbutton, frame.button_pixel);
- XSetWindowBackground(display, frame.nwbutton, frame.button_pixel);
- } else {
- frame.button =
- image_ctrl->renderImage(frame.button_w, frame.button_w, texture);
-
- XSetWindowBackgroundPixmap(display, frame.psbutton, frame.button);
- XSetWindowBackgroundPixmap(display, frame.nsbutton, frame.button);
- XSetWindowBackgroundPixmap(display, frame.pwbutton, frame.button);
- XSetWindowBackgroundPixmap(display, frame.nwbutton, frame.button);
- }
- if (tmp) image_ctrl->removeImage(tmp);
-
- tmp = frame.pbutton;
- texture = &(screen.getToolbarStyle()->pressed);
- if (texture->getTexture() == (BImage_Flat | BImage_Solid)) {
- frame.pbutton = None;
- frame.pbutton_pixel = texture->getColor()->getPixel();
- } else {
- frame.pbutton =
- image_ctrl->renderImage(frame.button_w, frame.button_w, texture);
- }
- if (tmp) image_ctrl->removeImage(tmp);
-
- XSetWindowBorder(display, frame.window,
- screen.getBorderColor()->getPixel());
- XSetWindowBorderWidth(display, frame.window, screen.getBorderWidth());
-
- XClearWindow(display, frame.window);
- XClearWindow(display, frame.workspace_label);
- XClearWindow(display, frame.window_label);
- XClearWindow(display, frame.clock);
- XClearWindow(display, frame.psbutton);
- XClearWindow(display, frame.nsbutton);
- XClearWindow(display, frame.pwbutton);
- XClearWindow(display, frame.nwbutton);
-
- redrawWindowLabel();
- redrawWorkspaceLabel();
- redrawPrevWorkspaceButton();
- redrawNextWorkspaceButton();
- redrawPrevWindowButton();
- redrawNextWindowButton();
- checkClock(True);
-
- toolbarmenu->reconfigure();
+ frame.workspace_label_w = 0;
+
+ for (unsigned int i = 0; i < screen->getWorkspaceCount(); i++) {
+ const string& workspace_name = screen->getWorkspace(i)->getName();
+ if (i18n.multibyte()) {
+ XRectangle ink, logical;
+ XmbTextExtents(screen->getToolbarStyle()->fontset,
+ workspace_name.c_str(), workspace_name.length(),
+ &ink, &logical);
+ width = logical.width;
+ } else {
+ width = XTextWidth(screen->getToolbarStyle()->font,
+ workspace_name.c_str(), workspace_name.length());
+ }
+
+ if (width > frame.workspace_label_w) frame.workspace_label_w = width;
+ }
+
+ frame.workspace_label_w = frame.clock_w =
+ std::max(frame.workspace_label_w, frame.clock_w) + (frame.bevel_w * 4);
+
+ // XXX: where'd the +6 come from?
+ frame.window_label_w =
+ (frame.rect.width() - (frame.clock_w + (frame.button_w * 4) +
+ frame.workspace_label_w + (frame.bevel_w * 8) + 6));
+
+ if (hidden) {
+ XMoveResizeWindow(display, frame.window, frame.x_hidden, frame.y_hidden,
+ frame.rect.width(), frame.rect.height());
+ } else {
+ XMoveResizeWindow(display, frame.window, frame.rect.x(), frame.rect.y(),
+ frame.rect.width(), frame.rect.height());
+ }
+
+ XMoveResizeWindow(display, frame.workspace_label, frame.bevel_w,
+ frame.bevel_w, frame.workspace_label_w,
+ frame.label_h);
+ XMoveResizeWindow(display, frame.psbutton,
+ ((frame.bevel_w * 2) + frame.workspace_label_w + 1),
+ frame.bevel_w + 1, frame.button_w, frame.button_w);
+ XMoveResizeWindow(display, frame.nsbutton,
+ ((frame.bevel_w * 3) + frame.workspace_label_w +
+ frame.button_w + 2), frame.bevel_w + 1, frame.button_w,
+ frame.button_w);
+ XMoveResizeWindow(display, frame.window_label,
+ ((frame.bevel_w * 4) + (frame.button_w * 2) +
+ frame.workspace_label_w + 3), frame.bevel_w,
+ frame.window_label_w, frame.label_h);
+ XMoveResizeWindow(display, frame.pwbutton,
+ ((frame.bevel_w * 5) + (frame.button_w * 2) +
+ frame.workspace_label_w + frame.window_label_w + 4),
+ frame.bevel_w + 1, frame.button_w, frame.button_w);
+ XMoveResizeWindow(display, frame.nwbutton,
+ ((frame.bevel_w * 6) + (frame.button_w * 3) +
+ frame.workspace_label_w + frame.window_label_w + 5),
+ frame.bevel_w + 1, frame.button_w, frame.button_w);
+ XMoveResizeWindow(display, frame.clock,
+ frame.rect.width() - frame.clock_w - (frame.bevel_w * 2),
+ frame.bevel_w, frame.clock_w, frame.label_h);
+
+ ToolbarStyle *style = screen->getToolbarStyle();
+ frame.base = style->toolbar.render(frame.rect.width(), frame.rect.height(),
+ frame.base);
+ if (! frame.base)
+ XSetWindowBackground(display, frame.window,
+ style->toolbar.color().pixel());
+ else
+ XSetWindowBackgroundPixmap(display, frame.window, frame.base);
+
+ frame.label = style->window.render(frame.window_label_w, frame.label_h,
+ frame.label);
+ if (! frame.label)
+ XSetWindowBackground(display, frame.window_label,
+ style->window.color().pixel());
+ else
+ XSetWindowBackgroundPixmap(display, frame.window_label, frame.label);
+
+ frame.wlabel = style->label.render(frame.workspace_label_w, frame.label_h,
+ frame.wlabel);
+ if (! frame.wlabel)
+ XSetWindowBackground(display, frame.workspace_label,
+ style->label.color().pixel());
+ else
+ XSetWindowBackgroundPixmap(display, frame.workspace_label, frame.wlabel);
+
+ frame.clk = style->clock.render(frame.clock_w, frame.label_h, frame.clk);
+ if (! frame.clk)
+ XSetWindowBackground(display, frame.clock, style->clock.color().pixel());
+ else
+ XSetWindowBackgroundPixmap(display, frame.clock, frame.clk);
+
+ frame.button = style->button.render(frame.button_w, frame.button_w,
+ frame.button);
+ if (! frame.button) {
+ frame.button_pixel = style->button.color().pixel();
+ XSetWindowBackground(display, frame.psbutton, frame.button_pixel);
+ XSetWindowBackground(display, frame.nsbutton, frame.button_pixel);
+ XSetWindowBackground(display, frame.pwbutton, frame.button_pixel);
+ XSetWindowBackground(display, frame.nwbutton, frame.button_pixel);
+ } else {
+ XSetWindowBackgroundPixmap(display, frame.psbutton, frame.button);
+ XSetWindowBackgroundPixmap(display, frame.nsbutton, frame.button);
+ XSetWindowBackgroundPixmap(display, frame.pwbutton, frame.button);
+ XSetWindowBackgroundPixmap(display, frame.nwbutton, frame.button);
+ }
+
+ frame.pbutton = style->pressed.render(frame.button_w, frame.button_w,
+ frame.pbutton);
+ if (! frame.pbutton)
+ frame.pbutton_pixel = style->pressed.color().pixel();
+
+ XSetWindowBorder(display, frame.window,
+ screen->getBorderColor()->pixel());
+ XSetWindowBorderWidth(display, frame.window, screen->getBorderWidth());
+
+ XClearWindow(display, frame.window);
+ XClearWindow(display, frame.workspace_label);
+ XClearWindow(display, frame.window_label);
+ XClearWindow(display, frame.clock);
+ XClearWindow(display, frame.psbutton);
+ XClearWindow(display, frame.nsbutton);
+ XClearWindow(display, frame.pwbutton);
+ XClearWindow(display, frame.nwbutton);
+
+ redrawWindowLabel();
+ redrawWorkspaceLabel();
+ redrawPrevWorkspaceButton();
+ redrawNextWorkspaceButton();
+ redrawPrevWindowButton();
+ redrawNextWindowButton();
+ checkClock(True);
+
+ toolbarmenu->reconfigure();
+}
+
+
+void Toolbar::updateStrut(void) {
+ // left and right are always 0
+ strut.top = strut.bottom = 0;
+
+ switch(placement) {
+ case TopLeft:
+ case TopCenter:
+ case TopRight:
+ strut.top = getExposedHeight() + (screen->getBorderWidth() * 2);
+ break;
+ default:
+ strut.bottom = getExposedHeight() + (screen->getBorderWidth() * 2);
+ }
+
+ screen->updateAvailableArea();