[Xfce4-commits] <parole:master> Fixed segmentation fault with play/pause.

Sean Davis noreply at xfce.org
Mon Jul 23 01:25:10 CEST 2012


Updating branch refs/heads/master
         to 37cd2802a72d61b614f00951237a9ad823c47809 (commit)
       from 4565225c5bab4abe7652f34d092f70b55a669def (commit)

commit 37cd2802a72d61b614f00951237a9ad823c47809
Author: Sean Davis <smd.seandavis at gmail.com>
Date:   Thu Jul 19 12:53:54 2012 -0400

    Fixed segmentation fault with play/pause.

 data/interfaces/parole.ui |    1 +
 src/gst/parole-gst.c      |    6 ++++++
 src/gst/parole-gst.h      |    1 +
 src/parole-player.c       |   43 ++++++++++++++++++++++++++-----------------
 4 files changed, 34 insertions(+), 17 deletions(-)

diff --git a/data/interfaces/parole.ui b/data/interfaces/parole.ui
index a350883..3f3b4e1 100644
--- a/data/interfaces/parole.ui
+++ b/data/interfaces/parole.ui
@@ -642,6 +642,7 @@
                                                 <property name="visible">True</property>
                                                 <property name="can_focus">False</property>
                                                 <property name="model">liststore_subtitles</property>
+                                                <signal name="changed" handler="parole_player_combo_box_subtitles_changed_cb" swapped="no"/>
                                               </object>
                                               <packing>
                                                 <property name="expand">False</property>
diff --git a/src/gst/parole-gst.c b/src/gst/parole-gst.c
index a4d0959..b8614d3 100644
--- a/src/gst/parole-gst.c
+++ b/src/gst/parole-gst.c
@@ -2272,6 +2272,12 @@ gst_set_current_audio_track( ParoleGst *gst, gint track_no )
 	g_object_set (G_OBJECT (gst->priv->playbin), "current-audio", (track_no), NULL);
 }
 
+void
+gst_set_current_subtitle_track( ParoleGst *gst, gint track_no )
+{
+	g_object_set (G_OBJECT (gst->priv->playbin), "current-text", (track_no-1), NULL);
+}
+
 const ParoleStream     *parole_gst_get_stream 		(ParoleGst *gst)
 {
     g_return_val_if_fail (PAROLE_IS_GST (gst), NULL);
diff --git a/src/gst/parole-gst.h b/src/gst/parole-gst.h
index 55f718c..648dc0a 100644
--- a/src/gst/parole-gst.h
+++ b/src/gst/parole-gst.h
@@ -143,6 +143,7 @@ void 			parole_gst_set_cursor_visible 	(ParoleGst *gst,
 GList *			gst_get_lang_list_for_type (ParoleGst * gst, const gchar * type_name);
 
 void			gst_set_current_audio_track( ParoleGst *gst, gint track_no );
+void			gst_set_current_subtitle_track( ParoleGst *gst, gint track_no );
 
 const ParoleStream     *parole_gst_get_stream 		(ParoleGst *gst);
 							 
diff --git a/src/parole-player.c b/src/parole-player.c
index 3102e09..a4b7cfb 100644
--- a/src/parole-player.c
+++ b/src/parole-player.c
@@ -287,6 +287,7 @@ struct ParolePlayerPrivate
     GtkListStore	*liststore_subtitles;
     GList			*audio_list;
     GList			*subtitle_list;
+    gboolean		update_languages;
     
     GtkWidget		*main_box;
     
@@ -483,6 +484,7 @@ parole_player_change_range_value (ParolePlayer *player, gdouble value)
 static void
 parole_player_reset (ParolePlayer *player)
 {
+	player->priv->update_languages = TRUE;
     parole_player_change_range_value (player, 0);
 
     if ( player->priv->row )
@@ -548,17 +550,16 @@ parole_player_update_audio_tracks (ParolePlayer *player, ParoleGst *gst)
 	
 	gtk_combo_box_set_active( GTK_COMBO_BOX(player->priv->combobox_audiotrack), 0 );
 	
-	if (g_list_length (list) <= 1) {
-	gtk_widget_set_sensitive( GTK_WIDGET( player->priv->combobox_audiotrack ), FALSE );
+	if (g_list_length (list) >= 2) {
+		gtk_widget_set_sensitive( GTK_WIDGET( player->priv->combobox_audiotrack ), TRUE );
+  		gtk_widget_show(player->priv->infobar);
+  	}
+  	else {
+  	gtk_widget_set_sensitive( GTK_WIDGET( player->priv->combobox_audiotrack ), FALSE );
+  	}
     g_free (list->data);
     g_list_free (list);
     list = NULL;
-  	}
-  	else
-  	{
-  		gtk_widget_set_sensitive( GTK_WIDGET( player->priv->combobox_audiotrack ), TRUE );
-  		gtk_widget_show(player->priv->infobar);
-  	}
 }
 
 static void
@@ -601,22 +602,23 @@ parole_player_update_subtitles (ParolePlayer *player, ParoleGst *gst)
 	
 	gtk_combo_box_set_active( GTK_COMBO_BOX(player->priv->combobox_subtitles), 0 );
 	
-	if (g_list_length (list) == 1) {
-    g_free (list->data);
+	if (g_list_length (list) != 1) {
+    	gtk_widget_show(player->priv->infobar);
+  	}
+  	g_free (list->data);
     g_list_free (list);
     list = NULL;
-  	}
-  	else
-  	{
-  		gtk_widget_show(player->priv->infobar);
-  	}
 }
 
 static void
 parole_player_update_languages (ParolePlayer *player, ParoleGst *gst)
 {
-	parole_player_update_audio_tracks(player, gst);
-	parole_player_update_subtitles(player, gst);
+	if (player->priv->update_languages == TRUE)
+	{
+		parole_player_update_audio_tracks(player, gst);
+		parole_player_update_subtitles(player, gst);
+		player->priv->update_languages = FALSE;
+	}
 }
 
 static void
@@ -2259,6 +2261,7 @@ parole_player_init (ParolePlayer *player)
                                GTK_MESSAGE_QUESTION);
                                
 	gtk_box_pack_start( GTK_BOX( player->priv->hbox_infobar ), player->priv->infobar, TRUE, TRUE, 0);
+	player->priv->update_languages = FALSE;
 	
     gtk_scale_button_set_value (GTK_SCALE_BUTTON (player->priv->volume), 
 			 (gdouble) (parole_rc_read_entry_int ("volume", PAROLE_RC_GROUP_GENERAL, 100)/100.));
@@ -2400,6 +2403,12 @@ void parole_player_combo_box_audiotrack_changed_cb(GtkWidget *widget, ParolePlay
 	gst_set_current_audio_track(PAROLE_GST(player->priv->gst), index);
 }
 
+void parole_player_combo_box_subtitles_changed_cb(GtkWidget *widget, ParolePlayer *player)
+{
+	gint index = gtk_combo_box_get_active(GTK_COMBO_BOX(player->priv->combobox_subtitles));
+	gst_set_current_subtitle_track(PAROLE_GST(player->priv->gst), index);
+}
+
 void parole_player_terminate (ParolePlayer *player)
 {
     parole_player_delete_event_cb (NULL, NULL, player);


More information about the Xfce4-commits mailing list