diff options
-rw-r--r-- | src/desktop.c | 23 | ||||
-rw-r--r-- | src/shell.c | 15 |
2 files changed, 23 insertions, 15 deletions
diff --git a/src/desktop.c b/src/desktop.c index 03a2186..8515a32 100644 --- a/src/desktop.c +++ b/src/desktop.c @@ -136,6 +136,29 @@ desktop_surface_removed(struct weston_desktop_surface *dsurface, void *userdata) weston_view_destroy(surface->view); } + /* invalidate agl-shell surfaces so we can re-use them when + * binding again */ + if (surface->role == IVI_SURFACE_ROLE_PANEL) { + switch (surface->panel.edge) { + case AGL_SHELL_EDGE_TOP: + output->top = NULL; + break; + case AGL_SHELL_EDGE_BOTTOM: + output->bottom = NULL; + break; + case AGL_SHELL_EDGE_LEFT: + output->left = NULL; + break; + case AGL_SHELL_EDGE_RIGHT: + output->right = NULL; + break; + default: + assert(!"Invalid edge detected\n"); + } + } else if (surface->role == IVI_SURFACE_ROLE_BACKGROUND) { + output->background = NULL; + } + wl_list_remove(&surface->link); free(surface); } diff --git a/src/shell.c b/src/shell.c index 96f3c0a..527cdba 100644 --- a/src/shell.c +++ b/src/shell.c @@ -617,21 +617,6 @@ unbind_agl_shell(struct wl_resource *resource) ivi = wl_resource_get_user_data(resource); wl_list_for_each(output, &ivi->outputs, link) { - free(output->background); - output->background = NULL; - - free(output->top); - output->top = NULL; - - free(output->bottom); - output->bottom = NULL; - - free(output->left); - output->left = NULL; - - free(output->right); - output->right = NULL; - /* reset the active surf if there's one present */ if (output->active) { output->active->view->is_mapped = false; |