mirror of
https://github.com/libretro/RetroArch
synced 2025-04-07 13:23:32 +00:00
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:
parent
7f3b9e8a89
commit
5658ea7047
@ -579,6 +579,29 @@ static void x11_display_server_destroy(void *data)
|
|||||||
}
|
}
|
||||||
XRRFreeOutputInfo(outputs);
|
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
|
else
|
||||||
{
|
{
|
||||||
@ -611,15 +634,13 @@ static void x11_display_server_destroy(void *data)
|
|||||||
XRRFreeCrtcInfo(crtc);
|
XRRFreeCrtcInfo(crtc);
|
||||||
}
|
}
|
||||||
XRRFreeOutputInfo(outputs);
|
XRRFreeOutputInfo(outputs);
|
||||||
}
|
|
||||||
|
|
||||||
for (m = 0; m < resources->nmode; m++)
|
for (m = 0; m < resources->nmode; m++)
|
||||||
{
|
|
||||||
for (j = 0; j < res->noutput; j++)
|
|
||||||
{
|
{
|
||||||
|
|
||||||
for (i = 1 ; i <= dispserv->crt_name_id; i++ )
|
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)
|
if (outputs->connection == RR_Connected)
|
||||||
{
|
{
|
||||||
snprintf(dispserv->old_mode, sizeof(dispserv->old_mode),
|
snprintf(dispserv->old_mode, sizeof(dispserv->old_mode),
|
||||||
@ -628,14 +649,17 @@ static void x11_display_server_destroy(void *data)
|
|||||||
dispserv->old_mode))
|
dispserv->old_mode))
|
||||||
{
|
{
|
||||||
swoldmode = &resources->modes[m];
|
swoldmode = &resources->modes[m];
|
||||||
XRRDeleteOutputMode(dpy, res->outputs[j], swoldmode->id);
|
XRRDeleteOutputMode(dpy, res->outputs[dispserv->monitor_index], swoldmode->id);
|
||||||
XRRDestroyMode(dpy, swoldmode->id);
|
XRRDestroyMode(dpy, swoldmode->id);
|
||||||
XSync(dpy, False);
|
XSync(dpy, False);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
XRRFreeScreenResources(resources);
|
XRRFreeScreenResources(resources);
|
||||||
XRRFreeScreenResources(res);
|
XRRFreeScreenResources(res);
|
||||||
XCloseDisplay(dpy);
|
XCloseDisplay(dpy);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user