Updating branch refs/heads/master to a2b91bac9ab47636e2b25c4055bce5e4505c53ab (commit) from 4b35c89e8b24c17eb4f5d66d7c2fb29bfb208970 (commit)
commit a2b91bac9ab47636e2b25c4055bce5e4505c53ab Author: Sean Davis <smd.seanda...@gmail.com> Date: Sun Nov 18 08:25:18 2012 -0500 Cleanup for custom subtitle code. src/parole-medialist.c | 39 +++++++++++++++++++ src/parole-medialist.h | 3 + src/parole-player.c | 100 +++++++++++++++++++++++++----------------------- 3 files changed, 94 insertions(+), 48 deletions(-) diff --git a/src/parole-medialist.c b/src/parole-medialist.c index ffb4009..c90cd61 100644 --- a/src/parole-medialist.c +++ b/src/parole-medialist.c @@ -517,6 +517,33 @@ parole_media_list_get_first_selected_row (ParoleMediaList *list) return row; } +/** + * parole_media_list_get_first_selected_file: + * @list: a #ParoleMediaList + * + * Get the first selected #ParoleFile media file in the media list view + * + * Returns: a #ParoleFile + **/ +static ParoleFile * +parole_media_list_get_first_selected_file (ParoleMediaList *list) +{ + ParoleFile *file; + GtkTreeRowReference *row; + GtkTreeIter iter; + + row = parole_media_list_get_first_selected_row(list); + + if ( gtk_tree_model_get_iter (GTK_TREE_MODEL (list->priv->store), + &iter, + gtk_tree_row_reference_get_path (row)) ) + { + gtk_tree_model_get (GTK_TREE_MODEL (list->priv->store), &iter, DATA_COL, &file, -1); + } + + return file; +} + /* Callback to save the current playlist */ void parole_media_list_save_playlist_cb (GtkButton *button, ParolePlaylistSave *data) { @@ -1645,6 +1672,18 @@ GtkTreeRowReference *parole_media_list_get_selected_row (ParoleMediaList *list) return parole_media_list_get_first_selected_row (list); } +/** + * parole_media_list_get_selected_file: + * @list: a #ParoleMediaList + * + * + * Returns: a #ParoleFile of the selected row. + **/ +ParoleFile *parole_media_list_get_selected_file (ParoleMediaList *list) +{ + return parole_media_list_get_first_selected_file (list); +} + void parole_media_list_select_row (ParoleMediaList *list, GtkTreeRowReference *row) { GtkTreePath *path; diff --git a/src/parole-medialist.h b/src/parole-medialist.h index 4fe5189..ea788e4 100644 --- a/src/parole-medialist.h +++ b/src/parole-medialist.h @@ -22,6 +22,7 @@ #define __PAROLE_MEDIA_LIST_H #include <gtk/gtk.h> +#include <src/misc/parole-file.h> G_BEGIN_DECLS @@ -88,6 +89,8 @@ GtkTreeRowReference *parole_media_list_get_first_row (ParoleMedia GtkTreeRowReference *parole_media_list_get_selected_row (ParoleMediaList *list); +ParoleFile *parole_media_list_get_selected_file (ParoleMediaList *list); + void parole_media_list_select_row (ParoleMediaList *list, GtkTreeRowReference *row); diff --git a/src/parole-player.c b/src/parole-player.c index 6c30875..3cfbeb8 100644 --- a/src/parole-player.c +++ b/src/parole-player.c @@ -817,28 +817,31 @@ parole_player_update_languages (ParolePlayer *player, ParoleGst *gst) } } +/** + * parole_player_select_custom_subtitle: + * @widget : The #GtkMenuItem for selecting a custom subtitle file. + * @data : The #ParolePlayer instance passed by the callback function. + * + * Display the #FileChooserDialog for selecting a custom subtitle file and load + * the subtitles selected. + **/ static void parole_player_select_custom_subtitle (GtkMenuItem *widget, gpointer data) { - ParolePlayer *player; - GtkWidget *chooser; - GtkFileFilter *filter, *all; - gchar *sub = NULL; - const gchar *folder; - gint response; - gchar *uri = NULL; + ParolePlayer *player; + ParoleFile *file; - GtkTreeRowReference *row; + GtkWidget *chooser; + GtkFileFilter *filter, *all_files; + gint response; - ParoleFile *file; - GtkTreeIter iter; - GtkTreeModel *model; + const gchar *folder; + gchar *sub = NULL; + gchar *uri = NULL; player = PAROLE_PLAYER(data); - row = parole_media_list_get_selected_row (player->priv->list); - - + /* Build the FileChooser dialog for subtitle selection. */ chooser = gtk_file_chooser_dialog_new (_("Select Subtitle File"), NULL, GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, @@ -848,11 +851,12 @@ parole_player_select_custom_subtitle (GtkMenuItem *widget, gpointer data) gtk_file_chooser_set_select_multiple (GTK_FILE_CHOOSER (chooser), FALSE); gtk_file_chooser_set_local_only (GTK_FILE_CHOOSER (chooser), FALSE); - folder = parole_rc_read_entry_string ("iso-image-folder", PAROLE_RC_GROUP_GENERAL, NULL); + folder = parole_rc_read_entry_string ("media-chooser-folder", PAROLE_RC_GROUP_GENERAL, NULL); if ( folder ) gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (chooser), folder); + /* Subtitle format filter */ filter = gtk_file_filter_new (); gtk_file_filter_set_name (filter, _("Subtitle Files")); gtk_file_filter_add_pattern (filter, "*.asc"); @@ -864,51 +868,51 @@ parole_player_select_custom_subtitle (GtkMenuItem *widget, gpointer data) gtk_file_filter_add_pattern (filter, "*.ass"); gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (chooser), filter); - all = gtk_file_filter_new (); - gtk_file_filter_set_name (all, _("All Files")); - gtk_file_filter_add_pattern (all, "*"); - gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (chooser), all); + /* All files filter */ + all_files = gtk_file_filter_new (); + gtk_file_filter_set_name (all_files, _("All files")); + gtk_file_filter_add_pattern (all_files, "*"); + gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (chooser), all_files); gtk_window_set_default_size (GTK_WINDOW (chooser), 680, 480); + + /* Run the dialog, get the selected filename. */ response = gtk_dialog_run (GTK_DIALOG (chooser)); - if ( response == GTK_RESPONSE_OK ) - sub = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (chooser)); + sub = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (chooser)); gtk_widget_destroy (chooser); if ( sub ) { - uri = parole_gst_get_file_uri(PAROLE_GST (player->priv->gst)); - - parole_player_reset(player); - - if ( g_str_has_prefix (uri, "file:/") ) - { - TRACE ("Trying to play media file %s", uri); - TRACE ("Trying to use subtitle file %s", sub); - player->priv->updated_subs = TRUE; - - player->priv->row = gtk_tree_row_reference_copy (row); - - model = gtk_tree_row_reference_get_model (row); + /* Get the current playing file uri. */ + uri = parole_gst_get_file_uri(PAROLE_GST (player->priv->gst)); + + /* Reset the player. */ + parole_player_reset(player); - if ( gtk_tree_model_get_iter (model, &iter, gtk_tree_row_reference_get_path (row)) ) + if ( g_str_has_prefix (uri, "file:/") ) { - gtk_tree_model_get (model, &iter, DATA_COL, &file, -1); - - parole_file_set_custom_subtitles(file, sub); - - parole_gst_set_custom_subtitles(PAROLE_GST (player->priv->gst), sub); - parole_gst_play_uri (PAROLE_GST (player->priv->gst), - uri, - sub); - } + TRACE ("Trying to play media file %s", uri); + TRACE ("Trying to use subtitle file %s", sub); + player->priv->updated_subs = TRUE; + + file = parole_media_list_get_selected_file( player->priv->list ); + + /* Set the subtitles in gst as well as in the media list, for later + retrieval. */ + if ( file ) + { + parole_file_set_custom_subtitles(file, sub); + parole_gst_set_custom_subtitles(PAROLE_GST (player->priv->gst), sub); + parole_gst_play_uri (PAROLE_GST (player->priv->gst), uri, sub); + } + } + + g_free (sub); + g_free (uri); } - - g_free (sub); - g_free (uri); -}} +} static void parole_player_media_activated_cb (ParoleMediaList *list, GtkTreeRowReference *row, ParolePlayer *player) _______________________________________________ Xfce4-commits mailing list Xfce4-commits@xfce.org https://mail.xfce.org/mailman/listinfo/xfce4-commits