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();
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
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";