X-Git-Url: https://jasonwoof.com/gitweb/?a=blobdiff_plain;f=scrotwm.c;h=a2116d75f60bb5765f84b271647e172f79c35ceb;hb=a912ad39658bcaef891a3816f9f8d78ef41a82c2;hp=e84dc137dccaf3925cebed8911ef3ce6b9da17cd;hpb=c405976b2da3501f4a563684870eeefcf4958991;p=spectrwm.git diff --git a/scrotwm.c b/scrotwm.c index e84dc13..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"); @@ -1757,6 +1764,8 @@ manage_window(Window id) unsigned char ws_idx_str[SWM_PROPLEN], *prop = NULL; struct swm_region *r; long mask; + int ws_idx; + const char *errstr; if ((win = find_window(id)) != NULL) return (win); /* already being managed */ @@ -1773,9 +1782,6 @@ manage_window(Window id) r = root_to_region(win->wa.root); /* If the window was managed before, put it in the same workspace */ if (prop) { - int ws_idx; - const char *errstr; - DNPRINTF(SWM_D_PROP, "got property _SWM_WS=%s\n", prop); ws_idx = strtonum(prop, 0, 9, &errstr); if (errstr) @@ -1790,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; @@ -1837,6 +1840,10 @@ manage_window(Window id) set_win_state(win, NormalState); + /* make new win focused */ + focus_win(win); + + return (win); }