--- rxvt-unicode/src/init.C 2003/12/18 05:45:11 1.14 +++ rxvt-unicode/src/init.C 2004/01/20 01:35:39 1.18 @@ -1,7 +1,7 @@ /*--------------------------------*-C-*---------------------------------* * File: init.c *----------------------------------------------------------------------* - * $Id: init.C,v 1.14 2003/12/18 05:45:11 pcg Exp $ + * $Id: init.C,v 1.18 2004/01/20 01:35:39 pcg Exp $ * * All portions of code are copyright by their respective author/s. * Copyright (c) 1992 John Bovey, University of Kent at Canterbury @@ -797,6 +797,23 @@ * This should support all European type languages. */ void +rxvt_term::set_locale (const char *locale) +{ +#if HAVE_XSETLOCALE || HAVE_SETLOCALE + free (this->locale); + this->locale = strdup (setlocale (LC_CTYPE, "")); +#endif +#if HAVE_NL_LANGINFO + free (codeset); + codeset = strdup (nl_langinfo (CODESET)); + enc_utf8 = !STRCASECMP (codeset, "UTF-8") + || !STRCASECMP (codeset, "UTF8"); +#else + enc_utf8 = 1; +#endif +} + +void rxvt_term::init_xlocale () { #ifdef USE_XIM @@ -817,8 +834,6 @@ return; } - rxvt_setTermFontSet (this, 0); - /* see if we can connect yet */ rxvt_IMInstantiateCallback (Xdisplay, NULL, NULL); @@ -1029,12 +1044,11 @@ { /* bright colors */ i -= 8; #ifndef NO_BRIGHTCOLOR - rs[Rs_color + idx] = rs[Rs_color + minBrightCOLOR + i]; return; #endif - } + if (i >= 0 && i <= 7) /* normal colors */ rs[Rs_color + idx] = rs[Rs_color + minCOLOR + i]; } @@ -1114,102 +1128,98 @@ /*----------------------------------------------------------------------*/ /* rxvt_Create_Windows() - Open and map the window */ -/* EXTPROTO */ void -rxvt_Create_Windows(pR_ int argc, const char *const *argv) +rxvt_term::create_windows (int argc, const char *const *argv) { XClassHint classHint; XWMHints wmHint; XGCValues gcvalue; long vt_emask; -#ifdef PREFER_24BIT - XSetWindowAttributes attributes; XWindowAttributes gattr; - XCMAP = DefaultColormap(R->Xdisplay, Xscreen); - XVISUAL = DefaultVisual(R->Xdisplay, Xscreen); + Xcmap = DefaultColormap (Xdisplay, Xscreen); + Xvisual = DefaultVisual (Xdisplay, Xscreen); + Xscreen = DefaultScreen (Xdisplay); - if (R->Options & Opt_transparent) + if (Options & Opt_transparent) { - XGetWindowAttributes(R->Xdisplay, RootWindow(R->Xdisplay, Xscreen), - &gattr); - XDEPTH = gattr.depth; + XGetWindowAttributes (Xdisplay, RootWindow(Xdisplay, Xscreen), &gattr); + Xdepth = gattr.depth; } else { - XDEPTH = DefaultDepth(R->Xdisplay, Xscreen); + Xdepth = DefaultDepth(Xdisplay, Xscreen); +#ifdef PREFER_24BIT /* * If depth is not 24, look for a 24bit visual. */ - if (XDEPTH != 24) + if (Xdepth != 24) { XVisualInfo vinfo; - if (XMatchVisualInfo(R->Xdisplay, Xscreen, 24, TrueColor, &vinfo)) + if (XMatchVisualInfo(Xdisplay, Xscreen, 24, TrueColor, &vinfo)) { - XDEPTH = 24; - XVISUAL = vinfo.visual; - XCMAP = XCreateColormap(R->Xdisplay, - RootWindow(R->Xdisplay, Xscreen), - XVISUAL, AllocNone); + Xdepth = 24; + Xvisual = vinfo.visual; + Xcmap = XCreateColormap(Xdisplay, + RootWindow(Xdisplay, Xscreen), + Xvisual, AllocNone); } } - } #endif + } /* grab colors before netscape does */ - rxvt_Get_Colours(aR); + rxvt_Get_Colours (this); - rxvt_change_font(aR_ 1, NULL); - rxvt_window_calc(aR_ 0, 0); - R->old_width = R->szHint.width; - R->old_height = R->szHint.height; + rxvt_change_font (this, 1, NULL); + window_calc (0, 0); + old_width = szHint.width; + old_height = szHint.height; /* parent window - reverse video so we can see placement errors * sub-window placement & size in rxvt_resize_subwindows() */ #ifdef PREFER_24BIT - - attributes.background_pixel = R->PixColors[Color_fg]; - attributes.border_pixel = R->PixColors[Color_border]; - attributes.colormap = XCMAP; - R->TermWin.parent[0] = XCreateWindow(R->Xdisplay, Xroot, - R->szHint.x, R->szHint.y, - R->szHint.width, R->szHint.height, - R->TermWin.ext_bwidth, - XDEPTH, InputOutput, - XVISUAL, + attributes.background_pixel = PixColors[Color_fg]; + attributes.border_pixel = PixColors[Color_border]; + attributes.colormap = Xcmap; + TermWin.parent[0] = XCreateWindow (Xdisplay, DefaultRootWindow (Xdisplay), + szHint.x, szHint.y, + szHint.width, szHint.height, + TermWin.ext_bwidth, + Xdepth, InputOutput, + Xvisual, CWBackPixel | CWBorderPixel | CWColormap, &attributes); #else - - R->TermWin.parent[0] = XCreateSimpleWindow(R->Xdisplay, Xroot, - R->szHint.x, R->szHint.y, - R->szHint.width, - R->szHint.height, - R->TermWin.ext_bwidth, - R->PixColors[Color_border], - R->PixColors[Color_fg]); + TermWin.parent[0] = XCreateSimpleWindow (Xdisplay, DefaultRootWindow (Xdisplay), + szHint.x, szHint.y, + szHint.width, + szHint.height, + TermWin.ext_bwidth, + PixColors[Color_border], + PixColors[Color_fg]); #endif - rxvt_xterm_seq(aR_ XTerm_title, R->rs[Rs_title], CHAR_ST); - rxvt_xterm_seq(aR_ XTerm_iconName, R->rs[Rs_iconName], CHAR_ST); + rxvt_xterm_seq (this, XTerm_title, rs[Rs_title], CHAR_ST); + rxvt_xterm_seq (this, XTerm_iconName, rs[Rs_iconName], CHAR_ST); - classHint.res_name = (char *)R->rs[Rs_name]; + classHint.res_name = (char *)rs[Rs_name]; classHint.res_class = (char *)APL_CLASS; wmHint.flags = (InputHint | StateHint | WindowGroupHint); wmHint.input = True; - wmHint.initial_state = (R->Options & Opt_iconic ? IconicState + wmHint.initial_state = (Options & Opt_iconic ? IconicState : NormalState); - wmHint.window_group = R->TermWin.parent[0]; + wmHint.window_group = TermWin.parent[0]; - XSetWMProperties(R->Xdisplay, R->TermWin.parent[0], NULL, NULL, - (char **)argv, argc, &R->szHint, &wmHint, &classHint); - XSelectInput(R->Xdisplay, R->TermWin.parent[0], + XSetWMProperties(Xdisplay, TermWin.parent[0], NULL, NULL, + (char **)argv, argc, &szHint, &wmHint, &classHint); + XSelectInput(Xdisplay, TermWin.parent[0], (KeyPressMask #if defined(MOUSE_WHEEL) && defined(MOUSE_SLIP_WHEELING) | KeyReleaseMask @@ -1218,11 +1228,11 @@ | StructureNotifyMask)); /* vt cursor: Black-on-White is standard, but this is more popular */ - R->TermWin_cursor = XCreateFontCursor(R->Xdisplay, XC_xterm); + TermWin_cursor = XCreateFontCursor(Xdisplay, XC_xterm); #if defined(HAVE_SCROLLBARS) || defined(MENUBAR) /* cursor (menuBar/scrollBar): Black-on-White */ - R->leftptr_cursor = XCreateFontCursor(R->Xdisplay, XC_left_ptr); + leftptr_cursor = XCreateFontCursor(Xdisplay, XC_left_ptr); #endif #ifdef POINTER_BLANK @@ -1232,97 +1242,96 @@ blackcolour.red = 0; blackcolour.green = 0; blackcolour.blue = 0; - Font f = XLoadFont (R->Xdisplay, "fixed"); - R->blank_cursor = XCreateGlyphCursor (R->Xdisplay, f, f, ' ', ' ', + Font f = XLoadFont (Xdisplay, "fixed"); + blank_cursor = XCreateGlyphCursor (Xdisplay, f, f, ' ', ' ', &blackcolour, &blackcolour); - XUnloadFont (R->Xdisplay, f); + XUnloadFont (Xdisplay, f); } #endif /* the vt window */ - R->TermWin.vt = XCreateSimpleWindow(R->Xdisplay, R->TermWin.parent[0], - R->window_vt_x, R->window_vt_y, + TermWin.vt = XCreateSimpleWindow(Xdisplay, TermWin.parent[0], + window_vt_x, window_vt_y, TermWin_TotalWidth(), TermWin_TotalHeight(), 0, - R->PixColors[Color_fg], - R->PixColors[Color_bg]); + PixColors[Color_fg], + PixColors[Color_bg]); #ifdef DEBUG_X - - XStoreName(R->Xdisplay, R->TermWin.vt, "vt window"); + XStoreName(Xdisplay, TermWin.vt, "vt window"); #endif - R->pointer_unblank (); - vt_emask = (ExposureMask | ButtonPressMask | ButtonReleaseMask | PropertyChangeMask); + #ifdef POINTER_BLANK + pointer_unblank (); - if ((R->Options & Opt_pointerBlank)) + if ((Options & Opt_pointerBlank)) vt_emask |= PointerMotionMask; else #endif - vt_emask |= (Button1MotionMask | Button3MotionMask); - XSelectInput(R->Xdisplay, R->TermWin.vt, vt_emask); + + XSelectInput(Xdisplay, TermWin.vt, vt_emask); #if defined(MENUBAR) && (MENUBAR_MAX > 1) if (menuBar_height()) { - R->menuBar.win = XCreateSimpleWindow(R->Xdisplay, R->TermWin.parent[0], - R->window_vt_x, 0, + menuBar.win = XCreateSimpleWindow(Xdisplay, TermWin.parent[0], + window_vt_x, 0, TermWin_TotalWidth(), menuBar_TotalHeight(), 0, - R->PixColors[Color_fg], - R->PixColors[Color_scroll]); + PixColors[Color_fg], + PixColors[Color_scroll]); #ifdef DEBUG_X - XStoreName(R->Xdisplay, R->menuBar.win, "menubar"); + XStoreName(Xdisplay, menuBar.win, "menubar"); #endif - XDefineCursor(R->Xdisplay, R->menuBar.win, R->pointer_leftptr); - XSelectInput(R->Xdisplay, R->menuBar.win, + XDefineCursor(Xdisplay, menuBar.win, pointer_leftptr); + XSelectInput(Xdisplay, menuBar.win, (ExposureMask | ButtonPressMask | ButtonReleaseMask | Button1MotionMask)); } #endif #ifdef XPM_BACKGROUND - if (R->rs[Rs_backgroundPixmap] != NULL - && !(R->Options & Opt_transparent)) + if (rs[Rs_backgroundPixmap] != NULL + && !(Options & Opt_transparent)) { - const char *p = R->rs[Rs_backgroundPixmap]; + const char *p = rs[Rs_backgroundPixmap]; if ((p = STRCHR(p, ';')) != NULL) { p++; - rxvt_scale_pixmap(aR_ p); + rxvt_scale_pixmap (this, p); } - rxvt_set_bgPixmap(aR_ R->rs[Rs_backgroundPixmap]); - rxvt_scr_touch(aR_ True); + rxvt_set_bgPixmap (this, rs[Rs_backgroundPixmap]); + rxvt_scr_touch (this, True); } #endif /* graphics context for the vt window */ - gcvalue.foreground = R->PixColors[Color_fg]; - gcvalue.background = R->PixColors[Color_bg]; + gcvalue.foreground = PixColors[Color_fg]; + gcvalue.background = PixColors[Color_bg]; gcvalue.graphics_exposures = 1; - R->TermWin.gc = XCreateGC(R->Xdisplay, R->TermWin.vt, + TermWin.gc = XCreateGC(Xdisplay, TermWin.vt, GCForeground | GCBackground | GCGraphicsExposures, &gcvalue); #if defined(MENUBAR) || defined(RXVT_SCROLLBAR) - gcvalue.foreground = R->PixColors[Color_topShadow]; - R->topShadowGC = XCreateGC(R->Xdisplay, R->TermWin.vt, + gcvalue.foreground = PixColors[Color_topShadow]; + topShadowGC = XCreateGC(Xdisplay, TermWin.vt, GCForeground, &gcvalue); - gcvalue.foreground = R->PixColors[Color_bottomShadow]; - R->botShadowGC = XCreateGC(R->Xdisplay, R->TermWin.vt, + gcvalue.foreground = PixColors[Color_bottomShadow]; + botShadowGC = XCreateGC(Xdisplay, TermWin.vt, GCForeground, &gcvalue); - gcvalue.foreground = R->PixColors[(XDEPTH <= 2 ? Color_fg + gcvalue.foreground = PixColors[(XDEPTH <= 2 ? Color_fg : Color_scroll)]; - R->scrollbarGC = XCreateGC(R->Xdisplay, R->TermWin.vt, + scrollbarGC = XCreateGC(Xdisplay, TermWin.vt, GCForeground, &gcvalue); #endif } @@ -1417,7 +1426,10 @@ dup2 (tty_fd, STDIN_FILENO); #endif +#ifdef UTMP_SUPPORT rxvt_privileged_utmp (this, SAVE); +#endif + #if defined(HAVE_STRUCT_UTMP) && defined(HAVE_TTYSLOT) dup2 (fdstdin, STDIN_FILENO);