winex11.drv: Check that there are connected outputs before using XRandR 1.4.

On headless systems, Wine can still run through a VNC connection even though no outputs are
connected. Fallback to using the Xinerama display device handler in this case to report at least
one monitor.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=49500
Signed-off-by: Zhiyi Zhang <zzhang@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Zhiyi Zhang 2021-01-01 13:00:47 +08:00 committed by Alexandre Julliard
parent 472adf6509
commit 798137dbf6
1 changed files with 32 additions and 0 deletions

View File

@ -1555,6 +1555,38 @@ void X11DRV_XRandR_Init(void)
#ifdef HAVE_XRRGETPROVIDERRESOURCES
if (ret >= 4 && (major > 1 || (major == 1 && minor >= 4)))
{
XRRScreenResources *screen_resources;
XRROutputInfo *output_info;
BOOL found_output = FALSE;
INT i;
screen_resources = xrandr_get_screen_resources();
if (!screen_resources)
return;
for (i = 0; i < screen_resources->noutput; ++i)
{
output_info = pXRRGetOutputInfo( gdi_display, screen_resources, screen_resources->outputs[i] );
if (!output_info)
continue;
if (output_info->connection == RR_Connected)
{
pXRRFreeOutputInfo( output_info );
found_output = TRUE;
break;
}
pXRRFreeOutputInfo( output_info );
}
pXRRFreeScreenResources( screen_resources );
if (!found_output)
{
WARN("No connected outputs found.\n");
return;
}
display_handler.name = "XRandR 1.4";
display_handler.priority = 200;
display_handler.get_gpus = xrandr14_get_gpus;