[gthumb] rename_series: fixed crash when closing the dialog while loading the files metadata



commit 560235c431e2be62ee6b07e43559d5166957ef80
Author: Paolo Bacchilega <paobac src gnome org>
Date:   Mon Apr 4 16:18:34 2011 +0200

    rename_series: fixed crash when closing the dialog while loading the files metadata

 extensions/rename_series/data/ui/rename-series.ui |    8 +-
 extensions/rename_series/dlg-rename-series.c      |   63 +++++++++++++--------
 2 files changed, 43 insertions(+), 28 deletions(-)
---
diff --git a/extensions/rename_series/data/ui/rename-series.ui b/extensions/rename_series/data/ui/rename-series.ui
index 61100c1..5685a19 100644
--- a/extensions/rename_series/data/ui/rename-series.ui
+++ b/extensions/rename_series/data/ui/rename-series.ui
@@ -593,9 +593,9 @@
       </object>
     </child>
     <action-widgets>
-      <action-widget response="0">cancel_button</action-widget>
-      <action-widget response="0">ok_button</action-widget>
-      <action-widget response="0">help_button</action-widget>
+      <action-widget response="-6">cancel_button</action-widget>
+      <action-widget response="-5">ok_button</action-widget>
+      <action-widget response="-11">help_button</action-widget>
     </action-widgets>
   </object>
   <object class="GtkImage" id="image1">
@@ -605,8 +605,8 @@
   <object class="GtkSizeGroup" id="sizegroup1">
     <property name="mode">vertical</property>
     <widgets>
-      <widget name="template_label_box"/>
       <widget name="template_entry"/>
+      <widget name="template_label_box"/>
     </widgets>
   </object>
   <object class="GtkAdjustment" id="start_at_adjustment">
diff --git a/extensions/rename_series/dlg-rename-series.c b/extensions/rename_series/dlg-rename-series.c
index fcfc22d..6c50fdb 100644
--- a/extensions/rename_series/dlg-rename-series.c
+++ b/extensions/rename_series/dlg-rename-series.c
@@ -96,9 +96,11 @@ typedef struct {
 
 
 static void
-destroy_cb (GtkWidget  *widget,
-	    DialogData *data)
+destroy_dialog (DialogData *data)
 {
+	if (data->dialog != NULL)
+		gtk_widget_destroy (data->dialog);
+	data->dialog = NULL;
 	gth_browser_set_dialog (data->browser, "rename_series", NULL);
 
 	if (data->update_id != 0) {
@@ -124,8 +126,7 @@ destroy_cb (GtkWidget  *widget,
 
 
 static void
-ok_clicked_cb (GtkWidget  *widget,
-	       DialogData *data)
+ok_button_clicked (DialogData *data)
 {
 	GtkTreeIter   iter;
 	GList        *old_files;
@@ -183,15 +184,37 @@ ok_clicked_cb (GtkWidget  *widget,
 	gth_browser_exec_task (data->browser, task, FALSE);
 
 	g_object_unref (task);
-	gtk_widget_destroy (data->dialog);
+	destroy_dialog (data);
 }
 
 
 static void
-help_clicked_cb (GtkWidget  *widget,
-                 DialogData *data)
+dialog_response_cb (GtkDialog *dialog,
+		    int        response_id,
+		    gpointer   user_data)
 {
-        show_help_dialog (GTK_WINDOW (data->dialog), "gthumb-rename-series");
+	DialogData *data = user_data;
+
+	switch (response_id) {
+	case GTK_RESPONSE_DELETE_EVENT:
+	case GTK_RESPONSE_CANCEL:
+		if ((data->task != NULL) && gth_task_is_running (data->task))
+			gth_task_cancel (data->task);
+		else
+			destroy_dialog (data);
+		break;
+
+	case GTK_RESPONSE_HELP:
+		show_help_dialog (GTK_WINDOW (dialog), "gthumb-rename-series");
+		break;
+
+	case GTK_RESPONSE_OK:
+		ok_button_clicked (data);
+		break;
+
+	default:
+		break;
+	}
 }
 
 
@@ -428,7 +451,7 @@ load_file_data_task_completed_cb (GthTask  *task,
 		g_object_unref (data->task);
 		data->task = NULL;
 		data->task_completed_id = 0;
-		gtk_widget_destroy (data->dialog);
+		destroy_dialog (data);
 		return;
 	}
 
@@ -814,22 +837,14 @@ dlg_rename_series (GthBrowser *browser,
 
 	/* Set the signals handlers. */
 
-	g_signal_connect (G_OBJECT (data->dialog),
-			  "destroy",
-			  G_CALLBACK (destroy_cb),
-			  data);
-	g_signal_connect (GET_WIDGET ("ok_button"),
-			  "clicked",
-			  G_CALLBACK (ok_clicked_cb),
+	g_signal_connect (data->dialog,
+			  "delete-event",
+			  G_CALLBACK (gtk_true),
+			  NULL);
+	g_signal_connect (data->dialog,
+			  "response",
+			  G_CALLBACK (dialog_response_cb),
 			  data);
-        g_signal_connect (GET_WIDGET ("help_button"),
-                          "clicked",
-                          G_CALLBACK (help_clicked_cb),
-                          data);
-	g_signal_connect_swapped (GET_WIDGET ("cancel_button"),
-				  "clicked",
-				  G_CALLBACK (gtk_widget_destroy),
-				  G_OBJECT (data->dialog));
 	g_signal_connect (GET_WIDGET ("template_entry"),
   			  "icon-press",
   			  G_CALLBACK (template_entry_icon_press_cb),



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]