From: Marco Peereboom Date: Wed, 28 Jan 2009 17:46:55 +0000 (+0000) Subject: open /dev/null on stdin during spawn. pointed out by mcbride and it fixes X-Git-Url: https://jasonwoof.com/gitweb/?a=commitdiff_plain;h=a912ad39658bcaef891a3816f9f8d78ef41a82c2;p=spectrwm.git open /dev/null on stdin during spawn. pointed out by mcbride and it fixes mplayer when launched from firefox and when firefox was launched from dmenu Also move focus to the bottom of manage_window. --- diff --git a/scrotwm.c b/scrotwm.c index 51f73cf..a2116d7 100644 --- a/scrotwm.c +++ b/scrotwm.c @@ -176,8 +176,8 @@ char *bar_fonts[] = { /* terminal + args */ char *spawn_term[] = { "xterm", NULL }; char *spawn_screenshot[] = { "screenshot.sh", NULL, NULL }; -char *spawn_menu[] = { "dmenu_run", "-fn", NULL, - "-nb", NULL, "-nf", NULL, "-sb", NULL, "-sf", NULL, NULL }; +char *spawn_menu[] = { "dmenu_run", "-fn", NULL, "-nb", NULL, + "-nf", NULL, "-sb", NULL, "-sf", NULL, NULL }; #define SWM_MENU_FN (2) #define SWM_MENU_NB (4) @@ -804,6 +804,7 @@ void spawn(struct swm_region *r, union arg *args) { char *ret; + int si; DNPRINTF(SWM_D_MISC, "spawn: %s\n", args->argv[0]); /* @@ -824,6 +825,12 @@ spawn(struct swm_region *r, union arg *args) free(ret); } setsid(); + /* kill stdin, mplayer, ssh-add etc. need that */ + si = open("/dev/null", O_RDONLY, 0); + if (si == -1) + err(1, "open /dev/null"); + if (dup2(si, 0) == -1) + err(1, "dup2 /dev/null"); execvp(args->argv[0], args->argv); fprintf(stderr, "execvp failed\n"); perror(" failed"); @@ -1789,9 +1796,6 @@ manage_window(Window id) win->s = r->s; /* this never changes */ TAILQ_INSERT_TAIL(&ws->winlist, win, entry); - /* make new win focused */ - focus_win(win); - XGetTransientForHint(display, win->id, &trans); if (trans) { win->transient = trans; @@ -1836,6 +1840,10 @@ manage_window(Window id) set_win_state(win, NormalState); + /* make new win focused */ + focus_win(win); + + return (win); }