From 2a5fb0e58ed6ee1ff1f0ff00b5bf5b2623991132 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Tue, 4 Mar 2008 08:17:48 -0800 Subject: Add support for new Transform requests. --- src/Makefile.am | 2 +- src/Xrandr.c | 28 ++++++---- src/XrrCrtc.c | 156 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 176 insertions(+), 10 deletions(-) (limited to 'src') diff --git a/src/Makefile.am b/src/Makefile.am index b884a39..57aa59c 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -15,7 +15,7 @@ AM_CFLAGS = @X_CFLAGS@ @RANDR_CFLAGS@ @MALLOC_ZERO_CFLAGS@ INCLUDES = -I$(top_srcdir)/include/X11/extensions -libXrandr_la_LDFLAGS = -version-number 2:1:0 -no-undefined +libXrandr_la_LDFLAGS = -version-number 2:2:0 -no-undefined libXrandrincludedir = $(includedir)/X11/extensions libXrandrinclude_HEADERS = $(top_srcdir)/include/X11/extensions/Xrandr.h diff --git a/src/Xrandr.c b/src/Xrandr.c index b6068dc..bcc732b 100644 --- a/src/Xrandr.c +++ b/src/Xrandr.c @@ -88,18 +88,16 @@ static Bool XRRWireToEvent(Display *dpy, XEvent *event, xEvent *wire) return True; } case RRNotify: { - XRRNotifyEvent *aevent = (XRRNotifyEvent *) event; - xRRCrtcChangeNotifyEvent *awire = (xRRCrtcChangeNotifyEvent *) wire; - aevent->type = awire->type & 0x7F; - aevent->serial = _XSetLastRequestRead(dpy, (xGenericReply *) wire); - aevent->send_event = (awire->type & 0x80) != 0; - aevent->display = dpy; - aevent->window = awire->window; - aevent->subtype = awire->subCode; - switch (aevent->subtype) { + switch (wire->u.u.detail) { case RRNotify_OutputChange: { XRROutputChangeNotifyEvent *aevent = (XRROutputChangeNotifyEvent *) event; xRROutputChangeNotifyEvent *awire = (xRROutputChangeNotifyEvent *) wire; + aevent->type = awire->type & 0x7F; + aevent->serial = _XSetLastRequestRead(dpy, (xGenericReply *) wire); + aevent->send_event = (awire->type & 0x80) != 0; + aevent->display = dpy; + aevent->window = awire->window; + aevent->subtype = awire->subCode; aevent->output = awire->output; aevent->crtc = awire->crtc; aevent->mode = awire->mode; @@ -111,6 +109,12 @@ static Bool XRRWireToEvent(Display *dpy, XEvent *event, xEvent *wire) case RRNotify_CrtcChange: { XRRCrtcChangeNotifyEvent *aevent = (XRRCrtcChangeNotifyEvent *) event; xRRCrtcChangeNotifyEvent *awire = (xRRCrtcChangeNotifyEvent *) wire; + aevent->type = awire->type & 0x7F; + aevent->serial = _XSetLastRequestRead(dpy, (xGenericReply *) wire); + aevent->send_event = (awire->type & 0x80) != 0; + aevent->display = dpy; + aevent->window = awire->window; + aevent->subtype = awire->subCode; aevent->crtc = awire->crtc; aevent->mode = awire->mode; aevent->rotation = awire->rotation; @@ -123,6 +127,12 @@ static Bool XRRWireToEvent(Display *dpy, XEvent *event, xEvent *wire) case RRNotify_OutputProperty: { XRROutputPropertyNotifyEvent *aevent = (XRROutputPropertyNotifyEvent *) event; xRROutputPropertyNotifyEvent *awire = (xRROutputPropertyNotifyEvent *) wire; + aevent->type = awire->type & 0x7F; + aevent->serial = _XSetLastRequestRead(dpy, (xGenericReply *) wire); + aevent->send_event = (awire->type & 0x80) != 0; + aevent->display = dpy; + aevent->window = awire->window; + aevent->subtype = awire->subCode; aevent->output = awire->output; aevent->property = awire->atom; aevent->timestamp = awire->timestamp; diff --git a/src/XrrCrtc.c b/src/XrrCrtc.c index 5e5c813..5b952e4 100644 --- a/src/XrrCrtc.c +++ b/src/XrrCrtc.c @@ -270,3 +270,159 @@ XRRFreeGamma (XRRCrtcGamma *crtc_gamma) { Xfree (crtc_gamma); } + +/* Version 1.3 additions */ + +void +XRRSetCrtcTransform (Display *dpy, + RRCrtc crtc, + XTransform *transform, + XTransform *inverse) +{ + XExtDisplayInfo *info = XRRFindDisplay(dpy); + xRRSetCrtcTransformReq *req; + + RRSimpleCheckExtension (dpy, info); + + LockDisplay(dpy); + GetReq (RRSetCrtcTransform, req); + req->reqType = info->codes->major_opcode; + req->randrReqType = X_RRSetCrtcTransform; + req->crtc = crtc; + + req->transform.matrix11 = transform->matrix[0][0]; + req->transform.matrix12 = transform->matrix[0][1]; + req->transform.matrix13 = transform->matrix[0][2]; + req->transform.matrix21 = transform->matrix[1][0]; + req->transform.matrix22 = transform->matrix[1][1]; + req->transform.matrix23 = transform->matrix[1][2]; + req->transform.matrix31 = transform->matrix[2][0]; + req->transform.matrix32 = transform->matrix[2][1]; + req->transform.matrix33 = transform->matrix[2][2]; + + req->inverse.matrix11 = inverse->matrix[0][0]; + req->inverse.matrix12 = inverse->matrix[0][1]; + req->inverse.matrix13 = inverse->matrix[0][2]; + req->inverse.matrix21 = inverse->matrix[1][0]; + req->inverse.matrix22 = inverse->matrix[1][1]; + req->inverse.matrix23 = inverse->matrix[1][2]; + req->inverse.matrix31 = inverse->matrix[2][0]; + req->inverse.matrix32 = inverse->matrix[2][1]; + req->inverse.matrix33 = inverse->matrix[2][2]; + + UnlockDisplay (dpy); + SyncHandle (); +} + +#define CrtcTransformExtra (SIZEOF(xRRGetCrtcTransformReply) - 32) + +static const xRenderTransform identity = { + 0x10000, 0, 0, + 0, 0x10000, 0, + 0, 0, 0x10000, +}; + +static Bool +_XRRHasTransform (int major, int minor) +{ + return major > 1 || (major == 1 && minor >= 3); +} + +Status +XRRGetCrtcTransform (Display *dpy, + RRCrtc crtc, + XTransform *pendingTransform, + XTransform *pendingInverse, + XTransform *currentTransform, + XTransform *currentInverse) +{ + XExtDisplayInfo *info = XRRFindDisplay(dpy); + XRandRInfo *xrri; + xRRGetCrtcTransformReply rep; + xRRGetCrtcTransformReq *req; + int major_version, minor_version; + + RRCheckExtension (dpy, info, False); + + if (!XRRQueryVersion (dpy, &major_version, &minor_version) || + !_XRRHasTransform (major_version, minor_version)) + { + /* For pre-1.3 servers, just report identity matrices everywhere */ + rep.pendingTransform = identity; + rep.pendingInverse = identity; + rep.currentTransform = identity; + rep.currentInverse = identity; + } + else + { + LockDisplay (dpy); + GetReq (RRGetCrtcTransform, req); + req->reqType = info->codes->major_opcode; + req->randrReqType = X_RRGetCrtcTransform; + req->crtc = crtc; + + if (!_XReply (dpy, (xReply *) &rep, CrtcTransformExtra >> 2, xFalse)) + { + rep.pendingTransform = identity; + rep.pendingInverse = identity; + rep.currentTransform = identity; + rep.currentInverse = identity; + } + UnlockDisplay (dpy); + SyncHandle (); + } + + if (pendingTransform) + { + pendingTransform->matrix[0][0] = rep.pendingTransform.matrix11; + pendingTransform->matrix[0][1] = rep.pendingTransform.matrix12; + pendingTransform->matrix[0][2] = rep.pendingTransform.matrix13; + pendingTransform->matrix[1][0] = rep.pendingTransform.matrix21; + pendingTransform->matrix[1][1] = rep.pendingTransform.matrix22; + pendingTransform->matrix[1][2] = rep.pendingTransform.matrix23; + pendingTransform->matrix[2][0] = rep.pendingTransform.matrix31; + pendingTransform->matrix[2][1] = rep.pendingTransform.matrix32; + pendingTransform->matrix[2][2] = rep.pendingTransform.matrix33; + } + + if (pendingInverse) + { + pendingInverse->matrix[0][0] = rep.pendingInverse.matrix11; + pendingInverse->matrix[0][1] = rep.pendingInverse.matrix12; + pendingInverse->matrix[0][2] = rep.pendingInverse.matrix13; + pendingInverse->matrix[1][0] = rep.pendingInverse.matrix21; + pendingInverse->matrix[1][1] = rep.pendingInverse.matrix22; + pendingInverse->matrix[1][2] = rep.pendingInverse.matrix23; + pendingInverse->matrix[2][0] = rep.pendingInverse.matrix31; + pendingInverse->matrix[2][1] = rep.pendingInverse.matrix32; + pendingInverse->matrix[2][2] = rep.pendingInverse.matrix33; + } + + if (currentTransform) + { + currentTransform->matrix[0][0] = rep.currentTransform.matrix11; + currentTransform->matrix[0][1] = rep.currentTransform.matrix12; + currentTransform->matrix[0][2] = rep.currentTransform.matrix13; + currentTransform->matrix[1][0] = rep.currentTransform.matrix21; + currentTransform->matrix[1][1] = rep.currentTransform.matrix22; + currentTransform->matrix[1][2] = rep.currentTransform.matrix23; + currentTransform->matrix[2][0] = rep.currentTransform.matrix31; + currentTransform->matrix[2][1] = rep.currentTransform.matrix32; + currentTransform->matrix[2][2] = rep.currentTransform.matrix33; + } + + if (currentInverse) + { + currentInverse->matrix[0][0] = rep.currentInverse.matrix11; + currentInverse->matrix[0][1] = rep.currentInverse.matrix12; + currentInverse->matrix[0][2] = rep.currentInverse.matrix13; + currentInverse->matrix[1][0] = rep.currentInverse.matrix21; + currentInverse->matrix[1][1] = rep.currentInverse.matrix22; + currentInverse->matrix[1][2] = rep.currentInverse.matrix23; + currentInverse->matrix[2][0] = rep.currentInverse.matrix31; + currentInverse->matrix[2][1] = rep.currentInverse.matrix32; + currentInverse->matrix[2][2] = rep.currentInverse.matrix33; + } + + return True; +} -- cgit v1.2.1 From a6e5fa4ceb72795380496fcfe62c083866791dc1 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Sat, 15 Mar 2008 00:33:30 -0700 Subject: Support CRTC Transform filters XRRGetCrtcTransform now returns a giant struct containing all of the transform and filter data. XRRSetCrtcTransform now accepts filter parameters. --- src/XrrCrtc.c | 191 +++++++++++++++++++++++++++++++++++----------------------- 1 file changed, 117 insertions(+), 74 deletions(-) (limited to 'src') diff --git a/src/XrrCrtc.c b/src/XrrCrtc.c index 5b952e4..8bca1b1 100644 --- a/src/XrrCrtc.c +++ b/src/XrrCrtc.c @@ -273,14 +273,52 @@ XRRFreeGamma (XRRCrtcGamma *crtc_gamma) /* Version 1.3 additions */ +static void +XTransform_from_xRenderTransform (XTransform *x, + xRenderTransform *render) +{ + x->matrix[0][0] = render->matrix11; + x->matrix[0][1] = render->matrix12; + x->matrix[0][2] = render->matrix13; + + x->matrix[1][0] = render->matrix21; + x->matrix[1][1] = render->matrix22; + x->matrix[1][2] = render->matrix23; + + x->matrix[2][0] = render->matrix31; + x->matrix[2][1] = render->matrix32; + x->matrix[2][2] = render->matrix33; +} + +static void +xRenderTransform_from_XTransform (xRenderTransform *render, + XTransform *x) +{ + render->matrix11 = x->matrix[0][0]; + render->matrix12 = x->matrix[0][1]; + render->matrix13 = x->matrix[0][2]; + + render->matrix21 = x->matrix[1][0]; + render->matrix22 = x->matrix[1][1]; + render->matrix23 = x->matrix[1][2]; + + render->matrix31 = x->matrix[2][0]; + render->matrix32 = x->matrix[2][1]; + render->matrix33 = x->matrix[2][2]; +} + void XRRSetCrtcTransform (Display *dpy, RRCrtc crtc, XTransform *transform, - XTransform *inverse) + XTransform *inverse, + char *filter, + XFixed *params, + int nparams) { XExtDisplayInfo *info = XRRFindDisplay(dpy); xRRSetCrtcTransformReq *req; + int nbytes = strlen (filter); RRSimpleCheckExtension (dpy, info); @@ -290,26 +328,14 @@ XRRSetCrtcTransform (Display *dpy, req->randrReqType = X_RRSetCrtcTransform; req->crtc = crtc; - req->transform.matrix11 = transform->matrix[0][0]; - req->transform.matrix12 = transform->matrix[0][1]; - req->transform.matrix13 = transform->matrix[0][2]; - req->transform.matrix21 = transform->matrix[1][0]; - req->transform.matrix22 = transform->matrix[1][1]; - req->transform.matrix23 = transform->matrix[1][2]; - req->transform.matrix31 = transform->matrix[2][0]; - req->transform.matrix32 = transform->matrix[2][1]; - req->transform.matrix33 = transform->matrix[2][2]; - - req->inverse.matrix11 = inverse->matrix[0][0]; - req->inverse.matrix12 = inverse->matrix[0][1]; - req->inverse.matrix13 = inverse->matrix[0][2]; - req->inverse.matrix21 = inverse->matrix[1][0]; - req->inverse.matrix22 = inverse->matrix[1][1]; - req->inverse.matrix23 = inverse->matrix[1][2]; - req->inverse.matrix31 = inverse->matrix[2][0]; - req->inverse.matrix32 = inverse->matrix[2][1]; - req->inverse.matrix33 = inverse->matrix[2][2]; - + xRenderTransform_from_XTransform (&req->transform, transform); + xRenderTransform_from_XTransform (&req->inverse, inverse); + + req->nbytesFilter = nbytes; + req->length += ((nbytes + 3) >> 2) + nparams; + Data (dpy, filter, nbytes); + Data32 (dpy, params, nparams << 2); + UnlockDisplay (dpy); SyncHandle (); } @@ -331,16 +357,18 @@ _XRRHasTransform (int major, int minor) Status XRRGetCrtcTransform (Display *dpy, RRCrtc crtc, - XTransform *pendingTransform, - XTransform *pendingInverse, - XTransform *currentTransform, - XTransform *currentInverse) + XRRCrtcTransformAttributes **attributes) { XExtDisplayInfo *info = XRRFindDisplay(dpy); XRandRInfo *xrri; xRRGetCrtcTransformReply rep; xRRGetCrtcTransformReq *req; int major_version, minor_version; + XRRCrtcTransformAttributes *attr; + char *extra = NULL, *e; + int p; + + *attributes = NULL; RRCheckExtension (dpy, info, False); @@ -350,8 +378,12 @@ XRRGetCrtcTransform (Display *dpy, /* For pre-1.3 servers, just report identity matrices everywhere */ rep.pendingTransform = identity; rep.pendingInverse = identity; + rep.pendingNbytesFilter = 0; + rep.pendingNparamsFilter = 0; rep.currentTransform = identity; rep.currentInverse = identity; + rep.currentNbytesFilter = 0; + rep.currentNparamsFilter = 0; } else { @@ -365,64 +397,75 @@ XRRGetCrtcTransform (Display *dpy, { rep.pendingTransform = identity; rep.pendingInverse = identity; + rep.pendingNbytesFilter = 0; + rep.pendingNparamsFilter = 0; rep.currentTransform = identity; rep.currentInverse = identity; + rep.currentNbytesFilter = 0; + rep.currentNparamsFilter = 0; + } + else + { + int extraBytes = rep.length * 4 - CrtcTransformExtra; + extra = Xmalloc (extraBytes); + if (!extra) { + _XEatData (dpy, extraBytes); + UnlockDisplay (dpy); + SyncHandle (); + return False; + } + _XRead (dpy, extra, extraBytes); } + UnlockDisplay (dpy); SyncHandle (); } - if (pendingTransform) - { - pendingTransform->matrix[0][0] = rep.pendingTransform.matrix11; - pendingTransform->matrix[0][1] = rep.pendingTransform.matrix12; - pendingTransform->matrix[0][2] = rep.pendingTransform.matrix13; - pendingTransform->matrix[1][0] = rep.pendingTransform.matrix21; - pendingTransform->matrix[1][1] = rep.pendingTransform.matrix22; - pendingTransform->matrix[1][2] = rep.pendingTransform.matrix23; - pendingTransform->matrix[2][0] = rep.pendingTransform.matrix31; - pendingTransform->matrix[2][1] = rep.pendingTransform.matrix32; - pendingTransform->matrix[2][2] = rep.pendingTransform.matrix33; + attr = Xmalloc (sizeof (XRRCrtcTransformAttributes) + + rep.pendingNparamsFilter * sizeof (XFixed) + + rep.currentNparamsFilter * sizeof (XFixed) + + rep.pendingNbytesFilter + 1 + + rep.currentNbytesFilter + 1); + + if (!attr) { + XFree (extra); + return False; } - - if (pendingInverse) - { - pendingInverse->matrix[0][0] = rep.pendingInverse.matrix11; - pendingInverse->matrix[0][1] = rep.pendingInverse.matrix12; - pendingInverse->matrix[0][2] = rep.pendingInverse.matrix13; - pendingInverse->matrix[1][0] = rep.pendingInverse.matrix21; - pendingInverse->matrix[1][1] = rep.pendingInverse.matrix22; - pendingInverse->matrix[1][2] = rep.pendingInverse.matrix23; - pendingInverse->matrix[2][0] = rep.pendingInverse.matrix31; - pendingInverse->matrix[2][1] = rep.pendingInverse.matrix32; - pendingInverse->matrix[2][2] = rep.pendingInverse.matrix33; + XTransform_from_xRenderTransform (&attr->pendingTransform, &rep.pendingTransform); + XTransform_from_xRenderTransform (&attr->pendingInverse, &rep.pendingInverse); + XTransform_from_xRenderTransform (&attr->currentTransform, &rep.currentTransform); + XTransform_from_xRenderTransform (&attr->currentInverse, &rep.currentInverse); + + attr->pendingParams = (XFixed *) (attr + 1); + attr->currentParams = attr->pendingParams + rep.pendingNparamsFilter; + attr->pendingFilter = (char *) (attr->currentParams + rep.currentNparamsFilter); + attr->currentFilter = attr->pendingFilter + rep.pendingNbytesFilter + 1; + + e = extra; + + memcpy (attr->pendingFilter, e, rep.pendingNbytesFilter); + attr->pendingFilter[rep.pendingNbytesFilter] = '\0'; + e += (rep.pendingNbytesFilter + 3) & ~3; + for (p = 0; p < rep.pendingNparamsFilter; p++) { + INT32 f; + memcpy (&f, e, 4); + e += 4; + attr->pendingParams[p] = (XFixed) f; } - - if (currentTransform) - { - currentTransform->matrix[0][0] = rep.currentTransform.matrix11; - currentTransform->matrix[0][1] = rep.currentTransform.matrix12; - currentTransform->matrix[0][2] = rep.currentTransform.matrix13; - currentTransform->matrix[1][0] = rep.currentTransform.matrix21; - currentTransform->matrix[1][1] = rep.currentTransform.matrix22; - currentTransform->matrix[1][2] = rep.currentTransform.matrix23; - currentTransform->matrix[2][0] = rep.currentTransform.matrix31; - currentTransform->matrix[2][1] = rep.currentTransform.matrix32; - currentTransform->matrix[2][2] = rep.currentTransform.matrix33; - } - - if (currentInverse) - { - currentInverse->matrix[0][0] = rep.currentInverse.matrix11; - currentInverse->matrix[0][1] = rep.currentInverse.matrix12; - currentInverse->matrix[0][2] = rep.currentInverse.matrix13; - currentInverse->matrix[1][0] = rep.currentInverse.matrix21; - currentInverse->matrix[1][1] = rep.currentInverse.matrix22; - currentInverse->matrix[1][2] = rep.currentInverse.matrix23; - currentInverse->matrix[2][0] = rep.currentInverse.matrix31; - currentInverse->matrix[2][1] = rep.currentInverse.matrix32; - currentInverse->matrix[2][2] = rep.currentInverse.matrix33; + + memcpy (attr->currentFilter, e, rep.currentNbytesFilter); + attr->currentFilter[rep.currentNbytesFilter] = '\0'; + e += (rep.currentNbytesFilter + 3) & ~3; + for (p = 0; p < rep.currentNparamsFilter; p++) { + INT32 f; + memcpy (&f, e, 4); + e += 4; + attr->currentParams[p] = (XFixed) f; } - + + if (extra) + XFree (extra); + *attributes = attr; + return True; } -- cgit v1.2.1 From 7a21e7bc994c5fa7d3ab15ba7201667e134f1512 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Tue, 18 Mar 2008 16:02:36 -0700 Subject: Eliminate inverse matrix from randr transform protocol It is easier, and potentially more precise, to compute the inverse in the server where everything can eventually be kept in floating point form. --- src/XrrCrtc.c | 8 -------- 1 file changed, 8 deletions(-) (limited to 'src') diff --git a/src/XrrCrtc.c b/src/XrrCrtc.c index 8bca1b1..a1d92cb 100644 --- a/src/XrrCrtc.c +++ b/src/XrrCrtc.c @@ -311,7 +311,6 @@ void XRRSetCrtcTransform (Display *dpy, RRCrtc crtc, XTransform *transform, - XTransform *inverse, char *filter, XFixed *params, int nparams) @@ -329,7 +328,6 @@ XRRSetCrtcTransform (Display *dpy, req->crtc = crtc; xRenderTransform_from_XTransform (&req->transform, transform); - xRenderTransform_from_XTransform (&req->inverse, inverse); req->nbytesFilter = nbytes; req->length += ((nbytes + 3) >> 2) + nparams; @@ -377,11 +375,9 @@ XRRGetCrtcTransform (Display *dpy, { /* For pre-1.3 servers, just report identity matrices everywhere */ rep.pendingTransform = identity; - rep.pendingInverse = identity; rep.pendingNbytesFilter = 0; rep.pendingNparamsFilter = 0; rep.currentTransform = identity; - rep.currentInverse = identity; rep.currentNbytesFilter = 0; rep.currentNparamsFilter = 0; } @@ -396,11 +392,9 @@ XRRGetCrtcTransform (Display *dpy, if (!_XReply (dpy, (xReply *) &rep, CrtcTransformExtra >> 2, xFalse)) { rep.pendingTransform = identity; - rep.pendingInverse = identity; rep.pendingNbytesFilter = 0; rep.pendingNparamsFilter = 0; rep.currentTransform = identity; - rep.currentInverse = identity; rep.currentNbytesFilter = 0; rep.currentNparamsFilter = 0; } @@ -432,9 +426,7 @@ XRRGetCrtcTransform (Display *dpy, return False; } XTransform_from_xRenderTransform (&attr->pendingTransform, &rep.pendingTransform); - XTransform_from_xRenderTransform (&attr->pendingInverse, &rep.pendingInverse); XTransform_from_xRenderTransform (&attr->currentTransform, &rep.currentTransform); - XTransform_from_xRenderTransform (&attr->currentInverse, &rep.currentInverse); attr->pendingParams = (XFixed *) (attr + 1); attr->currentParams = attr->pendingParams + rep.pendingNparamsFilter; -- cgit v1.2.1 From 377126fdaf1094354d54b1743f9d2bf1f2de1e0c Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Fri, 12 Sep 2008 20:18:21 -0700 Subject: Set NparamsFilter in XRRGetCrtcTransform return value. Leaving this uninitialized isn't very helpful, and can cause segfaults. --- src/XrrCrtc.c | 1 + 1 file changed, 1 insertion(+) (limited to 'src') diff --git a/src/XrrCrtc.c b/src/XrrCrtc.c index a1d92cb..f4d9322 100644 --- a/src/XrrCrtc.c +++ b/src/XrrCrtc.c @@ -454,6 +454,7 @@ XRRGetCrtcTransform (Display *dpy, e += 4; attr->currentParams[p] = (XFixed) f; } + attr->currentNparams = rep.currentNparamsFilter; if (extra) XFree (extra); -- cgit v1.2.1 From 00f2e30d0b8296668776d62a4c47f96bf95faa08 Mon Sep 17 00:00:00 2001 From: Julien Cristau Date: Fri, 28 Nov 2008 16:16:22 +0100 Subject: Set attr->pendingNparams in XRRGetCrtcTransform() --- src/XrrCrtc.c | 1 + 1 file changed, 1 insertion(+) (limited to 'src') diff --git a/src/XrrCrtc.c b/src/XrrCrtc.c index f4d9322..66dbc67 100644 --- a/src/XrrCrtc.c +++ b/src/XrrCrtc.c @@ -444,6 +444,7 @@ XRRGetCrtcTransform (Display *dpy, e += 4; attr->pendingParams[p] = (XFixed) f; } + attr->pendingNparams = rep.pendingNparamsFilter; memcpy (attr->currentFilter, e, rep.currentNbytesFilter); attr->currentFilter[rep.currentNbytesFilter] = '\0'; -- cgit v1.2.1