commit 22bd1d3
Michael Forney
·
2014-08-16 19:44:42 +0000 UTC
parent 5b1678f
panel: Create the compositor view on creation instead of on dock
1 files changed,
+7,
-14
+7,
-14
1@@ -40,7 +40,6 @@ struct panel
2 {
3 struct wl_resource * resource;
4
5- struct swc_surface * surface;
6 struct wl_listener surface_destroy_listener;
7 struct compositor_view * view;
8 struct view_handler view_handler;
9@@ -105,9 +104,6 @@ static void dock(struct wl_client * client, struct wl_resource * resource,
10 default: return;
11 }
12
13- if (panel->docked)
14- wl_list_remove(&panel->view_handler.link);
15-
16 if (panel->screen && screen_changed)
17 {
18 wl_list_remove(&panel->modifier.link);
19@@ -117,17 +113,9 @@ static void dock(struct wl_client * client, struct wl_resource * resource,
20 panel->screen = screen;
21 panel->edge = edge;
22 panel->docked = true;
23- panel->view = swc_compositor_create_view(panel->surface);
24-
25- if (!panel->view)
26- {
27- wl_resource_post_no_memory(resource);
28- return;
29- }
30
31 update_position(panel);
32 compositor_view_show(panel->view);
33- wl_list_insert(&panel->view->base.handlers, &panel->view_handler.link);
34 wl_list_insert(&screen->modifiers, &panel->modifier.link);
35
36 if (focus)
37@@ -223,9 +211,9 @@ static void destroy_panel(struct wl_resource * resource)
38 {
39 wl_list_remove(&panel->modifier.link);
40 screen_update_usable_geometry(panel->screen);
41- compositor_view_destroy(panel->view);
42 }
43
44+ compositor_view_destroy(panel->view);
45 free(panel);
46 }
47
48@@ -252,10 +240,12 @@ struct panel * panel_new(struct wl_client * client, uint32_t id,
49 if (!panel->resource)
50 goto error1;
51
52+ if (!(panel->view = swc_compositor_create_view(surface)))
53+ goto error2;
54+
55 wl_resource_set_implementation(panel->resource, &panel_implementation,
56 panel, &destroy_panel);
57
58- panel->surface = surface;
59 panel->surface_destroy_listener.notify = &handle_surface_destroy;
60 panel->view_handler.impl = &view_handler_impl;
61 panel->modifier.modify = &modify;
62@@ -264,11 +254,14 @@ struct panel * panel_new(struct wl_client * client, uint32_t id,
63 panel->strut_size = 0;
64 panel->docked = false;
65
66+ wl_list_insert(&panel->view->base.handlers, &panel->view_handler.link);
67 wl_resource_add_destroy_listener(surface->resource,
68 &panel->surface_destroy_listener);
69
70 return panel;
71
72+ error2:
73+ wl_resource_destroy(panel->resource);
74 error1:
75 free(panel);
76 error0: