[PATCH] toytoolkit: Recalculate input region if client has modified it's size.

Scott Moreau oreaus at gmail.com
Mon May 14 00:19:34 PDT 2012


If a client changes it's width/height values in it's widget resize handler,
the input region will be wrong because of the assumptions toytoolkit makes
in frame_resize_handler(). So far, gears is the only client that does this.
---
 clients/window.c |   19 ++++++++++++++++---
 1 files changed, 16 insertions(+), 3 deletions(-)

diff --git a/clients/window.c b/clients/window.c
index e14edb0..0687d65 100644
--- a/clients/window.c
+++ b/clients/window.c
@@ -1163,6 +1163,7 @@ frame_resize_handler(struct widget *widget,
 	struct frame_button * button;
 	int x_l, x_r, y, w, h;
 	int decoration_width, decoration_height;
+	int child_width, child_height;
 	int opaque_margin;
 
 	if (widget->window->type != TYPE_FULLSCREEN) {
@@ -1209,9 +1210,21 @@ frame_resize_handler(struct widget *widget,
 				      allocation.height,
 				      child->user_data);
 
-	widget_set_allocation(widget, 0, 0,
-			      child->allocation.width + decoration_width,
-			      child->allocation.height + decoration_height);
+	child_width = child->allocation.width + decoration_width;
+	child_height = child->allocation.height + decoration_height;
+
+	if (child_width != allocation.width || child_height != allocation.height) {
+		if (widget->window->input_region)
+			wl_region_destroy(widget->window->input_region);
+		widget->window->input_region =
+			wl_compositor_create_region(display->compositor);
+		wl_region_add(widget->window->input_region,
+			      frame->margin, frame->margin,
+			      child_width - 2 * frame->margin,
+			      child_height - 2 * frame->margin);
+	}
+
+	widget_set_allocation(widget, 0, 0, child_width, child_height);
 
 	if (child->opaque) {
 		widget->window->opaque_region =
-- 
1.7.7.6



More information about the wayland-devel mailing list