1
0
mirror of https://gitlab.gnome.org/GNOME/nautilus synced 2024-06-30 23:46:35 +00:00

recent-servers: Load on idle

GBookmarkFile doesn't provide an asynchronous loading API. Given how
GtkPlacesView has always been doing it in the main thread, I suppose
it's fine.

Still, least it cause some delays, let's do it on idle.
This commit is contained in:
António Fernandes 2024-01-20 19:55:13 +00:00
parent b72f62f65c
commit 8ce91a54b6

View File

@ -20,6 +20,8 @@ struct _NautilusRecentServers
GFileMonitor *server_list_monitor;
guint idle_reload_id;
guint loading : 1;
};
@ -192,7 +194,9 @@ nautilus_recent_servers_finalize (GObject *object)
static void
nautilus_recent_servers_dispose (GObject *object)
{
/* Not removing this function because it's going to be used again next commit. */
NautilusRecentServers *self = (NautilusRecentServers *) object;
g_clear_handle_id (&self->idle_reload_id, g_source_remove);
G_OBJECT_CLASS (nautilus_recent_servers_parent_class)->dispose (object);
}
@ -255,12 +259,15 @@ _date_time_equal_steal_1st (GDateTime *date_time1__to_be_stolen,
}
static void
populate_servers (NautilusRecentServers *self)
populate_servers_on_idle (gpointer user_data)
{
NautilusRecentServers *self = NAUTILUS_RECENT_SERVERS (user_data);
GBookmarkFile *server_list;
char **uris;
gsize num_uris;
self->idle_reload_id = 0;
server_list = server_list_load ();
if (!server_list)
@ -271,8 +278,6 @@ populate_servers (NautilusRecentServers *self)
/* Monitor the file in case it's modified outside this code */
ensure_monitor (self);
nautilus_recent_servers_set_loading (self, TRUE);
uris = g_bookmark_file_get_uris (server_list, &num_uris);
if (!uris)
@ -403,7 +408,11 @@ nautilus_recent_servers_new (void)
void
nautilus_recent_servers_force_reload (NautilusRecentServers *self)
{
populate_servers (self);
if (self->idle_reload_id == 0)
{
self->idle_reload_id = g_idle_add_once (populate_servers_on_idle, self);
nautilus_recent_servers_set_loading (self, TRUE);
}
}
/* Returns: (transfer full): List of server infos. */