From d6cc7934544c1f3c62cf768c2cc78c904d67b643 Mon Sep 17 00:00:00 2001 From: rpm-build Date: Thu, 18 Jan 2018 15:56:03 +0100 Subject: [PATCH] xwayland: use RandR 1.2 interface This adds the RandR 1.2 interface to xwayland and allows modes advertised by the compositor to be set. RandR 1.2 will be needed to implement fake-mode-setting. As RandR 1.2 does not allow to set unregistered modes and xwayland only lists those send by the compositor, it's save to enable mode- setting already, as only compositors which send multiple modes are affected. Compositors should only send multiple modes if they can handle the resulting behaviour. --- hw/xwayland/xwayland-output.c | 76 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) diff --git a/hw/xwayland/xwayland-output.c b/hw/xwayland/xwayland-output.c index 19d8e0c..fb021d2 100644 --- a/hw/xwayland/xwayland-output.c +++ b/hw/xwayland/xwayland-output.c @@ -411,12 +411,75 @@ xwl_randr_get_info(ScreenPtr pScreen, Rotation * rotations) return TRUE; } +#ifdef RANDR_10_INTERFACE static Bool xwl_randr_set_config(ScreenPtr pScreen, Rotation rotation, int rate, RRScreenSizePtr pSize) { return FALSE; } +#endif + +#if RANDR_12_INTERFACE +static Bool +xwl_randr_screen_set_size(ScreenPtr pScreen, + CARD16 width, + CARD16 height, + CARD32 mmWidth, CARD32 mmHeight) +{ + return TRUE; +} + +static Bool +xwl_randr_crtc_set(ScreenPtr pScreen, + RRCrtcPtr crtc, + RRModePtr mode, + int x, + int y, + Rotation rotation, + int numOutputs, RROutputPtr * outputs) +{ + return RRCrtcNotify(crtc, mode, x, y, + rotation, + NULL, + numOutputs, outputs); +} + +static Bool +xwl_randr_crtc_set_gamma(ScreenPtr pScreen, RRCrtcPtr crtc) +{ + return TRUE; +} + +static Bool +xwl_randr_Crtc_get_gamma(ScreenPtr pScreen, RRCrtcPtr crtc) +{ + return TRUE; +} + +static Bool +xwl_randr_output_set_property(ScreenPtr pScreen, + RROutputPtr output, + Atom property, + RRPropertyValuePtr value) +{ + return TRUE; +} + +static Bool +xwl_output_validate_mode(ScreenPtr pScreen, + RROutputPtr output, + RRModePtr mode) +{ + return TRUE; +} + +static void +xwl_randr_mode_destroy(ScreenPtr pScreen, RRModePtr mode) +{ + return; +} +#endif Bool xwl_screen_init_output(struct xwl_screen *xwl_screen) @@ -430,7 +493,20 @@ xwl_screen_init_output(struct xwl_screen *xwl_screen) rp = rrGetScrPriv(xwl_screen->screen); rp->rrGetInfo = xwl_randr_get_info; + +#if RANDR_10_INTERFACE rp->rrSetConfig = xwl_randr_set_config; +#endif + +#if RANDR_12_INTERFACE + rp->rrScreenSetSize = xwl_randr_screen_set_size; + rp->rrCrtcSet = xwl_randr_crtc_set; + rp->rrCrtcSetGamma = xwl_randr_crtc_set_gamma; + rp->rrCrtcGetGamma = xwl_randr_Crtc_get_gamma; + rp->rrOutputSetProperty = xwl_randr_output_set_property; + rp->rrOutputValidateMode = xwl_output_validate_mode; + rp->rrModeDestroy = xwl_randr_mode_destroy; +#endif return TRUE; } -- 2.14.3