aboutsummaryrefslogtreecommitdiff
path: root/rootston/wl_shell.c
diff options
context:
space:
mode:
Diffstat (limited to 'rootston/wl_shell.c')
-rw-r--r--rootston/wl_shell.c18
1 files changed, 10 insertions, 8 deletions
diff --git a/rootston/wl_shell.c b/rootston/wl_shell.c
index 97067937..81c0c128 100644
--- a/rootston/wl_shell.c
+++ b/rootston/wl_shell.c
@@ -10,23 +10,25 @@
#include "rootston/input.h"
#include "rootston/server.h"
+static const struct roots_view_child_interface popup_impl;
+
static void popup_destroy(struct roots_view_child *child) {
- assert(child->destroy == popup_destroy);
+ assert(child->impl == &popup_impl);
struct roots_wl_shell_popup *popup = (struct roots_wl_shell_popup *)child;
- if (popup == NULL) {
- return;
- }
wl_list_remove(&popup->destroy.link);
wl_list_remove(&popup->set_state.link);
wl_list_remove(&popup->new_popup.link);
- view_child_finish(&popup->view_child);
free(popup);
}
+static const struct roots_view_child_interface popup_impl = {
+ .destroy = popup_destroy,
+};
+
static void popup_handle_destroy(struct wl_listener *listener, void *data) {
struct roots_wl_shell_popup *popup =
wl_container_of(listener, popup, destroy);
- popup_destroy((struct roots_view_child *)popup);
+ view_child_destroy(&popup->view_child);
}
static void popup_handle_set_state(struct wl_listener *listener, void *data) {
@@ -53,8 +55,8 @@ static struct roots_wl_shell_popup *popup_create(struct roots_view *view,
return NULL;
}
popup->wlr_wl_shell_surface = wlr_wl_shell_surface;
- popup->view_child.destroy = popup_destroy;
- view_child_init(&popup->view_child, view, wlr_wl_shell_surface->surface);
+ view_child_init(&popup->view_child, &popup_impl,
+ view, wlr_wl_shell_surface->surface);
popup->destroy.notify = popup_handle_destroy;
wl_signal_add(&wlr_wl_shell_surface->events.destroy, &popup->destroy);
popup->set_state.notify = popup_handle_set_state;