commit 49e0968
Michael Forney
·
2013-06-21 07:16:46 +0000 UTC
parent f72c996
surface: Handle input region correctly
1 files changed,
+13,
-3
+13,
-3
1@@ -4,13 +4,18 @@
2
3 #include <stdio.h>
4
5+static pixman_box32_t infinite_extents = {
6+ .x1 = INT32_MIN, .y1 = INT32_MIN,
7+ .x2 = INT32_MAX, .y2 = INT32_MAX
8+};
9+
10 static void state_initialize(struct swc_surface_state * state)
11 {
12 state->buffer = NULL;
13
14 pixman_region32_init(&state->damage);
15 pixman_region32_init(&state->opaque);
16- pixman_region32_init(&state->input);
17+ pixman_region32_init_with_extents(&state->input, &infinite_extents);
18
19 wl_list_init(&state->frame_callbacks);
20 }
21@@ -112,7 +117,7 @@ static void set_input_region(struct wl_client * client,
22 pixman_region32_copy(&surface->pending.state.input, ®ion->region);
23 }
24 else
25- pixman_region32_clear(&surface->pending.state.input);
26+ pixman_region32_reset(&surface->pending.state.input, &infinite_extents);
27 }
28
29 static void commit(struct wl_client * client, struct wl_resource * resource)
30@@ -138,6 +143,12 @@ static void commit(struct wl_client * client, struct wl_resource * resource)
31 surface->geometry.width,
32 surface->geometry.height);
33
34+ /* Input */
35+ pixman_region32_copy(&surface->state.input, &surface->pending.state.input);
36+ pixman_region32_intersect_rect(&surface->state.input,
37+ &surface->state.input, 0, 0,
38+ surface->geometry.width,
39+ surface->geometry.height);
40
41 wl_list_insert_list(&surface->state.frame_callbacks,
42 &surface->pending.state.frame_callbacks);
43@@ -145,7 +156,6 @@ static void commit(struct wl_client * client, struct wl_resource * resource)
44 /* Reset pending state */
45 pixman_region32_clear(&surface->pending.state.damage);
46 pixman_region32_clear(&surface->pending.state.opaque);
47- pixman_region32_clear(&surface->pending.state.input);
48 surface->pending.state.buffer = surface->state.buffer;
49 wl_list_init(&surface->pending.state.frame_callbacks);
50