X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2FWorkspace.cc;h=d87373481e061776dd101e82c04b49c8bcccdc6a;hb=098fae70a6d8d15877938080437f0fc20f52bbf5;hp=b39769e9e9f91c8abe8d05db9725b86db3211a31;hpb=ad7f61121cffae9773425cd0e3a53717be7a68a7;p=chaz%2Fopenbox diff --git a/src/Workspace.cc b/src/Workspace.cc index b39769e9..d8737348 100644 --- a/src/Workspace.cc +++ b/src/Workspace.cc @@ -58,14 +58,13 @@ # include #endif // HAVE_STRING_H -#include #include -typedef vector rectList; +#include +typedef std::vector rectList; Workspace::Workspace(BScreen &scrn, int i) : screen(scrn) { - cascade_x = cascade_y = 0; - + _focused = (OpenboxWindow *) 0; id = i; stackingList = new LinkedList; @@ -122,11 +121,11 @@ const int Workspace::removeWindow(OpenboxWindow *w) { 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); @@ -152,6 +151,15 @@ const int Workspace::removeWindow(OpenboxWindow *w) { } +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 it(stackingList); for (OpenboxWindow *bw = it.current(); bw; it++, bw = it.current()) @@ -399,13 +407,13 @@ bool rowLRTB(const Rect &first, const Rect &second){ bool colLRTB(const Rect &first, const Rect &second){ if (first.x()==second.x()) return first.y()second.y()+second.h(); - return first.x()w() >= win_size.w()) && (siter->h() >= win_size.h())) { if (best==NULL) - best = siter; + best = &*siter; else if(siter->w()*siter->h()h()*best->w()) - best = siter; + best = &*siter; } } if (best != NULL) { @@ -506,7 +514,7 @@ Point *Workspace::rowSmartPlacement(const Size &win_size, const Rect &space) { 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; } @@ -545,15 +553,12 @@ Point *Workspace::colSmartPlacement(const Size &win_size, const Rect &space) { 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; } @@ -606,6 +611,7 @@ void Workspace::placeWindow(OpenboxWindow &win) { place = colSmartPlacement(window_size, space); break; case BScreen::UnderMousePlacement: + case BScreen::ClickMousePlacement: place = underMousePlacement(window_size, space); break; } // switch