diff options
-rw-r--r-- | src/backend/bacon-video-widget.c | 48 | ||||
-rw-r--r-- | src/totem-object.c | 12 |
2 files changed, 50 insertions, 10 deletions
diff --git a/src/backend/bacon-video-widget.c b/src/backend/bacon-video-widget.c index ee97efa47..8e3306952 100644 --- a/src/backend/bacon-video-widget.c +++ b/src/backend/bacon-video-widget.c @@ -118,6 +118,8 @@ enum SIGNAL_MISSING_PLUGINS, SIGNAL_DOWNLOAD_BUFFERING, SIGNAL_PLAY_STARTING, + SIGNAL_SUBTITLES_CHANGED, + SIGNAL_LANGUAGES_CHANGED, LAST_SIGNAL }; @@ -929,6 +931,34 @@ bacon_video_widget_class_init (BaconVideoWidgetClass * klass) NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); + /** + * BaconVideoWidget::subtitles-changed: + * @bvw: the #BaconVideoWidget which received the signal + * + * Emitted when the list of subtitle tracks has changed. + **/ + bvw_signals[SIGNAL_SUBTITLES_CHANGED] = + g_signal_new ("subtitles-changed", + G_TYPE_FROM_CLASS (object_class), + G_SIGNAL_RUN_LAST, + 0, + NULL, NULL, + g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); + + /** + * BaconVideoWidget::languages-changed: + * @bvw: the #BaconVideoWidget which received the signal + * + * Emitted when the list of languages/audio tracks has changed. + **/ + bvw_signals[SIGNAL_LANGUAGES_CHANGED] = + g_signal_new ("languages-changed", + G_TYPE_FROM_CLASS (object_class), + G_SIGNAL_RUN_LAST, + 0, + NULL, NULL, + g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); + g_resources_register (_bvw_get_resource ()); default_theme = gtk_icon_theme_get_default (); @@ -950,8 +980,10 @@ bvw_update_stream_info (BaconVideoWidget *bvw) parse_stream_info (bvw); g_signal_emit (bvw, bvw_signals[SIGNAL_GOT_METADATA], 0, NULL); - update_subtitles_tracks (bvw); - update_languages_tracks (bvw); + if (update_subtitles_tracks (bvw)) + g_signal_emit (bvw, bvw_signals[SIGNAL_SUBTITLES_CHANGED], 0); + if (update_languages_tracks (bvw)) + g_signal_emit (bvw, bvw_signals[SIGNAL_LANGUAGES_CHANGED], 0); g_signal_emit (bvw, bvw_signals[SIGNAL_CHANNELS_CHANGE], 0); } @@ -2987,11 +3019,11 @@ bacon_video_widget_set_language (BaconVideoWidget * bvw, int language) g_signal_emit_by_name (G_OBJECT (bvw->play), "get-audio-tags", language, &tags); bvw_update_tags (bvw, tags, "audio"); - update_languages_tracks (bvw); + if (update_languages_tracks (bvw)) + g_signal_emit (bvw, bvw_signals[SIGNAL_LANGUAGES_CHANGED], 0); /* so it updates its metadata for the newly-selected stream */ g_signal_emit (bvw, bvw_signals[SIGNAL_GOT_METADATA], 0, NULL); - g_signal_emit (bvw, bvw_signals[SIGNAL_CHANNELS_CHANGE], 0); } /** @@ -3479,8 +3511,10 @@ bacon_video_widget_open (BaconVideoWidget *bvw, gst_element_set_state (bvw->play, GST_STATE_PAUSED); - update_subtitles_tracks (bvw); - update_languages_tracks (bvw); + if (update_subtitles_tracks (bvw)) + g_signal_emit (bvw, bvw_signals[SIGNAL_SUBTITLES_CHANGED], 0); + if (update_languages_tracks (bvw)) + g_signal_emit (bvw, bvw_signals[SIGNAL_LANGUAGES_CHANGED], 0); g_signal_emit (bvw, bvw_signals[SIGNAL_CHANNELS_CHANGE], 0); } @@ -3831,6 +3865,8 @@ bacon_video_widget_close (BaconVideoWidget * bvw) g_clear_pointer (&bvw->videotags, gst_tag_list_unref); g_object_notify (G_OBJECT (bvw), "seekable"); + g_signal_emit (bvw, bvw_signals[SIGNAL_SUBTITLES_CHANGED], 0); + g_signal_emit (bvw, bvw_signals[SIGNAL_LANGUAGES_CHANGED], 0); g_signal_emit (bvw, bvw_signals[SIGNAL_CHANNELS_CHANGE], 0); got_time_tick (GST_ELEMENT (bvw->play), 0, bvw); } diff --git a/src/totem-object.c b/src/totem-object.c index b68f68af1..3ad6de4c8 100644 --- a/src/totem-object.c +++ b/src/totem-object.c @@ -2510,8 +2510,6 @@ on_channels_change_event (BaconVideoWidget *bvw, TotemObject *totem) { gchar *name; - totem_subtitles_menu_update (totem); - totem_languages_menu_update (totem); update_media_menu_items (totem); /* updated stream info (new song) */ @@ -2550,8 +2548,6 @@ on_got_metadata_event (BaconVideoWidget *bvw, TotemObject *totem) g_free (name); } - totem_subtitles_menu_update (totem); - totem_languages_menu_update (totem); update_buttons (totem); on_playlist_change_name (TOTEM_PLAYLIST (totem->playlist), totem); } @@ -4226,6 +4222,14 @@ video_widget_create (TotemObject *totem) "channels-change", G_CALLBACK (on_channels_change_event), totem); + g_signal_connect_swapped (G_OBJECT (totem->bvw), + "subtitles-changed", + G_CALLBACK (totem_subtitles_menu_update), + totem); + g_signal_connect_swapped (G_OBJECT (totem->bvw), + "languages-changed", + G_CALLBACK (totem_languages_menu_update), + totem); g_signal_connect (G_OBJECT (totem->bvw), "tick", G_CALLBACK (update_current_time), |