summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG7
-rw-r--r--src/Configmenu.cc76
-rw-r--r--src/Screen.cc411
-rw-r--r--src/Screen.h132
-rw-r--r--src/Slit.cc7
-rw-r--r--src/Slit.h1
-rw-r--r--src/Toolbar.cc13
-rw-r--r--src/Toolbar.h1
-rw-r--r--src/Window.cc26
-rw-r--r--src/Workspace.cc33
-rw-r--r--src/openbox.cc342
-rw-r--r--src/openbox.h48
12 files changed, 587 insertions, 510 deletions
diff --git a/CHANGELOG b/CHANGELOG
index 1460b9b4..afecb7c4 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,6 +1,13 @@
Changelog for Openbox:
1.0.0:
+ * better handling of teh rc file and its configuration
+ options. The file is written each time an option in
+ the file is changed, instead of being written at
+ shutdown. This means that you can edit the file by
+ hand while in Openbox, and then choose reconfig or
+ restart to have it use the new rc file. (Ben Jansens)
+
* added a runtime option for hiding the toolbar. (Scott Moynes)
* made shaded windows edge-snap correctly to the
diff --git a/src/Configmenu.cc b/src/Configmenu.cc
index 4548b89e..9de8864d 100644
--- a/src/Configmenu.cc
+++ b/src/Configmenu.cc
@@ -64,10 +64,10 @@ Configmenu::Configmenu(BScreen &scr) : Basemenu(scr), screen(scr)
update();
setItemSelected(2, screen.getImageControl()->doDither());
- setItemSelected(3, screen.doOpaqueMove());
- setItemSelected(4, screen.doFullMax());
- setItemSelected(5, screen.doFocusNew());
- setItemSelected(6, screen.doFocusLast());
+ setItemSelected(3, screen.opaqueMove());
+ setItemSelected(4, screen.fullMax());
+ setItemSelected(5, screen.focusNew());
+ setItemSelected(6, screen.focusLast());
setItemSelected(7, screen.hideToolbar());
}
@@ -96,30 +96,30 @@ void Configmenu::itemSelected(int button, int index) {
}
case 2: { // opaque move
- screen.saveOpaqueMove((! screen.doOpaqueMove()));
+ screen.setOpaqueMove(!screen.opaqueMove());
- setItemSelected(index, screen.doOpaqueMove());
+ setItemSelected(index, screen.opaqueMove());
break;
}
case 3: { // full maximization
- screen.saveFullMax((! screen.doFullMax()));
+ screen.setFullMax(!screen.fullMax());
- setItemSelected(index, screen.doFullMax());
+ setItemSelected(index, screen.fullMax());
break;
}
case 4: { // focus new windows
- screen.saveFocusNew((! screen.doFocusNew()));
+ screen.setFocusNew(!screen.focusNew());
- setItemSelected(index, screen.doFocusNew());
+ setItemSelected(index, screen.focusNew());
break;
}
case 5: { // focus last window on workspace
- screen.saveFocusLast(!(screen.doFocusLast()));
- setItemSelected(index, screen.doFocusLast());
+ screen.setFocusLast(!screen.focusLast());
+ setItemSelected(index, screen.focusLast());
break;
}
case 6:{ //toggle toolbar hide
@@ -152,10 +152,10 @@ Configmenu::Focusmenu::Focusmenu(Configmenu *cm) : Basemenu(cm->screen) {
"Auto Raise"), 3);
update();
- setItemSelected(0, (! configmenu->screen.isSloppyFocus()));
- setItemSelected(1, configmenu->screen.isSloppyFocus());
- setItemEnabled(2, configmenu->screen.isSloppyFocus());
- setItemSelected(2, configmenu->screen.doAutoRaise());
+ setItemSelected(0, !configmenu->screen.sloppyFocus());
+ setItemSelected(1, configmenu->screen.sloppyFocus());
+ setItemEnabled(2, configmenu->screen.sloppyFocus());
+ setItemSelected(2, configmenu->screen.autoRaise());
}
void Configmenu::Focusmenu::itemSelected(int button, int index) {
@@ -169,8 +169,8 @@ void Configmenu::Focusmenu::itemSelected(int button, int index) {
switch (item->function()) {
case 1: // click to focus
- configmenu->screen.saveSloppyFocus(False);
- configmenu->screen.saveAutoRaise(False);
+ configmenu->screen.setSloppyFocus(false);
+ configmenu->screen.setAutoRaise(false);
if (! configmenu->screen.getOpenbox().getFocusedWindow())
XSetInputFocus(configmenu->screen.getOpenbox().getXDisplay(),
@@ -187,23 +187,23 @@ void Configmenu::Focusmenu::itemSelected(int button, int index) {
break;
case 2: // sloppy focus
- configmenu->screen.saveSloppyFocus(True);
+ configmenu->screen.setSloppyFocus(true);
configmenu->screen.reconfigure();
break;
case 3: // auto raise with sloppy focus
- Bool change = ((configmenu->screen.doAutoRaise()) ? False : True);
- configmenu->screen.saveAutoRaise(change);
+ bool change = ((configmenu->screen.autoRaise()) ? false : true);
+ configmenu->screen.setAutoRaise(change);
break;
}
- setItemSelected(0, (! configmenu->screen.isSloppyFocus()));
- setItemSelected(1, configmenu->screen.isSloppyFocus());
- setItemEnabled(2, configmenu->screen.isSloppyFocus());
- setItemSelected(2, configmenu->screen.doAutoRaise());
+ setItemSelected(0, !configmenu->screen.sloppyFocus());
+ setItemSelected(1, configmenu->screen.sloppyFocus());
+ setItemEnabled(2, configmenu->screen.sloppyFocus());
+ setItemSelected(2, configmenu->screen.autoRaise());
}
Configmenu::Placementmenu::Placementmenu(Configmenu *cm) :
@@ -234,7 +234,7 @@ Configmenu::Placementmenu::Placementmenu(Configmenu *cm) :
"Bottom to Top"), BScreen::BottomTop);
update();
- switch (configmenu->screen.getPlacementPolicy()) {
+ switch (configmenu->screen.placementPolicy()) {
case BScreen::RowSmartPlacement:
setItemSelected(0, True);
break;
@@ -252,16 +252,16 @@ Configmenu::Placementmenu::Placementmenu(Configmenu *cm) :
break;
}
- Bool rl = (configmenu->screen.getRowPlacementDirection() ==
+ Bool rl = (configmenu->screen.rowPlacementDirection() ==
BScreen::LeftRight),
- tb = (configmenu->screen.getColPlacementDirection() ==
+ tb = (configmenu->screen.colPlacementDirection() ==
BScreen::TopBottom);
setItemSelected(4, rl);
- setItemSelected(5, ! rl);
+ setItemSelected(5, !rl);
setItemSelected(6, tb);
- setItemSelected(7, ! tb);
+ setItemSelected(7, !tb);
}
void Configmenu::Placementmenu::itemSelected(int button, int index) {
@@ -275,7 +275,7 @@ void Configmenu::Placementmenu::itemSelected(int button, int index) {
switch (item->function()) {
case BScreen::RowSmartPlacement:
- configmenu->screen.savePlacementPolicy(item->function());
+ configmenu->screen.setPlacementPolicy(item->function());
setItemSelected(0, True);
setItemSelected(1, False);
@@ -285,7 +285,7 @@ void Configmenu::Placementmenu::itemSelected(int button, int index) {
break;
case BScreen::ColSmartPlacement:
- configmenu->screen.savePlacementPolicy(item->function());
+ configmenu->screen.setPlacementPolicy(item->function());
setItemSelected(0, False);
setItemSelected(1, True);
@@ -295,7 +295,7 @@ void Configmenu::Placementmenu::itemSelected(int button, int index) {
break;
case BScreen::CascadePlacement:
- configmenu->screen.savePlacementPolicy(item->function());
+ configmenu->screen.setPlacementPolicy(item->function());
setItemSelected(0, False);
setItemSelected(1, False);
@@ -305,7 +305,7 @@ void Configmenu::Placementmenu::itemSelected(int button, int index) {
break;
case BScreen::BestFitPlacement:
- configmenu->screen.savePlacementPolicy(item->function());
+ configmenu->screen.setPlacementPolicy(item->function());
setItemSelected(0, False);
setItemSelected(1, False);
@@ -315,7 +315,7 @@ void Configmenu::Placementmenu::itemSelected(int button, int index) {
break;
case BScreen::LeftRight:
- configmenu->screen.saveRowPlacementDirection(BScreen::LeftRight);
+ configmenu->screen.setRowPlacementDirection(BScreen::LeftRight);
setItemSelected(4, True);
setItemSelected(5, False);
@@ -323,7 +323,7 @@ void Configmenu::Placementmenu::itemSelected(int button, int index) {
break;
case BScreen::RightLeft:
- configmenu->screen.saveRowPlacementDirection(BScreen::RightLeft);
+ configmenu->screen.setRowPlacementDirection(BScreen::RightLeft);
setItemSelected(4, False);
setItemSelected(5, True);
@@ -331,7 +331,7 @@ void Configmenu::Placementmenu::itemSelected(int button, int index) {
break;
case BScreen::TopBottom:
- configmenu->screen.saveColPlacementDirection(BScreen::TopBottom);
+ configmenu->screen.setColPlacementDirection(BScreen::TopBottom);
setItemSelected(5, True);
setItemSelected(6, False);
@@ -339,7 +339,7 @@ void Configmenu::Placementmenu::itemSelected(int button, int index) {
break;
case BScreen::BottomTop:
- configmenu->screen.saveColPlacementDirection(BScreen::BottomTop);
+ configmenu->screen.setColPlacementDirection(BScreen::BottomTop);
setItemSelected(5, False);
setItemSelected(6, True);
diff --git a/src/Screen.cc b/src/Screen.cc
index e1231b8b..251faadd 100644
--- a/src/Screen.cc
+++ b/src/Screen.cc
@@ -189,6 +189,28 @@ static const char *getFontSize(const char *pattern, int *size) {
BScreen::BScreen(Openbox &ob, int scrn, Resource &conf) : ScreenInfo(ob, scrn),
openbox(ob), config(conf)
{
+ // default values
+ resource.full_max = false;
+ resource.focus_new = false;
+ resource.focus_last = false;
+ resource.row_direction = LeftRight;
+ resource.col_direction = TopBottom;
+ resource.workspaces = 1;
+ resource.sloppy_focus = true;
+ resource.auto_raise = false;
+ resource.zones = 1;
+ resource.placement_policy = CascadePlacement;
+#ifdef HAVE_STRFTIME
+ resource.strftime_format = bstrdup("%I:%M %p");
+#else // !have_strftime
+ resource.date_format = B_AmericanDate;
+ resource.clock24hour = false;
+#endif // HAVE_STRFTIME
+ resource.edge_snap_threshold = 4;
+ resource.image_dither = true;
+ resource.root_command = NULL;
+ resource.opaque_move = false;
+
event_mask = ColormapChangeMask | EnterWindowMask | PropertyChangeMask |
SubstructureRedirectMask | KeyPressMask | KeyReleaseMask |
ButtonPressMask | ButtonReleaseMask;
@@ -213,11 +235,6 @@ BScreen::BScreen(Openbox &ob, int scrn, Resource &conf) : ScreenInfo(ob, scrn),
resource.tstyle.fontset = resource.wstyle.fontset = (XFontSet) 0;
resource.mstyle.t_font = resource.mstyle.f_font = resource.tstyle.font =
resource.wstyle.font = (XFontStruct *) 0;
- resource.root_command = NULL;
-
-#ifdef HAVE_STRFTIME
- resource.strftime_format = 0;
-#endif // HAVE_STRFTIME
#ifdef HAVE_GETPID
pid_t bpid = getpid();
@@ -232,6 +249,9 @@ BScreen::BScreen(Openbox &ob, int scrn, Resource &conf) : ScreenInfo(ob, scrn),
openbox.getSessionCursor());
workspaceNames = new LinkedList<char>;
+
+ load(); // load config options from Resources
+
workspacesList = new LinkedList<Workspace>;
rootmenuList = new LinkedList<Rootmenu>;
netizenList = new LinkedList<Netizen>;
@@ -243,8 +263,6 @@ BScreen::BScreen(Openbox &ob, int scrn, Resource &conf) : ScreenInfo(ob, scrn),
image_control->installRootColormap();
root_colormap_installed = True;
- openbox.load_rc(this);
-
image_control->setDither(resource.image_dither);
LoadStyle();
@@ -404,11 +422,13 @@ BScreen::BScreen(Openbox &ob, int scrn, Resource &conf) : ScreenInfo(ob, scrn),
for (int i = 0; i < resource.workspaces; ++i) {
wkspc = new Workspace(*this, workspacesList->count());
workspacesList->insert(wkspc);
+ saveWorkspaceNames();
workspacemenu->insert(wkspc->getName(), wkspc->getMenu());
}
} else {
wkspc = new Workspace(*this, workspacesList->count());
workspacesList->insert(wkspc);
+ saveWorkspaceNames();
workspacemenu->insert(wkspc->getName(), wkspc->getMenu());
}
@@ -824,6 +844,210 @@ XFontSet BScreen::createFontSet(const char *fontname) {
return fs;
}
+void BScreen::setSloppyFocus(bool b) {
+ resource.sloppy_focus = b;
+ ostrstream s;
+ s << "session.screen" << getScreenNumber() << ".focusModel" << ends;
+ config.setValue(s.str(),
+ (resource.sloppy_focus ?
+ (resource.auto_raise ? "AutoRaiseSloppyFocus" : "SloppyFocus")
+ : "ClickToFocus"));
+}
+
+void BScreen::setAutoRaise(bool a) {
+ resource.auto_raise = a;
+ ostrstream s;
+ s << "session.screen" << getScreenNumber() << ".focusModel" << ends;
+ config.setValue(s.str(),
+ (resource.sloppy_focus ?
+ (resource.auto_raise ? "AutoRaiseSloppyFocus" : "SloppyFocus")
+ : "ClickToFocus"));
+}
+
+void BScreen::setImageDither(bool d) {
+ resource.image_dither = d;
+ ostrstream s;
+ s << "session.screen" << getScreenNumber() << ".imageDither" << ends;
+ config.setValue(s.str(), resource.image_dither);
+}
+
+void BScreen::setOpaqueMove(bool o) {
+ resource.opaque_move = o;
+ ostrstream s;
+ s << "session.screen" << getScreenNumber() << ".opaqueMove" << ends;
+ config.setValue(s.str(), resource.opaque_move);
+}
+
+void BScreen::setFullMax(bool f) {
+ resource.full_max = f;
+ ostrstream s;
+ s << "session.screen" << getScreenNumber() << ".fullMaximization" << ends;
+ config.setValue(s.str(), resource.full_max);
+}
+
+void BScreen::setFocusNew(bool f) {
+ resource.focus_new = f;
+ ostrstream s;
+ s << "session.screen" << getScreenNumber() << ".focusNewWindows" << ends;
+ config.setValue(s.str(), resource.focus_new);
+}
+
+void BScreen::setFocusLast(bool f) {
+ resource.focus_last = f;
+ ostrstream s;
+ s << "session.screen" << getScreenNumber() << ".focusLastWindow" << ends;
+ config.setValue(s.str(), resource.focus_last);
+}
+
+void BScreen::setWindowZones(int z) {
+ resource.zones = z;
+ ostrstream s;
+ s << "session.screen" << getScreenNumber() << ".windowZones" << ends;
+ config.setValue(s.str(), resource.zones);
+}
+
+void BScreen::setWorkspaceCount(int w) {
+ resource.workspaces = w;
+ ostrstream s;
+ s << "session.screen" << getScreenNumber() << ".workspaces" << ends;
+ config.setValue(s.str(), resource.workspaces);
+}
+
+void BScreen::setPlacementPolicy(int p) {
+ resource.placement_policy = p;
+ ostrstream s;
+ s << "session.screen" << getScreenNumber() << ".windowPlacement" << ends;
+ const char *placement;
+ switch (resource.placement_policy) {
+ case CascadePlacement: placement = "CascadePlacement"; break;
+ case BestFitPlacement: placement = "BestFitPlacement"; break;
+ case ColSmartPlacement: placement = "ColSmartPlacement"; break;
+ default:
+ case RowSmartPlacement: placement = "RowSmartPlacement"; break;
+ }
+ config.setValue(s.str(), placement);
+}
+
+void BScreen::setEdgeSnapThreshold(int t) {
+ resource.edge_snap_threshold = t;
+ ostrstream s;
+ s << "session.screen" << getScreenNumber() << ".edgeSnapThreshold" << ends;
+ config.setValue(s.str(), resource.edge_snap_threshold);
+}
+
+void BScreen::setRowPlacementDirection(int d) {
+ resource.row_direction = d;
+ ostrstream s;
+ s << "session.screen" << getScreenNumber() << ".rowPlacementDirection" <<
+ ends;
+ config.setValue(s.str(),
+ resource.row_direction == LeftRight ?
+ "LeftToRight" : "RightToLeft");
+}
+
+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");
+}
+
+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 commend 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);
+}
+
+#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");
+}
+
+void BScreen::setClock24Hour(Bool c) {
+ resource.clock24hour = c;
+ ostrstream s;
+ s << "session.screen" << getScreenNumber() << ".clockFormat" << ends;
+ config.setValue(s.str(), resource.clock24hour ? 24 : 12);
+}
+#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");
+}
+
+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());
+}
+
+void BScreen::save() {
+ setSloppyFocus(resource.sloppy_focus);
+ setAutoRaise(resource.auto_raise);
+ setImageDither(resource.image_dither);
+ 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.
+ setStrftimeFormat(bstrdup(resource.strftime_format));
+#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;
@@ -836,6 +1060,153 @@ void BScreen::load() {
if (config.getValue(rname.str(), rclass.str(), b))
resource.hide_toolbar = b;
+ 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;
+
+ 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;
+
+ 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;
+
+ 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;
+ }
+
+ 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;
+ }
+
+ 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;
+
+ 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;
+ }
+ }
+
+ 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;
+
+ 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;
+ }
+
+#ifdef HAVE_STRFTIME
+ rname.seekp(0); rclass.seekp(0);
+ rname << rscreen.str() << "strftimeFormat" << ends;
+ rclass << rscreen.str() << "StrftimeFormat" << ends;
+ if (config.getValue(rname.str(), rclass.str(), s))
+ resource.strftime_format = bstrdup(s.c_str());
+#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;
+ }
+
+ 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;
+#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;
+
+ 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;
+
+ rname.seekp(0); rclass.seekp(0);
+ rname << rscreen.str() << "rootCommand" << ends;
+ rclass << rscreen.str() << "RootCommand" << ends;
+ if (config.getValue(rname.str(), rclass.str(), s))
+ resource.root_command = bstrdup(s.c_str());
+
+ rname.seekp(0); rclass.seekp(0);
+ rname << rscreen.str() << "opaqueMove" << ends;
+ rclass << rscreen.str() << "OpaqueMove" << ends;
+ resource.opaque_move = b;
}
void BScreen::reconfigure(void) {
@@ -1008,7 +1379,7 @@ void BScreen::rereadMenu(void) {
void BScreen::removeWorkspaceNames(void) {
while (workspaceNames->count())
- delete [] workspaceNames->remove(0);
+ delete [] workspaceNames->remove(0);
}
@@ -1362,6 +1733,7 @@ OpenboxWindow *BScreen::getIcon(int index) {
int BScreen::addWorkspace(void) {
Workspace *wkspc = new Workspace(*this, workspacesList->count());
workspacesList->insert(wkspc);
+ saveWorkspaceNames();
workspacemenu->insert(wkspc->getName(), wkspc->getMenu(),
wkspc->getWorkspaceID() + 2);
@@ -1575,21 +1947,10 @@ void BScreen::raiseWindows(Window *workspace_stack, int num) {
}
-#ifdef HAVE_STRFTIME
-void BScreen::saveStrftimeFormat(const char *format) {
- if (resource.strftime_format)
- delete [] resource.strftime_format;
-
- resource.strftime_format = bstrdup(format);
-}
-#endif // HAVE_STRFTIME
-
-
void BScreen::addWorkspaceName(const char *name) {
workspaceNames->insert(bstrdup(name));
}
-
char* BScreen::getNameOfWorkspace(int id) {
char *name = (char *) 0;
@@ -2280,15 +2641,3 @@ void BScreen::hideGeometry(void) {
geom_visible = False;
}
}
-
-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");
-}
-
diff --git a/src/Screen.h b/src/Screen.h
index 3d03f53c..8acae7ee 100644
--- a/src/Screen.h
+++ b/src/Screen.h
@@ -132,23 +132,21 @@ private:
ToolbarStyle tstyle;
MenuStyle mstyle;
- Bool sloppy_focus, auto_raise,
- auto_edge_balance, image_dither, ordered_dither, opaque_move, full_max,
- focus_new, focus_last;
- bool hide_toolbar;
+ bool sloppy_focus, auto_raise, auto_edge_balance, image_dither, focus_last,
+ ordered_dither, opaque_move, hide_toolbar, full_max, focus_new;
BColor border_color;
Resource styleconfig;
- int workspaces, toolbar_placement, toolbar_width_percent, placement_policy,
- edge_snap_threshold, row_direction, col_direction;
+ int workspaces, placement_policy, edge_snap_threshold, row_direction,
+ col_direction;
unsigned int handle_width, bevel_width, frame_width, border_width;
- unsigned int zones; // number of zones to be used when alt-resizing a window
+ int zones; // number of zones to be used when alt-resizing a window
#ifdef HAVE_STRFTIME
char *strftime_format;
#else // !HAVE_STRFTIME
- Bool clock24hour;
+ bool clock24hour;
int date_format;
#endif // HAVE_STRFTIME
@@ -175,21 +173,7 @@ public:
BScreen(Openbox &, int, Resource &);
~BScreen();
- inline const Bool &isSloppyFocus() const
- { return resource.sloppy_focus; }
- inline const Bool &isRootColormapInstalled() const
- { return root_colormap_installed; }
- inline const Bool &doAutoRaise() const { return resource.auto_raise; }
inline const Bool &isScreenManaged() const { return managed; }
- inline const Bool &doImageDither() const
- { return resource.image_dither; }
- inline const Bool &doOrderedDither() const
- { return resource.ordered_dither; }
- inline const Bool &doOpaqueMove() const { return resource.opaque_move; }
- inline const Bool &doFullMax() const { return resource.full_max; }
- inline const Bool &doFocusNew() const { return resource.focus_new; }
- inline const Bool &doFocusLast() const { return resource.focus_last; }
-
inline const GC &getOpGC() const { return opGC; }
inline Openbox &getOpenbox() { return openbox; }
@@ -201,16 +185,14 @@ public:
inline Slit *getSlit() { return slit; }
#endif // SLIT
- inline int getWindowZones() const
- { return resource.zones; }
- inline void saveWindowZones(int z) { resource.zones = z; }
-
inline Toolbar *getToolbar() { return toolbar; }
inline Workspace *getWorkspace(int w) { return workspacesList->find(w); }
inline Workspace *getCurrentWorkspace() { return current_workspace; }
inline Workspacemenu *getWorkspacemenu() { return workspacemenu; }
+
+ inline void iconUpdate() { iconmenu->update(); }
inline const unsigned int &getHandleWidth() const
{ return resource.handle_width; }
@@ -225,51 +207,63 @@ public:
{ return current_workspace->getWorkspaceID(); }
inline const int getWorkspaceCount() { return workspacesList->count(); }
inline const int getIconCount() { return iconList->count(); }
- inline const int &getNumberOfWorkspaces() const
- { return resource.workspaces; }
- inline const int &getPlacementPolicy() const
- { return resource.placement_policy; }
- inline const int &getEdgeSnapThreshold() const
- { return resource.edge_snap_threshold; }
- inline const int &getRowPlacementDirection() const
- { return resource.row_direction; }
- inline const int &getColPlacementDirection() const
- { return resource.col_direction; }
-
- inline void saveRootCommand(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;
- }
- inline const char *getRootCommand() const
- { return resource.root_command; }
-
+
+ inline const Bool &isRootColormapInstalled() const
+ { return root_colormap_installed; }
inline void setRootColormapInstalled(Bool r) { root_colormap_installed = r; }
- inline void saveSloppyFocus(Bool s) { resource.sloppy_focus = s; }
- inline void saveAutoRaise(Bool a) { resource.auto_raise = a; }
- inline void saveWorkspaces(int w) { resource.workspaces = w; }
- inline void savePlacementPolicy(int p) { resource.placement_policy = p; }
- inline void saveRowPlacementDirection(int d) { resource.row_direction = d; }
- inline void saveColPlacementDirection(int d) { resource.col_direction = d; }
- inline void saveEdgeSnapThreshold(int t)
- { resource.edge_snap_threshold = t; }
- inline void saveImageDither(Bool d) { resource.image_dither = d; }
- inline void saveOpaqueMove(Bool o) { resource.opaque_move = o; }
- inline void saveFullMax(Bool f) { resource.full_max = f; }
- inline void saveFocusNew(Bool f) { resource.focus_new = f; }
- inline void saveFocusLast(Bool f) { resource.focus_last = f; }
- inline void iconUpdate() { iconmenu->update(); }
+
+ inline bool sloppyFocus() const { return resource.sloppy_focus; }
+ void setSloppyFocus(bool s);
+
+ inline bool autoRaise() const { return resource.auto_raise; }
+ void setAutoRaise(bool a);
+
+ inline bool imageDither() const { return resource.image_dither; }
+ void setImageDither(bool d);
+
+ inline bool orderedDither() const { return resource.ordered_dither; }
+
+ inline bool opaqueMove() const { return resource.opaque_move; }
+ void setOpaqueMove(bool o);
+
+ inline bool fullMax() const { return resource.full_max; }
+ void setFullMax(bool f);
+
+ inline bool focusNew() const { return resource.focus_new; }
+ void setFocusNew(bool f);
+
+ inline bool focusLast() const { return resource.focus_last; }
+ void setFocusLast(bool f);
+
+ inline int getWindowZones() const { return resource.zones; }
+ void setWindowZones(int z);
+
+ inline int workspaceCount() const { return resource.workspaces; }
+ void setWorkspaceCount(int w);
+
+ inline int placementPolicy() const { return resource.placement_policy; }
+ void setPlacementPolicy(int p);
+
+ inline int edgeSnapThreshold() const { return resource.edge_snap_threshold; }
+ void setEdgeSnapThreshold(int t);
+
+ inline int rowPlacementDirection() const { return resource.row_direction; }
+ void setRowPlacementDirection(int d);
+
+ inline int colPlacementDirection() const { return resource.col_direction; }
+ void setColPlacementDirection(int d);
+
+ inline char *rootCommand() const { return resource.root_command; }
+ inline void setRootCommand(const char *cmd);
+
#ifdef HAVE_STRFTIME
- inline char *getStrftimeFormat() { return resource.strftime_format; }
- void saveStrftimeFormat(const char *);
+ inline char *strftimeFormat() { return resource.strftime_format; }
+ void setStrftimeFormat(const char *);
#else // !HAVE_STRFTIME
- inline int getDateFormat() { return resource.date_format; }
- inline void saveDateFormat(int f) { resource.date_format = f; }
- inline Bool isClock24Hour() { return resource.clock24hour; }
- inline void saveClock24Hour(Bool c) { resource.clock24hour = c; }
+ inline int dateFormat() { return resource.date_format; }
+ void setDateFormat(int f);
+ inline bool clock24Hour() { return resource.clock24hour; }
+ void setClock24Hour(Bool c);
#endif // HAVE_STRFTIME
inline bool hideToolbar() const { return resource.hide_toolbar; }
@@ -286,6 +280,7 @@ public:
void removeWorkspaceNames();
void addWorkspaceName(const char *);
+ void saveWorkspaceNames();
void addNetizen(Netizen *);
void removeNetizen(Window);
void addIcon(OpenboxWindow *);
@@ -299,6 +294,7 @@ public:
void raiseFocus();
void reconfigure();
void load();
+ void save();
void rereadMenu();
void shutdown();
void showPosition(int, int);
diff --git a/src/Slit.cc b/src/Slit.cc
index 7124e003..19796814 100644
--- a/src/Slit.cc
+++ b/src/Slit.cc
@@ -256,6 +256,13 @@ void Slit::setDirection(int d) {
m_direction == Horizontal ? "Horizontal" : "Vertical");
}
+void Slit::save() {
+ setOnTop(m_ontop);
+ setAutoHide(m_autohide);
+ setPlacement(m_placement);
+ setDirection(m_direction);
+}
+
void Slit::load() {
std::ostrstream rscreen, rname, rclass;
std::string s;
diff --git a/src/Slit.h b/src/Slit.h
index 60bbdfcb..cb6b454a 100644
--- a/src/Slit.h
+++ b/src/Slit.h
@@ -137,6 +137,7 @@ public:
void removeClient(Window, Bool = True);
void reconfigure();
void load();
+ void save();
void reposition();
void shutdown();
diff --git a/src/Toolbar.cc b/src/Toolbar.cc
index b6469957..f5aa7f90 100644
--- a/src/Toolbar.cc
+++ b/src/Toolbar.cc
@@ -257,6 +257,13 @@ void Toolbar::setPlacement(int p) {
config.setValue(s.str(), placement);
}
+void Toolbar::save() {
+ setOnTop(m_ontop);
+ setAutoHide(m_autohide);
+ setWidthPercent(m_width_percent);
+ setPlacement(m_placement);
+}
+
void Toolbar::load() {
std::ostrstream rscreen, rname, rclass;
std::string s;
@@ -379,7 +386,7 @@ void Toolbar::reconfigure() {
tt = localtime(&ttmp);
if (tt) {
char t[1025], *time_string = (char *) 0;
- int len = strftime(t, 1024, screen.getStrftimeFormat(), tt);
+ int len = strftime(t, 1024, screen.strftimeFormat(), tt);
t[len++-1] = ' '; // add a space to the string for padding
t[len] = '\0';
@@ -616,7 +623,7 @@ void Toolbar::checkClock(Bool redraw, Bool date) {
if (redraw) {
#ifdef HAVE_STRFTIME
char t[1024];
- if (! strftime(t, 1024, screen.getStrftimeFormat(), tt))
+ if (! strftime(t, 1024, screen.strftimeFormat(), tt))
return;
#else // !HAVE_STRFTIME
char t[9];
@@ -950,7 +957,7 @@ void Toolbar::edit() {
return;
XSetInputFocus(display, frame.workspace_label,
- ((screen.isSloppyFocus()) ? RevertToPointerRoot :
+ ((screen.sloppyFocus()) ? RevertToPointerRoot :
RevertToParent),
CurrentTime);
XClearWindow(display, frame.workspace_label);
diff --git a/src/Toolbar.h b/src/Toolbar.h
index c1b3c2cd..ecf2fd2a 100644
--- a/src/Toolbar.h
+++ b/src/Toolbar.h
@@ -136,6 +136,7 @@ public:
void edit();
void reconfigure();
void load();
+ void save();
void mapToolbar();
void unMapToolbar();
#ifdef HAVE_STRFTIME
diff --git a/src/Window.cc b/src/Window.cc
index da4d6437..c2e8644b 100644
--- a/src/Window.cc
+++ b/src/Window.cc
@@ -259,7 +259,7 @@ OpenboxWindow::OpenboxWindow(Openbox &o, Window w, BScreen *s) : openbox(o) {
associateClientWindow();
- if (! screen->isSloppyFocus())
+ if (! screen->sloppyFocus())
openbox.grabButton(Button1, 0, frame.plate, True, ButtonPressMask,
GrabModeSync, GrabModeSync, None, None);
@@ -847,7 +847,7 @@ void OpenboxWindow::reconfigure(void) {
configure(frame.x, frame.y, frame.width, frame.height);
- if (! screen->isSloppyFocus())
+ if (! screen->sloppyFocus())
openbox.grabButton(Button1, 0, frame.plate, True, ButtonPressMask,
GrabModeSync, GrabModeSync, None, None);
else
@@ -1407,7 +1407,7 @@ Bool OpenboxWindow::setInputFocus(void) {
XSendEvent(display, client.window, False, NoEventMask, &ce);
}
- if (screen->isSloppyFocus() && screen->doAutoRaise())
+ if (screen->sloppyFocus() && screen->autoRaise())
timer->start();
ret = True;
@@ -1465,7 +1465,7 @@ void OpenboxWindow::deiconify(Bool reassoc, Bool raise) {
XMapSubwindows(display, frame.window);
XMapWindow(display, frame.window);
- if (flags.iconic && screen->doFocusNew()) setInputFocus();
+ if (flags.iconic && screen->focusNew()) setInputFocus();
flags.visible = True;
flags.iconic = False;
@@ -1553,7 +1553,7 @@ void OpenboxWindow::maximize(unsigned int button) {
dh -= client.base_height;
dh -= frame.y_border;
- if (! screen->doFullMax())
+ if (! screen->fullMax())
dh -= screen->getToolbar()->getExposedHeight() + frame.border_w;
if (dw < client.min_width) dw = client.min_width;
@@ -1573,7 +1573,7 @@ void OpenboxWindow::maximize(unsigned int button) {
dx += ((screen->size().w() - dw) / 2) - frame.border_w;
- if (screen->doFullMax()) {
+ if (screen->fullMax()) {
dy += ((screen->size().h() - dh) / 2) - frame.border_w;
} else {
dy += (((screen->size().h() - screen->getToolbar()->getExposedHeight())
@@ -1740,7 +1740,7 @@ void OpenboxWindow::setFocusFlag(Bool focus) {
XSetWindowBorder(display, frame.plate, frame.uborder_pixel);
}
- if (screen->isSloppyFocus() && screen->doAutoRaise() && timer->isTiming())
+ if (screen->sloppyFocus() && screen->autoRaise() && timer->isTiming())
timer->stop();
}
@@ -2258,7 +2258,7 @@ void OpenboxWindow::mapNotifyEvent(XMapEvent *ne) {
redrawAllButtons();
- if (flags.transient || screen->doFocusNew())
+ if (flags.transient || screen->focusNew())
setInputFocus();
else
setFocusFlag(False);
@@ -2641,7 +2641,7 @@ void OpenboxWindow::buttonPressEvent(XButtonEvent *be) {
shade();
}
- if (! (flags.focused || screen->isSloppyFocus()) ) {
+ if (! (flags.focused || screen->sloppyFocus()) ) {
setInputFocus(); // any click focus' the window in 'click to focus'
}
if (stack_change < 0) {
@@ -2722,7 +2722,7 @@ void OpenboxWindow::buttonReleaseEvent(XButtonEvent *re) {
flags.moving = False;
openbox.maskWindowEvents(0, (OpenboxWindow *) 0);
- if (!screen->doOpaqueMove()) {
+ if (!screen->opaqueMove()) {
XDrawRectangle(display, screen->getRootWindow(), screen->getOpGC(),
frame.move_x, frame.move_y, frame.resize_w - 1,
frame.resize_h - 1);
@@ -2781,7 +2781,7 @@ void OpenboxWindow::motionNotifyEvent(XMotionEvent *me) {
openbox.maskWindowEvents(client.window, this);
- if (! screen->doOpaqueMove()) {
+ if (! screen->opaqueMove()) {
openbox.grab();
frame.move_x = frame.x;
@@ -2802,7 +2802,7 @@ void OpenboxWindow::motionNotifyEvent(XMotionEvent *me) {
dx -= frame.border_w;
dy -= frame.border_w;
- int snap_distance = screen->getEdgeSnapThreshold();
+ int snap_distance = screen->edgeSnapThreshold();
// width/height of the snapping window
unsigned int snap_w = frame.width + (frame.border_w * 2);
unsigned int snap_h = size().h() + (frame.border_w * 2);
@@ -2843,7 +2843,7 @@ void OpenboxWindow::motionNotifyEvent(XMotionEvent *me) {
dy = dbby - snap_h;
}
- if (screen->doOpaqueMove()) {
+ if (screen->opaqueMove()) {
configure(dx, dy, frame.width, frame.height);
} else {
XDrawRectangle(display, screen->getRootWindow(), screen->getOpGC(),
diff --git a/src/Workspace.cc b/src/Workspace.cc
index 9c44d797..41eb3ef0 100644
--- a/src/Workspace.cc
+++ b/src/Workspace.cc
@@ -120,7 +120,7 @@ const int Workspace::removeWindow(OpenboxWindow *w) {
if (w->isTransient() && w->getTransientFor() &&
w->getTransientFor()->isVisible()) {
w->getTransientFor()->setInputFocus();
- } else if (screen.isSloppyFocus()) {
+ } else if (screen.sloppyFocus()) {
screen.getOpenbox().setFocusedWindow((OpenboxWindow *) 0);
} else {
OpenboxWindow *top = stackingList->first();
@@ -321,6 +321,7 @@ void Workspace::setName(char *new_name) {
clientmenu->setLabel(name);
clientmenu->update();
+ screen.saveWorkspaceNames();
}
@@ -406,22 +407,22 @@ inline Point *Workspace::rowSmartPlacement(const Size &win_size,
int test_x, test_y, place_x = 0, place_y = 0;
int start_pos = 0;
int change_y =
- ((screen.getColPlacementDirection() == BScreen::TopBottom) ? 1 : -1);
+ ((screen.colPlacementDirection() == BScreen::TopBottom) ? 1 : -1);
int change_x =
- ((screen.getRowPlacementDirection() == BScreen::LeftRight) ? 1 : -1);
+ ((screen.rowPlacementDirection() == BScreen::LeftRight) ? 1 : -1);
int delta_x = 8, delta_y = 8;
LinkedListIterator<OpenboxWindow> it(windowList);
- test_y = (screen.getColPlacementDirection() == BScreen::TopBottom) ?
+ test_y = (screen.colPlacementDirection() == BScreen::TopBottom) ?
start_pos : screen.size().h() - win_size.h() - start_pos;
while(!placed &&
- ((screen.getColPlacementDirection() == BScreen::BottomTop) ?
+ ((screen.colPlacementDirection() == BScreen::BottomTop) ?
test_y > 0 : test_y + win_size.h() < (signed) space.h())) {
- test_x = (screen.getRowPlacementDirection() == BScreen::LeftRight) ?
+ test_x = (screen.rowPlacementDirection() == BScreen::LeftRight) ?
start_pos : space.w() - win_size.w() - start_pos;
while (!placed &&
- ((screen.getRowPlacementDirection() == BScreen::RightLeft) ?
+ ((screen.rowPlacementDirection() == BScreen::RightLeft) ?
test_x > 0 : test_x + win_size.w() < (signed) space.w())) {
placed = true;
@@ -467,23 +468,23 @@ inline Point * Workspace::colSmartPlacement(const Size &win_size,
int test_x, test_y;
int start_pos = 0;
int change_y =
- ((screen.getColPlacementDirection() == BScreen::TopBottom) ? 1 : -1);
+ ((screen.colPlacementDirection() == BScreen::TopBottom) ? 1 : -1);
int change_x =
- ((screen.getRowPlacementDirection() == BScreen::LeftRight) ? 1 : -1);
+ ((screen.rowPlacementDirection() == BScreen::LeftRight) ? 1 : -1);
int delta_x = 8, delta_y = 8;
LinkedListIterator<OpenboxWindow> it(windowList);
- test_x = (screen.getRowPlacementDirection() == BScreen::LeftRight) ?
+ test_x = (screen.rowPlacementDirection() == BScreen::LeftRight) ?
start_pos : screen.size().w() - win_size.w() - start_pos;
while(!placed &&
- ((screen.getRowPlacementDirection() == BScreen::RightLeft) ?
+ ((screen.rowPlacementDirection() == BScreen::RightLeft) ?
test_x > 0 : test_x + win_size.w() < (signed) space.w())) {
- test_y = (screen.getColPlacementDirection() == BScreen::TopBottom) ?
+ test_y = (screen.colPlacementDirection() == BScreen::TopBottom) ?
start_pos : screen.size().h() - win_size.h() - start_pos;
while(!placed &&
- ((screen.getColPlacementDirection() == BScreen::BottomTop) ?
+ ((screen.colPlacementDirection() == BScreen::BottomTop) ?
test_y > 0 : test_y + win_size.h() < (signed) space.h())){
placed = true;
@@ -555,9 +556,9 @@ void Workspace::placeWindow(OpenboxWindow *win) {
(screen.getBorderWidth() * 4),
start_pos = 0,
change_y =
- ((screen.getColPlacementDirection() == BScreen::TopBottom) ? 1 : -1),
+ ((screen.colPlacementDirection() == BScreen::TopBottom) ? 1 : -1),
change_x =
- ((screen.getRowPlacementDirection() == BScreen::LeftRight) ? 1 : -1),
+ ((screen.rowPlacementDirection() == BScreen::LeftRight) ? 1 : -1),
delta_x = 8, delta_y = 8;
LinkedListIterator<OpenboxWindow> it(windowList);
@@ -570,7 +571,7 @@ void Workspace::placeWindow(OpenboxWindow *win) {
win->size().h()+screen.getBorderWidth() * 4);
Point *place = NULL;
- switch (screen.getPlacementPolicy()) {
+ switch (screen.placementPolicy()) {
case BScreen::BestFitPlacement:
place = bestFitPlacement(window_size, space);
break;
diff --git a/src/openbox.cc b/src/openbox.cc
index e4ea5306..c86b2124 100644
--- a/src/openbox.cc
+++ b/src/openbox.cc
@@ -201,7 +201,7 @@ Openbox::Openbox(int m_argc, char **m_argv, char *dpy_name, char *rc)
menuTimestamps = new LinkedList<MenuTimestamp>;
- load_rc();
+ load();
#ifdef HAVE_GETPID
openbox_pid = XInternAtom(getXDisplay(), "_BLACKBOX_PID", False);
@@ -226,6 +226,9 @@ Openbox::Openbox(int m_argc, char **m_argv, char *dpy_name, char *rc)
::exit(3);
}
+ // save current settings and default values
+ save();
+
XSynchronize(getXDisplay(), False);
XSync(getXDisplay(), False);
@@ -239,7 +242,7 @@ Openbox::Openbox(int m_argc, char **m_argv, char *dpy_name, char *rc)
}
-Openbox::~Openbox(void) {
+Openbox::~Openbox() {
while (screenList->count())
delete screenList->remove(0);
@@ -583,7 +586,7 @@ void Openbox::process_event(XEvent *e) {
(screen = searchScreen(e->xcrossing.window))) {
screen->getImageControl()->installRootColormap();
} else if ((win = searchWindow(e->xcrossing.window))) {
- if (win->getScreen()->isSloppyFocus() &&
+ if (win->getScreen()->sloppyFocus() &&
(! win->isFocused()) && (! no_focus)) {
grab();
@@ -748,11 +751,8 @@ void Openbox::process_event(XEvent *e) {
Bool Openbox::handleSignal(int sig) {
switch (sig) {
case SIGHUP:
- reconfigure();
- break;
-
case SIGUSR1:
- reload_rc();
+ reconfigure();
break;
case SIGUSR2:
@@ -957,7 +957,7 @@ void Openbox::restart(const char *prog) {
}
-void Openbox::shutdown(void) {
+void Openbox::shutdown() {
BaseDisplay::shutdown();
XSetInputFocus(getXDisplay(), PointerRoot, None, CurrentTime);
@@ -967,14 +967,15 @@ void Openbox::shutdown(void) {
s->shutdown();
XSync(getXDisplay(), False);
-
- save_rc();
}
-void Openbox::save_rc(void) {
+void Openbox::save() {
config.setAutoSave(false);
+ // save all values as they are so that the defaults will be written to the rc
+ // file
+
config.setValue("session.menuFile", getMenuFilename());
config.setValue("session.colorsPerChannel",
resource.colors_per_channel);
@@ -985,122 +986,20 @@ void Openbox::save_rc(void) {
(resource.auto_raise_delay.tv_usec / 1000)));
config.setValue("session.cacheLife", (long)resource.cache_life / 60000);
config.setValue("session.cacheMax", (long)resource.cache_max);
+ config.setValue("session.styleFile", resource.style_file);
LinkedListIterator<BScreen> it(screenList);
- for (BScreen *screen = it.current(); screen; it++, screen = it.current()) {
-// ScreenList::iterator it = screenList.begin();
-// for (; it != screenList.end(); ++it) {
-// BScreen *screen = *it;
- char rc_string[1024];
- const int screen_number = screen->getScreenNumber();
-
- config.setValue("session.opaqueMove",
- (screen->doOpaqueMove()) ? "True" : "False");
- config.setValue("session.imageDither",
- (screen->getImageControl()->doDither()) ? "True" : "False");
-
- sprintf(rc_string, "session.screen%d.fullMaximization", screen_number);
- config.setValue(rc_string, screen->doFullMax() ? "True" : "False");
-
- sprintf(rc_string, "session.screen%d.focusNewWindows", screen_number);
- config.setValue(rc_string, screen->doFocusNew() ? "True" : "False");
-
- sprintf(rc_string, "session.screen%d.focusLastWindow", screen_number);
- config.setValue(rc_string, screen->doFocusLast() ? "True" : "False");
-
- sprintf(rc_string, "session.screen%d.rowPlacementDirection", screen_number);
- config.setValue(rc_string,
- screen->getRowPlacementDirection() == BScreen::LeftRight ?
- "LeftToRight" : "RightToLeft");
-
- sprintf(rc_string, "session.screen%d.colPlacementDirection", screen_number);
- config.setValue(rc_string,
- screen->getColPlacementDirection() == BScreen::TopBottom ?
- "TopToBottom" : "BottomToTop");
-
- const char *placement;
- switch (screen->getPlacementPolicy()) {
- case BScreen::CascadePlacement: placement = "CascadePlacement"; break;
- case BScreen::BestFitPlacement: placement = "BestFitPlacement"; break;
- case BScreen::ColSmartPlacement: placement = "ColSmartPlacement"; break;
- default:
- case BScreen::RowSmartPlacement: placement = "RowSmartPlacement"; break;
- }
- sprintf(rc_string, "session.screen%d.windowPlacement", screen_number);
- config.setValue(rc_string, placement);
-
- sprintf(rc_string, "session.screen%d.focusModel", screen_number);
- config.setValue(rc_string,
- (screen->isSloppyFocus() ?
- (screen->doAutoRaise() ? "AutoRaiseSloppyFocus" :
- "SloppyFocus") : "ClickToFocus"));
-
- sprintf(rc_string, "session.screen%d.workspaces", screen_number);
- config.setValue(rc_string, screen->getWorkspaceCount());
-
-#ifdef HAVE_STRFTIME
- sprintf(rc_string, "session.screen%d.strftimeFormat", screen_number);
- config.setValue(rc_string, screen->getStrftimeFormat());
-#else // !HAVE_STRFTIME
- sprintf(rc_string, "session.screen%d.dateFormat", screen_number);
- config.setValue(rc_string, screen->getDateFormat() == B_EuropeanDate ?
- "European" : "American");
-
- sprintf(rc_string, "session.screen%d.clockFormat", screen_number);
- config.setValue(rc_string, screen->isClock24Hour() ? 24 : 12);
-#endif // HAVE_STRFTIME
-
- sprintf(rc_string, "session.screen%d.edgeSnapThreshold", screen_number);
- config.setValue(rc_string, screen->getEdgeSnapThreshold());
-
- // write out the user's workspace names
- int i, len = 0;
- for (i = 0; i < screen->getWorkspaceCount(); i++)
- len += strlen((screen->getWorkspace(i)->getName()) ?
- screen->getWorkspace(i)->getName() : "Null") + 1;
-
- char *resource_string = new char[len + 1024],
- *save_string = new char[len], *save_string_pos = save_string,
- *name_string_pos;
- if (save_string) {
- for (i = 0; i < screen->getWorkspaceCount(); i++) {
- len = strlen((screen->getWorkspace(i)->getName()) ?
- screen->getWorkspace(i)->getName() : "Null") + 1;
- name_string_pos =
- (char *) ((screen->getWorkspace(i)->getName()) ?
- screen->getWorkspace(i)->getName() : "Null");
-
- while (--len) *(save_string_pos++) = *(name_string_pos++);
- *(save_string_pos++) = ',';
- }
- }
-
- *(--save_string_pos) = '\0';
-
- sprintf(resource_string, "session.screen%d.workspaceNames", screen_number);
- config.setValue(resource_string, save_string);
-
- delete [] resource_string;
- delete [] save_string;
-/*
- std::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", screen_number);
- config.setValue(rc_string, save_string);
-
- delete [] resource_string;*/
+ for (BScreen *s = it.current(); s != NULL; it++, s = it.current()) {
+ s->save();
+ s->getToolbar()->save();
+ s->getSlit()->save();
}
config.setAutoSave(true);
config.save();
}
-void Openbox::load_rc(void) {
+void Openbox::load() {
if (!config.load())
return;
@@ -1162,207 +1061,18 @@ void Openbox::load_rc(void) {
}
-void Openbox::load_rc(BScreen *screen) {
- ASSERT (screen != NULL);
- const int screen_number = screen->getScreenNumber();
- ASSERT (screen_number >= 0);
-
- if (!config.load())
- return;
-
- std::string s;
- long l;
- bool b;
- char name_lookup[1024], class_lookup[1024];
-
- sprintf(name_lookup, "session.screen%d.fullMaximization", screen_number);
- sprintf(class_lookup, "Session.Screen%d.FullMaximization", screen_number);
- if (config.getValue(name_lookup, class_lookup, b))
- screen->saveFullMax((Bool)b);
- else
- screen->saveFullMax(False);
-
- sprintf(name_lookup, "session.screen%d.focusNewWindows", screen_number);
- sprintf(class_lookup, "Session.Screen%d.FocusNewWindows", screen_number);
- if (config.getValue(name_lookup, class_lookup, b))
- screen->saveFocusNew((Bool)b);
- else
- screen->saveFocusNew(False);
-
- sprintf(name_lookup, "session.screen%d.focusLastWindow", screen_number);
- sprintf(class_lookup, "Session.Screen%d.focusLastWindow", screen_number);
- if (config.getValue(name_lookup, class_lookup, b))
- screen->saveFocusLast((Bool)b);
- else
- screen->saveFocusLast(False);
-
- sprintf(name_lookup, "session.screen%d.rowPlacementDirection",
- screen_number);
- sprintf(class_lookup, "Session.Screen%d.RowPlacementDirection",
- screen_number);
- if (config.getValue(name_lookup, class_lookup, s)) {
- if (0 == strncasecmp(s.c_str(), "righttoleft", s.length()))
- screen->saveRowPlacementDirection(BScreen::RightLeft);
- else
- screen->saveRowPlacementDirection(BScreen::LeftRight);
- } else
- screen->saveRowPlacementDirection(BScreen::LeftRight);
-
- sprintf(name_lookup, "session.screen%d.colPlacementDirection",
- screen_number);
- sprintf(class_lookup, "Session.Screen%d.ColPlacementDirection",
- screen_number);
- if (config.getValue(name_lookup, class_lookup, s)) {
- if (0 == strncasecmp(s.c_str(), "bottomtotop", s.length()))
- screen->saveColPlacementDirection(BScreen::BottomTop);
- else
- screen->saveColPlacementDirection(BScreen::TopBottom);
- } else
- screen->saveColPlacementDirection(BScreen::TopBottom);
-
- sprintf(name_lookup, "session.screen%d.workspaces", screen_number);
- sprintf(class_lookup, "Session.Screen%d.Workspaces", screen_number);
- if (config.getValue(name_lookup, class_lookup, l))
- screen->saveWorkspaces(l);
- else
- screen->saveWorkspaces(1);
-
- screen->removeWorkspaceNames();
- sprintf(name_lookup, "session.screen%d.workspaceNames", screen_number);
- sprintf(class_lookup, "Session.Screen%d.WorkspaceNames", screen_number);
- if (config.getValue(name_lookup, class_lookup, s)) {
- // for (int i = 0; i < screen->getNumberOfWorkspaces(); i++) {
- 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]
- screen->addWorkspaceName(name.c_str());
- if (it == end)
- break;
- ++it;
- }
- }
-
- sprintf(name_lookup, "session.screen%d.focusModel", screen_number);
- sprintf(class_lookup, "Session.Screen%d.FocusModel", screen_number);
- if (config.getValue(name_lookup, class_lookup, s)) {
- if (0 == strncasecmp(s.c_str(), "clicktofocus", s.length())) {
- screen->saveAutoRaise(False);
- screen->saveSloppyFocus(False);
- } else if (0 == strncasecmp(s.c_str(), "autoraisesloppyfocus",
- s.length())) {
- screen->saveSloppyFocus(True);
- screen->saveAutoRaise(True);
- } else {
- screen->saveSloppyFocus(True);
- screen->saveAutoRaise(False);
- }
- } else {
- screen->saveSloppyFocus(True);
- screen->saveAutoRaise(False);
- }
-
- sprintf(name_lookup, "session.screen%d.windowZones", screen_number);
- sprintf(class_lookup, "Session.Screen%d.WindowZones", screen_number);
- if (config.getValue(name_lookup, class_lookup, l))
- screen->saveWindowZones((l == 1 || l == 2 || l == 4) ? l : 1);
- else
- screen->saveWindowZones(1);
-
- sprintf(name_lookup, "session.screen%d.windowPlacement", screen_number);
- sprintf(class_lookup, "Session.Screen%d.WindowPlacement", screen_number);
- if (config.getValue(name_lookup, class_lookup, s)) {
- if (0 == strncasecmp(s.c_str(), "RowSmartPlacement", s.length()))
- screen->savePlacementPolicy(BScreen::RowSmartPlacement);
- else if (0 == strncasecmp(s.c_str(), "ColSmartPlacement", s.length()))
- screen->savePlacementPolicy(BScreen::ColSmartPlacement);
- else if (0 == strncasecmp(s.c_str(), "BestFitPlacement", s.length()))
- screen->savePlacementPolicy(BScreen::BestFitPlacement);
- else
- screen->savePlacementPolicy(BScreen::CascadePlacement);
- } else
- screen->savePlacementPolicy(BScreen::RowSmartPlacement);
-
-#ifdef SLIT
-#endif // SLIT
-
-#ifdef HAVE_STRFTIME
- sprintf(name_lookup, "session.screen%d.strftimeFormat", screen_number);
- sprintf(class_lookup, "Session.Screen%d.StrftimeFormat", screen_number);
- if (config.getValue(name_lookup, class_lookup, s))
- screen->saveStrftimeFormat(s.c_str());
- 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);
- if (config.getValue(name_lookup, class_lookup, s)) {
- if (strncasecmp(s.c_str(), "european", s.length()))
- screen->saveDateFormat(B_AmericanDate);
- else
- screen->saveDateFormat(B_EuropeanDate);
- } else
- screen->saveDateFormat(B_AmericanDate);
-
- sprintf(name_lookup, "session.screen%d.clockFormat", screen_number);
- sprintf(class_lookup, "Session.Screen%d.ClockFormat", screen_number);
- if (config.getValue(name_lookup, class_lookup, l)) {
- if (clock == 24)
- screen->saveClock24Hour(True);
- else
- screen->saveClock24Hour(False);
- } else
- screen->saveClock24Hour(False);
-#endif // HAVE_STRFTIME
-
- sprintf(name_lookup, "session.screen%d.edgeSnapThreshold", screen_number);
- sprintf(class_lookup, "Session.Screen%d.EdgeSnapThreshold", screen_number);
- if (config.getValue(name_lookup, class_lookup, l))
- screen->saveEdgeSnapThreshold(l);
- else
- screen->saveEdgeSnapThreshold(4);
-
- sprintf(name_lookup, "session.screen%d.imageDither", screen_number);
- sprintf(class_lookup, "Session.Screen%d.ImageDither", screen_number);
- if (config.getValue("session.imageDither", "Session.ImageDither", b))
- screen->saveImageDither((Bool)b);
- else
- screen->saveImageDither(True);
-
- sprintf(name_lookup, "session.screen%d.rootCommand", screen_number);
- sprintf(class_lookup, "Session.Screen%d.RootCommand", screen_number);
- if (config.getValue(name_lookup, class_lookup, s))
- screen->saveRootCommand(s.c_str());
- else
- screen->saveRootCommand(NULL);
-
- if (config.getValue("session.opaqueMove", "Session.OpaqueMove", b))
- screen->saveOpaqueMove((Bool)b);
- else
- screen->saveOpaqueMove(False);
-}
-
-
-void Openbox::reload_rc(void) {
- load_rc();
- reconfigure();
-}
-
-
-void Openbox::reconfigure(void) {
+void Openbox::reconfigure() {
reconfigure_wait = True;
if (! timer->isTiming()) timer->start();
}
-void Openbox::real_reconfigure(void) {
+void Openbox::real_reconfigure() {
grab();
- config.load();
- config.setValue("session.styleFile", resource.style_file); // autosave's
+ load();
+ save();
for (int i = 0, n = menuTimestamps->count(); i < n; i++) {
MenuTimestamp *ts = menuTimestamps->remove(0);
@@ -1384,7 +1094,7 @@ void Openbox::real_reconfigure(void) {
}
-void Openbox::checkMenu(void) {
+void Openbox::checkMenu() {
Bool reread = False;
LinkedListIterator<MenuTimestamp> it(menuTimestamps);
for (MenuTimestamp *tmp = it.current(); tmp && (! reread);
@@ -1403,14 +1113,14 @@ void Openbox::checkMenu(void) {
}
-void Openbox::rereadMenu(void) {
+void Openbox::rereadMenu() {
reread_menu_wait = True;
if (! timer->isTiming()) timer->start();
}
-void Openbox::real_rereadMenu(void) {
+void Openbox::real_rereadMenu() {
for (int i = 0, n = menuTimestamps->count(); i < n; i++) {
MenuTimestamp *ts = menuTimestamps->remove(0);
@@ -1459,7 +1169,7 @@ void Openbox::saveMenuFilename(const char *filename) {
}
-void Openbox::timeout(void) {
+void Openbox::timeout() {
if (reconfigure_wait)
real_reconfigure();
diff --git a/src/openbox.h b/src/openbox.h
index 7881d602..144888bb 100644
--- a/src/openbox.h
+++ b/src/openbox.h
@@ -66,8 +66,8 @@ private:
public:
DataSearch(Window w, Z *d): window(w), data(d) {}
- inline const Window &getWindow(void) const { return window; }
- inline Z *getData(void) { return data; }
+ inline const Window &getWindow() const { return window; }
+ inline Z *getData() { return data; }
};
@@ -119,28 +119,27 @@ private:
protected:
- void load_rc(void);
- void save_rc(void);
- void reload_rc(void);
- void real_rereadMenu(void);
- void real_reconfigure(void);
+ void load();
+ void save();
+ void real_rereadMenu();
+ void real_reconfigure();
virtual void process_event(XEvent *);
public:
Openbox(int, char **, char * = 0, char * = 0);
- virtual ~Openbox(void);
+ virtual ~Openbox();
#ifdef HAVE_GETPID
- inline const Atom &getOpenboxPidAtom(void) const { return openbox_pid; }
+ inline const Atom &getOpenboxPidAtom() const { return openbox_pid; }
#endif // HAVE_GETPID
Basemenu *searchMenu(Window);
OpenboxWindow *searchGroup(Window, OpenboxWindow *);
OpenboxWindow *searchWindow(Window);
- inline OpenboxWindow *getFocusedWindow(void) { return focused_window; }
+ inline OpenboxWindow *getFocusedWindow() { return focused_window; }
BScreen *getScreen(int);
BScreen *searchScreen(Window);
@@ -148,29 +147,29 @@ public:
inline Resource &getConfig() {
return config;
}
- inline const Time &getDoubleClickInterval(void) const
+ inline const Time &getDoubleClickInterval() const
{ return resource.double_click_interval; }
- inline const Time &getLastTime(void) const { return last_time; }
+ inline const Time &getLastTime() const { return last_time; }
Toolbar *searchToolbar(Window);
- inline const char *getStyleFilename(void) const
+ inline const char *getStyleFilename() const
{ return resource.style_file; }
- inline const char *getMenuFilename(void) const
+ inline const char *getMenuFilename() const
{ return resource.menu_file; }
- inline const int &getColorsPerChannel(void) const
+ inline const int &getColorsPerChannel() const
{ return resource.colors_per_channel; }
- inline const timeval &getAutoRaiseDelay(void) const
+ inline const timeval &getAutoRaiseDelay() const
{ return resource.auto_raise_delay; }
- inline const char *getTitleBarLayout(void) const
+ inline const char *getTitleBarLayout() const
{ return resource.titlebar_layout; }
- inline const unsigned long &getCacheLife(void) const
+ inline const unsigned long &getCacheLife() const
{ return resource.cache_life; }
- inline const unsigned long &getCacheMax(void) const
+ inline const unsigned long &getCacheMax() const
{ return resource.cache_max; }
inline void maskWindowEvents(Window w, OpenboxWindow *bw)
@@ -178,8 +177,7 @@ public:
inline void setNoFocus(Bool f) { no_focus = f; }
void setFocusedWindow(OpenboxWindow *w);
- void shutdown(void);
- void load_rc(BScreen *);
+ void shutdown();
void saveStyleFilename(const char *);
void saveMenuFilename(const char *);
void saveMenuSearch(Window, Basemenu *);
@@ -191,13 +189,13 @@ public:
void removeToolbarSearch(Window);
void removeGroupSearch(Window);
void restart(const char * = 0);
- void reconfigure(void);
- void rereadMenu(void);
- void checkMenu(void);
+ void reconfigure();
+ void rereadMenu();
+ void checkMenu();
virtual Bool handleSignal(int);
- virtual void timeout(void);
+ virtual void timeout();
#ifdef SLIT
Slit *searchSlit(Window);