-
-void BScreen::setColPlacementDirection(int d) {
- resource.col_direction = d;
- ostrstream s;
- s << "session.screen" << getScreenNumber() << ".colPlacementDirection" << ends;
- config.setValue(s.str(),
- resource.col_direction == TopBottom ?
- "TopToBottom" : "BottomToTop");
- s.rdbuf()->freeze(0);
-}
-
-
-void BScreen::setRootCommand(const char *cmd) {
-if (resource.root_command != NULL)
- delete [] resource.root_command;
- if (cmd != NULL)
- resource.root_command = bstrdup(cmd);
- else
- resource.root_command = NULL;
- // this doesn't save to the Resources config because it can't be changed
- // inside Openbox, and this way we dont add an empty command which would over-
- // ride the styles command when none has been specified
-}
-
-
-#ifdef HAVE_STRFTIME
-void BScreen::setStrftimeFormat(const char *f) {
- if (resource.strftime_format != NULL)
- delete [] resource.strftime_format;
-
- resource.strftime_format = bstrdup(f);
- ostrstream s;
- s << "session.screen" << getScreenNumber() << ".strftimeFormat" << ends;
- config.setValue(s.str(), resource.strftime_format);
- s.rdbuf()->freeze(0);
-}
-
-#else // !HAVE_STRFTIME
-void BScreen::setDateFormat(int f) {
- resource.date_format = f;
- ostrstream s;
- s << "session.screen" << getScreenNumber() << ".dateFormat" << ends;
- config.setValue(s.str(), resource.date_format == B_EuropeanDate ?
- "European" : "American");
- s.rdbuf()->freeze(0);
-}
-
-void BScreen::setClock24Hour(Bool c) {
- resource.clock24hour = c;
- ostrstream s;
- s << "session.screen" << getScreenNumber() << ".clockFormat" << ends;
- config.setValue(s.str(), resource.clock24hour ? 24 : 12);
- s.rdbuf()->freeze(0);
-}
-#endif // HAVE_STRFTIME
-
-void BScreen::setHideToolbar(bool b) {
- resource.hide_toolbar = b;
- if (resource.hide_toolbar)
- getToolbar()->unMapToolbar();
- else
- getToolbar()->mapToolbar();
- ostrstream s;
- s << "session.screen" << getScreenNumber() << ".hideToolbar" << ends;
- config.setValue(s.str(), resource.hide_toolbar ? "True" : "False");
- s.rdbuf()->freeze(0);
-}
-
-void BScreen::saveWorkspaceNames() {
- ostrstream rc, names;
-
- for (int i = 0; i < resource.workspaces; i++) {
- Workspace *w = getWorkspace(i);
- if (w != NULL) {
- names << w->getName();
- if (i < resource.workspaces-1)
- names << ",";
- }
- }
- names << ends;
-
- rc << "session.screen" << getScreenNumber() << ".workspaceNames" << ends;
- config.setValue(rc.str(), names.str());
- rc.rdbuf()->freeze(0);
- names.rdbuf()->freeze(0);
-}
-
-void BScreen::save() {
- setSloppyFocus(resource.sloppy_focus);
- setAutoRaise(resource.auto_raise);
- setImageDither(imageDither(), false);
- setOpaqueMove(resource.opaque_move);
- setFullMax(resource.full_max);
- setFocusNew(resource.focus_new);
- setFocusLast(resource.focus_last);
- setWindowZones(resource.zones);
- setWorkspaceCount(resource.workspaces);
- setPlacementPolicy(resource.placement_policy);
- setEdgeSnapThreshold(resource.edge_snap_threshold);
- setRowPlacementDirection(resource.row_direction);
- setColPlacementDirection(resource.col_direction);
- setRootCommand(resource.root_command);
-#ifdef HAVE_STRFTIME
- // it deletes the current value before setting the new one, so we have to
- // duplicate the current value.
- std::string s = resource.strftime_format;
- setStrftimeFormat(s.c_str());
-#else // !HAVE_STRFTIME
- setDateFormat(resource.date_format);
- setClock24Hour(resource.clock24hour);
-#endif // HAVE_STRFTIME
- setHideToolbar(resource.hide_toolbar);
-}
-
-
-void BScreen::load() {
- ostrstream rscreen, rname, rclass;
- std::string s;
- bool b;
- long l;
- rscreen << "session.screen" << getScreenNumber() << '.' << ends;
-
- rname << rscreen.str() << "hideToolbar" << ends;
- rclass << rscreen.str() << "HideToolbar" << ends;
- if (config.getValue(rname.str(), rclass.str(), b))
- resource.hide_toolbar = b;
- else
- resource.hide_toolbar = false;
- Toolbar *t = getToolbar();
- if (t != NULL) {
- if (resource.hide_toolbar)
- t->unMapToolbar();
- else
- t->mapToolbar();
- }
-
- rname.seekp(0); rclass.seekp(0);
- rname.rdbuf()->freeze(0); rclass.rdbuf()->freeze(0);
- rname << rscreen.str() << "fullMaximization" << ends;
- rclass << rscreen.str() << "FullMaximization" << ends;
- if (config.getValue(rname.str(), rclass.str(), b))
- resource.full_max = b;
- else
- resource.full_max = false;
-
- rname.seekp(0); rclass.seekp(0);
- rname.rdbuf()->freeze(0); rclass.rdbuf()->freeze(0);
- rname << rscreen.str() << "focusNewWindows" << ends;
- rclass << rscreen.str() << "FocusNewWindows" << ends;
- if (config.getValue(rname.str(), rclass.str(), b))
- resource.focus_new = b;
- else
- resource.focus_new = false;
-
- rname.seekp(0); rclass.seekp(0);
- rname.rdbuf()->freeze(0); rclass.rdbuf()->freeze(0);
- rname << rscreen.str() << "focusLastWindow" << ends;
- rclass << rscreen.str() << "FocusLastWindow" << ends;
- if (config.getValue(rname.str(), rclass.str(), b))
- resource.focus_last = b;
- else
- resource.focus_last = false;
-
- rname.seekp(0); rclass.seekp(0);
- rname.rdbuf()->freeze(0); rclass.rdbuf()->freeze(0);
- rname << rscreen.str() << "rowPlacementDirection" << ends;
- rclass << rscreen.str() << "RowPlacementDirection" << ends;
- if (config.getValue(rname.str(), rclass.str(), s)) {
- if (0 == strncasecmp(s.c_str(), "RightToLeft", s.length()))
- resource.row_direction = RightLeft;
- else //if (0 == strncasecmp(s.c_str(), "LeftToRight", s.length()))
- resource.row_direction = LeftRight;
- } else
- resource.row_direction = LeftRight;
-
- rname.seekp(0); rclass.seekp(0);
- rname.rdbuf()->freeze(0); rclass.rdbuf()->freeze(0);
- rname << rscreen.str() << "colPlacementDirection" << ends;
- rclass << rscreen.str() << "ColPlacementDirection" << ends;
- if (config.getValue(rname.str(), rclass.str(), s)) {
- if (0 == strncasecmp(s.c_str(), "BottomToTop", s.length()))
- resource.col_direction = BottomTop;
- else //if (0 == strncasecmp(s.c_str(), "TopToBottom", s.length()))
- resource.col_direction = TopBottom;
- } else
- resource.col_direction = TopBottom;
-
- rname.seekp(0); rclass.seekp(0);
- rname.rdbuf()->freeze(0); rclass.rdbuf()->freeze(0);
- rname << rscreen.str() << "workspaces" << ends;
- rclass << rscreen.str() << "Workspaces" << ends;
- if (config.getValue(rname.str(), rclass.str(), l)) {
- resource.workspaces = l;
- } else
- resource.workspaces = 1;
-
- removeWorkspaceNames();
- rname.seekp(0); rclass.seekp(0);
- rname.rdbuf()->freeze(0); rclass.rdbuf()->freeze(0);
- rname << rscreen.str() << "workspaceNames" << ends;
- rclass << rscreen.str() << "WorkspaceNames" << ends;
- if (config.getValue(rname.str(), rclass.str(), s)) {
- string::const_iterator it = s.begin(), end = s.end();
- while(1) {
- string::const_iterator tmp = it;// current string.begin()
- it = std::find(tmp, end, ','); // look for comma between tmp and end
- std::string name(tmp, it); // name = s[tmp:it]
- addWorkspaceName(name.c_str());
- if (it == end)
- break;
- ++it;
- }
- }
-
- rname.seekp(0); rclass.seekp(0);
- rname.rdbuf()->freeze(0); rclass.rdbuf()->freeze(0);
- rname << rscreen.str() << "focusModel" << ends;
- rclass << rscreen.str() << "FocusModel" << ends;
- if (config.getValue(rname.str(), rclass.str(), s)) {
- if (0 == strncasecmp(s.c_str(), "ClickToFocus", s.length())) {
- resource.auto_raise = false;
- resource.sloppy_focus = false;
- } else if (0 == strncasecmp(s.c_str(), "AutoRaiseSloppyFocus",
- s.length())) {
- resource.sloppy_focus = true;
- resource.auto_raise = true;
- } else { //if (0 == strncasecmp(s.c_str(), "SloppyFocus", s.length())) {
- resource.sloppy_focus = true;
- resource.auto_raise = false;
- }
- } else {
- resource.sloppy_focus = true;
- resource.auto_raise = false;
- }
-
- rname.seekp(0); rclass.seekp(0);
- rname.rdbuf()->freeze(0); rclass.rdbuf()->freeze(0);
- rname << rscreen.str() << "windowZones" << ends;
- rclass << rscreen.str() << "WindowZones" << ends;
- if (config.getValue(rname.str(), rclass.str(), l))
- resource.zones = (l == 1 || l == 2 || l == 4) ? l : 1;
- else
- resource.zones = 4;
-
- rname.seekp(0); rclass.seekp(0);
- rname.rdbuf()->freeze(0); rclass.rdbuf()->freeze(0);
- rname << rscreen.str() << "windowPlacement" << ends;
- rclass << rscreen.str() << "WindowPlacement" << ends;
- if (config.getValue(rname.str(), rclass.str(), s)) {
- if (0 == strncasecmp(s.c_str(), "RowSmartPlacement", s.length()))
- resource.placement_policy = RowSmartPlacement;
- else if (0 == strncasecmp(s.c_str(), "ColSmartPlacement", s.length()))
- resource.placement_policy = ColSmartPlacement;
- else if (0 == strncasecmp(s.c_str(), "BestFitPlacement", s.length()))
- resource.placement_policy = BestFitPlacement;
- else if (0 == strncasecmp(s.c_str(), "UnderMousePlacement", s.length()))
- resource.placement_policy = UnderMousePlacement;
- else if (0 == strncasecmp(s.c_str(), "ClickMousePlacement", s.length()))
- resource.placement_policy = ClickMousePlacement;
- else //if (0 == strncasecmp(s.c_str(), "CascadePlacement", s.length()))
- resource.placement_policy = CascadePlacement;
- } else
- resource.placement_policy = CascadePlacement;
-
-#ifdef HAVE_STRFTIME
- rname.seekp(0); rclass.seekp(0);
- rname.rdbuf()->freeze(0); rclass.rdbuf()->freeze(0);
- rname << rscreen.str() << "strftimeFormat" << ends;
- rclass << rscreen.str() << "StrftimeFormat" << ends;
-
- if (resource.strftime_format != NULL)
- delete [] resource.strftime_format;
-
- if (config.getValue(rname.str(), rclass.str(), s))
- resource.strftime_format = bstrdup(s.c_str());
- else
- resource.strftime_format = bstrdup("%I:%M %p");
-#else // !HAVE_STRFTIME
- rname.seekp(0); rclass.seekp(0);
- rname.rdbuf()->freeze(0); rclass.rdbuf()->freeze(0);
- rname << rscreen.str() << "dateFormat" << ends;
- rclass << rscreen.str() << "DateFormat" << ends;
- if (config.getValue(rname.str(), rclass.str(), s)) {
- if (strncasecmp(s.c_str(), "European", s.length()))
- resource.date_format = B_EuropeanDate;
- else //if (strncasecmp(s.c_str(), "American", s.length()))
- resource.date_format = B_AmericanDate;
- } else
- resource.date_format = B_AmericanDate;
-
- rname.seekp(0); rclass.seekp(0);
- rname.rdbuf()->freeze(0); rclass.rdbuf()->freeze(0);
- rname << rscreen.str() << "clockFormat" << ends;
- rclass << rscreen.str() << "ClockFormat" << ends;
- if (config.getValue(rname.str(), rclass.str(), l)) {
- if (clock == 24)
- resource.clock24hour = true;
- else if (clock == 12)
- resource.clock24hour = false;
- } else
- resource.clock24hour = false;
-#endif // HAVE_STRFTIME
-
- rname.seekp(0); rclass.seekp(0);
- rname.rdbuf()->freeze(0); rclass.rdbuf()->freeze(0);
- rname << rscreen.str() << "edgeSnapThreshold" << ends;
- rclass << rscreen.str() << "EdgeSnapThreshold" << ends;
- if (config.getValue(rname.str(), rclass.str(), l))
- resource.edge_snap_threshold = l;
- else
- resource.edge_snap_threshold = 4;
-
- rname.seekp(0); rclass.seekp(0);
- rname.rdbuf()->freeze(0); rclass.rdbuf()->freeze(0);
- rname << rscreen.str() << "imageDither" << ends;
- rclass << rscreen.str() << "ImageDither" << ends;
- if (config.getValue(rname.str(), rclass.str(), b))
- image_control->setDither(b);
- else
- image_control->setDither(true);
-
- rname.seekp(0); rclass.seekp(0);
- rname.rdbuf()->freeze(0); rclass.rdbuf()->freeze(0);
- rname << rscreen.str() << "rootCommand" << ends;
- rclass << rscreen.str() << "RootCommand" << ends;
-
- if (resource.root_command != NULL)
- delete [] resource.root_command;
-
- if (config.getValue(rname.str(), rclass.str(), s))
- resource.root_command = bstrdup(s.c_str());
- else
- resource.root_command = NULL;
-
- rname.seekp(0); rclass.seekp(0);
- rname.rdbuf()->freeze(0); rclass.rdbuf()->freeze(0);
- rname << rscreen.str() << "opaqueMove" << ends;
- rclass << rscreen.str() << "OpaqueMove" << ends;
- if (config.getValue(rname.str(), rclass.str(), b))
- resource.opaque_move = b;
- else
- resource.opaque_move = false;
-
- rscreen.rdbuf()->freeze(0);
- rname.rdbuf()->freeze(0); rclass.rdbuf()->freeze(0);
-}
-
-void BScreen::reconfigure(void) {
- load();
- toolbar->load();
-#ifdef SLIT
- slit->load();
-#endif // SLIT
- LoadStyle();
-
- 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);
- setWorkspaceCount(workspaceCount()+1);
- saveWorkspaceNames();
-
- workspacemenu->insert(wkspc->getName(), wkspc->getMenu(),
- wkspc->getWorkspaceID() + 2);
- workspacemenu->update();