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; }
XkbOverlayRowPtr XkbAddGeomOverlayRow(XkbOverlayPtr overlay, int row_under, int sz_keys) { register int i; XkbOverlayRowPtr row; if ((!overlay) || (sz_keys < 0)) return NULL; if (row_under >= overlay->section_under->num_rows) return NULL; for (i = 0; i < overlay->num_rows; i++) { if (overlay->rows[i].row_under == row_under) { row = &overlay->rows[i]; if ((row->sz_keys < sz_keys) && (_XkbAllocOverlayKeys(row, sz_keys) != Success)) { return NULL; } return &overlay->rows[i]; } } if ((overlay->num_rows >= overlay->sz_rows) && (_XkbAllocOverlayRows(overlay, 1) != Success)) return NULL; row = &overlay->rows[overlay->num_rows]; memset(row, 0, sizeof(XkbOverlayRowRec)); if ((sz_keys > 0) && (_XkbAllocOverlayKeys(row, sz_keys) != Success)) return NULL; row->row_under = row_under; overlay->num_rows++; return row; }
Status XkbAllocGeomOverlayRows(XkbOverlayPtr overlay,int nRows) { return _XkbAllocOverlayRows(overlay,nRows); }