[easytag/wip/libsoup-cddb: 17/17] Refactor reading of selection from the file list
- From: David King <davidk src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [easytag/wip/libsoup-cddb: 17/17] Refactor reading of selection from the file list
- Date: Sat, 16 Jul 2016 22:08:44 +0000 (UTC)
commit 9d5c25eb52d24b5feb32fe59b889a4ee33310124
Author: David King <amigadave amigadave com>
Date: Sat Mar 12 16:11:06 2016 +0000
Refactor reading of selection from the file list
Add et_browser_get_selected_files() to simplify getting the list of
selected files from the browser.
src/application_window.c | 84 ++++++++++++++++++---------------------------
src/application_window.h | 1 +
src/browser.c | 38 +++++++++++++++++++++
src/browser.h | 1 +
src/cddb_dialog.c | 17 +---------
src/easytag.c | 21 ++----------
src/playlist_dialog.c | 21 ++----------
src/scan_dialog.c | 25 +++++---------
src/tag_area.c | 20 +----------
9 files changed, 92 insertions(+), 136 deletions(-)
---
diff --git a/src/application_window.c b/src/application_window.c
index 045113d..3b4095d 100644
--- a/src/application_window.c
+++ b/src/application_window.c
@@ -647,31 +647,24 @@ on_undo_file_changes (GSimpleAction *action,
gpointer user_data)
{
EtApplicationWindow *self;
- EtApplicationWindowPrivate *priv;
- GList *selfilelist = NULL;
+ GList *etfilelist = NULL;
GList *l;
gboolean state = FALSE;
- ET_File *etfile;
- GtkTreeSelection *selection;
g_return_if_fail (ETCore->ETFileDisplayedList != NULL);
self = ET_APPLICATION_WINDOW (user_data);
- priv = et_application_window_get_instance_private (self);
et_application_window_update_et_file_from_ui (self);
- selection = et_application_window_browser_get_selection (self);
- selfilelist = gtk_tree_selection_get_selected_rows(selection, NULL);
+ etfilelist = et_application_window_browser_get_selected_files (self);
- for (l = selfilelist; l != NULL; l = g_list_next (l))
+ for (l = etfilelist; l != NULL; l = g_list_next (l))
{
- etfile = et_browser_get_et_file_from_path (ET_BROWSER (priv->browser),
- l->data);
- state |= ET_Undo_File_Data(etfile);
+ state |= ET_Undo_File_Data ((ET_File *)l->data);
}
- g_list_free_full (selfilelist, (GDestroyNotify)gtk_tree_path_free);
+ g_list_free (etfilelist);
/* Refresh the whole list (faster than file by file) to show changes. */
et_application_window_browser_refresh_list (self);
@@ -679,8 +672,6 @@ on_undo_file_changes (GSimpleAction *action,
/* Display the current file */
et_application_window_display_et_file (self, ETCore->ETFileDisplayed);
et_application_window_update_actions (self);
-
- //ET_Debug_Print_File_List(ETCore->ETFileList,__FILE__,__LINE__,__FUNCTION__);
}
static void
@@ -689,31 +680,24 @@ on_redo_file_changes (GSimpleAction *action,
gpointer user_data)
{
EtApplicationWindow *self;
- EtApplicationWindowPrivate *priv;
- GList *selfilelist = NULL;
+ GList *etfilelist;
GList *l;
gboolean state = FALSE;
- ET_File *etfile;
- GtkTreeSelection *selection;
g_return_if_fail (ETCore->ETFileDisplayedList != NULL);
self = ET_APPLICATION_WINDOW (user_data);
- priv = et_application_window_get_instance_private (self);
et_application_window_update_et_file_from_ui (self);
- selection = et_application_window_browser_get_selection (ET_APPLICATION_WINDOW (user_data));
- selfilelist = gtk_tree_selection_get_selected_rows(selection, NULL);
+ etfilelist = et_application_window_browser_get_selected_files (self);
- for (l = selfilelist; l != NULL; l = g_list_next (l))
+ for (l = etfilelist; l != NULL; l = g_list_next (l))
{
- etfile = et_browser_get_et_file_from_path (ET_BROWSER (priv->browser),
- l->data);
- state |= ET_Redo_File_Data(etfile);
+ state |= ET_Redo_File_Data ((ET_File *)l->data);
}
- g_list_free_full (selfilelist, (GDestroyNotify)gtk_tree_path_free);
+ g_list_free (etfilelist);
/* Refresh the whole list (faster than file by file) to show changes. */
et_application_window_browser_refresh_list (ET_APPLICATION_WINDOW (user_data));
@@ -888,35 +872,28 @@ on_remove_tags (GSimpleAction *action,
gpointer user_data)
{
EtApplicationWindow *self;
- EtApplicationWindowPrivate *priv;
- GList *selfilelist = NULL;
+ GList *etfilelist;
GList *l;
- ET_File *etfile;
File_Tag *FileTag;
gint progress_bar_index;
gint selectcount;
double fraction;
- GtkTreeSelection *selection;
g_return_if_fail (ETCore->ETFileDisplayedList != NULL);
self = ET_APPLICATION_WINDOW (user_data);
- priv = et_application_window_get_instance_private (self);
et_application_window_update_et_file_from_ui (self);
/* Initialize status bar */
et_application_window_progress_set_fraction (self, 0.0);
- selection = et_application_window_browser_get_selection (self);
- selectcount = gtk_tree_selection_count_selected_rows (selection);
+ etfilelist = et_application_window_browser_get_selected_files (self);
+ selectcount = g_list_length (etfilelist);
progress_bar_index = 0;
- selfilelist = gtk_tree_selection_get_selected_rows (selection, NULL);
-
- for (l = selfilelist; l != NULL; l = g_list_next (l))
+ for (l = etfilelist; l != NULL; l = g_list_next (l))
{
- etfile = et_browser_get_et_file_from_path (ET_BROWSER (priv->browser),
- l->data);
+ ET_File *etfile = (ET_File *)l->data;
FileTag = et_file_tag_new ();
ET_Manage_Changes_Of_File_Data (etfile, NULL, FileTag);
@@ -929,7 +906,7 @@ on_remove_tags (GSimpleAction *action,
}
}
- g_list_free_full (selfilelist, (GDestroyNotify)gtk_tree_path_free);
+ g_list_free (etfilelist);
/* Refresh the whole list (faster than file by file) to show changes. */
et_application_window_browser_refresh_list (self);
@@ -2620,12 +2597,9 @@ et_application_window_update_actions (EtApplicationWindow *self)
return;
}else
{
- GList *selfilelist = NULL;
- ET_File *etfile;
gboolean has_undo = FALSE;
gboolean has_redo = FALSE;
//gboolean has_to_save = FALSE;
- GtkTreeSelection *selection;
/* File and Tag frames */
et_application_window_file_area_set_sensitive (self, TRUE);
@@ -2656,23 +2630,23 @@ et_application_window_update_actions (EtApplicationWindow *self)
/* Check if one of the selected files has undo or redo data */
{
+ GList *etfilelist;
GList *l;
- selection = et_application_window_browser_get_selection (self);
- selfilelist = gtk_tree_selection_get_selected_rows(selection, NULL);
+ etfilelist = et_application_window_browser_get_selected_files (self);
- for (l = selfilelist; l != NULL; l = g_list_next (l))
+ for (l = etfilelist; l != NULL; l = g_list_next (l))
{
- etfile = et_application_window_browser_get_et_file_from_path (self,
- l->data);
- has_undo |= ET_File_Data_Has_Undo_Data(etfile);
- has_redo |= ET_File_Data_Has_Redo_Data(etfile);
+ const ET_File *etfile = (ET_File *)l->data;
+
+ has_undo |= ET_File_Data_Has_Undo_Data (etfile);
+ has_redo |= ET_File_Data_Has_Redo_Data (etfile);
/* has_to_save |= et_file_check_saved (etfile); */
if ((has_undo && has_redo /*&& has_to_save*/) || !l->next) // Useless to check the other
files
break;
}
- g_list_free_full (selfilelist, (GDestroyNotify)gtk_tree_path_free);
+ g_list_free (etfilelist);
}
/* Enable undo commands if there are undo data */
@@ -2865,6 +2839,16 @@ et_application_window_browser_get_et_file_from_iter (EtApplicationWindow *self,
return et_browser_get_et_file_from_iter (ET_BROWSER (priv->browser), iter);
}
+GList *
+et_application_window_browser_get_selected_files (EtApplicationWindow *self)
+{
+ EtApplicationWindowPrivate *priv;
+
+ priv = et_application_window_get_instance_private (self);
+
+ return et_browser_get_selected_files (ET_BROWSER (priv->browser));
+}
+
GtkTreeSelection *
et_application_window_browser_get_selection (EtApplicationWindow *self)
{
diff --git a/src/application_window.h b/src/application_window.h
index 7bf04a6..2b4f97d 100644
--- a/src/application_window.h
+++ b/src/application_window.h
@@ -75,6 +75,7 @@ void et_application_window_browser_entry_set_text (EtApplicationWindow *self, co
void et_application_window_browser_label_set_text (EtApplicationWindow *self, const gchar *text);
ET_File * et_application_window_browser_get_et_file_from_path (EtApplicationWindow *self, GtkTreePath *path);
ET_File * et_application_window_browser_get_et_file_from_iter (EtApplicationWindow *self, GtkTreeIter *iter);
+GList * et_application_window_browser_get_selected_files (EtApplicationWindow *self);
GtkTreeSelection * et_application_window_browser_get_selection (EtApplicationWindow *self);
GtkTreeViewColumn *et_application_window_browser_get_column_for_column_id (EtApplicationWindow *self, gint
column_id);
GtkSortType et_application_window_browser_get_sort_order_for_column_id (EtApplicationWindow *self, gint
column_id);
diff --git a/src/browser.c b/src/browser.c
index ffd1251..19f507d 100644
--- a/src/browser.c
+++ b/src/browser.c
@@ -514,6 +514,44 @@ et_browser_get_current_path (EtBrowser *self)
return priv->current_path;
}
+/*
+ * et_browser_get_selected_files:
+ * @self: an #EtBrowser from which to get a list of selected files
+ *
+ * Get a list of #ET_File of the current selection of the #EtBrowser @self.
+ *
+ * Returns: (element-type ET_File) (transfer container): a newly-allocated list
+ * of the selected files in the browser
+ */
+GList *
+et_browser_get_selected_files (EtBrowser *self)
+{
+ EtBrowserPrivate *priv;
+ GtkTreeSelection *selection;
+ GList *selfilelist;
+ GList *l;
+ GList *files = NULL;
+
+ g_return_val_if_fail (ET_BROWSER (self), NULL);
+
+ priv = et_browser_get_instance_private (self);
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->file_view));
+ selfilelist = gtk_tree_selection_get_selected_rows (selection, NULL);
+
+ for (l = selfilelist; l != NULL; l = g_list_next (l))
+ {
+ ET_File *etfile;
+
+ etfile = et_browser_get_et_file_from_path (self,
+ (GtkTreePath *)l->data);
+ files = g_list_prepend (files, etfile);
+ }
+
+ g_list_free_full (selfilelist, (GDestroyNotify)gtk_tree_path_free);
+
+ return g_list_reverse (files);
+}
+
GtkTreeSelection *
et_browser_get_selection (EtBrowser *self)
{
diff --git a/src/browser.h b/src/browser.h
index e982075..dac3f72 100644
--- a/src/browser.h
+++ b/src/browser.h
@@ -110,6 +110,7 @@ void et_browser_reload_directory (EtBrowser *self);
void et_browser_set_current_path_default (EtBrowser *self);
GFile * et_browser_get_current_path (EtBrowser *self);
+GList * et_browser_get_selected_files (EtBrowser *self);
GtkTreeSelection * et_browser_get_selection (EtBrowser *self);
GtkTreeViewColumn * et_browser_get_column_for_column_id (EtBrowser *self, gint column_id);
diff --git a/src/cddb_dialog.c b/src/cddb_dialog.c
index 42f7d97..d8578ea 100644
--- a/src/cddb_dialog.c
+++ b/src/cddb_dialog.c
@@ -2584,21 +2584,7 @@ et_cddb_dialog_search_from_selection (EtCDDBDialog *self)
* selected. */
if (n_files > 0)
{
- GList* selfilelist;
-
- selfilelist = gtk_tree_selection_get_selected_rows (file_selection,
- NULL);
-
- for (l = selfilelist; l != NULL; l = g_list_next (l))
- {
- ET_File *etfile;
-
- etfile = et_application_window_browser_get_et_file_from_path (ET_APPLICATION_WINDOW (MainWindow),
- l->data);
- filelist = g_list_prepend (filelist, etfile);
- }
-
- g_list_free_full (selfilelist, (GDestroyNotify)gtk_tree_path_free);
+ filelist = et_application_window_browser_get_selected_files (ET_APPLICATION_WINDOW (MainWindow));
}
else /* No rows selected, use the whole list */
{
@@ -2651,7 +2637,6 @@ et_cddb_dialog_search_from_selection (EtCDDBDialog *self)
total_id = 0;
num_tracks = n_files;
query_string = g_string_new ("");
- filelist = g_list_reverse (filelist);
/* FIXME: Split this out to a separate function. */
for (l = filelist; l != NULL; l = g_list_next (l))
diff --git a/src/easytag.c b/src/easytag.c
index fc26747..7fb3494 100644
--- a/src/easytag.c
+++ b/src/easytag.c
@@ -105,26 +105,11 @@ Save_Selected_Files_With_Answer (gboolean force_saving_files)
{
gint toreturn;
GList *etfilelist = NULL;
- GList *selfilelist = NULL;
- GList *l;
- ET_File *etfile;
- GtkTreeSelection *selection;
-
- selection = et_application_window_browser_get_selection (ET_APPLICATION_WINDOW (MainWindow));
- selfilelist = gtk_tree_selection_get_selected_rows(selection, NULL);
-
- for (l = selfilelist; l != NULL; l = g_list_next (l))
- {
- etfile = et_application_window_browser_get_et_file_from_path (ET_APPLICATION_WINDOW (MainWindow),
- l->data);
- etfilelist = g_list_prepend (etfilelist, etfile);
- }
- g_list_free_full (selfilelist, (GDestroyNotify)gtk_tree_path_free);
+ etfilelist = et_application_window_browser_get_selected_files (ET_APPLICATION_WINDOW (MainWindow));
+ toreturn = Save_List_Of_Files (etfilelist, force_saving_files);
+ g_list_free (etfilelist);
- etfilelist = g_list_reverse (etfilelist);
- toreturn = Save_List_Of_Files(etfilelist, force_saving_files);
- g_list_free(etfilelist);
return toreturn;
}
diff --git a/src/playlist_dialog.c b/src/playlist_dialog.c
index 0044796..10dbf56 100644
--- a/src/playlist_dialog.c
+++ b/src/playlist_dialog.c
@@ -125,24 +125,9 @@ write_playlist (EtPlaylistDialog *self, GFile *file, GError **error)
if (g_settings_get_boolean (MainSettings, "playlist-selected-only"))
{
- GList *selfilelist = NULL;
- GtkTreeSelection *selection = et_application_window_browser_get_selection (ET_APPLICATION_WINDOW
(MainWindow));
-
- selfilelist = gtk_tree_selection_get_selected_rows(selection, NULL);
-
- for (l = selfilelist; l != NULL; l = g_list_next (l))
- {
- ET_File *etfile;
-
- etfile = et_application_window_browser_get_et_file_from_path (ET_APPLICATION_WINDOW (MainWindow),
- l->data);
- etfilelist = g_list_prepend (etfilelist, etfile);
- }
-
- etfilelist = g_list_reverse (etfilelist);
-
- g_list_free_full (selfilelist, (GDestroyNotify)gtk_tree_path_free);
- }else
+ etfilelist = et_application_window_browser_get_selected_files (ET_APPLICATION_WINDOW (MainWindow));
+ }
+ else
{
etfilelist = ETCore->ETFileList;
}
diff --git a/src/scan_dialog.c b/src/scan_dialog.c
index e4b096b..b0a8486 100644
--- a/src/scan_dialog.c
+++ b/src/scan_dialog.c
@@ -2693,15 +2693,13 @@ entry_check_rename_file_mask (GtkEntry *entry, gpointer user_data)
void
et_scan_dialog_scan_selected_files (EtScanDialog *self)
{
- gint progress_bar_index;
- gint selectcount;
+ EtApplicationWindow *window;
+ guint progress_bar_index = 0;
+ guint selectcount;
gchar progress_bar_text[30];
double fraction;
GList *selfilelist = NULL;
GList *l;
- ET_File *etfile;
- EtApplicationWindow *window;
- GtkTreeSelection *selection;
g_return_if_fail (ETCore->ETFileDisplayedList != NULL);
@@ -2709,24 +2707,19 @@ et_scan_dialog_scan_selected_files (EtScanDialog *self)
et_application_window_update_et_file_from_ui (window);
/* Initialize status bar */
- selection = et_application_window_browser_get_selection (window);
- selectcount = gtk_tree_selection_count_selected_rows (selection);
et_application_window_progress_set_fraction (window, 0.0);
- progress_bar_index = 0;
- g_snprintf(progress_bar_text, 30, "%d/%d", progress_bar_index, selectcount);
+ selfilelist = et_application_window_browser_get_selected_files (window);
+ selectcount = g_list_length (selfilelist);
+ g_snprintf (progress_bar_text, 30, "%u/%u", progress_bar_index,
+ selectcount);
et_application_window_progress_set_text (window, progress_bar_text);
/* Set to unsensitive all command buttons (except Quit button) */
et_application_window_disable_command_actions (window);
- progress_bar_index = 0;
-
- selfilelist = gtk_tree_selection_get_selected_rows(selection, NULL);
-
for (l = selfilelist; l != NULL; l = g_list_next (l))
{
- etfile = et_application_window_browser_get_et_file_from_path (window,
- l->data);
+ ET_File *etfile = l->data;
/* Run the current scanner. */
Scan_Select_Mode_And_Run_Scanner (self, etfile);
@@ -2741,7 +2734,7 @@ et_scan_dialog_scan_selected_files (EtScanDialog *self)
gtk_main_iteration();
}
- g_list_free_full (selfilelist, (GDestroyNotify)gtk_tree_path_free);
+ g_list_free (selfilelist);
/* Refresh the whole list (faster than file by file) to show changes. */
et_application_window_browser_refresh_list (window);
diff --git a/src/tag_area.c b/src/tag_area.c
index 7e2a9e3..2dfd662 100644
--- a/src/tag_area.c
+++ b/src/tag_area.c
@@ -133,15 +133,13 @@ on_apply_to_selection (GObject *object,
{
EtTagAreaPrivate *priv;
EtApplicationWindow *window;
- GList *etfilelist = NULL;
- GList *selection_filelist = NULL;
+ GList *etfilelist;
GList *l;
const gchar *string_to_set;
const gchar *string_to_set1;
gchar *msg = NULL;
ET_File *etfile;
File_Tag *FileTag;
- GtkTreeSelection *selection;
g_return_if_fail (ETCore->ETFileDisplayedList != NULL);
@@ -151,21 +149,7 @@ on_apply_to_selection (GObject *object,
et_application_window_update_et_file_from_ui (window);
- /* Warning : 'selection_filelist' is not a list of 'ETFile' items! */
- selection = et_application_window_browser_get_selection (window);
- selection_filelist = gtk_tree_selection_get_selected_rows (selection, NULL);
-
- // Create an 'ETFile' list from 'selection_filelist'
- for (l = selection_filelist; l != NULL; l = g_list_next (l))
- {
- etfile = et_application_window_browser_get_et_file_from_path (window,
- l->data);
- etfilelist = g_list_prepend (etfilelist, etfile);
- }
-
- etfilelist = g_list_reverse (etfilelist);
- g_list_free_full (selection_filelist, (GDestroyNotify)gtk_tree_path_free);
-
+ etfilelist = et_application_window_browser_get_selected_files (window);
if (object == G_OBJECT (priv->title_entry))
{
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]