summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Wehner <martin.wehner@gmail.com>2007-06-23 01:31:28 +0000
committerMartin Wehner <mwehner@src.gnome.org>2007-06-23 01:31:28 +0000
commit9563193dfc7b083268d64204a7af2526e139c28a (patch)
tree389f4fbfd87c10697e8ecf6fdf4a4ed56a9e85a9
parent8bc392b3adbd78a4ff6290af2b389d92c7c570b2 (diff)
downloadnautilus-9563193dfc7b083268d64204a7af2526e139c28a.tar.gz
Destroy xdg-user-dirs cache at shutdown.
2007-06-23 Martin Wehner <martin.wehner@gmail.com> * libnautilus-private/nautilus-file-utilities.c: (update_xdg_dir_cache), (unschedule_user_dirs_changed), (destroy_xdg_dir_cache), (free_xdg_dir_cache): Destroy xdg-user-dirs cache at shutdown. svn path=/trunk/; revision=12946
-rw-r--r--ChangeLog7
-rw-r--r--libnautilus-private/nautilus-file-utilities.c71
2 files changed, 58 insertions, 20 deletions
diff --git a/ChangeLog b/ChangeLog
index 3d3ab2556..929c737cd 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2007-06-23 Martin Wehner <martin.wehner@gmail.com>
+
+ * libnautilus-private/nautilus-file-utilities.c:
+ (update_xdg_dir_cache), (unschedule_user_dirs_changed),
+ (destroy_xdg_dir_cache), (free_xdg_dir_cache):
+ Destroy xdg-user-dirs cache at shutdown.
+
2007-06-21 Martin Wehner <martin.wehner@gmail.com>
* configure.in:
diff --git a/libnautilus-private/nautilus-file-utilities.c b/libnautilus-private/nautilus-file-utilities.c
index ec795281a..39684acd6 100644
--- a/libnautilus-private/nautilus-file-utilities.c
+++ b/libnautilus-private/nautilus-file-utilities.c
@@ -35,6 +35,7 @@
#include <eel/eel-glib-extensions.h>
#include <eel/eel-string.h>
#include <eel/eel-vfs-extensions.h>
+#include <eel/eel-debug.h>
#include <libgnome/gnome-util.h>
#include <glib/gi18n.h>
#include <libgnomevfs/gnome-vfs-ops.h>
@@ -340,14 +341,21 @@ schedule_user_dirs_changed (void)
}
static void
-update_xdg_dir_cache (void)
+unschedule_user_dirs_changed (void)
+{
+ if (user_dirs_changed_tag != 0) {
+ g_source_remove (user_dirs_changed_tag);
+ user_dirs_changed_tag = 0;
+ }
+}
+
+static void
+free_xdg_dir_cache (void)
{
- static gboolean started_monitor = FALSE;
- char *config_file, *uri;
int i;
- if (cached_xdg_dirs) {
- for (i = 0 ; cached_xdg_dirs[i].type != NULL; i++) {
+ if (cached_xdg_dirs != NULL) {
+ for (i = 0; cached_xdg_dirs[i].type != NULL; i++) {
if (cached_xdg_dirs[i].file != NULL) {
nautilus_file_monitor_remove (cached_xdg_dirs[i].file,
&cached_xdg_dirs[i]);
@@ -360,24 +368,32 @@ update_xdg_dir_cache (void)
g_free (cached_xdg_dirs[i].path);
}
g_free (cached_xdg_dirs);
-
- schedule_user_dirs_changed ();
- desktop_dir_changed ();
}
+}
- if (!started_monitor) {
- config_file = g_build_filename (g_get_user_config_dir (),
- "user-dirs.dirs", NULL);
- uri = gnome_vfs_get_uri_from_local_path (config_file);
- gnome_vfs_monitor_add (&cached_xdg_dirs_handle,
- uri,
- GNOME_VFS_MONITOR_FILE,
- xdg_dir_cache_changed_cb,
- NULL);
- g_free (uri);
- g_free (config_file);
+static void
+destroy_xdg_dir_cache (void)
+{
+ free_xdg_dir_cache ();
+ unschedule_user_dirs_changed ();
+ desktop_dir_changed ();
+
+ if (cached_xdg_dirs_handle != NULL) {
+ gnome_vfs_monitor_cancel (cached_xdg_dirs_handle);
+ cached_xdg_dirs_handle = NULL;
}
-
+}
+
+static void
+update_xdg_dir_cache (void)
+{
+ char *config_file, *uri;
+ int i;
+
+ free_xdg_dir_cache ();
+ schedule_user_dirs_changed ();
+ desktop_dir_changed ();
+
cached_xdg_dirs = parse_xdg_dirs (NULL);
for (i = 0 ; cached_xdg_dirs[i].type != NULL; i++) {
@@ -393,6 +409,21 @@ update_xdg_dir_cache (void)
g_free (uri);
}
}
+
+ if (cached_xdg_dirs_handle == NULL) {
+ config_file = g_build_filename (g_get_user_config_dir (),
+ "user-dirs.dirs", NULL);
+ uri = gnome_vfs_get_uri_from_local_path (config_file);
+ gnome_vfs_monitor_add (&cached_xdg_dirs_handle,
+ uri,
+ GNOME_VFS_MONITOR_FILE,
+ xdg_dir_cache_changed_cb,
+ NULL);
+ g_free (uri);
+ g_free (config_file);
+
+ eel_debug_call_at_shutdown (destroy_xdg_dir_cache);
+ }
}
char *