aboutsummaryrefslogtreecommitdiff
path: root/st.c
diff options
context:
space:
mode:
authorRoberto E. Vargas Caballero <k0ga@shike2.com>2013-07-20 21:52:40 +0200
committerRoberto E. Vargas Caballero <k0ga@shike2.com>2013-07-20 23:25:46 +0200
commitaaee0e8b28a353c215b6d1c8fc06d20038d7b426 (patch)
tree9d9e69d6fbf1f9fad9da4da9883c98a7f3db9f1b /st.c
parent8dde8cde41caa311718d2b990ea3356272ee25ee (diff)
downloadst-aaee0e8b28a353c215b6d1c8fc06d20038d7b426.tar.gz
st-aaee0e8b28a353c215b6d1c8fc06d20038d7b426.tar.bz2
st-aaee0e8b28a353c215b6d1c8fc06d20038d7b426.zip
Reload colors in reset
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.
Diffstat (limited to 'st.c')
-rw-r--r--st.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/st.c b/st.c
index 097244c..362de23 100644
--- 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