libgnomeui r5525 - in trunk: . file-chooser



Author: carlosg
Date: Tue Feb 12 19:36:24 2008
New Revision: 5525
URL: http://svn.gnome.org/viewvc/libgnomeui?rev=5525&view=rev

Log:
2008-02-11  Carlos Garnacho  <carlos imendio com>

        * file-chooser/gtkfilesystemgio.c: Just pass the cancellable to the
        GtkFileFolderGio object, this way it doesn't have to deal with already
        freed data if the GtkFileSystemGio has been already disposed and there
        were async callbacks pending. Bug #514743.



Modified:
   trunk/ChangeLog
   trunk/file-chooser/gtkfilesystemgio.c

Modified: trunk/file-chooser/gtkfilesystemgio.c
==============================================================================
--- trunk/file-chooser/gtkfilesystemgio.c	(original)
+++ trunk/file-chooser/gtkfilesystemgio.c	Tue Feb 12 19:36:24 2008
@@ -99,7 +99,7 @@
 {
   GObject parent_instance;
 
-  GtkFileSystemGio *file_system;
+  GCancellable *cancellable;
   GFile *parent_file;
   GHashTable *children;
   GFileMonitor *directory_monitor;
@@ -609,7 +609,6 @@
 			   GAsyncResult *result,
 			   gpointer      user_data)
 {
-  GtkFileSystemGio *file_system;
   GFileEnumerator *enumerator;
   GtkFileFolderGio *folder;
   GError *error = NULL;
@@ -617,7 +616,6 @@
   GList *files, *f;
 
   folder = GTK_FILE_FOLDER_GIO (user_data);
-  file_system = folder->file_system;
   enumerator = G_FILE_ENUMERATOR (source_object);
   files = g_file_enumerator_next_files_finish (enumerator, result, &error);
 
@@ -649,7 +647,7 @@
 
   g_file_enumerator_next_files_async (enumerator, FILES_PER_QUERY,
 				      G_PRIORITY_DEFAULT,
-				      file_system->cancellable,
+				      folder->cancellable,
 				      enumerator_files_callback,
 				      folder);
 
@@ -706,7 +704,7 @@
   if (enumerator)
     {
       folder = g_object_new (GTK_TYPE_FILE_FOLDER_GIO, NULL);
-      folder->file_system = file_system;
+      folder->cancellable = g_object_ref (file_system->cancellable);
       folder->parent_file = g_object_ref (file);
       folder->children = g_hash_table_new_full (g_str_hash, g_str_equal,
 						(GDestroyNotify) g_free,
@@ -723,7 +721,7 @@
 
       g_file_enumerator_next_files_async (enumerator, FILES_PER_QUERY,
 					  G_PRIORITY_DEFAULT,
-					  file_system->cancellable,
+					  folder->cancellable,
 					  enumerator_files_callback,
 					  g_object_ref (folder));
       g_object_unref (enumerator);
@@ -1716,6 +1714,9 @@
   if (folder->directory_monitor)
     g_object_unref (folder->directory_monitor);
 
+  if (folder->cancellable)
+    g_object_unref (folder->cancellable);
+
   g_hash_table_unref (folder->children);
   G_OBJECT_CLASS (gtk_file_folder_gio_parent_class)->finalize (object);
 }



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