playback/player: player: Abstract the signal emission dispatching to a new interface

This allows to implement signal dispatching to other event loop systems than
GLib without having direct GLib support in the base GstPlayer class. A
implementation for the GLib main context is provided and used in the
applications and tests.
This commit is contained in:
Sebastian Dröge 2015-08-12 16:00:15 +02:00
parent f68bac6318
commit 6ed6b58929
2 changed files with 8 additions and 8 deletions

View file

@ -351,9 +351,10 @@ play_new (gchar ** uris, gdouble initial_volume)
play->num_uris = g_strv_length (uris); play->num_uris = g_strv_length (uris);
play->cur_idx = -1; play->cur_idx = -1;
play->player = gst_player_new (); play->player =
gst_player_new_full (gst_player_g_main_context_signal_dispatcher_new
(NULL));
g_object_set (play->player, "dispatch-to-main-context", TRUE, NULL);
g_signal_connect (play->player, "position-updated", g_signal_connect (play->player, "position-updated",
G_CALLBACK (position_updated_cb), play); G_CALLBACK (position_updated_cb), play);
g_signal_connect (play->player, "state-changed", g_signal_connect (play->player, "state-changed",
@ -447,9 +448,8 @@ play_next (GstPlay * play)
if (play->repeat) { if (play->repeat) {
g_print ("Looping playlist \n"); g_print ("Looping playlist \n");
play->cur_idx = -1; play->cur_idx = -1;
} } else
else return FALSE;
return FALSE;
} }
play_uri (play, play->uris[++play->cur_idx]); play_uri (play, play->uris[++play->cur_idx]);

View file

@ -1730,7 +1730,9 @@ gtk_play_constructor (GType type, guint n_construct_params,
(GtkPlay *) G_OBJECT_CLASS (gtk_play_parent_class)->constructor (type, (GtkPlay *) G_OBJECT_CLASS (gtk_play_parent_class)->constructor (type,
n_construct_params, construct_params); n_construct_params, construct_params);
self->player = gst_player_new (); self->player =
gst_player_new_full (gst_player_g_main_context_signal_dispatcher_new
(NULL));
self->playing = TRUE; self->playing = TRUE;
if (self->inhibit_cookie) if (self->inhibit_cookie)
@ -1740,8 +1742,6 @@ gtk_play_constructor (GType type, guint n_construct_params,
gtk_application_inhibit (GTK_APPLICATION (g_application_get_default ()), gtk_application_inhibit (GTK_APPLICATION (g_application_get_default ()),
GTK_WINDOW (self), GTK_APPLICATION_INHIBIT_IDLE, "Playing media"); GTK_WINDOW (self), GTK_APPLICATION_INHIBIT_IDLE, "Playing media");
g_object_set (self->player, "dispatch-to-main-context", TRUE, NULL);
create_ui (self); create_ui (self);
g_signal_connect (self->player, "position-updated", g_signal_connect (self->player, "position-updated",