--- rxvt-unicode/src/main.C 2006/01/31 16:57:35 1.211 +++ rxvt-unicode/src/main.C 2006/02/01 21:15:33 1.216 @@ -254,10 +254,18 @@ if (parent[0]) XDestroyWindow (xdisp, parent[0]); + for (int i = 0; i < TOTAL_COLORS; i++) + if (ISSET_PIXCOLOR (i)) + { + pix_colors_focused [i].free (this); +#if OFF_FOCUS_FADING + pix_colors_unfocused [i].free (this); +#endif + } + clear (); } - // TODO: free pixcolours, colours should become part of rxvt_display delete pix_colors_focused; #if OFF_FOCUS_FADING delete pix_colors_unfocused; @@ -693,6 +701,7 @@ { sb_w = scrollbar_TotalWidth (); szHint.base_width += sb_w; + if (!OPTION (Opt_scrollBar_right)) window_vt_x += sb_w; } @@ -889,10 +898,14 @@ { rxvt_color xcol; int i; - + if (color == NULL || *color == '\0') return; + color = strdup (color); + allocated.push_back ((void *)color); + rs[Rs_color + idx] = color; + /* handle color aliases */ if (isdigit (*color)) { @@ -902,41 +915,24 @@ { /* bright colors */ i -= 8; pix_colors_focused[idx] = pix_colors_focused[minBrightCOLOR + i]; - SET_PIXCOLOR (idx); goto done; } if (i >= 0 && i <= 7) { /* normal colors */ pix_colors_focused[idx] = pix_colors_focused[minCOLOR + i]; - SET_PIXCOLOR (idx); goto done; } } - if (!set_color (xcol, color)) - return; - - /* XStoreColor (xdisp, display->cmap, XColor*); */ + set_color (xcol, color); /* * FIXME: should free colors here, but no idea how to do it so instead, * so just keep gobbling up the colormap */ -# if 0 - for (i = Color_Black; i <= Color_White; i++) - if (pix_colors[idx] == pix_colors[i]) - break; - if (i > Color_White) - { - /* fprintf (stderr, "XFreeColors: pix_colors [%d] = %lu\n", idx, pix_colors [idx]); */ - XFreeColors (xdisp, display->cmap, (pix_colors + idx), 1, - DisplayPlanes (xdisp, display->screen)); - } -# endif pix_colors_focused[idx] = xcol; - SET_PIXCOLOR (idx); /* XSetWindowAttributes attr; */ /* Cursor cursor; */ @@ -945,8 +941,8 @@ #if OFF_FOCUS_FADING if (rs[Rs_fade]) { - rxvt_rgba c; - pix_colors [Color_fade].get (this, c); + rgba c; + pix_colors [Color_fade].get (c); pix_colors_focused [idx].fade (this, atoi (rs[Rs_fade]), pix_colors_unfocused [idx], c); } #endif @@ -964,17 +960,17 @@ void rxvt_term::recolour_cursor () { - XColor xcol[2]; + XColor fg, bg; + + (ISSET_PIXCOLOR (Color_pointer_fg) + ? pix_colors_focused[Color_pointer_fg] + : pix_colors_focused[Color_fg]).get (fg); - xcol[0].pixel = ISSET_PIXCOLOR (Color_pointer_fg) - ? pix_colors_focused[Color_pointer_fg] - : pix_colors_focused[Color_fg]; - xcol[1].pixel = ISSET_PIXCOLOR (Color_pointer_bg) - ? pix_colors_focused[Color_pointer_bg] - : pix_colors_focused[Color_bg]; + (ISSET_PIXCOLOR (Color_pointer_bg) + ? pix_colors_focused[Color_pointer_bg] + : pix_colors_focused[Color_bg]).get (bg); - XQueryColors (xdisp, cmap, xcol, 2); - XRecolorCursor (xdisp, TermWin_cursor, xcol + 0, xcol + 1); + XRecolorCursor (xdisp, TermWin_cursor, &fg, &bg); } /*----------------------------------------------------------------------*/ @@ -1022,6 +1018,12 @@ return false; } +void +rxvt_term::alias_color (int dst, int src) +{ + pix_colors[dst].set (this, rs[Rs_color + dst] = rs[Rs_color + src]); +} + /* -------------------------------------------------------------------- * * - WINDOW RESIZING - * * -------------------------------------------------------------------- */ @@ -1153,8 +1155,8 @@ void rxvt_term::im_set_color (unsigned long &fg, unsigned long &bg) { - fg = pix_colors[Color_fg]; - bg = pix_colors[Color_bg]; + fg = pix_colors [Color_fg]; + bg = pix_colors [Color_bg]; } void