commit a0953ef

Michael Forney  ·  2014-02-16 23:06:12 +0000 UTC
parent fffe652
compositor: Add create_view instead of add/remove surface
8 files changed,  +50, -58
+14, -18
 1@@ -512,14 +512,14 @@ static void handle_view_event(struct wl_listener * listener, void * data)
 2     }
 3 }
 4 
 5-bool swc_compositor_add_surface(struct swc_surface * surface)
 6+struct swc_view * swc_compositor_create_view(struct swc_surface * surface)
 7 {
 8     struct view * view;
 9 
10     view = malloc(sizeof *view);
11 
12     if (!view)
13-        return false;
14+        return NULL;
15 
16     swc_view_initialize(&view->base, &view_impl);
17     view->event_listener.notify = &handle_view_event;
18@@ -537,27 +537,25 @@ bool swc_compositor_add_surface(struct swc_surface * surface)
19     pixman_region32_init(&view->clip);
20     swc_surface_set_view(surface, &view->base);
21 
22-    return true;
23+    return &view->base;
24 }
25 
26-bool swc_compositor_remove_surface(struct swc_surface * surface)
27+void compositor_view_destroy(struct swc_view * base)
28 {
29-    struct view * view = (void *) surface->view;
30+    struct view * view = (void *) base;
31 
32     assert(view->base.impl == &view_impl);
33 
34-    swc_compositor_surface_hide(view->surface);
35+    compositor_view_hide(&view->base);
36     swc_surface_set_view(view->surface, NULL);
37     swc_view_finalize(&view->base);
38     pixman_region32_fini(&view->clip);
39     free(view);
40-
41-    return true;
42 }
43 
44-void swc_compositor_surface_show(struct swc_surface * surface)
45+void compositor_view_show(struct swc_view * base)
46 {
47-    struct view * view = (void *) surface->view;
48+    struct view * view = (void *) base;
49 
50     assert(view->base.impl == &view_impl);
51 
52@@ -576,9 +574,9 @@ void swc_compositor_surface_show(struct swc_surface * surface)
53     wl_list_insert(&compositor.views, &view->link);
54 }
55 
56-void swc_compositor_surface_hide(struct swc_surface * surface)
57+void compositor_view_hide(struct swc_view * base)
58 {
59-    struct view * view = (void *) surface->view;
60+    struct view * view = (void *) base;
61 
62     assert(view->base.impl == &view_impl);
63 
64@@ -594,10 +592,9 @@ void swc_compositor_surface_hide(struct swc_surface * surface)
65     view->visible = false;
66 }
67 
68-void swc_compositor_surface_set_border_width(struct swc_surface * surface,
69-                                             uint32_t width)
70+void compositor_view_set_border_width(struct swc_view * base, uint32_t width)
71 {
72-    struct view * view = (void *) surface->view;
73+    struct view * view = (void *) base;
74 
75     assert(view->base.impl == &view_impl);
76 
77@@ -613,10 +610,9 @@ void swc_compositor_surface_set_border_width(struct swc_surface * surface,
78     update(&view->base);
79 }
80 
81-void swc_compositor_surface_set_border_color(struct swc_surface * surface,
82-                                             uint32_t color)
83+void compositor_view_set_border_color(struct swc_view * base, uint32_t color)
84 {
85-    struct view * view = (void *) surface->view;
86+    struct view * view = (void *) base;
87 
88     assert(view->base.impl == &view_impl);
89 
+10, -9
 1@@ -36,15 +36,16 @@ struct swc_compositor
 2 bool swc_compositor_initialize();
 3 void swc_compositor_finalize();
 4 
 5-bool swc_compositor_add_surface(struct swc_surface * surface);
 6-bool swc_compositor_remove_surface(struct swc_surface * surface);
 7-
 8-void swc_compositor_surface_show(struct swc_surface * surface);
 9-void swc_compositor_surface_hide(struct swc_surface * surface);
10-void swc_compositor_surface_set_border_color(struct swc_surface * surface,
11-                                             uint32_t color);
12-void swc_compositor_surface_set_border_width(struct swc_surface * surface,
13-                                             uint32_t width);
14+struct swc_view * swc_compositor_create_view
15+    (struct swc_surface * surface);
16+
17+void compositor_view_destroy(struct swc_view * view);
18+
19+void compositor_view_show(struct swc_view * view);
20+void compositor_view_hide(struct swc_view * view);
21+
22+void compositor_view_set_border_color(struct swc_view * view, uint32_t color);
23+void compositor_view_set_border_width(struct swc_view * view, uint32_t width);
24 
25 #endif
26 
+11, -5
 1@@ -40,7 +40,7 @@ static void update_position(struct swc_panel * panel)
 2 {
 3     int32_t x, y;
 4     struct swc_rectangle * screen = &panel->screen->base.geometry,
 5-                         * view = &panel->surface->view->geometry;
 6+                         * view = &panel->view->geometry;
 7 
 8     switch (panel->edge)
 9     {
10@@ -103,11 +103,17 @@ static void dock(struct wl_client * client, struct wl_resource * resource,
11     panel->screen = screen;
12     panel->edge = edge;
13     panel->docked = true;
14+    panel->view = swc_compositor_create_view(panel->surface);
15+
16+    if (!panel->view)
17+    {
18+        wl_resource_post_no_memory(resource);
19+        return;
20+    }
21 
22-    swc_compositor_add_surface(panel->surface);
23     update_position(panel);
24-    swc_compositor_surface_show(panel->surface);
25-    wl_signal_add(&panel->surface->view->event_signal, &panel->view_listener);
26+    compositor_view_show(panel->view);
27+    wl_signal_add(&panel->view->event_signal, &panel->view_listener);
28     wl_list_insert(&screen->modifiers, &panel->modifier.link);
29 
30     if (focus)
31@@ -193,7 +199,7 @@ static void destroy_panel(struct wl_resource * resource)
32         wl_list_remove(&panel->view_listener.link);
33         wl_list_remove(&panel->modifier.link);
34         screen_update_usable_geometry(panel->screen);
35-        swc_compositor_remove_surface(panel->surface);
36+        compositor_view_destroy(panel->view);
37     }
38 
39     free(panel);
+1, -0
1@@ -35,6 +35,7 @@ struct swc_panel
2 
3     struct swc_surface * surface;
4     struct wl_listener surface_destroy_listener;
5+    struct swc_view * view;
6     struct wl_listener view_listener;
7     struct screen * screen;
8     struct screen_modifier modifier;
+0, -16
 1@@ -83,14 +83,6 @@ static void set_transient(struct wl_client * client,
 2                           struct wl_resource * parent_resource,
 3                           int32_t x, int32_t y, uint32_t flags)
 4 {
 5-    struct swc_shell_surface * shell_surface
 6-        = wl_resource_get_user_data(resource);
 7-    struct swc_surface * parent = wl_resource_get_user_data(parent_resource);
 8-
 9-    swc_view_move(shell_surface->window.surface->view,
10-                  parent->view->geometry.x + x, parent->view->geometry.y + y);
11-    swc_compositor_surface_show(shell_surface->window.surface);
12-
13     /* XXX: Handle transient */
14 }
15 
16@@ -107,14 +99,6 @@ static void set_popup(struct wl_client * client, struct wl_resource * resource,
17                       struct wl_resource * parent_resource,
18                       int32_t x, int32_t y, uint32_t flags)
19 {
20-    struct swc_shell_surface * shell_surface
21-        = wl_resource_get_user_data(resource);
22-    struct swc_surface * parent = wl_resource_get_user_data(parent_resource);
23-
24-    swc_view_move(shell_surface->window.surface->view,
25-                  parent->view->geometry.x + x, parent->view->geometry.y + y);
26-    swc_compositor_surface_show(shell_surface->window.surface);
27-
28     /* XXX: Handle popup */
29 }
30 
+11, -8
 1@@ -58,13 +58,13 @@ struct wl_listener window_enter_listener = {
 2 EXPORT
 3 void swc_window_show(struct swc_window * window)
 4 {
 5-    swc_compositor_surface_show(INTERNAL(window)->surface);
 6+    compositor_view_show(INTERNAL(window)->view);
 7 }
 8 
 9 EXPORT
10 void swc_window_hide(struct swc_window * window)
11 {
12-    swc_compositor_surface_hide(INTERNAL(window)->surface);
13+    compositor_view_hide(INTERNAL(window)->view);
14 }
15 
16 EXPORT
17@@ -99,17 +99,17 @@ void swc_window_set_geometry(struct swc_window * base,
18     if (window->impl->configure)
19         window->impl->configure(window, geometry);
20 
21-    swc_view_move(window->surface->view, geometry->x, geometry->y);
22+    swc_view_move(window->view, geometry->x, geometry->y);
23 }
24 
25 EXPORT
26 void swc_window_set_border(struct swc_window * window,
27                            uint32_t border_color, uint32_t border_width)
28 {
29-    struct swc_surface * surface = INTERNAL(window)->surface;
30+    struct swc_view * view = INTERNAL(window)->view;
31 
32-    swc_compositor_surface_set_border_color(surface, border_color);
33-    swc_compositor_surface_set_border_width(surface, border_width);
34+    compositor_view_set_border_color(view, border_color);
35+    compositor_view_set_border_width(view, border_width);
36 }
37 
38 bool window_initialize(struct window * window, const struct window_impl * impl,
39@@ -122,11 +122,14 @@ bool window_initialize(struct window * window, const struct window_impl * impl,
40     window->base.state = SWC_WINDOW_STATE_NONE;
41     window->base.parent = NULL;
42     wl_signal_init(&window->base.event_signal);
43+
44+    if (!(window->view = swc_compositor_create_view(surface)))
45+        return false;
46+
47     window->surface = surface;
48     window->impl = impl;
49 
50     surface->window = window;
51-    swc_compositor_add_surface(surface);
52 
53     swc.manager->new_window(&window->base);
54 
55@@ -138,7 +141,7 @@ void window_finalize(struct window * window)
56     DEBUG("Finalizing window, %p\n", window);
57 
58     swc_send_event(&window->base.event_signal, SWC_WINDOW_DESTROYED, NULL);
59-    swc_compositor_remove_surface(window->surface);
60+    compositor_view_destroy(window->view);
61     window->surface->window = NULL;
62     free(window->base.title);
63     free(window->base.class);
+2, -1
 1@@ -32,9 +32,10 @@
 2 struct window
 3 {
 4     struct swc_window base;
 5+    const struct window_impl * impl;
 6 
 7     struct swc_surface * surface;
 8-    const struct window_impl * impl;
 9+    struct swc_view * view;
10 };
11 
12 struct window_impl
+1, -1
1@@ -349,7 +349,7 @@ void swc_xwm_manage_window(xcb_window_t id, struct swc_surface * surface)
2     }
3 
4     if (entry->override_redirect)
5-        swc_compositor_surface_show(surface);
6+        compositor_view_show(xwl_window->window.view);
7     else
8     {
9         uint32_t mask, values[1];