]> Dogcows Code - chaz/openbox/blobdiff - src/Workspace.cc
modified focus() to accept a no-raise parameter
[chaz/openbox] / src / Workspace.cc
index 7cd21f1c281f0187916bc88c58ac60b90407e134..715d012e6b50c48da83749895205e9673ac931ab 100644 (file)
@@ -84,12 +84,19 @@ void Workspace::addWindow(BlackboxWindow *w, bool place, bool sticky) {
   if (place) placeWindow(w);
 
   stackingList.push_front(w);
-    
-  if (w->isNormal()) {
+
+  if (! sticky)
+    w->setWorkspace(id);
+  
+  if (! w->isNormal()) {
     if (! sticky) {
-      w->setWorkspace(id);
-      w->setWindowNumber(windowList.size());
+      // just give it some number, else bad things happen as it is assumed to
+      // not be on a workspace
+      w->setWindowNumber(0);
     }
+  } else {
+    if (! sticky)
+      w->setWindowNumber(windowList.size());
 
     windowList.push_back(w);
 
@@ -101,9 +108,7 @@ void Workspace::addWindow(BlackboxWindow *w, bool place, bool sticky) {
 
     if (screen->doFocusNew() || (w->isTransient() && w->getTransientFor() &&
                                  w->getTransientFor()->isFocused())) {
-      if (id == screen->getCurrentWorkspaceID())
-        w->setInputFocus();
-      else {
+      if (id != screen->getCurrentWorkspaceID()) {
         /*
            not on the focused workspace, so the window is not going to get focus
            but if the user wants new windows focused, then it should get focus
@@ -227,6 +232,36 @@ void Workspace::removeAll(void) {
     windowList.front()->iconify();
 }
 
+void Workspace::showAll(void) {
+  BlackboxWindowList::iterator it = stackingList.begin();
+  const BlackboxWindowList::iterator end = stackingList.end();
+  for (; it != end; ++it) {
+    BlackboxWindow *bw = *it;
+    // not normal windows cant focus from mouse enters anyways, so we dont
+    // need to unmap/remap them on workspace changes
+    if (! bw->isStuck() || bw->isNormal())
+      bw->show();
+  }
+}
+
+
+void Workspace::hideAll(void) {
+  // withdraw in reverse order to minimize the number of Expose events
+
+  BlackboxWindowList lst(stackingList.rbegin(), stackingList.rend());
+
+  BlackboxWindowList::iterator it = lst.begin();
+  const BlackboxWindowList::iterator end = lst.end();
+  for (; it != end; ++it) {
+    BlackboxWindow *bw = *it;
+    // not normal windows cant focus from mouse enters anyways, so we dont
+    // need to unmap/remap them on workspace changes
+    if (! bw->isStuck() || bw->isNormal())
+      bw->withdraw();
+  }
+}
+
+
 
 /*
  * returns the number of transients for win, plus the number of transients
@@ -430,50 +465,6 @@ void Workspace::appendStackOrder(BlackboxWindowList &stack_order) const {
     if ((*it)->isNormal())
       stack_order.push_back(*it);
 }
-  
-
-void Workspace::hide(void) {
-  BlackboxWindow *focused = screen->getBlackbox()->getFocusedWindow();
-  if (focused && focused->getScreen() == screen) {
-    assert(focused->isStuck() || focused->getWorkspaceNumber() == id);
-
-    lastfocus = focused;
-  } else {
-    // if no window had focus, no need to store a last focus
-    lastfocus = (BlackboxWindow *) 0;
-  }
-
-  // when we switch workspaces, unfocus whatever was focused
-  screen->getBlackbox()->setFocusedWindow((BlackboxWindow *) 0);
-
-  // withdraw windows in reverse order to minimize the number of Expose events
-
-  BlackboxWindowList::reverse_iterator it = stackingList.rbegin();
-  const BlackboxWindowList::reverse_iterator end = stackingList.rend();
-  for (; it != end; ++it) {
-    BlackboxWindow *bw = *it;
-    // not normal windows cant focus from mouse enters anyways, so we dont
-    // need to unmap/remap them on workspace changes
-    if (! bw->isStuck() || bw->isNormal())
-      bw->withdraw();
-  }
-}
-
-
-void Workspace::show(void) {
-  std::for_each(stackingList.begin(), stackingList.end(),
-                std::mem_fun(&BlackboxWindow::show));
-
-  XSync(screen->getBlackbox()->getXDisplay(), False);
-
-  if (screen->doFocusLast()) {
-    if (! screen->isSloppyFocus() && ! lastfocus && ! stackingList.empty())
-      lastfocus = stackingList.front();
-
-    if (lastfocus)
-      lastfocus->setInputFocus();
-  }
-}
 
 
 bool Workspace::isCurrent(void) const {
This page took 0.022687 seconds and 4 git commands to generate.