summaryrefslogtreecommitdiff
path: root/libnautilus-private/nautilus-desktop-directory.c
diff options
context:
space:
mode:
authorChristian Neumair <chris@gnome-de.org>2005-09-26 15:18:33 +0000
committerChristian Neumair <cneumair@src.gnome.org>2005-09-26 15:18:33 +0000
commite64d43ee5fd2183fa382237ab1dfa4b2525d6fda (patch)
tree8e9875878dbf13df9a384429f8a7672188a0b15f /libnautilus-private/nautilus-desktop-directory.c
parent5a5a202ab06f06387719d1f6b1b4b1e6547faaea (diff)
downloadnautilus-e64d43ee5fd2183fa382237ab1dfa4b2525d6fda.tar.gz
Make changes to "desktop_is_home_dir" GConf key instant apply. Fixes
2005-09-26 Christian Neumair <chris@gnome-de.org> * libnautilus-private/nautilus-desktop-directory.c: (desktop_directory_changed_callback), (desktop_finalize), (update_desktop_directory): Make changes to "desktop_is_home_dir" GConf key instant apply. Fixes #116217. * libnautilus-private/nautilus-icon-canvas-item.c: (nautilus_icon_canvas_item_get_image): Add emblems to drag icon. Partially fixes #159643. * src/file-manager/fm-directory-view.c: (action_mount_volume_callback), (action_unmount_volume_callback), (action_eject_volume_callback), (file_should_show_foreach), (real_update_menus_volumes): Allow to mount/unmount/eject multiple volumes at once. Fixes #156169.
Diffstat (limited to 'libnautilus-private/nautilus-desktop-directory.c')
-rw-r--r--libnautilus-private/nautilus-desktop-directory.c61
1 files changed, 47 insertions, 14 deletions
diff --git a/libnautilus-private/nautilus-desktop-directory.c b/libnautilus-private/nautilus-desktop-directory.c
index ddf5c84f7..96ddf3d58 100644
--- a/libnautilus-private/nautilus-desktop-directory.c
+++ b/libnautilus-private/nautilus-desktop-directory.c
@@ -31,8 +31,10 @@
#include "nautilus-file.h"
#include "nautilus-file-private.h"
#include "nautilus-file-utilities.h"
+#include "nautilus-global-preferences.h"
#include <eel/eel-glib-extensions.h>
#include <libgnomevfs/gnome-vfs-utils.h>
+#include <gtk/gtkmain.h>
#include <gtk/gtksignal.h>
#include <libgnome/gnome-macros.h>
@@ -63,6 +65,7 @@ typedef struct {
NautilusFileAttributes monitor_attributes;
} MergedMonitor;
+static void desktop_directory_changed_callback (gpointer data);
GNOME_CLASS_BOILERPLATE (NautilusDesktopDirectory, nautilus_desktop_directory,
NautilusDirectory, NAUTILUS_TYPE_DIRECTORY)
@@ -424,6 +427,10 @@ desktop_finalize (GObject *object)
g_hash_table_destroy (desktop->details->callbacks);
g_hash_table_destroy (desktop->details->monitors);
g_free (desktop->details);
+
+ eel_preferences_remove_callback (NAUTILUS_PREFERENCES_DESKTOP_IS_HOME_DIR,
+ desktop_directory_changed_callback,
+ desktop);
G_OBJECT_CLASS (parent_class)->finalize (object);
}
@@ -452,38 +459,64 @@ forward_files_changed_cover (NautilusDirectory *real_directory,
nautilus_directory_emit_files_changed (NAUTILUS_DIRECTORY (callback_data), files);
}
-
static void
-nautilus_desktop_directory_instance_init (NautilusDesktopDirectory *desktop)
+update_desktop_directory (NautilusDesktopDirectory *desktop)
{
char *desktop_path;
char *desktop_uri;
NautilusDirectory *real_directory;
-
- desktop->details = g_new0 (NautilusDesktopDirectoryDetails, 1);
+
+ real_directory = desktop->details->real_directory;
+ if (real_directory != NULL) {
+ g_hash_table_foreach_remove (desktop->details->callbacks, (GHRFunc) gtk_true, NULL);
+ g_hash_table_foreach_remove (desktop->details->monitors, (GHRFunc) gtk_true, NULL);
+
+ g_signal_handlers_disconnect_by_func (real_directory, done_loading_callback, desktop);
+ g_signal_handlers_disconnect_by_func (real_directory, forward_files_added_cover, desktop);
+ g_signal_handlers_disconnect_by_func (real_directory, forward_files_changed_cover, desktop);
+
+ nautilus_directory_unref (real_directory);
+ }
desktop_path = nautilus_get_desktop_directory ();
desktop_uri = gnome_vfs_get_uri_from_local_path (desktop_path);
- desktop->details->real_directory = nautilus_directory_get (desktop_uri);
+ real_directory = nautilus_directory_get (desktop_uri);
g_free (desktop_uri);
g_free (desktop_path);
- desktop->details->callbacks = g_hash_table_new_full
- (merged_callback_hash, merged_callback_equal,
- NULL, (GDestroyNotify)merged_callback_destroy);
- desktop->details->monitors = g_hash_table_new_full (NULL, NULL,
- NULL, (GDestroyNotify)merged_monitor_destroy);
-
- real_directory = desktop->details->real_directory;
-
g_signal_connect_object (real_directory, "done_loading",
G_CALLBACK (done_loading_callback), desktop, 0);
-
g_signal_connect_object (real_directory, "files_added",
G_CALLBACK (forward_files_added_cover), desktop, 0);
g_signal_connect_object (real_directory, "files_changed",
G_CALLBACK (forward_files_changed_cover), desktop, 0);
+ desktop->details->real_directory = real_directory;
+}
+
+static void
+desktop_directory_changed_callback (gpointer data)
+{
+ update_desktop_directory (NAUTILUS_DESKTOP_DIRECTORY (data));
+ nautilus_directory_force_reload (NAUTILUS_DIRECTORY (data));
+}
+
+static void
+nautilus_desktop_directory_instance_init (NautilusDesktopDirectory *desktop)
+{
+ desktop->details = g_new0 (NautilusDesktopDirectoryDetails, 1);
+
+ desktop->details->callbacks = g_hash_table_new_full
+ (merged_callback_hash, merged_callback_equal,
+ NULL, (GDestroyNotify)merged_callback_destroy);
+ desktop->details->monitors = g_hash_table_new_full (NULL, NULL,
+ NULL, (GDestroyNotify)merged_monitor_destroy);
+
+ update_desktop_directory (NAUTILUS_DESKTOP_DIRECTORY (desktop));
+
+ eel_preferences_add_callback (NAUTILUS_PREFERENCES_DESKTOP_IS_HOME_DIR,
+ desktop_directory_changed_callback,
+ desktop);
}
static void