summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2002-05-10 02:58:09 +0000
committerDana Jansens <danakj@orodu.net>2002-05-10 02:58:09 +0000
commit098fae70a6d8d15877938080437f0fc20f52bbf5 (patch)
treec36efeb00bd5dda3c854c05296de870efac7f2f2 /src
parentec10256a787c49fac27474a0fb344d9a56012f3f (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.cc4
-rw-r--r--src/Screen.cc242
-rw-r--r--src/Slit.cc54
-rw-r--r--src/Toolbar.cc68
-rw-r--r--src/Window.cc5
-rw-r--r--src/Workspace.cc20
-rw-r--r--src/Workspace.h15
-rw-r--r--src/openbox.cc63
-rw-r--r--src/openbox.h7
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 *);