Multi monitor fix. (#12260)

This fix allows for the use of multi monitor when using CRTSwitchres. It fixes a bug that causes a crash.
Delete function will no longer try to delete resolutions from outputs that have not had resolutions added.
This commit is contained in:
alphanu1 2021-04-12 05:55:33 -07:00 committed by GitHub
parent 7f3b9e8a89
commit 5658ea7047
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -579,6 +579,29 @@ static void x11_display_server_destroy(void *data)
}
XRRFreeOutputInfo(outputs);
}
for (m = 0; m < resources->nmode; m++)
{
for (j = 0; j < res->noutput; j++)
{
for (i = 1 ; i <= dispserv->crt_name_id; i++ )
{
XRROutputInfo *outputs = XRRGetOutputInfo(dpy, res, res->outputs[j]);
if (outputs->connection == RR_Connected)
{
snprintf(dispserv->old_mode, sizeof(dispserv->old_mode),
"CRT%d", i);
if (string_is_equal(resources->modes[m].name,
dispserv->old_mode))
{
swoldmode = &resources->modes[m];
XRRDeleteOutputMode(dpy, res->outputs[j], swoldmode->id);
XRRDestroyMode(dpy, swoldmode->id);
XSync(dpy, False);
}
}
}
}
}
}
else
{
@ -611,15 +634,13 @@ static void x11_display_server_destroy(void *data)
XRRFreeCrtcInfo(crtc);
}
XRRFreeOutputInfo(outputs);
}
for (m = 0; m < resources->nmode; m++)
{
for (j = 0; j < res->noutput; j++)
for (m = 0; m < resources->nmode; m++)
{
for (i = 1 ; i <= dispserv->crt_name_id; i++ )
{
XRROutputInfo *outputs = XRRGetOutputInfo(dpy, res, res->outputs[j]);
XRROutputInfo *outputs = XRRGetOutputInfo(dpy, res, res->outputs[dispserv->monitor_index]);
if (outputs->connection == RR_Connected)
{
snprintf(dispserv->old_mode, sizeof(dispserv->old_mode),
@ -628,14 +649,17 @@ static void x11_display_server_destroy(void *data)
dispserv->old_mode))
{
swoldmode = &resources->modes[m];
XRRDeleteOutputMode(dpy, res->outputs[j], swoldmode->id);
XRRDeleteOutputMode(dpy, res->outputs[dispserv->monitor_index], swoldmode->id);
XRRDestroyMode(dpy, swoldmode->id);
XSync(dpy, False);
}
}
}
}
}
XRRFreeScreenResources(resources);
XRRFreeScreenResources(res);
XCloseDisplay(dpy);