More review work.

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

	More review work.

	* gtk/gtkfilechooserprivate.h: remove idle_finished_loading_source
	from GtkFileSystemModel.

	* gtk/gtkfilesystemmodel.c (gtk_file_system_model_finalize): remove
	idle_finished_loading_source,
	(idle_finished_loading_cb), (queue_finished_loading): removed,
	(got_root_folder_cb): save a list walk, immediately emit
	finished-loading and don't queue it, since we are already in an
	idle here, always list_children() so the children the folder already
	has are returned,
	(_gtk_file_system_model_new): handle the case where NULL is
	returned by _get_folder(),
	(_gtk_file_system_model_path_do): remove comment, and append the
	new handle to the list, don't try to remove,
	(get_children_get_folder_cb): save a list walk, remove the dummy
	child if the _get_folder() call fails or is cancelled.
This commit is contained in:
Kristian Rietveld
2006-03-16 18:31:20 +00:00
committed by Kristian Rietveld
parent e0792b0e3a
commit 31d0084f7e
4 changed files with 82 additions and 45 deletions

View File

@@ -1,3 +1,24 @@
2006-03-16 Kristian Rietveld <kris@imendio.com>
More review work.
* gtk/gtkfilechooserprivate.h: remove idle_finished_loading_source
from GtkFileSystemModel.
* gtk/gtkfilesystemmodel.c (gtk_file_system_model_finalize): remove
idle_finished_loading_source,
(idle_finished_loading_cb), (queue_finished_loading): removed,
(got_root_folder_cb): save a list walk, immediately emit
finished-loading and don't queue it, since we are already in an
idle here, always list_children() so the children the folder already
has are returned,
(_gtk_file_system_model_new): handle the case where NULL is
returned by _get_folder(),
(_gtk_file_system_model_path_do): remove comment, and append the
new handle to the list, don't try to remove,
(get_children_get_folder_cb): save a list walk, remove the dummy
child if the _get_folder() call fails or is cancelled.
2006-03-14 Kristian Rietveld <kris@imendio.com>
More suggestions from Federico.

View File

@@ -1,3 +1,24 @@
2006-03-16 Kristian Rietveld <kris@imendio.com>
More review work.
* gtk/gtkfilechooserprivate.h: remove idle_finished_loading_source
from GtkFileSystemModel.
* gtk/gtkfilesystemmodel.c (gtk_file_system_model_finalize): remove
idle_finished_loading_source,
(idle_finished_loading_cb), (queue_finished_loading): removed,
(got_root_folder_cb): save a list walk, immediately emit
finished-loading and don't queue it, since we are already in an
idle here, always list_children() so the children the folder already
has are returned,
(_gtk_file_system_model_new): handle the case where NULL is
returned by _get_folder(),
(_gtk_file_system_model_path_do): remove comment, and append the
new handle to the list, don't try to remove,
(get_children_get_folder_cb): save a list walk, remove the dummy
child if the _get_folder() call fails or is cancelled.
2006-03-14 Kristian Rietveld <kris@imendio.com>
More suggestions from Federico.

View File

@@ -279,7 +279,6 @@ struct _GtkFileSystemModel
GSList *idle_clears;
GSource *idle_clear_source;
GSource *idle_finished_loading_source;
gushort max_depth;

View File

