{
ClutterTimelinePrivate *priv = CLUTTER_TIMELINE (object)->priv;
- g_hash_table_destroy (priv->markers_by_frame);
- g_hash_table_destroy (priv->markers_by_name);
+ if (priv->markers_by_frame)
+ g_hash_table_destroy (priv->markers_by_frame);
+
+ if (priv->markers_by_name)
+ g_hash_table_destroy (priv->markers_by_name);
G_OBJECT_CLASS (clutter_timeline_parent_class)->finalize (object);
}
{
ClutterTimelinePrivate *priv;
- self->priv = priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
- CLUTTER_TYPE_TIMELINE,
- ClutterTimelinePrivate);
+ self->priv = priv =
+ G_TYPE_INSTANCE_GET_PRIVATE (self, CLUTTER_TYPE_TIMELINE,
+ ClutterTimelinePrivate);
priv->fps = clutter_get_default_frame_rate ();
priv->n_frames = 0;
priv->msecs_delta = 0;
-
- priv->markers_by_frame = g_hash_table_new (NULL, NULL);
- priv->markers_by_name = g_hash_table_new_full (g_str_hash, g_str_equal,
- NULL,
- timeline_marker_free);
}
static void
g_signal_emit (timeline, timeline_signals[NEW_FRAME], 0,
priv->current_frame_num);
+ if (priv->markers_by_name == NULL ||
+ priv->markers_by_frame == NULL)
+ return;
+
for (i = priv->skipped_frames; i >= 0; i--)
{
- gint frame_num = priv->current_frame_num
- + (priv->direction == CLUTTER_TIMELINE_FORWARD ? -i : i);
+ gint frame_num;
GSList *markers, *l;
+ frame_num = priv->current_frame_num
+ + (priv->direction == CLUTTER_TIMELINE_FORWARD ? -i : i);
markers = g_hash_table_lookup (priv->markers_by_frame,
GUINT_TO_POINTER (frame_num));
for (l = markers; l; l = l->next)
TimelineMarker *marker;
GSList *markers;
+ if (G_UNLIKELY (priv->markers_by_name == NULL ||
+ priv->markers_by_frame == NULL))
+ {
+ priv->markers_by_name = g_hash_table_new_full (g_str_hash, g_str_equal,
+ NULL,
+ timeline_marker_free);
+ priv->markers_by_frame = g_hash_table_new (NULL, NULL);
+ }
+
marker = g_hash_table_lookup (priv->markers_by_name, marker_name);
if (G_UNLIKELY (marker))
{
priv = timeline->priv;
+ if (G_UNLIKELY (priv->markers_by_name == NULL ||
+ priv->markers_by_frame == NULL))
+ {
+ return NULL;
+ }
+
if (frame_num < 0)
{
GList *markers, *l;
priv = timeline->priv;
+ if (G_UNLIKELY (priv->markers_by_name == NULL ||
+ priv->markers_by_frame == NULL))
+ {
+ g_warning ("No marker named `%s' found.", marker_name);
+ return;
+ }
+
marker = g_hash_table_lookup (priv->markers_by_name, marker_name);
if (!marker)
{
priv = timeline->priv;
+ if (G_UNLIKELY (priv->markers_by_name == NULL ||
+ priv->markers_by_frame == NULL))
+ {
+ g_warning ("No marker named `%s' found.", marker_name);
+ return;
+ }
+
marker = g_hash_table_lookup (priv->markers_by_name, marker_name);
if (!marker)
{
g_return_val_if_fail (CLUTTER_IS_TIMELINE (timeline), FALSE);
g_return_val_if_fail (marker_name != NULL, FALSE);
+ if (G_UNLIKELY (timeline->priv->markers_by_name == NULL ||
+ timeline->priv->markers_by_frame == NULL))
+ return FALSE;
+
return NULL != g_hash_table_lookup (timeline->priv->markers_by_name,
marker_name);
}