aboutsummaryrefslogtreecommitdiff
path: root/nx-X11/programs/Xserver/randr/rrsdispatch.c
diff options
context:
space:
mode:
Diffstat (limited to 'nx-X11/programs/Xserver/randr/rrsdispatch.c')
-rw-r--r--nx-X11/programs/Xserver/randr/rrsdispatch.c343
1 files changed, 338 insertions, 5 deletions
diff --git a/nx-X11/programs/Xserver/randr/rrsdispatch.c b/nx-X11/programs/Xserver/randr/rrsdispatch.c
index 3175340fa..6ac394344 100644
--- a/nx-X11/programs/Xserver/randr/rrsdispatch.c
+++ b/nx-X11/programs/Xserver/randr/rrsdispatch.c
@@ -25,7 +25,7 @@
static int
SProcRRQueryVersion(ClientPtr client)
{
- register int n;
+ int n;
REQUEST(xRRQueryVersionReq);
@@ -39,7 +39,7 @@ SProcRRQueryVersion(ClientPtr client)
static int
SProcRRGetScreenInfo(ClientPtr client)
{
- register int n;
+ int n;
REQUEST(xRRGetScreenInfoReq);
@@ -52,7 +52,7 @@ SProcRRGetScreenInfo(ClientPtr client)
static int
SProcRRSetScreenConfig(ClientPtr client)
{
- register int n;
+ int n;
REQUEST(xRRSetScreenConfigReq);
@@ -75,7 +75,7 @@ SProcRRSetScreenConfig(ClientPtr client)
static int
SProcRRSelectInput(ClientPtr client)
{
- register int n;
+ int n;
REQUEST(xRRSelectInputReq);
@@ -134,7 +134,7 @@ SProcRRGetOutputInfo(ClientPtr client)
{
int n;
- REQUEST(xRRGetOutputInfoReq);;
+ REQUEST(xRRGetOutputInfoReq);
REQUEST_SIZE_MATCH(xRRGetOutputInfoReq);
swaps(&stuff->length, n);
@@ -177,6 +177,7 @@ SProcRRConfigureOutputProperty(ClientPtr client)
REQUEST(xRRConfigureOutputPropertyReq);
+ REQUEST_AT_LEAST_SIZE(xRRConfigureOutputPropertyReq);
swaps(&stuff->length, n);
swapl(&stuff->output, n);
swapl(&stuff->property, n);
@@ -248,6 +249,7 @@ static int
SProcRRCreateMode(ClientPtr client)
{
int n;
+
xRRModeInfo *modeinfo;
REQUEST(xRRCreateModeReq);
@@ -388,6 +390,315 @@ SProcRRSetCrtcGamma(ClientPtr client)
return (*ProcRandrVector[stuff->randrReqType]) (client);
}
+static int
+SProcRRSetCrtcTransform(ClientPtr client)
+{
+ int nparams;
+ char *filter;
+ CARD32 *params;
+ int n;
+
+ REQUEST(xRRSetCrtcTransformReq);
+
+ REQUEST_AT_LEAST_SIZE(xRRSetCrtcTransformReq);
+ swaps(&stuff->length, n);
+ swapl(&stuff->crtc, n);
+ SwapLongs((CARD32 *) &stuff->transform,
+ bytes_to_int32(sizeof(xRenderTransform)));
+ swaps(&stuff->nbytesFilter, n);
+ filter = (char *) (stuff + 1);
+ params = (CARD32 *) (filter + pad_to_int32(stuff->nbytesFilter));
+ nparams = ((CARD32 *) stuff + client->req_len) - params;
+ if (nparams < 0)
+ return BadLength;
+
+ SwapLongs(params, nparams);
+ return (*ProcRandrVector[stuff->randrReqType]) (client);
+}
+
+static int
+SProcRRGetCrtcTransform(ClientPtr client)
+{
+ int n;
+
+ REQUEST(xRRGetCrtcTransformReq);
+
+ REQUEST_SIZE_MATCH(xRRGetCrtcTransformReq);
+ swaps(&stuff->length, n);
+ swapl(&stuff->crtc, n);
+ return (*ProcRandrVector[stuff->randrReqType]) (client);
+}
+
+static int
+SProcRRGetPanning(ClientPtr client)
+{
+ int n;
+
+ REQUEST(xRRGetPanningReq);
+
+ REQUEST_SIZE_MATCH(xRRGetPanningReq);
+ swaps(&stuff->length, n);
+ swapl(&stuff->crtc, n);
+ return (*ProcRandrVector[stuff->randrReqType]) (client);
+}
+
+static int
+SProcRRSetPanning(ClientPtr client)
+{
+ int n;
+
+ REQUEST(xRRSetPanningReq);
+
+ REQUEST_SIZE_MATCH(xRRSetPanningReq);
+ swaps(&stuff->length, n);
+ swapl(&stuff->crtc, n);
+ swapl(&stuff->timestamp, n);
+ swaps(&stuff->left, n);
+ swaps(&stuff->top, n);
+ swaps(&stuff->width, n);
+ swaps(&stuff->height, n);
+ swaps(&stuff->track_left, n);
+ swaps(&stuff->track_top, n);
+ swaps(&stuff->track_width, n);
+ swaps(&stuff->track_height, n);
+ swaps(&stuff->border_left, n);
+ swaps(&stuff->border_top, n);
+ swaps(&stuff->border_right, n);
+ swaps(&stuff->border_bottom, n);
+ return (*ProcRandrVector[stuff->randrReqType]) (client);
+}
+
+static int
+SProcRRSetOutputPrimary(ClientPtr client)
+{
+ int n;
+
+ REQUEST(xRRSetOutputPrimaryReq);
+
+ REQUEST_SIZE_MATCH(xRRSetOutputPrimaryReq);
+ swaps(&stuff->length, n);
+ swapl(&stuff->window, n);
+ swapl(&stuff->output, n);
+ return ProcRandrVector[stuff->randrReqType] (client);
+}
+
+static int
+SProcRRGetOutputPrimary(ClientPtr client)
+{
+ int n;
+
+ REQUEST(xRRGetOutputPrimaryReq);
+
+ REQUEST_SIZE_MATCH(xRRGetOutputPrimaryReq);
+ swaps(&stuff->length, n);
+ swapl(&stuff->window, n);
+ return ProcRandrVector[stuff->randrReqType] (client);
+}
+
+static int
+SProcRRGetProviders(ClientPtr client)
+{
+ int n;
+
+ REQUEST(xRRGetProvidersReq);
+
+ REQUEST_SIZE_MATCH(xRRGetProvidersReq);
+ swaps(&stuff->length, n);
+ swapl(&stuff->window, n);
+ return ProcRandrVector[stuff->randrReqType] (client);
+}
+
+static int
+SProcRRGetProviderInfo(ClientPtr client)
+{
+ int n;
+
+ REQUEST(xRRGetProviderInfoReq);
+
+ REQUEST_SIZE_MATCH(xRRGetProviderInfoReq);
+ swaps(&stuff->length, n);
+ swapl(&stuff->provider, n);
+ swapl(&stuff->configTimestamp, n);
+ return ProcRandrVector[stuff->randrReqType] (client);
+}
+
+static int
+SProcRRSetProviderOffloadSink(ClientPtr client)
+{
+ int n;
+
+ REQUEST(xRRSetProviderOffloadSinkReq);
+
+ REQUEST_SIZE_MATCH(xRRSetProviderOffloadSinkReq);
+ swaps(&stuff->length, n);
+ swapl(&stuff->provider, n);
+ swapl(&stuff->sink_provider, n);
+ swapl(&stuff->configTimestamp, n);
+ return ProcRandrVector[stuff->randrReqType] (client);
+}
+
+static int
+SProcRRSetProviderOutputSource(ClientPtr client)
+{
+ int n;
+
+ REQUEST(xRRSetProviderOutputSourceReq);
+
+ REQUEST_SIZE_MATCH(xRRSetProviderOutputSourceReq);
+ swaps(&stuff->length, n);
+ swapl(&stuff->provider, n);
+ swapl(&stuff->source_provider, n);
+ swapl(&stuff->configTimestamp, n);
+ return ProcRandrVector[stuff->randrReqType] (client);
+}
+
+static int
+SProcRRListProviderProperties(ClientPtr client)
+{
+ int n;
+
+ REQUEST(xRRListProviderPropertiesReq);
+
+ REQUEST_SIZE_MATCH(xRRListProviderPropertiesReq);
+ swaps(&stuff->length, n);
+ swapl(&stuff->provider, n);
+ return ProcRandrVector[stuff->randrReqType] (client);
+}
+
+static int
+SProcRRQueryProviderProperty(ClientPtr client)
+{
+ int n;
+
+ REQUEST(xRRQueryProviderPropertyReq);
+
+ REQUEST_SIZE_MATCH(xRRQueryProviderPropertyReq);
+ swaps(&stuff->length, n);
+ swapl(&stuff->provider, n);
+ swapl(&stuff->property, n);
+ return ProcRandrVector[stuff->randrReqType] (client);
+}
+
+static int
+SProcRRConfigureProviderProperty(ClientPtr client)
+{
+ int n;
+
+ REQUEST(xRRConfigureProviderPropertyReq);
+
+ REQUEST_AT_LEAST_SIZE(xRRConfigureProviderPropertyReq);
+ swaps(&stuff->length, n);
+ swapl(&stuff->provider, n);
+ swapl(&stuff->property, n);
+ /* TODO: no way to specify format? */
+ SwapRestL(stuff);
+ return ProcRandrVector[stuff->randrReqType] (client);
+}
+
+static int
+SProcRRChangeProviderProperty(ClientPtr client)
+{
+ int n;
+
+ REQUEST(xRRChangeProviderPropertyReq);
+
+ REQUEST_AT_LEAST_SIZE(xRRChangeProviderPropertyReq);
+ swaps(&stuff->length, n);
+ swapl(&stuff->provider, n);
+ swapl(&stuff->property, n);
+ swapl(&stuff->type, n);
+ swapl(&stuff->nUnits, n);
+ switch (stuff->format) {
+ case 8:
+ break;
+ case 16:
+ SwapRestS(stuff);
+ break;
+ case 32:
+ SwapRestL(stuff);
+ break;
+ }
+ return ProcRandrVector[stuff->randrReqType] (client);
+}
+
+static int
+SProcRRDeleteProviderProperty(ClientPtr client)
+{
+ int n;
+
+ REQUEST(xRRDeleteProviderPropertyReq);
+
+ REQUEST_SIZE_MATCH(xRRDeleteProviderPropertyReq);
+ swaps(&stuff->length, n);
+ swapl(&stuff->provider, n);
+ swapl(&stuff->property, n);
+ return ProcRandrVector[stuff->randrReqType] (client);
+}
+
+static int
+SProcRRGetProviderProperty(ClientPtr client)
+{
+ int n;
+
+ REQUEST(xRRGetProviderPropertyReq);
+
+ REQUEST_SIZE_MATCH(xRRGetProviderPropertyReq);
+ swaps(&stuff->length, n);
+ swapl(&stuff->provider, n);
+ swapl(&stuff->property, n);
+ swapl(&stuff->type, n);
+ swapl(&stuff->longOffset, n);
+ swapl(&stuff->longLength, n);
+ return ProcRandrVector[stuff->randrReqType] (client);
+}
+
+static int
+SProcRRGetMonitors(ClientPtr client)
+{
+ int n;
+
+ REQUEST(xRRGetMonitorsReq);
+
+ REQUEST_SIZE_MATCH(xRRGetMonitorsReq);
+ swaps(&stuff->length, n);
+ swapl(&stuff->window, n);
+ return ProcRandrVector[stuff->randrReqType] (client);
+}
+
+static int
+SProcRRSetMonitor(ClientPtr client)
+{
+ int n;
+
+ REQUEST(xRRSetMonitorReq);
+
+ REQUEST_AT_LEAST_SIZE(xRRGetMonitorsReq);
+ swaps(&stuff->length, n);
+ swapl(&stuff->window, n);
+ swapl(&stuff->monitor.name, n);
+ swaps(&stuff->monitor.noutput, n);
+ swaps(&stuff->monitor.x, n);
+ swaps(&stuff->monitor.y, n);
+ swaps(&stuff->monitor.width, n);
+ swaps(&stuff->monitor.height, n);
+ SwapRestL(stuff);
+ return ProcRandrVector[stuff->randrReqType] (client);
+}
+
+static int
+SProcRRDeleteMonitor(ClientPtr client)
+{
+ int n;
+
+ REQUEST(xRRDeleteMonitorReq);
+
+ REQUEST_SIZE_MATCH(xRRDeleteMonitorReq);
+ swaps(&stuff->length, n);
+ swapl(&stuff->window, n);
+ swapl(&stuff->name, n);
+ return ProcRandrVector[stuff->randrReqType] (client);
+}
+
int (*SProcRandrVector[RRNumberRequests]) (ClientPtr) = {
SProcRRQueryVersion, /* 0 */
/* we skip 1 to make old clients fail pretty immediately */
@@ -418,4 +729,26 @@ int (*SProcRandrVector[RRNumberRequests]) (ClientPtr) = {
SProcRRGetCrtcGammaSize, /* 22 */
SProcRRGetCrtcGamma, /* 23 */
SProcRRSetCrtcGamma, /* 24 */
+/* V1.3 additions */
+ SProcRRGetScreenResources, /* 25 GetScreenResourcesCurrent */
+ SProcRRSetCrtcTransform, /* 26 */
+ SProcRRGetCrtcTransform, /* 27 */
+ SProcRRGetPanning, /* 28 */
+ SProcRRSetPanning, /* 29 */
+ SProcRRSetOutputPrimary, /* 30 */
+ SProcRRGetOutputPrimary, /* 31 */
+/* V1.4 additions */
+ SProcRRGetProviders, /* 32 */
+ SProcRRGetProviderInfo, /* 33 */
+ SProcRRSetProviderOffloadSink, /* 34 */
+ SProcRRSetProviderOutputSource, /* 35 */
+ SProcRRListProviderProperties, /* 36 */
+ SProcRRQueryProviderProperty, /* 37 */
+ SProcRRConfigureProviderProperty, /* 38 */
+ SProcRRChangeProviderProperty, /* 39 */
+ SProcRRDeleteProviderProperty, /* 40 */
+ SProcRRGetProviderProperty, /* 41 */
+ SProcRRGetMonitors, /* 42 */
+ SProcRRSetMonitor, /* 43 */
+ SProcRRDeleteMonitor, /* 44 */
};