]> Dogcows Code - chaz/openbox/blobdiff - util/epist/screen.cc
unignore yacc/lex generated files. we don't want to ignore these.
[chaz/openbox] / util / epist / screen.cc
index c3ea4fb5f0e51ff6ef71105669f9286d30c19d0c..5711d5515646beb7f1373d39bd8f5b94db24ffae 100644 (file)
@@ -149,7 +149,9 @@ void screen::processEvent(const XEvent &e) {
                                  DestroyNotify, &ev) ||
           XCheckTypedWindowEvent(_epist->getXDisplay(), e.xany.window,
                                  UnmapNotify, &ev)) {
-        processEvent(ev);
+
+        XWindow *win = _epist->findWindow(e.xany.window);
+        if (win) win->processEvent(ev);
       }
 
       updateClientList();
@@ -472,14 +474,9 @@ void screen::updateClientList() {
     if (it == end) {  // didn't already exist
       if (doAddWindow(rootclients[i])) {
 //        cout << "Added window: 0x" << hex << rootclients[i] << dec << endl;
-        if (_stacked_cycling) {
-          // insert new clients after the active window
-          _clients.insert(insert_point, new XWindow(_epist, this,
-                                                    rootclients[i]));
-        } else {
-          // insert new clients at the front of the list
-          _clients.push_front(new XWindow(_epist, this, rootclients[i]));
-        }
+        // insert new clients after the active window
+        _clients.insert(insert_point, new XWindow(_epist, this,
+                                                  rootclients[i]));
       }
     }
   }
@@ -520,7 +517,9 @@ const XWindow *screen::lastActiveWindow() const {
   WindowList::const_iterator it, end = _clients.end();
   for (it = _clients.begin(); it != end; ++it)
     if ((*it)->getScreen() == this && ! (*it)->iconic() &&
-        ((*it)->desktop() == 0xffffffff || (*it)->desktop() == _active_desktop))
+        (*it)->canFocus() &&
+        ((*it)->desktop() == 0xffffffff ||
+         (*it)->desktop() == _active_desktop))
       return *it;
 
   // no windows on this screen
@@ -554,9 +553,9 @@ void screen::updateActiveWindow() {
       _clients.remove(win);
       _clients.push_front(win);
       _active = _clients.begin();
-    }
 
-    _last_active = _active;
+      _last_active = _active;
+    }
   }
 
   /*  cout << "Active window is now: ";
@@ -569,6 +568,12 @@ void screen::updateActiveWindow() {
 void screen::execCommand(const string &cmd) const {
   pid_t pid;
   if ((pid = fork()) == 0) {
+    // disconnect the child from epist's session and the tty
+    if (setsid() == -1) {
+      cout << "warning: could not start a new process group\n";
+      perror("setsid");
+    }
+
     // make the command run on the correct screen
     if (putenv(const_cast<char*>(_info->displayString().c_str()))) {
       cout << "warning: couldn't set environment variable 'DISPLAY'\n";
This page took 0.020624 seconds and 4 git commands to generate.