Blob Blame History Raw
From 10f0f825bc5e0ec67a7b568faa9d444b8f26629d Mon Sep 17 00:00:00 2001
From: Nils Philippsen <nils@redhat.com>
Date: Tue, 14 Jul 2015 17:46:27 +0200
Subject: [PATCH] patch: export-dialog-destroyed-crash

Squashed commit of the following:

commit 269b9574ea983c173c89110fbc8d9e73de513c80
Author: Michael Natterer <mitch@gimp.org>
Date:   Tue Jul 14 13:22:06 2015 +0200

    Bug 739003 - Crashes in file_save_dialog_response()

    Ref/unref the dialog around saving the image insatead of connecting to
    "destroy" and NULLifying the local dialog variable on destruction,
    which has caused weird crashes on fedora.

    (cherry picked from commit a0e48ad29e93e2dc259879abeb2dedc9a420b8f6)
---
 app/dialogs/file-save-dialog.c | 12 +++---------
 1 file changed, 3 insertions(+), 9 deletions(-)

diff --git a/app/dialogs/file-save-dialog.c b/app/dialogs/file-save-dialog.c
index 8b0873f..b5f3093 100644
--- a/app/dialogs/file-save-dialog.c
+++ b/app/dialogs/file-save-dialog.c
@@ -160,7 +160,6 @@ file_save_dialog_response (GtkWidget *save_dialog,
   gchar               *uri;
   gchar               *basename;
   GimpPlugInProcedure *save_proc;
-  gulong               handler_id;
 
   if (! dialog->export)
     {
@@ -183,9 +182,7 @@ file_save_dialog_response (GtkWidget *save_dialog,
       return;
     }
 
-  handler_id = g_signal_connect (dialog, "destroy",
-                                 G_CALLBACK (gtk_widget_destroyed),
-                                 &dialog);
+  g_object_ref (dialog);
 
   switch (file_save_dialog_check_uri (save_dialog, gimp,
                                       &uri, &basename, &save_proc))
@@ -245,9 +242,7 @@ file_save_dialog_response (GtkWidget *save_dialog,
       g_free (uri);
       g_free (basename);
 
-      if (dialog)
-        gimp_file_dialog_set_sensitive (dialog, TRUE);
-
+      gimp_file_dialog_set_sensitive (dialog, TRUE);
       break;
 
     case CHECK_URI_SWITCH_DIALOGS:
@@ -259,8 +254,7 @@ file_save_dialog_response (GtkWidget *save_dialog,
       break;
     }
 
-  if (dialog)
-    g_signal_handler_disconnect (dialog, handler_id);
+  g_object_unref (dialog);
 }
 
 /* IMPORTANT: When changing this function, keep
-- 
2.4.3