converted all of the openbox class LinkedLists to STL objects

This commit is contained in:
Dana Jansens 2002-05-12 20:46:02 +00:00
parent 57fb41c806
commit 30b899fc02
4 changed files with 118 additions and 219 deletions

View file

@ -104,6 +104,7 @@
#include <strstream> #include <strstream>
#include <string> #include <string>
#include <algorithm> #include <algorithm>
#include <functional>
using namespace std; using namespace std;
static Bool running = True; static Bool running = True;
@ -1155,6 +1156,11 @@ void BScreen::save() {
setClock24Hour(resource.clock24hour); setClock24Hour(resource.clock24hour);
#endif // HAVE_STRFTIME #endif // HAVE_STRFTIME
setHideToolbar(resource.hide_toolbar); setHideToolbar(resource.hide_toolbar);
toolbar->save();
#ifdef SLIT
slit->save();
#endif // SLIT
} }
@ -1541,14 +1547,12 @@ void BScreen::reconfigure(void) {
slit->reconfigure(); slit->reconfigure();
#endif // SLIT #endif // SLIT
wkspList::iterator wit; std::for_each(workspacesList.begin(), workspacesList.end(),
for (wit = workspacesList.begin(); wit != workspacesList.end(); ++wit) std::mem_fun(&Workspace::reconfigure));
(*wit)->reconfigure();
winList::iterator iit; for (winList::iterator it = iconList.begin(); it != iconList.end(); ++it)
for (iit = iconList.begin(); iit != iconList.end(); ++iit) if ((*it)->validateClient())
if ((*iit)->validateClient()) (*it)->reconfigure();
(*iit)->reconfigure();
image_control->timeout(); image_control->timeout();
} }
@ -2055,6 +2059,7 @@ void BScreen::updateNetizenWindowFocus(void) {
(*it)->sendWindowFocus(f); (*it)->sendWindowFocus(f);
} }
void BScreen::updateNetizenWindowAdd(Window w, unsigned long p) { void BScreen::updateNetizenWindowAdd(Window w, unsigned long p) {
netList::iterator it; netList::iterator it;
for (it = netizenList.begin(); it != netizenList.end(); ++it) for (it = netizenList.begin(); it != netizenList.end(); ++it)
@ -2737,9 +2742,8 @@ void BScreen::shutdown(void) {
XSelectInput(getBaseDisplay().getXDisplay(), getRootWindow(), NoEventMask); XSelectInput(getBaseDisplay().getXDisplay(), getRootWindow(), NoEventMask);
XSync(getBaseDisplay().getXDisplay(), False); XSync(getBaseDisplay().getXDisplay(), False);
wkspList::iterator it; std::for_each(workspacesList.begin(), workspacesList.end(),
for (it = workspacesList.begin(); it != workspacesList.end(); ++it) std::mem_fun(&Workspace::shutdown));
(*it)->shutdown();
while (!iconList.empty()) while (!iconList.empty())
iconList.front()->restore(); iconList.front()->restore();

View file

@ -724,11 +724,11 @@ void Toolbar::checkClock(Bool redraw, Bool date) {
void Toolbar::redrawWindowLabel(Bool redraw) { void Toolbar::redrawWindowLabel(Bool redraw) {
if (screen.getOpenbox().focusedWindow()) { OpenboxWindow *foc = screen.getOpenbox().focusedWindow();
if (foc != (OpenboxWindow *) 0) {
if (redraw) if (redraw)
XClearWindow(display, frame.window_label); XClearWindow(display, frame.window_label);
OpenboxWindow *foc = screen.getOpenbox().focusedWindow();
if (foc->getScreen() != &screen) return; if (foc->getScreen() != &screen) return;
int dx = (frame.bevel_w * 2), dlen = strlen(*foc->getTitle()); int dx = (frame.bevel_w * 2), dlen = strlen(*foc->getTitle());

View file

@ -189,25 +189,12 @@ Openbox::Openbox(int m_argc, char **m_argv, char *dpy_name, char *rc)
masked_window = NULL; masked_window = NULL;
masked = None; masked = None;
windowSearchList = new LinkedList<WindowSearch>;
menuSearchList = new LinkedList<MenuSearch>;
#ifdef SLIT
slitSearchList = new LinkedList<SlitSearch>;
#endif // SLIT
toolbarSearchList = new LinkedList<ToolbarSearch>;
groupSearchList = new LinkedList<WindowSearch>;
menuTimestamps = new LinkedList<MenuTimestamp>;
load(); load();
#ifdef HAVE_GETPID #ifdef HAVE_GETPID
openbox_pid = XInternAtom(getXDisplay(), "_BLACKBOX_PID", False); openbox_pid = XInternAtom(getXDisplay(), "_BLACKBOX_PID", False);
#endif // HAVE_GETPID #endif // HAVE_GETPID
screenList = new LinkedList<BScreen>;
for (int i = 0; i < getNumberOfScreens(); i++) { for (int i = 0; i < getNumberOfScreens(); i++) {
BScreen *screen = new BScreen(*this, i, config); BScreen *screen = new BScreen(*this, i, config);
@ -216,16 +203,16 @@ Openbox::Openbox(int m_argc, char **m_argv, char *dpy_name, char *rc)
continue; continue;
} }
screenList->insert(screen); screenList.push_back(screen);
} }
if (! screenList->count()) { if (screenList.empty()) {
fprintf(stderr, fprintf(stderr,
i18n->getMessage(openboxSet, openboxNoManagableScreens, i18n->getMessage(openboxSet, openboxNoManagableScreens,
"Openbox::Openbox: no managable screens found, aborting.\n")); "Openbox::Openbox: no managable screens found, aborting.\n"));
::exit(3); ::exit(3);
} }
focused_screen = screenList->first(); focused_screen = screenList.front();
// save current settings and default values // save current settings and default values
save(); save();
@ -244,17 +231,11 @@ Openbox::Openbox(int m_argc, char **m_argv, char *dpy_name, char *rc)
Openbox::~Openbox() { Openbox::~Openbox() {
while (screenList->count()) for_each(screenList.begin(), screenList.end(),
delete screenList->remove(0); PointerAssassin());
while (menuTimestamps->count()) { for_each(menuTimestamps.begin(), menuTimestamps.end(),
MenuTimestamp *ts = menuTimestamps->remove(0); PointerAssassin());
if (ts->filename)
delete [] ts->filename;
delete ts;
}
if (resource.menu_file) if (resource.menu_file)
delete [] resource.menu_file; delete [] resource.menu_file;
@ -267,19 +248,7 @@ Openbox::~Openbox() {
delete timer; delete timer;
delete screenList;
delete menuTimestamps;
delete windowSearchList;
delete menuSearchList;
delete toolbarSearchList;
delete groupSearchList;
delete [] rc_file; delete [] rc_file;
#ifdef SLIT
delete slitSearchList;
#endif // SLIT
} }
@ -323,9 +292,9 @@ void Openbox::process_event(XEvent *e) {
} else if ((tbar = searchToolbar(e->xbutton.window))) { } else if ((tbar = searchToolbar(e->xbutton.window))) {
tbar->buttonPressEvent(&e->xbutton); tbar->buttonPressEvent(&e->xbutton);
} else { } else {
LinkedListIterator<BScreen> it(screenList); ScreenList::iterator it;
BScreen *screen = it.current(); for (it = screenList.begin(); it != screenList.end(); ++it) {
for (; screen; it++, screen = it.current()) { BScreen *screen = *it;
if (e->xbutton.window == screen->getRootWindow()) { if (e->xbutton.window == screen->getRootWindow()) {
if (e->xbutton.button == 1) { if (e->xbutton.button == 1) {
if (! screen->isRootColormapInstalled()) if (! screen->isRootColormapInstalled())
@ -774,170 +743,107 @@ Bool Openbox::handleSignal(int sig) {
BScreen *Openbox::searchScreen(Window window) { BScreen *Openbox::searchScreen(Window window) {
LinkedListIterator<BScreen> it(screenList); ScreenList::iterator it;
for (it = screenList.begin(); it != screenList.end(); ++it)
for (BScreen *curr = it.current(); curr; it++, curr = it.current()) { if ((*it)->getRootWindow() == window)
if (curr->getRootWindow() == window) { return *it;
return curr;
}
}
return (BScreen *) 0; return (BScreen *) 0;
} }
OpenboxWindow *Openbox::searchWindow(Window window) { OpenboxWindow *Openbox::searchWindow(Window window) {
LinkedListIterator<WindowSearch> it(windowSearchList); WindowLookup::iterator it = windowSearchList.find(window);
if (it == windowSearchList.end())
for (WindowSearch *tmp = it.current(); tmp; it++, tmp = it.current()) {
if (tmp->getWindow() == window) {
return tmp->getData();
}
}
return (OpenboxWindow *) 0; return (OpenboxWindow *) 0;
return it->second;
} }
OpenboxWindow *Openbox::searchGroup(Window window, OpenboxWindow *win) { OpenboxWindow *Openbox::searchGroup(Window window, OpenboxWindow *win) {
OpenboxWindow *w = (OpenboxWindow *) 0; WindowLookup::iterator it = groupSearchList.find(window);
LinkedListIterator<WindowSearch> it(groupSearchList); if (it != groupSearchList.end())
if (it->second->getClientWindow() != win->getClientWindow())
for (WindowSearch *tmp = it.current(); tmp; it++, tmp = it.current()) {
if (tmp->getWindow() == window) {
w = tmp->getData();
if (w->getClientWindow() != win->getClientWindow())
return win; return win;
}
}
return (OpenboxWindow *) 0; return (OpenboxWindow *) 0;
} }
Basemenu *Openbox::searchMenu(Window window) { Basemenu *Openbox::searchMenu(Window window) {
LinkedListIterator<MenuSearch> it(menuSearchList); MenuLookup::iterator it = menuSearchList.find(window);
if (it == menuSearchList.end())
for (MenuSearch *tmp = it.current(); tmp; it++, tmp = it.current()) {
if (tmp->getWindow() == window)
return tmp->getData();
}
return (Basemenu *) 0; return (Basemenu *) 0;
return it->second;
} }
Toolbar *Openbox::searchToolbar(Window window) { Toolbar *Openbox::searchToolbar(Window window) {
LinkedListIterator<ToolbarSearch> it(toolbarSearchList); ToolbarLookup::iterator it = toolbarSearchList.find(window);
if (it == toolbarSearchList.end())
for (ToolbarSearch *tmp = it.current(); tmp; it++, tmp = it.current()) {
if (tmp->getWindow() == window)
return tmp->getData();
}
return (Toolbar *) 0; return (Toolbar *) 0;
return it->second;
} }
#ifdef SLIT #ifdef SLIT
Slit *Openbox::searchSlit(Window window) { Slit *Openbox::searchSlit(Window window) {
LinkedListIterator<SlitSearch> it(slitSearchList); SlitLookup::iterator it = slitSearchList.find(window);
if (it == slitSearchList.end())
for (SlitSearch *tmp = it.current(); tmp; it++, tmp = it.current()) {
if (tmp->getWindow() == window)
return tmp->getData();
}
return (Slit *) 0; return (Slit *) 0;
return it->second;
} }
#endif // SLIT #endif // SLIT
void Openbox::saveWindowSearch(Window window, OpenboxWindow *data) { void Openbox::saveWindowSearch(Window window, OpenboxWindow *data) {
windowSearchList->insert(new WindowSearch(window, data)); windowSearchList.insert(WindowLookupPair(window, data));
} }
void Openbox::saveGroupSearch(Window window, OpenboxWindow *data) { void Openbox::saveGroupSearch(Window window, OpenboxWindow *data) {
groupSearchList->insert(new WindowSearch(window, data)); groupSearchList.insert(WindowLookupPair(window, data));
} }
void Openbox::saveMenuSearch(Window window, Basemenu *data) { void Openbox::saveMenuSearch(Window window, Basemenu *data) {
menuSearchList->insert(new MenuSearch(window, data)); menuSearchList.insert(MenuLookupPair(window, data));
} }
void Openbox::saveToolbarSearch(Window window, Toolbar *data) { void Openbox::saveToolbarSearch(Window window, Toolbar *data) {
toolbarSearchList->insert(new ToolbarSearch(window, data)); toolbarSearchList.insert(ToolbarLookupPair(window, data));
} }
#ifdef SLIT #ifdef SLIT
void Openbox::saveSlitSearch(Window window, Slit *data) { void Openbox::saveSlitSearch(Window window, Slit *data) {
slitSearchList->insert(new SlitSearch(window, data)); slitSearchList.insert(SlitLookupPair(window, data));
} }
#endif // SLIT #endif // SLIT
void Openbox::removeWindowSearch(Window window) { void Openbox::removeWindowSearch(Window window) {
LinkedListIterator<WindowSearch> it(windowSearchList); windowSearchList.erase(window);
for (WindowSearch *tmp = it.current(); tmp; it++, tmp = it.current()) {
if (tmp->getWindow() == window) {
windowSearchList->remove(tmp);
delete tmp;
break;
}
}
} }
void Openbox::removeGroupSearch(Window window) { void Openbox::removeGroupSearch(Window window) {
LinkedListIterator<WindowSearch> it(groupSearchList); groupSearchList.erase(window);
for (WindowSearch *tmp = it.current(); tmp; it++, tmp = it.current()) {
if (tmp->getWindow() == window) {
groupSearchList->remove(tmp);
delete tmp;
break;
}
}
} }
void Openbox::removeMenuSearch(Window window) { void Openbox::removeMenuSearch(Window window) {
LinkedListIterator<MenuSearch> it(menuSearchList); menuSearchList.erase(window);
for (MenuSearch *tmp = it.current(); tmp; it++, tmp = it.current()) {
if (tmp->getWindow() == window) {
menuSearchList->remove(tmp);
delete tmp;
break;
}
}
} }
void Openbox::removeToolbarSearch(Window window) { void Openbox::removeToolbarSearch(Window window) {
LinkedListIterator<ToolbarSearch> it(toolbarSearchList); toolbarSearchList.erase(window);
for (ToolbarSearch *tmp = it.current(); tmp; it++, tmp = it.current()) {
if (tmp->getWindow() == window) {
toolbarSearchList->remove(tmp);
delete tmp;
break;
}
}
} }
#ifdef SLIT #ifdef SLIT
void Openbox::removeSlitSearch(Window window) { void Openbox::removeSlitSearch(Window window) {
LinkedListIterator<SlitSearch> it(slitSearchList); slitSearchList.erase(window);
for (SlitSearch *tmp = it.current(); tmp; it++, tmp = it.current()) {
if (tmp->getWindow() == window) {
slitSearchList->remove(tmp);
delete tmp;
break;
}
}
} }
#endif // SLIT #endif // SLIT
@ -961,9 +867,8 @@ void Openbox::shutdown() {
XSetInputFocus(getXDisplay(), PointerRoot, None, CurrentTime); XSetInputFocus(getXDisplay(), PointerRoot, None, CurrentTime);
LinkedListIterator<BScreen> it(screenList); std::for_each(screenList.begin(), screenList.end(),
for (BScreen *s = it.current(); s; it++, s = it.current()) std::mem_fun(&BScreen::shutdown));
s->shutdown();
XSync(getXDisplay(), False); XSync(getXDisplay(), False);
} }
@ -988,14 +893,8 @@ void Openbox::save() {
config.setValue("session.cacheLife", (long)resource.cache_life / 60000); config.setValue("session.cacheLife", (long)resource.cache_life / 60000);
config.setValue("session.cacheMax", (long)resource.cache_max); config.setValue("session.cacheMax", (long)resource.cache_max);
LinkedListIterator<BScreen> it(screenList); std::for_each(screenList.begin(), screenList.end(),
for (BScreen *s = it.current(); s != NULL; it++, s = it.current()) { std::mem_fun(&BScreen::save));
s->save();
s->getToolbar()->save();
#ifdef SLIT
s->getSlit()->save();
#endif // SLIT
}
config.setAutoSave(true); config.setAutoSave(true);
config.save(); config.save();
@ -1075,42 +974,27 @@ void Openbox::real_reconfigure() {
load(); load();
for (int i = 0, n = menuTimestamps->count(); i < n; i++) { for_each(menuTimestamps.begin(), menuTimestamps.end(),
MenuTimestamp *ts = menuTimestamps->remove(0); PointerAssassin());
menuTimestamps.clear();
if (ts) { std::for_each(screenList.begin(), screenList.end(),
if (ts->filename) std::mem_fun(&BScreen::reconfigure));
delete [] ts->filename;
delete ts;
}
}
LinkedListIterator<BScreen> it(screenList);
for (BScreen *screen = it.current(); screen; it++, screen = it.current()) {
screen->reconfigure();
}
ungrab(); ungrab();
} }
void Openbox::checkMenu() { void Openbox::checkMenu() {
Bool reread = False; MenuTimestampList::iterator it;
LinkedListIterator<MenuTimestamp> it(menuTimestamps); for (it = menuTimestamps.begin(); it != menuTimestamps.end(); ++it) {
for (MenuTimestamp *tmp = it.current(); tmp && (! reread);
it++, tmp = it.current()) {
struct stat buf; struct stat buf;
if (! stat(tmp->filename, &buf)) { if (stat((*it)->filename, &buf) || (*it)->timestamp != buf.st_ctime) {
if (tmp->timestamp != buf.st_ctime) rereadMenu();
reread = True; return;
} else {
reread = True;
} }
} }
if (reread) rereadMenu();
} }
@ -1122,20 +1006,12 @@ void Openbox::rereadMenu() {
void Openbox::real_rereadMenu() { void Openbox::real_rereadMenu() {
for (int i = 0, n = menuTimestamps->count(); i < n; i++) { std::for_each(menuTimestamps.begin(), menuTimestamps.end(),
MenuTimestamp *ts = menuTimestamps->remove(0); PointerAssassin());
menuTimestamps.clear();
if (ts) { std::for_each(screenList.begin(), screenList.end(),
if (ts->filename) std::mem_fun(&BScreen::rereadMenu));
delete [] ts->filename;
delete ts;
}
}
LinkedListIterator<BScreen> it(screenList);
for (BScreen *screen = it.current(); screen; it++, screen = it.current())
screen->rereadMenu();
} }
@ -1149,12 +1025,13 @@ void Openbox::setStyleFilename(const char *filename) {
void Openbox::setMenuFilename(const char *filename) { void Openbox::setMenuFilename(const char *filename) {
Bool found = False; bool found = false;
LinkedListIterator<MenuTimestamp> it(menuTimestamps); MenuTimestampList::iterator it;
for (MenuTimestamp *tmp = it.current(); tmp && (! found); for (it = menuTimestamps.begin(); it != menuTimestamps.end(); ++it)
it++, tmp = it.current()) { if (! strcmp((*it)->filename, filename)) {
if (! strcmp(tmp->filename, filename)) found = True; found = true;
break;
} }
if (!found) { if (!found) {
struct stat buf; struct stat buf;
@ -1165,7 +1042,7 @@ void Openbox::setMenuFilename(const char *filename) {
ts->filename = bstrdup(filename); ts->filename = bstrdup(filename);
ts->timestamp = buf.st_ctime; ts->timestamp = buf.st_ctime;
menuTimestamps->insert(ts); menuTimestamps.push_back(ts);
} }
} }
} }
@ -1185,7 +1062,10 @@ void Openbox::timeout() {
OpenboxWindow *Openbox::focusedWindow() { OpenboxWindow *Openbox::focusedWindow() {
if (focused_screen == (BScreen *) 0) if (focused_screen == (BScreen *) 0)
return (OpenboxWindow *) 0; return (OpenboxWindow *) 0;
return focused_screen->getCurrentWorkspace()->focusedWindow(); Workspace *w = focused_screen->getCurrentWorkspace();
if (w == (Workspace *) 0)
return (OpenboxWindow *) 0;
return w->focusedWindow();
} }

View file

@ -42,10 +42,12 @@
#endif // TIME_WITH_SYS_TIME #endif // TIME_WITH_SYS_TIME
#include "Resource.h" #include "Resource.h"
#include "LinkedList.h"
#include "BaseDisplay.h" #include "BaseDisplay.h"
#include "Timer.h" #include "Timer.h"
#include <map>
#include <list>
//forward declaration //forward declaration
class BScreen; class BScreen;
class Openbox; class Openbox;
@ -74,6 +76,10 @@ public:
class Openbox : public BaseDisplay, public TimeoutHandler { class Openbox : public BaseDisplay, public TimeoutHandler {
private: private:
typedef struct MenuTimestamp { typedef struct MenuTimestamp {
virtual ~MenuTimestamp() {
if (filename != (char *) 0)
delete [] filename;
}
char *filename; char *filename;
time_t timestamp; time_t timestamp;
} MenuTimestamp; } MenuTimestamp;
@ -88,20 +94,29 @@ private:
unsigned long cache_life, cache_max; unsigned long cache_life, cache_max;
} resource; } resource;
typedef DataSearch<OpenboxWindow> WindowSearch; typedef std::map<Window, OpenboxWindow*> WindowLookup;
LinkedList<WindowSearch> *windowSearchList, *groupSearchList; typedef WindowLookup::value_type WindowLookupPair;
typedef DataSearch<Basemenu> MenuSearch; WindowLookup windowSearchList, groupSearchList;
LinkedList<MenuSearch> *menuSearchList;
typedef DataSearch<Toolbar> ToolbarSearch; typedef std::map<Window, Basemenu*> MenuLookup;
LinkedList<ToolbarSearch> *toolbarSearchList; typedef MenuLookup::value_type MenuLookupPair;
MenuLookup menuSearchList;
typedef std::map<Window, Toolbar*> ToolbarLookup;
typedef ToolbarLookup::value_type ToolbarLookupPair;
ToolbarLookup toolbarSearchList;
#ifdef SLIT #ifdef SLIT
typedef DataSearch<Slit> SlitSearch; typedef std::map<Window, Slit*> SlitLookup;
LinkedList<SlitSearch> *slitSearchList; typedef SlitLookup::value_type SlitLookupPair;
SlitLookup slitSearchList;
#endif // SLIT #endif // SLIT
LinkedList<MenuTimestamp> *menuTimestamps; typedef std::list<MenuTimestamp*> MenuTimestampList;
LinkedList<BScreen> *screenList; MenuTimestampList menuTimestamps;
typedef std::list<BScreen*> ScreenList;
ScreenList screenList;
BScreen *focused_screen; BScreen *focused_screen;
OpenboxWindow *masked_window; OpenboxWindow *masked_window;