all repos — openbox @ b424a72384ba3527044b8a4a203c53b683128913

openbox fork - make it a bit more like ryudo

converted from LinkedList to STL vector and list
Dana Jansens danakj@orodu.net
commit

b424a72384ba3527044b8a4a203c53b683128913

parent

fba11bf0c628d1d3a71c67d97f300a57d0892f1a

2 files changed, 60 insertions(+), 81 deletions(-)

jump to
M src/Workspace.ccsrc/Workspace.cc

@@ -31,6 +31,18 @@ #ifdef HAVE_CONFIG_H

# include "../config.h" #endif // HAVE_CONFIG_H +#ifdef HAVE_STDIO_H +# include <stdio.h> +#endif // HAVE_STDIO_H + +#ifdef HAVE_STDLIB_H +# include <stdlib.h> +#endif // HAVE_STDLIB_H + +#ifdef HAVE_STRING_H +# include <string.h> +#endif // HAVE_STRING_H + #include <X11/Xlib.h> #include <X11/Xatom.h>

@@ -41,23 +53,10 @@ #include "Screen.h"

#include "Toolbar.h" #include "Window.h" #include "Workspace.h" - #include "Windowmenu.h" #include "Geometry.h" #include "Util.h" -#ifdef HAVE_STDIO_H -# include <stdio.h> -#endif // HAVE_STDIO_H - -#ifdef HAVE_STDLIB_H -# include <stdlib.h> -#endif // HAVE_STDLIB_H - -#ifdef HAVE_STRING_H -# include <string.h> -#endif // HAVE_STRING_H - #include <algorithm> #include <vector> typedef std::vector<Rect> rectList;

@@ -67,8 +66,6 @@ cascade_x = cascade_y = 0;

_focused = (OpenboxWindow *) 0; id = i; - stackingList = new LinkedList<OpenboxWindow>; - windowList = new LinkedList<OpenboxWindow>; clientmenu = new Clientmenu(*this); lastfocus = (OpenboxWindow *) 0;

@@ -80,8 +77,6 @@ }

