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];