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: