XkbCopyKeymap was mangling doodads and overlays

This commit is contained in:
Keith Packard 2008-02-06 16:51:57 -08:00
parent ab9b0b36ac
commit b2657ec598

View File

@ -1796,6 +1796,7 @@ XkbCopyKeymap(XkbDescPtr src, XkbDescPtr dst, Bool sendNotifies)
dsection = dst->geom->sections; dsection = dst->geom->sections;
i < src->geom->num_sections; i < src->geom->num_sections;
i++, ssection++, dsection++) { i++, ssection++, dsection++) {
*dsection = *ssection;
if (ssection->num_rows) { if (ssection->num_rows) {
tmp = xcalloc(ssection->num_rows, sizeof(XkbRowRec)); tmp = xcalloc(ssection->num_rows, sizeof(XkbRowRec));
if (!tmp) if (!tmp)
@ -1830,6 +1831,7 @@ XkbCopyKeymap(XkbDescPtr src, XkbDescPtr dst, Bool sendNotifies)
dsection->doodads = NULL; dsection->doodads = NULL;
} }
dsection->sz_doodads = ssection->num_doodads;
for (k = 0, for (k = 0,
sdoodad = ssection->doodads, sdoodad = ssection->doodads,
ddoodad = dsection->doodads; ddoodad = dsection->doodads;
@ -1850,8 +1852,9 @@ XkbCopyKeymap(XkbDescPtr src, XkbDescPtr dst, Bool sendNotifies)
} }
ddoodad->any.type = sdoodad->any.type; ddoodad->any.type = sdoodad->any.type;
} }
dsection->num_doodads = ssection->num_doodads; dsection->overlays = NULL;
dsection->sz_doodads = ssection->num_doodads; dsection->sz_overlays = 0;
dsection->num_overlays = 0;
} }
} }
else { else {