From 31d15343ae07dd145ed175c207b51a7624b063dd Mon Sep 17 00:00:00 2001 From: Kristian Rietveld Date: Tue, 14 Mar 2006 16:26:45 +0000 Subject: [PATCH] add load_folder_id field, (load_folder): add thread enter/leave construct, 2006-03-14 Kristian Rietveld * gtk/gtkfilesystemunix.c (struct _GtkFileFolderUnix): add load_folder_id field, (load_folder): add thread enter/leave construct, set load_folder_id to zero since we have the idle removed when we return, (gtk_file_system_unix_get_folder): initialize load_folder_id to 0 and store the source id of the load_folder idle, (gtk_file_folder_unix_finalize): remove the load_folder idle if necessary. (Federico Mena Quintero). --- ChangeLog | 11 +++++++++++ ChangeLog.pre-2-10 | 11 +++++++++++ gtk/gtkfilesystemunix.c | 17 ++++++++++++++++- 3 files changed, 38 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 2b3b5f92ef..00c293a85c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2006-03-14 Kristian Rietveld + + * gtk/gtkfilesystemunix.c (struct _GtkFileFolderUnix): add + load_folder_id field, + (load_folder): add thread enter/leave construct, set load_folder_id + to zero since we have the idle removed when we return, + (gtk_file_system_unix_get_folder): initialize load_folder_id to 0 + and store the source id of the load_folder idle, + (gtk_file_folder_unix_finalize): remove the load_folder idle + if necessary. (Federico Mena Quintero). + 2006-03-14 Kristian Rietveld * gtk/gtkfilechooser.c (gtk_file_chooser_get_current_folder): return diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 2b3b5f92ef..00c293a85c 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,14 @@ +2006-03-14 Kristian Rietveld + + * gtk/gtkfilesystemunix.c (struct _GtkFileFolderUnix): add + load_folder_id field, + (load_folder): add thread enter/leave construct, set load_folder_id + to zero since we have the idle removed when we return, + (gtk_file_system_unix_get_folder): initialize load_folder_id to 0 + and store the source id of the load_folder idle, + (gtk_file_folder_unix_finalize): remove the load_folder idle + if necessary. (Federico Mena Quintero). + 2006-03-14 Kristian Rietveld * gtk/gtkfilechooser.c (gtk_file_chooser_get_current_folder): return diff --git a/gtk/gtkfilesystemunix.c b/gtk/gtkfilesystemunix.c index d29b1ee982..9cc51a564c 100644 --- a/gtk/gtkfilesystemunix.c +++ b/gtk/gtkfilesystemunix.c @@ -111,6 +111,7 @@ struct _GtkFileFolderUnix GtkFileInfoType types; gchar *filename; GHashTable *stat_info; + guint load_folder_id; guint have_stat : 1; guint have_mime_type : 1; guint is_network_dir : 1; @@ -782,6 +783,8 @@ load_folder (gpointer data) GtkFileFolderUnix *folder_unix = data; GSList *children; + GDK_THREADS_ENTER (); + if ((folder_unix->types & STAT_NEEDED_MASK) != 0) fill_in_stats (folder_unix); @@ -795,8 +798,12 @@ load_folder (gpointer data) gtk_file_paths_free (children); } + folder_unix->load_folder_id = 0; + g_signal_emit_by_name (folder_unix, "finished-loading", 0); + GDK_THREADS_LEAVE (); + return FALSE; } @@ -900,6 +907,7 @@ gtk_file_system_unix_get_folder (GtkFileSystem *file_system, folder_unix->filename = filename_copy; folder_unix->types = types; folder_unix->stat_info = NULL; + folder_unix->load_folder_id = 0; folder_unix->have_mime_type = FALSE; folder_unix->have_stat = FALSE; folder_unix->have_hidden = FALSE; @@ -928,7 +936,8 @@ gtk_file_system_unix_get_folder (GtkFileSystem *file_system, queue_get_folder_callback (callback, handle, GTK_FILE_FOLDER (folder_unix), NULL, data); /* Start loading the folder contents in an idle */ - g_idle_add ((GSourceFunc) load_folder, folder_unix); + folder_unix->load_folder_id = + g_idle_add ((GSourceFunc) load_folder, folder_unix); return handle; } @@ -2219,6 +2228,12 @@ gtk_file_folder_unix_finalize (GObject *object) { GtkFileFolderUnix *folder_unix = GTK_FILE_FOLDER_UNIX (object); + if (folder_unix->load_folder_id) + { + g_source_remove (folder_unix->load_folder_id); + folder_unix->load_folder_id = 0; + } + g_hash_table_remove (folder_unix->system_unix->folder_hash, folder_unix->filename); if (folder_unix->stat_info)