The same sort of trepidation arises from
color_buttons[i].color->pixel |= 0xff << 24; This line mysteriously initialises one member of a struct whose complete definition (and use) requires a bit of research. malloc() is not calloc(), so there's every possibility that uninitialised values may be different between compilations. What appeared to work for the past month suddenly exhibits bizarre behaviour.
Don't allow variables to wander off uninitialised!
Finally, why create this alias?
typedef XftColor Clr; There are so many variations of "color" (abbreviated, plural, w/ suffix) that the code becomes difficult to track. As noted by @Chux, the only place Clr is used is where it should not have been used. Try to simplify, not to make things more opaque.