]> Dogcows Code - chaz/openbox/blobdiff - src/Workspace.cc
add for ClickMousePlacement
[chaz/openbox] / src / Workspace.cc
index 5c38cf05b9ecf47b8ebb6e15c5dc20abbb9f9692..843f81008ac91b6899c66c1be98d641b779f47fa 100644 (file)
@@ -79,22 +79,28 @@ void Workspace::addWindow(BlackboxWindow *w, bool place) {
 
   if (place) placeWindow(w);
 
-  w->setWorkspace(id);
-  w->setWindowNumber(windowList.size());
-
   stackingList.push_front(w);
-  windowList.push_back(w);
+    
+  if (w->isNormal()) {
+    w->setWorkspace(id);
+    w->setWindowNumber(windowList.size());
 
-  clientmenu->insert(w->getTitle());
-  clientmenu->update();
+    windowList.push_back(w);
+
+    clientmenu->insert(w->getTitle());
+    clientmenu->update();
 
-  screen->updateNetizenWindowAdd(w->getClientWindow(), id);
+    screen->updateNetizenWindowAdd(w->getClientWindow(), id);
+  }
 
-  raiseWindow(w);
+  if (! w->isDesktop())
+    raiseWindow(w);
+  else
+    lowerWindow(w);
 }
 
 
-unsigned int Workspace::removeWindow(BlackboxWindow *w) {
+void Workspace::removeWindow(BlackboxWindow *w) {
   assert(w != 0);
 
   stackingList.remove(w);
@@ -113,6 +119,8 @@ unsigned int Workspace::removeWindow(BlackboxWindow *w) {
     }
   }
 
+  if (! w->isNormal()) return;
+
   windowList.remove(w);
   clientmenu->remove(w->getWindowNumber());
   clientmenu->update();
@@ -127,8 +135,6 @@ unsigned int Workspace::removeWindow(BlackboxWindow *w) {
 
   if (i == 0)
     cascade_x = cascade_y = 32;
-
-  return i;
 }
 
 
@@ -154,10 +160,7 @@ void Workspace::focusFallback(const BlackboxWindow *old_window) {
                                   end = stackingList.end();
       for (; it != end; ++it) {
         BlackboxWindow *tmp = *it;
-        if (! (tmp->windowType() == BlackboxWindow::Type_Dialog ||
-               tmp->windowType() == BlackboxWindow::Type_Normal))
-          continue; // don't fallback to special windows
-        if (tmp && tmp->setInputFocus()) {
+        if (tmp && tmp->isNormal() && tmp->setInputFocus()) {
           // we found our new focus target
           newfocus = tmp;
           break;
@@ -281,8 +284,10 @@ void Workspace::lowerTransients(const BlackboxWindow * const win,
 void Workspace::raiseWindow(BlackboxWindow *w) {
   BlackboxWindow *win = w;
 
+  if (win->isDesktop()) return;
+
   // walk up the transient_for's to the window that is not a transient
-  while (win->isTransient()) {
+  while (win->isTransient() && ! win->isDesktop()) {
     if (! win->getTransientFor()) break;
     win = win->getTransientFor();
   }
@@ -296,7 +301,7 @@ void Workspace::raiseWindow(BlackboxWindow *w) {
 
   *(stack++) = win->getFrameWindow();
   screen->updateNetizenWindowRaise(win->getClientWindow());
-  if (! win->isIconic()) {
+  if (! (win->isIconic() || win->isDesktop())) {
     Workspace *wkspc = screen->getWorkspace(win->getWorkspaceNumber());
     wkspc->stackingList.remove(win);
     wkspc->stackingList.push_front(win);
@@ -312,7 +317,7 @@ void Workspace::lowerWindow(BlackboxWindow *w) {
   BlackboxWindow *win = w;
 
   // walk up the transient_for's to the window that is not a transient
-  while (win->isTransient()) {
+  while (win->isTransient() && ! win->isDesktop()) {
     if (! win->getTransientFor()) break;
     win = win->getTransientFor();
   }
@@ -328,7 +333,7 @@ void Workspace::lowerWindow(BlackboxWindow *w) {
 
   *(stack++) = win->getFrameWindow();
   screen->updateNetizenWindowLower(win->getClientWindow());
-  if (! win->isIconic()) {
+  if (! (win->isIconic() || win->isDesktop())) {
     Workspace *wkspc = screen->getWorkspace(win->getWorkspaceNumber());
     wkspc->stackingList.remove(win);
     wkspc->stackingList.push_back(win);
@@ -694,6 +699,7 @@ void Workspace::placeWindow(BlackboxWindow *win) {
     placed = smartPlacement(new_win, availableArea);
     break;
   case BScreen::UnderMousePlacement:
+  case BScreen::ClickMousePlacement:
     placed = underMousePlacement(new_win, availableArea);
   default:
     break; // handled below
This page took 0.024453 seconds and 4 git commands to generate.