From 98ef6d0d0521b3cfb72153bc427a9bfc86b8d338 Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Wed, 23 Dec 2020 18:58:48 +0100 Subject: [PATCH] wayland: Ensure pointer constraint region consistency Changes in games between fullscreen and windowed modes may trigger chaotic situations where the buffer and the frame size temporarily disagree, producing rectangles with negative width/height. This is usually followed by other updates that bring the pointer constraint up to date. This makes cairo panic and return an "error" empty region, which breaks deeper down when using the region rectangles to apply the pointer constraint. If we hit this situation, ignore the frame rectangle, and just go with the buffer rectangle. Part-of: --- src/wayland/meta-wayland-pointer-constraints.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/wayland/meta-wayland-pointer-constraints.c b/src/wayland/meta-wayland-pointer-constraints.c index d7033e3ef..965b95dda 100644 --- a/src/wayland/meta-wayland-pointer-constraints.c +++ b/src/wayland/meta-wayland-pointer-constraints.c @@ -624,12 +624,15 @@ meta_wayland_pointer_constraint_calculate_effective_region (MetaWaylandPointerCo frame->right_width); actual_height = window->buffer_rect.height - (frame->child_y + frame->bottom_height); - cairo_region_intersect_rectangle (region, &(cairo_rectangle_int_t) { - .x = frame->child_x, - .y = frame->child_y, - .width = actual_width, - .height = actual_height - }); + if (actual_width > 0 && actual_height > 0) + { + cairo_region_intersect_rectangle (region, &(cairo_rectangle_int_t) { + .x = frame->child_x, + .y = frame->child_y, + .width = actual_width, + .height = actual_height + }); + } } return region;