Workspace::~Workspace(void) { - delete stackingList; - delete windowList; delete clientmenu; if (name)

@@ -95,10 +90,10 @@

if (place) placeWindow(*w); w->setWorkspace(id); - w->setWindowNumber(windowList->count()); + w->setWindowNumber(_windows.size()); - stackingList->insert(w, 0); - windowList->insert(w); + _zorder.push_front(w); + _windows.push_back(w); clientmenu->insert((const char **) w->getTitle()); clientmenu->update();

@@ -114,7 +109,7 @@

const int Workspace::removeWindow(OpenboxWindow *w) { if (! w) return -1; - stackingList->remove(w); + _zorder.remove(w); if (w->isFocused()) { if (w->isTransient() && w->getTransientFor() &&

@@ -123,8 +118,7 @@ w->getTransientFor()->setInputFocus();

} else if (screen.sloppyFocus()) { screen.getOpenbox().focusWindow((OpenboxWindow *) 0); } else { - OpenboxWindow *top = stackingList->first(); - if (! top || ! top->setInputFocus()) { + if (_zorder.empty() || !_zorder.front()->setInputFocus()) { screen.getOpenbox().focusWindow((OpenboxWindow *) 0); XSetInputFocus(screen.getOpenbox().getXDisplay(), screen.getToolbar()->getWindowID(),

@@ -136,18 +130,17 @@

if (lastfocus == w) lastfocus = (OpenboxWindow *) 0; - windowList->remove(w->getWindowNumber()); + _windows.erase(_windows.begin() + w->getWindowNumber()); clientmenu->remove(w->getWindowNumber()); clientmenu->update(); screen.updateNetizenWindowDel(w->getClientWindow()); - LinkedListIterator<OpenboxWindow> it(windowList); - OpenboxWindow *bw = it.current(); - for (int i = 0; bw; it++, i++, bw = it.current()) - bw->setWindowNumber(i); + winVect::iterator it = _windows.begin(); + for (int i=0; it != _windows.end(); ++it, ++i) + (*it)->setWindowNumber(i); - return windowList->count(); + return _windows.size(); }

@@ -161,30 +154,24 @@ }

void Workspace::showAll(void) { - LinkedListIterator<OpenboxWindow> it(stackingList); - for (OpenboxWindow *bw = it.current(); bw; it++, bw = it.current()) - bw->deiconify(False, False); + winList::iterator it; + for (it = _zorder.begin(); it != _zorder.end(); ++it) + (*it)->deiconify(false, false); } void Workspace::hideAll(void) { - LinkedList<OpenboxWindow> lst; - - LinkedListIterator<OpenboxWindow> it(stackingList); - for (OpenboxWindow *bw = it.current(); bw; it++, bw = it.current()) - lst.insert(bw, 0); - - LinkedListIterator<OpenboxWindow> it2(&lst); - for (OpenboxWindow *bw = it2.current(); bw; it2++, bw = it2.current()) - if (! bw->isStuck()) - bw->withdraw(); + winList::reverse_iterator it; + for (it = _zorder.rbegin(); it != _zorder.rend(); ++it) + if (!(*it)->isStuck()) + (*it)->withdraw(); } void Workspace::removeAll(void) { - LinkedListIterator<OpenboxWindow> it(windowList); - for (OpenboxWindow *bw = it.current(); bw; it++, bw = it.current()) - bw->iconify(); + winVect::iterator it; + for (it = _windows.begin(); it != _windows.end(); ++it) + (*it)->iconify(); }

@@ -212,8 +199,8 @@ screen.updateNetizenWindowRaise(win->getClientWindow());

if (! win->isIconic()) { wkspc = screen.getWorkspace(win->getWorkspaceNumber()); - wkspc->stackingList->remove(win); - wkspc->stackingList->insert(win, 0); + wkspc->_zorder.remove(win); + wkspc->_zorder.push_front(win); } if (! win->hasTransient() || ! win->getTransient())

@@ -251,8 +238,8 @@ screen.updateNetizenWindowLower(win->getClientWindow());

if (! win->isIconic()) { wkspc = screen.getWorkspace(win->getWorkspaceNumber()); - wkspc->stackingList->remove(win); - wkspc->stackingList->insert(win); + wkspc->_zorder.remove(win); + wkspc->_zorder.push_back(win); } if (! win->getTransientFor())

@@ -275,24 +262,23 @@

void Workspace::reconfigure(void) { clientmenu->reconfigure(); - LinkedListIterator<OpenboxWindow> it(windowList); - for (OpenboxWindow *bw = it.current(); bw; it++, bw = it.current()) { - if (bw->validateClient()) - bw->reconfigure(); - } + winVect::iterator it; + for (it = _windows.begin(); it != _windows.end(); ++it) + if ((*it)->validateClient()) + (*it)->reconfigure(); } OpenboxWindow *Workspace::getWindow(int index) { - if ((index >= 0) && (index < windowList->count())) - return windowList->find(index); + if ((index >= 0) && (index < _windows.size())) + return _windows[index]; else - return 0; + return (OpenboxWindow *) 0; } const int Workspace::getCount(void) { - return windowList->count(); + return _windows.size(); }

@@ -306,10 +292,6 @@ Bool Workspace::isCurrent(void) {

return (id == screen.getCurrentWorkspaceID()); } - -Bool Workspace::isLastWindow(OpenboxWindow *w) { - return (w == windowList->last()); -} void Workspace::setCurrent(void) { screen.changeWorkspaceID(id);

@@ -335,9 +317,9 @@ }

void Workspace::shutdown(void) { - while (windowList->count()) { - windowList->first()->restore(); - delete windowList->first(); + while (!_windows.empty()) { + _windows[0]->restore(); + _windows.erase(_windows.begin()); } }

@@ -435,14 +417,12 @@ //to bottom.

Point *Workspace::bestFitPlacement(const Size &win_size, const Rect &space) { const Rect *best; rectList spaces; - LinkedListIterator<OpenboxWindow> it(windowList); rectList::const_iterator siter; spaces.push_back(space); //initially the entire screen is free - it.reset(); //Find Free Spaces - for (OpenboxWindow *cur=it.current(); cur!=NULL; it++, cur=it.current()) - spaces = calcSpace(cur->area().Inflate(screen.getBorderWidth() * 4), + for (winVect::iterator it = _windows.begin(); it != _windows.end(); ++it) + spaces = calcSpace((*it)->area().Inflate(screen.getBorderWidth() * 4), spaces); //Find first space that fits the window

@@ -490,15 +470,13 @@

Point *Workspace::rowSmartPlacement(const Size &win_size, const Rect &space) { const Rect *best; rectList spaces; - LinkedListIterator<OpenboxWindow> it(windowList); rectList::const_iterator siter; spaces.push_back(space); //initially the entire screen is free - it.reset(); //Find Free Spaces - for (OpenboxWindow *cur=it.current(); cur!=NULL; it++, cur=it.current()) - spaces = calcSpace(cur->area().Inflate(screen.getBorderWidth() * 4), + for (winVect::iterator it = _windows.begin(); it != _windows.end(); ++it) + spaces = calcSpace((*it)->area().Inflate(screen.getBorderWidth() * 4), spaces); //Sort spaces by preference if(screen.rowPlacementDirection() == BScreen::RightLeft)

@@ -532,15 +510,13 @@

Point *Workspace::colSmartPlacement(const Size &win_size, const Rect &space) { const Rect *best; rectList spaces; - LinkedListIterator<OpenboxWindow> it(windowList); rectList::const_iterator siter; spaces.push_back(space); //initially the entire screen is free - it.reset(); //Find Free Spaces - for (OpenboxWindow *cur=it.current(); cur!=NULL; it++, cur=it.current()) - spaces = calcSpace(cur->area().Inflate(screen.getBorderWidth() * 4), + for (winVect::iterator it = _windows.begin(); it != _windows.end(); ++it) + spaces = calcSpace((*it)->area().Inflate(screen.getBorderWidth() * 4), spaces); //Sort spaces by user preference if(screen.colPlacementDirection() == BScreen::TopBottom)

@@ -598,7 +574,6 @@ Rect space = screen.availableArea();

const Size window_size(win.area().w()+screen.getBorderWidth() * 2, win.area().h()+screen.getBorderWidth() * 2); Point *place = NULL; - LinkedListIterator<OpenboxWindow> it(windowList); switch (screen.placementPolicy()) { case BScreen::BestFitPlacement:
M src/Workspace.hsrc/Workspace.h

@@ -25,7 +25,8 @@ #define __Workspace_hh

#include <X11/Xlib.h> -#include "LinkedList.h" +#include <vector> +#include <list> class BScreen; class Clientmenu;

@@ -34,13 +35,17 @@ class OpenboxWindow;

class Size; class Rect; +typedef std::vector<OpenboxWindow *> winVect; +typedef std::list<OpenboxWindow *> winList; + class Workspace { private: BScreen &screen; OpenboxWindow *lastfocus; Clientmenu *clientmenu; - LinkedList<OpenboxWindow> *stackingList, *windowList; + winVect _windows; + winList _zorder; char *name; int id, cascade_x, cascade_y;

@@ -69,7 +74,6 @@ 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);