]> Dogcows Code - chaz/openbox/blobdiff - src/Workspace.cc
better gcc3 compat. using ostrstream again. and using namespace std;
[chaz/openbox] / src / Workspace.cc
index b39769e9e9f91c8abe8d05db9725b86db3211a31..d87373481e061776dd101e82c04b49c8bcccdc6a 100644 (file)
 #  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>;
@@ -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<OpenboxWindow> 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();
-  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){
@@ -442,9 +450,9 @@ Point *Workspace::bestFitPlacement(const Size &win_size, const Rect &space) {
   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) {
@@ -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
This page took 0.027009 seconds and 4 git commands to generate.