]> Dogcows Code - chaz/openbox/blobdiff - util/epist/screen.cc
make lastActiveWindow more intelligent
[chaz/openbox] / util / epist / screen.cc
index 56f64f0cee662665269a9a5bde374525eee56397..2c1da1ae53054e2c26c4b68ad7aa03ff47dfd8dc 100644 (file)
@@ -421,7 +421,8 @@ const XWindow *screen::lastActiveWindow() const {
   // find a window if one exists
   WindowList::const_iterator it, end = _clients.end();
   for (it = _clients.begin(); it != end; ++it)
-    if ((*it)->getScreen() == this)
+    if ((*it)->getScreen() == this && ! (*it)->iconic() &&
+        ((*it)->desktop() == 0xffffffff || (*it)->desktop() == _active_desktop))
       return *it;
 
   // no windows on this screen
@@ -444,7 +445,8 @@ void screen::updateActiveWindow() {
     }
   }
   _active = it;
-  _last_active = it;
+  if (it != end)
+    _last_active = it;
 
 /*  cout << "Active window is now: ";
   if (_active == _clients.end()) cout << "None\n";
@@ -453,7 +455,7 @@ void screen::updateActiveWindow() {
 }
 
 
-void screen::execCommand(const std::string &cmd) const {
+void screen::execCommand(const string &cmd) const {
   pid_t pid;
   if ((pid = fork()) == 0) {
     extern char **environ;
@@ -514,7 +516,9 @@ void screen::cycleWindow(const bool forward, const bool allscreens,
       return;
   } while ((*target)->iconic() ||
            (! allscreens && (*target)->getScreen() != this) ||
-           (! alldesktops && (*target)->desktop() != _active_desktop) ||
+           (! alldesktops &&
+            (*target)->desktop() != _active_desktop &&
+            (*target)->desktop() != 0xffffffff) ||
            (sameclass && ! classname.empty() &&
             (*target)->appClass() != classname));
   
This page took 0.024484 seconds and 4 git commands to generate.