summaryrefslogtreecommitdiff
path: root/src/totem-menu.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/totem-menu.c')
-rw-r--r--src/totem-menu.c47
1 files changed, 46 insertions, 1 deletions
diff --git a/src/totem-menu.c b/src/totem-menu.c
index cc9f27057..da1a82229 100644
--- a/src/totem-menu.c
+++ b/src/totem-menu.c
@@ -381,6 +381,14 @@ bvw_lang_info_to_id (BvwLangInfo *info)
return g_strdup_printf ("%s-%s", info->language, info->codec);
}
+static char *
+bvw_lang_info_to_id2 (BvwLangInfo *info)
+{
+ if (!info->title)
+ return NULL;
+ return g_strdup_printf ("%s-%s", info->title, info->language);
+}
+
static int
hash_table_num_instances (GHashTable *ht,
const char *key)
@@ -461,10 +469,11 @@ bvw_lang_info_to_menu_labels (GList *langs,
BvwTrackType track_type)
{
GList *l, *ret;
- GHashTable *lang_table, *lang_codec_table, *printed_table;
+ GHashTable *lang_table, *lang_codec_table, *title_lang_table, *printed_table;
lang_table = g_hash_table_new (g_str_hash, g_str_equal);
lang_codec_table = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
+ title_lang_table = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
/* Populate the hash tables */
for (l = langs; l != NULL; l = l->next) {
@@ -487,6 +496,15 @@ bvw_lang_info_to_menu_labels (GList *langs,
g_hash_table_insert (lang_codec_table,
id,
GINT_TO_POINTER (num));
+
+ id = bvw_lang_info_to_id2 (info);
+ if (id) {
+ num = hash_table_num_instances (title_lang_table, id);
+ num++;
+ g_hash_table_insert (title_lang_table,
+ id,
+ GINT_TO_POINTER (num));
+ }
}
ret = NULL;
@@ -503,6 +521,32 @@ bvw_lang_info_to_menu_labels (GList *langs,
continue;
}
+ if (info->title) {
+ char *id;
+
+ id = bvw_lang_info_to_id2 (info);
+ num = hash_table_num_instances (title_lang_table, id);
+ if (num > 1) {
+ num = hash_table_num_instances (printed_table, info->language);
+ num++;
+ g_hash_table_insert (printed_table,
+ (gpointer) info->language,
+ GINT_TO_POINTER (num));
+
+ str = g_strdup_printf ("%s (%s) #%d",
+ info->title,
+ get_language_name_no_und (info->language, track_type),
+ num);
+ } else {
+ str = g_strdup_printf ("%s (%s)",
+ info->title,
+ get_language_name_no_und (info->language, track_type));
+ }
+ g_free (id);
+ ret = g_list_prepend (ret, create_menu_item (str, info->id));
+ continue;
+ }
+
num = hash_table_num_instances (lang_table, info->language);
g_assert (num >= 1);
if (num > 1) {
@@ -535,6 +579,7 @@ bvw_lang_info_to_menu_labels (GList *langs,
g_hash_table_destroy (printed_table);
g_hash_table_destroy (lang_codec_table);
+ g_hash_table_destroy (title_lang_table);
g_hash_table_destroy (lang_table);
return g_list_reverse (ret);