diff --git a/src/conio/x_events.c b/src/conio/x_events.c index a740744d8d3b1ec9be9a5a8af27661500d3a9f8f..e647067bac5382034376ecde47dd75772c3490f8 100644 --- a/src/conio/x_events.c +++ b/src/conio/x_events.c @@ -427,6 +427,7 @@ set_icon(const void *data, size_t width, XWMHints *hints) unsigned short tmp; XColor fg; bool sethints = (hints == NULL); + unsigned long lasti, lastim; // This is literally the wost possible way to create a pixmap. :) /* @@ -446,26 +447,37 @@ set_icon(const void *data, size_t width, XWMHints *hints) for (x = 0, i = 0; x < width; x++) { for (y = 0; y < width; y++) { if (idata[i] & 0xff000000) { - tmp = (idata[i] & 0xff); - fg.red = tmp << 8 | tmp; - tmp = (idata[i] & 0xff00) >> 8; - fg.green = tmp << 8 | tmp; - tmp = (idata[i] & 0xff0000) >> 16; - fg.blue = tmp << 8 | tmp; - fg.flags = DoRed | DoGreen | DoBlue; - if (x11.XAllocColor(dpy, wincmap, &fg) == 0) - fail = true; + if (VisualIsRGB8) + fg.pixel = idata[i] & 0xffffff; else { - x11.XSetForeground(dpy, igc, fg.pixel); - x11.XDrawPoint(dpy, icn, igc, y, x); - x11.XSetForeground(dpy, imgc, white); - x11.XDrawPoint(dpy, icn_mask, imgc, y, x); + tmp = (idata[i] & 0xff); + fg.red = tmp << 8 | tmp; + tmp = (idata[i] & 0xff00) >> 8; + fg.green = tmp << 8 | tmp; + tmp = (idata[i] & 0xff0000) >> 16; + fg.blue = tmp << 8 | tmp; + fg.flags = DoRed | DoGreen | DoBlue; + if (x11.XAllocColor(dpy, wincmap, &fg) == 0) + fail = true; } if (fail) break; + if (lasti != fg.pixel) { + x11.XSetForeground(dpy, igc, fg.pixel); + lasti = fg.pixel; + } + x11.XDrawPoint(dpy, icn, igc, y, x); + if (lastim != white) { + x11.XSetForeground(dpy, imgc, white); + lastim = white; + } + x11.XDrawPoint(dpy, icn_mask, imgc, y, x); } else { - x11.XSetForeground(dpy, imgc, black); + if (lastim != black) { + x11.XSetForeground(dpy, imgc, black); + lastim = black; + } x11.XDrawPoint(dpy, icn_mask, imgc, y, x); } i++; @@ -512,6 +524,7 @@ static int init_window() if (dpy == NULL) { return(-1); } + x11.XSynchronize(dpy, False); #ifdef WITH_XRENDER if (xrender_found && x11.XRenderQueryVersion(dpy, &major, &minor) == 0)