[gthumb] call pause/resume one time for each parent
- From: Paolo Bacchilega <paobac src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gthumb] call pause/resume one time for each parent
- Date: Thu, 21 Jul 2011 08:05:15 +0000 (UTC)
commit 5f8213c0197879c8825fd4aea723a20bc2c322d1
Author: Paolo Bacchilega <paobac src gnome org>
Date: Thu Jul 21 09:35:42 2011 +0200
call pause/resume one time for each parent
extensions/edit_metadata/dlg-edit-metadata.c | 33 +++++++++++++++----------
1 files changed, 20 insertions(+), 13 deletions(-)
---
diff --git a/extensions/edit_metadata/dlg-edit-metadata.c b/extensions/edit_metadata/dlg-edit-metadata.c
index d0953f5..8f2224c 100644
--- a/extensions/edit_metadata/dlg-edit-metadata.c
+++ b/extensions/edit_metadata/dlg-edit-metadata.c
@@ -31,6 +31,7 @@ typedef struct {
GtkWidget *dialog;
GList *files; /* GFile list */
GList *file_list; /* GthFileData list */
+ GList *parents;
} DialogData;
@@ -40,6 +41,7 @@ destroy_cb (GtkWidget *widget,
{
_g_object_list_unref (data->file_list);
_g_object_list_unref (data->files);
+ _g_object_list_unref (data->parents);
g_free (data);
}
@@ -54,16 +56,8 @@ save_file_data_task_completed_cb (GthTask *task,
GList *scan;
monitor = gth_main_get_default_monitor ();
- for (scan = data->file_list; scan; scan = scan->next) {
- GthFileData *file_data = scan->data;
- GFile *parent;
-
- parent = g_file_get_parent (file_data->file);
- if (G_LIKELY (parent != NULL)) {
- gth_monitor_resume (monitor, parent);
- g_object_unref (parent);
- }
- }
+ for (scan = data->parents; scan; scan = scan->next)
+ gth_monitor_resume (monitor, (GFile *) scan->data);
if (error != NULL) {
_gtk_error_dialog_from_gerror_show (GTK_WINDOW (data->dialog), _("Could not save the file metadata"), error);
@@ -80,7 +74,7 @@ save_file_data_task_completed_cb (GthTask *task,
continue;
files = g_list_prepend (NULL, g_object_ref (file_data->file));
- gth_monitor_folder_changed (monitor, parent, files, GTH_MONITOR_EVENT_CHANGED);
+ /*gth_monitor_folder_changed (monitor, parent, files, GTH_MONITOR_EVENT_CHANGED);*/
gth_monitor_metadata_changed (monitor, file_data);
_g_object_list_unref (files);
@@ -98,6 +92,7 @@ edit_metadata_dialog__response_cb (GtkDialog *dialog,
{
DialogData *data = user_data;
GthMonitor *monitor;
+ GHashTable *parents;
GList *scan;
GthTask *task;
@@ -106,17 +101,29 @@ edit_metadata_dialog__response_cb (GtkDialog *dialog,
return;
}
- monitor = gth_main_get_default_monitor ();
+ /* get the parents list */
+
+ parents = g_hash_table_new_full (g_file_hash, (GEqualFunc) g_file_equal, g_object_unref, NULL);
for (scan = data->file_list; scan; scan = scan->next) {
GthFileData *file_data = scan->data;
GFile *parent;
parent = g_file_get_parent (file_data->file);
if (G_LIKELY (parent != NULL)) {
- gth_monitor_pause (monitor, parent);
+ if (g_hash_table_lookup (parents, parent) == NULL)
+ g_hash_table_insert (parents, g_object_ref (parent), GINT_TO_POINTER (1));
g_object_unref (parent);
}
}
+ data->parents = g_hash_table_get_keys (parents);
+ g_list_foreach (data->parents, (GFunc) g_object_ref, NULL);
+ g_hash_table_unref (parents);
+
+ /* ignore changes to all the parents */
+
+ monitor = gth_main_get_default_monitor ();
+ for (scan = data->parents; scan; scan = scan->next)
+ gth_monitor_pause (monitor, (GFile *) scan->data);
gth_edit_metadata_dialog_update_info (GTH_EDIT_METADATA_DIALOG (data->dialog), data->file_list);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]