@@ -260,9 +260,6 @@ gtk_file_system_model_finalize (GObject *object)
if (model->file_system)
g_object_unref (model->file_system);
if (model->idle_finished_loading_source)
g_source_destroy (model->idle_finished_loading_source);
children = model->roots;
while (children)
{
@@ -651,35 +648,6 @@ root_folder_finished_loading_cb (GtkFileFolder *folder,
g_signal_emit (model, file_system_model_signals[FINISHED_LOADING], 0);
}
/* Emits the "finished-loading" signal as an idle handler; see the comment in
* _gtk_file_system_model_new()
*/
static gboolean
idle_finished_loading_cb (GtkFileSystemModel *model)
{
GDK_THREADS_ENTER ();
g_signal_emit (model, file_system_model_signals[FINISHED_LOADING], 0);
g_source_destroy (model->idle_finished_loading_source);
model->idle_finished_loading_source = NULL;
GDK_THREADS_LEAVE ();
return FALSE;
}
/* Queues an idle handler to emit the "finished-loading" signal */
static void
queue_finished_loading (GtkFileSystemModel *model)
{
model->idle_finished_loading_source = g_idle_source_new ();
g_source_set_closure (model->idle_finished_loading_source,
g_cclosure_new_object (G_CALLBACK (idle_finished_loading_cb),
G_OBJECT (model)));
g_source_attach (model->idle_finished_loading_source, NULL);
}
static void
got_root_folder_cb (GtkFileSystemHandle *handle,
GtkFileFolder *folder,
@@ -691,13 +659,15 @@ got_root_folder_cb (GtkFileSystemHandle *handle,
gboolean cancelled = handle->cancelled;
GtkFileSystemModel *model = data;
if (!g_slist_find (model->pending_handles, handle))
tmp_list = g_slist_find (model->pending_handles, handle);
if (!tmp_list)
{
g_object_unref (model);
return;
}
model->pending_handles = g_slist_remove (model->pending_handles, handle);
model->pending_handles = g_slist_remove_link (model->pending_handles,
tmp_list);
g_object_unref (handle);
if (cancelled || !folder)
@@ -709,14 +679,13 @@ got_root_folder_cb (GtkFileSystemHandle *handle,
model->root_folder = folder;
if (gtk_file_folder_is_finished_loading (model->root_folder))
{
queue_finished_loading (model); /* done in an idle because we are being created */
gtk_file_folder_list_children (model->root_folder, &roots, NULL);
}
g_signal_emit (model, file_system_model_signals[FINISHED_LOADING], 0);
else
g_signal_connect_object (model->root_folder, "finished-loading",
G_CALLBACK (root_folder_finished_loading_cb), model, 0);
gtk_file_folder_list_children (model->root_folder, &roots, NULL);
g_signal_connect_object (model->root_folder, "deleted",
G_CALLBACK (root_deleted_callback), model, 0);
g_signal_connect_object (model->root_folder, "files-added",
@@ -803,6 +772,22 @@ _gtk_file_system_model_new (GtkFileSystem *file_system,
handle = gtk_file_system_get_folder (file_system, root_path, types,
got_root_folder_cb,
g_object_ref (model));
if (!handle)
{
/* In this case got_root_folder_cb() will never be called, so we
* need to unref model twice.
*/
g_object_unref (model);
g_object_unref (model);
g_set_error (error,
GTK_FILE_CHOOSER_ERROR,
GTK_FILE_CHOOSER_ERROR_NONEXISTENT,
_("Could not obtain root folder"));
return NULL;
}
model->pending_handles = g_slist_append (model->pending_handles, handle);
return model;
@@ -1238,7 +1223,6 @@ _gtk_file_system_model_path_do (GtkFileSystemModel *model,
node = find_child_node (model, NULL, paths->data);
if (!node)
{
/* Shouldn't really happen */
gtk_file_paths_free (paths);
return;
}
@@ -1287,7 +1271,7 @@ _gtk_file_system_model_path_do (GtkFileSystemModel *model,
handle = gtk_file_system_get_folder (model->file_system,
paths->data, model->types,
ref_path_cb, info);
model->pending_handles = g_slist_remove (model->pending_handles, handle);
model->pending_handles = g_slist_append (model->pending_handles, handle);
}
}
}
@@ -1579,15 +1563,27 @@ get_children_get_folder_cb (GtkFileSystemHandle *handle,
gboolean cancelled = handle->cancelled;
struct GetChildrenData *data = callback_data;
if (!g_slist_find (data->model->pending_handles, handle))
tmp_list = g_slist_find (data->model->pending_handles, handle);
if (!tmp_list)
goto out;
data->model->pending_handles = g_slist_remove (data->model->pending_handles, handle);
data->model->pending_handles = g_slist_remove_link (data->model->pending_handles, tmp_list);
g_object_unref (handle);
if (cancelled || !folder)
/* error, no folder, remove dummy child? */
goto out;
{
/* error, no folder, remove dummy child */
if (data->node->parent && data->node->parent->has_dummy)
{
data->node->parent->children = NULL;
data->node->parent->has_dummy = FALSE;
}
file_model_node_free (data->node);
goto out;
}
data->node->folder = folder;
data->node->load_pending = FALSE;