add load_folder_id field, (load_folder): add thread enter/leave construct,

2006-03-14  Kristian Rietveld  <kris@imendio.com>

	* 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).
This commit is contained in:
Kristian Rietveld
2006-03-14 16:26:45 +00:00
committed by Kristian Rietveld
parent 9c9ab7d977
commit 31d15343ae
3 changed files with 38 additions and 1 deletions

View File

@@ -1,3 +1,14 @@
2006-03-14 Kristian Rietveld <kris@imendio.com>
* 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 <kris@imendio.com>
* gtk/gtkfilechooser.c (gtk_file_chooser_get_current_folder): return

View File

@@ -1,3 +1,14 @@
2006-03-14 Kristian Rietveld <kris@imendio.com>
* 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 <kris@imendio.com>
* gtk/gtkfilechooser.c (gtk_file_chooser_get_current_folder): return

View File

@@ -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)