mirror of
https://github.com/brl/mutter.git
synced 2024-11-12 17:27:03 -05:00
surface-actor-wayland: Don't store the buffer
We don't need to anymore -- we're purely texture based.
This commit is contained in:
parent
f5580f61f9
commit
55331a0678
@ -34,25 +34,11 @@
|
|||||||
struct _MetaSurfaceActorWaylandPrivate
|
struct _MetaSurfaceActorWaylandPrivate
|
||||||
{
|
{
|
||||||
MetaWaylandSurface *surface;
|
MetaWaylandSurface *surface;
|
||||||
MetaWaylandBuffer *buffer;
|
|
||||||
struct wl_listener buffer_destroy_listener;
|
|
||||||
};
|
};
|
||||||
typedef struct _MetaSurfaceActorWaylandPrivate MetaSurfaceActorWaylandPrivate;
|
typedef struct _MetaSurfaceActorWaylandPrivate MetaSurfaceActorWaylandPrivate;
|
||||||
|
|
||||||
G_DEFINE_TYPE_WITH_PRIVATE (MetaSurfaceActorWayland, meta_surface_actor_wayland, META_TYPE_SURFACE_ACTOR)
|
G_DEFINE_TYPE_WITH_PRIVATE (MetaSurfaceActorWayland, meta_surface_actor_wayland, META_TYPE_SURFACE_ACTOR)
|
||||||
|
|
||||||
static void
|
|
||||||
meta_surface_actor_handle_buffer_destroy (struct wl_listener *listener, void *data)
|
|
||||||
{
|
|
||||||
MetaSurfaceActorWaylandPrivate *priv = wl_container_of (listener, priv, buffer_destroy_listener);
|
|
||||||
|
|
||||||
/* If the buffer is destroyed while we're attached to it,
|
|
||||||
* we want to unset priv->buffer so we don't access freed
|
|
||||||
* memory. Keep the texture set however so the user doesn't
|
|
||||||
* see the window disappear. */
|
|
||||||
priv->buffer = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
meta_surface_actor_wayland_process_damage (MetaSurfaceActor *actor,
|
meta_surface_actor_wayland_process_damage (MetaSurfaceActor *actor,
|
||||||
int x, int y, int width, int height)
|
int x, int y, int width, int height)
|
||||||
@ -228,9 +214,6 @@ meta_surface_actor_wayland_class_init (MetaSurfaceActorWaylandClass *klass)
|
|||||||
static void
|
static void
|
||||||
meta_surface_actor_wayland_init (MetaSurfaceActorWayland *self)
|
meta_surface_actor_wayland_init (MetaSurfaceActorWayland *self)
|
||||||
{
|
{
|
||||||
MetaSurfaceActorWaylandPrivate *priv = meta_surface_actor_wayland_get_instance_private (self);
|
|
||||||
|
|
||||||
priv->buffer_destroy_listener.notify = meta_surface_actor_handle_buffer_destroy;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
MetaSurfaceActor *
|
MetaSurfaceActor *
|
||||||
@ -252,19 +235,14 @@ meta_surface_actor_wayland_set_buffer (MetaSurfaceActorWayland *self,
|
|||||||
{
|
{
|
||||||
MetaSurfaceActorWaylandPrivate *priv = meta_surface_actor_wayland_get_instance_private (self);
|
MetaSurfaceActorWaylandPrivate *priv = meta_surface_actor_wayland_get_instance_private (self);
|
||||||
MetaShapedTexture *stex = meta_surface_actor_get_texture (META_SURFACE_ACTOR (self));
|
MetaShapedTexture *stex = meta_surface_actor_get_texture (META_SURFACE_ACTOR (self));
|
||||||
|
CoglTexture *texture;
|
||||||
|
|
||||||
if (priv->buffer)
|
if (buffer)
|
||||||
wl_list_remove (&priv->buffer_destroy_listener.link);
|
texture = buffer->texture;
|
||||||
|
|
||||||
priv->buffer = buffer;
|
|
||||||
|
|
||||||
if (priv->buffer)
|
|
||||||
{
|
|
||||||
wl_signal_add (&priv->buffer->destroy_signal, &priv->buffer_destroy_listener);
|
|
||||||
meta_shaped_texture_set_texture (stex, priv->buffer->texture);
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
meta_shaped_texture_set_texture (stex, NULL);
|
texture = NULL;
|
||||||
|
|
||||||
|
meta_shaped_texture_set_texture (stex, texture);
|
||||||
}
|
}
|
||||||
|
|
||||||
MetaWaylandSurface *
|
MetaWaylandSurface *
|
||||||
|
Loading…
Reference in New Issue
Block a user