summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJohn Sullivan <sullivan@src.gnome.org>2001-04-09 23:55:59 +0000
committerJohn Sullivan <sullivan@src.gnome.org>2001-04-09 23:55:59 +0000
commite9cdcb7c6588d755011d6b78bd6d55888839178a (patch)
treed6c7e81e0e507b285ea432f3a9455f27b9786de2 /src
parent68cc0f0655ec29189e20025adcf61b8c75569fff (diff)
downloadnautilus-e9cdcb7c6588d755011d6b78bd6d55888839178a.tar.gz
Wired up the remaining new global view preferences,
and added a menu item for resetting the current view to match preferences. I know of one large bug (the default choice of Icons vs List doesn't work) and several small bugs that I'll write up now. This change requires a recent API change in eel (for eel_list_set_sort_type and eel_list_set_sort_column). * libnautilus-extensions/nautilus-global-preferences.c: Fixed typo. * src/file-manager/fm-directory-view.h: * src/file-manager/fm-directory-view.c: (reset_to_defaults_callback), (real_merge_menus), (fm_directory_view_reset_to_defaults), (fm_directory_view_initialize_class): Added support for "Reset to Defaults" command, which subclasses override to Do The Right Thing. * src/file-manager/nautilus-directory-view-ui.xml: Add "Reset to View Preferences" menu item. * src/nautilus-shell-ui.xml: Add placeholder to support location of "Reset to View Preferences" menu item. * src/file-manager/fm-icon-view.c: (fm_icon_view_reset_to_defaults), (fm_icon_view_initialize_class): Set sort criterion, sort-reversedness, tighter layout, and zoom level to match defaults. * src/file-manager/fm-list-view.c: (fm_list_view_initialize_class): wire up reset_to_defaults handler; set up auto-storage variables for sort order & sort reversed preferences. (fm_list_view_initialize): Set up preferences callbacks to notice changes to default sort order, sort reversed, and zoom level. (set_sort_order_from_metadata_and_preferences), (set_zoom_level_from_metadata_and_preferences): New functions, broken out of fm_list_view_begin_loading for reuse. (default_sort_criteria_changed_callback), (default_zoom_level_changed_callback): React to preference changes by resorting or rezooming as appropriate. (fm_list_view_begin_loading): Call broken-out functions. (fm_list_view_reset_to_defaults): Set sort order, sort-reversedness, and zoom level to default values. (fm_list_view_sort_items): Use variable defaults instead of hardwired constants for sort order & sort-reversedness. Call new eel_list versions of set_sort_type and set_sort_column so the column titles redraw correctly. (get_sort_column_from_attribute): Use variable default for sort attribute instead of hardwired constant. (get_attribute_from_sort_type): New function, converts between NautilusFileSortType enum values and named attributes. (real_get_default_sort_attribute): Use get_attribute_from_sort_type instead of hardwired constant. * src/nautilus-application.c: (default_folder_viewer_changed_callback), (nautilus_application_startup): When the default folder viewer preference changes, tell gnome-vfs about it.
Diffstat (limited to 'src')
-rw-r--r--src/file-manager/fm-directory-view.c29
-rw-r--r--src/file-manager/fm-directory-view.h7
-rw-r--r--src/file-manager/fm-icon-view.c28
-rw-r--r--src/file-manager/fm-list-view.c156
-rw-r--r--src/file-manager/nautilus-directory-view-ui.xml11
-rw-r--r--src/nautilus-application.c37
-rw-r--r--src/nautilus-shell-ui.xml1
7 files changed, 239 insertions, 30 deletions
diff --git a/src/file-manager/fm-directory-view.c b/src/file-manager/fm-directory-view.c
index 76f19d757..c4e0d3f15 100644
--- a/src/file-manager/fm-directory-view.c
+++ b/src/file-manager/fm-directory-view.c
@@ -313,6 +313,7 @@ EEL_IMPLEMENT_MUST_OVERRIDE_SIGNAL (fm_directory_view, clear)
EEL_IMPLEMENT_MUST_OVERRIDE_SIGNAL (fm_directory_view, file_changed)
EEL_IMPLEMENT_MUST_OVERRIDE_SIGNAL (fm_directory_view, get_selection)
EEL_IMPLEMENT_MUST_OVERRIDE_SIGNAL (fm_directory_view, is_empty)
+EEL_IMPLEMENT_MUST_OVERRIDE_SIGNAL (fm_directory_view, reset_to_defaults)
EEL_IMPLEMENT_MUST_OVERRIDE_SIGNAL (fm_directory_view, select_all)
EEL_IMPLEMENT_MUST_OVERRIDE_SIGNAL (fm_directory_view, set_selection)
EEL_IMPLEMENT_MUST_OVERRIDE_SIGNAL (fm_directory_view, get_selected_icon_locations)
@@ -851,6 +852,16 @@ bonobo_menu_select_all_callback (BonoboUIComponent *component,
}
static void
+reset_to_defaults_callback (BonoboUIComponent *component,
+ gpointer callback_data,
+ const char *verb)
+{
+ g_assert (FM_IS_DIRECTORY_VIEW (callback_data));
+
+ fm_directory_view_reset_to_defaults (callback_data);
+}
+
+static void
show_trash_callback (BonoboUIComponent *component,
gpointer callback_data,
const char *verb)
@@ -3883,6 +3894,7 @@ real_merge_menus (FMDirectoryView *view)
BONOBO_UI_VERB ("Paste Files", paste_files_callback),
BONOBO_UI_VERB ("Remove Custom Icons", remove_custom_icons_callback),
BONOBO_UI_VERB ("Reset Background", reset_background_callback),
+ BONOBO_UI_VERB ("Reset to Defaults", reset_to_defaults_callback),
BONOBO_UI_VERB ("Select All", bonobo_menu_select_all_callback),
BONOBO_UI_VERB ("Show Properties", open_properties_window_callback),
BONOBO_UI_VERB ("Show Trash", show_trash_callback),
@@ -4874,6 +4886,22 @@ disconnect_script_handlers (FMDirectoryView *view)
}
/**
+ * fm_directory_view_reset_to_defaults:
+ *
+ * set sorting order, zoom level, etc. to match defaults
+ *
+ **/
+void
+fm_directory_view_reset_to_defaults (FMDirectoryView *view)
+{
+ g_return_if_fail (FM_IS_DIRECTORY_VIEW (view));
+
+ EEL_CALL_METHOD
+ (FM_DIRECTORY_VIEW_CLASS, view,
+ reset_to_defaults, (view));
+}
+
+/**
* fm_directory_view_select_all:
*
* select all the items in the view
@@ -5524,6 +5552,7 @@ fm_directory_view_initialize_class (FMDirectoryViewClass *klass)
EEL_ASSIGN_MUST_OVERRIDE_SIGNAL (klass, fm_directory_view, file_changed);
EEL_ASSIGN_MUST_OVERRIDE_SIGNAL (klass, fm_directory_view, get_selection);
EEL_ASSIGN_MUST_OVERRIDE_SIGNAL (klass, fm_directory_view, is_empty);
+ EEL_ASSIGN_MUST_OVERRIDE_SIGNAL (klass, fm_directory_view, reset_to_defaults);
EEL_ASSIGN_MUST_OVERRIDE_SIGNAL (klass, fm_directory_view, select_all);
EEL_ASSIGN_MUST_OVERRIDE_SIGNAL (klass, fm_directory_view, set_selection);
EEL_ASSIGN_MUST_OVERRIDE_SIGNAL (klass, fm_directory_view, get_selected_icon_locations);
diff --git a/src/file-manager/fm-directory-view.h b/src/file-manager/fm-directory-view.h
index 4b1d85aa4..6059c72d7 100644
--- a/src/file-manager/fm-directory-view.h
+++ b/src/file-manager/fm-directory-view.h
@@ -121,6 +121,12 @@ struct FMDirectoryViewClass {
/* Function pointers that don't have corresponding signals */
+ /* reset_to_defaults is a function pointer that subclasses must
+ * override to set sort order, zoom level, etc to match default
+ * values.
+ */
+ void (* reset_to_defaults) (FMDirectoryView *view);
+
/* get_selection is not a signal; it is just a function pointer for
* subclasses to replace (override). Subclasses must replace it
* with a function that returns a newly-allocated GList of
@@ -294,6 +300,7 @@ void fm_directory_view_zoom_to_level (FMDirect
void fm_directory_view_set_zoom_level (FMDirectoryView *view,
int zoom_level);
void fm_directory_view_restore_default_zoom_level (FMDirectoryView *view);
+void fm_directory_view_reset_to_defaults (FMDirectoryView *view);
void fm_directory_view_select_all (FMDirectoryView *view);
void fm_directory_view_set_selection (FMDirectoryView *view,
GList *selection);
diff --git a/src/file-manager/fm-icon-view.c b/src/file-manager/fm-icon-view.c
index c97cc16c9..96c8bf578 100644
--- a/src/file-manager/fm-icon-view.c
+++ b/src/file-manager/fm-icon-view.c
@@ -1347,6 +1347,31 @@ fm_icon_view_update_menus (FMDirectoryView *view)
}
static void
+fm_icon_view_reset_to_defaults (FMDirectoryView *view)
+{
+ NautilusIconContainer *icon_container;
+ FMIconView *icon_view;
+
+ icon_view = FM_ICON_VIEW (view);
+ icon_container = get_icon_container (icon_view);
+
+ set_sort_criterion (icon_view, get_sort_criterion_by_sort_type (get_default_sort_order ()));
+ set_sort_reversed (icon_view, get_default_sort_in_reverse_order ());
+ nautilus_icon_container_set_tighter_layout
+ (icon_container, get_default_directory_tighter_layout ());
+
+ /* FIXME bugzilla.eazel.com 8023:
+ * There's currently no way to specify manual layout as the default.
+ */
+ nautilus_icon_container_set_auto_layout (icon_container, FALSE);
+
+ nautilus_icon_container_sort (icon_container);
+ update_layout_menus (icon_view);
+
+ fm_icon_view_restore_default_zoom_level (view);
+}
+
+static void
fm_icon_view_select_all (FMDirectoryView *view)
{
NautilusIconContainer *icon_container;
@@ -2119,6 +2144,7 @@ fm_icon_view_initialize_class (FMIconViewClass *klass)
fm_directory_view_class->file_changed = fm_icon_view_file_changed;
fm_directory_view_class->is_empty = fm_icon_view_is_empty;
fm_directory_view_class->get_selection = fm_icon_view_get_selection;
+ fm_directory_view_class->reset_to_defaults = fm_icon_view_reset_to_defaults;
fm_directory_view_class->select_all = fm_icon_view_select_all;
fm_directory_view_class->set_selection = fm_icon_view_set_selection;
fm_directory_view_class->reveal_selection = fm_icon_view_reveal_selection;
@@ -2246,7 +2272,7 @@ fm_icon_view_update_icon_container_fonts (FMIconView *icon_view)
static int default_zoom_level_font_size = 12;
-static NautilusFileSortType
+static int
get_default_zoom_level_font_size (void)
{
static gboolean auto_storaged_added = FALSE;
diff --git a/src/file-manager/fm-list-view.c b/src/file-manager/fm-list-view.c
index b40b69ecc..ec3e4192e 100644
--- a/src/file-manager/fm-list-view.c
+++ b/src/file-manager/fm-list-view.c
@@ -56,6 +56,9 @@ struct FMListViewDetails {
guint zoom_level;
};
+static NautilusFileSortType default_sort_order_auto_value;
+static gboolean default_sort_reversed_auto_value;
+
/* The list view receives files from the directory model
in chunks, to improve responsiveness during loading.
This is the number of files we add to the list, or change
@@ -89,8 +92,6 @@ struct FMListViewDetails {
#define LIST_VIEW_COLUMN_ICON 0
#define LIST_VIEW_COLUMN_EMBLEMS 1
-#define LIST_VIEW_DEFAULT_SORTING_ATTRIBUTE "name"
-
/* special values for get_data and set_data */
@@ -137,6 +138,7 @@ static void fm_list_view_initialize (gpointer
static void fm_list_view_initialize_class (gpointer klass);
static void fm_list_view_destroy (GtkObject *object);
static void fm_list_view_done_adding_files (FMDirectoryView *view);
+static void fm_list_view_reset_to_defaults (FMDirectoryView *view);
static void fm_list_view_select_all (FMDirectoryView *view);
static void fm_list_view_set_selection (FMDirectoryView *view,
GList *selection);
@@ -189,6 +191,8 @@ static void real_sort_directories_first_changed (FMDirecto
static void real_start_renaming_item (FMDirectoryView *view,
const char *uri);
static void font_or_font_size_changed_callback (gpointer callback_data);
+static void default_sort_criteria_changed_callback (gpointer callback_data);
+static void default_zoom_level_changed_callback (gpointer callback_data);
EEL_DEFINE_CLASS_BOILERPLATE (FMListView,
fm_list_view,
@@ -223,6 +227,7 @@ fm_list_view_initialize_class (gpointer klass)
fm_directory_view_class->file_changed = fm_list_view_file_changed;
fm_directory_view_class->is_empty = real_is_empty;
fm_directory_view_class->get_selection = fm_list_view_get_selection;
+ fm_directory_view_class->reset_to_defaults = fm_list_view_reset_to_defaults;
fm_directory_view_class->select_all = fm_list_view_select_all;
fm_directory_view_class->set_selection = fm_list_view_set_selection;
fm_directory_view_class->reveal_selection = fm_list_view_reveal_selection;
@@ -242,6 +247,11 @@ fm_list_view_initialize_class (gpointer klass)
fm_list_view_class->get_column_specification = real_get_column_specification;
fm_list_view_class->get_default_sort_attribute = real_get_default_sort_attribute;
fm_list_view_class->file_still_belongs = real_file_still_belongs;
+
+ nautilus_preferences_add_auto_integer (NAUTILUS_PREFERENCES_LIST_VIEW_DEFAULT_SORT_ORDER,
+ (int *) &default_sort_order_auto_value);
+ nautilus_preferences_add_auto_boolean (NAUTILUS_PREFERENCES_LIST_VIEW_DEFAULT_SORT_IN_REVERSE_ORDER,
+ &default_sort_reversed_auto_value);
}
static void
@@ -272,6 +282,18 @@ fm_list_view_initialize (gpointer object, gpointer klass)
font_or_font_size_changed_callback,
list_view,
GTK_OBJECT (list_view));
+ nautilus_preferences_add_callback_while_alive (NAUTILUS_PREFERENCES_LIST_VIEW_DEFAULT_SORT_ORDER,
+ default_sort_criteria_changed_callback,
+ list_view,
+ GTK_OBJECT (list_view));
+ nautilus_preferences_add_callback_while_alive (NAUTILUS_PREFERENCES_LIST_VIEW_DEFAULT_ZOOM_LEVEL,
+ default_zoom_level_changed_callback,
+ list_view,
+ GTK_OBJECT (list_view));
+ nautilus_preferences_add_callback_while_alive (NAUTILUS_PREFERENCES_LIST_VIEW_DEFAULT_SORT_IN_REVERSE_ORDER,
+ default_sort_criteria_changed_callback,
+ list_view,
+ GTK_OBJECT (list_view));
nautilus_preferences_add_callback_while_alive (NAUTILUS_PREFERENCES_LIST_VIEW_DEFAULT_ZOOM_LEVEL_FONT_SIZE,
font_or_font_size_changed_callback,
list_view,
@@ -1445,28 +1467,12 @@ fm_list_view_begin_adding_files (FMDirectoryView *view)
}
static void
-fm_list_view_begin_loading (FMDirectoryView *view)
+set_sort_order_from_metadata_and_preferences (FMListView *list_view)
{
- NautilusFile *file;
- FMListView *list_view;
char *default_sort_attribute;
+ NautilusFile *file;
- g_return_if_fail (FM_IS_LIST_VIEW (view));
-
- file = fm_directory_view_get_directory_as_file (view);
- list_view = FM_LIST_VIEW (view);
-
- /* Set up the background color from the metadata. */
- nautilus_connect_background_to_file_metadata (GTK_WIDGET (get_list (list_view)),
- file);
-
- fm_list_view_set_zoom_level (
- list_view,
- nautilus_file_get_integer_metadata (
- file,
- NAUTILUS_METADATA_KEY_LIST_VIEW_ZOOM_LEVEL,
- get_default_zoom_level ()),
- TRUE);
+ file = fm_directory_view_get_directory_as_file (FM_DIRECTORY_VIEW (list_view));
default_sort_attribute = get_default_sort_attribute (list_view);
fm_list_view_sort_items (
@@ -1477,11 +1483,56 @@ fm_list_view_begin_loading (FMDirectoryView *view)
default_sort_attribute)),
nautilus_file_get_boolean_metadata (file,
NAUTILUS_METADATA_KEY_LIST_VIEW_SORT_REVERSED,
- FALSE));
+ default_sort_reversed_auto_value));
g_free (default_sort_attribute);
}
static void
+set_zoom_level_from_metadata_and_preferences (FMListView *list_view)
+{
+ fm_list_view_set_zoom_level (
+ list_view,
+ nautilus_file_get_integer_metadata (
+ fm_directory_view_get_directory_as_file (FM_DIRECTORY_VIEW (list_view)),
+ NAUTILUS_METADATA_KEY_LIST_VIEW_ZOOM_LEVEL,
+ get_default_zoom_level ()),
+ TRUE);
+}
+
+static void
+default_sort_criteria_changed_callback (gpointer callback_data)
+{
+ g_return_if_fail (FM_IS_LIST_VIEW (callback_data));
+
+ set_sort_order_from_metadata_and_preferences (FM_LIST_VIEW (callback_data));
+}
+
+static void
+default_zoom_level_changed_callback (gpointer callback_data)
+{
+ g_return_if_fail (FM_IS_LIST_VIEW (callback_data));
+
+ set_zoom_level_from_metadata_and_preferences (FM_LIST_VIEW (callback_data));
+}
+
+static void
+fm_list_view_begin_loading (FMDirectoryView *view)
+{
+ FMListView *list_view;
+
+ g_return_if_fail (FM_IS_LIST_VIEW (view));
+
+ list_view = FM_LIST_VIEW (view);
+
+ /* Set up the background color from the metadata. */
+ nautilus_connect_background_to_file_metadata (GTK_WIDGET (get_list (list_view)),
+ fm_directory_view_get_directory_as_file (view));
+
+ set_zoom_level_from_metadata_and_preferences (list_view);
+ set_sort_order_from_metadata_and_preferences (list_view);
+}
+
+static void
fm_list_view_add_file (FMDirectoryView *view, NautilusFile *file)
{
g_return_if_fail (FM_IS_LIST_VIEW (view));
@@ -1732,6 +1783,24 @@ fm_list_view_reset_row_height (FMListView *list_view)
LIST_VIEW_MINIMUM_ROW_HEIGHT));
}
+/* Reset sort criteria and zoom level to match defaults */
+static void
+fm_list_view_reset_to_defaults (FMDirectoryView *view)
+{
+ FMListView *list_view;
+ char *default_sort_attribute;
+
+ list_view = FM_LIST_VIEW (view);
+
+ default_sort_attribute = get_default_sort_attribute (list_view);
+ fm_list_view_sort_items (list_view,
+ get_sort_column_from_attribute (list_view, default_sort_attribute),
+ default_sort_reversed_auto_value);
+ g_free (default_sort_attribute);
+
+ fm_list_view_restore_default_zoom_level (view);
+}
+
/* select all of the items in the view */
static void
fm_list_view_select_all (FMDirectoryView *view)
@@ -1890,6 +1959,7 @@ fm_list_view_sort_items (FMListView *list_view,
EelList *list;
EelCList *clist;
NautilusFile *file;
+ char *default_sort_attribute;
g_return_if_fail (FM_IS_LIST_VIEW (list_view));
g_return_if_fail (column >= 0);
@@ -1901,15 +1971,18 @@ fm_list_view_sort_items (FMListView *list_view,
}
file = fm_directory_view_get_directory_as_file (FM_DIRECTORY_VIEW (list_view));
+ default_sort_attribute = get_default_sort_attribute (list_view);
nautilus_file_set_metadata
(file,
NAUTILUS_METADATA_KEY_LIST_VIEW_SORT_COLUMN,
- LIST_VIEW_DEFAULT_SORTING_ATTRIBUTE,
+ default_sort_attribute,
get_column_attribute (list_view, column));
+ g_free (default_sort_attribute);
+
nautilus_file_set_boolean_metadata
(file,
NAUTILUS_METADATA_KEY_LIST_VIEW_SORT_REVERSED,
- FALSE,
+ default_sort_reversed_auto_value,
reversed);
list = get_list (list_view);
@@ -1923,13 +1996,13 @@ fm_list_view_sort_items (FMListView *list_view,
* games with the sort order in list_view_compare_files_for_sort
* to make up for this.
*/
- eel_clist_set_sort_type (clist, reversed
+ eel_list_set_sort_type (list, reversed
? GTK_SORT_DESCENDING
: GTK_SORT_ASCENDING);
list_view->details->sort_reversed = reversed;
}
- eel_clist_set_sort_column (clist, column);
+ eel_list_set_sort_column (list, column);
eel_clist_sort (clist);
}
@@ -1975,11 +2048,16 @@ get_sort_column_from_attribute (FMListView *list_view,
const char *value)
{
int result;
+ char *default_sort_attribute;
result = get_column_from_attribute (list_view, value);
- if (result == LIST_VIEW_COLUMN_NONE)
+ if (result == LIST_VIEW_COLUMN_NONE) {
+ default_sort_attribute = get_default_sort_attribute (list_view);
result = get_column_from_attribute (list_view,
- LIST_VIEW_DEFAULT_SORTING_ATTRIBUTE);
+ default_sort_attribute);
+ g_free (default_sort_attribute);
+ }
+
return result;
}
@@ -2206,9 +2284,29 @@ fm_list_view_column_set (FMListViewColumn *column,
}
static char *
+get_attribute_from_sort_type (NautilusFileSortType sort_type)
+{
+ switch (sort_type) {
+ case NAUTILUS_FILE_SORT_BY_NAME:
+ return g_strdup ("name");
+ case NAUTILUS_FILE_SORT_BY_SIZE:
+ return g_strdup ("size");
+ case NAUTILUS_FILE_SORT_BY_TYPE:
+ return g_strdup ("type");
+ case NAUTILUS_FILE_SORT_BY_MTIME:
+ return g_strdup ("date_modified");
+ case NAUTILUS_FILE_SORT_BY_EMBLEMS:
+ return g_strdup ("emblems");
+ default:
+ g_warning ("unknown sort type %d in get_attribute_from_sort_type", sort_type);
+ return g_strdup ("name");
+ }
+}
+
+static char *
real_get_default_sort_attribute (FMListView *view)
{
- return g_strdup (LIST_VIEW_DEFAULT_SORTING_ATTRIBUTE);
+ return get_attribute_from_sort_type (default_sort_order_auto_value);
}
static int
diff --git a/src/file-manager/nautilus-directory-view-ui.xml b/src/file-manager/nautilus-directory-view-ui.xml
index 8993cf83c..a3b6e1e05 100644
--- a/src/file-manager/nautilus-directory-view-ui.xml
+++ b/src/file-manager/nautilus-directory-view-ui.xml
@@ -33,6 +33,9 @@
<cmd name="Remove Custom Icons"
_label="Remove Custom Images"
_tip="Remove any custom images from selected icons"/>
+ <cmd name="Reset to Defaults"
+ _label="Reset to View Preferences"
+ _tip="Reset sorting order and zoom level to match preferences for this view"/>
<cmd name="Reset Background"
_label="Reset Background"
_tip="Remove any custom pattern or color from the background of this location"/>
@@ -159,6 +162,14 @@
</placeholder>
</submenu>
+
+ <submenu name="View">
+ <placeholder name="View Preferences Placeholder">
+ <menuitem name="Reset to Defaults"
+ _label="Reset to View _Preferences"
+ verb="Reset to Defaults"/>
+ </placeholder>
+ </submenu>
</menu>
<popups>
<popup name="background">
diff --git a/src/nautilus-application.c b/src/nautilus-application.c
index 31d67afba..4cd56e6c8 100644
--- a/src/nautilus-application.c
+++ b/src/nautilus-application.c
@@ -51,6 +51,7 @@
#include <libgnomeui/gnome-client.h>
#include <libgnomeui/gnome-messagebox.h>
#include <libgnomeui/gnome-stock.h>
+#include <libgnomevfs/gnome-vfs-mime-handlers.h>
#include <libgnomevfs/gnome-vfs-ops.h>
#include <libgnomevfs/gnome-vfs-utils.h>
#include <libnautilus-extensions/nautilus-file-utilities.h>
@@ -334,6 +335,37 @@ nautilus_make_uri_list_from_shell_strv (const char * const *strv)
return uri_list;
}
+/* This is a bit of a hack to make the Preferences dialog version of the List View/Icon View
+ * default choice work with the gnome-vfs-based mechanism for choosing a handler for a MIME type.
+ */
+static void
+default_folder_viewer_changed_callback (gpointer callback_data)
+{
+ int preference_value;
+ const char *viewer_iid;
+
+ g_assert (callback_data == NULL);
+
+ preference_value =
+ nautilus_preferences_get_integer (NAUTILUS_PREFERENCES_DEFAULT_FOLDER_VIEWER);
+
+ if (preference_value == NAUTILUS_DEFAULT_FOLDER_VIEWER_LIST_VIEW) {
+ viewer_iid = LIST_VIEW_IID;
+ } else {
+ g_return_if_fail (preference_value == NAUTILUS_DEFAULT_FOLDER_VIEWER_ICON_VIEW);
+ viewer_iid = ICON_VIEW_IID;
+ }
+
+ gnome_vfs_mime_set_default_action_type ("x-directory/normal", GNOME_VFS_MIME_ACTION_TYPE_COMPONENT);
+ gnome_vfs_mime_set_default_component ("x-directory/normal", viewer_iid);
+
+ /* FIXME bugzilla.eazel.com 8024:
+ * when preference changes, we tell gnome-vfs. But if gnome-vfs value changes
+ * some other way, preferences mechanism isn't told, so value displayed in
+ * preferences dialog might be incorrect.
+ */
+}
+
void
nautilus_application_startup (NautilusApplication *application,
gboolean kill_shell,
@@ -499,6 +531,11 @@ nautilus_application_startup (NautilusApplication *application,
application,
GTK_OBJECT (application));
+ nautilus_preferences_add_callback_while_alive (NAUTILUS_PREFERENCES_DEFAULT_FOLDER_VIEWER,
+ default_folder_viewer_changed_callback,
+ NULL,
+ GTK_OBJECT (application));
+
/* CORBA C mapping doesn't allow NULL to be passed
for string parameters */
corba_geometry = (geometry != NULL) ? geometry : "";
diff --git a/src/nautilus-shell-ui.xml b/src/nautilus-shell-ui.xml
index fa3be15c0..04c11aae0 100644
--- a/src/nautilus-shell-ui.xml
+++ b/src/nautilus-shell-ui.xml
@@ -157,6 +157,7 @@
_tip="Change the visibility of this window's status bar"
verb="Show Hide Status Bar"/>
</placeholder>
+ <placeholder name="View Preferences Placeholder" delimit = "top"/>
<placeholder name="View Items Placeholder" delimit="top"/>
<placeholder name="Zoom Items Placeholder" delimit="top">