diff options
| author | Dana Jansens <danakj@orodu.net> | 2002-05-10 02:58:09 +0000 |
|---|---|---|
| committer | Dana Jansens <danakj@orodu.net> | 2002-05-10 02:58:09 +0000 |
| commit | 098fae70a6d8d15877938080437f0fc20f52bbf5 (patch) | |
| tree | c36efeb00bd5dda3c854c05296de870efac7f2f2 /src | |
| parent | ec10256a787c49fac27474a0fb344d9a56012f3f (diff) | |
better gcc3 compat. using ostrstream again. and using namespace std;
some focus changes. workspace contains a focused window instead of openbox class. this fixes a seg
Diffstat (limited to 'src')
| -rw-r--r-- | src/Configmenu.cc | 4 | ||||
| -rw-r--r-- | src/Screen.cc | 242 | ||||
| -rw-r--r-- | src/Slit.cc | 54 | ||||
| -rw-r--r-- | src/Toolbar.cc | 68 | ||||
| -rw-r--r-- | src/Window.cc | 5 | ||||
| -rw-r--r-- | src/Workspace.cc | 20 | ||||
| -rw-r--r-- | src/Workspace.h | 15 | ||||
| -rw-r--r-- | src/openbox.cc | 63 | ||||
| -rw-r--r-- | src/openbox.h | 7 |
9 files changed, 260 insertions, 218 deletions
diff --git a/src/Configmenu.cc b/src/Configmenu.cc index ffb5d6e3..b8aef8ce 100644 --- a/src/Configmenu.cc +++ b/src/Configmenu.cc @@ -185,14 +185,14 @@ void Configmenu::Focusmenu::itemSelected(int button, int index) { configmenu->screen.setSloppyFocus(false); configmenu->screen.setAutoRaise(false); - if (! configmenu->screen.getOpenbox().getFocusedWindow()) + if (! configmenu->screen.getOpenbox().focusedWindow()) XSetInputFocus(configmenu->screen.getOpenbox().getXDisplay(), configmenu->screen.getToolbar()->getWindowID(), RevertToParent, CurrentTime); else XSetInputFocus(configmenu->screen.getOpenbox().getXDisplay(), configmenu->screen.getOpenbox(). - getFocusedWindow()->getClientWindow(), + focusedWindow()->getClientWindow(), RevertToParent, CurrentTime); configmenu->screen.reconfigure(); diff --git a/src/Screen.cc b/src/Screen.cc index c5378d4f..3e7df54b 100644 --- a/src/Screen.cc +++ b/src/Screen.cc @@ -32,6 +32,7 @@ #include <X11/Xatom.h> #include <X11/keysym.h> +#include <iostream> #include "i18n.h" #include "openbox.h" @@ -100,11 +101,10 @@ #define FONT_ELEMENT_SIZE 50 #endif // FONT_ELEMENT_SIZE -#ifdef HAVE_SSTREAM -# include <sstream> -#endif // HAVE_SSTREAM +#include <strstream> #include <string> #include <algorithm> +using namespace std; static Bool running = True; @@ -699,7 +699,7 @@ void BScreen::readDatabaseTexture(const char *rname, const char *rclass, BTexture *texture, unsigned long default_pixel) { - std::string s; + string s; if (resource.styleconfig.getValue(rname, rclass, s)) image_control->parseTexture(texture, s.c_str()); @@ -796,7 +796,7 @@ void BScreen::readDatabaseTexture(const char *rname, const char *rclass, void BScreen::readDatabaseColor(const char *rname, const char *rclass, BColor *color, unsigned long default_pixel) { - std::string s; + string s; if (resource.styleconfig.getValue(rname, rclass, s)) image_control->parseColor(color, s.c_str()); @@ -815,7 +815,7 @@ void BScreen::readDatabaseFontSet(const char *rname, const char *rclass, static char *defaultFont = "fixed"; bool load_default = false; - std::string s; + string s; if (*fontset) XFreeFontSet(getBaseDisplay().getXDisplay(), *fontset); @@ -844,7 +844,7 @@ void BScreen::readDatabaseFont(const char *rname, const char *rclass, static char *defaultFont = "fixed"; bool load_default = false; - std::string s; + string s; if (*font) XFreeFont(getBaseDisplay().getXDisplay(), *font); @@ -932,92 +932,98 @@ XFontSet BScreen::createFontSet(const char *fontname) { void BScreen::setSloppyFocus(bool b) { resource.sloppy_focus = b; - std::ostringstream s; - s << "session.screen" << getScreenNumber() << ".focusModel"; + ostrstream s; + s << "session.screen" << getScreenNumber() << ".focusModel" << ends; config.setValue(s.str(), (resource.sloppy_focus ? (resource.auto_raise ? "AutoRaiseSloppyFocus" : "SloppyFocus") : "ClickToFocus")); + s.rdbuf()->freeze(0); } void BScreen::setAutoRaise(bool a) { resource.auto_raise = a; - std::ostringstream s; - s << "session.screen" << getScreenNumber() << ".focusModel"; + ostrstream s; + s << "session.screen" << getScreenNumber() << ".focusModel" << ends; config.setValue(s.str(), (resource.sloppy_focus ? (resource.auto_raise ? "AutoRaiseSloppyFocus" : "SloppyFocus") : "ClickToFocus")); + s.rdbuf()->freeze(0); } void BScreen::setImageDither(bool d, bool reconfig) { resource.image_dither = d; image_control->setDither(d); - std::ostringstream s; - s << "session.screen" << getScreenNumber() << ".imageDither"; + ostrstream s; + s << "session.screen" << getScreenNumber() << ".imageDither" << ends; config.setValue(s.str(), resource.image_dither); if (reconfig) reconfigure(); + s.rdbuf()->freeze(0); } void BScreen::setOpaqueMove(bool o) { resource.opaque_move = o; - std::ostringstream s; - s << "session.screen" << getScreenNumber() << ".opaqueMove"; + ostrstream s; + s << "session.screen" << getScreenNumber() << ".opaqueMove" << ends; config.setValue(s.str(), resource.opaque_move); + s.rdbuf()->freeze(0); } void BScreen::setFullMax(bool f) { resource.full_max = f; - std::ostringstream s; - s << "session.screen" << getScreenNumber() << ".fullMaximization"; + ostrstream s; + s << "session.screen" << getScreenNumber() << ".fullMaximization" << ends; 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; - std::ostringstream s; - s << "session.screen" << getScreenNumber() << ".focusNewWindows"; + ostrstream s; + s << "session.screen" << getScreenNumber() << ".focusNewWindows" << ends; config.setValue(s.str(), resource.focus_new); + s.rdbuf()->freeze(0); } void BScreen::setFocusLast(bool f) { resource.focus_last = f; - std::ostringstream s; - s << "session.screen" << getScreenNumber() << ".focusLastWindow"; + ostrstream s; + s << "session.screen" << getScreenNumber() << ".focusLastWindow" << ends; config.setValue(s.str(), resource.focus_last); + s.rdbuf()->freeze(0); } void BScreen::setWindowZones(int z) { resource.zones = z; - std::ostringstream s; - s << "session.screen" << getScreenNumber() << ".windowZones"; + ostrstream s; + s << "session.screen" << getScreenNumber() << ".windowZones" << ends; config.setValue(s.str(), resource.zones); + s.rdbuf()->freeze(0); } void BScreen::setWorkspaceCount(int w) { resource.workspaces = w; - std::ostringstream s; - s << "session.screen" << getScreenNumber() << ".workspaces"; + ostrstream s; + s << "session.screen" << getScreenNumber() << ".workspaces" << ends; config.setValue(s.str(), resource.workspaces); + s.rdbuf()->freeze(0); } void BScreen::setPlacementPolicy(int p) { resource.placement_policy = p; - std::ostringstream s; - s << "session.screen" << getScreenNumber() << ".windowPlacement"; + ostrstream s; + s << "session.screen" << getScreenNumber() << ".windowPlacement" << ends; const char *placement; switch (resource.placement_policy) { case CascadePlacement: placement = "CascadePlacement"; break; @@ -1029,34 +1035,38 @@ void BScreen::setPlacementPolicy(int p) { case RowSmartPlacement: placement = "RowSmartPlacement"; break; } config.setValue(s.str(), placement); + s.rdbuf()->freeze(0); } void BScreen::setEdgeSnapThreshold(int t) { resource.edge_snap_threshold = t; - std::ostringstream s; - s << "session.screen" << getScreenNumber() << ".edgeSnapThreshold"; + 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) { resource.row_direction = d; - std::ostringstream s; - s << "session.screen" << getScreenNumber() << ".rowPlacementDirection"; + ostrstream s; + s << "session.screen" << getScreenNumber() << ".rowPlacementDirection" << ends; config.setValue(s.str(), resource.row_direction == LeftRight ? "LeftToRight" : "RightToLeft"); + s.rdbuf()->freeze(0); } void BScreen::setColPlacementDirection(int d) { resource.col_direction = d; - std::ostringstream s; - s << "session.screen" << getScreenNumber() << ".colPlacementDirection"; + ostrstream s; + s << "session.screen" << getScreenNumber() << ".colPlacementDirection" << ends; config.setValue(s.str(), resource.col_direction == TopBottom ? "TopToBottom" : "BottomToTop"); + s.rdbuf()->freeze(0); } @@ -1079,25 +1089,28 @@ void BScreen::setStrftimeFormat(const char *f) { delete [] resource.strftime_format; resource.strftime_format = bstrdup(f); - std::ostringstream s; - s << "session.screen" << getScreenNumber() << ".strftimeFormat"; + ostrstream s; + s << "session.screen" << getScreenNumber() << ".strftimeFormat" << ends; config.setValue(s.str(), resource.strftime_format); + s.rdbuf()->freeze(0); } #else // !HAVE_STRFTIME void BScreen::setDateFormat(int f) { resource.date_format = f; - std::ostringstream s; - s << "session.screen" << getScreenNumber() << ".dateFormat"; + 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) { resource.clock24hour = c; - std::ostringstream s; - s << "session.screen" << getScreenNumber() << ".clockFormat"; + ostrstream s; + s << "session.screen" << getScreenNumber() << ".clockFormat" << ends; config.setValue(s.str(), resource.clock24hour ? 24 : 12); + s.rdbuf()->freeze(0); } #endif // HAVE_STRFTIME @@ -1107,13 +1120,14 @@ void BScreen::setHideToolbar(bool b) { getToolbar()->unMapToolbar(); else getToolbar()->mapToolbar(); - std::ostringstream s; - s << "session.screen" << getScreenNumber() << ".hideToolbar"; + ostrstream s; + s << "session.screen" << getScreenNumber() << ".hideToolbar" << ends; config.setValue(s.str(), resource.hide_toolbar ? "True" : "False"); + s.rdbuf()->freeze(0); } void BScreen::saveWorkspaceNames() { - std::ostringstream rc, names; + ostrstream rc, names; for (int i = 0; i < resource.workspaces; i++) { Workspace *w = getWorkspace(i); @@ -1123,10 +1137,12 @@ void BScreen::saveWorkspaceNames() { names << ','; } } - names; + names << ends; - rc << "session.screen" << getScreenNumber() << ".workspaceNames"; + rc << "session.screen" << getScreenNumber() << ".workspaceNames" << ends; config.setValue(rc.str(), names.str()); + rc.rdbuf()->freeze(0); + names.rdbuf()->freeze(0); } void BScreen::save() { @@ -1147,7 +1163,7 @@ void BScreen::save() { #ifdef HAVE_STRFTIME // it deletes the current value before setting the new one, so we have to // duplicate the current value. - std::string s = resource.strftime_format; + string s = resource.strftime_format; setStrftimeFormat(s.c_str()); #else // !HAVE_STRFTIME setDateFormat(resource.date_format); @@ -1157,14 +1173,14 @@ void BScreen::save() { } void BScreen::load() { - std::ostringstream rscreen, rname, rclass; - std::string s; + ostrstream rscreen, rname, rclass; + string s; bool b; long l; - rscreen << "session.screen" << getScreenNumber() << '.'; + rscreen << "session.screen" << getScreenNumber() << '.' << ends; - rname << rscreen.str() << "hideToolbar"; - rclass << rscreen.str() << "HideToolbar"; + rname << rscreen.str() << "hideToolbar" << ends; + rclass << rscreen.str() << "HideToolbar" << ends; if (config.getValue(rname.str(), rclass.str(), b)) resource.hide_toolbar = b; else @@ -1178,32 +1194,32 @@ void BScreen::load() { } rname.seekp(0); rclass.seekp(0); - rname << rscreen.str() << "fullMaximization"; - rclass << rscreen.str() << "FullMaximization"; + rname << rscreen.str() << "fullMaximization" << ends; + rclass << rscreen.str() << "FullMaximization" << ends; if (config.getValue(rname.str(), rclass.str(), b)) resource.full_max = b; else resource.full_max = false; rname.seekp(0); rclass.seekp(0); - rname << rscreen.str() << "focusNewWindows"; - rclass << rscreen.str() << "FocusNewWindows"; + rname << rscreen.str() << "focusNewWindows" << ends; + rclass << rscreen.str() << "FocusNewWindows" << ends; if (config.getValue(rname.str(), rclass.str(), b)) resource.focus_new = b; else resource.focus_new = false; rname.seekp(0); rclass.seekp(0); - rname << rscreen.str() << "focusLastWindow"; - rclass << rscreen.str() << "FocusLastWindow"; + rname << rscreen.str() << "focusLastWindow" << ends; + rclass << rscreen.str() << "FocusLastWindow" << ends; if (config.getValue(rname.str(), rclass.str(), b)) resource.focus_last = b; else resource.focus_last = false; rname.seekp(0); rclass.seekp(0); - rname << rscreen.str() << "rowPlacementDirection"; - rclass << rscreen.str() << "RowPlacementDirection"; + 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; @@ -1213,8 +1229,8 @@ void BScreen::load() { resource.row_direction = LeftRight; rname.seekp(0); rclass.seekp(0); - rname << rscreen.str() << "colPlacementDirection"; - rclass << rscreen.str() << "ColPlacementDirection"; + 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; @@ -1224,8 +1240,8 @@ void BScreen::load() { resource.col_direction = TopBottom; rname.seekp(0); rclass.seekp(0); - rname << rscreen.str() << "workspaces"; - rclass << rscreen.str() << "Workspaces"; + rname << rscreen.str() << "workspaces" << ends; + rclass << rscreen.str() << "Workspaces" << ends; if (config.getValue(rname.str(), rclass.str(), l)) resource.workspaces = l; else @@ -1233,14 +1249,14 @@ void BScreen::load() { removeWorkspaceNames(); rname.seekp(0); rclass.seekp(0); - rname << rscreen.str() << "workspaceNames"; - rclass << rscreen.str() << "WorkspaceNames"; + 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(); + string::const_iterator it = s.begin(), end = s.end(); while(1) { - std::string::const_iterator tmp = it;// current string.begin() + 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] + string name(tmp, it); // name = s[tmp:it] addWorkspaceName(name.c_str()); if (it == end) break; @@ -1249,8 +1265,8 @@ void BScreen::load() { } rname.seekp(0); rclass.seekp(0); - rname << rscreen.str() << "focusModel"; - rclass << rscreen.str() << "FocusModel"; + 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; @@ -1269,16 +1285,16 @@ void BScreen::load() { } rname.seekp(0); rclass.seekp(0); - rname << rscreen.str() << "windowZones"; - rclass << rscreen.str() << "WindowZones"; + rname << rscreen.str() << "windowZones" << ends; + rclass << rscreen.str() << "WindowZones" << ends; if (config.getValue(rname.str(), rclass.str(), l)) resource.zones = (l == 1 || l == 2 || l == 4) ? l : 1; else resource.zones = 4; rname.seekp(0); rclass.seekp(0); - rname << rscreen.str() << "windowPlacement"; - rclass << rscreen.str() << "WindowPlacement"; + 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; @@ -1297,8 +1313,8 @@ void BScreen::load() { #ifdef HAVE_STRFTIME rname.seekp(0); rclass.seekp(0); - rname << rscreen.str() << "strftimeFormat"; - rclass << rscreen.str() << "StrftimeFormat"; + rname << rscreen.str() << "strftimeFormat" << ends; + rclass << rscreen.str() << "StrftimeFormat" << ends; if (resource.strftime_format != NULL) delete [] resource.strftime_format; @@ -1309,8 +1325,8 @@ void BScreen::load() { resource.strftime_format = bstrdup("%I:%M %p"); #else // !HAVE_STRFTIME rname.seekp(0); rclass.seekp(0); - rname << rscreen.str() << "dateFormat"; - rclass << rscreen.str() << "DateFormat"; + 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; @@ -1320,8 +1336,8 @@ void BScreen::load() { resource.date_format = B_AmericanDate; rname.seekp(0); rclass.seekp(0); - rname << rscreen.str() << "clockFormat"; - rclass << rscreen.str() << "ClockFormat"; + rname << rscreen.str() << "clockFormat" << ends; + rclass << rscreen.str() << "ClockFormat" << ends; if (config.getValue(rname.str(), rclass.str(), l)) { if (clock == 24) resource.clock24hour = true; @@ -1332,24 +1348,24 @@ void BScreen::load() { #endif // HAVE_STRFTIME rname.seekp(0); rclass.seekp(0); - rname << rscreen.str() << "edgeSnapThreshold"; - rclass << rscreen.str() << "EdgeSnapThreshold"; + rname << rscreen.str() << "edgeSnapThreshold" << ends; + rclass << rscreen.str() << "EdgeSnapThreshold" << ends; if (config.getValue(rname.str(), rclass.str(), l)) resource.edge_snap_threshold = l; else resource.edge_snap_threshold = 4; rname.seekp(0); rclass.seekp(0); - rname << rscreen.str() << "imageDither"; - rclass << rscreen.str() << "ImageDither"; + rname << rscreen.str() << "imageDither" << ends; + rclass << rscreen.str() << "ImageDither" << ends; if (config.getValue(rname.str(), rclass.str(), b)) resource.image_dither = b; else resource.image_dither = true; rname.seekp(0); rclass.seekp(0); - rname << rscreen.str() << "rootCommand"; - rclass << rscreen.str() << "RootCommand"; + rname << rscreen.str() << "rootCommand" << ends; + rclass << rscreen.str() << "RootCommand" << ends; if (resource.root_command != NULL) delete [] resource.root_command; @@ -1360,12 +1376,16 @@ void BScreen::load() { resource.root_command = NULL; rname.seekp(0); rclass.seekp(0); - rname << rscreen.str() << "opaqueMove"; - rclass << rscreen.str() << "OpaqueMove"; + rname << rscreen.str() << "opaqueMove" << ends; + rclass << rscreen.str() << "OpaqueMove" << ends; if (config.getValue(rname.str(), rclass.str(), b)) resource.opaque_move = b; else resource.opaque_move = false; + + rscreen.rdbuf()->freeze(0); + rname.rdbuf()->freeze(0); + rclass.rdbuf()->freeze(0); } void BScreen::reconfigure(void) { @@ -1565,7 +1585,7 @@ void BScreen::LoadStyle(void) { } } - std::string s; + string s; long l; // load fonts/fontsets @@ -1949,11 +1969,11 @@ void BScreen::changeWorkspaceID(int id) { workspacemenu->setItemSelected(current_workspace->getWorkspaceID() + 2, False); - if (openbox.getFocusedWindow() && - openbox.getFocusedWindow()->getScreen() == this && - (! openbox.getFocusedWindow()->isStuck())) { - current_workspace->setLastFocusedWindow(openbox.getFocusedWindow()); - openbox.setFocusedWindow(NULL); + if (openbox.focusedWindow() && + openbox.focusedWindow()->getScreen() == this && + (! openbox.focusedWindow()->isStuck())) { + current_workspace->setLastFocusedWindow(openbox.focusedWindow()); + openbox.focusWindow((OpenboxWindow *) 0); } current_workspace = getWorkspace(id); @@ -1987,8 +2007,8 @@ void BScreen::addNetizen(Netizen *n) { w->getWorkspaceID()); } - Window f = ((openbox.getFocusedWindow()) ? - openbox.getFocusedWindow()->getClientWindow() : None); + Window f = ((openbox.focusedWindow()) ? + openbox.focusedWindow()->getClientWindow() : None); n->sendWindowFocus(f); } @@ -2022,8 +2042,8 @@ void BScreen::updateNetizenWorkspaceCount(void) { void BScreen::updateNetizenWindowFocus(void) { - Window f = ((openbox.getFocusedWindow()) ? - openbox.getFocusedWindow()->getClientWindow() : None); + Window f = ((openbox.focusedWindow()) ? + openbox.focusedWindow()->getClientWindow() : None); LinkedListIterator<Netizen> it(netizenList); for (Netizen *n = it.current(); n; it++, n = it.current()) n->sendWindowFocus(f); @@ -2156,11 +2176,11 @@ void BScreen::nextFocus(void) { int focused_window_number = -1; OpenboxWindow *next; - if (openbox.getFocusedWindow()) { - if (openbox.getFocusedWindow()->getScreen()->getScreenNumber() == + if (openbox.focusedWindow()) { + if (openbox.focusedWindow()->getScreen()->getScreenNumber() == getScreenNumber()) { have_focused = True; - focused_window_number = openbox.getFocusedWindow()->getWindowNumber(); + focused_window_number = openbox.focusedWindow()->getWindowNumber(); } } @@ -2190,11 +2210,11 @@ void BScreen::prevFocus(void) { int focused_window_number = -1; OpenboxWindow *prev; - if (openbox.getFocusedWindow()) { - if (openbox.getFocusedWindow()->getScreen()->getScreenNumber() == + if (openbox.focusedWindow()) { + if (openbox.focusedWindow()->getScreen()->getScreenNumber() == getScreenNumber()) { have_focused = True; - focused_window_number = openbox.getFocusedWindow()->getWindowNumber(); + focused_window_number = openbox.focusedWindow()->getWindowNumber(); } } @@ -2223,17 +2243,17 @@ void BScreen::raiseFocus(void) { Bool have_focused = False; int focused_window_number = -1; - if (openbox.getFocusedWindow()) { - if (openbox.getFocusedWindow()->getScreen()->getScreenNumber() == + if (openbox.focusedWindow()) { + if (openbox.focusedWindow()->getScreen()->getScreenNumber() == getScreenNumber()) { have_focused = True; - focused_window_number = openbox.getFocusedWindow()->getWindowNumber(); + focused_window_number = openbox.focusedWindow()->getWindowNumber(); } } if ((getCurrentWorkspace()->getCount() > 1) && have_focused) - getWorkspace(openbox.getFocusedWindow()->getWorkspaceNumber())-> - raiseWindow(openbox.getFocusedWindow()); + getWorkspace(openbox.focusedWindow()->getWorkspaceNumber())-> + raiseWindow(openbox.focusedWindow()); } @@ -2643,7 +2663,7 @@ Bool BScreen::parseMenuFile(FILE *file, Rootmenu *menu) { closedir(d); - std::sort(ls, ls + entries, dcmp()); + std::sort(ls, ls + entries, dcmp()); int n, slen = strlen(stylesdir); for (n = 0; n < entries; n++) { diff --git a/src/Slit.cc b/src/Slit.cc index 9e9073d6..bbaeb1f1 100644 --- a/src/Slit.cc +++ b/src/Slit.cc @@ -41,11 +41,9 @@ #include "Slit.h" #include "Toolbar.h" -#ifdef HAVE_SSTREAM -# include <sstream> -#endif // HAVE_SSTREAM - +#include <strstream> #include <string> +using namespace std; Slit::Slit(BScreen &scr, Resource &conf) : screen(scr), openbox(scr.getOpenbox()), config(conf) @@ -214,22 +212,25 @@ void Slit::removeClient(Window w, Bool remap) { void Slit::setOnTop(bool b) { m_ontop = b; - std::ostringstream s; - s << "session.screen" << screen.getScreenNumber() << ".slit.onTop"; + 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) { m_autohide = b; - std::ostringstream s; - s << "session.screen" << screen.getScreenNumber() << ".slit.autoHide"; + 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) { m_placement = p; - std::ostringstream s; - s << "session.screen" << screen.getScreenNumber() << ".slit.placement"; + ostrstream s; + s << "session.screen" << screen.getScreenNumber() << ".slit.placement" + << ends; const char *placement; switch (m_placement) { case TopLeft: placement = "TopLeft"; break; @@ -242,14 +243,17 @@ void Slit::setPlacement(int p) { case CenterRight: default: placement = "CenterRight"; break; } config.setValue(s.str(), placement); + s.rdbuf()->freeze(0); } void Slit::setDirection(int d) { m_direction = d; - std::ostringstream s; - s << "session.screen" << screen.getScreenNumber() << ".slit.direction"; + ostrstream s; + s << "session.screen" << screen.getScreenNumber() << ".slit.direction" + << ends; config.setValue(s.str(), m_direction == Horizontal ? "Horizontal" : "Vertical"); + s.rdbuf()->freeze(0); } void Slit::save() { @@ -260,13 +264,13 @@ void Slit::save() { } void Slit::load() { - std::ostringstream rscreen, rname, rclass; - std::string s; + ostrstream rscreen, rname, rclass; + string s; bool b; - rscreen << "session.screen" << screen.getScreenNumber() << '.'; + rscreen << "session.screen" << screen.getScreenNumber() << '.' << ends; - rname << rscreen.str() << "slit.placement"; - rclass << rscreen.str() << "Slit.Placement"; + rname << rscreen.str() << "slit.placement" << ends; + rclass << rscreen.str() << "Slit.Placement" << ends; if (config.getValue(rname.str(), rclass.str(), s)) { if (0 == strncasecmp(s.c_str(), "TopLeft", s.length())) m_placement = TopLeft; @@ -288,8 +292,8 @@ void Slit::load() { m_placement = CenterRight; rname.seekp(0); rclass.seekp(0); - rname << rscreen.str() << "slit.direction"; - rclass << rscreen.str() << "Slit.Direction"; + rname << rscreen.str() << "slit.direction" << ends; + rclass << rscreen.str() << "Slit.Direction" << ends; if (config.getValue(rname.str(), rclass.str(), s)) { if (0 == strncasecmp(s.c_str(), "Horizontal", s.length())) m_direction = Horizontal; @@ -299,20 +303,24 @@ void Slit::load() { m_direction = Vertical; rname.seekp(0); rclass.seekp(0); - rname << rscreen.str() << "slit.onTop"; - rclass << rscreen.str() << "Slit.OnTop"; + rname << rscreen.str() << "slit.onTop" << ends; + rclass << rscreen.str() << "Slit.OnTop" << ends; if (config.getValue(rname.str(), rclass.str(), b)) m_ontop = b; else m_ontop = false; rname.seekp(0); rclass.seekp(0); - rname << rscreen.str() << "slit.autoHide"; - rclass << rscreen.str() << "Slit.AutoHide"; + 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; else m_hidden = m_autohide = false; + + rscreen.rdbuf()->freeze(0); + rname.rdbuf()->freeze(0); + rclass.rdbuf()->freeze(0); } void Slit::reconfigure(void) { diff --git a/src/Toolbar.cc b/src/Toolbar.cc index 59b92ee1..44a0059f 100644 --- a/src/Toolbar.cc +++ b/src/Toolbar.cc @@ -62,11 +62,9 @@ # endif // HAVE_SYS_TIME_H #endif // TIME_WITH_SYS_TIME -#ifdef HAVE_SSTREAM -# include <sstream> -#endif // HAVE_SSTREAM - +#include <strstream> #include <string> +using namespace std; Toolbar::Toolbar(BScreen &scrn, Resource &conf) : screen(scrn), openbox(scrn.getOpenbox()), config(conf) @@ -217,30 +215,35 @@ Toolbar::~Toolbar() { void Toolbar::setOnTop(bool b) { m_ontop = b; - std::ostringstream s; - s << "session.screen" << screen.getScreenNumber() << ".toolbar.onTop"; + 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) { m_autohide = b; - std::ostringstream s; - s << "session.screen" << screen.getScreenNumber() << ".toolbar.autoHide"; + 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) { m_width_percent = w; - std::ostringstream s; + 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) { m_placement = p; - std::ostringstream s; - s << "session.screen" << screen.getScreenNumber() << ".toolbar.placement"; + ostrstream s; + s << "session.screen" << screen.getScreenNumber() << ".toolbar.placement" + << ends; const char *placement; switch (m_placement) { case TopLeft: placement = "TopLeft"; break; @@ -251,6 +254,7 @@ void Toolbar::setPlacement(int p) { case BottomCenter: default: placement = "BottomCenter"; break; } config.setValue(s.str(), placement); + s.rdbuf()->freeze(0); } void Toolbar::save() { @@ -261,22 +265,22 @@ void Toolbar::save() { } void Toolbar::load() { - std::ostringstream rscreen, rname, rclass; - std::string s; + ostrstream rscreen, rname, rclass; + string s; bool b; long l; - rscreen << "session.screen" << screen.getScreenNumber() << '.'; + rscreen << "session.screen" << screen.getScreenNumber() << '.' << ends; - rname << rscreen.str() << "toolbar.widthPercent"; - rclass << rscreen.str() << "Toolbar.WidthPercent"; + rname << rscreen.str() << "toolbar.widthPercent" << ends; + rclass << rscreen.str() << "Toolbar.WidthPercent" << ends; if (config.getValue(rname.str(), rclass.str(), l) && (l > 0 && l <= 100)) m_width_percent = l; else m_width_percent =66; rname.seekp(0); rclass.seekp(0); - rname << rscreen.str() << "toolbar.placement"; - rclass << rscreen.str() << "Toolbar.Placement"; + rname << rscreen.str() << "toolbar.placement" << ends; + rclass << rscreen.str() << "Toolbar.Placement" << ends; if (config.getValue(rname.str(), rclass.str(), s)) { if (0 == strncasecmp(s.c_str(), "TopLeft", s.length())) m_placement = TopLeft; @@ -294,20 +298,24 @@ void Toolbar::load() { m_placement = BottomCenter; rname.seekp(0); rclass.seekp(0); - rname << rscreen.str() << "toolbar.onTop"; - rclass << rscreen.str() << "Toolbar.OnTop"; + rname << rscreen.str() << "toolbar.onTop" << ends; + rclass << rscreen.str() << "Toolbar.OnTop" << ends; if (config.getValue(rname.str(), rclass.str(), b)) m_ontop = b; else m_ontop = false; rname.seekp(0); rclass.seekp(0); - rname << rscreen.str() << "toolbar.autoHide"; - rclass << rscreen.str() << "Toolbar.AutoHide"; + 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; else m_hidden = m_autohide = false; + + rscreen.rdbuf()->freeze(0); + rname.rdbuf()->freeze(0); + rclass.rdbuf()->freeze(0); } void Toolbar::reconfigure() { @@ -714,11 +722,11 @@ void Toolbar::checkClock(Bool redraw, Bool date) { void Toolbar::redrawWindowLabel(Bool redraw) { - if (screen.getOpenbox().getFocusedWindow()) { + if (screen.getOpenbox().focusedWindow()) { if (redraw) XClearWindow(display, frame.window_label); - OpenboxWindow *foc = screen.getOpenbox().getFocusedWindow(); + OpenboxWindow *foc = screen.getOpenbox().focusedWindow(); if (foc->getScreen() != &screen) return; int dx = (frame.bevel_w * 2), dlen = strlen(*foc->getTitle()); @@ -967,8 +975,8 @@ void Toolbar::edit() { XClearWindow(display, frame.workspace_label); openbox.setNoFocus(True); - if (openbox.getFocusedWindow()) - openbox.getFocusedWindow()->setFocusFlag(False); + if (openbox.focusedWindow()) + openbox.focusedWindow()->setFocusFlag(False); XDrawRectangle(display, frame.workspace_label, screen.getWindowStyle()->l_text_focus_gc, @@ -1143,9 +1151,9 @@ void Toolbar::keyPressEvent(XKeyEvent *ke) { m_editing = False; openbox.setNoFocus(False); - if (openbox.getFocusedWindow()) { - openbox.getFocusedWindow()->setInputFocus(); - openbox.getFocusedWindow()->setFocusFlag(True); + if (openbox.focusedWindow()) { + openbox.focusedWindow()->setInputFocus(); + openbox.focusedWindow()->setFocusFlag(True); } else { XSetInputFocus(display, PointerRoot, None, CurrentTime); } diff --git a/src/Window.cc b/src/Window.cc index 48052658..5a28d232 100644 --- a/src/Window.cc +++ b/src/Window.cc @@ -56,6 +56,9 @@ #endif // SLIT #include "Util.h" +#include <iostream> +using namespace std; + /* * Initializes the class with default values/the window's set initial values. */ @@ -1390,7 +1393,7 @@ Bool OpenboxWindow::setInputFocus(void) { XSetInputFocus(display, screen->getRootWindow(), RevertToNone, CurrentTime); - openbox.setFocusedWindow(this); + openbox.focusWindow(this); if (flags.send_focus_message) { XEvent ce; diff --git a/src/Workspace.cc b/src/Workspace.cc index 0af1c332..d8737348 100644 --- a/src/Workspace.cc +++ b/src/Workspace.cc @@ -63,9 +63,8 @@ typedef std::vector<Rect> rectList; Workspace::Workspace(BScreen &scrn, int i) : screen(scrn) { - cascade_x = cascade_y = 0; - + _focused = (OpenboxWindow *) 0; id = i; stackingList = new LinkedList<OpenboxWindow>; @@ -122,11 +121,11 @@ const int Workspace::removeWindow(OpenboxWindow *w) { w->getTransientFor()->isVisible()) { w->getTransientFor()->setInputFocus(); } else if (screen.sloppyFocus()) { - screen.getOpenbox().setFocusedWindow((OpenboxWindow *) 0); + screen.getOpenbox().focusWindow((OpenboxWindow *) 0); } else { OpenboxWindow *top = stackingList->first(); if (! top || ! top->setInputFocus()) { - screen.getOpenbox().setFocusedWindow((OpenboxWindow *) 0); + screen.getOpenbox().focusWindow((OpenboxWindow *) 0); XSetInputFocus(screen.getOpenbox().getXDisplay(), screen.getToolbar()->getWindowID(), RevertToParent, CurrentTime); @@ -152,6 +151,15 @@ const int Workspace::removeWindow(OpenboxWindow *w) { } +void Workspace::focusWindow(OpenboxWindow *win) { + if (win != (OpenboxWindow *) 0) + clientmenu->setItemSelected(win->getWindowNumber(), true); + if (_focused != (OpenboxWindow *) 0) + clientmenu->setItemSelected(_focused->getWindowNumber(), false); + _focused = win; +} + + void Workspace::showAll(void) { LinkedListIterator<OpenboxWindow> it(stackingList); for (OpenboxWindow *bw = it.current(); bw; it++, bw = it.current()) @@ -506,7 +514,7 @@ Point *Workspace::rowSmartPlacement(const Size &win_size, const Rect &space) { best = NULL; for (siter=spaces.begin(); siter!=spaces.end(); ++siter) if ((siter->w() >= win_size.w()) && (siter->h() >= win_size.h())) { - best = siter; + best = &*siter; break; } @@ -550,7 +558,7 @@ Point *Workspace::colSmartPlacement(const Size &win_size, const Rect &space) { best = NULL; for (siter=spaces.begin(); siter!=spaces.end(); ++siter) if ((siter->w() >= win_size.w()) && (siter->h() >= win_size.h())) { - best = siter; + best = &*siter; break; } diff --git a/src/Workspace.h b/src/Workspace.h index ab8dad3f..01b520ad 100644 --- a/src/Workspace.h +++ b/src/Workspace.h @@ -26,12 +26,13 @@ #include <X11/Xlib.h> #include "LinkedList.h" -#include "Geometry.h" class BScreen; class Clientmenu; class Workspace; class OpenboxWindow; +class Size; +class Rect; class Workspace { private: @@ -44,6 +45,7 @@ private: char *name; int id, cascade_x, cascade_y; + OpenboxWindow *_focused; protected: void placeWindow(OpenboxWindow &); @@ -58,26 +60,19 @@ public: ~Workspace(void); inline BScreen &getScreen(void) { return screen; } - inline OpenboxWindow *getLastFocusedWindow(void) { return lastfocus; } - inline Clientmenu *getMenu(void) { return clientmenu; } - inline const char *getName(void) const { return name; } - inline const int &getWorkspaceID(void) const { return id; } - inline void setLastFocusedWindow(OpenboxWindow *w) { lastfocus = w; } - + inline OpenboxWindow *focusedWindow() { return _focused; } + void focusWindow(OpenboxWindow *win); OpenboxWindow *getWindow(int); - Bool isCurrent(void); Bool isLastWindow(OpenboxWindow *); - const int addWindow(OpenboxWindow *, Bool = False); const int removeWindow(OpenboxWindow *); const int getCount(void); - void showAll(void); void hideAll(void); void removeAll(void); diff --git a/src/openbox.cc b/src/openbox.cc index c6880fc4..3325bf38 100644 --- a/src/openbox.cc +++ b/src/openbox.cc @@ -186,7 +186,7 @@ Openbox::Openbox(int m_argc, char **m_argv, char *dpy_name, char *rc) resource.titlebar_layout = NULL; resource.auto_raise_delay.tv_sec = resource.auto_raise_delay.tv_usec = 0; - focused_window = masked_window = NULL; + masked_window = NULL; masked = None; windowSearchList = new LinkedList<WindowSearch>; @@ -225,6 +225,7 @@ Openbox::Openbox(int m_argc, char **m_argv, char *dpy_name, char *rc) "Openbox::Openbox: no managable screens found, aborting.\n")); ::exit(3); } + focused_screen = screenList->first(); // save current settings and default values save(); @@ -502,8 +503,6 @@ void Openbox::process_event(XEvent *e) { if ((win = searchWindow(e->xunmap.window))) { win->unmapNotifyEvent(&e->xunmap); - if (focused_window == win) - focused_window = (OpenboxWindow *) 0; #ifdef SLIT } else if ((slit = searchSlit(e->xunmap.window))) { slit->removeClient(e->xunmap.window); @@ -523,8 +522,6 @@ void Openbox::process_event(XEvent *e) { if ((win = searchWindow(e->xdestroywindow.window))) { win->destroyNotifyEvent(&e->xdestroywindow); - if (focused_window == win) - focused_window = (OpenboxWindow *) 0; #ifdef SLIT } else if ((slit = searchSlit(e->xdestroywindow.window))) { slit->removeClient(e->xdestroywindow.window, False); @@ -674,8 +671,8 @@ void Openbox::process_event(XEvent *e) { break; OpenboxWindow *win = searchWindow(e->xfocus.window); - if (win && ! win->isFocused()) - setFocusedWindow(win); + if (win && !win->isFocused()) + focusWindow(win); break; } @@ -1185,42 +1182,44 @@ void Openbox::timeout() { } -void Openbox::setFocusedWindow(OpenboxWindow *win) { - BScreen *old_screen = (BScreen *) 0, *screen = (BScreen *) 0; - OpenboxWindow *old_win = (OpenboxWindow *) 0; +OpenboxWindow *Openbox::focusedWindow() { + if (focused_screen == (BScreen *) 0) + return (OpenboxWindow *) 0; + return focused_screen->getCurrentWorkspace()->focusedWindow(); +} + + +void Openbox::focusWindow(OpenboxWindow *win) { + BScreen *old_screen = (BScreen *) 0; Toolbar *old_tbar = (Toolbar *) 0, *tbar = (Toolbar *) 0; Workspace *old_wkspc = (Workspace *) 0, *wkspc = (Workspace *) 0; - if (focused_window) { - old_win = focused_window; + OpenboxWindow *old_win = focusedWindow(); + if (old_win != (OpenboxWindow *) 0) { old_screen = old_win->getScreen(); - old_tbar = old_screen->getToolbar(); old_wkspc = old_screen->getWorkspace(old_win->getWorkspaceNumber()); + old_tbar = old_screen->getToolbar(); old_win->setFocusFlag(False); - old_wkspc->getMenu()->setItemSelected(old_win->getWindowNumber(), False); + old_wkspc->focusWindow((OpenboxWindow *) 0); } - if (win && ! win->isIconic()) { - screen = win->getScreen(); - tbar = screen->getToolbar(); - wkspc = screen->getWorkspace(win->getWorkspaceNumber()); - - focused_window = win; - - win->setFocusFlag(True); - wkspc->getMenu()->setItemSelected(win->getWindowNumber(), True); - } else { - focused_window = (OpenboxWindow *) 0; + if (win && !win->isIconic()) { + focused_screen = win->getScreen(); + tbar = focused_screen->getToolbar(); + wkspc = focused_screen->getWorkspace(win->getWorkspaceNumber()); + win->setFocusFlag(true); + wkspc->focusWindow(win); + + if (tbar) + tbar->redrawWindowLabel(true); + focused_screen->updateNetizenWindowFocus(); + //} else { + // focused_window = (OpenboxWindow *) 0; } - if (tbar) - tbar->redrawWindowLabel(True); - if (screen) - screen->updateNetizenWindowFocus(); - if (old_tbar && old_tbar != tbar) - old_tbar->redrawWindowLabel(True); - if (old_screen && old_screen != screen) + old_tbar->redrawWindowLabel(true); + if (old_screen && old_screen != focused_screen) old_screen->updateNetizenWindowFocus(); } diff --git a/src/openbox.h b/src/openbox.h index 8135a329..82abab7a 100644 --- a/src/openbox.h +++ b/src/openbox.h @@ -103,7 +103,8 @@ private: LinkedList<MenuTimestamp> *menuTimestamps; LinkedList<BScreen> *screenList; - OpenboxWindow *focused_window, *masked_window; + BScreen *focused_screen; + OpenboxWindow *masked_window; BTimer *timer; #ifdef HAVE_GETPID @@ -139,7 +140,8 @@ public: OpenboxWindow *searchGroup(Window, OpenboxWindow *); OpenboxWindow *searchWindow(Window); - inline OpenboxWindow *getFocusedWindow() { return focused_window; } + OpenboxWindow *focusedWindow(); + void focusWindow(OpenboxWindow *w); BScreen *getScreen(int); BScreen *searchScreen(Window); @@ -178,7 +180,6 @@ public: { masked = w; masked_window = bw; } inline void setNoFocus(Bool f) { no_focus = f; } - void setFocusedWindow(OpenboxWindow *w); void shutdown(); void setStyleFilename(const char *); void setMenuFilename(const char *); |
