--- rxvt-unicode/src/rxvttoolkit.C 2006/02/19 16:25:13 1.53 +++ rxvt-unicode/src/rxvttoolkit.C 2006/08/07 15:12:48 1.61 @@ -1,9 +1,9 @@ -/*--------------------------------*-C-*---------------------------------* +/*----------------------------------------------------------------------* * File: rxvttoolkit.C *----------------------------------------------------------------------* * * All portions of code are copyright by their respective author/s. - * 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 @@ -264,10 +264,8 @@ } void -rxvt_screen::set (rxvt_display *disp, int bitdepth) +rxvt_screen::select_visual (int bitdepth) { - set (disp); - #if XFT XVisualInfo vinfo; @@ -275,7 +273,7 @@ { depth = bitdepth; visual = vinfo.visual; - cmap = XCreateColormap (dpy, disp->root, visual, AllocNone); + cmap = XCreateColormap (dpy, display->root, visual, AllocNone); } #endif } @@ -317,6 +315,7 @@ XrmDatabase rdb1, database = 0; // for ordering, see for example http://www.faqs.org/faqs/Xt-FAQ/ Subject: 20 + // as opposed to "standard practise", we always read in ~/.Xdefaults // 6. System wide per application default file. @@ -333,6 +332,14 @@ // none // 4. User's defaults file. + if (homedir) + { + snprintf (fname, sizeof (fname), "%s/.Xdefaults", homedir); + + if ((rdb1 = XrmGetFileDatabase (fname))) + XrmMergeDatabases (rdb1, &database); + } + /* Get any Xserver defaults */ if (refresh) { @@ -347,7 +354,7 @@ XFree (dpy->xdefaults); #endif - if (XGetWindowProperty (dpy, root, XA_RESOURCE_MANAGER, + if (XGetWindowProperty (dpy, RootWindow (dpy, 0), XA_RESOURCE_MANAGER, 0L, 100000000L, False, XA_STRING, &actual_type, &actual_format, &nitems, &nremaining, @@ -358,6 +365,7 @@ else { displayResource = 0; + if (val) XFree(val); } @@ -374,13 +382,6 @@ if ((rdb1 = XrmGetStringDatabase (displayResource))) XrmMergeDatabases (rdb1, &database); } - else if (homedir) - { - snprintf (fname, sizeof (fname), "%s/.Xdefaults", homedir); - - if ((rdb1 = XrmGetFileDatabase (fname))) - XrmMergeDatabases (rdb1, &database); - } #if !XLIB_ILLEGAL_ACCESS if (refresh && displayResource) @@ -580,14 +581,20 @@ void rxvt_display::reg (xevent_watcher *w) { - xw.push_back (w); - w->active = xw.size (); + if (!w.active) + { + xw.push_back (w); + w->active = xw.size (); + } } void rxvt_display::unreg (xevent_watcher *w) { if (w->active) - xw[w->active - 1] = 0; + { + xw[w->active - 1] = 0; + w->active = 0; + } } void rxvt_display::set_selection_owner (rxvt_term *owner) @@ -651,6 +658,13 @@ refcache displays; ///////////////////////////////////////////////////////////////////////////// +// + +static unsigned int +insert_component (unsigned int value, unsigned int mask, unsigned int shift) +{ + return (value * (mask + 1) >> 16) << shift; +} bool rxvt_color::alloc (rxvt_screen *screen, const rgba &color) @@ -670,10 +684,10 @@ c.color.blue = color.b; c.color.alpha = color.a; - c.pixel = ((color.r * format->direct.redMask / rgba::MAX_CC) << format->direct.red ) - | ((color.g * format->direct.greenMask / rgba::MAX_CC) << format->direct.green) - | ((color.b * format->direct.blueMask / rgba::MAX_CC) << format->direct.blue ) - | ((color.a * format->direct.alphaMask / rgba::MAX_CC) << format->direct.alpha); + c.pixel = insert_component (color.r, format->direct.redMask , format->direct.red ) + | insert_component (color.g, format->direct.greenMask, format->direct.green) + | insert_component (color.b, format->direct.blueMask , format->direct.blue ) + | insert_component (color.a, format->direct.alphaMask, format->direct.alpha); return true; }