[goffice] Fixed crashes in go-image-selector.c



commit 13066ed16abea8921c2e90487614a0de5a490357
Author: Jean Brefort <jean brefort normalesup org>
Date:   Sat Oct 22 10:43:49 2011 +0200

    Fixed crashes in go-image-selector.c

 ChangeLog                  |    6 ++++++
 NEWS                       |    2 +-
 goffice/gtk/go-image-sel.c |   16 +++++++++++++---
 3 files changed, 20 insertions(+), 4 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index c7391f6..f8ece52 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2011-10-22  Jean Brefort  <jean brefort normalesup org>
+
+	* goffice/gtk/go-image-sel.c (cb_entry_focus_out),
+	(cb_file_image_select), (delete_event_cb),
+	(cancel_button_clicked_cb): more fixes, see #660917.
+
 2011-10-21  Morten Welinder  <terra gnome org>
 
 	* goffice/app/go-conf-gsettings.c (go_conf_get_node): Add
diff --git a/NEWS b/NEWS
index 602c18f..7da84a1 100644
--- a/NEWS
+++ b/NEWS
@@ -30,7 +30,7 @@ Jean:
 	* Make sheet widgets scalable. [#605434]
 	* Update series labels when needed. [658527]
 	* Fix background images issues in graphs. [#660917]
-	* Make GSettings trhe default configuration backend.
+	* Make GSettings the default configuration backend.
 
 Morten:
 	* Recognize scientific formats with longer exponents.
diff --git a/goffice/gtk/go-image-sel.c b/goffice/gtk/go-image-sel.c
index 7dd6fbc..bc1242e 100644
--- a/goffice/gtk/go-image-sel.c
+++ b/goffice/gtk/go-image-sel.c
@@ -46,7 +46,7 @@ struct _GOImageSelState {
 };
 
 static void
-cb_entry_destroyed (GtkEntry *entry, G_GNUC_UNUSED GdkEvent *event, GOImageSelState *state)
+cb_entry_focus_out (GtkEntry *entry, G_GNUC_UNUSED GdkEvent *event, GOImageSelState *state)
 {
 	char const *new_name = gtk_entry_get_text (entry);
 	if (new_name && *new_name && !go_doc_get_image (state->doc, new_name)) {
@@ -76,7 +76,7 @@ cb_file_image_select (GtkWidget *cc, GOImageSelState *state)
 		g_free (new_name);
 	}
 	gtk_entry_set_text (GTK_ENTRY (w), new_name);
-	g_signal_connect (G_OBJECT (w), "focus-out-event", G_CALLBACK (cb_entry_destroyed), state);
+	g_signal_connect (G_OBJECT (w), "focus-out-event", G_CALLBACK (cb_entry_focus_out), state);
 	state->name = new_name;
 	gtk_container_add (GTK_CONTAINER (box), w);
 	gtk_widget_show_all (box);
@@ -108,8 +108,16 @@ cb_file_image_select (GtkWidget *cc, GOImageSelState *state)
 				path = gtk_tree_model_get_path (GTK_TREE_MODEL (state->model), &iter);
 				gtk_icon_view_select_path (state->icon_view, path);
 				gtk_tree_path_free (path);
+			} else {
+				g_object_unref (image);
+				image = g_object_ref (real_image);
 			}
-			g_object_unref (image);
+			*(state->result) = image;
+			gtk_dialog_response (GTK_DIALOG (state->dialog), GTK_RESPONSE_OK);
+			gtk_widget_destroy (state->dialog);
+			g_free (state->name);
+			g_free (state->uri);
+			g_free (state);
 		}
 	}
 }
@@ -135,6 +143,7 @@ sort_func (GtkTreeModel *model,
 static gboolean
 delete_event_cb (GtkWidget *cc, GdkEvent *event, GOImageSelState *state)
 {
+	gtk_widget_destroy (state->dialog);
 	g_free (state->name);
 	g_free (state->uri);
 	g_free (state);
@@ -172,6 +181,7 @@ static void
 cancel_button_clicked_cb (GtkWidget *cc, GOImageSelState *state)
 {
 	gtk_widget_destroy (state->dialog);
+	g_free (state->name);
 	g_free (state->uri);
 	g_free (state);
 }



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