From be93c21b2f271fc431f0933237bdae75d3783e03 Mon Sep 17 00:00:00 2001 From: fluxgen <fluxgen> Date: Fri, 8 Feb 2002 14:06:35 +0000 Subject: to stl --- src/Workspace.cc | 153 +++++++++++++++++++++++++++++-------------------------- src/Workspace.hh | 9 +++- 2 files changed, 89 insertions(+), 73 deletions(-) diff --git a/src/Workspace.cc b/src/Workspace.cc index a98f970..677e697 100644 --- a/src/Workspace.cc +++ b/src/Workspace.cc @@ -19,7 +19,7 @@ // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // DEALINGS IN THE SOFTWARE. -// $Id: Workspace.cc,v 1.6 2002/01/20 02:08:12 fluxgen Exp $ +// $Id: Workspace.cc,v 1.7 2002/02/08 14:04:51 fluxgen Exp $ // use GNU extensions #ifndef _GNU_SOURCE @@ -51,6 +51,8 @@ #include <X11/Xlib.h> #include <X11/Xatom.h> +#include <algorithm> + Workspace::Workspace(BScreen *scrn, int i): screen(scrn), lastfocus(0), @@ -63,8 +65,6 @@ cascade_x(32), cascade_y(32) id = i; - stackingList = new LinkedList<FluxboxWindow>; - windowList = new LinkedList<FluxboxWindow>; clientmenu = new Clientmenu(this); char *tmp; @@ -77,8 +77,6 @@ cascade_x(32), cascade_y(32) Workspace::~Workspace() { - delete stackingList; - delete windowList; delete clientmenu; } @@ -91,10 +89,10 @@ const int Workspace::addWindow(FluxboxWindow *w, Bool place) { placeWindow(w); w->setWorkspace(id); - w->setWindowNumber(windowList->count()); + w->setWindowNumber(windowList.size()); - stackingList->insert(w, 0); - windowList->insert(w); + stackingList.push_front(w); + windowList.push_back(w); clientmenu->insert((const char **) w->getTitle()); clientmenu->update(); @@ -110,7 +108,7 @@ const int Workspace::addWindow(FluxboxWindow *w, Bool place) { const int Workspace::removeWindow(FluxboxWindow *w) { if (! w) return -1; - stackingList->remove(w); + stackingList.remove(w); if (w->isFocused()) { if (screen->isSloppyFocus()) @@ -120,7 +118,7 @@ const int Workspace::removeWindow(FluxboxWindow *w) { w->getTransientFor()->setInputFocus(); else { - FluxboxWindow *top = stackingList->first(); + FluxboxWindow *top = stackingList.front(); if (! top || ! top->setInputFocus()) { Fluxbox::instance()->setFocusedWindow((FluxboxWindow *) 0); @@ -134,45 +132,49 @@ const int Workspace::removeWindow(FluxboxWindow *w) { if (lastfocus == w) lastfocus = (FluxboxWindow *) 0; - windowList->remove(w->getWindowNumber()); + windowList.erase(windowList.begin() + w->getWindowNumber()); clientmenu->remove(w->getWindowNumber()); clientmenu->update(); screen->updateNetizenWindowDel(w->getClientWindow()); - LinkedListIterator<FluxboxWindow> it(windowList); - for (int i = 0; it.current(); it++, i++) - it.current()->setWindowNumber(i); + { + Windows::iterator it = windowList.begin(); + Windows::const_iterator it_end = windowList.end(); + for (int i = 0; it != it_end; ++it, ++i) { + (*it)->setWindowNumber(i); + } + } - return windowList->count(); + return windowList.size(); } void Workspace::showAll(void) { - LinkedListIterator<FluxboxWindow> it(stackingList); - for (; it.current(); it++) - it.current()->deiconify(False, False); + WindowStack::iterator it = stackingList.begin(); + WindowStack::iterator it_end = stackingList.end(); + for (; it != it_end; ++it) { + (*it)->deiconify(False, False); + } } void Workspace::hideAll(void) { - LinkedList<FluxboxWindow> lst; - - LinkedListIterator<FluxboxWindow> it(stackingList); - for (; it.current(); it++) - lst.insert(it.current(), 0); - - LinkedListIterator<FluxboxWindow> it2(&lst); - for (; it2.current(); it2++) - if (! it2.current()->isStuck()) - it2.current()->withdraw(); + WindowStack::reverse_iterator it = stackingList.rbegin(); + WindowStack::reverse_iterator it_end = stackingList.rend(); + for (; it != it_end; ++it) { + if (! (*it)->isStuck()) + (*it)->withdraw(); + } } void Workspace::removeAll(void) { - LinkedListIterator<FluxboxWindow> it(windowList); - for (; it.current(); it++) - it.current()->iconify(); + Windows::iterator it = windowList.begin(); + Windows::const_iterator it_end = windowList.end(); + for (; it != it_end; ++it) { + (*it)->iconify(); + } } @@ -200,8 +202,8 @@ void Workspace::raiseWindow(FluxboxWindow *w) { if (! win->isIconic()) { wkspc = screen->getWorkspace(win->getWorkspaceNumber()); - wkspc->stackingList->remove(win); - wkspc->stackingList->insert(win, 0); + wkspc->stackingList.remove(win); + wkspc->stackingList.push_front(win); } if (! win->hasTransient() || ! win->getTransient()) @@ -239,8 +241,8 @@ void Workspace::lowerWindow(FluxboxWindow *w) { if (! win->isIconic()) { wkspc = screen->getWorkspace(win->getWorkspaceNumber()); - wkspc->stackingList->remove(win); - wkspc->stackingList->insert(win); + wkspc->stackingList.remove(win); + wkspc->stackingList.push_back(win); } if (! win->getTransientFor()) @@ -263,23 +265,25 @@ void Workspace::lowerWindow(FluxboxWindow *w) { void Workspace::reconfigure(void) { clientmenu->reconfigure(); - LinkedListIterator<FluxboxWindow> it(windowList); - for (; it.current(); it++) - if (it.current()->validateClient()) - it.current()->reconfigure(); + Windows::iterator it = windowList.begin(); + Windows::iterator it_end = windowList.end(); + for (; it != it_end; ++it) { + if ((*it)->validateClient()) + (*it)->reconfigure(); + } } FluxboxWindow *Workspace::getWindow(int index) { - if ((index >= 0) && (index < windowList->count())) - return windowList->find(index); + if ((index >= 0) && (index < windowList.size())) + return windowList[index]; else return 0; } const int Workspace::getCount(void) { - return windowList->count(); + return windowList.size(); } @@ -295,7 +299,7 @@ Bool Workspace::isCurrent(void) { Bool Workspace::isLastWindow(FluxboxWindow *w) { - return (w == windowList->last()); + return (w == windowList.back()); } void Workspace::setCurrent(void) { @@ -328,16 +332,17 @@ void Workspace::setName(char *new_name) { void Workspace::shutdown(void) { - while (windowList->count()) { - windowList->first()->restore(); - delete windowList->first(); + Windows::iterator it = windowList.begin(); + Windows::iterator it_end= windowList.end(); + for (; it != it_end; ++it) { + (*it)->restore(); + delete (*it); } } void Workspace::placeWindow(FluxboxWindow *win) { Bool placed = False; - LinkedListIterator<FluxboxWindow> it(windowList); int win_w = win->getWidth() + (screen->getBorderWidth2x() * 2), win_h = win->getHeight() + (screen->getBorderWidth2x() * 2), #ifdef SLIT @@ -374,26 +379,29 @@ void Workspace::placeWindow(FluxboxWindow *win) { ! placed) { test_x = screen->getBorderWidth() + screen->getEdgeSnapThreshold(); if (screen->getRowPlacementDirection() == BScreen::RIGHTLEFT) - test_x = screen->getWidth() - win_w - test_x; + test_x = screen->getWidth() - win_w - test_x; while (((screen->getRowPlacementDirection() == BScreen::RIGHTLEFT) ? test_x > 0 : test_x + win_w < (signed) screen->getWidth()) && ! placed) { placed = True; - it.reset(); - for (; it.current() && placed; it++) { - curr_w = it.current()->getWidth() + screen->getBorderWidth2x() + + Windows::iterator it = windowList.begin(); + Windows::iterator it_end = windowList.end(); + for (; it != it_end && placed; ++it) { + curr_w = (*it)->getWidth() + screen->getBorderWidth2x() + screen->getBorderWidth2x(); curr_h = - ((it.current()->isShaded()) ? it.current()->getTitleHeight() : - it.current()->getHeight()) + - screen->getBorderWidth2x() + screen->getBorderWidth2x(); - - if (it.current()->getXFrame() < test_x + win_w && - it.current()->getXFrame() + curr_w > test_x && - it.current()->getYFrame() < test_y + win_h && - it.current()->getYFrame() + curr_h > test_y) + (((*it)->isShaded()) + ? (*it)->getTitleHeight() + : (*it)->getHeight()) + + screen->getBorderWidth2x() + + screen->getBorderWidth2x(); + + if ((*it)->getXFrame() < test_x + win_w && + (*it)->getXFrame() + curr_w > test_x && + (*it)->getYFrame() < test_y + win_h && + (*it)->getYFrame() + curr_h > test_y) placed = False; } @@ -436,26 +444,29 @@ void Workspace::placeWindow(FluxboxWindow *win) { ! placed) { test_y = screen->getBorderWidth() + screen->getEdgeSnapThreshold(); if (screen->getColPlacementDirection() == BScreen::BOTTOMTOP) - test_y = screen->getHeight() - win_h - test_y; + test_y = screen->getHeight() - win_h - test_y; while (((screen->getColPlacementDirection() == BScreen::BOTTOMTOP) ? test_y > 0 : test_y + win_h < (signed) screen->getHeight()) && ! placed) { placed = True; - it.reset(); - for (; it.current() && placed; it++) { - curr_w = it.current()->getWidth() + screen->getBorderWidth2x() + + Windows::iterator it = windowList.begin(); + Windows::iterator it_end = windowList.end(); + for (; it != it_end && placed; ++it) { + curr_w = (*it)->getWidth() + screen->getBorderWidth2x() + screen->getBorderWidth2x(); curr_h = - ((it.current()->isShaded()) ? it.current()->getTitleHeight() : - it.current()->getHeight()) + - screen->getBorderWidth2x() + screen->getBorderWidth2x(); - - if (it.current()->getXFrame() < test_x + win_w && - it.current()->getXFrame() + curr_w > test_x && - it.current()->getYFrame() < test_y + win_h && - it.current()->getYFrame() + curr_h > test_y) + (((*it)->isShaded()) + ? (*it)->getTitleHeight() + : (*it)->getHeight()) + + screen->getBorderWidth2x() + + screen->getBorderWidth2x(); + + if ((*it)->getXFrame() < test_x + win_w && + (*it)->getXFrame() + curr_w > test_x && + (*it)->getYFrame() < test_y + win_h && + (*it)->getYFrame() + curr_h > test_y) placed = False; } diff --git a/src/Workspace.hh b/src/Workspace.hh index 9e621c3..08c5ad9 100644 --- a/src/Workspace.hh +++ b/src/Workspace.hh @@ -22,9 +22,10 @@ #ifndef _WORKSPACE_HH_ #define _WORKSPACE_HH_ -#include "LinkedList.hh" #include <X11/Xlib.h> #include <string> +#include <vector> +#include <list> class BScreen; class Clientmenu; @@ -38,7 +39,11 @@ private: FluxboxWindow *lastfocus; Clientmenu *clientmenu; - LinkedList<FluxboxWindow> *stackingList, *windowList; + typedef std::list<FluxboxWindow *> WindowStack; + typedef std::vector<FluxboxWindow *> Windows; + + WindowStack stackingList; + Windows windowList; std::string name; int id, cascade_x, cascade_y; -- cgit v0.11.2