Updating branch refs/heads/master to f97a2753d1f889f9be32284f7b85c63e33deda65 (commit) from 6bbe02976885a4578f5ac00735b19734ebddab63 (commit)
commit f97a2753d1f889f9be32284f7b85c63e33deda65 Author: Sean Davis <smd.seanda...@gmail.com> Date: Sun Sep 1 08:06:08 2013 -0400 (Re)Add ability to play DVD ISO, select from Open dialog src/parole-conf.c | 16 ------- src/parole-mediachooser.c | 30 +++++++++++++ src/parole-medialist.c | 23 ++++++++++ src/parole-medialist.h | 3 ++ src/parole-player.c | 103 +++++---------------------------------------- 5 files changed, 66 insertions(+), 109 deletions(-) diff --git a/src/parole-conf.c b/src/parole-conf.c index d6c9163..3d344a8 100644 --- a/src/parole-conf.c +++ b/src/parole-conf.c @@ -51,7 +51,6 @@ enum PROP_VIS_NAME, PROP_VOLUME, /* Folders */ - PROP_ISO_IMAGE_FOLDER, PROP_MEDIA_CHOOSER_FOLDER, /* Parole General */ PROP_MULTIMEDIA_KEYS, @@ -404,21 +403,6 @@ parole_conf_class_init (ParoleConfClass *klass) G_PARAM_READWRITE)); /** - * ParoleConf:iso-image-folder: - * - * Xfconf property: /folders/last-used-iso - * - * Path to directory containing last used iso image. - **/ - g_object_class_install_property (object_class, - PROP_ISO_IMAGE_FOLDER, - g_param_spec_string ("iso-image-folder", - "/folders/last-used-iso", - NULL, - "none", - G_PARAM_READWRITE)); - - /** * ParoleConf:media-chooser-folder: * * Xfconf property: /folders/last-used-media diff --git a/src/parole-mediachooser.c b/src/parole-mediachooser.c index 649ebaf..6185f30 100644 --- a/src/parole-mediachooser.c +++ b/src/parole-mediachooser.c @@ -77,11 +77,15 @@ struct ParoleMediaChooserClass void (*media_files_opened) (ParoleMediaChooser *chooser, GSList *list); + + void (*iso_opened) (ParoleMediaChooser *chooser, + gchar *filename); }; enum { MEDIA_FILES_OPENED, + ISO_OPENED, LAST_SIGNAL }; @@ -131,6 +135,21 @@ parole_media_chooser_add (ParoleMediaChooser *chooser, GtkWidget *file_chooser) for ( i = 0; i < len; i++) { file = g_slist_nth_data (files, i); + if (g_str_has_suffix(file, ".iso")) + { + // FIXME: Is there some way to add the ISO to the playlist? + // For now we will play the ISO if it is the first file found, otherwise ignore. + if (g_slist_length(media_files) != 0) + continue; + g_signal_emit (G_OBJECT (chooser), signals [ISO_OPENED], 0, file); + + g_slist_free (media_files); + + g_slist_foreach (files, (GFunc) g_free, NULL); + g_slist_free (files); + + return; + } parole_get_media_files (filter, file, scan_recursive, &media_files); } @@ -215,6 +234,7 @@ parole_media_chooser_open_internal (ParoleMediaChooser *media_chooser) gtk_file_filter_set_name( filter, _("Supported files") ); gtk_file_filter_add_mime_type (GTK_FILE_FILTER (filter), "audio/*"); gtk_file_filter_add_mime_type (GTK_FILE_FILTER (filter), "video/*"); + gtk_file_filter_add_mime_type (GTK_FILE_FILTER (filter), "application/x-cd-image"); gtk_file_chooser_add_filter( GTK_FILE_CHOOSER(file_chooser), filter ); all_files = gtk_file_filter_new(); @@ -278,6 +298,16 @@ parole_media_chooser_class_init (ParoleMediaChooserClass *klass) g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1, G_TYPE_POINTER); + + signals[ISO_OPENED] = + g_signal_new ("iso-opened", + PAROLE_TYPE_MEDIA_CHOOSER, + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (ParoleMediaChooserClass, iso_opened), + NULL, NULL, + g_cclosure_marshal_VOID__POINTER, + G_TYPE_NONE, 1, + G_TYPE_POINTER); object_class->finalize = parole_media_chooser_finalize; } diff --git a/src/parole-medialist.c b/src/parole-medialist.c index 6a98288..667dc85 100644 --- a/src/parole-medialist.c +++ b/src/parole-medialist.c @@ -201,6 +201,7 @@ enum SHUFFLE_TOGGLED, REPEAT_TOGGLED, SHOW_PLAYLIST, + ISO_OPENED, LAST_SIGNAL }; @@ -410,6 +411,16 @@ parole_media_list_location_opened_cb (ParoleOpenLocation *obj, const gchar *loca } static void +parole_media_list_iso_opened_cb (ParoleMediaChooser *chooser, + gchar *filename, + ParoleMediaList *list) +{ + gchar *uri; + uri = g_strdup_printf ("dvd://%s", filename); + g_signal_emit (G_OBJECT (list), signals [ISO_OPENED], 0, uri); +} + +static void parole_media_list_open_internal (ParoleMediaList *list) { ParoleMediaChooser *chooser; @@ -420,6 +431,9 @@ parole_media_list_open_internal (ParoleMediaList *list) g_signal_connect (G_OBJECT (chooser), "media_files_opened", G_CALLBACK (parole_media_list_files_opened_cb), list); + + g_signal_connect (G_OBJECT (chooser), "iso_opened", + G_CALLBACK (parole_media_list_iso_opened_cb), list); } static void @@ -1500,6 +1514,15 @@ parole_media_list_class_init (ParoleMediaListClass *klass) NULL, NULL, g_cclosure_marshal_VOID__BOOLEAN, G_TYPE_NONE, 1, G_TYPE_BOOLEAN); + + signals[ISO_OPENED] = + g_signal_new ("iso-opened", + PAROLE_TYPE_MEDIA_LIST, + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (ParoleMediaListClass, iso_opened), + NULL, NULL, + g_cclosure_marshal_VOID__STRING, + G_TYPE_NONE, 1, G_TYPE_STRING); g_type_class_add_private (klass, sizeof (ParoleMediaListPrivate)); diff --git a/src/parole-medialist.h b/src/parole-medialist.h index c4831be..2b9ccf2 100644 --- a/src/parole-medialist.h +++ b/src/parole-medialist.h @@ -81,6 +81,9 @@ typedef struct void (*gst_dvd_nav_message) (ParoleMediaList *list, gint gst_dvd_nav_message); + + void (*iso_opened) (ParoleMediaList *list, + const gchar *filename); } ParoleMediaListClass; diff --git a/src/parole-player.c b/src/parole-player.c index 4927701..2a66135 100644 --- a/src/parole-player.c +++ b/src/parole-player.c @@ -190,12 +190,6 @@ void parole_player_save_playlist_cb (GtkWidget *widget, void parole_player_menu_exit_cb (GtkWidget *widget, ParolePlayer *player); -void dvd_iso_mi_activated_cb (GtkWidget *widget, - ParolePlayer *player); - -void cd_iso_mi_activated_cb (GtkWidget *widget, - ParolePlayer *player); - void parole_player_volume_up (GtkWidget *widget, ParolePlayer *player); @@ -520,93 +514,6 @@ void parole_player_show_hide_playlist (GtkWidget *widget, ParolePlayer *player) parole_player_set_playlist_visible( player, !visible ); } -typedef enum -{ - PAROLE_ISO_IMAGE_DVD, - PAROLE_ISO_IMAGE_CD -} ParoleIsoImage; - - - -static void -iso_files_folder_changed_cb (GtkFileChooser *widget, ParolePlayer *player) -{ - gchar *folder; - folder = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER (widget)); - - if ( folder ) - { - g_object_set (G_OBJECT (player->priv->conf), - "iso-image-folder", folder, - NULL); - g_free (folder); - } -} - -static void -parole_player_open_iso_image (ParolePlayer *player, ParoleIsoImage image) -{ - GtkWidget *chooser; - GtkFileFilter *filter; - gchar *file = NULL; - const gchar *folder; - gint response; - - chooser = gtk_file_chooser_dialog_new (_("Open ISO image"), GTK_WINDOW (player->priv->window), - GTK_FILE_CHOOSER_ACTION_OPEN, - _("Cancel"), GTK_RESPONSE_CANCEL, - _("Open"), GTK_RESPONSE_OK, - NULL); - - gtk_file_chooser_set_select_multiple (GTK_FILE_CHOOSER (chooser), FALSE); - - g_object_get (G_OBJECT (player->priv->conf), - "iso-image-folder", &folder, - NULL); - - if ( folder ) - gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (chooser), folder); - - g_signal_connect (chooser, "current-folder-changed", - G_CALLBACK (iso_files_folder_changed_cb), player); - - filter = gtk_file_filter_new (); - gtk_file_filter_set_name (filter, image == PAROLE_ISO_IMAGE_CD ? _("CD image") : _("DVD image")); - gtk_file_filter_add_mime_type (filter, "application/x-cd-image"); - gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (chooser), filter); - - gtk_window_set_default_size (GTK_WINDOW (chooser), 680, 480); - response = gtk_dialog_run (GTK_DIALOG (chooser)); - - if ( response == GTK_RESPONSE_OK ) - { - file = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (chooser)); - } - - gtk_widget_destroy (chooser); - - if ( file ) - { - gchar *uri; - //FIXME: vcd will work for svcd? - uri = g_strdup_printf ("%s%s", PAROLE_ISO_IMAGE_CD ? "dvd://" : ("vcd://"), file); - TRACE ("Playing ISO image %s", uri); - parole_player_disc_selected_cb (NULL, uri, NULL, player); - g_free (file); - g_free (uri); - } -} - -void dvd_iso_mi_activated_cb (GtkWidget *widget, ParolePlayer *player) -{ - parole_player_open_iso_image (player, PAROLE_ISO_IMAGE_DVD); -} - -void cd_iso_mi_activated_cb (GtkWidget *widget, ParolePlayer *player) -{ - parole_player_open_iso_image (player, PAROLE_ISO_IMAGE_CD); -} - static void parole_player_change_range_value (ParolePlayer *player, gdouble value) { @@ -1177,6 +1084,13 @@ parole_player_uri_opened_cb (ParoleMediaList *list, const gchar *uri, ParolePlay } static void +parole_player_iso_opened_cb (ParoleMediaList *list, const gchar *uri, ParolePlayer *player) +{ + parole_player_reset (player); + parole_player_disc_selected_cb (NULL, uri, NULL, player); +} + +static void parole_player_recent_menu_clear_activated_cb (GtkWidget *widget, ParolePlayer *player) { GtkWidget *dlg; @@ -3314,6 +3228,9 @@ parole_player_init (ParolePlayer *player) g_signal_connect (player->priv->list, "show-playlist", G_CALLBACK (parole_player_media_list_show_playlist_cb), player); + + g_signal_connect (player->priv->list, "iso-opened", + G_CALLBACK (parole_player_iso_opened_cb), player); /* * Load auto saved media list. _______________________________________________ Xfce4-commits mailing list Xfce4-commits@xfce.org https://mail.xfce.org/mailman/listinfo/xfce4-commits