[mutter/gnome-3-22] wayland/pointer-constraints: Don't include window frame in region
- From: Jonas Ådahl <jadahl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter/gnome-3-22] wayland/pointer-constraints: Don't include window frame in region
- Date: Wed, 19 Oct 2016 09:58:33 +0000 (UTC)
commit f9d1bb4e6c68264b9d14231772eddef28bc48ce3
Author: Jonas Ådahl <jadahl gmail com>
Date: Fri Sep 23 10:51:56 2016 +0800
wayland/pointer-constraints: Don't include window frame in region
When Xwayland confines, the surface dimensions will include the server
side window manager decorations. We don't want the decorations to be
included in the constraint region so intersect the calculated input
region with the parts of the buffer rect that is not part of the window
frame.
https://bugzilla.gnome.org/show_bug.cgi?id=771859
src/wayland/meta-wayland-pointer-constraints.c | 22 ++++++++++++++++++++++
1 files changed, 22 insertions(+), 0 deletions(-)
---
diff --git a/src/wayland/meta-wayland-pointer-constraints.c b/src/wayland/meta-wayland-pointer-constraints.c
index 68395b5..aa89aa0 100644
--- a/src/wayland/meta-wayland-pointer-constraints.c
+++ b/src/wayland/meta-wayland-pointer-constraints.c
@@ -41,6 +41,7 @@
#include "backends/meta-backend-private.h"
#include "backends/native/meta-backend-native.h"
#include "backends/meta-pointer-constraint.h"
+#include "core/frame.h"
#include "pointer-constraints-unstable-v1-server-protocol.h"
@@ -603,11 +604,32 @@ cairo_region_t *
meta_wayland_pointer_constraint_calculate_effective_region (MetaWaylandPointerConstraint *constraint)
{
cairo_region_t *region;
+ MetaWindow *window;
region = meta_wayland_surface_calculate_input_region (constraint->surface);
if (constraint->region)
cairo_region_intersect (region, constraint->region);
+ window = constraint->surface->window;
+ if (window && window->frame)
+ {
+ MetaFrame *frame = window->frame;
+ int actual_width, actual_height;
+
+ g_assert (meta_xwayland_is_xwayland_surface (constraint->surface));
+
+ actual_width = window->buffer_rect.width - (frame->child_x +
+ 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
+ });
+ }
+
return region;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]