X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=src%2FScreen.cc;h=c5378d4ffebdfb5f27d4e839e7cdbd45ad35ef2d;hb=89563281384c34886fb12b169d1bdf8d293f0b48;hp=4f4718ec1a4eab95b4f57cd2f4ca55d525cf61f3;hpb=5067369f76f1f0db140a0e4c2c9af43982290183;p=chaz%2Fopenbox diff --git a/src/Screen.cc b/src/Screen.cc index 4f4718ec..c5378d4f 100644 --- a/src/Screen.cc +++ b/src/Screen.cc @@ -49,6 +49,7 @@ #include "Window.h" #include "Workspace.h" #include "Workspacemenu.h" +#include "Util.h" #ifdef HAVE_STDLIB_H # include @@ -99,7 +100,9 @@ #define FONT_ELEMENT_SIZE 50 #endif // FONT_ELEMENT_SIZE -#include +#ifdef HAVE_SSTREAM +# include +#endif // HAVE_SSTREAM #include #include @@ -189,28 +192,6 @@ 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; @@ -235,6 +216,7 @@ BScreen::BScreen(Openbox &ob, int scrn, Resource &conf) : ScreenInfo(ob, scrn), resource.tstyle.fontset = resource.wstyle.fontset = NULL; resource.mstyle.t_font = resource.mstyle.f_font = resource.tstyle.font = resource.wstyle.font = NULL; + resource.root_command = NULL; #ifdef SLIT slit = NULL; @@ -265,8 +247,6 @@ BScreen::BScreen(Openbox &ob, int scrn, Resource &conf) : ScreenInfo(ob, scrn), image_control->installRootColormap(); root_colormap_installed = True; - image_control->setDither(resource.image_dither); - load(); // load config options from Resources LoadStyle(); @@ -613,6 +593,108 @@ BScreen::~BScreen(void) { resource.tstyle.b_pic_gc); } + +Rect BScreen::availableArea() const { + // the following code is temporary and will be taken care of by Screen in the + // future (with the NETWM 'strut') + Rect space(0, 0, size().w(), size().h()); + if (!resource.full_max) { +#ifdef SLIT + int slit_x = slit->autoHide() ? slit->hiddenOrigin().x() : slit->area().x(), + slit_y = slit->autoHide() ? slit->hiddenOrigin().y() : slit->area().y(); + int tbarh = resource.hide_toolbar ? 0 : + toolbar->getExposedHeight() + resource.border_width * 2; + bool tbartop; + switch (toolbar->placement()) { + case Toolbar::TopLeft: + case Toolbar::TopCenter: + case Toolbar::TopRight: + tbartop = true; + break; + case Toolbar::BottomLeft: + case Toolbar::BottomCenter: + case Toolbar::BottomRight: + tbartop = false; + break; + default: + ASSERT(false); // unhandled placement + } + if ((slit->direction() == Slit::Horizontal && + (slit->placement() == Slit::TopLeft || + slit->placement() == Slit::TopRight)) || + slit->placement() == Slit::TopCenter) { + // exclude top + if (tbartop && slit_y + slit->area().h() < tbarh) { + space.setY(space.y() + tbarh); + space.setH(space.h() - tbarh); + } else { + space.setY(space.y() + (slit_y + slit->area().h() + + resource.border_width * 2)); + space.setH(space.h() - (slit_y + slit->area().h() + + resource.border_width * 2)); + if (!tbartop) + space.setH(space.h() - tbarh); + } + } else if ((slit->direction() == Slit::Vertical && + (slit->placement() == Slit::TopRight || + slit->placement() == Slit::BottomRight)) || + slit->placement() == Slit::CenterRight) { + // exclude right + space.setW(space.w() - (size().w() - slit_x)); + if (tbartop) + space.setY(space.y() + tbarh); + space.setH(space.h() - tbarh); + } else if ((slit->direction() == Slit::Horizontal && + (slit->placement() == Slit::BottomLeft || + slit->placement() == Slit::BottomRight)) || + slit->placement() == Slit::BottomCenter) { + // exclude bottom + if (!tbartop && (size().h() - slit_y) < tbarh) { + space.setH(space.h() - tbarh); + } else { + space.setH(space.h() - (size().h() - slit_y)); + if (tbartop) { + space.setY(space.y() + tbarh); + space.setH(space.h() - tbarh); + } + } + } else {// if ((slit->direction() == Slit::Vertical && + // (slit->placement() == Slit::TopLeft || + // slit->placement() == Slit::BottomLeft)) || + // slit->placement() == Slit::CenterLeft) + // exclude left + space.setX(slit_x + slit->area().w() + + resource.border_width * 2); + space.setW(space.w() - (slit_x + slit->area().w() + + resource.border_width * 2)); + if (tbartop) + space.setY(space.y() + tbarh); + space.setH(space.h() - tbarh); + } +#else // !SLIT + int tbarh = resource.hide_toolbar() ? 0 : + toolbar->getExposedHeight() + resource.border_width * 2; + switch (toolbar->placement()) { + case Toolbar::TopLeft: + case Toolbar::TopCenter: + case Toolbar::TopRight: + space.setY(toolbar->getExposedHeight()); + space.setH(space.h() - toolbar->getExposedHeight()); + break; + case Toolbar::BottomLeft: + case Toolbar::BottomCenter: + case Toolbar::BottomRight: + space.setH(space.h() - tbarh); + break; + default: + ASSERT(false); // unhandled placement + } +#endif // SLIT + } + return space; +} + + void BScreen::readDatabaseTexture(const char *rname, const char *rclass, BTexture *texture, unsigned long default_pixel) @@ -847,117 +929,137 @@ 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; + std::ostringstream s; + s << "session.screen" << getScreenNumber() << ".focusModel"; 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; + std::ostringstream s; + s << "session.screen" << getScreenNumber() << ".focusModel"; config.setValue(s.str(), (resource.sloppy_focus ? (resource.auto_raise ? "AutoRaiseSloppyFocus" : "SloppyFocus") : "ClickToFocus")); } -void BScreen::setImageDither(bool d) { + +void BScreen::setImageDither(bool d, bool reconfig) { resource.image_dither = d; - ostrstream s; - s << "session.screen" << getScreenNumber() << ".imageDither" << ends; + image_control->setDither(d); + std::ostringstream s; + s << "session.screen" << getScreenNumber() << ".imageDither"; config.setValue(s.str(), resource.image_dither); + if (reconfig) + reconfigure(); } + void BScreen::setOpaqueMove(bool o) { resource.opaque_move = o; - ostrstream s; - s << "session.screen" << getScreenNumber() << ".opaqueMove" << ends; + std::ostringstream s; + s << "session.screen" << getScreenNumber() << ".opaqueMove"; config.setValue(s.str(), resource.opaque_move); } + void BScreen::setFullMax(bool f) { resource.full_max = f; - ostrstream s; - s << "session.screen" << getScreenNumber() << ".fullMaximization" << ends; + std::ostringstream s; + s << "session.screen" << getScreenNumber() << ".fullMaximization"; config.setValue(s.str(), resource.full_max); +#ifndef HAVE_SSTREAM + s.rdbuf()->freeze(0); +#endif // HAVE_SSTREAM } + void BScreen::setFocusNew(bool f) { resource.focus_new = f; - ostrstream s; - s << "session.screen" << getScreenNumber() << ".focusNewWindows" << ends; + std::ostringstream s; + s << "session.screen" << getScreenNumber() << ".focusNewWindows"; config.setValue(s.str(), resource.focus_new); } + void BScreen::setFocusLast(bool f) { resource.focus_last = f; - ostrstream s; - s << "session.screen" << getScreenNumber() << ".focusLastWindow" << ends; + std::ostringstream s; + s << "session.screen" << getScreenNumber() << ".focusLastWindow"; config.setValue(s.str(), resource.focus_last); } + void BScreen::setWindowZones(int z) { resource.zones = z; - ostrstream s; - s << "session.screen" << getScreenNumber() << ".windowZones" << ends; + std::ostringstream s; + s << "session.screen" << getScreenNumber() << ".windowZones"; config.setValue(s.str(), resource.zones); } + void BScreen::setWorkspaceCount(int w) { resource.workspaces = w; - ostrstream s; - s << "session.screen" << getScreenNumber() << ".workspaces" << ends; + std::ostringstream s; + s << "session.screen" << getScreenNumber() << ".workspaces"; config.setValue(s.str(), resource.workspaces); } + void BScreen::setPlacementPolicy(int p) { resource.placement_policy = p; - ostrstream s; - s << "session.screen" << getScreenNumber() << ".windowPlacement" << ends; + std::ostringstream s; + s << "session.screen" << getScreenNumber() << ".windowPlacement"; const char *placement; switch (resource.placement_policy) { case CascadePlacement: placement = "CascadePlacement"; break; case BestFitPlacement: placement = "BestFitPlacement"; break; case ColSmartPlacement: placement = "ColSmartPlacement"; break; + case UnderMousePlacement: placement = "UnderMousePlacement"; break; + case ClickMousePlacement: placement = "ClickMousePlacement"; 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; + std::ostringstream s; + s << "session.screen" << getScreenNumber() << ".edgeSnapThreshold"; 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; + std::ostringstream s; + s << "session.screen" << getScreenNumber() << ".rowPlacementDirection"; 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; + std::ostringstream s; + s << "session.screen" << getScreenNumber() << ".colPlacementDirection"; 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; @@ -967,32 +1069,34 @@ if (resource.root_command != NULL) 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 + // ride the styles command when none has been specified } + + #ifdef HAVE_STRFTIME void BScreen::setStrftimeFormat(const char *f) { if (resource.strftime_format != NULL) delete [] resource.strftime_format; resource.strftime_format = bstrdup(f); - ostrstream s; - s << "session.screen" << getScreenNumber() << ".strftimeFormat" << ends; + std::ostringstream s; + s << "session.screen" << getScreenNumber() << ".strftimeFormat"; 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; + std::ostringstream s; + s << "session.screen" << getScreenNumber() << ".dateFormat"; 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; + std::ostringstream s; + s << "session.screen" << getScreenNumber() << ".clockFormat"; config.setValue(s.str(), resource.clock24hour ? 24 : 12); } #endif // HAVE_STRFTIME @@ -1003,32 +1107,32 @@ void BScreen::setHideToolbar(bool b) { getToolbar()->unMapToolbar(); else getToolbar()->mapToolbar(); - ostrstream s; - s << "session.screen" << getScreenNumber() << ".hideToolbar" << ends; + std::ostringstream s; + s << "session.screen" << getScreenNumber() << ".hideToolbar"; 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 << ','; - } + std::ostringstream 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; + } + names; - rc << "session.screen" << getScreenNumber() << ".workspaceNames" << ends; - config.setValue(rc.str(), names.str()); + rc << "session.screen" << getScreenNumber() << ".workspaceNames"; + config.setValue(rc.str(), names.str()); } void BScreen::save() { setSloppyFocus(resource.sloppy_focus); setAutoRaise(resource.auto_raise); - setImageDither(resource.image_dither); + setImageDither(resource.image_dither, false); setOpaqueMove(resource.opaque_move); setFullMax(resource.full_max); setFocusNew(resource.focus_new); @@ -1053,16 +1157,18 @@ void BScreen::save() { } void BScreen::load() { - std::ostrstream rscreen, rname, rclass; + std::ostringstream rscreen, rname, rclass; std::string s; bool b; long l; - rscreen << "session.screen" << getScreenNumber() << '.' << ends; + rscreen << "session.screen" << getScreenNumber() << '.'; - rname << rscreen.str() << "hideToolbar" << ends; - rclass << rscreen.str() << "HideToolbar" << ends; + rname << rscreen.str() << "hideToolbar"; + rclass << rscreen.str() << "HideToolbar"; if (config.getValue(rname.str(), rclass.str(), b)) resource.hide_toolbar = b; + else + resource.hide_toolbar = false; Toolbar *t = getToolbar(); if (t != NULL) { if (resource.hide_toolbar) @@ -1072,53 +1178,63 @@ void BScreen::load() { } rname.seekp(0); rclass.seekp(0); - rname << rscreen.str() << "fullMaximization" << ends; - rclass << rscreen.str() << "FullMaximization" << ends; + rname << rscreen.str() << "fullMaximization"; + rclass << rscreen.str() << "FullMaximization"; if (config.getValue(rname.str(), rclass.str(), b)) resource.full_max = b; + else + resource.full_max = false; rname.seekp(0); rclass.seekp(0); - rname << rscreen.str() << "focusNewWindows" << ends; - rclass << rscreen.str() << "FocusNewWindows" << ends; + rname << rscreen.str() << "focusNewWindows"; + rclass << rscreen.str() << "FocusNewWindows"; if (config.getValue(rname.str(), rclass.str(), b)) resource.focus_new = b; + else + resource.focus_new = false; rname.seekp(0); rclass.seekp(0); - rname << rscreen.str() << "focusLastWindow" << ends; - rclass << rscreen.str() << "FocusLastWindow" << ends; + rname << rscreen.str() << "focusLastWindow"; + rclass << rscreen.str() << "FocusLastWindow"; if (config.getValue(rname.str(), rclass.str(), b)) resource.focus_last = b; + else + resource.focus_last = false; rname.seekp(0); rclass.seekp(0); - rname << rscreen.str() << "rowPlacementDirection" << ends; - rclass << rscreen.str() << "RowPlacementDirection" << ends; + rname << rscreen.str() << "rowPlacementDirection"; + rclass << rscreen.str() << "RowPlacementDirection"; 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())) + else //if (0 == strncasecmp(s.c_str(), "LeftToRight", s.length())) resource.row_direction = LeftRight; - } + } else + resource.row_direction = LeftRight; rname.seekp(0); rclass.seekp(0); - rname << rscreen.str() << "colPlacementDirection" << ends; - rclass << rscreen.str() << "ColPlacementDirection" << ends; + rname << rscreen.str() << "colPlacementDirection"; + rclass << rscreen.str() << "ColPlacementDirection"; 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())) + else //if (0 == strncasecmp(s.c_str(), "TopToBottom", s.length())) resource.col_direction = TopBottom; - } + } else + resource.col_direction = TopBottom; rname.seekp(0); rclass.seekp(0); - rname << rscreen.str() << "workspaces" << ends; - rclass << rscreen.str() << "Workspaces" << ends; + rname << rscreen.str() << "workspaces"; + rclass << rscreen.str() << "Workspaces"; if (config.getValue(rname.str(), rclass.str(), l)) resource.workspaces = l; + else + resource.workspaces = 1; removeWorkspaceNames(); rname.seekp(0); rclass.seekp(0); - rname << rscreen.str() << "workspaceNames" << ends; - rclass << rscreen.str() << "WorkspaceNames" << ends; + rname << rscreen.str() << "workspaceNames"; + rclass << rscreen.str() << "WorkspaceNames"; if (config.getValue(rname.str(), rclass.str(), s)) { std::string::const_iterator it = s.begin(), end = s.end(); while(1) { @@ -1133,8 +1249,8 @@ void BScreen::load() { } rname.seekp(0); rclass.seekp(0); - rname << rscreen.str() << "focusModel" << ends; - rclass << rscreen.str() << "FocusModel" << ends; + rname << rscreen.str() << "focusModel"; + rclass << rscreen.str() << "FocusModel"; if (config.getValue(rname.str(), rclass.str(), s)) { if (0 == strncasecmp(s.c_str(), "ClickToFocus", s.length())) { resource.auto_raise = false; @@ -1143,21 +1259,26 @@ void BScreen::load() { s.length())) { resource.sloppy_focus = true; resource.auto_raise = true; - } else if (0 == strncasecmp(s.c_str(), "SloppyFocus", s.length())) { + } else { //if (0 == strncasecmp(s.c_str(), "SloppyFocus", s.length())) { resource.sloppy_focus = true; resource.auto_raise = false; } + } else { + resource.sloppy_focus = true; + resource.auto_raise = false; } rname.seekp(0); rclass.seekp(0); - rname << rscreen.str() << "windowZones" << ends; - rclass << rscreen.str() << "WindowZones" << ends; + rname << rscreen.str() << "windowZones"; + rclass << rscreen.str() << "WindowZones"; if (config.getValue(rname.str(), rclass.str(), l)) resource.zones = (l == 1 || l == 2 || l == 4) ? l : 1; + else + resource.zones = 4; rname.seekp(0); rclass.seekp(0); - rname << rscreen.str() << "windowPlacement" << ends; - rclass << rscreen.str() << "WindowPlacement" << ends; + rname << rscreen.str() << "windowPlacement"; + rclass << rscreen.str() << "WindowPlacement"; if (config.getValue(rname.str(), rclass.str(), s)) { if (0 == strncasecmp(s.c_str(), "RowSmartPlacement", s.length())) resource.placement_policy = RowSmartPlacement; @@ -1165,60 +1286,86 @@ void BScreen::load() { 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())) + else if (0 == strncasecmp(s.c_str(), "UnderMousePlacement", s.length())) + resource.placement_policy = UnderMousePlacement; + else if (0 == strncasecmp(s.c_str(), "ClickMousePlacement", s.length())) + resource.placement_policy = ClickMousePlacement; + else //if (0 == strncasecmp(s.c_str(), "CascadePlacement", s.length())) resource.placement_policy = CascadePlacement; - } + } else + resource.placement_policy = CascadePlacement; #ifdef HAVE_STRFTIME rname.seekp(0); rclass.seekp(0); - rname << rscreen.str() << "strftimeFormat" << ends; - rclass << rscreen.str() << "StrftimeFormat" << ends; + rname << rscreen.str() << "strftimeFormat"; + rclass << rscreen.str() << "StrftimeFormat"; + + if (resource.strftime_format != NULL) + delete [] resource.strftime_format; + if (config.getValue(rname.str(), rclass.str(), s)) resource.strftime_format = bstrdup(s.c_str()); + else + resource.strftime_format = bstrdup("%I:%M %p"); #else // !HAVE_STRFTIME rname.seekp(0); rclass.seekp(0); - rname << rscreen.str() << "dateFormat" << ends; - rclass << rscreen.str() << "DateFormat" << ends; + rname << rscreen.str() << "dateFormat"; + rclass << rscreen.str() << "DateFormat"; 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())) + else //if (strncasecmp(s.c_str(), "American", s.length())) resource.date_format = B_AmericanDate; - } + } else + resource.date_format = B_AmericanDate; rname.seekp(0); rclass.seekp(0); - rname << rscreen.str() << "clockFormat" << ends; - rclass << rscreen.str() << "ClockFormat" << ends; + rname << rscreen.str() << "clockFormat"; + rclass << rscreen.str() << "ClockFormat"; if (config.getValue(rname.str(), rclass.str(), l)) { if (clock == 24) resource.clock24hour = true; else if (clock == 12) resource.clock24hour = false; + } else + resource.clock24hour = false; #endif // HAVE_STRFTIME rname.seekp(0); rclass.seekp(0); - rname << rscreen.str() << "edgeSnapThreshold" << ends; - rclass << rscreen.str() << "EdgeSnapThreshold" << ends; + rname << rscreen.str() << "edgeSnapThreshold"; + rclass << rscreen.str() << "EdgeSnapThreshold"; if (config.getValue(rname.str(), rclass.str(), l)) resource.edge_snap_threshold = l; + else + resource.edge_snap_threshold = 4; rname.seekp(0); rclass.seekp(0); - rname << rscreen.str() << "imageDither" << ends; - rclass << rscreen.str() << "ImageDither" << ends; + rname << rscreen.str() << "imageDither"; + rclass << rscreen.str() << "ImageDither"; if (config.getValue(rname.str(), rclass.str(), b)) resource.image_dither = b; + else + resource.image_dither = true; rname.seekp(0); rclass.seekp(0); - rname << rscreen.str() << "rootCommand" << ends; - rclass << rscreen.str() << "RootCommand" << ends; + rname << rscreen.str() << "rootCommand"; + rclass << rscreen.str() << "RootCommand"; + + if (resource.root_command != NULL) + delete [] resource.root_command; + if (config.getValue(rname.str(), rclass.str(), s)) resource.root_command = bstrdup(s.c_str()); + else + resource.root_command = NULL; rname.seekp(0); rclass.seekp(0); - rname << rscreen.str() << "opaqueMove" << ends; - rclass << rscreen.str() << "OpaqueMove" << ends; + rname << rscreen.str() << "opaqueMove"; + rclass << rscreen.str() << "OpaqueMove"; if (config.getValue(rname.str(), rclass.str(), b)) resource.opaque_move = b; + else + resource.opaque_move = false; } void BScreen::reconfigure(void) {