- XGCValues gcv;
- unsigned long gc_value_mask = GCForeground;
- if (! i18n->multibyte()) gc_value_mask |= GCFont;
-
- gcv.foreground = WhitePixel(getBaseDisplay().getXDisplay(),
- getScreenNumber());
- gcv.function = GXinvert;
- gcv.subwindow_mode = IncludeInferiors;
- XChangeGC(getBaseDisplay().getXDisplay(), opGC,
- GCForeground | GCFunction | GCSubwindowMode, &gcv);
-
- gcv.foreground = resource.wstyle.l_text_focus.getPixel();
- if (resource.wstyle.font)
- gcv.font = resource.wstyle.font->fid;
- XChangeGC(getBaseDisplay().getXDisplay(), resource.wstyle.l_text_focus_gc,
- gc_value_mask, &gcv);
-
- gcv.foreground = resource.wstyle.l_text_unfocus.getPixel();
- XChangeGC(getBaseDisplay().getXDisplay(), resource.wstyle.l_text_unfocus_gc,
- gc_value_mask, &gcv);
-
- gcv.foreground = resource.wstyle.b_pic_focus.getPixel();
- XChangeGC(getBaseDisplay().getXDisplay(), resource.wstyle.b_pic_focus_gc,
- GCForeground, &gcv);
-
- gcv.foreground = resource.wstyle.b_pic_unfocus.getPixel();
- XChangeGC(getBaseDisplay().getXDisplay(), resource.wstyle.b_pic_unfocus_gc,
- GCForeground, &gcv);
-
- gcv.foreground = resource.mstyle.t_text.getPixel();
- if (resource.mstyle.t_font)
- gcv.font = resource.mstyle.t_font->fid;
- XChangeGC(getBaseDisplay().getXDisplay(), resource.mstyle.t_text_gc,
- gc_value_mask, &gcv);
-
- gcv.foreground = resource.mstyle.f_text.getPixel();
- if (resource.mstyle.f_font)
- gcv.font = resource.mstyle.f_font->fid;
- XChangeGC(getBaseDisplay().getXDisplay(), resource.mstyle.f_text_gc,
- gc_value_mask, &gcv);
-
- gcv.foreground = resource.mstyle.h_text.getPixel();
- XChangeGC(getBaseDisplay().getXDisplay(), resource.mstyle.h_text_gc,
- gc_value_mask, &gcv);
-
- gcv.foreground = resource.mstyle.d_text.getPixel();
- XChangeGC(getBaseDisplay().getXDisplay(), resource.mstyle.d_text_gc,
- gc_value_mask, &gcv);
-
- gcv.foreground = resource.mstyle.hilite.getColor()->getPixel();
- XChangeGC(getBaseDisplay().getXDisplay(), resource.mstyle.hilite_gc,
- gc_value_mask, &gcv);
-
- gcv.foreground = resource.tstyle.l_text.getPixel();
- if (resource.tstyle.font)
- gcv.font = resource.tstyle.font->fid;
- XChangeGC(getBaseDisplay().getXDisplay(), resource.tstyle.l_text_gc,
- gc_value_mask, &gcv);
-
- gcv.foreground = resource.tstyle.w_text.getPixel();
- XChangeGC(getBaseDisplay().getXDisplay(), resource.tstyle.w_text_gc,
- gc_value_mask, &gcv);
-
- gcv.foreground = resource.tstyle.c_text.getPixel();
- XChangeGC(getBaseDisplay().getXDisplay(), resource.tstyle.c_text_gc,
- gc_value_mask, &gcv);
-
- gcv.foreground = resource.tstyle.b_pic.getPixel();
- XChangeGC(getBaseDisplay().getXDisplay(), resource.tstyle.b_pic_gc,
- gc_value_mask, &gcv);
-
- const char *s = i18n->getMessage(ScreenSet, ScreenPositionLength,
- "0: 0000 x 0: 0000");
- int l = strlen(s);
-
- if (i18n->multibyte()) {
- XRectangle ink, logical;
- XmbTextExtents(resource.wstyle.fontset, s, l, &ink, &logical);
- geom_w = logical.width;
-
- geom_h = resource.wstyle.fontset_extents->max_ink_extent.height;
- } else {
- geom_w = XTextWidth(resource.wstyle.font, s, l);
-
- geom_h = resource.wstyle.font->ascent +
- resource.wstyle.font->descent;
- }
-
- geom_w += (resource.bevel_width * 2);
- geom_h += (resource.bevel_width * 2);
-
- Pixmap tmp = geom_pixmap;
- if (resource.wstyle.l_focus.getTexture() & BImage_ParentRelative) {
- if (resource.wstyle.t_focus.getTexture() ==
- (BImage_Flat | BImage_Solid)) {
- geom_pixmap = None;
- XSetWindowBackground(getBaseDisplay().getXDisplay(), geom_window,
- resource.wstyle.t_focus.getColor()->getPixel());
- } else {
- geom_pixmap = image_control->renderImage(geom_w, geom_h,
- &resource.wstyle.t_focus);
- XSetWindowBackgroundPixmap(getBaseDisplay().getXDisplay(),
- geom_window, geom_pixmap);
- }
- } else {
- if (resource.wstyle.l_focus.getTexture() ==
- (BImage_Flat | BImage_Solid)) {
- geom_pixmap = None;
- XSetWindowBackground(getBaseDisplay().getXDisplay(), geom_window,
- resource.wstyle.l_focus.getColor()->getPixel());
- } else {
- geom_pixmap = image_control->renderImage(geom_w, geom_h,
- &resource.wstyle.l_focus);
- XSetWindowBackgroundPixmap(getBaseDisplay().getXDisplay(),
- geom_window, geom_pixmap);
- }
- }
- if (tmp) image_control->removeImage(tmp);
-
- XSetWindowBorderWidth(getBaseDisplay().getXDisplay(), geom_window,
- resource.border_width);
- XSetWindowBorder(getBaseDisplay().getXDisplay(), geom_window,
- resource.border_color.getPixel());
-
- workspacemenu->reconfigure();
- iconmenu->reconfigure();
-
- {
- int remember_sub = rootmenu->getCurrentSubmenu();
- InitMenu();
- raiseWindows(0, 0);
- rootmenu->reconfigure();
- rootmenu->drawSubmenu(remember_sub);
- }
-
- configmenu->reconfigure();
-
- toolbar->reconfigure();
-
-#ifdef SLIT
- slit->reconfigure();
-#endif // SLIT
-
- LinkedListIterator<Workspace> wit(workspacesList);
- for (Workspace *w = wit.current(); w; wit++, w = wit.current())
- w->reconfigure();
-
- LinkedListIterator<OpenboxWindow> iit(iconList);
- for (OpenboxWindow *bw = iit.current(); bw; iit++, bw = iit.current())
- if (bw->validateClient())
- bw->reconfigure();
-
- image_control->timeout();
-}
-
-
-void BScreen::rereadMenu(void) {
- InitMenu();
- raiseWindows(0, 0);
-
- rootmenu->reconfigure();
-}
-
-
-void BScreen::removeWorkspaceNames(void) {
- while (workspaceNames->count())
- delete [] workspaceNames->remove(0);
-}
-
-
-void BScreen::LoadStyle(void) {
- Resource &conf = resource.styleconfig;
-
- const char *sfile = openbox.getStyleFilename();
- bool loaded = false;
- if (sfile != NULL) {
- conf.setFile(sfile);
- loaded = conf.load();
- }
- if (!loaded) {
- conf.setFile(DEFAULTSTYLE);
- if (!conf.load()) {
- fprintf(stderr, i18n->getMessage(ScreenSet, ScreenDefaultStyleLoadFail,
- "BScreen::LoadStyle(): couldn't load "
- "default style.\n"));
- exit(2);
- }
- }
-
- std::string s;
- long l;
-
- // load fonts/fontsets
-
- if (i18n->multibyte()) {
- readDatabaseFontSet("window.font", "Window.Font",
- &resource.wstyle.fontset);
- readDatabaseFontSet("toolbar.font", "Toolbar.Font",
- &resource.tstyle.fontset);
- readDatabaseFontSet("menu.title.font", "Menu.Title.Font",
- &resource.mstyle.t_fontset);
- readDatabaseFontSet("menu.frame.font", "Menu.Frame.Font",
- &resource.mstyle.f_fontset);
-
- resource.mstyle.t_fontset_extents =
- XExtentsOfFontSet(resource.mstyle.t_fontset);
- resource.mstyle.f_fontset_extents =
- XExtentsOfFontSet(resource.mstyle.f_fontset);
- resource.tstyle.fontset_extents =
- XExtentsOfFontSet(resource.tstyle.fontset);
- resource.wstyle.fontset_extents =
- XExtentsOfFontSet(resource.wstyle.fontset);
- } else {
- readDatabaseFont("window.font", "Window.Font",
- &resource.wstyle.font);
- readDatabaseFont("menu.title.font", "Menu.Title.Font",
- &resource.mstyle.t_font);
- readDatabaseFont("menu.frame.font", "Menu.Frame.Font",
- &resource.mstyle.f_font);
- readDatabaseFont("toolbar.font", "Toolbar.Font",
- &resource.tstyle.font);
- }
-
- // load window config
- readDatabaseTexture("window.title.focus", "Window.Title.Focus",
- &resource.wstyle.t_focus,
- WhitePixel(getBaseDisplay().getXDisplay(),
- getScreenNumber()));
- readDatabaseTexture("window.title.unfocus", "Window.Title.Unfocus",
- &resource.wstyle.t_unfocus,
- BlackPixel(getBaseDisplay().getXDisplay(),
- getScreenNumber()));
- readDatabaseTexture("window.label.focus", "Window.Label.Focus",
- &resource.wstyle.l_focus,
- WhitePixel(getBaseDisplay().getXDisplay(),
- getScreenNumber()));
- readDatabaseTexture("window.label.unfocus", "Window.Label.Unfocus",
- &resource.wstyle.l_unfocus,
- BlackPixel(getBaseDisplay().getXDisplay(),
- getScreenNumber()));
- readDatabaseTexture("window.handle.focus", "Window.Handle.Focus",
- &resource.wstyle.h_focus,
- WhitePixel(getBaseDisplay().getXDisplay(),
- getScreenNumber()));
- readDatabaseTexture("window.handle.unfocus", "Window.Handle.Unfocus",
- &resource.wstyle.h_unfocus,
- BlackPixel(getBaseDisplay().getXDisplay(),
- getScreenNumber()));
- readDatabaseTexture("window.grip.focus", "Window.Grip.Focus",
- &resource.wstyle.g_focus,
- WhitePixel(getBaseDisplay().getXDisplay(),
- getScreenNumber()));
- readDatabaseTexture("window.grip.unfocus", "Window.Grip.Unfocus",
- &resource.wstyle.g_unfocus,
- BlackPixel(getBaseDisplay().getXDisplay(),
- getScreenNumber()));
- readDatabaseTexture("window.button.focus", "Window.Button.Focus",
- &resource.wstyle.b_focus,
- WhitePixel(getBaseDisplay().getXDisplay(),
- getScreenNumber()));
- readDatabaseTexture("window.button.unfocus", "Window.Button.Unfocus",
- &resource.wstyle.b_unfocus,
- BlackPixel(getBaseDisplay().getXDisplay(),
- getScreenNumber()));
- readDatabaseTexture("window.button.pressed", "Window.Button.Pressed",
- &resource.wstyle.b_pressed,
- BlackPixel(getBaseDisplay().getXDisplay(),
- getScreenNumber()));
- readDatabaseColor("window.frame.focusColor",
- "Window.Frame.FocusColor",
- &resource.wstyle.f_focus,
- WhitePixel(getBaseDisplay().getXDisplay(),
- getScreenNumber()));
- readDatabaseColor("window.frame.unfocusColor",
- "Window.Frame.UnfocusColor",
- &resource.wstyle.f_unfocus,
- BlackPixel(getBaseDisplay().getXDisplay(),
- getScreenNumber()));
- readDatabaseColor("window.label.focus.textColor",
- "Window.Label.Focus.TextColor",
- &resource.wstyle.l_text_focus,
- BlackPixel(getBaseDisplay().getXDisplay(),
- getScreenNumber()));
- readDatabaseColor("window.label.unfocus.textColor",
- "Window.Label.Unfocus.TextColor",
- &resource.wstyle.l_text_unfocus,
- WhitePixel(getBaseDisplay().getXDisplay(),
- getScreenNumber()));
- readDatabaseColor("window.button.focus.picColor",
- "Window.Button.Focus.PicColor",
- &resource.wstyle.b_pic_focus,
- BlackPixel(getBaseDisplay().getXDisplay(),
- getScreenNumber()));
- readDatabaseColor("window.button.unfocus.picColor",
- "Window.Button.Unfocus.PicColor",
- &resource.wstyle.b_pic_unfocus,
- WhitePixel(getBaseDisplay().getXDisplay(),
- getScreenNumber()));
-
- if (conf.getValue("window.justify", "Window.Justify", s)) {
- if (0 == strncasecmp(s.c_str(), "right", s.length()))
- resource.wstyle.justify = BScreen::RightJustify;
- else if (0 == strncasecmp(s.c_str(), "center", s.length()))
- resource.wstyle.justify = BScreen::CenterJustify;
- else
- resource.wstyle.justify = BScreen::LeftJustify;
- } else
- resource.wstyle.justify = BScreen::LeftJustify;
-
- // load toolbar config
- readDatabaseTexture("toolbar", "Toolbar",
- &resource.tstyle.toolbar,
- BlackPixel(getBaseDisplay().getXDisplay(),
- getScreenNumber()));
- readDatabaseTexture("toolbar.label", "Toolbar.Label",
- &resource.tstyle.label,
- BlackPixel(getBaseDisplay().getXDisplay(),
- getScreenNumber()));
- readDatabaseTexture("toolbar.windowLabel", "Toolbar.WindowLabel",
- &resource.tstyle.window,
- BlackPixel(getBaseDisplay().getXDisplay(),
- getScreenNumber()));
- readDatabaseTexture("toolbar.button", "Toolbar.Button",
- &resource.tstyle.button,
- WhitePixel(getBaseDisplay().getXDisplay(),
- getScreenNumber()));
- readDatabaseTexture("toolbar.button.pressed", "Toolbar.Button.Pressed",
- &resource.tstyle.pressed,
- BlackPixel(getBaseDisplay().getXDisplay(),
- getScreenNumber()));
- readDatabaseTexture("toolbar.clock", "Toolbar.Clock",
- &resource.tstyle.clock,
- BlackPixel(getBaseDisplay().getXDisplay(),
- getScreenNumber()));
- readDatabaseColor("toolbar.label.textColor", "Toolbar.Label.TextColor",
- &resource.tstyle.l_text,
- WhitePixel(getBaseDisplay().getXDisplay(),
- getScreenNumber()));
- readDatabaseColor("toolbar.windowLabel.textColor",
- "Toolbar.WindowLabel.TextColor",
- &resource.tstyle.w_text,
- WhitePixel(getBaseDisplay().getXDisplay(),
- getScreenNumber()));
- readDatabaseColor("toolbar.clock.textColor", "Toolbar.Clock.TextColor",
- &resource.tstyle.c_text,
- WhitePixel(getBaseDisplay().getXDisplay(),
- getScreenNumber()));
- readDatabaseColor("toolbar.button.picColor", "Toolbar.Button.PicColor",
- &resource.tstyle.b_pic,
- BlackPixel(getBaseDisplay().getXDisplay(),
- getScreenNumber()));
-
- if (conf.getValue("toolbar.justify", "Toolbar.Justify", s)) {
- if (0 == strncasecmp(s.c_str(), "right", s.length()))
- resource.tstyle.justify = BScreen::RightJustify;
- else if (0 == strncasecmp(s.c_str(), "center", s.length()))
- resource.tstyle.justify = BScreen::CenterJustify;
- else
- resource.tstyle.justify = BScreen::LeftJustify;
- } else
- resource.tstyle.justify = BScreen::LeftJustify;
-
- // load menu config
- readDatabaseTexture("menu.title", "Menu.Title",
- &resource.mstyle.title,
- WhitePixel(getBaseDisplay().getXDisplay(),
- getScreenNumber()));
- readDatabaseTexture("menu.frame", "Menu.Frame",
- &resource.mstyle.frame,
- BlackPixel(getBaseDisplay().getXDisplay(),
- getScreenNumber()));
- readDatabaseTexture("menu.hilite", "Menu.Hilite",
- &resource.mstyle.hilite,
- WhitePixel(getBaseDisplay().getXDisplay(),
- getScreenNumber()));
- readDatabaseColor("menu.title.textColor", "Menu.Title.TextColor",
- &resource.mstyle.t_text,
- BlackPixel(getBaseDisplay().getXDisplay(),
- getScreenNumber()));
- readDatabaseColor("menu.frame.textColor", "Menu.Frame.TextColor",
- &resource.mstyle.f_text,
- WhitePixel(getBaseDisplay().getXDisplay(),
- getScreenNumber()));
- readDatabaseColor("menu.frame.disableColor", "Menu.Frame.DisableColor",
- &resource.mstyle.d_text,
- BlackPixel(getBaseDisplay().getXDisplay(),
- getScreenNumber()));
- readDatabaseColor("menu.hilite.textColor", "Menu.Hilite.TextColor",
- &resource.mstyle.h_text,
- BlackPixel(getBaseDisplay().getXDisplay(),
- getScreenNumber()));
-
- if (conf.getValue("menu.title.justify", "Menu.Title.Justify", s)) {
- if (0 == strncasecmp(s.c_str(), "right", s.length()))
- resource.mstyle.t_justify = BScreen::RightJustify;
- else if (0 == strncasecmp(s.c_str(), "center", s.length()))
- resource.mstyle.t_justify = BScreen::CenterJustify;
- else
- resource.mstyle.t_justify = BScreen::LeftJustify;
- } else
- resource.mstyle.t_justify = BScreen::LeftJustify;
-
- if (conf.getValue("menu.frame.justify", "Menu.Frame.Justify", s)) {
- if (0 == strncasecmp(s.c_str(), "right", s.length()))
- resource.mstyle.f_justify = BScreen::RightJustify;
- else if (0 == strncasecmp(s.c_str(), "center", s.length()))
- resource.mstyle.f_justify = BScreen::CenterJustify;
- else
- resource.mstyle.f_justify = BScreen::LeftJustify;
- } else
- resource.mstyle.f_justify = BScreen::LeftJustify;
-
- if (conf.getValue("menu.bullet", "Menu.Bullet", s)) {
- if (0 == strncasecmp(s.c_str(), "empty", s.length()))
- resource.mstyle.bullet = Basemenu::Empty;
- else if (0 == strncasecmp(s.c_str(), "square", s.length()))
- resource.mstyle.bullet = Basemenu::Square;
- else if (0 == strncasecmp(s.c_str(), "diamond", s.length()))
- resource.mstyle.bullet = Basemenu::Diamond;
- else
- resource.mstyle.bullet = Basemenu::Triangle;
- } else
- resource.mstyle.bullet = Basemenu::Triangle;
-
- if (conf.getValue("menu.bullet.position", "Menu.Bullet.Position", s)) {
- if (0 == strncasecmp(s.c_str(), "right", s.length()))
- resource.mstyle.bullet_pos = Basemenu::Right;
- else
- resource.mstyle.bullet_pos = Basemenu::Left;
- } else
- resource.mstyle.bullet_pos = Basemenu::Left;
-
- readDatabaseColor("borderColor", "BorderColor", &resource.border_color,
- BlackPixel(getBaseDisplay().getXDisplay(),
- getScreenNumber()));
-
- // load bevel, border and handle widths
- if (conf.getValue("handleWidth", "HandleWidth", l)) {
- if (l <= size().w() / 2 && l != 0)
- resource.handle_width = l;
- else
- resource.handle_width = 6;
- } else
- resource.handle_width = 6;
-
- if (conf.getValue("borderWidth", "BorderWidth", l))
- resource.border_width = l;
- else
- resource.border_width = 1;
-
- if (conf.getValue("bevelWidth", "BevelWidth", l)) {
- if (l <= size().w() / 2 && l != 0)
- resource.bevel_width = l;
- else
- resource.bevel_width = 3;
- } else
- resource.bevel_width = 3;
-
- if (conf.getValue("frameWidth", "FrameWidth", l)) {
- if (l <= size().w() / 2)
- resource.frame_width = l;
- else
- resource.frame_width = resource.bevel_width;
- } else
- resource.frame_width = resource.bevel_width;
-
- const char *cmd = resource.root_command;
- if (cmd != NULL || conf.getValue("rootCommand", "RootCommand", s)) {
- if (cmd == NULL)
- cmd = s.c_str(); // not specified by the screen, so use the one from the
- // style file
-#ifndef __EMX__
- char displaystring[MAXPATHLEN];
- sprintf(displaystring, "DISPLAY=%s",
- DisplayString(getBaseDisplay().getXDisplay()));
- sprintf(displaystring + strlen(displaystring) - 1, "%d",
- getScreenNumber());
-
- bexec(cmd, displaystring);
-#else // __EMX__
- spawnlp(P_NOWAIT, "cmd.exe", "cmd.exe", "/c", cmd, NULL);
-#endif // !__EMX__
- }
-}
-
-
-void BScreen::addIcon(OpenboxWindow *w) {
- if (! w) return;
-
- w->setWorkspace(-1);
- w->setWindowNumber(iconList->count());
-
- iconList->insert(w);
-
- iconmenu->insert((const char **) w->getIconTitle());
- iconmenu->update();
-}
-
-
-void BScreen::removeIcon(OpenboxWindow *w) {
- if (! w) return;
-
- iconList->remove(w->getWindowNumber());
-
- iconmenu->remove(w->getWindowNumber());
- iconmenu->update();
-
- LinkedListIterator<OpenboxWindow> it(iconList);
- OpenboxWindow *bw = it.current();
- for (int i = 0; bw; it++, bw = it.current())
- bw->setWindowNumber(i++);
-}
-
-
-OpenboxWindow *BScreen::getIcon(int index) {
- if (index >= 0 && index < iconList->count())
- return iconList->find(index);
-
- return NULL;
-}
-
-
-int BScreen::addWorkspace(void) {
- Workspace *wkspc = new Workspace(*this, workspacesList->count());
- workspacesList->insert(wkspc);
- saveWorkspaceNames();