--- rxvt-unicode/src/init.C 2006/01/06 02:11:15 1.132 +++ rxvt-unicode/src/init.C 2006/01/11 00:59:58 1.137 @@ -11,7 +11,7 @@ * - extensive modifications * Copyright (c) 1999 D J Hawkey Jr * - QNX support - * Copyright (c) 2003-2004 Marc Lehmann + * Copyright (c) 2003-2006 Marc Lehmann * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -341,13 +341,17 @@ /* * Open display, get options/resources and create the window */ - if ((rs[Rs_display_name] = getenv ("DISPLAY")) == NULL) - rs[Rs_display_name] = ":0"; + { + TEMP_ENV; + + if ((rs[Rs_display_name] = getenv ("DISPLAY")) == NULL) + rs[Rs_display_name] = ":0"; - get_options (r_argc, r_argv); + get_options (r_argc, r_argv); - if (!(display = displays.get (rs[Rs_display_name]))) - rxvt_fatal ("can't open display %s, aborting.\n", rs[Rs_display_name]); + if (!(display = displays.get (rs[Rs_display_name]))) + rxvt_fatal ("can't open display %s, aborting.\n", rs[Rs_display_name]); + } extract_resources (); free (r_argv); @@ -393,7 +397,7 @@ /* no point having a scrollbar without having any scrollback! */ if (!saveLines) - CLR_OPTION (Opt_scrollBar); + set_option (Opt_scrollBar, 0); #ifdef PRINTPIPE if (!rs[Rs_print_pipe]) @@ -578,6 +582,8 @@ void rxvt_term::set_locale (const char *locale) { + TEMP_ENV; + #if HAVE_XSETLOCALE || HAVE_SETLOCALE free (this->locale); this->locale = setlocale (LC_CTYPE, locale); @@ -586,13 +592,13 @@ { if (*locale) { - rxvt_warn ("unable to set locale \"%s\", using default locale instead.\n", locale); - setlocale (LC_CTYPE, ""); + rxvt_warn ("unable to set locale \"%s\", using C locale instead.\n", locale); + setlocale (LC_CTYPE, "C"); } else rxvt_warn ("default locale unavailable, check LC_* and LANG variables. Continuing.\n"); - this->locale = ""; + this->locale = "C"; } @@ -617,6 +623,8 @@ void rxvt_term::init_xlocale () { + TEMP_ENV; + #ifdef USE_XIM if (!locale) rxvt_warn ("setting locale failed, working without locale support.\n"); @@ -1034,6 +1042,11 @@ XSetWMProtocols (disp, top, protocols, sizeof (protocols) / sizeof (protocols[0])); +#if ENABLE_FRILLS + if (rs[Rs_transient_for]) + XSetTransientForHint (disp, top, (Window)strtol (rs[Rs_transient_for], 0, 0)); +#endif + #if ENABLE_EWMH long pid = getpid (); @@ -1086,11 +1099,13 @@ vt_emask = ExposureMask | ButtonPressMask | ButtonReleaseMask | PropertyChangeMask; -#ifdef POINTER_BLANK - if (OPTION (Opt_pointerBlank)) + if (OPTION (Opt_pointerBlank) +#ifdef ENABLE_PERL + || perl.self +#endif + ) vt_emask |= PointerMotionMask; else -#endif vt_emask |= Button1MotionMask | Button3MotionMask; XSelectInput (disp, vt, vt_emask); @@ -1520,6 +1535,8 @@ { char *login; + TEMP_ENV; // not very temporary... + SET_TTYMODE (STDIN_FILENO, &tio); /* init terminal attributes */ if (OPTION (Opt_console)) @@ -1575,7 +1592,7 @@ } else { - const char *argv0, *shell; + const char *argv0, *shell; if ((shell = getenv ("SHELL")) == NULL || *shell == '\0') shell = "/bin/sh"; @@ -1590,6 +1607,7 @@ strcpy (&login[1], argv0); argv0 = login; } + execlp (shell, argv0, NULL); /* no error message: STDERR is closed! */ }