all repos — openbox @ 940c1f614fa380a9153c3b81d0614201b27957c2

openbox fork - make it a bit more like ryudo

temprary fix for the memleaks in ::load() and ::set* when using ostrstreams. Need to find a better solution for strings than std::string and ostrstream, or else put up with memory leaks all over the place.
Dana Jansens danakj@orodu.net
commit

940c1f614fa380a9153c3b81d0614201b27957c2

parent

8ebee960ba8dea0ac372fd14156a6b86edf9cff7

3 files changed, 47 insertions(+), 11 deletions(-)

jump to
M src/Screen.ccsrc/Screen.cc

@@ -855,6 +855,7 @@ config.setValue(s.str(),

(resource.sloppy_focus ? (resource.auto_raise ? "AutoRaiseSloppyFocus" : "SloppyFocus") : "ClickToFocus")); + s.rdbuf()->freeze(0); } void BScreen::setAutoRaise(bool a) {

@@ -865,6 +866,7 @@ config.setValue(s.str(),

(resource.sloppy_focus ? (resource.auto_raise ? "AutoRaiseSloppyFocus" : "SloppyFocus") : "ClickToFocus")); + s.rdbuf()->freeze(0); } void BScreen::setImageDither(bool d) {

@@ -872,6 +874,7 @@ resource.image_dither = d;

ostrstream s; s << "session.screen" << getScreenNumber() << ".imageDither" << ends; config.setValue(s.str(), resource.image_dither); + s.rdbuf()->freeze(0); } void BScreen::setOpaqueMove(bool o) {

@@ -879,6 +882,7 @@ resource.opaque_move = o;

ostrstream s; s << "session.screen" << getScreenNumber() << ".opaqueMove" << ends; config.setValue(s.str(), resource.opaque_move); + s.rdbuf()->freeze(0); } void BScreen::setFullMax(bool f) {

@@ -886,6 +890,7 @@ resource.full_max = f;

ostrstream s; s << "session.screen" << getScreenNumber() << ".fullMaximization" << ends; config.setValue(s.str(), resource.full_max); + s.rdbuf()->freeze(0); } void BScreen::setFocusNew(bool f) {

@@ -893,6 +898,7 @@ resource.focus_new = f;

ostrstream s; s << "session.screen" << getScreenNumber() << ".focusNewWindows" << ends; config.setValue(s.str(), resource.focus_new); + s.rdbuf()->freeze(0); } void BScreen::setFocusLast(bool f) {

@@ -900,6 +906,7 @@ resource.focus_last = f;

ostrstream s; s << "session.screen" << getScreenNumber() << ".focusLastWindow" << ends; config.setValue(s.str(), resource.focus_last); + s.rdbuf()->freeze(0); } void BScreen::setWindowZones(int z) {

@@ -907,6 +914,7 @@ resource.zones = z;

ostrstream s; s << "session.screen" << getScreenNumber() << ".windowZones" << ends; config.setValue(s.str(), resource.zones); + s.rdbuf()->freeze(0); } void BScreen::setWorkspaceCount(int w) {

@@ -914,6 +922,7 @@ resource.workspaces = w;

ostrstream s; s << "session.screen" << getScreenNumber() << ".workspaces" << ends; config.setValue(s.str(), resource.workspaces); + s.rdbuf()->freeze(0); } void BScreen::setPlacementPolicy(int p) {

@@ -929,6 +938,7 @@ default:

case RowSmartPlacement: placement = "RowSmartPlacement"; break; } config.setValue(s.str(), placement); + s.rdbuf()->freeze(0); } void BScreen::setEdgeSnapThreshold(int t) {

@@ -936,6 +946,7 @@ resource.edge_snap_threshold = t;

ostrstream s; s << "session.screen" << getScreenNumber() << ".edgeSnapThreshold" << ends; config.setValue(s.str(), resource.edge_snap_threshold); + s.rdbuf()->freeze(0); } void BScreen::setRowPlacementDirection(int d) {

@@ -946,6 +957,7 @@ ends;

config.setValue(s.str(), resource.row_direction == LeftRight ? "LeftToRight" : "RightToLeft"); + s.rdbuf()->freeze(0); } void BScreen::setColPlacementDirection(int d) {

@@ -956,6 +968,7 @@ ends;

config.setValue(s.str(), resource.col_direction == TopBottom ? "TopToBottom" : "BottomToTop"); + s.rdbuf()->freeze(0); } void BScreen::setRootCommand(const char *cmd) {

@@ -978,6 +991,7 @@ resource.strftime_format = bstrdup(f);

ostrstream s; s << "session.screen" << getScreenNumber() << ".strftimeFormat" << ends; config.setValue(s.str(), resource.strftime_format); + s.rdbuf()->freeze(0); } #else // !HAVE_STRFTIME

@@ -987,6 +1001,7 @@ ostrstream s;

