[Xfce4-commits] <parole:master> Add and option in the media chooser dialog to enable/disable scanning folders recursively for media files.
Ali Abdallah
noreply at xfce.org
Tue Nov 17 09:30:03 CET 2009
Updating branch refs/heads/master
to 913d5e3a6dab7a1f7c5ffeb17e3bf274cd789d0c (commit)
from 1455521efb23df728d589cd781f4429e3481584b (commit)
commit 913d5e3a6dab7a1f7c5ffeb17e3bf274cd789d0c
Author: Ali Abdallah <ali at ali-xfce.org>
Date: Tue Nov 17 09:04:43 2009 +0100
Add and option in the media chooser dialog to enable/disable
scanning folders recursively for media files.
data/interfaces/mediachooser.ui | 17 ++++++++++++++++-
parole/parole-filters.c | 8 ++++----
parole/parole-filters.h | 1 +
parole/parole-mediachooser.c | 29 ++++++++++++++++++++++++++++-
parole/parole-medialist.c | 2 +-
5 files changed, 50 insertions(+), 7 deletions(-)
diff --git a/data/interfaces/mediachooser.ui b/data/interfaces/mediachooser.ui
index 991065f..b5023cd 100644
--- a/data/interfaces/mediachooser.ui
+++ b/data/interfaces/mediachooser.ui
@@ -20,6 +20,21 @@
</packing>
</child>
<child>
+ <object class="GtkCheckButton" id="recursive">
+ <property name="label" translatable="yes">Scan folders recursively</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="parole_media_chooser_recursive_toggled_cb"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
<object class="GtkHButtonBox" id="hbuttonbox1">
<property name="visible">True</property>
<property name="border_width">5</property>
@@ -57,7 +72,7 @@
</object>
<packing>
<property name="expand">False</property>
- <property name="position">1</property>
+ <property name="position">2</property>
</packing>
</child>
</object>
diff --git a/parole/parole-filters.c b/parole/parole-filters.c
index 5f52422..0d8811b 100644
--- a/parole/parole-filters.c
+++ b/parole/parole-filters.c
@@ -148,7 +148,8 @@ gboolean parole_file_filter (GtkFileFilter *filter, ParoleFile *file)
return ret;
}
-void parole_get_media_files (GtkFileFilter *filter, const gchar *path, GSList **list)
+void parole_get_media_files (GtkFileFilter *filter, const gchar *path,
+ gboolean recursive, GSList **list)
{
GtkFileFilter *playlist_filter;
GSList *list_internal = NULL;
@@ -189,9 +190,9 @@ void parole_get_media_files (GtkFileFilter *filter, const gchar *path, GSList **
while ( (name = g_dir_read_name (dir)) )
{
gchar *path_internal = g_strdup_printf ("%s/%s", path, name);
- if ( g_file_test (path_internal, G_FILE_TEST_IS_DIR) )
+ if ( g_file_test (path_internal, G_FILE_TEST_IS_DIR) && recursive)
{
- parole_get_media_files (filter, path_internal, list);
+ parole_get_media_files (filter, path_internal, TRUE, list);
}
else if ( g_file_test (path_internal, G_FILE_TEST_IS_REGULAR) )
{
@@ -218,6 +219,5 @@ void parole_get_media_files (GtkFileFilter *filter, const gchar *path, GSList **
g_dir_close (dir);
*list = g_slist_concat (*list, list_internal);
}
-
g_object_unref (playlist_filter);
}
diff --git a/parole/parole-filters.h b/parole/parole-filters.h
index 73308dd..2a12951 100644
--- a/parole/parole-filters.h
+++ b/parole/parole-filters.h
@@ -53,6 +53,7 @@ ParoleFileFormat parole_file_guess_format (ParoleFile *file);
void parole_get_media_files (GtkFileFilter *filter,
const gchar *path,
+ gboolean recursive,
GSList **list);
G_END_DECLS
diff --git a/parole/parole-mediachooser.c b/parole/parole-mediachooser.c
index 7af1af3..55464b8 100644
--- a/parole/parole-mediachooser.c
+++ b/parole/parole-mediachooser.c
@@ -56,6 +56,11 @@ void media_chooser_folder_changed_cb (GtkWidget *widget,
void media_chooser_file_activate_cb (GtkFileChooser *filechooser,
ParoleMediaChooser *chooser);
+void parole_media_chooser_recursive_toggled_cb (GtkToggleButton *recursive,
+ gpointer data);
+
+
+
enum
{
MEDIA_FILES_OPENED,
@@ -90,6 +95,8 @@ parole_media_chooser_add (ParoleMediaChooser *chooser, GtkWidget *file_chooser)
GSList *media_files = NULL;
GSList *files;
GtkFileFilter *filter;
+ GtkWidget *recursive;
+ gboolean scan_recursive;
gchar *file;
guint i;
guint len;
@@ -100,12 +107,16 @@ parole_media_chooser_add (ParoleMediaChooser *chooser, GtkWidget *file_chooser)
if ( G_UNLIKELY (files == NULL) )
return;
+ recursive = g_object_get_data (G_OBJECT (chooser), "recursive");
+
+ scan_recursive = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (recursive));
+
len = g_slist_length (files);
for ( i = 0; i < len; i++)
{
file = g_slist_nth_data (files, i);
- parole_get_media_files (filter, file, &media_files);
+ parole_get_media_files (filter, file, scan_recursive, &media_files);
}
g_signal_emit (G_OBJECT (chooser), signals [MEDIA_FILES_OPENED], 0, media_files);
@@ -132,6 +143,14 @@ void media_chooser_file_activate_cb (GtkFileChooser *filechooser, ParoleMediaCho
parole_media_chooser_open (NULL, chooser);
}
+void parole_media_chooser_recursive_toggled_cb (GtkToggleButton *recursive,
+ gpointer data)
+{
+ parole_rc_write_entry_bool ("scan-recursive",
+ PAROLE_RC_GROUP_GENERAL,
+ gtk_toggle_button_get_active (recursive));
+}
+
static void
parole_media_chooser_open_internal (GtkWidget *chooser)
{
@@ -141,6 +160,8 @@ parole_media_chooser_open_internal (GtkWidget *chooser)
GtkBuilder *builder;
GtkWidget *open;
GtkWidget *img;
+ GtkWidget *recursive;
+ gboolean scan_recursive;
const gchar *folder;
media_chooser = PAROLE_MEDIA_CHOOSER (chooser);
@@ -167,6 +188,11 @@ parole_media_chooser_open_internal (GtkWidget *chooser)
gtk_file_chooser_set_select_multiple (GTK_FILE_CHOOSER (file_chooser), TRUE);
+ scan_recursive = parole_rc_read_entry_bool ("scan-recursive", PAROLE_RC_GROUP_GENERAL, TRUE);
+
+ recursive = GTK_WIDGET (gtk_builder_get_object (builder, "recursive"));
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (recursive), scan_recursive);
+
img = gtk_image_new_from_stock (GTK_STOCK_ADD, GTK_ICON_SIZE_BUTTON);
g_object_set (G_OBJECT (open),
@@ -175,6 +201,7 @@ parole_media_chooser_open_internal (GtkWidget *chooser)
NULL);
g_object_set_data (G_OBJECT (chooser), "file-chooser", file_chooser);
+ g_object_set_data (G_OBJECT (chooser), "recursive", recursive);
gtk_container_add (GTK_CONTAINER (GTK_DIALOG (media_chooser)->vbox), vbox);
gtk_builder_connect_signals (builder, chooser);
diff --git a/parole/parole-medialist.c b/parole/parole-medialist.c
index 1faa0f4..d023911 100644
--- a/parole/parole-medialist.c
+++ b/parole/parole-medialist.c
@@ -1093,7 +1093,7 @@ parole_media_list_add_by_path (ParoleMediaList *list, const gchar *path, gboolea
filter = parole_get_supported_media_filter ();
g_object_ref_sink (filter);
- parole_get_media_files (filter, path, &file_list);
+ parole_get_media_files (filter, path, TRUE, &file_list);
parole_media_list_files_opened_cb (NULL, file_list, list);
len = g_slist_length (file_list);
More information about the Xfce4-commits
mailing list