XkbOverlayPtr XkbAddGeomOverlay(XkbSectionPtr section, Atom name, int sz_rows) { register int i; XkbOverlayPtr overlay; if ((!section) || (name == None) || (sz_rows == 0)) return NULL; for (i = 0, overlay = section->overlays; i < section->num_overlays; i++, overlay++) { if (overlay->name == name) { if ((sz_rows > 0) && (_XkbAllocOverlayRows(overlay, sz_rows) != Success)) return NULL; return overlay; } } if ((section->num_overlays >= section->sz_overlays) && (_XkbAllocOverlays(section, 1) != Success)) return NULL; overlay = §ion->overlays[section->num_overlays]; if ((sz_rows > 0) && (_XkbAllocOverlayRows(overlay, sz_rows) != Success)) return NULL; overlay->name = name; overlay->section_under = section; section->num_overlays++; return overlay; }
XkbSectionPtr XkbAddGeomSection(XkbGeometryPtr geom, Atom name, int sz_rows, int sz_doodads, int sz_over) { register int i; XkbSectionPtr section; if ((!geom) || (name == None) || (sz_rows < 0)) return NULL; for (i = 0, section = geom->sections; i < geom->num_sections; i++, section++) { if (section->name != name) continue; if (((sz_rows > 0) && (_XkbAllocRows(section, sz_rows) != Success)) || ((sz_doodads > 0) && (_XkbAllocDoodads(section, sz_doodads) != Success)) || ((sz_over > 0) && (_XkbAllocOverlays(section, sz_over) != Success))) return NULL; return section; } if ((geom->num_sections >= geom->sz_sections) && (_XkbAllocSections(geom, 1) != Success)) return NULL; section = &geom->sections[geom->num_sections]; if ((sz_rows > 0) && (_XkbAllocRows(section, sz_rows) != Success)) return NULL; if ((sz_doodads > 0) && (_XkbAllocDoodads(section, sz_doodads) != Success)) { if (section->rows) { _XkbFree(section->rows); section->rows = NULL; section->sz_rows = section->num_rows = 0; } return NULL; } section->name = name; geom->num_sections++; return section; }
Status XkbAllocGeomOverlays(XkbSectionPtr section,int nOverlays) { return _XkbAllocOverlays(section,nOverlays); }