You shouldn't change the global antialias flag, this is ugly and it will most likely break the font caching. You have to add checks for a palette directly at the places that handle the anti-aliasing (and your palette check is wrong too, you shouldn't peek into the internals of the DC bitmap).
Ok, I've removed the setting of antialias. A revised patch will be forthcoming when we settle on the use of the DIB (unless you want it sooner).
I'm not sure we can get around poking in the DIB. The problem is that we are working with a bitmap which is at a different colour depth in X and Windows. X is operating with a 24(or whatever) bit bitmap, while the windows equivilent DIB is running at 8 bit. Lower down, we render in the full 24 bit happyness, but when it gets converted back to the 8 bit palette for windows, we loose all of the pixels which were antialiased because they can not be matched against known palette values. That's why we need to check the depth of the DIB at this level as opposed to lower down where we only ever get to see what X thinks the depth is.
Glenn & Doug.