[Xfce4-commits] <parole:bluesabre/gtk3> Add DVD chapters to DVD Menu

Sean Davis noreply at xfce.org
Sun Sep 1 19:16:01 CEST 2013


Updating branch refs/heads/bluesabre/gtk3
         to a143f82569fdb23d1497c17ee1bd1d8ed8f87f06 (commit)
       from 470e540221a16b6fce29734e5df623d24a5e3999 (commit)

commit a143f82569fdb23d1497c17ee1bd1d8ed8f87f06
Author: Sean Davis <smd.seandavis at gmail.com>
Date:   Sun Sep 1 13:09:51 2013 -0400

    Add DVD chapters to DVD Menu

 data/interfaces/parole.ui |    2 +-
 src/parole-medialist.h    |    3 +++
 src/parole-player.c       |   50 +++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 54 insertions(+), 1 deletion(-)

diff --git a/data/interfaces/parole.ui b/data/interfaces/parole.ui
index eef7ec4..52d7c45 100644
--- a/data/interfaces/parole.ui
+++ b/data/interfaces/parole.ui
@@ -350,7 +350,7 @@
                         <property name="label" translatable="yes">_Chapters</property>
                         <property name="use_underline">True</property>
                         <child type="submenu">
-                          <object class="GtkMenu" id="menu9">
+                          <object class="GtkMenu" id="chapters-menu">
                             <property name="visible">True</property>
                             <property name="can_focus">False</property>
                             <child>
diff --git a/src/parole-medialist.h b/src/parole-medialist.h
index 2b9ccf2..c5e700a 100644
--- a/src/parole-medialist.h
+++ b/src/parole-medialist.h
@@ -84,6 +84,9 @@ typedef struct
                                                      
     void            (*iso_opened)                   (ParoleMediaList *list,
                                                      const gchar *filename);
+                                                     
+    void            (*dvd_chapter_count)            (ParoleMediaList *list,
+                                                     gint chapter_count);
     
 } ParoleMediaListClass;
 
diff --git a/src/parole-player.c b/src/parole-player.c
index 62f4c25..223eb67 100644
--- a/src/parole-player.c
+++ b/src/parole-player.c
@@ -363,6 +363,7 @@ struct ParolePlayerPrivate
     GtkWidget          *audio_group;
     
     GtkWidget          *dvd_menu;
+    GtkWidget          *chapters_menu;
     
     GtkWidget          *subtitles_menu;
     GtkWidget          *languages_menu;
@@ -635,6 +636,52 @@ parole_sublang_equal_lists (GList *orig, GList *new)
 }
 
 static void
+parole_player_clear_chapters (ParolePlayer *player)
+{
+    GList *menu_items, *menu_iter;
+    gint counter = 0;
+    
+    /* Clear the chapter menu options */
+    menu_items = gtk_container_get_children( GTK_CONTAINER (player->priv->chapters_menu) );
+    //gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(player->priv->subtitles_group), TRUE);
+    
+    for (menu_iter = menu_items; menu_iter != NULL; menu_iter = g_list_next(menu_iter))
+    {
+        if (counter >= 2)
+            gtk_widget_destroy(GTK_WIDGET(menu_iter->data));
+        counter++;
+    }
+    g_list_free(menu_items);
+}
+
+static void
+parole_player_chapter_selection_changed_cb(GtkWidget *widget, ParolePlayer *player)
+{
+    gint chapter_id = atoi((char*)g_object_get_data(G_OBJECT(widget), "chapter-id"));
+    parole_gst_set_dvd_chapter(PAROLE_GST(player->priv->gst)    , chapter_id);
+}
+
+static void
+parole_player_update_chapters (ParolePlayer *player, gint chapter_count)
+{
+    int chapter_id;
+    GtkWidget *menu_item;
+    parole_player_clear_chapters(player);
+
+    for (chapter_id=0; chapter_id<chapter_count; chapter_id++)
+    {
+        menu_item = GTK_WIDGET(gtk_menu_item_new_with_label (g_strdup_printf(_("Chapter %i"), chapter_id+1)));
+        gtk_widget_show (menu_item);
+
+        g_object_set_data(G_OBJECT(menu_item), "chapter-id", g_strdup_printf("%i", chapter_id+1));
+        
+        gtk_menu_shell_append (GTK_MENU_SHELL (player->priv->chapters_menu), menu_item);
+        g_signal_connect   (menu_item, "activate",
+                            G_CALLBACK (parole_player_chapter_selection_changed_cb), player);
+    }
+}
+
+static void
 parole_player_clear_subtitles (ParolePlayer *player)
 {
     GtkTreeIter iter;
@@ -1808,6 +1855,7 @@ parole_player_dvd_chapter_count_change_cb (ParoleGst *gst, gint chapter_count, P
     //parole_media_list_clear_list (player->priv->list);
     
     parole_media_list_add_dvd_chapters (player->priv->list, chapter_count);
+    parole_player_update_chapters(player, chapter_count);
 }
 
 static void
@@ -3006,6 +3054,8 @@ parole_player_init (ParolePlayer *player)
     chapter_menu = GTK_MENU_ITEM (gtk_builder_get_object (builder, "dvd_chapter-menu"));
     g_signal_connect (chapter_menu, "activate",
                       G_CALLBACK (parole_player_dvd_chapter_activated), player);
+                      
+    player->priv->chapters_menu = GTK_WIDGET (gtk_builder_get_object (builder, "chapters-menu"));
     
     /* Language Menus */
     player->priv->subtitles_menu = GTK_WIDGET (gtk_builder_get_object (builder, "subtitles-menu"));


More information about the Xfce4-commits mailing list