diff options
author | Darin Adler <darin@src.gnome.org> | 2000-08-17 21:57:13 +0000 |
---|---|---|
committer | Darin Adler <darin@src.gnome.org> | 2000-08-17 21:57:13 +0000 |
commit | 56d7a0273d5dc121cbb752e5fe82bdd9a85a4039 (patch) | |
tree | 9a43d101f4019e71dd773c46117aeb94aa036094 | |
parent | 7c94dde4e4e348b0b4fcea4954fe2c2dda4e0542 (diff) | |
download | nautilus-56d7a0273d5dc121cbb752e5fe82bdd9a85a4039.tar.gz |
Remove extra parameters now that the initial files callback is gone. It
* components/tree/nautilus-tree-model.c:
(nautilus_tree_model_monitor_node):
* libnautilus-extensions/nautilus-directory-async.c:
(nautilus_directory_monitor_add_internal):
* libnautilus-extensions/nautilus-directory-background.c:
(nautilus_connect_background_to_directory_metadata):
* libnautilus-extensions/nautilus-directory-private.h:
* libnautilus-extensions/nautilus-directory.c:
(nautilus_directory_file_monitor_add),
(nautilus_self_check_directory):
* libnautilus-extensions/nautilus-directory.h:
* libnautilus-extensions/nautilus-file.c:
(nautilus_file_monitor_add):
* libnautilus-extensions/nautilus-trash-directory.c:
(trash_file_monitor_add):
* libnautilus-extensions/nautilus-vfs-directory.c:
(vfs_file_monitor_add):
* src/file-manager/fm-directory-view.c: (finish_loading_uri):
* src/file-manager/nautilus-trash-monitor.c:
(nautilus_trash_metadata_ready_callback):
Remove extra parameters now that the initial files callback is
gone. It turns out emitting another files_added signal works just
fine. If it wasn't for the search list view, I could also merge
the "file_added" and "files_changed" signals easily. Both of these
changes would simplify the work on the virtual trash directory.
* libnautilus-extensions/nautilus-link.h:
* libnautilus-extensions/nautilus-link.c:
Get rid of NAUTILUS_LINK constant, which looked like a link type,
but was really an unrelated implementation detail.
* libnautilus-extensions/nautilus-icon-container.c: (sort_icons),
(resort), (lay_down_icons_tblr), (finish_adding_new_icons):
Removed the file-manager-specific stuff Gene added for the desktop.
I fight the continuing battle to keep NautilusIconContainer a
general icon container, and not just for the Nautilus icon view.
The drag code is still an exception to this that needs to be fixed
some day (for NautilusList too).
* src/file-manager/fm-desktop-icon-view.c:
(fm_desktop_icon_view_initialize),
(get_local_path), (get_sort_category),
(desktop_icons_compare_callback):
Rewrote sorting code from NautilusIconContainer and moved it
here where it belongs.
27 files changed, 286 insertions, 420 deletions
@@ -1,3 +1,51 @@ +2000-08-17 Darin Adler <darin@eazel.com> + + * components/tree/nautilus-tree-model.c: + (nautilus_tree_model_monitor_node): + * libnautilus-extensions/nautilus-directory-async.c: + (nautilus_directory_monitor_add_internal): + * libnautilus-extensions/nautilus-directory-background.c: + (nautilus_connect_background_to_directory_metadata): + * libnautilus-extensions/nautilus-directory-private.h: + * libnautilus-extensions/nautilus-directory.c: + (nautilus_directory_file_monitor_add), + (nautilus_self_check_directory): + * libnautilus-extensions/nautilus-directory.h: + * libnautilus-extensions/nautilus-file.c: + (nautilus_file_monitor_add): + * libnautilus-extensions/nautilus-trash-directory.c: + (trash_file_monitor_add): + * libnautilus-extensions/nautilus-vfs-directory.c: + (vfs_file_monitor_add): + * src/file-manager/fm-directory-view.c: (finish_loading_uri): + * src/file-manager/nautilus-trash-monitor.c: + (nautilus_trash_metadata_ready_callback): + Remove extra parameters now that the initial files callback is + gone. It turns out emitting another files_added signal works just + fine. If it wasn't for the search list view, I could also merge + the "file_added" and "files_changed" signals easily. Both of these + changes would simplify the work on the virtual trash directory. + + * libnautilus-extensions/nautilus-link.h: + * libnautilus-extensions/nautilus-link.c: + Get rid of NAUTILUS_LINK constant, which looked like a link type, + but was really an unrelated implementation detail. + + * libnautilus-extensions/nautilus-icon-container.c: (sort_icons), + (resort), (lay_down_icons_tblr), (finish_adding_new_icons): + Removed the file-manager-specific stuff Gene added for the desktop. + I fight the continuing battle to keep NautilusIconContainer a + general icon container, and not just for the Nautilus icon view. + The drag code is still an exception to this that needs to be fixed + some day (for NautilusList too). + + * src/file-manager/fm-desktop-icon-view.c: + (fm_desktop_icon_view_initialize), + (get_local_path), (get_sort_category), + (desktop_icons_compare_callback): + Rewrote sorting code from NautilusIconContainer and moved it + here where it belongs. + 2000-08-17 John Sullivan <sullivan@eazel.com> Work on bug 1750 ("Reveal in New Window" feature for search results) diff --git a/components/tree/nautilus-tree-model.c b/components/tree/nautilus-tree-model.c index e38f29083..8c9496896 100644 --- a/components/tree/nautilus-tree-model.c +++ b/components/tree/nautilus-tree-model.c @@ -331,9 +331,7 @@ nautilus_tree_model_monitor_node (NautilusTreeModel *model, model, monitor_attributes, FALSE, - TRUE, - (NautilusDirectoryCallback) nautilus_tree_model_directory_files_added_callback, - model); + TRUE); g_list_free (monitor_attributes); diff --git a/libnautilus-extensions/nautilus-directory-async.c b/libnautilus-extensions/nautilus-directory-async.c index 6f5c6f32a..ca9619f59 100644 --- a/libnautilus-extensions/nautilus-directory-async.c +++ b/libnautilus-extensions/nautilus-directory-async.c @@ -768,9 +768,7 @@ nautilus_directory_monitor_add_internal (NautilusDirectory *directory, NautilusFile *file, gconstpointer client, GList *file_attributes, - gboolean monitor_metadata, - NautilusDirectoryCallback callback, - gpointer callback_data) + gboolean monitor_metadata) { Monitor *monitor; diff --git a/libnautilus-extensions/nautilus-directory-background.c b/libnautilus-extensions/nautilus-directory-background.c index d92bc97b5..0fa7618b0 100644 --- a/libnautilus-extensions/nautilus-directory-background.c +++ b/libnautilus-extensions/nautilus-directory-background.c @@ -709,13 +709,20 @@ nautilus_connect_background_to_directory_metadata (GtkWidget *widget, background); /* arrange to receive directory metadata */ + /* FIXME: This says we want to monitor the file + * metadata, and it has the side effect of monitoring + * the file list. We want to monitor the directory + * metadata, which would not mean monitoring the file + * list. This may require a change to the + * NautilusDirectory API. + */ nautilus_directory_file_monitor_add (directory, background, - NULL, TRUE, FALSE, - NULL, NULL); + NULL, TRUE, FALSE); /* arrange for notification when the theme changes */ - nautilus_preferences_add_callback (NAUTILUS_PREFERENCES_THEME, nautilus_directory_background_theme_changed, background); + nautilus_preferences_add_callback (NAUTILUS_PREFERENCES_THEME, + nautilus_directory_background_theme_changed, background); } diff --git a/libnautilus-extensions/nautilus-directory-private.h b/libnautilus-extensions/nautilus-directory-private.h index 77ac9bf0d..65d6aca4a 100644 --- a/libnautilus-extensions/nautilus-directory-private.h +++ b/libnautilus-extensions/nautilus-directory-private.h @@ -116,9 +116,7 @@ void nautilus_directory_monitor_add_internal (NautilusDirecto NautilusFile *file, gconstpointer client, GList *attributes, - gboolean monitor_metadata, - NautilusDirectoryCallback callback, - gpointer callback_data); + gboolean monitor_metadata); void nautilus_directory_monitor_remove_internal (NautilusDirectory *directory, NautilusFile *file, gconstpointer client); diff --git a/libnautilus-extensions/nautilus-directory.c b/libnautilus-extensions/nautilus-directory.c index 153fa8da7..94996af6e 100644 --- a/libnautilus-extensions/nautilus-directory.c +++ b/libnautilus-extensions/nautilus-directory.c @@ -944,9 +944,7 @@ nautilus_directory_file_monitor_add (NautilusDirectory *directory, gconstpointer client, GList *file_attributes, gboolean monitor_metadata, - gboolean force_reload, - NautilusDirectoryCallback callback, - gpointer callback_data) + gboolean force_reload) { g_return_if_fail (NAUTILUS_IS_DIRECTORY (directory)); g_return_if_fail (client != NULL); @@ -955,8 +953,7 @@ nautilus_directory_file_monitor_add (NautilusDirectory *directory, (NAUTILUS_DIRECTORY_CLASS, directory, file_monitor_add, (directory, client, file_attributes, monitor_metadata, - force_reload, - callback, callback_data)); + force_reload)); } void @@ -988,21 +985,10 @@ nautilus_directory_is_not_empty (NautilusDirectory *directory) #include "nautilus-file-attributes.h" static int data_dummy; -static guint file_count; static gboolean got_metadata_flag; static gboolean got_files_flag; static void -get_files_callback (NautilusDirectory *directory, GList *files, gpointer callback_data) -{ - g_assert (NAUTILUS_IS_DIRECTORY (directory)); - g_assert (files != NULL); - g_assert (callback_data == &data_dummy); - - file_count += g_list_length (files); -} - -static void got_metadata_callback (NautilusDirectory *directory, GList *files, gpointer callback_data) { g_assert (NAUTILUS_IS_DIRECTORY (directory)); @@ -1039,11 +1025,9 @@ nautilus_self_check_directory (void) NAUTILUS_CHECK_INTEGER_RESULT (g_hash_table_size (directories), 1); - file_count = 0; nautilus_directory_file_monitor_add - (directory, &file_count, - NULL, FALSE, FALSE, - get_files_callback, &data_dummy); + (directory, &data_dummy, + NULL, FALSE, FALSE); got_metadata_flag = FALSE; nautilus_directory_call_when_ready (directory, NULL, TRUE, @@ -1080,7 +1064,7 @@ nautilus_self_check_directory (void) NAUTILUS_CHECK_BOOLEAN_RESULT (nautilus_directory_get ("file:///etc////") == directory, TRUE); nautilus_directory_unref (directory); - nautilus_directory_file_monitor_remove (directory, &file_count); + nautilus_directory_file_monitor_remove (directory, &data_dummy); nautilus_directory_unref (directory); diff --git a/libnautilus-extensions/nautilus-directory.h b/libnautilus-extensions/nautilus-directory.h index 95fb68589..03c2dabd7 100644 --- a/libnautilus-extensions/nautilus-directory.h +++ b/libnautilus-extensions/nautilus-directory.h @@ -122,9 +122,7 @@ typedef struct gconstpointer client, GList *monitor_attributes, gboolean monitor_metadata, - gboolean force_reload, - NautilusDirectoryCallback initial_files_callback, - gpointer callback_data); + gboolean force_reload); void (* file_monitor_remove) (NautilusDirectory *directory, gconstpointer client); gboolean (* are_all_files_seen) (NautilusDirectory *directory); @@ -206,9 +204,7 @@ void nautilus_directory_file_monitor_add (NautilusDirectory gconstpointer client, GList *monitor_attributes, gboolean monitor_metadata, - gboolean force_reload, - NautilusDirectoryCallback initial_files_callback, - gpointer callback_data); + gboolean force_reload); void nautilus_directory_file_monitor_remove (NautilusDirectory *directory, gconstpointer client); diff --git a/libnautilus-extensions/nautilus-file.c b/libnautilus-extensions/nautilus-file.c index fd20a77a8..e040ab39f 100644 --- a/libnautilus-extensions/nautilus-file.c +++ b/libnautilus-extensions/nautilus-file.c @@ -1551,8 +1551,7 @@ nautilus_file_monitor_add (NautilusFile *file, nautilus_directory_monitor_add_internal (file->details->directory, file, client, - attributes, monitor_metadata, - NULL, NULL); + attributes, monitor_metadata); } void diff --git a/libnautilus-extensions/nautilus-icon-container.c b/libnautilus-extensions/nautilus-icon-container.c index 840734de3..6bae28f10 100644 --- a/libnautilus-extensions/nautilus-icon-container.c +++ b/libnautilus-extensions/nautilus-icon-container.c @@ -26,20 +26,7 @@ #include <config.h> #include "nautilus-icon-container.h" -#include <ctype.h> -#include <math.h> -#include <stdio.h> -#include <string.h> - -#include <libgnomevfs/gnome-vfs-uri.h> -#include <gdk/gdkkeysyms.h> -#include <gdk-pixbuf/gnome-canvas-pixbuf.h> -#include <gtk/gtksignal.h> -#include <gtk/gtkmain.h> -#include <libgnomeui/gnome-canvas-rect-ellipse.h> - #include "nautilus-background.h" -#include "nautilus-file.h" #include "nautilus-font-factory.h" #include "nautilus-gdk-pixbuf-extensions.h" #include "nautilus-glib-extensions.h" @@ -47,11 +34,19 @@ #include "nautilus-gnome-extensions.h" #include "nautilus-gtk-extensions.h" #include "nautilus-gtk-macros.h" +#include "nautilus-icon-private.h" #include "nautilus-icon-text-item.h" #include "nautilus-lib-self-check-functions.h" -#include "nautilus-link.h" #include "nautilus-theme.h" -#include "nautilus-icon-private.h" +#include <ctype.h> +#include <gdk-pixbuf/gnome-canvas-pixbuf.h> +#include <gdk/gdkkeysyms.h> +#include <gtk/gtkmain.h> +#include <gtk/gtksignal.h> +#include <libgnomeui/gnome-canvas-rect-ellipse.h> +#include <math.h> +#include <stdio.h> +#include <string.h> /* Interval for updating the rubberband selection, in milliseconds. */ #define RUBBERBAND_TIMEOUT_INTERVAL 10 @@ -129,7 +124,9 @@ static void icon_get_bounding_box (NautilusIcon *icon, int *x2_return, int *y2_return); -NAUTILUS_DEFINE_CLASS_BOILERPLATE (NautilusIconContainer, nautilus_icon_container, GNOME_TYPE_CANVAS) +NAUTILUS_DEFINE_CLASS_BOILERPLATE (NautilusIconContainer, + nautilus_icon_container, + GNOME_TYPE_CANVAS) /* The NautilusIconContainer signals. */ enum { @@ -542,11 +539,18 @@ compare_icons (gconstpointer a, gconstpointer b) } static void -resort (NautilusIconContainer *container) +sort_icons (NautilusIconContainer *container, + GList **icons) { sort_hack_container = container; - container->details->icons = g_list_sort - (container->details->icons, compare_icons); + *icons = g_list_sort + (*icons, compare_icons); +} + +static void +resort (NautilusIconContainer *container) +{ + sort_icons (container, &container->details->icons); } /* Given an icon's bounds, compute the width of the space it should be @@ -669,95 +673,6 @@ lay_down_icons_horizontal (NautilusIconContainer *container, } } -static int -desktop_icons_sort (gconstpointer a, gconstpointer b) -{ - const NautilusIcon *icon_a, *icon_b; - char *uri_a, *uri_b; - const char *path_a, *path_b; - GnomeVFSURI *vfs_uri_a, *vfs_uri_b; - NautilusFile *file_a, *file_b; - char *link_type; - - icon_a = a; - icon_b = b; - - uri_a = nautilus_icon_container_get_icon_uri (sort_hack_container, (NautilusIcon *)icon_a); - uri_b = nautilus_icon_container_get_icon_uri (sort_hack_container, (NautilusIcon *)icon_b); - if (uri_a == NULL || uri_b == NULL) { - return 0; - } - - file_a = nautilus_file_get (uri_a); - g_assert (file_a); - file_b = nautilus_file_get (uri_b); - g_assert (file_b); - - /* Non link files go in the middle */ - if (!nautilus_file_is_nautilus_link (file_a)) { - nautilus_file_unref (file_a); - nautilus_file_unref (file_b); - g_free (uri_a); - g_free (uri_b); - return 0; - } - - if (!nautilus_file_is_nautilus_link (file_b)) { - nautilus_file_unref (file_a); - nautilus_file_unref (file_b); - g_free (uri_a); - g_free (uri_b); - return 0; - } - - /* Get uris */ - vfs_uri_a = gnome_vfs_uri_new (uri_a); - g_assert (vfs_uri_a); - vfs_uri_b = gnome_vfs_uri_new (uri_b); - g_assert (vfs_uri_b); - - /* Get paths */ - path_a = gnome_vfs_uri_get_path (vfs_uri_a); - g_assert (path_a); - path_b = gnome_vfs_uri_get_path (vfs_uri_b); - g_assert (path_b); - - /* Done with NautilusFiles and uris */ - nautilus_file_unref (file_a); - nautilus_file_unref (file_b); - g_free (uri_a); - g_free (uri_b); - - /* Home directory goes first */ - link_type = nautilus_link_get_link_type (path_a); - if (link_type) { - if (strcmp (link_type, NAUTILUS_LINK_HOME) == 0) { - gnome_vfs_uri_unref (vfs_uri_a); - gnome_vfs_uri_unref (vfs_uri_b); - g_free (link_type); - return -1; - } - g_free (link_type); - } - - link_type = nautilus_link_get_link_type (path_b); - if (link_type) { - if (strcmp (link_type, NAUTILUS_LINK_HOME) == 0) { - gnome_vfs_uri_unref (vfs_uri_a); - gnome_vfs_uri_unref (vfs_uri_b); - g_free (link_type); - return 1; - } - g_free (link_type); - } - - /* If we get here, we don't care */ - gnome_vfs_uri_unref (vfs_uri_a); - gnome_vfs_uri_unref (vfs_uri_b); - - return 0; -} - /* Search for available space at location */ static gboolean find_open_grid_space (NautilusIcon *icon, int **icon_grid, int num_rows, @@ -905,10 +820,6 @@ lay_down_icons_tblr (NautilusIconContainer *container, GList *icons) int num_rows, num_columns; int row, column; - /* Sort the icons according to our desktop rules */ - sort_hack_container = container; - icons = g_list_sort (icons, desktop_icons_sort); - /* Get container dimensions */ width = GTK_WIDGET (container)->allocation.width; height = GTK_WIDGET (container)->allocation.height; @@ -920,7 +831,7 @@ lay_down_icons_tblr (NautilusIconContainer *container, GList *icons) total = g_list_length (container->details->icons); new_length = g_list_length (icons); placed = total - new_length; - if (placed > 0) { + if (placed > 0) { /* Add only placed icons in list */ for (p = container->details->icons; p != NULL; p = p->next) { icon = p->data; @@ -3373,7 +3284,7 @@ finish_adding_new_icons (NautilusIconContainer *container) if (no_position_icons != NULL) { g_assert (!container->details->auto_layout); - no_position_icons = g_list_reverse (no_position_icons); + sort_icons (container, &no_position_icons); get_all_icon_bounds (container, NULL, NULL, NULL, &bottom); lay_down_icons (container, no_position_icons, bottom + ICON_PAD_BOTTOM); g_list_free (no_position_icons); diff --git a/libnautilus-extensions/nautilus-link.c b/libnautilus-extensions/nautilus-link.c index a596cf28f..c16f656f5 100644 --- a/libnautilus-extensions/nautilus-link.c +++ b/libnautilus-extensions/nautilus-link.c @@ -70,7 +70,7 @@ nautilus_link_create (const char *directory_path, /* Add mime magic string so that the mime sniffer can recognize us. * Note: The value of the tag identfies what type of link this. */ - xmlSetProp (root_node, NAUTILUS_LINK, NAUTILUS_LINK_GENERIC); + xmlSetProp (root_node, "NAUTILUS_LINK", NAUTILUS_LINK_GENERIC); /* Add link and custom icon tags */ xmlSetProp (root_node, "CUSTOM_ICON", image); @@ -146,7 +146,7 @@ nautilus_link_set_type (const char *path, const char *type) } xmlSetProp (xmlDocGetRootElement (document), - NAUTILUS_LINK, + "NAUTILUS_LINK", type); xmlSaveFile (path, document); xmlFreeDoc (document); @@ -350,7 +350,7 @@ nautilus_link_get_link_type (const char *path) { /* FIXME: This interface requires sync. I/O. */ return nautilus_link_get_root_property - (path, NAUTILUS_LINK); + (path, "NAUTILUS_LINK"); } /* FIXME: Caller has to know to pass in a file with a NUL character at diff --git a/libnautilus-extensions/nautilus-link.h b/libnautilus-extensions/nautilus-link.h index e4f5ef61b..0d9bf0a37 100644 --- a/libnautilus-extensions/nautilus-link.h +++ b/libnautilus-extensions/nautilus-link.h @@ -29,7 +29,6 @@ #include "nautilus-file.h" /* Link types */ -#define NAUTILUS_LINK "NAUTILUS_LINK" #define NAUTILUS_LINK_GENERIC "Generic Link" #define NAUTILUS_LINK_TRASH "Trash Link" #define NAUTILUS_LINK_MOUNT "Mount Link" diff --git a/libnautilus-extensions/nautilus-trash-directory.c b/libnautilus-extensions/nautilus-trash-directory.c index 47ce7b412..ffa04cece 100644 --- a/libnautilus-extensions/nautilus-trash-directory.c +++ b/libnautilus-extensions/nautilus-trash-directory.c @@ -289,35 +289,17 @@ trash_cancel_callback (NautilusDirectory *directory, trash_callback_destroy (trash_callback); } -/* Add the files that are passed to make one large list. */ -static void -trash_files_callback (NautilusDirectory *directory, - GList *files, - gpointer callback_data) -{ - GList **merged_file_list; - - g_assert (NAUTILUS_IS_DIRECTORY (directory)); - g_assert (callback_data != NULL); - - merged_file_list = callback_data; - *merged_file_list = g_list_concat - (*merged_file_list, nautilus_file_list_copy (files)); -} - /* Create a monitor on each of the directories in the list. */ static void trash_file_monitor_add (NautilusDirectory *directory, gconstpointer client, GList *file_attributes, gboolean monitor_metadata, - gboolean force_reload, - NautilusDirectoryCallback callback, - gpointer callback_data) + gboolean force_reload) { NautilusTrashDirectory *trash; gpointer unique_client; - GList *p, *merged_file_list; + GList *p; trash = NAUTILUS_TRASH_DIRECTORY (directory); @@ -333,20 +315,11 @@ trash_file_monitor_add (NautilusDirectory *directory, } /* Call through to the real directory add calls. */ - merged_file_list = NULL; for (p = trash->details->directories; p != NULL; p = p->next) { nautilus_directory_file_monitor_add (p->data, unique_client, - file_attributes, monitor_metadata, force_reload, - callback == NULL ? NULL : trash_files_callback, - &merged_file_list); - } - - /* Now do the callback, with the total list. */ - if (callback != NULL) { - (* callback) (directory, merged_file_list, callback_data); + file_attributes, monitor_metadata, force_reload); } - nautilus_file_list_free (merged_file_list); } /* Remove the monitor from each of the directories in the list. */ diff --git a/libnautilus-extensions/nautilus-vfs-directory.c b/libnautilus-extensions/nautilus-vfs-directory.c index fe434c352..e698ef339 100644 --- a/libnautilus-extensions/nautilus-vfs-directory.c +++ b/libnautilus-extensions/nautilus-vfs-directory.c @@ -106,9 +106,7 @@ vfs_file_monitor_add (NautilusDirectory *directory, gconstpointer client, GList *file_attributes, gboolean monitor_metadata, - gboolean force_reload, - NautilusDirectoryCallback callback, - gpointer callback_data) + gboolean force_reload) { g_assert (NAUTILUS_IS_VFS_DIRECTORY (directory)); g_assert (client != NULL); @@ -120,9 +118,7 @@ vfs_file_monitor_add (NautilusDirectory *directory, nautilus_directory_monitor_add_internal (directory, NULL, client, - file_attributes, monitor_metadata, - force_reload ? NULL : callback, - callback_data); + file_attributes, monitor_metadata); } static void diff --git a/libnautilus-private/nautilus-directory-async.c b/libnautilus-private/nautilus-directory-async.c index 6f5c6f32a..ca9619f59 100644 --- a/libnautilus-private/nautilus-directory-async.c +++ b/libnautilus-private/nautilus-directory-async.c @@ -768,9 +768,7 @@ nautilus_directory_monitor_add_internal (NautilusDirectory *directory, NautilusFile *file, gconstpointer client, GList *file_attributes, - gboolean monitor_metadata, - NautilusDirectoryCallback callback, - gpointer callback_data) + gboolean monitor_metadata) { Monitor *monitor; diff --git a/libnautilus-private/nautilus-directory-background.c b/libnautilus-private/nautilus-directory-background.c index d92bc97b5..0fa7618b0 100644 --- a/libnautilus-private/nautilus-directory-background.c +++ b/libnautilus-private/nautilus-directory-background.c @@ -709,13 +709,20 @@ nautilus_connect_background_to_directory_metadata (GtkWidget *widget, background); /* arrange to receive directory metadata */ + /* FIXME: This says we want to monitor the file + * metadata, and it has the side effect of monitoring + * the file list. We want to monitor the directory + * metadata, which would not mean monitoring the file + * list. This may require a change to the + * NautilusDirectory API. + */ nautilus_directory_file_monitor_add (directory, background, - NULL, TRUE, FALSE, - NULL, NULL); + NULL, TRUE, FALSE); /* arrange for notification when the theme changes */ - nautilus_preferences_add_callback (NAUTILUS_PREFERENCES_THEME, nautilus_directory_background_theme_changed, background); + nautilus_preferences_add_callback (NAUTILUS_PREFERENCES_THEME, + nautilus_directory_background_theme_changed, background); } diff --git a/libnautilus-private/nautilus-directory-private.h b/libnautilus-private/nautilus-directory-private.h index 77ac9bf0d..65d6aca4a 100644 --- a/libnautilus-private/nautilus-directory-private.h +++ b/libnautilus-private/nautilus-directory-private.h @@ -116,9 +116,7 @@ void nautilus_directory_monitor_add_internal (NautilusDirecto NautilusFile *file, gconstpointer client, GList *attributes, - gboolean monitor_metadata, - NautilusDirectoryCallback callback, - gpointer callback_data); + gboolean monitor_metadata); void nautilus_directory_monitor_remove_internal (NautilusDirectory *directory, NautilusFile *file, gconstpointer client); diff --git a/libnautilus-private/nautilus-directory.c b/libnautilus-private/nautilus-directory.c index 153fa8da7..94996af6e 100644 --- a/libnautilus-private/nautilus-directory.c +++ b/libnautilus-private/nautilus-directory.c @@ -944,9 +944,7 @@ nautilus_directory_file_monitor_add (NautilusDirectory *directory, gconstpointer client, GList *file_attributes, gboolean monitor_metadata, - gboolean force_reload, - NautilusDirectoryCallback callback, - gpointer callback_data) + gboolean force_reload) { g_return_if_fail (NAUTILUS_IS_DIRECTORY (directory)); g_return_if_fail (client != NULL); @@ -955,8 +953,7 @@ nautilus_directory_file_monitor_add (NautilusDirectory *directory, (NAUTILUS_DIRECTORY_CLASS, directory, file_monitor_add, (directory, client, file_attributes, monitor_metadata, - force_reload, - callback, callback_data)); + force_reload)); } void @@ -988,21 +985,10 @@ nautilus_directory_is_not_empty (NautilusDirectory *directory) #include "nautilus-file-attributes.h" static int data_dummy; -static guint file_count; static gboolean got_metadata_flag; static gboolean got_files_flag; static void -get_files_callback (NautilusDirectory *directory, GList *files, gpointer callback_data) -{ - g_assert (NAUTILUS_IS_DIRECTORY (directory)); - g_assert (files != NULL); - g_assert (callback_data == &data_dummy); - - file_count += g_list_length (files); -} - -static void got_metadata_callback (NautilusDirectory *directory, GList *files, gpointer callback_data) { g_assert (NAUTILUS_IS_DIRECTORY (directory)); @@ -1039,11 +1025,9 @@ nautilus_self_check_directory (void) NAUTILUS_CHECK_INTEGER_RESULT (g_hash_table_size (directories), 1); - file_count = 0; nautilus_directory_file_monitor_add - (directory, &file_count, - NULL, FALSE, FALSE, - get_files_callback, &data_dummy); + (directory, &data_dummy, + NULL, FALSE, FALSE); got_metadata_flag = FALSE; nautilus_directory_call_when_ready (directory, NULL, TRUE, @@ -1080,7 +1064,7 @@ nautilus_self_check_directory (void) NAUTILUS_CHECK_BOOLEAN_RESULT (nautilus_directory_get ("file:///etc////") == directory, TRUE); nautilus_directory_unref (directory); - nautilus_directory_file_monitor_remove (directory, &file_count); + nautilus_directory_file_monitor_remove (directory, &data_dummy); nautilus_directory_unref (directory); diff --git a/libnautilus-private/nautilus-directory.h b/libnautilus-private/nautilus-directory.h index 95fb68589..03c2dabd7 100644 --- a/libnautilus-private/nautilus-directory.h +++ b/libnautilus-private/nautilus-directory.h @@ -122,9 +122,7 @@ typedef struct gconstpointer client, GList *monitor_attributes, gboolean monitor_metadata, - gboolean force_reload, - NautilusDirectoryCallback initial_files_callback, - gpointer callback_data); + gboolean force_reload); void (* file_monitor_remove) (NautilusDirectory *directory, gconstpointer client); gboolean (* are_all_files_seen) (NautilusDirectory *directory); @@ -206,9 +204,7 @@ void nautilus_directory_file_monitor_add (NautilusDirectory gconstpointer client, GList *monitor_attributes, gboolean monitor_metadata, - gboolean force_reload, - NautilusDirectoryCallback initial_files_callback, - gpointer callback_data); + gboolean force_reload); void nautilus_directory_file_monitor_remove (NautilusDirectory *directory, gconstpointer client); diff --git a/libnautilus-private/nautilus-file.c b/libnautilus-private/nautilus-file.c index fd20a77a8..e040ab39f 100644 --- a/libnautilus-private/nautilus-file.c +++ b/libnautilus-private/nautilus-file.c @@ -1551,8 +1551,7 @@ nautilus_file_monitor_add (NautilusFile *file, nautilus_directory_monitor_add_internal (file->details->directory, file, client, - attributes, monitor_metadata, - NULL, NULL); + attributes, monitor_metadata); } void diff --git a/libnautilus-private/nautilus-icon-container.c b/libnautilus-private/nautilus-icon-container.c index 840734de3..6bae28f10 100644 --- a/libnautilus-private/nautilus-icon-container.c +++ b/libnautilus-private/nautilus-icon-container.c @@ -26,20 +26,7 @@ #include <config.h> #include "nautilus-icon-container.h" -#include <ctype.h> -#include <math.h> -#include <stdio.h> -#include <string.h> - -#include <libgnomevfs/gnome-vfs-uri.h> -#include <gdk/gdkkeysyms.h> -#include <gdk-pixbuf/gnome-canvas-pixbuf.h> -#include <gtk/gtksignal.h> -#include <gtk/gtkmain.h> -#include <libgnomeui/gnome-canvas-rect-ellipse.h> - #include "nautilus-background.h" -#include "nautilus-file.h" #include "nautilus-font-factory.h" #include "nautilus-gdk-pixbuf-extensions.h" #include "nautilus-glib-extensions.h" @@ -47,11 +34,19 @@ #include "nautilus-gnome-extensions.h" #include "nautilus-gtk-extensions.h" #include "nautilus-gtk-macros.h" +#include "nautilus-icon-private.h" #include "nautilus-icon-text-item.h" #include "nautilus-lib-self-check-functions.h" -#include "nautilus-link.h" #include "nautilus-theme.h" -#include "nautilus-icon-private.h" +#include <ctype.h> +#include <gdk-pixbuf/gnome-canvas-pixbuf.h> +#include <gdk/gdkkeysyms.h> +#include <gtk/gtkmain.h> +#include <gtk/gtksignal.h> +#include <libgnomeui/gnome-canvas-rect-ellipse.h> +#include <math.h> +#include <stdio.h> +#include <string.h> /* Interval for updating the rubberband selection, in milliseconds. */ #define RUBBERBAND_TIMEOUT_INTERVAL 10 @@ -129,7 +124,9 @@ static void icon_get_bounding_box (NautilusIcon *icon, int *x2_return, int *y2_return); -NAUTILUS_DEFINE_CLASS_BOILERPLATE (NautilusIconContainer, nautilus_icon_container, GNOME_TYPE_CANVAS) +NAUTILUS_DEFINE_CLASS_BOILERPLATE (NautilusIconContainer, + nautilus_icon_container, + GNOME_TYPE_CANVAS) /* The NautilusIconContainer signals. */ enum { @@ -542,11 +539,18 @@ compare_icons (gconstpointer a, gconstpointer b) } static void -resort (NautilusIconContainer *container) +sort_icons (NautilusIconContainer *container, + GList **icons) { sort_hack_container = container; - container->details->icons = g_list_sort - (container->details->icons, compare_icons); + *icons = g_list_sort + (*icons, compare_icons); +} + +static void +resort (NautilusIconContainer *container) +{ + sort_icons (container, &container->details->icons); } /* Given an icon's bounds, compute the width of the space it should be @@ -669,95 +673,6 @@ lay_down_icons_horizontal (NautilusIconContainer *container, } } -static int -desktop_icons_sort (gconstpointer a, gconstpointer b) -{ - const NautilusIcon *icon_a, *icon_b; - char *uri_a, *uri_b; - const char *path_a, *path_b; - GnomeVFSURI *vfs_uri_a, *vfs_uri_b; - NautilusFile *file_a, *file_b; - char *link_type; - - icon_a = a; - icon_b = b; - - uri_a = nautilus_icon_container_get_icon_uri (sort_hack_container, (NautilusIcon *)icon_a); - uri_b = nautilus_icon_container_get_icon_uri (sort_hack_container, (NautilusIcon *)icon_b); - if (uri_a == NULL || uri_b == NULL) { - return 0; - } - - file_a = nautilus_file_get (uri_a); - g_assert (file_a); - file_b = nautilus_file_get (uri_b); - g_assert (file_b); - - /* Non link files go in the middle */ - if (!nautilus_file_is_nautilus_link (file_a)) { - nautilus_file_unref (file_a); - nautilus_file_unref (file_b); - g_free (uri_a); - g_free (uri_b); - return 0; - } - - if (!nautilus_file_is_nautilus_link (file_b)) { - nautilus_file_unref (file_a); - nautilus_file_unref (file_b); - g_free (uri_a); - g_free (uri_b); - return 0; - } - - /* Get uris */ - vfs_uri_a = gnome_vfs_uri_new (uri_a); - g_assert (vfs_uri_a); - vfs_uri_b = gnome_vfs_uri_new (uri_b); - g_assert (vfs_uri_b); - - /* Get paths */ - path_a = gnome_vfs_uri_get_path (vfs_uri_a); - g_assert (path_a); - path_b = gnome_vfs_uri_get_path (vfs_uri_b); - g_assert (path_b); - - /* Done with NautilusFiles and uris */ - nautilus_file_unref (file_a); - nautilus_file_unref (file_b); - g_free (uri_a); - g_free (uri_b); - - /* Home directory goes first */ - link_type = nautilus_link_get_link_type (path_a); - if (link_type) { - if (strcmp (link_type, NAUTILUS_LINK_HOME) == 0) { - gnome_vfs_uri_unref (vfs_uri_a); - gnome_vfs_uri_unref (vfs_uri_b); - g_free (link_type); - return -1; - } - g_free (link_type); - } - - link_type = nautilus_link_get_link_type (path_b); - if (link_type) { - if (strcmp (link_type, NAUTILUS_LINK_HOME) == 0) { - gnome_vfs_uri_unref (vfs_uri_a); - gnome_vfs_uri_unref (vfs_uri_b); - g_free (link_type); - return 1; - } - g_free (link_type); - } - - /* If we get here, we don't care */ - gnome_vfs_uri_unref (vfs_uri_a); - gnome_vfs_uri_unref (vfs_uri_b); - - return 0; -} - /* Search for available space at location */ static gboolean find_open_grid_space (NautilusIcon *icon, int **icon_grid, int num_rows, @@ -905,10 +820,6 @@ lay_down_icons_tblr (NautilusIconContainer *container, GList *icons) int num_rows, num_columns; int row, column; - /* Sort the icons according to our desktop rules */ - sort_hack_container = container; - icons = g_list_sort (icons, desktop_icons_sort); - /* Get container dimensions */ width = GTK_WIDGET (container)->allocation.width; height = GTK_WIDGET (container)->allocation.height; @@ -920,7 +831,7 @@ lay_down_icons_tblr (NautilusIconContainer *container, GList *icons) total = g_list_length (container->details->icons); new_length = g_list_length (icons); placed = total - new_length; - if (placed > 0) { + if (placed > 0) { /* Add only placed icons in list */ for (p = container->details->icons; p != NULL; p = p->next) { icon = p->data; @@ -3373,7 +3284,7 @@ finish_adding_new_icons (NautilusIconContainer *container) if (no_position_icons != NULL) { g_assert (!container->details->auto_layout); - no_position_icons = g_list_reverse (no_position_icons); + sort_icons (container, &no_position_icons); get_all_icon_bounds (container, NULL, NULL, NULL, &bottom); lay_down_icons (container, no_position_icons, bottom + ICON_PAD_BOTTOM); g_list_free (no_position_icons); diff --git a/libnautilus-private/nautilus-link.c b/libnautilus-private/nautilus-link.c index a596cf28f..c16f656f5 100644 --- a/libnautilus-private/nautilus-link.c +++ b/libnautilus-private/nautilus-link.c @@ -70,7 +70,7 @@ nautilus_link_create (const char *directory_path, /* Add mime magic string so that the mime sniffer can recognize us. * Note: The value of the tag identfies what type of link this. */ - xmlSetProp (root_node, NAUTILUS_LINK, NAUTILUS_LINK_GENERIC); + xmlSetProp (root_node, "NAUTILUS_LINK", NAUTILUS_LINK_GENERIC); /* Add link and custom icon tags */ xmlSetProp (root_node, "CUSTOM_ICON", image); @@ -146,7 +146,7 @@ nautilus_link_set_type (const char *path, const char *type) } xmlSetProp (xmlDocGetRootElement (document), - NAUTILUS_LINK, + "NAUTILUS_LINK", type); xmlSaveFile (path, document); xmlFreeDoc (document); @@ -350,7 +350,7 @@ nautilus_link_get_link_type (const char *path) { /* FIXME: This interface requires sync. I/O. */ return nautilus_link_get_root_property - (path, NAUTILUS_LINK); + (path, "NAUTILUS_LINK"); } /* FIXME: Caller has to know to pass in a file with a NUL character at diff --git a/libnautilus-private/nautilus-link.h b/libnautilus-private/nautilus-link.h index e4f5ef61b..0d9bf0a37 100644 --- a/libnautilus-private/nautilus-link.h +++ b/libnautilus-private/nautilus-link.h @@ -29,7 +29,6 @@ #include "nautilus-file.h" /* Link types */ -#define NAUTILUS_LINK "NAUTILUS_LINK" #define NAUTILUS_LINK_GENERIC "Generic Link" #define NAUTILUS_LINK_TRASH "Trash Link" #define NAUTILUS_LINK_MOUNT "Mount Link" diff --git a/libnautilus-private/nautilus-trash-directory.c b/libnautilus-private/nautilus-trash-directory.c index 47ce7b412..ffa04cece 100644 --- a/libnautilus-private/nautilus-trash-directory.c +++ b/libnautilus-private/nautilus-trash-directory.c @@ -289,35 +289,17 @@ trash_cancel_callback (NautilusDirectory *directory, trash_callback_destroy (trash_callback); } -/* Add the files that are passed to make one large list. */ -static void -trash_files_callback (NautilusDirectory *directory, - GList *files, - gpointer callback_data) -{ - GList **merged_file_list; - - g_assert (NAUTILUS_IS_DIRECTORY (directory)); - g_assert (callback_data != NULL); - - merged_file_list = callback_data; - *merged_file_list = g_list_concat - (*merged_file_list, nautilus_file_list_copy (files)); -} - /* Create a monitor on each of the directories in the list. */ static void trash_file_monitor_add (NautilusDirectory *directory, gconstpointer client, GList *file_attributes, gboolean monitor_metadata, - gboolean force_reload, - NautilusDirectoryCallback callback, - gpointer callback_data) + gboolean force_reload) { NautilusTrashDirectory *trash; gpointer unique_client; - GList *p, *merged_file_list; + GList *p; trash = NAUTILUS_TRASH_DIRECTORY (directory); @@ -333,20 +315,11 @@ trash_file_monitor_add (NautilusDirectory *directory, } /* Call through to the real directory add calls. */ - merged_file_list = NULL; for (p = trash->details->directories; p != NULL; p = p->next) { nautilus_directory_file_monitor_add (p->data, unique_client, - file_attributes, monitor_metadata, force_reload, - callback == NULL ? NULL : trash_files_callback, - &merged_file_list); - } - - /* Now do the callback, with the total list. */ - if (callback != NULL) { - (* callback) (directory, merged_file_list, callback_data); + file_attributes, monitor_metadata, force_reload); } - nautilus_file_list_free (merged_file_list); } /* Remove the monitor from each of the directories in the list. */ diff --git a/libnautilus-private/nautilus-vfs-directory.c b/libnautilus-private/nautilus-vfs-directory.c index fe434c352..e698ef339 100644 --- a/libnautilus-private/nautilus-vfs-directory.c +++ b/libnautilus-private/nautilus-vfs-directory.c @@ -106,9 +106,7 @@ vfs_file_monitor_add (NautilusDirectory *directory, gconstpointer client, GList *file_attributes, gboolean monitor_metadata, - gboolean force_reload, - NautilusDirectoryCallback callback, - gpointer callback_data) + gboolean force_reload) { g_assert (NAUTILUS_IS_VFS_DIRECTORY (directory)); g_assert (client != NULL); @@ -120,9 +118,7 @@ vfs_file_monitor_add (NautilusDirectory *directory, nautilus_directory_monitor_add_internal (directory, NULL, client, - file_attributes, monitor_metadata, - force_reload ? NULL : callback, - callback_data); + file_attributes, monitor_metadata); } static void diff --git a/src/file-manager/fm-desktop-icon-view.c b/src/file-manager/fm-desktop-icon-view.c index 0d002d75a..03b1eb594 100644 --- a/src/file-manager/fm-desktop-icon-view.c +++ b/src/file-manager/fm-desktop-icon-view.c @@ -72,17 +72,21 @@ static gboolean fm_desktop_icon_view_get_directory_auto_layout (FMIco static void fm_desktop_icon_view_set_directory_auto_layout (FMIconView *icon_view, NautilusDirectory *directory, gboolean auto_layout); -static void fm_desktop_icon_view_trash_state_changed_callback (NautilusTrashMonitor *trash, - gboolean state, - gpointer callback_data); - -static void mount_unmount_removable (GtkCheckMenuItem *item, - FMDesktopIconView *icon_view); -static void place_home_directory (FMDesktopIconView *icon_view); -static void remove_old_mount_links (void); - +static void fm_desktop_icon_view_trash_state_changed_callback (NautilusTrashMonitor *trash, + gboolean state, + gpointer callback_data); +static void mount_unmount_removable (GtkCheckMenuItem *item, + FMDesktopIconView *icon_view); +static void place_home_directory (FMDesktopIconView *icon_view); +static void remove_old_mount_links (void); +static int desktop_icons_compare_callback (NautilusIconContainer *container, + NautilusFile *file_a, + NautilusFile *file_b, + FMDesktopIconView *icon_view); -NAUTILUS_DEFINE_CLASS_BOILERPLATE (FMDesktopIconView, fm_desktop_icon_view, FM_TYPE_ICON_VIEW); +NAUTILUS_DEFINE_CLASS_BOILERPLATE (FMDesktopIconView, + fm_desktop_icon_view, + FM_TYPE_ICON_VIEW) static NautilusIconContainer * get_icon_container (FMDesktopIconView *icon_view) @@ -110,7 +114,6 @@ fm_desktop_icon_view_destroy (GtkObject *object) NAUTILUS_CALL_PARENT_CLASS (GTK_OBJECT_CLASS, destroy, (object)); } - static void fm_desktop_icon_view_initialize_class (FMDesktopIconViewClass *klass) { @@ -175,7 +178,8 @@ fm_desktop_icon_view_handle_middle_click (NautilusIconContainer *icon_container, static void fm_desktop_icon_view_discover_trash_callback (GnomeVFSAsyncHandle *handle, - GList *results, gpointer data) + GList *results, + gpointer callback_data) { #if 0 /* Debug code only for now. @@ -229,7 +233,8 @@ fm_desktop_icon_view_initialize (FMDesktopIconView *desktop_icon_view) nautilus_gtk_adjustment_set_value (vadj, 0); /* Set our default layout mode */ - nautilus_icon_container_set_layout_mode (icon_container, NAUTILUS_ICON_LAYOUT_T_B_L_R); + nautilus_icon_container_set_layout_mode (icon_container, + NAUTILUS_ICON_LAYOUT_T_B_L_R); /* Check for and clean up any old mount links that may have been left behind */ remove_old_mount_links (); @@ -241,8 +246,12 @@ fm_desktop_icon_view_initialize (FMDesktopIconView *desktop_icon_view) "middle_click", GTK_SIGNAL_FUNC (fm_desktop_icon_view_handle_middle_click), desktop_icon_view); + gtk_signal_connect (GTK_OBJECT (icon_container), + "compare_icons", + GTK_SIGNAL_FUNC (desktop_icons_compare_callback), + desktop_icon_view); - gtk_signal_connect (GTK_OBJECT(nautilus_trash_monitor_get ()), + gtk_signal_connect (GTK_OBJECT (nautilus_trash_monitor_get ()), "trash_state_changed", fm_desktop_icon_view_trash_state_changed_callback, desktop_icon_view); @@ -335,37 +344,46 @@ fm_desktop_icon_view_create_background_context_menu_items (FMDirectoryView *view } static char * -fm_desktop_icon_view_get_directory_sort_by (FMIconView *icon_view, NautilusDirectory *directory) +fm_desktop_icon_view_get_directory_sort_by (FMIconView *icon_view, + NautilusDirectory *directory) { - return g_strdup("name"); + return g_strdup ("name"); } static void -fm_desktop_icon_view_set_directory_sort_by (FMIconView *icon_view, NautilusDirectory *directory, const char* sort_by) +fm_desktop_icon_view_set_directory_sort_by (FMIconView *icon_view, + NautilusDirectory *directory, + const char *sort_by) { /* do nothing - the desktop always uses the same sort_by */ } static gboolean -fm_desktop_icon_view_get_directory_sort_reversed (FMIconView *icon_view, NautilusDirectory *directory) +fm_desktop_icon_view_get_directory_sort_reversed (FMIconView *icon_view, + NautilusDirectory *directory) { return FALSE; } static void -fm_desktop_icon_view_set_directory_sort_reversed (FMIconView *icon_view, NautilusDirectory *directory, gboolean sort_reversed) +fm_desktop_icon_view_set_directory_sort_reversed (FMIconView *icon_view, + NautilusDirectory *directory, + gboolean sort_reversed) { /* do nothing - the desktop always uses sort_reversed == FALSE */ } static gboolean -fm_desktop_icon_view_get_directory_auto_layout (FMIconView *icon_view, NautilusDirectory *directory) +fm_desktop_icon_view_get_directory_auto_layout (FMIconView *icon_view, + NautilusDirectory *directory) { return FALSE; } static void -fm_desktop_icon_view_set_directory_auto_layout (FMIconView *icon_view, NautilusDirectory *directory, gboolean auto_layout) +fm_desktop_icon_view_set_directory_auto_layout (FMIconView *icon_view, + NautilusDirectory *directory, + gboolean auto_layout) { /* do nothing - the desktop always uses auto_layout == FALSE */ } @@ -373,7 +391,7 @@ fm_desktop_icon_view_set_directory_auto_layout (FMIconView *icon_view, NautilusD static void fm_desktop_icon_view_trash_state_changed_callback (NautilusTrashMonitor *trash_monitor, - gboolean state, gpointer callback_data) + gboolean state, gpointer callback_data) { char *desktop_directory_path, *path; @@ -490,4 +508,87 @@ remove_old_mount_links (void) closedir (current_dir); } +static char * +get_local_path (NautilusFile *file) +{ + char *uri, *local_path; + uri = nautilus_file_get_uri (file); + local_path = nautilus_get_local_path_from_uri (uri); + g_free (uri); + return local_path; +} + +/* Sort as follows: + * 1) home link + * 2) mount links + * 3) other + * 4) trash link + */ + +typedef enum { + SORT_HOME_LINK, + SORT_MOUNT_LINK, + SORT_OTHER, + SORT_TRASH_LINK +} SortCategory; + +static SortCategory +get_sort_category (NautilusFile *file) +{ + char *path, *link_type; + SortCategory category; + + if (!nautilus_file_is_nautilus_link (file)) { + category = SORT_OTHER; + } else { + path = get_local_path (file); + g_return_val_if_fail (path != NULL, SORT_OTHER); + + link_type = nautilus_link_get_link_type (path); + if (link_type == NULL) { + category = SORT_OTHER; + } else if (strcmp (link_type, NAUTILUS_LINK_HOME) == 0) { + category = SORT_HOME_LINK; + } else if (strcmp (link_type, NAUTILUS_LINK_MOUNT) == 0) { + category = SORT_MOUNT_LINK; + } else if (strcmp (link_type, NAUTILUS_LINK_TRASH) == 0) { + category = SORT_TRASH_LINK; + } else { + category = SORT_OTHER; + } + + g_free (path); + g_free (link_type); + } + + return category; +} + +static int +desktop_icons_compare_callback (NautilusIconContainer *container, + NautilusFile *file_a, + NautilusFile *file_b, + FMDesktopIconView *icon_view) +{ + SortCategory category_a, category_b; + + category_a = get_sort_category (file_a); + category_b = get_sort_category (file_b); + + /* Let the previous handler do the compare. */ + if (category_a == category_b) { + return 0; + } + + /* We know the answer, so prevent the other handlers + * from overwriting our result. + */ + gtk_signal_emit_stop_by_name (GTK_OBJECT (container), + "compare_icons"); + if (category_a < category_b) { + return -1; + } else { + return +1; + } +} diff --git a/src/file-manager/fm-directory-view.c b/src/file-manager/fm-directory-view.c index 8effec99d..d1ef95868 100644 --- a/src/file-manager/fm-directory-view.c +++ b/src/file-manager/fm-directory-view.c @@ -3405,8 +3405,7 @@ finish_loading_uri (FMDirectoryView *view) attributes = g_list_prepend (attributes, NAUTILUS_FILE_ATTRIBUTE_TOP_LEFT_TEXT); nautilus_directory_file_monitor_add (view->details->model, view, - attributes, FALSE, TRUE, - files_added_callback, view); + attributes, FALSE, TRUE); g_list_free (attributes); /* Attach a handler to get any further files that show up as we @@ -3417,12 +3416,12 @@ finish_loading_uri (FMDirectoryView *view) view->details->files_added_handler_id = gtk_signal_connect (GTK_OBJECT (view->details->model), "files_added", - GTK_SIGNAL_FUNC (files_added_callback), + files_added_callback, view); view->details->files_changed_handler_id = gtk_signal_connect (GTK_OBJECT (view->details->model), "files_changed", - GTK_SIGNAL_FUNC (files_changed_callback), + files_changed_callback, view); } diff --git a/src/file-manager/nautilus-trash-monitor.c b/src/file-manager/nautilus-trash-monitor.c index d156493cc..e07255ca8 100644 --- a/src/file-manager/nautilus-trash-monitor.c +++ b/src/file-manager/nautilus-trash-monitor.c @@ -111,17 +111,15 @@ nautilus_trash_metadata_ready_callback (NautilusDirectory *directory, GList *fil g_assert (trash_monitor->details->trash_directory == directory); nautilus_directory_file_monitor_add (directory, trash_monitor, - NULL, FALSE, TRUE, - nautilus_trash_files_changed_callback, - trash_monitor); + NULL, FALSE, TRUE); /* Make sure we get notified about changes */ gtk_signal_connect (GTK_OBJECT (trash_monitor->details->trash_directory), - "files_added", GTK_SIGNAL_FUNC (nautilus_trash_files_changed_callback), - trash_monitor); + "files_added", GTK_SIGNAL_FUNC (nautilus_trash_files_changed_callback), + trash_monitor); gtk_signal_connect (GTK_OBJECT (trash_monitor->details->trash_directory), - "files_changed", GTK_SIGNAL_FUNC (nautilus_trash_files_changed_callback), - trash_monitor); + "files_changed", GTK_SIGNAL_FUNC (nautilus_trash_files_changed_callback), + trash_monitor); } static void |