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>
dev
Pekka Paalanen 13 years ago
parent 02453dd699
commit 56cdea96f0
  1. 2
      compositor/compositor.c
  2. 2
      compositor/compositor.h
  3. 41
      compositor/shell.c

@ -248,7 +248,7 @@ wlsc_surface_create(struct wlsc_compositor *compositor,
{ {
struct wlsc_surface *surface; struct wlsc_surface *surface;
surface = malloc(sizeof *surface); surface = calloc(1, sizeof *surface);
if (surface == NULL) if (surface == NULL)
return NULL; return NULL;

@ -276,6 +276,8 @@ struct wlsc_surface {
struct wl_buffer *buffer; struct wl_buffer *buffer;
struct wl_listener buffer_destroy_listener; struct wl_listener buffer_destroy_listener;
void *shell_priv;
}; };
void void

@ -58,12 +58,53 @@ struct wl_shell {
struct wl_list hidden_surface_list; struct wl_list hidden_surface_list;
}; };
struct shell_surface {
struct wl_listener destroy_listener;
};
struct wlsc_move_grab { struct wlsc_move_grab {
struct wl_grab grab; struct wl_grab grab;
struct wlsc_surface *surface; struct wlsc_surface *surface;
int32_t dx, dy; 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 static void
move_grab_motion(struct wl_grab *grab, move_grab_motion(struct wl_grab *grab,
uint32_t time, int32_t x, int32_t y) uint32_t time, int32_t x, int32_t y)

Loading…
Cancel
Save