]> Dogcows Code - chaz/openbox/commitdiff
converted the remaining LinkedLists in Screen to STL objects.
authorDana Jansens <danakj@orodu.net>
Sun, 12 May 2002 09:15:09 +0000 (09:15 +0000)
committerDana Jansens <danakj@orodu.net>
Sun, 12 May 2002 09:15:09 +0000 (09:15 +0000)
src/Screen.cc
src/Screen.h
src/Util.h
src/Window.cc
src/Workspace.cc
src/Workspace.h

index 8343474cdaa8107c9c03cc943471baae6b964664..73631fbf4479fbca71601e808b5f35132b64b9ab 100644 (file)
@@ -1,3 +1,4 @@
+#include <iostream.h>
 // Screen.cc for Openbox
 // Copyright (c) 2001 Sean 'Shaleh' Perry <shaleh@debian.org>
 // Copyright (c) 1997 - 2000 Brad Hughes (bhughes@tcac.net)
@@ -237,10 +238,6 @@ BScreen::BScreen(Openbox &ob, int scrn, Resource &conf) : ScreenInfo(ob, scrn),
   XDefineCursor(getBaseDisplay().getXDisplay(), getRootWindow(),
                 openbox.getSessionCursor());
 
-  workspaceNames = new LinkedList<char>;
-  workspacesList = new LinkedList<Workspace>;
-  iconList = new LinkedList<OpenboxWindow>;
-
   image_control =
     new BImageControl(openbox, *this, True, openbox.getColorsPerChannel(),
                       openbox.getCacheLife(), openbox.getCacheMax());
@@ -403,13 +400,14 @@ BScreen::BScreen(Openbox &ob, int scrn, Resource &conf) : ScreenInfo(ob, scrn),
   Workspace *wkspc = NULL;
   if (resource.workspaces != 0) {
     for (int i = 0; i < resource.workspaces; ++i) {
-      wkspc = new Workspace(*this, workspacesList->count());
-      workspacesList->insert(wkspc);
+      wkspc = new Workspace(*this, workspacesList.size());
+      workspacesList.push_back(wkspc);
       workspacemenu->insert(wkspc->getName(), wkspc->getMenu());
     }
   } else {
-    wkspc = new Workspace(*this, workspacesList->count());
-    workspacesList->insert(wkspc);
+    setWorkspaceCount(1);
+    wkspc = new Workspace(*this, workspacesList.size());
+    workspacesList.push_back(wkspc);
     workspacemenu->insert(wkspc->getName(), wkspc->getMenu());
   }
   saveWorkspaceNames();
@@ -418,7 +416,7 @@ BScreen::BScreen(Openbox &ob, int scrn, Resource &conf) : ScreenInfo(ob, scrn),
                        iconmenu);
   workspacemenu->update();
 
-  current_workspace = workspacesList->first();
+  current_workspace = workspacesList.front();
   workspacemenu->setItemSelected(2, True);
 
   toolbar = new Toolbar(*this, config);
