commit 6d2e2b4

Michael Forney  ·  2013-06-14 10:49:49 +0000 UTC
parent eab1c18
Move client/resource handling of surface into swc_surface_initialize
4 files changed,  +62, -82
+10, -7
 1@@ -162,10 +162,13 @@ static void handle_drm_event(struct wl_listener * listener, void * data)
 2                                                          drm_listener);
 3 }
 4 
 5-static void destroy_surface(struct wl_resource * resource)
 6+static void handle_surface_destroy(struct wl_listener * listener, void * data)
 7 {
 8+    struct wl_resource * resource = data;
 9     struct swc_surface * surface = resource->data;
10 
11+    wl_list_remove(&surface->link);
12+
13     free(surface);
14 }
15 
16@@ -208,20 +211,20 @@ static void create_surface(struct wl_client * client,
17         .compositor = compositor,
18         .event_listener = (struct wl_listener) {
19             .notify = &handle_surface_event
20+        },
21+        .destroy_listener = {
22+            .notify = &handle_surface_destroy
23         }
24     };
25 
26-    swc_surface_initialize(surface);
27+    swc_surface_initialize(surface, client, id);
28     wl_signal_add(&surface->event_signal,
29                   &surface->compositor_state.event_listener);
30+    wl_resource_add_destroy_listener(surface->resource,
31+                  &surface->compositor_state.destroy_listener);
32 
33     wl_list_insert(&compositor->surfaces, &surface->link);
34     surface->output_mask |= 1 << output->id;
35-
36-    surface->resource
37-        = wl_client_add_object(client, &wl_surface_interface,
38-                               &swc_surface_interface, id, surface);
39-    wl_resource_set_destructor(surface->resource, &destroy_surface);
40 }
41 
42 static void create_region(struct wl_client * client,
+49, -44
  1@@ -4,16 +4,6 @@
  2 
  3 #include <stdio.h>
  4 
  5-struct wl_surface_interface swc_surface_interface = {
  6-    .destroy = &swc_surface_destroy,
  7-    .attach = &swc_surface_attach,
  8-    .damage = &swc_surface_damage,
  9-    .frame = &swc_surface_frame,
 10-    .set_opaque_region = &swc_surface_set_opaque_region,
 11-    .set_input_region = &swc_surface_set_input_region,
 12-    .commit = &swc_surface_commit,
 13-};
 14-
 15 static void state_initialize(struct swc_surface_state * state)
 16 {
 17     state->buffer = NULL;
 18@@ -25,33 +15,20 @@ static void state_initialize(struct swc_surface_state * state)
 19     wl_list_init(&state->frame_callbacks);
 20 }
 21 
 22-bool swc_surface_initialize(struct swc_surface * surface)
 23+static void destroy_surface_resource(struct wl_resource * resource)
 24 {
 25-    state_initialize(&surface->state);
 26-    state_initialize(&surface->pending.state);
 27-
 28-    wl_signal_init(&surface->event_signal);
 29-
 30-    surface->output_mask = 0;
 31-
 32-    return true;
 33-}
 34+    struct swc_surface * surface = resource->data;
 35 
 36-void swc_surface_finish(struct swc_surface * surface)
 37-{
 38+    swc_surface_finish(surface);
 39 }
 40 
 41-void swc_surface_destroy(struct wl_client * client,
 42-                         struct wl_resource * resource)
 43+static void destroy(struct wl_client * client, struct wl_resource * resource)
 44 {
 45     wl_resource_destroy(resource);
 46 }
 47 
 48-void swc_surface_attach(struct wl_client * client,
 49-                        struct wl_resource * resource,
 50-                        struct wl_resource * buffer_resource,
 51-                        int32_t x,
 52-                        int32_t y)
 53+static void attach(struct wl_client * client, struct wl_resource * resource,
 54+                   struct wl_resource * buffer_resource, int32_t x, int32_t y)
 55 {
 56     struct swc_surface * surface = resource->data;
 57     struct wl_buffer * buffer = buffer_resource->data;
 58@@ -66,10 +43,8 @@ void swc_surface_attach(struct wl_client * client,
 59     surface->geometry.height = buffer->height;
 60 }
 61 
 62-void swc_surface_damage(struct wl_client * client,
 63-                        struct wl_resource * resource,
 64-                        int32_t x, int32_t y,
 65-                        int32_t width, int32_t height)
 66+static void damage(struct wl_client * client, struct wl_resource * resource,
 67+                   int32_t x, int32_t y, int32_t width, int32_t height)
 68 {
 69     printf("surface_damage\n");
 70     struct swc_surface * surface = resource->data;
 71@@ -79,9 +54,8 @@ void swc_surface_damage(struct wl_client * client,
 72                                x, y, width, height);
 73 }
 74 
 75-void swc_surface_frame(struct wl_client * client,
 76-                       struct wl_resource * resource,
 77-                       uint32_t id)
 78+static void frame(struct wl_client * client, struct wl_resource * resource,
 79+                  uint32_t id)
 80 {
 81     struct swc_surface * surface = resource->data;
 82     struct wl_resource * callback_resource;
 83@@ -93,9 +67,9 @@ void swc_surface_frame(struct wl_client * client,
 84     wl_list_insert(surface->pending.state.frame_callbacks.prev, &resource->link);
 85 }
 86 
 87-void swc_surface_set_opaque_region(struct wl_client * client,
 88-                                   struct wl_resource * resource,
 89-                                   struct wl_resource * region_resource)
 90+static void set_opaque_region(struct wl_client * client,
 91+                              struct wl_resource * resource,
 92+                              struct wl_resource * region_resource)
 93 {
 94     struct swc_surface * surface = resource->data;
 95 
 96@@ -111,9 +85,9 @@ void swc_surface_set_opaque_region(struct wl_client * client,
 97         pixman_region32_clear(&surface->pending.state.opaque);
 98 }
 99 
100-void swc_surface_set_input_region(struct wl_client * client,
101-                                  struct wl_resource * resource,
102-                                  struct wl_resource * region_resource)
103+static void set_input_region(struct wl_client * client,
104+                             struct wl_resource * resource,
105+                             struct wl_resource * region_resource)
106 {
107     struct swc_surface * surface = resource->data;
108 
109@@ -129,8 +103,7 @@ void swc_surface_set_input_region(struct wl_client * client,
110         pixman_region32_clear(&surface->pending.state.input);
111 }
112 
113-void swc_surface_commit(struct wl_client * client,
114-                        struct wl_resource * resource)
115+static void commit(struct wl_client * client, struct wl_resource * resource)
116 {
117     struct swc_surface * surface = resource->data;
118     struct swc_event event;
119@@ -168,3 +141,35 @@ void swc_surface_commit(struct wl_client * client,
120     wl_signal_emit(&surface->event_signal, &event);
121 }
122 
123+struct wl_surface_interface surface_implementation = {
124+    .destroy = &destroy,
125+    .attach = &attach,
126+    .damage = &damage,
127+    .frame = &frame,
128+    .set_opaque_region = &set_opaque_region,
129+    .set_input_region = &set_input_region,
130+    .commit = &commit,
131+};
132+
133+bool swc_surface_initialize(struct swc_surface * surface,
134+                            struct wl_client * client, uint32_t id)
135+{
136+    state_initialize(&surface->state);
137+    state_initialize(&surface->pending.state);
138+
139+    surface->resource = wl_client_add_object(client, &wl_surface_interface,
140+                                             &surface_implementation, id, surface);
141+    wl_resource_set_destructor(surface->resource, &destroy_surface_resource);
142+
143+    wl_signal_init(&surface->event_signal);
144+
145+    surface->output_mask = 0;
146+
147+    return true;
148+}
149+
150+void swc_surface_finish(struct swc_surface * surface)
151+{
152+}
153+
154+
+2, -31
 1@@ -56,39 +56,10 @@ struct swc_surface
 2     struct wl_list link;
 3 };
 4 
 5-bool swc_surface_initialize(struct swc_surface * surface);
 6+bool swc_surface_initialize(struct swc_surface * surface,
 7+                            struct wl_client * client, uint32_t id);
 8 
 9 void swc_surface_finish(struct swc_surface * surface);
10 
11-extern struct wl_surface_interface swc_surface_interface;
12-
13-void swc_surface_destroy(struct wl_client * client,
14-                         struct wl_resource * resource);
15-
16-void swc_surface_attach(struct wl_client * client,
17-                        struct wl_resource * resource,
18-                        struct wl_resource * buffer_resource,
19-                        int32_t x, int32_t y);
20-
21-void swc_surface_damage(struct wl_client * client,
22-                        struct wl_resource * resource,
23-                        int32_t x, int32_t y,
24-                        int32_t width, int32_t height);
25-
26-void swc_surface_frame(struct wl_client * client,
27-                       struct wl_resource * resource,
28-                       uint32_t callback);
29-
30-void swc_surface_set_opaque_region(struct wl_client * client,
31-                                   struct wl_resource * resource,
32-                                   struct wl_resource * region_resource);
33-
34-void swc_surface_set_input_region(struct wl_client * client,
35-                                  struct wl_resource * resource,
36-                                  struct wl_resource * region_resource);
37-
38-void swc_surface_commit(struct wl_client * client,
39-                        struct wl_resource * resource);
40-
41 #endif
42 
+1, -0
1@@ -22,6 +22,7 @@ union swc_renderer_surface_state
2 struct swc_compositor_surface_state
3 {
4     struct swc_compositor * compositor;
5+    struct wl_listener destroy_listener;
6     struct wl_listener event_listener;
7 };
8