- property))
- {
- for (s=stdcmaps; count > 0; count--, s++) {
- if ((s->killid == ReleaseByFreeingColormap) &&
- (s->colormap != None) &&
- (s->colormap != DefaultColormap(dpy, screen)))
- XFreeColormap(dpy, s->colormap);
- else if (s->killid != None)
- XKillClient(dpy, s->killid);
- }
- XDeleteProperty(dpy, RootWindow(dpy, screen), property);
- XFree((char *) stdcmaps);
- XSync(dpy, False);
- }
+ property))
+ {
+ for (s=stdcmaps; count > 0; count--, s++) {
+ if ((s->killid == ReleaseByFreeingColormap) &&
+ (s->colormap != None) &&
+ (s->colormap != DefaultColormap(dpy, screen))) {
+
+ // UGLY HACK written in by Adam Megacz -- sometimes s->colormap isn't valid, so we do some shuffling
+ X11ErrorHandler* oldHandler = XSetErrorHandler(ignoreErrorHandler);
+ XSync(dpy, False);
+ XFreeColormap(dpy, s->colormap);
+ XSync(dpy, False);
+ XSetErrorHandler(oldHandler);
+ XSync(dpy, False);
+
+ } else if (s->killid != None) {
+ XKillClient(dpy, s->killid);
+ }
+ }
+ XDeleteProperty(dpy, RootWindow(dpy, screen), property);
+ XFree((char *) stdcmaps);
+ XSync(dpy, False);
+ }