xwayland: Use the right nameLength by default

When creating the output with the default "XWAYLAND<n>" name, we use
the MAX_OUTPUT_NAME value to allocate a lot more memory than necessary
to accommodate for future output names once they get updated, but by
doing so, we also send XRandR way too much (zeroed) data since the
"nameLength" value is (purposely) set too big.

So, instead, let's just update the name after creating the RR output,
this way we set both the name and nameLength to their correct values
while keeping the initial large allocation.

Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
Fixes: 3c07a01c42 - xwayland: Use xdg-output name for XRandR
Reviewed-by: Simon Ser <contact@emersion.fr>
This commit is contained in:
Olivier Fourdan 2023-12-01 15:23:27 +01:00 committed by Olivier Fourdan
parent 0e314afef6
commit 83453fb51e

View File

@ -847,9 +847,6 @@ xwl_output_create(struct xwl_screen *xwl_screen, uint32_t id,
xwl_output->xwl_screen = xwl_screen;
if (with_xrandr) {
snprintf(name, MAX_OUTPUT_NAME, "XWAYLAND%d",
xwl_screen_get_next_output_serial(xwl_screen));
xwl_output->randr_crtc = RRCrtcCreate(xwl_screen->screen, xwl_output);
if (!xwl_output->randr_crtc) {
ErrorF("Failed creating RandR CRTC\n");
@ -857,12 +854,17 @@ xwl_output_create(struct xwl_screen *xwl_screen, uint32_t id,
}
RRCrtcSetRotations (xwl_output->randr_crtc, ALL_ROTATIONS);
/* Allocate MAX_OUTPUT_NAME data for the output name, all filled with zeros */
xwl_output->randr_output = RROutputCreate(xwl_screen->screen, name,
MAX_OUTPUT_NAME, xwl_output);
if (!xwl_output->randr_output) {
ErrorF("Failed creating RandR Output\n");
goto err;
}
/* Set the default output name to a sensible value */
snprintf(name, MAX_OUTPUT_NAME, "XWAYLAND%d",
xwl_screen_get_next_output_serial(xwl_screen));
xwl_output_set_name(xwl_output, name);
xwl_output_set_emulated(xwl_output);
RRCrtcGammaSetSize(xwl_output->randr_crtc, 256);