1
0
mirror of https://github.com/mpv-player/mpv synced 2025-01-31 12:11:52 +00:00

x11: fix display-{width,height} calculation

Unexpectedly, x11->screenrc actually doesn't update with randr events.
In a multimonitor configuration it could easily be wrong depending on
the user's layout. While it's tempting to modify the logic so screenrc
changes with randr events, this rectangle is currently used everywhere
and as far as we know, this pretty much works fine. Instead, just loop
over the randr displays that we have and select it if it overlaps with
the winrc. This follows the same logic as the fps selection in the case
of the mpv window overlapping multiple monitors (the last one is
selected).
This commit is contained in:
Dudemanguy 2022-08-11 11:11:27 -05:00
parent b669a20bb5
commit f781dddabc

View File

@ -2078,10 +2078,16 @@ int vo_x11_control(struct vo *vo, int *events, int request, void *arg)
return VO_TRUE;
}
case VOCTRL_GET_DISPLAY_RES: {
if (!x11->window || x11->parent)
struct xrandr_display *selected_disp = NULL;
for (int n = 0; n < x11->num_displays; n++) {
struct xrandr_display *disp = &x11->displays[n];
if (disp->overlaps)
selected_disp = disp;
}
if (!x11->window || x11->parent || !selected_disp)
return VO_NOTAVAIL;
((int *)arg)[0] = x11->screenrc.x1;
((int *)arg)[1] = x11->screenrc.y1;
((int *)arg)[0] = selected_disp->rc.x1 - selected_disp->rc.x0;
((int *)arg)[1] = selected_disp->rc.y1 - selected_disp->rc.y0;
return VO_TRUE;
}
case VOCTRL_GET_HIDPI_SCALE: