[PATCH] xkb: Fix omissions in geometry initialization #27679
Peter Hutterer
peter.hutterer at who-t.net
Mon Apr 19 23:48:34 PDT 2010
On Sat, Apr 17, 2010 at 09:36:23PM +0200, Dirk Wallenstein wrote:
> _XkbCopyGeom did not copy all of the data from the source geometry. This
> resulted in failures when trying to obtain the keymap from a server
> where the default geometry has not been replaced by a custom
> configuration.
>
> Signed-off-by: Dirk Wallenstein <halsmit at t-online.de>
> ---
> xkb/xkbUtils.c | 41 +++++++++++++++++++++++++++++++++++++++--
> 1 files changed, 39 insertions(+), 2 deletions(-)
>
> diff --git a/xkb/xkbUtils.c b/xkb/xkbUtils.c
> index e287997..ce245db 100644
> --- a/xkb/xkbUtils.c
> +++ b/xkb/xkbUtils.c
> @@ -1601,6 +1601,7 @@ _XkbCopyGeom(XkbDescPtr src, XkbDescPtr dst)
> else {
> dcolor->spec = xstrdup(scolor->spec);
> }
> + dcolor->pixel = scolor->pixel;
fixed the whitespace on applying.
> }
>
> dst->geom->num_colors = dst->geom->sz_colors;
> @@ -1672,6 +1673,8 @@ _XkbCopyGeom(XkbDescPtr src, XkbDescPtr dst)
>
> memcpy(doutline->points, soutline->points,
> soutline->num_points * sizeof(XkbPointRec));
> +
> + doutline->corner_radius = soutline->corner_radius;
> }
>
> doutline->num_points = soutline->num_points;
> @@ -1681,6 +1684,36 @@ _XkbCopyGeom(XkbDescPtr src, XkbDescPtr dst)
>
> dshape->num_outlines = sshape->num_outlines;
> dshape->sz_outlines = sshape->num_outlines;
> + dshape->name = sshape->name;
> + dshape->bounds = sshape->bounds;
> +
> + dshape->approx = NULL;
> + if (sshape->approx && sshape->num_outlines > 0) {
> +
> + const ptrdiff_t approx_idx =
> + sshape->approx - sshape->outlines;
> +
> + if (approx_idx < dshape->num_outlines) {
> + dshape->approx = dshape->outlines + approx_idx;
> + } else {
> + LogMessage(X_WARNING, "XKB: approx outline "
> + "index is out of range\n");
> + }
> + }
> +
> + dshape->primary = NULL;
> + if (sshape->primary && sshape->num_outlines > 0) {
> +
> + const ptrdiff_t primary_idx =
> + sshape->primary - sshape->outlines;
> +
> + if (primary_idx < dshape->num_outlines) {
> + dshape->primary = dshape->outlines + primary_idx;
> + } else {
> + LogMessage(X_WARNING, "XKB: primary outline "
> + "index is out of range\n");
> + }
> + }
> }
>
> dst->geom->num_shapes = src->geom->num_shapes;
> @@ -1784,6 +1817,10 @@ _XkbCopyGeom(XkbDescPtr src, XkbDescPtr dst)
> }
> drow->num_keys = srow->num_keys;
> drow->sz_keys = srow->num_keys;
> + drow->top = srow->top;
> + drow->left = srow->left;
> + drow->vertical = srow->vertical;
> + drow->bounds = srow->bounds;
> }
>
> if (ssection->num_doodads) {
> @@ -1802,6 +1839,7 @@ _XkbCopyGeom(XkbDescPtr src, XkbDescPtr dst)
> ddoodad = dsection->doodads;
> k < ssection->num_doodads;
> k++, sdoodad++, ddoodad++) {
> + memcpy(ddoodad , sdoodad, sizeof(XkbDoodadRec));
> if (sdoodad->any.type == XkbTextDoodad) {
> if (sdoodad->text.text)
> ddoodad->text.text =
> @@ -1815,7 +1853,6 @@ _XkbCopyGeom(XkbDescPtr src, XkbDescPtr dst)
> ddoodad->logo.logo_name =
> xstrdup(sdoodad->logo.logo_name);
> }
> - ddoodad->any.type = sdoodad->any.type;
> }
> dsection->overlays = NULL;
> dsection->sz_overlays = 0;
> @@ -1880,7 +1917,7 @@ _XkbCopyGeom(XkbDescPtr src, XkbDescPtr dst)
> ddoodad = dst->geom->doodads;
> i < src->geom->num_doodads;
> i++, sdoodad++, ddoodad++) {
> - ddoodad->any.type = sdoodad->any.type;
> + memcpy(ddoodad , sdoodad, sizeof(XkbDoodadRec));
> if (sdoodad->any.type == XkbTextDoodad) {
> if (sdoodad->text.text)
> ddoodad->text.text = xstrdup(sdoodad->text.text);
> --
> 1.7.0.3
merged, thanks.
Cheers,
Peter
More information about the xorg-devel
mailing list