if (xserver)
wlsc_xserver_destroy(ec);
+ ec->shell->destroy(ec->shell);
+
if (ec->has_bind_display)
ec->unbind_display(ec->display, display);
void (*configure)(struct wlsc_shell *shell,
struct wlsc_surface *surface,
int32_t x, int32_t y, int32_t width, int32_t height);
+ void (*destroy)(struct wlsc_shell *shell);
};
enum {
struct wl_list panels;
struct {
- const char *path;
+ char *path;
int duration;
struct wl_resource *binding;
struct wl_list surfaces;
shell->screensaver.duration = duration;
return ret;
- /* FIXME: free(shell->screensaver.path) on plugin fini */
}
static void
wl_resource_destroy(resource, 0);
}
+static void
+shell_destroy(struct wlsc_shell *base)
+{
+ struct wl_shell *shell = container_of(base, struct wl_shell, shell);
+
+ free(shell->screensaver.path);
+ free(shell);
+}
+
int
shell_init(struct wlsc_compositor *ec);
shell->shell.unlock = unlock;
shell->shell.map = map;
shell->shell.configure = configure;
+ shell->shell.destroy = shell_destroy;
wl_list_init(&shell->hidden_surface_list);
wl_list_init(&shell->backgrounds);
wl_client_add_resource(client, &shell->resource);
}
+static void
+tablet_shell_destroy(struct wlsc_shell *base)
+{
+ struct tablet_shell *shell =
+ container_of(base, struct tablet_shell, shell);
+
+ wl_event_source_remove(shell->long_press_source);
+ free(shell);
+}
+
void
shell_init(struct wlsc_compositor *compositor);
shell->shell.unlock = tablet_shell_unlock;
shell->shell.map = tablet_shell_map;
shell->shell.configure = tablet_shell_configure;
+ shell->shell.destroy = tablet_shell_destroy;
launch_ux_daemon(shell);