@@ -504,17 +502,10 @@ BScreen::~BScreen(void) {
 
   removeWorkspaceNames();
 
-  while (workspacesList->count())
-    delete workspacesList->remove(0);
-
-  while (!rootmenuList.empty())
-    rootmenuList.erase(rootmenuList.begin());
-
-  while (iconList->count())
-    delete iconList->remove(0);
-
-  while (!netizenList.empty())
-    netizenList.erase(netizenList.begin());
+  std::for_each(workspacesList.begin(), workspacesList.end(),
+                PointerAssassin());
+  std::for_each(iconList.begin(), iconList.end(), PointerAssassin());
+  std::for_each(netizenList.begin(), netizenList.end(), PointerAssassin());
 
 #ifdef    HAVE_STRFTIME
   if (resource.strftime_format)
@@ -533,10 +524,6 @@ BScreen::~BScreen(void) {
   delete toolbar;
   delete image_control;
 
-  delete workspacesList;
-  delete workspaceNames;
-  delete iconList;
-
   if (resource.wstyle.fontset)
     XFreeFontSet(getBaseDisplay().getXDisplay(), resource.wstyle.fontset);
   if (resource.mstyle.t_fontset)
@@ -1091,6 +1078,7 @@ void BScreen::setStrftimeFormat(const char *f) {
 }
 
 #else // !HAVE_STRFTIME
+
 void BScreen::setDateFormat(int f) {
   resource.date_format = f;
   ostrstream s;
@@ -1100,6 +1088,7 @@ void BScreen::setDateFormat(int f) {
   s.rdbuf()->freeze(0);
 }
 
+
 void BScreen::setClock24Hour(Bool c) {
   resource.clock24hour = c;
   ostrstream s;
@@ -1109,6 +1098,7 @@ void BScreen::setClock24Hour(Bool c) {
 }
 #endif // HAVE_STRFTIME
 
+
 void BScreen::setHideToolbar(bool b) {
   resource.hide_toolbar = b;
   if (resource.hide_toolbar)
@@ -1121,16 +1111,16 @@ void BScreen::setHideToolbar(bool b) {
   s.rdbuf()->freeze(0);
 }
 
+
 void BScreen::saveWorkspaceNames() {
   ostrstream rc, names;
 
-  for (int i = 0; i < resource.workspaces; i++) {
-    Workspace *w = getWorkspace(i);
-    if (w != NULL) {
-      names << w->getName();
-      if (i < resource.workspaces-1)
-        names << ",";
-    }
+  wkspList::iterator it;
+  wkspList::iterator last = workspacesList.end() - 1;
+  for (it = workspacesList.begin(); it != workspacesList.end(); ++it) {
+    names << (*it)->getName();
+    if (it != last)
+      names << ",";
   }
   names << ends;
 
@@ -1551,14 +1541,14 @@ void BScreen::reconfigure(void) {
   slit->reconfigure();
 #endif // SLIT
 
-  LinkedListIterator<Workspace> wit(workspacesList);
-  for (Workspace *w = wit.current(); w; wit++, w = wit.current())
-    w->reconfigure();
+  wkspList::iterator wit;
+  for (wit = workspacesList.begin(); wit != workspacesList.end(); ++wit)
+    (*wit)->reconfigure();
 
-  LinkedListIterator<OpenboxWindow> iit(iconList);
-  for (OpenboxWindow *bw = iit.current(); bw; iit++, bw = iit.current())
-    if (bw->validateClient())
-      bw->reconfigure();
+  winList::iterator iit;
+  for (iit = iconList.begin(); iit != iconList.end(); ++iit)
+    if ((*iit)->validateClient())
+      (*iit)->reconfigure();
 
   image_control->timeout();
 }
@@ -1573,8 +1563,7 @@ void BScreen::rereadMenu(void) {
 
 
 void BScreen::removeWorkspaceNames(void) {
-  while (workspaceNames->count())
-    delete [] workspaceNames->remove(0);
+  workspaceNames.clear();
 }
 
 
@@ -1898,9 +1887,9 @@ void BScreen::addIcon(OpenboxWindow *w) {
   if (! w) return;
 
   w->setWorkspace(-1);
-  w->setWindowNumber(iconList->count());
+  w->setWindowNumber(iconList.size());
 
-  iconList->insert(w);
+  iconList.push_back(w);
 
   iconmenu->insert((const char **) w->getIconTitle());
   iconmenu->update();
@@ -1910,29 +1899,30 @@ void BScreen::addIcon(OpenboxWindow *w) {
 void BScreen::removeIcon(OpenboxWindow *w) {
   if (! w) return;
 
-  iconList->remove(w->getWindowNumber());
+  iconList.remove(w);
 
   iconmenu->remove(w->getWindowNumber());
   iconmenu->update();
 
-  LinkedListIterator<OpenboxWindow> it(iconList);
-  OpenboxWindow *bw = it.current();
-  for (int i = 0; bw; it++, bw = it.current())
-    bw->setWindowNumber(i++);
+  winList::iterator it = iconList.begin();
+  for (int i = 0; it != iconList.end(); ++it, ++i)
+    (*it)->setWindowNumber(i);
 }
 
 
 OpenboxWindow *BScreen::getIcon(int index) {
-  if (index >= 0 && index < iconList->count())
-    return iconList->find(index);
+  if (index < 0 || index >= iconList.size())
+    return (OpenboxWindow *) 0;
 
-  return NULL;
+  winList::iterator it = iconList.begin();
+  for (; index > 0; --index, ++it);     // increment to index
+  return *it;
 }
 
 
 int BScreen::addWorkspace(void) {
-  Workspace *wkspc = new Workspace(*this, workspacesList->count());
-  workspacesList->insert(wkspc);
+  Workspace *wkspc = new Workspace(*this, workspacesList.size());
+  workspacesList.push_back(wkspc);
   setWorkspaceCount(workspaceCount()+1);
   saveWorkspaceNames();
 
@@ -1944,15 +1934,15 @@ int BScreen::addWorkspace(void) {
 
   updateNetizenWorkspaceCount();
 
-  return workspacesList->count();
+  return workspacesList.size();
 }
 
 
 int BScreen::removeLastWorkspace(void) {
-  if (workspacesList->count() == 1)
+  if (workspacesList.size() == 1)
     return 0;
 
-  Workspace *wkspc = workspacesList->last();
+  Workspace *wkspc = workspacesList.back();
 
   if (current_workspace->getWorkspaceID() == wkspc->getWorkspaceID())
     changeWorkspaceID(current_workspace->getWorkspaceID() - 1);
@@ -1962,8 +1952,9 @@ int BScreen::removeLastWorkspace(void) {
   workspacemenu->remove(wkspc->getWorkspaceID() + 2);
   workspacemenu->update();
 
-  workspacesList->remove(wkspc);
+  workspacesList.pop_back();
   delete wkspc;
+  
   setWorkspaceCount(workspaceCount()-1);
   saveWorkspaceNames();
 
@@ -1971,7 +1962,7 @@ int BScreen::removeLastWorkspace(void) {
 
   updateNetizenWorkspaceCount();
 
-  return workspacesList->count();
+  return workspacesList.size();
 }
 
 
@@ -2015,11 +2006,11 @@ void BScreen::addNetizen(Netizen *n) {
   n->sendWorkspaceCount();
   n->sendCurrentWorkspace();
 
-  LinkedListIterator<Workspace> it(workspacesList);
-  for (Workspace *w = it.current(); w; it++, w = it.current()) {
-    for (int i = 0; i < w->getCount(); i++)
-      n->sendWindowAdd(w->getWindow(i)->getClientWindow(),
-                      w->getWorkspaceID());
+  wkspList::iterator it;
+  for (it = workspacesList.begin(); it != workspacesList.end(); ++it) {
+    for (int i = 0; i < (*it)->getCount(); i++)
+      n->sendWindowAdd((*it)->getWindow(i)->getClientWindow(),
+                      (*it)->getWorkspaceID());
   }
 
   Window f = ((openbox.focusedWindow()) ?
@@ -2101,15 +2092,15 @@ void BScreen::updateNetizenConfigNotify(XEvent *e) {
 
 void BScreen::raiseWindows(Window *workspace_stack, int num) {
   Window *session_stack = new
-    Window[(num + workspacesList->count() + rootmenuList.size() + 13)];
+    Window[(num + workspacesList.size() + rootmenuList.size() + 13)];
   int i = 0, k = num;
 
   XRaiseWindow(getBaseDisplay().getXDisplay(), iconmenu->getWindowID());
   *(session_stack + i++) = iconmenu->getWindowID();
 
-  LinkedListIterator<Workspace> wit(workspacesList);
-  for (Workspace *tmp = wit.current(); tmp; wit++, tmp = wit.current())
-    *(session_stack + i++) = tmp->getMenu()->getWindowID();
+  wkspList::iterator it;
+  for (it = workspacesList.begin(); it != workspacesList.end(); ++it)
+    *(session_stack + i++) = (*it)->getMenu()->getWindowID();
 
   *(session_stack + i++) = workspacemenu->getWindowID();
 
@@ -2150,19 +2141,14 @@ void BScreen::raiseWindows(Window *workspace_stack, int num) {
 
 
 void BScreen::addWorkspaceName(const char *name) {
-  workspaceNames->insert(bstrdup(name));
+  workspaceNames.push_back(name);
 }
 
-char* BScreen::getNameOfWorkspace(int id) {
-  char *name = NULL;
 
-  if (id >= 0 && id < workspaceNames->count()) {
-    char *wkspc_name = workspaceNames->find(id);
-
-    if (wkspc_name)
-      name = wkspc_name;
-  }
-  return name;
+const char *BScreen::getNameOfWorkspace(int id) {
+  if (id < 0 || id >= workspaceNames.size())
+    return (const char *) 0;
+  return workspaceNames[id].c_str();
 }
 
 
@@ -2273,9 +2259,7 @@ void BScreen::raiseFocus(void) {
 
 void BScreen::InitMenu(void) {
   if (rootmenu) {
-    while (!rootmenuList.empty())
-      rootmenuList.erase(rootmenuList.begin());
-
+    rootmenuList.clear();
     while (rootmenu->getCount())
       rootmenu->remove(0);
   } else {
@@ -2753,14 +2737,12 @@ void BScreen::shutdown(void) {
   XSelectInput(getBaseDisplay().getXDisplay(), getRootWindow(), NoEventMask);
   XSync(getBaseDisplay().getXDisplay(), False);
 
-  LinkedListIterator<Workspace> it(workspacesList);
-  for (Workspace *w = it.current(); w; it++, w = it.current())
-    w->shutdown();
+  wkspList::iterator it;
+  for (it = workspacesList.begin(); it != workspacesList.end(); ++it)
+    (*it)->shutdown();
 
-  while (iconList->count()) {
-    iconList->first()->restore();
-    delete iconList->first();
-  }
+  while (!iconList.empty())
+    iconList.front()->restore();
 
 #ifdef    SLIT
   slit->shutdown();
index d496914bf2f1c4e9cc5b9b3dfb4230b6a9a4f3ae..c59a2e95d33e90c2248782980329696dbb52c47d 100644 (file)
@@ -40,7 +40,6 @@
 #include "BaseDisplay.h"
 #include "Configmenu.h"
 #include "Iconmenu.h"
-#include "LinkedList.h"
 #include "Netizen.h"
 #include "Rootmenu.h"
 #include "Timer.h"
 #endif // SLIT
 #include "Image.h"
 #include "Resource.h"
+#include "Util.h"
 
 #include <list>
+#include <vector>
 typedef std::list<Rootmenu *> menuList;
 typedef std::list<Netizen *> netList;
+typedef std::vector<Workspace *> wkspList;
+typedef std::vector<std::string> wkspNameList;
 
 // forward declaration
 class BScreen;
@@ -115,7 +118,7 @@ private:
 
   menuList rootmenuList;
   netList netizenList;
-  LinkedList<OpenboxWindow> *iconList;
+  winList iconList;     // winList is declared in Workspace.h
 
 #ifdef    SLIT
   Slit *slit;
@@ -128,8 +131,8 @@ private:
   unsigned int geom_w, geom_h;
   unsigned long event_mask;
 
-  LinkedList<char> *workspaceNames;
-  LinkedList<Workspace> *workspacesList;
+  wkspNameList workspaceNames;
+  wkspList workspacesList;
 
   struct resource {
     WindowStyle wstyle;
@@ -193,7 +196,10 @@ public:
 
   Rect availableArea() const;
   
-  inline Workspace *getWorkspace(int w) { return workspacesList->find(w); }
+  inline Workspace *getWorkspace(int w) {
+    ASSERT(w < workspacesList.size());
+    return workspacesList[w];
+  }
   inline Workspace *getCurrentWorkspace() { return current_workspace; }
 
   inline Workspacemenu *getWorkspacemenu() { return workspacemenu; }
@@ -211,8 +217,8 @@ public:
 
   inline const int getCurrentWorkspaceID()
   { return current_workspace->getWorkspaceID(); }
-  inline const int getWorkspaceCount() { return workspacesList->count(); }
-  inline const int getIconCount() { return iconList->count(); }
+  inline const int getWorkspaceCount() { return workspacesList.size(); }
+  inline const int getIconCount() { return iconList.size(); }
 
   inline const Bool &isRootColormapInstalled() const
     { return root_colormap_installed; }
@@ -291,7 +297,7 @@ public:
   void removeNetizen(Window);
   void addIcon(OpenboxWindow *);
   void removeIcon(OpenboxWindow *);
-  char* getNameOfWorkspace(int);
+  const char *getNameOfWorkspace(int);
   void changeWorkspaceID(int);
   void raiseWindows(Window *, int);
   void reassociateWindow(OpenboxWindow *, int, Bool);
index 03b352e1040ca53d4236ed1cc516fb211643071a..ad45c4034b78c4a11c12e276842b6fe36d6fcaf7 100644 (file)
 # define ASSERT(x)
 #endif //  DEBUG
 
+struct PointerAssassin {
+  template<typename T>
+  inline void operator()(const T ptr) const {
+    delete ptr;
+  }
+};
+
 #endif // __Util_hh
index 6222546f67965e1a4d8af5248a751e33b6ebe8d2..0a02daa196b162aa77b718d3c318308a8b3e2a30 100644 (file)
@@ -3054,6 +3054,8 @@ void OpenboxWindow::restore(void) {
   XMapWindow(display, client.window);
 
   XFlush(display);
+
+  delete this;
 }
 
 
index 256ad3da9845c18c6f1b8f3b7f7a7d53eb14a32b..89ea8e7bc9fa31742555909c87c9178f1b6a38af 100644 (file)
@@ -71,8 +71,7 @@ Workspace::Workspace(BScreen &scrn, int i) : screen(scrn) {
   lastfocus = (OpenboxWindow *) 0;
 
   name = (char *) 0;
-  char *tmp = screen.getNameOfWorkspace(id);
-  setName(tmp);
+  setName(screen.getNameOfWorkspace(id));
 }
 
 
@@ -297,7 +296,7 @@ void Workspace::setCurrent(void) {
 }
 
 
-void Workspace::setName(char *new_name) {
+void Workspace::setName(const char *new_name) {
   if (name)
     delete [] name;
 
@@ -316,10 +315,8 @@ void Workspace::setName(char *new_name) {
 
 
 void Workspace::shutdown(void) {
-  while (!_windows.empty()) {
+  while (!_windows.empty())
     _windows[0]->restore();
-    delete _windows[0];
-  }
 }
 
 static rectList calcSpace(const Rect &win, const rectList &spaces) {
@@ -420,7 +417,8 @@ Point *Workspace::bestFitPlacement(const Size &win_size, const Rect &space) {
   spaces.push_back(space); //initially the entire screen is free
   
   //Find Free Spaces
-  for (winVect::iterator it = _windows.begin(); it != _windows.end(); ++it)
+  winVect::iterator it;
+  for (it = _windows.begin(); it != _windows.end(); ++it)
      spaces = calcSpace((*it)->area().Inflate(screen.getBorderWidth() * 4),
                         spaces);
   
@@ -474,7 +472,8 @@ Point *Workspace::rowSmartPlacement(const Size &win_size, const Rect &space) {
   spaces.push_back(space); //initially the entire screen is free
   
   //Find Free Spaces
-  for (winVect::iterator it = _windows.begin(); it != _windows.end(); ++it)
+  winVect::iterator it;
+  for (it = _windows.begin(); it != _windows.end(); ++it)
      spaces = calcSpace((*it)->area().Inflate(screen.getBorderWidth() * 4),
                         spaces);
   //Sort spaces by preference
@@ -514,7 +513,8 @@ Point *Workspace::colSmartPlacement(const Size &win_size, const Rect &space) {
   spaces.push_back(space); //initially the entire screen is free
   
   //Find Free Spaces
-  for (winVect::iterator it = _windows.begin(); it != _windows.end(); ++it)
+  winVect::iterator it;
+  for (it = _windows.begin(); it != _windows.end(); ++it)
      spaces = calcSpace((*it)->area().Inflate(screen.getBorderWidth() * 4),
                         spaces);
   //Sort spaces by user preference
index 7701467ba63c86e42dfa9a664762e7f24c3f504e..9b7aba101e6ab69975dc68179170cbab5e1bea96 100644 (file)
@@ -85,7 +85,7 @@ public:
   void reconfigure();
   void update();
   void setCurrent(void);
-  void setName(char *);
+  void setName(const char *);
   void shutdown(void);
 };
 
This page took 0.057616 seconds and 4 git commands to generate.