wayland: don't compute absurd window size

For some reason, schedule_resize() can be called with everything set to
0. The code couldn't handle wl->window.aspect set to 0, converting NaNs
to integers. Just work this around.

(I have no idea what I'm doing. This is probably a corner case caused
by my broken-ish wayland setup.)
This commit is contained in:
wm4 2015-01-12 15:16:11 +01:00 committed by Diogo Franco (Kovensky)
parent 399e746275
commit 6a9cdfa771
1 changed files with 6 additions and 3 deletions

View File

@ -717,6 +717,9 @@ static void schedule_resize(struct vo_wayland_state *wl,
int32_t minimum_size = 150;
int32_t x, y;
float temp_aspect = width / (float) MPMAX(height, 1);
float win_aspect = wl->window.aspect;
if (win_aspect <= 0)
win_aspect = 1;
MP_DBG(wl, "schedule resize: %dx%d\n", width, height);
@ -734,7 +737,7 @@ static void schedule_resize(struct vo_wayland_state *wl,
switch (edges) {
case WL_SHELL_SURFACE_RESIZE_TOP:
case WL_SHELL_SURFACE_RESIZE_BOTTOM:
width = wl->window.aspect * height;
width = win_aspect * height;
break;
case WL_SHELL_SURFACE_RESIZE_LEFT:
case WL_SHELL_SURFACE_RESIZE_RIGHT:
@ -742,13 +745,13 @@ static void schedule_resize(struct vo_wayland_state *wl,
case WL_SHELL_SURFACE_RESIZE_TOP_RIGHT:
case WL_SHELL_SURFACE_RESIZE_BOTTOM_LEFT:
case WL_SHELL_SURFACE_RESIZE_BOTTOM_RIGHT:
height = (1 / wl->window.aspect) * width;
height = (1 / win_aspect) * width;
break;
default:
if (wl->window.aspect < temp_aspect)
width = wl->window.aspect * height;
else
height = (1 / wl->window.aspect) * width;
height = (1 / win_aspect) * width;
break;
}