extern "C" {
#include <X11/Xlib.h>
#include <X11/Xutil.h>
-#include <X11/Xresource.h>
#include <X11/Xatom.h>
#include <X11/cursorfont.h>
#include <X11/keysym.h>
Blackbox *blackbox;
-Blackbox::Blackbox(char **m_argv, char *dpy_name, char *rc)
+Blackbox::Blackbox(char **m_argv, char *dpy_name, char *rc, char *menu)
: BaseDisplay(m_argv[0], dpy_name) {
if (! XSupportsLocale())
fprintf(stderr, "X server does not support locale\n");
::blackbox = this;
argv = m_argv;
- if (! rc) rc = "~/.blackboxrc";
+ if (! rc) rc = "~/.openbox/rc";
rc_file = expandTilde(rc);
+ config.setFile(rc_file);
+ if (! menu) menu = "~/.openbox/menu";
+ menu_file = expandTilde(menu);
no_focus = False;
::exit(3);
}
+ // save current settings and default values
+ save_rc();
+
// set the screen with mouse to the first managed screen
active_screen = screenList.front();
setFocusedWindow(0);
bool Blackbox::handleSignal(int sig) {
switch (sig) {
case SIGHUP:
- reconfigure();
- break;
-
case SIGUSR1:
- reload_rc();
+ reconfigure();
break;
case SIGUSR2:
std::mem_fun(&BScreen::shutdown));
XSync(getXDisplay(), False);
-
- save_rc();
}
+/*
+ * Save all values as they are so that the defaults will be written to the rc
+ * file
+ */
void Blackbox::save_rc(void) {
- XrmDatabase new_blackboxrc = (XrmDatabase) 0;
- char rc_string[1024];
-
- load_rc();
-
- sprintf(rc_string, "session.menuFile: %s", getMenuFilename());
- XrmPutLineResource(&new_blackboxrc, rc_string);
-
- sprintf(rc_string, "session.colorsPerChannel: %d",
- resource.colors_per_channel);
- XrmPutLineResource(&new_blackboxrc, rc_string);
-
- sprintf(rc_string, "session.doubleClickInterval: %lu",
- resource.double_click_interval);
- XrmPutLineResource(&new_blackboxrc, rc_string);
-
- sprintf(rc_string, "session.autoRaiseDelay: %lu",
- ((resource.auto_raise_delay.tv_sec * 1000) +
- (resource.auto_raise_delay.tv_usec / 1000)));
- XrmPutLineResource(&new_blackboxrc, rc_string);
-
- sprintf(rc_string, "session.cacheLife: %lu", resource.cache_life / 60000);
- XrmPutLineResource(&new_blackboxrc, rc_string);
-
- sprintf(rc_string, "session.cacheMax: %lu", resource.cache_max);
- XrmPutLineResource(&new_blackboxrc, rc_string);
-
- ScreenList::iterator it = screenList.begin();
- for (; it != screenList.end(); ++it) {
- BScreen *screen = *it;
- int screen_number = screen->getScreenNumber();
-
- char *placement = (char *) 0;
-
- switch (screen->getSlitPlacement()) {
- case Slit::TopLeft: placement = "TopLeft"; break;
- case Slit::CenterLeft: placement = "CenterLeft"; break;
- case Slit::BottomLeft: placement = "BottomLeft"; break;
- case Slit::TopCenter: placement = "TopCenter"; break;
- case Slit::BottomCenter: placement = "BottomCenter"; break;
- case Slit::TopRight: placement = "TopRight"; break;
- case Slit::BottomRight: placement = "BottomRight"; break;
- case Slit::CenterRight: default: placement = "CenterRight"; break;
- }
-
- sprintf(rc_string, "session.screen%d.slit.placement: %s", screen_number,
- placement);
- XrmPutLineResource(&new_blackboxrc, rc_string);
-
- sprintf(rc_string, "session.screen%d.slit.direction: %s", screen_number,
- ((screen->getSlitDirection() == Slit::Horizontal) ? "Horizontal" :
- "Vertical"));
- XrmPutLineResource(&new_blackboxrc, rc_string);
-
- sprintf(rc_string, "session.screen%d.slit.onTop: %s", screen_number,
- ((screen->getSlit()->isOnTop()) ? "True" : "False"));
- XrmPutLineResource(&new_blackboxrc, rc_string);
-
- sprintf(rc_string, "session.screen%d.slit.autoHide: %s", screen_number,
- ((screen->getSlit()->doAutoHide()) ? "True" : "False"));
- XrmPutLineResource(&new_blackboxrc, rc_string);
-
- sprintf(rc_string, "session.opaqueMove: %s",
- ((screen->doOpaqueMove()) ? "True" : "False"));
- XrmPutLineResource(&new_blackboxrc, rc_string);
-
- sprintf(rc_string, "session.imageDither: %s",
- ((screen->getImageControl()->doDither()) ? "True" : "False"));
- XrmPutLineResource(&new_blackboxrc, rc_string);
-
- sprintf(rc_string, "session.screen%d.fullMaximization: %s", screen_number,
- ((screen->doFullMax()) ? "True" : "False"));
- XrmPutLineResource(&new_blackboxrc, rc_string);
-
- sprintf(rc_string, "session.screen%d.focusNewWindows: %s", screen_number,
- ((screen->doFocusNew()) ? "True" : "False"));
- XrmPutLineResource(&new_blackboxrc, rc_string);
-
- sprintf(rc_string, "session.screen%d.focusLastWindow: %s", screen_number,
- ((screen->doFocusLast()) ? "True" : "False"));
- XrmPutLineResource(&new_blackboxrc, rc_string);
-
- sprintf(rc_string, "session.screen%d.rowPlacementDirection: %s",
- screen_number,
- ((screen->getRowPlacementDirection() == BScreen::LeftRight) ?
- "LeftToRight" : "RightToLeft"));
- XrmPutLineResource(&new_blackboxrc, rc_string);
-
- sprintf(rc_string, "session.screen%d.colPlacementDirection: %s",
- screen_number,
- ((screen->getColPlacementDirection() == BScreen::TopBottom) ?
- "TopToBottom" : "BottomToTop"));
- XrmPutLineResource(&new_blackboxrc, rc_string);
-
- switch (screen->getPlacementPolicy()) {
- case BScreen::CascadePlacement:
- placement = "CascadePlacement";
- break;
- case BScreen::ColSmartPlacement:
- placement = "ColSmartPlacement";
- break;
-
- case BScreen::RowSmartPlacement:
- default:
- placement = "RowSmartPlacement";
- break;
- }
- sprintf(rc_string, "session.screen%d.windowPlacement: %s", screen_number,
- placement);
- XrmPutLineResource(&new_blackboxrc, rc_string);
-
- string fmodel;
- if (screen->isSloppyFocus()) {
- fmodel = "SloppyFocus";
- if (screen->doAutoRaise()) fmodel += " AutoRaise";
- if (screen->doClickRaise()) fmodel += " ClickRaise";
- } else {
- fmodel = "ClickToFocus";
- }
- sprintf(rc_string, "session.screen%d.focusModel: %s", screen_number,
- fmodel.c_str());
- XrmPutLineResource(&new_blackboxrc, rc_string);
-
- sprintf(rc_string, "session.screen%d.workspaces: %d", screen_number,
- screen->getWorkspaceCount());
- XrmPutLineResource(&new_blackboxrc, rc_string);
-
- sprintf(rc_string, "session.screen%d.toolbar.onTop: %s", screen_number,
- ((screen->getToolbar()->isOnTop()) ? "True" : "False"));
- XrmPutLineResource(&new_blackboxrc, rc_string);
-
- sprintf(rc_string, "session.screen%d.toolbar.autoHide: %s",
- screen_number,
- ((screen->getToolbar()->doAutoHide()) ? "True" : "False"));
- XrmPutLineResource(&new_blackboxrc, rc_string);
-
- switch (screen->getToolbarPlacement()) {
- case Toolbar::TopLeft: placement = "TopLeft"; break;
- case Toolbar::BottomLeft: placement = "BottomLeft"; break;
- case Toolbar::TopCenter: placement = "TopCenter"; break;
- case Toolbar::TopRight: placement = "TopRight"; break;
- case Toolbar::BottomRight: placement = "BottomRight"; break;
- case Toolbar::BottomCenter: default: placement = "BottomCenter"; break;
- }
-
- sprintf(rc_string, "session.screen%d.toolbar.placement: %s",
- screen_number, placement);
- XrmPutLineResource(&new_blackboxrc, rc_string);
-
- load_rc(screen);
-
- // these are static, but may not be saved in the users .blackboxrc,
- // writing these resources will allow the user to edit them at a later
- // time... but loading the defaults before saving allows us to rewrite the
- // users changes...
-
-#ifdef HAVE_STRFTIME
- sprintf(rc_string, "session.screen%d.strftimeFormat: %s", screen_number,
- screen->getStrftimeFormat());
- XrmPutLineResource(&new_blackboxrc, rc_string);
-#else // !HAVE_STRFTIME
- sprintf(rc_string, "session.screen%d.dateFormat: %s", screen_number,
- ((screen->getDateFormat() == B_EuropeanDate) ?
- "European" : "American"));
- XrmPutLineResource(&new_blackboxrc, rc_string);
-
- sprintf(rc_string, "session.screen%d.clockFormat: %d", screen_number,
- ((screen->isClock24Hour()) ? 24 : 12));
- XrmPutLineResource(&new_blackboxrc, rc_string);
-#endif // HAVE_STRFTIME
-
- sprintf(rc_string, "session.screen%d.edgeSnapThreshold: %d",
- screen_number, screen->getEdgeSnapThreshold());
- XrmPutLineResource(&new_blackboxrc, rc_string);
-
- sprintf(rc_string, "session.screen%d.toolbar.widthPercent: %d",
- screen_number, screen->getToolbarWidthPercent());
- XrmPutLineResource(&new_blackboxrc, rc_string);
-
- // write out the user's workspace names
-
- string save_string = screen->getWorkspace(0)->getName();
- for (unsigned int i = 1; i < screen->getWorkspaceCount(); ++i) {
- save_string += ',';
- save_string += screen->getWorkspace(i)->getName();
- }
-
- char *resource_string = new char[save_string.length() + 48];
- sprintf(resource_string, "session.screen%d.workspaceNames: %s",
- screen_number, save_string.c_str());
- XrmPutLineResource(&new_blackboxrc, resource_string);
-
- delete [] resource_string;
- }
-
- XrmDatabase old_blackboxrc = XrmGetFileDatabase(rc_file.c_str());
-
- XrmMergeDatabases(new_blackboxrc, &old_blackboxrc);
- XrmPutFileDatabase(old_blackboxrc, rc_file.c_str());
- XrmDestroyDatabase(old_blackboxrc);
+ config.setAutoSave(false);
+
+ config.setValue("session.colorsPerChannel", resource.colors_per_channel);
+ config.setValue("session.doubleClickInterval",
+ resource.double_click_interval);
+ config.setValue("session.autoRaiseDelay",
+ ((resource.auto_raise_delay.tv_sec * 1000) +
+ (resource.auto_raise_delay.tv_usec / 1000)));
+ config.setValue("session.cacheLife", resource.cache_life / 60000);
+ config.setValue("session.cacheMax", resource.cache_max);
+ config.setValue("session.styleFile", resource.style_file);
+ config.setValue("session.titlebarLayout", resource.titlebar_layout);
+
+ std::for_each(screenList.begin(), screenList.end(),
+ std::mem_fun(&BScreen::save_rc));
+
+ config.setAutoSave(true);
+ config.save();
}
void Blackbox::load_rc(void) {
- XrmDatabase database = (XrmDatabase) 0;
-
- database = XrmGetFileDatabase(rc_file.c_str());
-
- XrmValue value;
- char *value_type;
- int int_value;
- unsigned long long_value;
-
- if (XrmGetResource(database, "session.menuFile", "Session.MenuFile",
- &value_type, &value)) {
- resource.menu_file = expandTilde(value.addr);
- } else {
- resource.menu_file = DEFAULTMENU;
- }
-
- resource.colors_per_channel = 4;
- if (XrmGetResource(database, "session.colorsPerChannel",
- "Session.ColorsPerChannel", &value_type, &value) &&
- sscanf(value.addr, "%d", &int_value) == 1) {
- resource.colors_per_channel = int_value;
- if (resource.colors_per_channel < 2) resource.colors_per_channel = 2;
- if (resource.colors_per_channel > 6) resource.colors_per_channel = 6;
- }
-
- if (XrmGetResource(database, "session.styleFile", "Session.StyleFile",
- &value_type, &value))
- resource.style_file = expandTilde(value.addr);
+ if (! config.load())
+ config.create();
+
+ string s;
+
+ if (! config.getValue("session.colorsPerChannel",
+ resource.colors_per_channel))
+ resource.colors_per_channel = 4;
+ if (resource.colors_per_channel < 2) resource.colors_per_channel = 2;
+ else if (resource.colors_per_channel > 6) resource.colors_per_channel = 6;
+
+ if (config.getValue("session.styleFile", s))
+ resource.style_file = expandTilde(s);
else
resource.style_file = DEFAULTSTYLE;
- resource.double_click_interval = 250;
- if (XrmGetResource(database, "session.doubleClickInterval",
- "Session.DoubleClickInterval", &value_type, &value) &&
- sscanf(value.addr, "%lu", &long_value) == 1) {
- resource.double_click_interval = long_value;
- }
-
- resource.auto_raise_delay.tv_usec = 400;
- if (XrmGetResource(database, "session.autoRaiseDelay",
- "Session.AutoRaiseDelay", &value_type, &value) &&
- sscanf(value.addr, "%lu", &long_value) == 1) {
- resource.auto_raise_delay.tv_usec = long_value;
- }
+ if (! config.getValue("session.doubleClickInterval",
+ resource.double_click_interval));
+ resource.double_click_interval = 250;
+ if (! config.getValue("session.autoRaiseDelay",
+ resource.auto_raise_delay.tv_usec))
+ resource.auto_raise_delay.tv_usec = 400;
resource.auto_raise_delay.tv_sec = resource.auto_raise_delay.tv_usec / 1000;
resource.auto_raise_delay.tv_usec -=
(resource.auto_raise_delay.tv_sec * 1000);
resource.auto_raise_delay.tv_usec *= 1000;
- resource.cache_life = 5l;
- if (XrmGetResource(database, "session.cacheLife", "Session.CacheLife",
- &value_type, &value) &&
- sscanf(value.addr, "%lu", &long_value) == 1) {
- resource.cache_life = long_value;
- }
+ if (! config.getValue("session.cacheLife", resource.cache_life))
+ resource.cache_life = 5;
resource.cache_life *= 60000;
- resource.cache_max = 200;
- if (XrmGetResource(database, "session.cacheMax", "Session.CacheMax",
- &value_type, &value) &&
- sscanf(value.addr, "%lu", &long_value) == 1) {
- resource.cache_max = long_value;
- }
-}
-
-
-void Blackbox::load_rc(BScreen *screen) {
- XrmDatabase database = (XrmDatabase) 0;
-
- database = XrmGetFileDatabase(rc_file.c_str());
-
- XrmValue value;
- char *value_type, name_lookup[1024], class_lookup[1024];
- int screen_number = screen->getScreenNumber();
- int int_value;
-
- sprintf(name_lookup, "session.screen%d.fullMaximization", screen_number);
- sprintf(class_lookup, "Session.Screen%d.FullMaximization", screen_number);
- screen->saveFullMax(False);
- if (XrmGetResource(database, name_lookup, class_lookup, &value_type,
- &value) &&
- ! strncasecmp(value.addr, "true", value.size)) {
- screen->saveFullMax(True);
- }
-
- sprintf(name_lookup, "session.screen%d.focusNewWindows", screen_number);
- sprintf(class_lookup, "Session.Screen%d.FocusNewWindows", screen_number);
- screen->saveFocusNew(False);
- if (XrmGetResource(database, name_lookup, class_lookup, &value_type,
- &value) &&
- ! strncasecmp(value.addr, "true", value.size)) {
- screen->saveFocusNew(True);
- }
-
- sprintf(name_lookup, "session.screen%d.focusLastWindow", screen_number);
- sprintf(class_lookup, "Session.Screen%d.focusLastWindow", screen_number);
- screen->saveFocusLast(False);
- if (XrmGetResource(database, name_lookup, class_lookup, &value_type,
- &value) &&
- ! strncasecmp(value.addr, "true", value.size)) {
- screen->saveFocusLast(True);
- }
-
- sprintf(name_lookup, "session.screen%d.rowPlacementDirection",
- screen_number);
- sprintf(class_lookup, "Session.Screen%d.RowPlacementDirection",
- screen_number);
- screen->saveRowPlacementDirection(BScreen::LeftRight);
- if (XrmGetResource(database, name_lookup, class_lookup, &value_type,
- &value) &&
- ! strncasecmp(value.addr, "righttoleft", value.size)) {
- screen->saveRowPlacementDirection(BScreen::RightLeft);
- }
-
- sprintf(name_lookup, "session.screen%d.colPlacementDirection",
- screen_number);
- sprintf(class_lookup, "Session.Screen%d.ColPlacementDirection",
- screen_number);
- screen->saveColPlacementDirection(BScreen::TopBottom);
- if (XrmGetResource(database, name_lookup, class_lookup, &value_type,
- &value) &&
- ! strncasecmp(value.addr, "bottomtotop", value.size)) {
- screen->saveColPlacementDirection(BScreen::BottomTop);
- }
-
- sprintf(name_lookup, "session.screen%d.workspaces", screen_number);
- sprintf(class_lookup, "Session.Screen%d.Workspaces", screen_number);
- screen->saveWorkspaces(1);
- if (XrmGetResource(database, name_lookup, class_lookup,
- &value_type, &value) &&
- sscanf(value.addr, "%d", &int_value) == 1 &&
- int_value > 0 && int_value < 128) {
- screen->saveWorkspaces(int_value);
- }
-
- sprintf(name_lookup, "session.screen%d.toolbar.widthPercent",
- screen_number);
- sprintf(class_lookup, "Session.Screen%d.Toolbar.WidthPercent",
- screen_number);
- screen->saveToolbarWidthPercent(66);
- if (XrmGetResource(database, name_lookup, class_lookup, &value_type,
- &value) &&
- sscanf(value.addr, "%d", &int_value) == 1 &&
- int_value > 0 && int_value <= 100) {
- screen->saveToolbarWidthPercent(int_value);
- }
-
- sprintf(name_lookup, "session.screen%d.toolbar.placement", screen_number);
- sprintf(class_lookup, "Session.Screen%d.Toolbar.Placement", screen_number);
- screen->saveToolbarPlacement(Toolbar::BottomCenter);
- if (XrmGetResource(database, name_lookup, class_lookup, &value_type,
- &value)) {
- if (! strncasecmp(value.addr, "TopLeft", value.size))
- screen->saveToolbarPlacement(Toolbar::TopLeft);
- else if (! strncasecmp(value.addr, "BottomLeft", value.size))
- screen->saveToolbarPlacement(Toolbar::BottomLeft);
- else if (! strncasecmp(value.addr, "TopCenter", value.size))
- screen->saveToolbarPlacement(Toolbar::TopCenter);
- else if (! strncasecmp(value.addr, "TopRight", value.size))
- screen->saveToolbarPlacement(Toolbar::TopRight);
- else if (! strncasecmp(value.addr, "BottomRight", value.size))
- screen->saveToolbarPlacement(Toolbar::BottomRight);
- }
- screen->removeWorkspaceNames();
-
- sprintf(name_lookup, "session.screen%d.workspaceNames", screen_number);
- sprintf(class_lookup, "Session.Screen%d.WorkspaceNames", screen_number);
- if (XrmGetResource(database, name_lookup, class_lookup, &value_type,
- &value)) {
- string search = value.addr;
- string::const_iterator it = search.begin(),
- end = search.end();
- while (1) {
- string::const_iterator tmp = it; // current string.begin()
- it = std::find(tmp, end, ','); // look for comma between tmp and end
- screen->addWorkspaceName(string(tmp, it)); // string = search[tmp:it]
- if (it == end) break;
- ++it;
- }
- }
-
- sprintf(name_lookup, "session.screen%d.toolbar.onTop", screen_number);
- sprintf(class_lookup, "Session.Screen%d.Toolbar.OnTop", screen_number);
- screen->saveToolbarOnTop(False);
- if (XrmGetResource(database, name_lookup, class_lookup, &value_type,
- &value) &&
- ! strncasecmp(value.addr, "true", value.size)) {
- screen->saveToolbarOnTop(True);
- }
-
- sprintf(name_lookup, "session.screen%d.toolbar.autoHide", screen_number);
- sprintf(class_lookup, "Session.Screen%d.Toolbar.autoHide", screen_number);
- screen->saveToolbarAutoHide(False);
- if (XrmGetResource(database, name_lookup, class_lookup, &value_type,
- &value) &&
- ! strncasecmp(value.addr, "true", value.size)) {
- screen->saveToolbarAutoHide(True);
- }
-
- sprintf(name_lookup, "session.screen%d.focusModel", screen_number);
- sprintf(class_lookup, "Session.Screen%d.FocusModel", screen_number);
- screen->saveSloppyFocus(True);
- screen->saveAutoRaise(False);
- screen->saveClickRaise(False);
- if (XrmGetResource(database, name_lookup, class_lookup, &value_type,
- &value)) {
- string fmodel = value.addr;
-
- if (fmodel.find("ClickToFocus") != string::npos) {
- screen->saveSloppyFocus(False);
- } else {
- // must be sloppy
-
- if (fmodel.find("AutoRaise") != string::npos)
- screen->saveAutoRaise(True);
- if (fmodel.find("ClickRaise") != string::npos)
- screen->saveClickRaise(True);
- }
- }
-
- sprintf(name_lookup, "session.screen%d.windowPlacement", screen_number);
- sprintf(class_lookup, "Session.Screen%d.WindowPlacement", screen_number);
- screen->savePlacementPolicy(BScreen::RowSmartPlacement);
- if (XrmGetResource(database, name_lookup, class_lookup, &value_type,
- &value)) {
- if (! strncasecmp(value.addr, "RowSmartPlacement", value.size))
- /* pass */;
- else if (! strncasecmp(value.addr, "ColSmartPlacement", value.size))
- screen->savePlacementPolicy(BScreen::ColSmartPlacement);
- else if (! strncasecmp(value.addr, "CascadePlacement", value.size))
- screen->savePlacementPolicy(BScreen::CascadePlacement);
- }
-
- sprintf(name_lookup, "session.screen%d.slit.placement", screen_number);
- sprintf(class_lookup, "Session.Screen%d.Slit.Placement", screen_number);
- screen->saveSlitPlacement(Slit::CenterRight);
- if (XrmGetResource(database, name_lookup, class_lookup, &value_type,
- &value)) {
- if (! strncasecmp(value.addr, "TopLeft", value.size))
- screen->saveSlitPlacement(Slit::TopLeft);
- else if (! strncasecmp(value.addr, "CenterLeft", value.size))
- screen->saveSlitPlacement(Slit::CenterLeft);
- else if (! strncasecmp(value.addr, "BottomLeft", value.size))
- screen->saveSlitPlacement(Slit::BottomLeft);
- else if (! strncasecmp(value.addr, "TopCenter", value.size))
- screen->saveSlitPlacement(Slit::TopCenter);
- else if (! strncasecmp(value.addr, "BottomCenter", value.size))
- screen->saveSlitPlacement(Slit::BottomCenter);
- else if (! strncasecmp(value.addr, "TopRight", value.size))
- screen->saveSlitPlacement(Slit::TopRight);
- else if (! strncasecmp(value.addr, "BottomRight", value.size))
- screen->saveSlitPlacement(Slit::BottomRight);
- }
-
- sprintf(name_lookup, "session.screen%d.slit.direction", screen_number);
- sprintf(class_lookup, "Session.Screen%d.Slit.Direction", screen_number);
- screen->saveSlitDirection(Slit::Vertical);
- if (XrmGetResource(database, name_lookup, class_lookup, &value_type,
- &value) &&
- ! strncasecmp(value.addr, "Horizontal", value.size)) {
- screen->saveSlitDirection(Slit::Horizontal);
- }
-
- sprintf(name_lookup, "session.screen%d.slit.onTop", screen_number);
- sprintf(class_lookup, "Session.Screen%d.Slit.OnTop", screen_number);
- screen->saveSlitOnTop(False);
- if (XrmGetResource(database, name_lookup, class_lookup, &value_type,
- &value) &&
- ! strncasecmp(value.addr, "True", value.size)) {
- screen->saveSlitOnTop(True);
- }
-
- sprintf(name_lookup, "session.screen%d.slit.autoHide", screen_number);
- sprintf(class_lookup, "Session.Screen%d.Slit.AutoHide", screen_number);
- screen->saveSlitAutoHide(False);
- if (XrmGetResource(database, name_lookup, class_lookup, &value_type,
- &value) &&
- ! strncasecmp(value.addr, "true", value.size)) {
- screen->saveSlitAutoHide(True);
- }
-
-#ifdef HAVE_STRFTIME
- sprintf(name_lookup, "session.screen%d.strftimeFormat", screen_number);
- sprintf(class_lookup, "Session.Screen%d.StrftimeFormat", screen_number);
- if (XrmGetResource(database, name_lookup, class_lookup, &value_type,
- &value)) {
- screen->saveStrftimeFormat(value.addr);
- } else {
- screen->saveStrftimeFormat("%I:%M %p");
- }
-#else // HAVE_STRFTIME
- sprintf(name_lookup, "session.screen%d.dateFormat", screen_number);
- sprintf(class_lookup, "Session.Screen%d.DateFormat", screen_number);
- screen->saveDateFormat(B_AmericanDate);
- if (XrmGetResource(database, name_lookup, class_lookup, &value_type,
- &value)) {
- if (! strncasecmp(value.addr, "european", value.size))
- screen->saveDateFormat(B_EuropeanDate);
- }
-
- sprintf(name_lookup, "session.screen%d.clockFormat", screen_number);
- sprintf(class_lookup, "Session.Screen%d.ClockFormat", screen_number);
- screen->saveClock24Hour(False);
- if (XrmGetResource(database, name_lookup, class_lookup, &value_type,
- &value) &&
- sscanf(value.addr, "%d", &int_value) == 1 && int_value == 24) {
- screen->saveClock24Hour(True);
- }
-#endif // HAVE_STRFTIME
-
- sprintf(name_lookup, "session.screen%d.edgeSnapThreshold", screen_number);
- sprintf(class_lookup, "Session.Screen%d.EdgeSnapThreshold", screen_number);
- if (XrmGetResource(database, name_lookup, class_lookup, &value_type,
- &value) &&
- sscanf(value.addr, "%d", &int_value) == 1) {
- screen->saveEdgeSnapThreshold(int_value);
- }
-
- screen->saveImageDither(True);
- if (XrmGetResource(database, "session.imageDither", "Session.ImageDither",
- &value_type, &value) &&
- ! strncasecmp("false", value.addr, value.size)) {
- screen->saveImageDither(False);
- }
-
- screen->saveOpaqueMove(False);
- if (XrmGetResource(database, "session.opaqueMove", "Session.OpaqueMove",
- &value_type, &value) &&
- ! strncasecmp("true", value.addr, value.size)) {
- screen->saveOpaqueMove(True);
- }
-
- XrmDestroyDatabase(database);
-}
-
-
-void Blackbox::reload_rc(void) {
- load_rc();
- reconfigure();
+ if (! config.getValue("session.cacheMax", resource.cache_max))
+ resource.cache_max = 200;
+
+ if (! config.getValue("session.titlebarLayout", resource.titlebar_layout))
+ resource.titlebar_layout = "ILMC";
}
void Blackbox::real_reconfigure(void) {
- XrmDatabase new_blackboxrc = (XrmDatabase) 0;
- char *style = new char[resource.style_file.length() + 20];
-
- sprintf(style, "session.styleFile: %s", getStyleFilename());
- XrmPutLineResource(&new_blackboxrc, style);
-
- delete [] style;
-
- XrmDatabase old_blackboxrc = XrmGetFileDatabase(rc_file.c_str());
-
- XrmMergeDatabases(new_blackboxrc, &old_blackboxrc);
- XrmPutFileDatabase(old_blackboxrc, rc_file.c_str());
- if (old_blackboxrc) XrmDestroyDatabase(old_blackboxrc);
-
+ load_rc();
+
std::for_each(menuTimestamps.begin(), menuTimestamps.end(),
PointerAssassin());
menuTimestamps.clear();
void Blackbox::saveStyleFilename(const string& filename) {
assert(! filename.empty());
resource.style_file = filename;
+ config.setValue("session.styleFile", resource.style_file);
}
-void Blackbox::saveMenuFilename(const string& filename) {
+void Blackbox::addMenuTimestamp(const string& filename) {
assert(! filename.empty());
bool found = False;
MenuTimestampList::iterator it = menuTimestamps.begin();
- for (; it != menuTimestamps.end() && !found; ++it) {
+ for (; it != menuTimestamps.end() && ! found; ++it) {
if ((*it)->filename == filename) found = True;
}
if (! found) {
if (active_screen) {
// set input focus to the toolbar of the screen with mouse
XSetInputFocus(getXDisplay(),
- active_screen->getToolbar()->getWindowID(),
+ active_screen->getRootWindow(),
RevertToPointerRoot, CurrentTime);
} else {
// set input focus to the toolbar of the first managed screen
XSetInputFocus(getXDisplay(),
- screenList.front()->getToolbar()->getWindowID(),
+ screenList.front()->getRootWindow(),
RevertToPointerRoot, CurrentTime);
}
} else {
// set input focus to the toolbar of the last screen
- XSetInputFocus(getXDisplay(), old_screen->getToolbar()->getWindowID(),
+ XSetInputFocus(getXDisplay(), old_screen->getRootWindow(),
RevertToPointerRoot, CurrentTime);
}
}