summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBastien Nocera <hadess@hadess.net>2022-02-11 13:44:01 +0100
committerBastien Nocera <hadess@hadess.net>2022-02-11 14:25:19 +0100
commit21086a666f012b54a1d2a08eeec6695d4ad624c4 (patch)
tree68fefdeb1dda71888c11ef56f2672c4c4cb77e53
parentdb7a515e09eb9b416513dfaa96f5abf9a23ba194 (diff)
downloadtotem-21086a666f012b54a1d2a08eeec6695d4ad624c4.tar.gz
backend: Add subtitles/languages changed signals
This fixes the subtitles and languages menus being updated too often.
-rw-r--r--src/backend/bacon-video-widget.c48
-rw-r--r--src/totem-object.c12
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),