… | |
… | |
887 | void |
887 | void |
888 | rxvt_term::set_window_color (int idx, const char *color) |
888 | rxvt_term::set_window_color (int idx, const char *color) |
889 | { |
889 | { |
890 | rxvt_color xcol; |
890 | rxvt_color xcol; |
891 | int i; |
891 | int i; |
892 | |
892 | |
893 | if (color == NULL || *color == '\0') |
893 | if (color == NULL || *color == '\0') |
894 | return; |
894 | return; |
|
|
895 | |
|
|
896 | color = strdup (color); |
|
|
897 | allocated.push_back ((void *)color); |
|
|
898 | rs[Rs_color + idx] = color; |
895 | |
899 | |
896 | /* handle color aliases */ |
900 | /* handle color aliases */ |
897 | if (isdigit (*color)) |
901 | if (isdigit (*color)) |
898 | { |
902 | { |
899 | i = atoi (color); |
903 | i = atoi (color); |
900 | |
904 | |
901 | if (i >= 8 && i <= 15) |
905 | if (i >= 8 && i <= 15) |
902 | { /* bright colors */ |
906 | { /* bright colors */ |
903 | i -= 8; |
907 | i -= 8; |
904 | pix_colors_focused[idx] = pix_colors_focused[minBrightCOLOR + i]; |
908 | pix_colors_focused[idx] = pix_colors_focused[minBrightCOLOR + i]; |
905 | SET_PIXCOLOR (idx); |
|
|
906 | goto done; |
909 | goto done; |
907 | } |
910 | } |
908 | |
911 | |
909 | if (i >= 0 && i <= 7) |
912 | if (i >= 0 && i <= 7) |
910 | { /* normal colors */ |
913 | { /* normal colors */ |
911 | pix_colors_focused[idx] = pix_colors_focused[minCOLOR + i]; |
914 | pix_colors_focused[idx] = pix_colors_focused[minCOLOR + i]; |
912 | SET_PIXCOLOR (idx); |
|
|
913 | goto done; |
915 | goto done; |
914 | } |
916 | } |
915 | } |
917 | } |
916 | |
918 | |
917 | if (!set_color (xcol, color)) |
919 | set_color (xcol, color); |
918 | return; |
|
|
919 | |
|
|
920 | /* XStoreColor (xdisp, display->cmap, XColor*); */ |
|
|
921 | |
920 | |
922 | /* |
921 | /* |
923 | * FIXME: should free colors here, but no idea how to do it so instead, |
922 | * FIXME: should free colors here, but no idea how to do it so instead, |
924 | * so just keep gobbling up the colormap |
923 | * so just keep gobbling up the colormap |
925 | */ |
924 | */ |
926 | # if 0 |
|
|
927 | for (i = Color_Black; i <= Color_White; i++) |
|
|
928 | if (pix_colors[idx] == pix_colors[i]) |
|
|
929 | break; |
|
|
930 | if (i > Color_White) |
|
|
931 | { |
|
|
932 | /* fprintf (stderr, "XFreeColors: pix_colors [%d] = %lu\n", idx, pix_colors [idx]); */ |
|
|
933 | XFreeColors (xdisp, display->cmap, (pix_colors + idx), 1, |
|
|
934 | DisplayPlanes (xdisp, display->screen)); |
|
|
935 | } |
|
|
936 | # endif |
|
|
937 | |
925 | |
938 | pix_colors_focused[idx] = xcol; |
926 | pix_colors_focused[idx] = xcol; |
939 | SET_PIXCOLOR (idx); |
|
|
940 | |
927 | |
941 | /* XSetWindowAttributes attr; */ |
928 | /* XSetWindowAttributes attr; */ |
942 | /* Cursor cursor; */ |
929 | /* Cursor cursor; */ |
943 | done: |
930 | done: |
944 | |
931 | |
945 | #if OFF_FOCUS_FADING |
932 | #if OFF_FOCUS_FADING |
946 | if (rs[Rs_fade]) |
933 | if (rs[Rs_fade]) |
947 | { |
934 | { |
948 | rxvt_rgba c; |
935 | rgba c; |
949 | pix_colors [Color_fade].get (this, c); |
936 | pix_colors [Color_fade].get (this, c); |
950 | pix_colors_focused [idx].fade (this, atoi (rs[Rs_fade]), pix_colors_unfocused [idx], c); |
937 | pix_colors_focused [idx].fade (this, atoi (rs[Rs_fade]), pix_colors_unfocused [idx], c); |
951 | } |
938 | } |
952 | #endif |
939 | #endif |
953 | |
940 | |