[gthumb] rename_series: do not keep loading if an attribute is not recognized
- From: Paolo Bacchilega <paobac src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gthumb] rename_series: do not keep loading if an attribute is not recognized
- Date: Mon, 4 Apr 2011 16:21:06 +0000 (UTC)
commit 28c4861978117cd7984cc384b7a0be460e4c6268
Author: Paolo Bacchilega <paobac src gnome org>
Date: Sun Apr 3 20:47:38 2011 +0200
rename_series: do not keep loading if an attribute is not recognized
extensions/rename_series/dlg-rename-series.c | 52 ++++++++++++++++++--------
1 files changed, 36 insertions(+), 16 deletions(-)
---
diff --git a/extensions/rename_series/dlg-rename-series.c b/extensions/rename_series/dlg-rename-series.c
index 0e1c474..0c253d8 100644
--- a/extensions/rename_series/dlg-rename-series.c
+++ b/extensions/rename_series/dlg-rename-series.c
@@ -89,6 +89,9 @@ typedef struct {
gboolean help_visible;
char *required_attributes;
guint update_id;
+ GthTask *task;
+ gulong task_completed_id;
+ gboolean template_changed;
} DialogData;
@@ -102,6 +105,12 @@ destroy_cb (GtkWidget *widget,
g_source_remove (data->update_id);
data->update_id = 0;
}
+ if (data->task_completed_id != 0)
+ g_signal_handler_disconnect (data->task, data->task_completed_id);
+ if (data->task != NULL) {
+ gth_task_cancel (data->task);
+ _g_object_unref (data->task);
+ }
g_free (data->required_attributes);
g_object_unref (data->builder);
_g_object_list_unref (data->file_data_list);
@@ -411,6 +420,9 @@ load_file_data_task_completed_cb (GthTask *task,
if (error != NULL) {
_gtk_error_dialog_from_gerror_show (GTK_WINDOW (data->browser), _("Cannot read file information"), &error);
+ _g_object_unref (data->task);
+ data->task = NULL;
+ data->task_completed_id = 0;
gtk_widget_destroy (data->dialog);
return;
}
@@ -418,12 +430,15 @@ load_file_data_task_completed_cb (GthTask *task,
_g_object_list_unref (data->file_data_list);
data->file_data_list = _g_object_list_ref (gth_load_file_data_task_get_result (GTH_LOAD_FILE_DATA_TASK (task)));
+ g_object_unref (data->task);
+ data->task = NULL;
+ data->task_completed_id = 0;
+ data->template_changed = FALSE;
+
gtk_widget_set_sensitive (data->dialog, TRUE);
gtk_window_present (GTK_WINDOW (data->dialog));
gtk_widget_grab_focus (GET_WIDGET ("template_entry"));
dlg_rename_series_update_preview (data);
-
- g_object_unref (task);
}
@@ -440,24 +455,27 @@ dlg_rename_series_update_preview (DialogData *data)
GError *error = NULL;
GList *scan1, *scan2;
- required_attributes = get_required_attributes (data);
- reload_required = attribute_list_reload_required (data->required_attributes, required_attributes);
- g_free (data->required_attributes);
- data->required_attributes = required_attributes;
+ if (data->task != NULL)
+ return;
- if (reload_required) {
- GthTask *task;
+ if (data->template_changed) {
+ required_attributes = get_required_attributes (data);
+ reload_required = attribute_list_reload_required (data->required_attributes, required_attributes);
+ g_free (data->required_attributes);
+ data->required_attributes = required_attributes;
- gtk_widget_set_sensitive (data->dialog, FALSE);
+ if (reload_required) {
+ gtk_widget_set_sensitive (data->dialog, FALSE);
- task = gth_load_file_data_task_new (data->file_list, data->required_attributes);
- g_signal_connect (task,
- "completed",
- G_CALLBACK (load_file_data_task_completed_cb),
- data);
- gth_browser_exec_task (data->browser, task, FALSE);
+ data->task = gth_load_file_data_task_new (data->file_list, data->required_attributes);
+ data->task_completed_id = g_signal_connect (data->task,
+ "completed",
+ G_CALLBACK (load_file_data_task_completed_cb),
+ data);
+ gth_browser_exec_task (data->browser, data->task, FALSE);
- return;
+ return;
+ }
}
if ((data->first_update) && (data->file_data_list->next == NULL)) {
@@ -589,6 +607,7 @@ static void
update_preview_cb (GtkWidget *widget,
DialogData *data)
{
+ data->template_changed = TRUE;
if (data->update_id != 0)
g_source_remove (data->update_id);
data->update_id = g_timeout_add (UPDATE_DELAY, update_preview_after_delay_cb, data);
@@ -665,6 +684,7 @@ dlg_rename_series (GthBrowser *browser,
data->builder = _gtk_builder_new_from_file ("rename-series.ui", "rename_series");
data->file_list = _g_file_list_dup (file_list);
data->first_update = TRUE;
+ data->template_changed = TRUE;
/* Get the widgets. */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]