XkbColorPtr XkbAddGeomColor(XkbGeometryPtr geom, char *spec, unsigned int pixel) { register int i; register XkbColorPtr color; if ((!geom) || (!spec)) return NULL; for (i = 0, color = geom->colors; i < geom->num_colors; i++, color++) { if ((color->spec) && (strcmp(color->spec, spec) == 0)) { color->pixel = pixel; return color; } } if ((geom->num_colors >= geom->sz_colors) && (_XkbAllocColors(geom, 1) != Success)) { return NULL; } color = &geom->colors[geom->num_colors]; color->pixel = pixel; color->spec = strdup(spec); if (!color->spec) return NULL; geom->num_colors++; return color; }
Status XkbAllocGeometry(XkbDescPtr xkb, XkbGeometrySizesPtr sizes) { XkbGeometryPtr geom; Status rtrn; if (xkb->geom == NULL) { xkb->geom = calloc(1, sizeof(XkbGeometryRec)); if (!xkb->geom) return BadAlloc; } geom = xkb->geom; if ((sizes->which & XkbGeomPropertiesMask) && ((rtrn = _XkbAllocProps(geom, sizes->num_properties)) != Success)) { goto BAIL; } if ((sizes->which & XkbGeomColorsMask) && ((rtrn = _XkbAllocColors(geom, sizes->num_colors)) != Success)) { goto BAIL; } if ((sizes->which & XkbGeomShapesMask) && ((rtrn = _XkbAllocShapes(geom, sizes->num_shapes)) != Success)) { goto BAIL; } if ((sizes->which & XkbGeomSectionsMask) && ((rtrn = _XkbAllocSections(geom, sizes->num_sections)) != Success)) { goto BAIL; } if ((sizes->which & XkbGeomDoodadsMask) && ((rtrn = _XkbAllocDoodads(geom, sizes->num_doodads)) != Success)) { goto BAIL; } if ((sizes->which & XkbGeomKeyAliasesMask) && ((rtrn = _XkbAllocKeyAliases(geom, sizes->num_key_aliases)) != Success)) { goto BAIL; } return Success; BAIL: XkbFreeGeometry(geom, XkbGeomAllMask, TRUE); xkb->geom = NULL; return rtrn; }
Status XkbAllocGeomColors(XkbGeometryPtr geom,int nColors) { return _XkbAllocColors(geom,nColors); }