swc

Unnamed repository; edit this file 'description' to name the repository.
git clone git://git.nihaljere.xyz/swc
Log | Files | Refs | README | LICENSE

commit 22bd1d3e96a7e7f49de9ce8137aab0834b66acc5
parent 5b1678fb06b19d8465846d93e07db74f813335ad
Author: Michael Forney <mforney@mforney.org>
Date:   Sat, 16 Aug 2014 12:44:42 -0700

panel: Create the compositor view on creation instead of on dock

Diffstat:
Mlibswc/panel.c | 21+++++++--------------
1 file changed, 7 insertions(+), 14 deletions(-)

diff --git a/libswc/panel.c b/libswc/panel.c @@ -40,7 +40,6 @@ struct panel { struct wl_resource * resource; - struct swc_surface * surface; struct wl_listener surface_destroy_listener; struct compositor_view * view; struct view_handler view_handler; @@ -105,9 +104,6 @@ static void dock(struct wl_client * client, struct wl_resource * resource, default: return; } - if (panel->docked) - wl_list_remove(&panel->view_handler.link); - if (panel->screen && screen_changed) { wl_list_remove(&panel->modifier.link); @@ -117,17 +113,9 @@ static void dock(struct wl_client * client, struct wl_resource * resource, panel->screen = screen; panel->edge = edge; panel->docked = true; - panel->view = swc_compositor_create_view(panel->surface); - - if (!panel->view) - { - wl_resource_post_no_memory(resource); - return; - } update_position(panel); compositor_view_show(panel->view); - wl_list_insert(&panel->view->base.handlers, &panel->view_handler.link); wl_list_insert(&screen->modifiers, &panel->modifier.link); if (focus) @@ -223,9 +211,9 @@ static void destroy_panel(struct wl_resource * resource) { wl_list_remove(&panel->modifier.link); screen_update_usable_geometry(panel->screen); - compositor_view_destroy(panel->view); } + compositor_view_destroy(panel->view); free(panel); } @@ -252,10 +240,12 @@ struct panel * panel_new(struct wl_client * client, uint32_t id, if (!panel->resource) goto error1; + if (!(panel->view = swc_compositor_create_view(surface))) + goto error2; + wl_resource_set_implementation(panel->resource, &panel_implementation, panel, &destroy_panel); - panel->surface = surface; panel->surface_destroy_listener.notify = &handle_surface_destroy; panel->view_handler.impl = &view_handler_impl; panel->modifier.modify = &modify; @@ -264,11 +254,14 @@ struct panel * panel_new(struct wl_client * client, uint32_t id, panel->strut_size = 0; panel->docked = false; + wl_list_insert(&panel->view->base.handlers, &panel->view_handler.link); wl_resource_add_destroy_listener(surface->resource, &panel->surface_destroy_listener); return panel; + error2: + wl_resource_destroy(panel->resource); error1: free(panel); error0: