-void BScreen::saveWorkspaceNames() {
- std::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(resource.image_dither, 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() {
- std::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 << 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 << 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 << 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 << 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 << 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 << 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 << rscreen.str() << "workspaceNames" << ends;
- rclass << rscreen.str() << "WorkspaceNames" << ends;
- if (config.getValue(rname.str(), rclass.str(), s)) {
- std::string::const_iterator it = s.begin(), end = s.end();
- while(1) {
- std::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 << 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 << 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 << 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(), "CascadePlacement", s.length()))
- resource.placement_policy = CascadePlacement;
- } else
- resource.placement_policy = CascadePlacement;
-
-#ifdef HAVE_STRFTIME
- rname.seekp(0); rclass.seekp(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 << 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 << 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 << 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 << rscreen.str() << "imageDither" << ends;
- rclass << rscreen.str() << "ImageDither" << ends;
- if (config.getValue(rname.str(), rclass.str(), b))
- resource.image_dither = b;
- else
- resource.image_dither = true;
-
- rname.seekp(0); rclass.seekp(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 << 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);
- }