# include <string.h>
#endif // HAVE_STRING_H
-#include <vector>
#include <algorithm>
-typedef vector<Rect> rectList;
+#include <vector>
+typedef std::vector<Rect> rectList;
Workspace::Workspace(BScreen &scrn, int i) : screen(scrn) {
-
cascade_x = cascade_y = 0;
-
+ _focused = (OpenboxWindow *) 0;
id = i;
stackingList = new LinkedList<OpenboxWindow>;
w->getTransientFor()->isVisible()) {
w->getTransientFor()->setInputFocus();
} else if (screen.sloppyFocus()) {
- screen.getOpenbox().setFocusedWindow((OpenboxWindow *) 0);
+ screen.getOpenbox().focusWindow((OpenboxWindow *) 0);
} else {
OpenboxWindow *top = stackingList->first();
if (! top || ! top->setInputFocus()) {
- screen.getOpenbox().setFocusedWindow((OpenboxWindow *) 0);
+ screen.getOpenbox().focusWindow((OpenboxWindow *) 0);
XSetInputFocus(screen.getOpenbox().getXDisplay(),
screen.getToolbar()->getWindowID(),
RevertToParent, CurrentTime);
}
+void Workspace::focusWindow(OpenboxWindow *win) {
+ if (win != (OpenboxWindow *) 0)
+ clientmenu->setItemSelected(win->getWindowNumber(), true);
+ if (_focused != (OpenboxWindow *) 0)
+ clientmenu->setItemSelected(_focused->getWindowNumber(), false);
+ _focused = win;
+}
+
+
void Workspace::showAll(void) {
LinkedListIterator<OpenboxWindow> it(stackingList);
for (OpenboxWindow *bw = it.current(); bw; it++, bw = it.current())
bool colLRTB(const Rect &first, const Rect &second){
if (first.x()==second.x())
return first.y()<second.y();
- return first.x()<second.y();
+ return first.x()<second.x();
}
bool colLRBT(const Rect &first, const Rect &second){
if (first.x()==second.x())
return first.y()+first.h()>second.y()+second.h();
- return first.x()<second.y();
+ return first.x()<second.x();
}
bool colRLTB(const Rect &first, const Rect &second){
for (siter=spaces.begin(); siter!=spaces.end(); ++siter) {
if ((siter->w() >= win_size.w()) && (siter->h() >= win_size.h())) {
if (best==NULL)
- best = siter;
+ best = &*siter;
else if(siter->w()*siter->h()<best->h()*best->w())
- best = siter;
+ best = &*siter;
}
}
if (best != NULL) {
best = NULL;
for (siter=spaces.begin(); siter!=spaces.end(); ++siter)
if ((siter->w() >= win_size.w()) && (siter->h() >= win_size.h())) {
- best = siter;
+ best = &*siter;
break;
}
sort(spaces.begin(),spaces.end(),colLRBT);
else
sort(spaces.begin(),spaces.end(),colRLBT);
- fprintf(stderr,"Spaces after sorting\n");
- for (siter=spaces.begin(); siter!=spaces.end(); ++siter)
- fprintf(stderr,"space(%d,%d)(%d,%d)\n",siter->x(),siter->y(),
- siter->x()+siter->w(),siter->y()+siter->h());
+
//Find first space that fits the window
best = NULL;
for (siter=spaces.begin(); siter!=spaces.end(); ++siter)
if ((siter->w() >= win_size.w()) && (siter->h() >= win_size.h())) {
- best = siter;
+ best = &*siter;
break;
}