diff --git a/src/shell.c b/src/shell.c index 63331808..ff888185 100644 --- a/src/shell.c +++ b/src/shell.c @@ -1743,23 +1743,18 @@ shell_handle_surface_destroy(struct wl_listener *listener, void *data) } } +static void +shell_surface_configure(struct weston_surface *, int32_t, int32_t); + static struct shell_surface * get_shell_surface(struct weston_surface *surface) { - struct wl_listener *listener; - - listener = wl_signal_get(&surface->surface.resource.destroy_signal, - shell_handle_surface_destroy); - if (listener) - return container_of(listener, struct shell_surface, - surface_destroy_listener); - - return NULL; + if (surface->configure == shell_surface_configure) + return surface->private; + else + return NULL; } -static void -shell_surface_configure(struct weston_surface *, int32_t, int32_t); - static struct shell_surface * create_shell_surface(void *shell, struct weston_surface *surface, const struct weston_shell_client *client) @@ -1778,6 +1773,7 @@ create_shell_surface(void *shell, struct weston_surface *surface, } surface->configure = shell_surface_configure; + surface->private = shsurf; surface->compositor->shell_interface.shell = shell; shsurf->shell = (struct desktop_shell *) shell;