]> git.armaanb.net Git - st.git/commitdiff
Reload colors in reset
authorRoberto E. Vargas Caballero <k0ga@shike2.com>
Sat, 20 Jul 2013 19:52:40 +0000 (21:52 +0200)
committerRoberto E. Vargas Caballero <k0ga@shike2.com>
Sat, 20 Jul 2013 21:25:46 +0000 (23:25 +0200)
Colors definition can be changed using a OSC sequence, so
we have to reload them if we want be sure all the colors
are the correct.

Could be desirable free the colors allocated due to rgb
colors and inverse colors (XftColorAllocValues in xdraws),
but it is impossible due we use the same structure for all
of them.

st.c

diff --git a/st.c b/st.c
index 097244cc3b7a68ad8749d90c4f9c5bc2b077a8d7..362de23bfaf6f0ed7ea097bb57747780bb331ef0 100644 (file)
--- a/st.c
+++ b/st.c
@@ -2428,6 +2428,7 @@ tputc(char *c, int len) {
                                treset();
                                term.esc = 0;
                                xresettitle();
+                               xloadcols();
                                break;
                        case '=': /* DECPAM -- Application keypad */
                                term.mode |= MODE_APPKEYPAD;
@@ -2589,6 +2590,13 @@ void
 xloadcols(void) {
        int i, r, g, b;
        XRenderColor color = { .alpha = 0xffff };
+       static bool loaded;
+       Colour *cp;
+
+       if(loaded) {
+               for (cp = dc.col; cp < dc.col + LEN(dc.col); ++cp)
+                       XftColorFree(xw.dpy, xw.vis, xw.cmap, cp);
+       }
 
        /* load colors [0-15] colors and [256-LEN(colorname)[ (config.h) */
        for(i = 0; i < LEN(colorname); i++) {
@@ -2621,6 +2629,7 @@ xloadcols(void) {
                        die("Could not allocate color %d\n", i);
                }
        }
+       loaded = true;
 }
 
 int