[clutter-gst] actor: fix player new-frame signal connection when set through property
- From: Lionel Landwerlin <llandwerlin src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [clutter-gst] actor: fix player new-frame signal connection when set through property
- Date: Mon, 18 Mar 2013 23:38:20 +0000 (UTC)
commit 0779203ee47d827e03ac0f3dd15b836363b34f43
Author: Lionel Landwerlin <llandwerlin gmail com>
Date: Thu Mar 14 15:58:05 2013 +0000
actor: fix player new-frame signal connection when set through property
clutter-gst/clutter-gst-actor.c | 88 ++++++++++++++++++++------------------
1 files changed, 46 insertions(+), 42 deletions(-)
---
diff --git a/clutter-gst/clutter-gst-actor.c b/clutter-gst/clutter-gst-actor.c
index cc8385d..0c01459 100644
--- a/clutter-gst/clutter-gst-actor.c
+++ b/clutter-gst/clutter-gst-actor.c
@@ -104,6 +104,49 @@ clutter_gst_actor_paint (ClutterActor *actor)
}
}
+static void
+_player_new_frame (ClutterGstPlayer *player,
+ ClutterGstFrame *frame,
+ ClutterGstActor *self)
+{
+ ClutterGstActorPrivate *priv = self->priv;
+
+ if (priv->frame)
+ g_boxed_free (CLUTTER_GST_TYPE_FRAME, priv->frame);
+ priv->frame = g_boxed_copy (CLUTTER_GST_TYPE_FRAME, frame);
+
+ clutter_actor_queue_redraw (CLUTTER_ACTOR (self));
+}
+
+static void
+clutter_gst_actor_set_player_internal (ClutterGstActor *self,
+ ClutterGstPlayer *player)
+{
+ ClutterGstActorPrivate *priv = self->priv;
+
+ if (priv->player) {
+ g_boxed_free (CLUTTER_GST_TYPE_FRAME, priv->frame);
+ priv->frame = NULL;
+ g_signal_handlers_disconnect_by_func (priv->player,
+ _player_new_frame,
+ self);
+
+ g_clear_object (&priv->player);
+ }
+
+ if (player != NULL) {
+ priv->player = g_object_ref_sink (player);
+ priv->frame = g_boxed_copy (CLUTTER_GST_TYPE_FRAME,
+ clutter_gst_player_get_frame (player));
+
+ g_signal_connect (priv->player, "new-frame",
+ G_CALLBACK (_player_new_frame), self);
+ }
+
+ clutter_actor_queue_redraw (CLUTTER_ACTOR (self));
+ g_object_notify (G_OBJECT (self), "player");
+}
+
/*
* GObject implementation
*/
@@ -150,13 +193,12 @@ clutter_gst_actor_set_property (GObject *object,
GParamSpec *pspec)
{
ClutterGstActor *actor = CLUTTER_GST_ACTOR (object);
- ClutterGstActorPrivate *priv = actor->priv;
switch (property_id)
{
case PROP_PLAYER:
- g_clear_object (&priv->player);
- priv->player = g_value_dup_object (value);
+ clutter_gst_actor_set_player_internal (actor,
+ CLUTTER_GST_PLAYER (g_value_get_object (value)));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
@@ -205,20 +247,6 @@ clutter_gst_actor_init (ClutterGstActor *actor)
ClutterGstActorPrivate);
}
-static void
-_player_new_frame (ClutterGstPlayer *player,
- ClutterGstFrame *frame,
- ClutterGstActor *self)
-{
- ClutterGstActorPrivate *priv = self->priv;
-
- if (priv->frame)
- g_boxed_free (CLUTTER_GST_TYPE_FRAME, priv->frame);
- priv->frame = g_boxed_copy (CLUTTER_GST_TYPE_FRAME, frame);
-
- clutter_actor_queue_redraw (CLUTTER_ACTOR (self));
-}
-
/*
* Public symbols
*/
@@ -259,32 +287,8 @@ void
clutter_gst_actor_set_player (ClutterGstActor *self,
ClutterGstPlayer *player)
{
- ClutterGstActorPrivate *priv;
-
g_return_if_fail (CLUTTER_GST_IS_ACTOR (self));
g_return_if_fail (CLUTTER_GST_IS_PLAYER (player) || player == NULL);
- priv = self->priv;
-
- if (priv->player) {
- g_boxed_free (CLUTTER_GST_TYPE_FRAME, priv->frame);
- priv->frame = NULL;
- g_signal_handlers_disconnect_by_func (priv->player,
- _player_new_frame,
- self);
-
- g_clear_object (&priv->player);
- }
-
- if (player != NULL) {
- priv->player = g_object_ref_sink (player);
- priv->frame = g_boxed_copy (CLUTTER_GST_TYPE_FRAME,
- clutter_gst_player_get_frame (player));
-
- g_signal_connect (priv->player, "new-frame",
- G_CALLBACK (_player_new_frame), self);
- }
-
- clutter_actor_queue_redraw (CLUTTER_ACTOR (self));
- g_object_notify (G_OBJECT (self), "player");
+ clutter_gst_actor_set_player_internal (self, player);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]