converted from LinkedList to STL vector and list
This commit is contained in:
parent
fba11bf0c6
commit
b424a72384
2 changed files with 62 additions and 83 deletions
135
src/Workspace.cc
135
src/Workspace.cc
|
@ -31,21 +31,6 @@
|
||||||
# include "../config.h"
|
# include "../config.h"
|
||||||
#endif // HAVE_CONFIG_H
|
#endif // HAVE_CONFIG_H
|
||||||
|
|
||||||
#include <X11/Xlib.h>
|
|
||||||
#include <X11/Xatom.h>
|
|
||||||
|
|
||||||
#include "i18n.h"
|
|
||||||
#include "openbox.h"
|
|
||||||
#include "Clientmenu.h"
|
|
||||||
#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
|
#ifdef HAVE_STDIO_H
|
||||||
# include <stdio.h>
|
# include <stdio.h>
|
||||||
#endif // HAVE_STDIO_H
|
#endif // HAVE_STDIO_H
|
||||||
|
@ -58,6 +43,20 @@
|
||||||
# include <string.h>
|
# include <string.h>
|
||||||
#endif // HAVE_STRING_H
|
#endif // HAVE_STRING_H
|
||||||
|
|
||||||
|
#include <X11/Xlib.h>
|
||||||
|
#include <X11/Xatom.h>
|
||||||
|
|
||||||
|
#include "i18n.h"
|
||||||
|
#include "openbox.h"
|
||||||
|
#include "Clientmenu.h"
|
||||||
|
#include "Screen.h"
|
||||||
|
#include "Toolbar.h"
|
||||||
|
#include "Window.h"
|
||||||
|
#include "Workspace.h"
|
||||||
|
#include "Windowmenu.h"
|
||||||
|
#include "Geometry.h"
|
||||||
|
#include "Util.h"
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
typedef std::vector<Rect> rectList;
|
typedef std::vector<Rect> rectList;
|
||||||
|
@ -67,8 +66,6 @@ Workspace::Workspace(BScreen &scrn, int i) : screen(scrn) {
|
||||||
_focused = (OpenboxWindow *) 0;
|
_focused = (OpenboxWindow *) 0;
|
||||||
id = i;
|
id = i;
|
||||||
|
|
||||||
stackingList = new LinkedList<OpenboxWindow>;
|
|
||||||
windowList = new LinkedList<OpenboxWindow>;
|
|
||||||
clientmenu = new Clientmenu(*this);
|
clientmenu = new Clientmenu(*this);
|
||||||
|
|
||||||
lastfocus = (OpenboxWindow *) 0;
|
lastfocus = (OpenboxWindow *) 0;
|
||||||
|
@ -80,8 +77,6 @@ Workspace::Workspace(BScreen &scrn, int i) : screen(scrn) {
|
||||||
|
|
||||||
|
|
||||||
Workspace::~Workspace(void) {
|
Workspace::~Workspace(void) {
|
||||||
delete stackingList;
|
|
||||||
delete windowList;
|
|
||||||
delete clientmenu;
|
delete clientmenu;
|
||||||
|
|
||||||
if (name)
|
if (name)
|
||||||
|
@ -95,10 +90,10 @@ const int Workspace::addWindow(OpenboxWindow *w, Bool place) {
|
||||||
if (place) placeWindow(*w);
|
if (place) placeWindow(*w);
|
||||||
|
|
||||||
w->setWorkspace(id);
|
w->setWorkspace(id);
|
||||||
w->setWindowNumber(windowList->count());
|
w->setWindowNumber(_windows.size());
|
||||||
|
|
||||||
stackingList->insert(w, 0);
|
_zorder.push_front(w);
|
||||||
windowList->insert(w);
|
_windows.push_back(w);
|
||||||
|
|
||||||
clientmenu->insert((const char **) w->getTitle());
|
clientmenu->insert((const char **) w->getTitle());
|
||||||
clientmenu->update();
|
clientmenu->update();
|
||||||
|
@ -114,7 +109,7 @@ const int Workspace::addWindow(OpenboxWindow *w, Bool place) {
|
||||||
const int Workspace::removeWindow(OpenboxWindow *w) {
|
const int Workspace::removeWindow(OpenboxWindow *w) {
|
||||||
if (! w) return -1;
|
if (! w) return -1;
|
||||||
|
|
||||||
stackingList->remove(w);
|
_zorder.remove(w);
|
||||||
|
|
||||||
if (w->isFocused()) {
|
if (w->isFocused()) {
|
||||||
if (w->isTransient() && w->getTransientFor() &&
|
if (w->isTransient() && w->getTransientFor() &&
|
||||||
|
@ -123,8 +118,7 @@ const int Workspace::removeWindow(OpenboxWindow *w) {
|
||||||
} else if (screen.sloppyFocus()) {
|
} else if (screen.sloppyFocus()) {
|
||||||
screen.getOpenbox().focusWindow((OpenboxWindow *) 0);
|
screen.getOpenbox().focusWindow((OpenboxWindow *) 0);
|
||||||
} else {
|
} else {
|
||||||
OpenboxWindow *top = stackingList->first();
|
if (_zorder.empty() || !_zorder.front()->setInputFocus()) {
|
||||||
if (! top || ! top->setInputFocus()) {
|
|
||||||
screen.getOpenbox().focusWindow((OpenboxWindow *) 0);
|
screen.getOpenbox().focusWindow((OpenboxWindow *) 0);
|
||||||
XSetInputFocus(screen.getOpenbox().getXDisplay(),
|
XSetInputFocus(screen.getOpenbox().getXDisplay(),
|
||||||
screen.getToolbar()->getWindowID(),
|
screen.getToolbar()->getWindowID(),
|
||||||
|
@ -136,18 +130,17 @@ const int Workspace::removeWindow(OpenboxWindow *w) {
|
||||||
if (lastfocus == w)
|
if (lastfocus == w)
|
||||||
lastfocus = (OpenboxWindow *) 0;
|
lastfocus = (OpenboxWindow *) 0;
|
||||||
|
|
||||||
windowList->remove(w->getWindowNumber());
|
_windows.erase(_windows.begin() + w->getWindowNumber());
|
||||||
clientmenu->remove(w->getWindowNumber());
|
clientmenu->remove(w->getWindowNumber());
|
||||||
clientmenu->update();
|
clientmenu->update();
|
||||||
|
|
||||||
screen.updateNetizenWindowDel(w->getClientWindow());
|
screen.updateNetizenWindowDel(w->getClientWindow());
|
||||||
|
|
||||||
LinkedListIterator<OpenboxWindow> it(windowList);
|
winVect::iterator it = _windows.begin();
|
||||||
OpenboxWindow *bw = it.current();
|
for (int i=0; it != _windows.end(); ++it, ++i)
|
||||||
for (int i = 0; bw; it++, i++, bw = it.current())
|
(*it)->setWindowNumber(i);
|
||||||
bw->setWindowNumber(i);
|
|
||||||
|
|
||||||
return windowList->count();
|
return _windows.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -161,30 +154,24 @@ void Workspace::focusWindow(OpenboxWindow *win) {
|
||||||
|
|
||||||
|
|
||||||
void Workspace::showAll(void) {
|
void Workspace::showAll(void) {
|
||||||
LinkedListIterator<OpenboxWindow> it(stackingList);
|
winList::iterator it;
|
||||||
for (OpenboxWindow *bw = it.current(); bw; it++, bw = it.current())
|
for (it = _zorder.begin(); it != _zorder.end(); ++it)
|
||||||
bw->deiconify(False, False);
|
(*it)->deiconify(false, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Workspace::hideAll(void) {
|
void Workspace::hideAll(void) {
|
||||||
LinkedList<OpenboxWindow> lst;
|
winList::reverse_iterator it;
|
||||||
|
for (it = _zorder.rbegin(); it != _zorder.rend(); ++it)
|
||||||
LinkedListIterator<OpenboxWindow> it(stackingList);
|
if (!(*it)->isStuck())
|
||||||
for (OpenboxWindow *bw = it.current(); bw; it++, bw = it.current())
|
(*it)->withdraw();
|
||||||
lst.insert(bw, 0);
|
|
||||||
|
|
||||||
LinkedListIterator<OpenboxWindow> it2(&lst);
|
|
||||||
for (OpenboxWindow *bw = it2.current(); bw; it2++, bw = it2.current())
|
|
||||||
if (! bw->isStuck())
|
|
||||||
bw->withdraw();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Workspace::removeAll(void) {
|
void Workspace::removeAll(void) {
|
||||||
LinkedListIterator<OpenboxWindow> it(windowList);
|
winVect::iterator it;
|
||||||
for (OpenboxWindow *bw = it.current(); bw; it++, bw = it.current())
|
for (it = _windows.begin(); it != _windows.end(); ++it)
|
||||||
bw->iconify();
|
(*it)->iconify();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -212,8 +199,8 @@ void Workspace::raiseWindow(OpenboxWindow *w) {
|
||||||
|
|
||||||
if (! win->isIconic()) {
|
if (! win->isIconic()) {
|
||||||
wkspc = screen.getWorkspace(win->getWorkspaceNumber());
|
wkspc = screen.getWorkspace(win->getWorkspaceNumber());
|
||||||
wkspc->stackingList->remove(win);
|
wkspc->_zorder.remove(win);
|
||||||
wkspc->stackingList->insert(win, 0);
|
wkspc->_zorder.push_front(win);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (! win->hasTransient() || ! win->getTransient())
|
if (! win->hasTransient() || ! win->getTransient())
|
||||||
|
@ -251,8 +238,8 @@ void Workspace::lowerWindow(OpenboxWindow *w) {
|
||||||
|
|
||||||
if (! win->isIconic()) {
|
if (! win->isIconic()) {
|
||||||
wkspc = screen.getWorkspace(win->getWorkspaceNumber());
|
wkspc = screen.getWorkspace(win->getWorkspaceNumber());
|
||||||
wkspc->stackingList->remove(win);
|
wkspc->_zorder.remove(win);
|
||||||
wkspc->stackingList->insert(win);
|
wkspc->_zorder.push_back(win);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (! win->getTransientFor())
|
if (! win->getTransientFor())
|
||||||
|
@ -275,24 +262,23 @@ void Workspace::lowerWindow(OpenboxWindow *w) {
|
||||||
void Workspace::reconfigure(void) {
|
void Workspace::reconfigure(void) {
|
||||||
clientmenu->reconfigure();
|
clientmenu->reconfigure();
|
||||||
|
|
||||||
LinkedListIterator<OpenboxWindow> it(windowList);
|
winVect::iterator it;
|
||||||
for (OpenboxWindow *bw = it.current(); bw; it++, bw = it.current()) {
|
for (it = _windows.begin(); it != _windows.end(); ++it)
|
||||||
if (bw->validateClient())
|
if ((*it)->validateClient())
|
||||||
bw->reconfigure();
|
(*it)->reconfigure();
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
OpenboxWindow *Workspace::getWindow(int index) {
|
OpenboxWindow *Workspace::getWindow(int index) {
|
||||||
if ((index >= 0) && (index < windowList->count()))
|
if ((index >= 0) && (index < _windows.size()))
|
||||||
return windowList->find(index);
|
return _windows[index];
|
||||||
else
|
else
|
||||||
return 0;
|
return (OpenboxWindow *) 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const int Workspace::getCount(void) {
|
const int Workspace::getCount(void) {
|
||||||
return windowList->count();
|
return _windows.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -307,10 +293,6 @@ Bool Workspace::isCurrent(void) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Bool Workspace::isLastWindow(OpenboxWindow *w) {
|
|
||||||
return (w == windowList->last());
|
|
||||||
}
|
|
||||||
|
|
||||||
void Workspace::setCurrent(void) {
|
void Workspace::setCurrent(void) {
|
||||||
screen.changeWorkspaceID(id);
|
screen.changeWorkspaceID(id);
|
||||||
}
|
}
|
||||||
|
@ -335,9 +317,9 @@ void Workspace::setName(char *new_name) {
|
||||||
|
|
||||||
|
|
||||||
void Workspace::shutdown(void) {
|
void Workspace::shutdown(void) {
|
||||||
while (windowList->count()) {
|
while (!_windows.empty()) {
|
||||||
windowList->first()->restore();
|
_windows[0]->restore();
|
||||||
delete windowList->first();
|
_windows.erase(_windows.begin());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -435,14 +417,12 @@ bool colRLBT(const Rect &first, const Rect &second){
|
||||||
Point *Workspace::bestFitPlacement(const Size &win_size, const Rect &space) {
|
Point *Workspace::bestFitPlacement(const Size &win_size, const Rect &space) {
|
||||||
const Rect *best;
|
const Rect *best;
|
||||||
rectList spaces;
|
rectList spaces;
|
||||||
LinkedListIterator<OpenboxWindow> it(windowList);
|
|
||||||
rectList::const_iterator siter;
|
rectList::const_iterator siter;
|
||||||
spaces.push_back(space); //initially the entire screen is free
|
spaces.push_back(space); //initially the entire screen is free
|
||||||
it.reset();
|
|
||||||
|
|
||||||
//Find Free Spaces
|
//Find Free Spaces
|
||||||
for (OpenboxWindow *cur=it.current(); cur!=NULL; it++, cur=it.current())
|
for (winVect::iterator it = _windows.begin(); it != _windows.end(); ++it)
|
||||||
spaces = calcSpace(cur->area().Inflate(screen.getBorderWidth() * 4),
|
spaces = calcSpace((*it)->area().Inflate(screen.getBorderWidth() * 4),
|
||||||
spaces);
|
spaces);
|
||||||
|
|
||||||
//Find first space that fits the window
|
//Find first space that fits the window
|
||||||
|
@ -490,15 +470,13 @@ Point *Workspace::underMousePlacement(const Size &win_size, const Rect &space) {
|
||||||
Point *Workspace::rowSmartPlacement(const Size &win_size, const Rect &space) {
|
Point *Workspace::rowSmartPlacement(const Size &win_size, const Rect &space) {
|
||||||
const Rect *best;
|
const Rect *best;
|
||||||
rectList spaces;
|
rectList spaces;
|
||||||
LinkedListIterator<OpenboxWindow> it(windowList);
|
|
||||||
|
|
||||||
rectList::const_iterator siter;
|
rectList::const_iterator siter;
|
||||||
spaces.push_back(space); //initially the entire screen is free
|
spaces.push_back(space); //initially the entire screen is free
|
||||||
it.reset();
|
|
||||||
|
|
||||||
//Find Free Spaces
|
//Find Free Spaces
|
||||||
for (OpenboxWindow *cur=it.current(); cur!=NULL; it++, cur=it.current())
|
for (winVect::iterator it = _windows.begin(); it != _windows.end(); ++it)
|
||||||
spaces = calcSpace(cur->area().Inflate(screen.getBorderWidth() * 4),
|
spaces = calcSpace((*it)->area().Inflate(screen.getBorderWidth() * 4),
|
||||||
spaces);
|
spaces);
|
||||||
//Sort spaces by preference
|
//Sort spaces by preference
|
||||||
if(screen.rowPlacementDirection() == BScreen::RightLeft)
|
if(screen.rowPlacementDirection() == BScreen::RightLeft)
|
||||||
|
@ -532,15 +510,13 @@ Point *Workspace::rowSmartPlacement(const Size &win_size, const Rect &space) {
|
||||||
Point *Workspace::colSmartPlacement(const Size &win_size, const Rect &space) {
|
Point *Workspace::colSmartPlacement(const Size &win_size, const Rect &space) {
|
||||||
const Rect *best;
|
const Rect *best;
|
||||||
rectList spaces;
|
rectList spaces;
|
||||||
LinkedListIterator<OpenboxWindow> it(windowList);
|
|
||||||
|
|
||||||
rectList::const_iterator siter;
|
rectList::const_iterator siter;
|
||||||
spaces.push_back(space); //initially the entire screen is free
|
spaces.push_back(space); //initially the entire screen is free
|
||||||
it.reset();
|
|
||||||
|
|
||||||
//Find Free Spaces
|
//Find Free Spaces
|
||||||
for (OpenboxWindow *cur=it.current(); cur!=NULL; it++, cur=it.current())
|
for (winVect::iterator it = _windows.begin(); it != _windows.end(); ++it)
|
||||||
spaces = calcSpace(cur->area().Inflate(screen.getBorderWidth() * 4),
|
spaces = calcSpace((*it)->area().Inflate(screen.getBorderWidth() * 4),
|
||||||
spaces);
|
spaces);
|
||||||
//Sort spaces by user preference
|
//Sort spaces by user preference
|
||||||
if(screen.colPlacementDirection() == BScreen::TopBottom)
|
if(screen.colPlacementDirection() == BScreen::TopBottom)
|
||||||
|
@ -598,7 +574,6 @@ void Workspace::placeWindow(OpenboxWindow &win) {
|
||||||
const Size window_size(win.area().w()+screen.getBorderWidth() * 2,
|
const Size window_size(win.area().w()+screen.getBorderWidth() * 2,
|
||||||
win.area().h()+screen.getBorderWidth() * 2);
|
win.area().h()+screen.getBorderWidth() * 2);
|
||||||
Point *place = NULL;
|
Point *place = NULL;
|
||||||
LinkedListIterator<OpenboxWindow> it(windowList);
|
|
||||||
|
|
||||||
switch (screen.placementPolicy()) {
|
switch (screen.placementPolicy()) {
|
||||||
case BScreen::BestFitPlacement:
|
case BScreen::BestFitPlacement:
|
||||||
|
|
|
@ -25,7 +25,8 @@
|
||||||
|
|
||||||
#include <X11/Xlib.h>
|
#include <X11/Xlib.h>
|
||||||
|
|
||||||
#include "LinkedList.h"
|
#include <vector>
|
||||||
|
#include <list>
|
||||||
|
|
||||||
class BScreen;
|
class BScreen;
|
||||||
class Clientmenu;
|
class Clientmenu;
|
||||||
|
@ -34,13 +35,17 @@ class OpenboxWindow;
|
||||||
class Size;
|
class Size;
|
||||||
class Rect;
|
class Rect;
|
||||||
|
|
||||||
|
typedef std::vector<OpenboxWindow *> winVect;
|
||||||
|
typedef std::list<OpenboxWindow *> winList;
|
||||||
|
|
||||||
class Workspace {
|
class Workspace {
|
||||||
private:
|
private:
|
||||||
BScreen &screen;
|
BScreen &screen;
|
||||||
OpenboxWindow *lastfocus;
|
OpenboxWindow *lastfocus;
|
||||||
Clientmenu *clientmenu;
|
Clientmenu *clientmenu;
|
||||||
|
|
||||||
LinkedList<OpenboxWindow> *stackingList, *windowList;
|
winVect _windows;
|
||||||
|
winList _zorder;
|
||||||
|
|
||||||
char *name;
|
char *name;
|
||||||
int id, cascade_x, cascade_y;
|
int id, cascade_x, cascade_y;
|
||||||
|
@ -69,7 +74,6 @@ public:
|
||||||
void focusWindow(OpenboxWindow *win);
|
void focusWindow(OpenboxWindow *win);
|
||||||
OpenboxWindow *getWindow(int);
|
OpenboxWindow *getWindow(int);
|
||||||
Bool isCurrent(void);
|
Bool isCurrent(void);
|
||||||
Bool isLastWindow(OpenboxWindow *);
|
|
||||||
const int addWindow(OpenboxWindow *, Bool = False);
|
const int addWindow(OpenboxWindow *, Bool = False);
|
||||||
const int removeWindow(OpenboxWindow *);
|
const int removeWindow(OpenboxWindow *);
|
||||||
const int getCount(void);
|
const int getCount(void);
|
||||||
|
|
Loading…
Reference in a new issue