s << "session.screen" << getScreenNumber() << ".dateFormat" << ends; config.setValue(s.str(), resource.date_format == B_EuropeanDate ? "European" : "American"); + s.rdbuf()->freeze(0); } void BScreen::setClock24Hour(Bool c) {

@@ -994,6 +1009,7 @@ resource.clock24hour = c;

ostrstream s; s << "session.screen" << getScreenNumber() << ".clockFormat" << ends; config.setValue(s.str(), resource.clock24hour ? 24 : 12); + s.rdbuf()->freeze(0); } #endif // HAVE_STRFTIME

@@ -1006,23 +1022,26 @@ getToolbar()->mapToolbar();

ostrstream s; s << "session.screen" << getScreenNumber() << ".hideToolbar" << ends; config.setValue(s.str(), resource.hide_toolbar ? "True" : "False"); + s.rdbuf()->freeze(0); } void BScreen::saveWorkspaceNames() { - ostrstream rc, names; + 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 << ','; - } + 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; + } + names << ends; - rc << "session.screen" << getScreenNumber() << ".workspaceNames" << ends; - config.setValue(rc.str(), names.str()); + rc << "session.screen" << getScreenNumber() << ".workspaceNames" << ends; + config.setValue(rc.str(), names.str()); + rc.rdbuf()->freeze(0); + names.rdbuf()->freeze(0); } void BScreen::save() {

@@ -1219,6 +1238,9 @@ rname << rscreen.str() << "opaqueMove" << ends;

rclass << rscreen.str() << "OpaqueMove" << ends; if (config.getValue(rname.str(), rclass.str(), b)) resource.opaque_move = b; + rscreen.rdbuf()->freeze(0); + rname.rdbuf()->freeze(0); + rclass.rdbuf()->freeze(0); } void BScreen::reconfigure(void) {
M src/Slit.ccsrc/Slit.cc

@@ -220,6 +220,7 @@ m_ontop = b;

ostrstream s; s << "session.screen" << screen.getScreenNumber() << ".slit.onTop" << ends; config.setValue(s.str(), m_ontop ? "True" : "False"); + s.rdbuf()->freeze(0); } void Slit::setAutoHide(bool b) {

@@ -227,6 +228,7 @@ m_autohide = b;

ostrstream s; s << "session.screen" << screen.getScreenNumber() << ".slit.autoHide" << ends; config.setValue(s.str(), m_autohide ? "True" : "False"); + s.rdbuf()->freeze(0); } void Slit::setPlacement(int p) {

@@ -246,6 +248,7 @@ case BottomRight: placement = "BottomRight"; break;

case CenterRight: default: placement = "CenterRight"; break; } config.setValue(s.str(), placement); + s.rdbuf()->freeze(0); } void Slit::setDirection(int d) {

@@ -255,6 +258,7 @@ s << "session.screen" << screen.getScreenNumber() << ".slit.direction" <<

ends; config.setValue(s.str(), m_direction == Horizontal ? "Horizontal" : "Vertical"); + s.rdbuf()->freeze(0); } void Slit::save() {

@@ -312,6 +316,9 @@ rname << rscreen.str() << "slit.autoHide" << ends;

rclass << rscreen.str() << "Slit.AutoHide" << ends; if (config.getValue(rname.str(), rclass.str(), b)) m_hidden = m_autohide = b; + rscreen.rdbuf()->freeze(0); + rname.rdbuf()->freeze(0); + rclass.rdbuf()->freeze(0); } void Slit::reconfigure(void) {
M src/Toolbar.ccsrc/Toolbar.cc

@@ -223,6 +223,7 @@ m_ontop = b;

ostrstream s; s << "session.screen" << screen.getScreenNumber() << ".toolbar.onTop" << ends; config.setValue(s.str(), m_ontop ? "True" : "False"); + s.rdbuf()->freeze(0); } void Toolbar::setAutoHide(bool b) {

@@ -231,6 +232,7 @@ ostrstream s;

s << "session.screen" << screen.getScreenNumber() << ".toolbar.autoHide" << ends; config.setValue(s.str(), m_autohide ? "True" : "False"); + s.rdbuf()->freeze(0); } void Toolbar::setWidthPercent(int w) {

@@ -239,6 +241,7 @@ ostrstream s;

s << "session.screen" << screen.getScreenNumber() << ".toolbar.widthPercent" << ends; config.setValue(s.str(), m_width_percent); + s.rdbuf()->freeze(0); } void Toolbar::setPlacement(int p) {

@@ -256,6 +259,7 @@ case BottomRight: placement = "BottomRight"; break;

case BottomCenter: default: placement = "BottomCenter"; break; } config.setValue(s.str(), placement); + s.rdbuf()->freeze(0); } void Toolbar::save() {

@@ -306,6 +310,9 @@ rname << rscreen.str() << "toolbar.autoHide" << ends;

rclass << rscreen.str() << "Toolbar.AutoHide" << ends; if (config.getValue(rname.str(), rclass.str(), b)) m_hidden = m_autohide = b; + rscreen.rdbuf()->freeze(0); + rname.rdbuf()->freeze(0); + rclass.rdbuf()->freeze(0); } void Toolbar::reconfigure() {