MetaSurfaceActorWayland: Use weak pointer instead of destroy hook

MetaWaylandSurface is a GObject now, so lets utilize that.

https://bugzilla.gnome.org/show_bug.cgi?id=763431
This commit is contained in:
Jonas Ådahl 2016-01-18 16:59:45 +08:00
parent 26815d68f6
commit 19f7e310d9
2 changed files with 14 additions and 18 deletions

View File

@ -402,8 +402,20 @@ static void
meta_surface_actor_wayland_dispose (GObject *object) meta_surface_actor_wayland_dispose (GObject *object)
{ {
MetaSurfaceActorWayland *self = META_SURFACE_ACTOR_WAYLAND (object); MetaSurfaceActorWayland *self = META_SURFACE_ACTOR_WAYLAND (object);
MetaSurfaceActorWaylandPrivate *priv =
meta_surface_actor_wayland_get_instance_private (self);
MetaWaylandFrameCallback *cb, *next;
meta_surface_actor_wayland_set_texture (self, NULL); meta_surface_actor_wayland_set_texture (self, NULL);
if (priv->surface)
{
g_object_remove_weak_pointer (G_OBJECT (priv->surface),
(gpointer *) &priv->surface);
priv->surface = NULL;
}
wl_list_for_each_safe (cb, next, &priv->frame_callback_list, link)
wl_resource_destroy (cb->resource);
G_OBJECT_CLASS (meta_surface_actor_wayland_parent_class)->dispose (object); G_OBJECT_CLASS (meta_surface_actor_wayland_parent_class)->dispose (object);
} }
@ -454,6 +466,8 @@ meta_surface_actor_wayland_new (MetaWaylandSurface *surface)
wl_list_init (&priv->frame_callback_list); wl_list_init (&priv->frame_callback_list);
priv->surface = surface; priv->surface = surface;
g_object_add_weak_pointer (G_OBJECT (priv->surface),
(gpointer *) &priv->surface);
return META_SURFACE_ACTOR (self); return META_SURFACE_ACTOR (self);
} }
@ -472,18 +486,3 @@ meta_surface_actor_wayland_get_surface (MetaSurfaceActorWayland *self)
MetaSurfaceActorWaylandPrivate *priv = meta_surface_actor_wayland_get_instance_private (self); MetaSurfaceActorWaylandPrivate *priv = meta_surface_actor_wayland_get_instance_private (self);
return priv->surface; return priv->surface;
} }
void
meta_surface_actor_wayland_surface_destroyed (MetaSurfaceActorWayland *self)
{
MetaWaylandFrameCallback *callback, *next;
MetaSurfaceActorWaylandPrivate *priv =
meta_surface_actor_wayland_get_instance_private (self);
wl_list_for_each_safe (callback, next, &priv->frame_callback_list, link)
{
wl_resource_destroy (callback->resource);
}
priv->surface = NULL;
}

View File

@ -1134,9 +1134,6 @@ wl_surface_destructor (struct wl_resource *resource)
if (surface->input_region) if (surface->input_region)
cairo_region_destroy (surface->input_region); cairo_region_destroy (surface->input_region);
meta_surface_actor_wayland_surface_destroyed (
META_SURFACE_ACTOR_WAYLAND (surface->surface_actor));
g_object_unref (surface->surface_actor); g_object_unref (surface->surface_actor);
meta_wayland_compositor_destroy_frame_callbacks (compositor, surface); meta_wayland_compositor_destroy_frame_callbacks (compositor, surface);