shell: add private surface struct
Add a pointer to wlsc_surface for shell-private data. This is a temporary solution. Add struct shell_surface, where you can add any shell-private data members related to a wlsc_surface. The getter function takes care of creating the private data if it does not exist yet. Not used anywhere yet. Signed-off-by: Pekka Paalanen <ppaalanen@gmail.com>
This commit is contained in:
parent
02453dd699
commit
56cdea96f0
@ -248,7 +248,7 @@ wlsc_surface_create(struct wlsc_compositor *compositor,
|
||||
{
|
||||
struct wlsc_surface *surface;
|
||||
|
||||
surface = malloc(sizeof *surface);
|
||||
surface = calloc(1, sizeof *surface);
|
||||
if (surface == NULL)
|
||||
return NULL;
|
||||
|
||||
|
@ -276,6 +276,8 @@ struct wlsc_surface {
|
||||
|
||||
struct wl_buffer *buffer;
|
||||
struct wl_listener buffer_destroy_listener;
|
||||
|
||||
void *shell_priv;
|
||||
};
|
||||
|
||||
void
|
||||
|
@ -58,12 +58,53 @@ struct wl_shell {
|
||||
struct wl_list hidden_surface_list;
|
||||
};
|
||||
|
||||
struct shell_surface {
|
||||
struct wl_listener destroy_listener;
|
||||
};
|
||||
|
||||
struct wlsc_move_grab {
|
||||
struct wl_grab grab;
|
||||
struct wlsc_surface *surface;
|
||||
int32_t dx, dy;
|
||||
};
|
||||
|
||||
static void
|
||||
destroy_shell_surface(struct shell_surface *priv)
|
||||
{
|
||||
wl_list_remove(&priv->destroy_listener.link);
|
||||
free(priv);
|
||||
}
|
||||
|
||||
static void
|
||||
handle_shell_surface_destroy(struct wl_listener *listener,
|
||||
struct wl_resource *resource, uint32_t time)
|
||||
{
|
||||
struct shell_surface *priv =
|
||||
container_of(listener, struct shell_surface, destroy_listener);
|
||||
destroy_shell_surface(priv);
|
||||
}
|
||||
|
||||
static struct shell_surface *
|
||||
get_shell_surface(struct wlsc_surface *surface)
|
||||
{
|
||||
struct shell_surface *priv;
|
||||
|
||||
if (surface->shell_priv)
|
||||
return surface->shell_priv;
|
||||
|
||||
priv = calloc(1, sizeof *priv);
|
||||
if (!priv)
|
||||
return NULL;
|
||||
|
||||
priv->destroy_listener.func = handle_shell_surface_destroy;
|
||||
wl_list_insert(surface->surface.resource.destroy_listener_list.prev,
|
||||
&priv->destroy_listener.link);
|
||||
|
||||
surface->shell_priv = priv;
|
||||
|
||||
return priv;
|
||||
}
|
||||
|
||||
static void
|
||||
move_grab_motion(struct wl_grab *grab,
|
||||
uint32_t time, int32_t x, int32_t y)
|
||||
|
Loading…
Reference in New Issue
Block a user