From 3ffdad6db8a29fb8087eecb21849f745c54de9a4 Mon Sep 17 00:00:00 2001 From: Thibault Saunier Date: Mon, 25 Jan 2016 15:51:26 +0100 Subject: [PATCH] title-clip: Return default GESTitleSource value if no child set yet In get_property we should return the default values if we have not created any GESTitleSource yet (instead of segfaulting). And fix GESTitleSource default values! Reviewed-by: Thibault Saunier Differential Revision: https://phabricator.freedesktop.org/D737 --- ges/ges-title-clip.c | 34 +++++++++++---------------------- ges/ges-title-source.c | 7 +++++-- tests/check/python/test_clip.py | 20 +++++++++++++++++++ 3 files changed, 36 insertions(+), 25 deletions(-) diff --git a/ges/ges-title-clip.c b/ges/ges-title-clip.c index 5196753566..0458fecc35 100644 --- a/ges/ges-title-clip.c +++ b/ges/ges-title-clip.c @@ -70,44 +70,32 @@ static void ges_title_clip_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec) { + GESTimelineElement *child, *tmpsrc = NULL; GESTitleClipPrivate *priv = GES_TITLE_CLIP (object)->priv; + if (!priv->track_titles) + child = tmpsrc = GES_TIMELINE_ELEMENT (ges_title_source_new ()); + else + child = priv->track_titles->data; + switch (property_id) { + /* Falltrough all over */ case PROP_TEXT: - ges_track_element_get_child_property (priv->track_titles->data, "text", - value); - break; case PROP_FONT_DESC: - ges_track_element_get_child_property (priv->track_titles->data, - "font-desc", value); - break; case PROP_HALIGNMENT: - ges_track_element_get_child_property (priv->track_titles->data, - "halignment", value); - break; case PROP_VALIGNMENT: - ges_track_element_get_child_property (priv->track_titles->data, - "valignment", value); - break; case PROP_COLOR: - ges_track_element_get_child_property (priv->track_titles->data, "color", - value); - break; case PROP_BACKGROUND: - ges_track_element_get_child_property (priv->track_titles->data, - "foreground-color", value); - break; case PROP_XPOS: - ges_track_element_get_child_property (priv->track_titles->data, "xpos", - value); - break; case PROP_YPOS: - ges_track_element_get_child_property (priv->track_titles->data, "ypos", - value); + ges_timeline_element_get_child_property (child, pspec->name, value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); } + + if (tmpsrc) + g_object_unref (tmpsrc); } static void diff --git a/ges/ges-title-source.c b/ges/ges-title-source.c index 51a4da72c3..6f5959d77f 100644 --- a/ges/ges-title-source.c +++ b/ges/ges-title-source.c @@ -93,6 +93,9 @@ #include "ges-title-source.h" #include "ges-video-test-source.h" +#define DEFAULT_TEXT "" +#define DEFAULT_FONT_DESC "Serif 36" + G_DEFINE_TYPE (GESTitleSource, ges_title_source, GES_TYPE_VIDEO_SOURCE); struct _GESTitleSourcePrivate @@ -171,8 +174,8 @@ ges_title_source_init (GESTitleSource * self) self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GES_TYPE_TITLE_SOURCE, GESTitleSourcePrivate); - self->priv->text = NULL; - self->priv->font_desc = NULL; + self->priv->text = g_strdup (DEFAULT_TEXT); + self->priv->font_desc = g_strdup (DEFAULT_FONT_DESC); self->priv->text_el = NULL; self->priv->halign = DEFAULT_HALIGNMENT; self->priv->valign = DEFAULT_VALIGNMENT; diff --git a/tests/check/python/test_clip.py b/tests/check/python/test_clip.py index 2d8d54d482..000ce99327 100644 --- a/tests/check/python/test_clip.py +++ b/tests/check/python/test_clip.py @@ -52,3 +52,23 @@ class TestCopyPaste(unittest.TestCase): copy.paste(10) self.assertEqual(len(self.layer.get_clips()), 1) + + def testCopyPasteTitleClip(self): + clip1 = GES.TitleClip.new() + clip1.props.duration = 10 + + self.layer.add_clip(clip1) + self.assertEqual(len(clip1.get_children(False)), 1) + + copy = clip1.copy(True) + self.assertEqual(len(self.layer.get_clips()), 1) + + copy.paste(10) + self.assertEqual(len(self.layer.get_clips()), 2) + + +class TestTitleClip(unittest.TestCase): + def testGetPropertyNotInTrack(self): + title_clip = GES.TitleClip.new() + self.assertEqual(title_clip.props.text, "") + self.assertEqual(title_clip.props.font_desc, "Serif 36")