--- rxvt-unicode/src/main.C 2010/11/02 13:32:50 1.336 +++ rxvt-unicode/src/main.C 2011/01/08 10:37:21 1.346 @@ -13,7 +13,7 @@ * Copyright (c) 1997,1998 Oezguer Kesim * Copyright (c) 1998-2001 Geoff Wing * - extensive modifications - * Copyright (c) 2003-2008 Marc Lehmann + * Copyright (c) 2003-2010 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 @@ -98,7 +98,7 @@ compose_char *cc; // break compose chains, as stupid readline really likes to duplicate - // composing characters for some reason near the end of a line. + // composing characters for some reason, near the end of a line. cc = (*this)[c1]; while (cc) { @@ -108,10 +108,8 @@ // check to see whether this combination already exists otherwise for (cc = v.end (); cc-- > v.begin (); ) - { - if (cc->c1 == c1 && cc->c2 == c2) - return COMPOSE_LO + (cc - v.begin ()); - } + if (cc->c1 == c1 && cc->c2 == c2) + return COMPOSE_LO + (cc - v.begin ()); // allocate a new combination if (v.size () == COMPOSE_HI - COMPOSE_LO + 1) @@ -119,7 +117,7 @@ static int seen; if (!seen++) - fprintf (stderr, "too many unrepresentable composite characters, try --enable-unicode3\n"); + rxvt_warn ("too many unrepresentable composite characters, try --enable-unicode3\n"); return REPLACEMENT_CHAR; } @@ -363,6 +361,18 @@ delete this; } +void +rxvt_term::set_option (uint8_t opt, bool set) +{ + if (!opt) + return; + + uint8_t mask = 1 << (opt & 7); + uint8_t &val = options [opt >> 3]; + + val = val & ~mask | (set ? mask : 0); +} + /*----------------------------------------------------------------------*/ /* * Exit gracefully, clearing the utmp entry and restoring tty attributes @@ -384,7 +394,7 @@ char buffer[BUFSIZ]; char mesg[BUFSIZ]; char number[32]; - char *mtype = "XlibMessage"; + const char mtype[] = "XlibMessage"; XGetErrorText(dpy, event->error_code, buffer, BUFSIZ); XGetErrorDatabaseText(dpy, mtype, "XError", "X Error", mesg, BUFSIZ); rxvt_warn ("An X Error occurred, trying to continue after report.\n"); @@ -948,21 +958,20 @@ { unsigned int i; const char *xpmb = ""; - char fstr[sizeof ("default") + 1], bstr[sizeof ("default") + 1]; + char fstr[] = "default"; + char bstr[] = "default"; - strcpy (fstr, "default"); - strcpy (bstr, "default"); for (i = Color_Black; i <= Color_White; i++) if (pix_colors[Color_fg] == pix_colors[i]) { - sprintf (fstr, "%d", (i - Color_Black)); + sprintf (fstr, "%d", i - Color_Black); break; } for (i = Color_Black; i <= Color_White; i++) if (pix_colors[Color_bg] == pix_colors[i]) { - sprintf (bstr, "%d", (i - Color_Black)); + sprintf (bstr, "%d", i - Color_Black); #ifdef BG_IMAGE_FROM_FILE xpmb = "default;"; #endif @@ -1632,23 +1641,25 @@ } Pixmap -rxvt_term::get_pixmap_property (int prop_id) +rxvt_term::get_pixmap_property (Atom property) { - if (prop_id > 0 && prop_id < NUM_XA) - if (xa[prop_id]) - { - int aformat; - unsigned long nitems, bytes_after; - Atom atype; - unsigned char *prop = NULL; - int result = XGetWindowProperty (dpy, display->root, xa[prop_id], - 0L, 1L, False, XA_PIXMAP, &atype, &aformat, - &nitems, &bytes_after, &prop); - if (result == Success && prop && atype == XA_PIXMAP) - return *(Pixmap *)prop; - } + Pixmap pixmap = None; + + int aformat; + unsigned long nitems, bytes_after; + Atom atype; + unsigned char *prop; + int result = XGetWindowProperty (dpy, display->root, property, + 0L, 1L, False, XA_PIXMAP, &atype, &aformat, + &nitems, &bytes_after, &prop); + if (result == Success) + { + if (atype == XA_PIXMAP) + pixmap = *(Pixmap *)prop; + XFree (prop); + } - return None; + return pixmap; } #ifdef HAVE_BG_PIXMAP