mirror of
https://gitlab.gnome.org/GNOME/nautilus
synced 2024-08-25 10:45:41 +00:00
![Alexander Larsson](/assets/img/avatar_default.png)
2009-02-26 Alexander Larsson <alexl@redhat.com> * libnautilus-private/nautilus-global-preferences.c: (nautilus_global_preferences_init): Remove monitoring of old gnome-vfs gconf directory. Preload the gconf directories that are used on startup. svn path=/trunk/; revision=15023
830 lines
24 KiB
C
830 lines
24 KiB
C
/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
|
|
|
|
/* nautilus-global-preferences.c - Nautilus specific preference keys and
|
|
functions.
|
|
|
|
Copyright (C) 1999, 2000, 2001 Eazel, Inc.
|
|
|
|
The Gnome Library is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU Library General Public License as
|
|
published by the Free Software Foundation; either version 2 of the
|
|
License, or (at your option) any later version.
|
|
|
|
The Gnome Library is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Library General Public License for more details.
|
|
|
|
You should have received a copy of the GNU Library General Public
|
|
License along with the Gnome Library; see the file COPYING.LIB. If not,
|
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
|
Boston, MA 02111-1307, USA.
|
|
|
|
Authors: Ramiro Estrugo <ramiro@eazel.com>
|
|
*/
|
|
|
|
#include <config.h>
|
|
#include "nautilus-global-preferences.h"
|
|
|
|
#include "nautilus-file-utilities.h"
|
|
#include "nautilus-file.h"
|
|
#include <eel/eel-enumeration.h>
|
|
#include <eel/eel-glib-extensions.h>
|
|
#include <eel/eel-gtk-extensions.h>
|
|
#include <eel/eel-stock-dialogs.h>
|
|
#include <eel/eel-string.h>
|
|
#include <glib/gi18n.h>
|
|
|
|
/* Constants */
|
|
#define STRING_ARRAY_DEFAULT_TOKENS_DELIMETER ","
|
|
#define PREFERENCES_SORT_ORDER_MANUALLY 100
|
|
|
|
/* Path for gnome-vfs preferences */
|
|
static const char *EXTRA_MONITOR_PATHS[] = { "/desktop/gnome/file_views",
|
|
NULL };
|
|
|
|
/* Forward declarations */
|
|
static void global_preferences_install_defaults (void);
|
|
static void global_preferences_register_enumerations (void);
|
|
static gpointer default_font_callback (void);
|
|
static gpointer default_home_link_name (void);
|
|
static gpointer default_computer_link_name (void);
|
|
static gpointer default_trash_link_name (void);
|
|
static gpointer default_network_link_name (void);
|
|
|
|
|
|
/* An enumeration used for installing type specific preferences defaults. */
|
|
typedef enum
|
|
{
|
|
PREFERENCE_BOOLEAN = 1,
|
|
PREFERENCE_INTEGER,
|
|
PREFERENCE_STRING,
|
|
PREFERENCE_STRING_ARRAY
|
|
} PreferenceType;
|
|
|
|
/* Enumerations used to qualify some INTEGER preferences */
|
|
static EelEnumerationEntry speed_tradeoff_enum_entries[] = {
|
|
{ "always", N_("_Always"), NAUTILUS_SPEED_TRADEOFF_ALWAYS },
|
|
{ "local_only", N_("_Local File Only"), NAUTILUS_SPEED_TRADEOFF_LOCAL_ONLY },
|
|
{ "never", N_("_Never"), NAUTILUS_SPEED_TRADEOFF_NEVER }
|
|
};
|
|
|
|
static EelEnumerationEntry default_zoom_level_enum_entries[] = {
|
|
/* xgettext:no-c-format */
|
|
{ "smallest", N_("25%"), NAUTILUS_ZOOM_LEVEL_SMALLEST },
|
|
/* xgettext:no-c-format */
|
|
{ "smaller", N_("50%"), NAUTILUS_ZOOM_LEVEL_SMALLER },
|
|
/* xgettext:no-c-format */
|
|
{ "small", N_("75%"), NAUTILUS_ZOOM_LEVEL_SMALL },
|
|
/* xgettext:no-c-format */
|
|
{ "standard", N_("100%"), NAUTILUS_ZOOM_LEVEL_STANDARD },
|
|
/* xgettext:no-c-format */
|
|
{ "large", N_("150%"), NAUTILUS_ZOOM_LEVEL_LARGE },
|
|
/* xgettext:no-c-format */
|
|
{ "larger", N_("200%"), NAUTILUS_ZOOM_LEVEL_LARGER },
|
|
/* xgettext:no-c-format */
|
|
{ "largest", N_("400%"), NAUTILUS_ZOOM_LEVEL_LARGEST }
|
|
};
|
|
|
|
static EelEnumerationEntry file_size_enum_entries[] = {
|
|
{ "102400", N_("100 K"), 102400 },
|
|
{ "512000", N_("500 K"), 512000 },
|
|
{ "1048576", N_("1 MB"), 1048576 },
|
|
{ "3145728", N_("3 MB"), 3145728 },
|
|
{ "5242880", N_("5 MB"), 5242880 },
|
|
{ "10485760", N_("10 MB"), 10485760 },
|
|
{ "104857600", N_("100 MB"), 104857600 },
|
|
{ "1073741824", N_("1 GB"), 1073741824 },
|
|
{ "2147483648", N_("2 GB"), 2147483648U },
|
|
{ "4294967295", N_("4 GB"), 4294967295U }
|
|
};
|
|
|
|
static EelEnumerationEntry click_policy_enum_entries[] = {
|
|
{ "single",
|
|
N_("Activate items with a _single click"),
|
|
NAUTILUS_CLICK_POLICY_SINGLE
|
|
},
|
|
{ "double",
|
|
N_("Activate items with a _double click"),
|
|
NAUTILUS_CLICK_POLICY_DOUBLE
|
|
}
|
|
};
|
|
|
|
static EelEnumerationEntry executable_text_activation_enum_entries[] = {
|
|
{ "launch",
|
|
N_("E_xecute files when they are clicked"),
|
|
NAUTILUS_EXECUTABLE_TEXT_LAUNCH
|
|
},
|
|
{ "display",
|
|
N_("Display _files when they are clicked"),
|
|
NAUTILUS_EXECUTABLE_TEXT_DISPLAY
|
|
},
|
|
{ "ask",
|
|
N_("_Ask each time"),
|
|
NAUTILUS_EXECUTABLE_TEXT_ASK
|
|
}
|
|
};
|
|
|
|
static EelEnumerationEntry search_bar_type_enum_entries[] = {
|
|
{ "search by text",
|
|
N_("Search for files by file name only"),
|
|
NAUTILUS_SIMPLE_SEARCH_BAR
|
|
},
|
|
{ "search by text and properties",
|
|
N_("Search for files by file name and file properties"),
|
|
NAUTILUS_COMPLEX_SEARCH_BAR
|
|
}
|
|
};
|
|
|
|
static EelEnumerationEntry default_folder_viewer_enum_entries[] = {
|
|
{ "icon_view", N_("Icon View"), NAUTILUS_DEFAULT_FOLDER_VIEWER_ICON_VIEW },
|
|
{ "compact_view", N_("Compact View"), NAUTILUS_DEFAULT_FOLDER_VIEWER_COMPACT_VIEW },
|
|
{ "list_view", N_("List View"), NAUTILUS_DEFAULT_FOLDER_VIEWER_LIST_VIEW }
|
|
};
|
|
|
|
static EelEnumerationEntry default_icon_view_sort_order_enum_entries[] = {
|
|
{ "manually", N_("Manually"), PREFERENCES_SORT_ORDER_MANUALLY },
|
|
{ "--------", "--------" },
|
|
{ "name", N_("By Name"), NAUTILUS_FILE_SORT_BY_DISPLAY_NAME },
|
|
{ "size", N_("By Size"), NAUTILUS_FILE_SORT_BY_SIZE },
|
|
{ "type", N_("By Type"), NAUTILUS_FILE_SORT_BY_TYPE },
|
|
{ "modification_date", N_("By Modification Date"), NAUTILUS_FILE_SORT_BY_MTIME },
|
|
{ "emblems", N_("By Emblems"), NAUTILUS_FILE_SORT_BY_EMBLEMS }
|
|
};
|
|
|
|
static EelEnumerationEntry standard_font_size_entries[] = {
|
|
{ "8", N_("8"), 8 },
|
|
{ "10", N_("10"), 10 },
|
|
{ "12", N_("12"), 12 },
|
|
{ "14", N_("14"), 14 },
|
|
{ "16", N_("16"), 16 },
|
|
{ "18", N_("18"), 18 },
|
|
{ "20", N_("20"), 20 },
|
|
{ "22", N_("22"), 22 },
|
|
{ "24", N_("24"), 24 }
|
|
};
|
|
|
|
/* These are not translated, because the text is not used in the ui */
|
|
static EelEnumerationEntry date_format_entries[] = {
|
|
{ "locale", "Locale Default", NAUTILUS_DATE_FORMAT_LOCALE },
|
|
{ "iso", "ISO Format", NAUTILUS_DATE_FORMAT_ISO },
|
|
{ "informal", "Informal", NAUTILUS_DATE_FORMAT_INFORMAL }
|
|
};
|
|
|
|
static EelEnumerationEntry new_tab_position_entries[] = {
|
|
{ "after_current_tab", "After Current Tab", NAUTILUS_NEW_TAB_POSITION_AFTER_CURRENT_TAB },
|
|
{ "end", "End", NAUTILUS_NEW_TAB_POSITION_END }
|
|
};
|
|
|
|
/*
|
|
* A callback which can be used to fetch dynamic fallback values.
|
|
* For example, values that are dependent on the environment (such as user name)
|
|
* cannot be specified as constants.
|
|
*/
|
|
typedef gpointer (*PreferencesDefaultValueCallback) (void);
|
|
|
|
/* A structure that describes a single preference including defaults and visibility. */
|
|
typedef struct
|
|
{
|
|
const char *name;
|
|
PreferenceType type;
|
|
const gpointer fallback_value;
|
|
PreferencesDefaultValueCallback fallback_callback;
|
|
GFreeFunc fallback_callback_result_free_function;
|
|
const char *enumeration_id;
|
|
} PreferenceDefault;
|
|
|
|
/* The following table defines the default values and user level visibilities of
|
|
* Nautilus preferences. Each of these preferences does not necessarily need to
|
|
* have a UI item in the preferences dialog. To add an item to the preferences
|
|
* dialog, see the NautilusPreferencesItemDescription tables later in this file.
|
|
*
|
|
* Field definitions:
|
|
*
|
|
* 1. name
|
|
*
|
|
* The name of the preference. Usually defined in
|
|
* nautilus-global-preferences.h
|
|
*
|
|
* 2. type
|
|
* The preference type. One of:
|
|
*
|
|
* PREFERENCE_BOOLEAN
|
|
* PREFERENCE_INTEGER
|
|
* PREFERENCE_STRING
|
|
* PREFERENCE_STRING_ARRAY
|
|
*
|
|
* 3. fallback_value
|
|
* Emergency fallback value if our gconf schemas are hosed somehow.
|
|
*
|
|
* 4. fallback_callback
|
|
* callback to get dynamic fallback
|
|
*
|
|
* 5. fallback_callback_result_free_function
|
|
* free result of fallback_callback
|
|
*
|
|
* 6. enumeration_id
|
|
* An an enumeration id is a unique string that identifies an enumeration.
|
|
* If given, an enumeration id can be used to qualify a INTEGER preference.
|
|
* The preferences dialog widgetry will use this enumeration id to find out
|
|
* what choices and descriptions of choices to present to the user.
|
|
*/
|
|
|
|
/* NOTE THAT THE FALLBACKS HERE ARE NOT SUPPOSED TO BE USED -
|
|
* YOU SHOULD EDIT THE SCHEMAS FILE TO CHANGE DEFAULTS.
|
|
*/
|
|
static const PreferenceDefault preference_defaults[] = {
|
|
{ NAUTILUS_PREFERENCES_SHOW_HIDDEN_FILES,
|
|
PREFERENCE_BOOLEAN,
|
|
GINT_TO_POINTER (FALSE)
|
|
},
|
|
{ NAUTILUS_PREFERENCES_SHOW_BACKUP_FILES,
|
|
PREFERENCE_BOOLEAN,
|
|
GINT_TO_POINTER (FALSE)
|
|
},
|
|
{ NAUTILUS_PREFERENCES_CONFIRM_TRASH,
|
|
PREFERENCE_BOOLEAN,
|
|
GINT_TO_POINTER (TRUE)
|
|
},
|
|
{ NAUTILUS_PREFERENCES_ENABLE_DELETE,
|
|
PREFERENCE_BOOLEAN,
|
|
GINT_TO_POINTER (FALSE)
|
|
},
|
|
{ NAUTILUS_PREFERENCES_SHOW_TEXT_IN_ICONS,
|
|
PREFERENCE_STRING,
|
|
"local_only",
|
|
NULL, NULL,
|
|
"speed_tradeoff"
|
|
},
|
|
/* Don't show remote directory item counts by default
|
|
* because computing them can be annoyingly slow, especially
|
|
* for FTP. If we make this fast enough for FTP in particular,
|
|
* we should change this default to ALWAYS.
|
|
*/
|
|
{ NAUTILUS_PREFERENCES_SHOW_DIRECTORY_ITEM_COUNTS,
|
|
PREFERENCE_STRING,
|
|
"local_only",
|
|
NULL, NULL,
|
|
"speed_tradeoff"
|
|
},
|
|
{ NAUTILUS_PREFERENCES_CLICK_POLICY,
|
|
PREFERENCE_STRING,
|
|
"double",
|
|
NULL, NULL,
|
|
"click_policy"
|
|
},
|
|
{ NAUTILUS_PREFERENCES_EXECUTABLE_TEXT_ACTIVATION,
|
|
PREFERENCE_STRING,
|
|
"ask",
|
|
NULL, NULL,
|
|
"executable_text_activation"
|
|
},
|
|
{ NAUTILUS_PREFERENCES_INSTALL_MIME_ACTIVATION,
|
|
PREFERENCE_BOOLEAN,
|
|
GINT_TO_POINTER (TRUE)
|
|
},
|
|
{ NAUTILUS_PREFERENCES_THEME,
|
|
PREFERENCE_STRING,
|
|
"default"
|
|
},
|
|
{ NAUTILUS_PREFERENCES_SHOW_IMAGE_FILE_THUMBNAILS,
|
|
PREFERENCE_STRING,
|
|
"local_only",
|
|
NULL, NULL,
|
|
"speed_tradeoff"
|
|
},
|
|
{ NAUTILUS_PREFERENCES_IMAGE_FILE_THUMBNAIL_LIMIT,
|
|
PREFERENCE_INTEGER,
|
|
GINT_TO_POINTER(10485760),
|
|
NULL, NULL,
|
|
"file_size"
|
|
},
|
|
{ NAUTILUS_PREFERENCES_PREVIEW_SOUND,
|
|
PREFERENCE_STRING,
|
|
"local_only",
|
|
NULL, NULL,
|
|
"speed_tradeoff"
|
|
},
|
|
{ NAUTILUS_PREFERENCES_SHOW_ADVANCED_PERMISSIONS,
|
|
PREFERENCE_BOOLEAN,
|
|
GINT_TO_POINTER (FALSE)
|
|
},
|
|
{ NAUTILUS_PREFERENCES_SORT_DIRECTORIES_FIRST,
|
|
PREFERENCE_BOOLEAN,
|
|
GINT_TO_POINTER (FALSE)
|
|
},
|
|
{ NAUTILUS_PREFERENCES_SHOW_DESKTOP,
|
|
PREFERENCE_BOOLEAN,
|
|
GINT_TO_POINTER (TRUE)
|
|
},
|
|
{ NAUTILUS_PREFERENCES_DESKTOP_IS_HOME_DIR,
|
|
PREFERENCE_BOOLEAN,
|
|
GINT_TO_POINTER (FALSE)
|
|
},
|
|
{ NAUTILUS_PREFERENCES_SEARCH_BAR_TYPE,
|
|
PREFERENCE_STRING,
|
|
"search_by_text",
|
|
NULL, NULL,
|
|
"search_bar_type"
|
|
},
|
|
{ NAUTILUS_PREFERENCES_ICON_VIEW_CAPTIONS,
|
|
PREFERENCE_STRING_ARRAY,
|
|
"size,date_modified,type",
|
|
NULL, NULL,
|
|
NULL
|
|
},
|
|
/* FIXME bugzilla.gnome.org 41245: Saved in pixels instead of in %? */
|
|
{ NAUTILUS_PREFERENCES_SIDEBAR_WIDTH,
|
|
PREFERENCE_INTEGER,
|
|
GINT_TO_POINTER (148)
|
|
},
|
|
{ NAUTILUS_PREFERENCES_ALWAYS_USE_BROWSER,
|
|
PREFERENCE_BOOLEAN,
|
|
GINT_TO_POINTER (FALSE)
|
|
},
|
|
{ NAUTILUS_PREFERENCES_ENABLE_TABS,
|
|
PREFERENCE_BOOLEAN,
|
|
GINT_TO_POINTER (TRUE)
|
|
},
|
|
{ NAUTILUS_PREFERENCES_NEW_TAB_POSITION,
|
|
PREFERENCE_STRING,
|
|
"after_current_tab",
|
|
NULL, NULL,
|
|
"new_tab_position"
|
|
},
|
|
{ NAUTILUS_PREFERENCES_START_WITH_TOOLBAR,
|
|
PREFERENCE_BOOLEAN,
|
|
GINT_TO_POINTER (TRUE)
|
|
},
|
|
{ NAUTILUS_PREFERENCES_START_WITH_LOCATION_BAR,
|
|
PREFERENCE_BOOLEAN,
|
|
GINT_TO_POINTER (TRUE)
|
|
},
|
|
{ NAUTILUS_PREFERENCES_ALWAYS_USE_LOCATION_ENTRY,
|
|
PREFERENCE_BOOLEAN,
|
|
GINT_TO_POINTER (FALSE)
|
|
},
|
|
{ NAUTILUS_PREFERENCES_START_WITH_STATUS_BAR,
|
|
PREFERENCE_BOOLEAN,
|
|
GINT_TO_POINTER (TRUE)
|
|
},
|
|
{ NAUTILUS_PREFERENCES_START_WITH_SIDEBAR,
|
|
PREFERENCE_BOOLEAN,
|
|
GINT_TO_POINTER (TRUE)
|
|
},
|
|
{ NAUTILUS_PREFERENCES_NAVIGATION_WINDOW_SAVED_GEOMETRY,
|
|
PREFERENCE_STRING,
|
|
""
|
|
},
|
|
{ NAUTILUS_PREFERENCES_NAVIGATION_WINDOW_MAXIMIZED,
|
|
PREFERENCE_BOOLEAN,
|
|
GINT_TO_POINTER (FALSE)
|
|
},
|
|
{ NAUTILUS_PREFERENCES_TREE_SHOW_ONLY_DIRECTORIES,
|
|
PREFERENCE_BOOLEAN,
|
|
GINT_TO_POINTER (TRUE)
|
|
},
|
|
{ NAUTILUS_PREFERENCES_DATE_FORMAT,
|
|
PREFERENCE_STRING,
|
|
"locale",
|
|
NULL, NULL,
|
|
"date_format"
|
|
},
|
|
{ NAUTILUS_PREFERENCES_DEFAULT_FOLDER_VIEWER,
|
|
PREFERENCE_INTEGER,
|
|
GINT_TO_POINTER (NAUTILUS_DEFAULT_FOLDER_VIEWER_ICON_VIEW),
|
|
NULL, NULL,
|
|
"default_folder_viewer"
|
|
},
|
|
{ NAUTILUS_PREFERENCES_DESKTOP_FONT,
|
|
PREFERENCE_STRING,
|
|
NULL, default_font_callback, g_free
|
|
},
|
|
|
|
/* Icon View Default Preferences */
|
|
{ NAUTILUS_PREFERENCES_ICON_VIEW_DEFAULT_SORT_ORDER,
|
|
PREFERENCE_STRING,
|
|
"name",
|
|
NULL, NULL,
|
|
"default_icon_view_sort_order"
|
|
},
|
|
{ NAUTILUS_PREFERENCES_ICON_VIEW_DEFAULT_SORT_ORDER_OR_MANUAL_LAYOUT,
|
|
PREFERENCE_STRING,
|
|
"name",
|
|
NULL, NULL,
|
|
"default_icon_view_sort_order"
|
|
},
|
|
{ NAUTILUS_PREFERENCES_ICON_VIEW_DEFAULT_SORT_IN_REVERSE_ORDER,
|
|
PREFERENCE_BOOLEAN,
|
|
GINT_TO_POINTER (FALSE)
|
|
},
|
|
{ NAUTILUS_PREFERENCES_ICON_VIEW_DEFAULT_USE_TIGHTER_LAYOUT,
|
|
PREFERENCE_BOOLEAN,
|
|
GINT_TO_POINTER (FALSE)
|
|
},
|
|
{ NAUTILUS_PREFERENCES_ICON_VIEW_DEFAULT_USE_MANUAL_LAYOUT,
|
|
PREFERENCE_BOOLEAN,
|
|
GINT_TO_POINTER (FALSE)
|
|
},
|
|
{ NAUTILUS_PREFERENCES_ICON_VIEW_DEFAULT_ZOOM_LEVEL,
|
|
PREFERENCE_STRING,
|
|
"standard",
|
|
NULL, NULL,
|
|
"default_zoom_level"
|
|
},
|
|
{ NAUTILUS_PREFERENCES_ICON_VIEW_THUMBNAIL_SIZE,
|
|
PREFERENCE_INTEGER,
|
|
GINT_TO_POINTER (96)
|
|
},
|
|
{ NAUTILUS_PREFERENCES_ICON_VIEW_TEXT_ELLIPSIS_LIMIT,
|
|
PREFERENCE_STRING_ARRAY,
|
|
"3",
|
|
NULL,NULL,
|
|
NULL,
|
|
},
|
|
/* Compact Icon View Default Preferences */
|
|
{ NAUTILUS_PREFERENCES_COMPACT_VIEW_DEFAULT_ZOOM_LEVEL,
|
|
PREFERENCE_STRING,
|
|
"standard",
|
|
NULL, NULL,
|
|
"default_zoom_level"
|
|
},
|
|
|
|
/* List View Default Preferences */
|
|
{ NAUTILUS_PREFERENCES_LIST_VIEW_DEFAULT_SORT_ORDER,
|
|
PREFERENCE_STRING,
|
|
"name",
|
|
NULL, NULL,
|
|
NULL,
|
|
},
|
|
{ NAUTILUS_PREFERENCES_LIST_VIEW_DEFAULT_SORT_IN_REVERSE_ORDER,
|
|
PREFERENCE_BOOLEAN,
|
|
GINT_TO_POINTER (FALSE)
|
|
},
|
|
{ NAUTILUS_PREFERENCES_LIST_VIEW_DEFAULT_ZOOM_LEVEL,
|
|
PREFERENCE_STRING,
|
|
"smaller",
|
|
NULL, NULL,
|
|
"default_zoom_level"
|
|
},
|
|
|
|
/* Desktop Preferences */
|
|
{ NAUTILUS_PREFERENCES_DESKTOP_HOME_VISIBLE,
|
|
PREFERENCE_BOOLEAN,
|
|
GINT_TO_POINTER (FALSE)
|
|
},
|
|
|
|
{ NAUTILUS_PREFERENCES_DESKTOP_HOME_NAME,
|
|
PREFERENCE_STRING,
|
|
NULL,
|
|
default_home_link_name, g_free,
|
|
},
|
|
|
|
{ NAUTILUS_PREFERENCES_DESKTOP_COMPUTER_VISIBLE,
|
|
PREFERENCE_BOOLEAN,
|
|
GINT_TO_POINTER (TRUE)
|
|
},
|
|
|
|
{ NAUTILUS_PREFERENCES_DESKTOP_COMPUTER_NAME,
|
|
PREFERENCE_STRING,
|
|
NULL,
|
|
default_computer_link_name, g_free,
|
|
},
|
|
|
|
{ NAUTILUS_PREFERENCES_DESKTOP_TRASH_VISIBLE,
|
|
PREFERENCE_BOOLEAN,
|
|
GINT_TO_POINTER (TRUE)
|
|
},
|
|
|
|
{ NAUTILUS_PREFERENCES_DESKTOP_TRASH_NAME,
|
|
PREFERENCE_STRING,
|
|
NULL,
|
|
default_trash_link_name, g_free,
|
|
},
|
|
|
|
{ NAUTILUS_PREFERENCES_DESKTOP_VOLUMES_VISIBLE,
|
|
PREFERENCE_BOOLEAN,
|
|
GINT_TO_POINTER (TRUE)
|
|
},
|
|
|
|
{ NAUTILUS_PREFERENCES_DESKTOP_NETWORK_VISIBLE,
|
|
PREFERENCE_BOOLEAN,
|
|
GINT_TO_POINTER (FALSE)
|
|
},
|
|
|
|
{ NAUTILUS_PREFERENCES_DESKTOP_NETWORK_NAME,
|
|
PREFERENCE_STRING,
|
|
NULL,
|
|
default_network_link_name, g_free,
|
|
},
|
|
|
|
{ NAUTILUS_PREFERENCES_MEDIA_AUTOMOUNT,
|
|
PREFERENCE_BOOLEAN,
|
|
GINT_TO_POINTER (TRUE)
|
|
},
|
|
{ NAUTILUS_PREFERENCES_MEDIA_AUTOMOUNT_OPEN,
|
|
PREFERENCE_BOOLEAN,
|
|
GINT_TO_POINTER (TRUE)
|
|
},
|
|
{ NAUTILUS_PREFERENCES_MEDIA_AUTORUN_NEVER,
|
|
PREFERENCE_BOOLEAN,
|
|
GINT_TO_POINTER (FALSE)
|
|
},
|
|
{ NAUTILUS_PREFERENCES_MEDIA_AUTORUN_X_CONTENT_START_APP,
|
|
PREFERENCE_STRING_ARRAY,
|
|
"", NULL, NULL, NULL
|
|
},
|
|
{ NAUTILUS_PREFERENCES_MEDIA_AUTORUN_X_CONTENT_IGNORE,
|
|
PREFERENCE_STRING_ARRAY,
|
|
"", NULL, NULL, NULL
|
|
},
|
|
{ NAUTILUS_PREFERENCES_MEDIA_AUTORUN_X_CONTENT_OPEN_FOLDER,
|
|
PREFERENCE_STRING_ARRAY,
|
|
"", NULL, NULL, NULL
|
|
},
|
|
{ NAUTILUS_PREFERENCES_DESKTOP_TEXT_ELLIPSIS_LIMIT,
|
|
PREFERENCE_INTEGER,
|
|
GINT_TO_POINTER (3)
|
|
},
|
|
{ NULL }
|
|
};
|
|
|
|
static gpointer
|
|
default_home_link_name (void)
|
|
{
|
|
/* Note to translators: If it's hard to compose a good home
|
|
* icon name from the user name, you can use a string without
|
|
* an "%s" here, in which case the home icon name will not
|
|
* include the user's name, which should be fine. To avoid a
|
|
* warning, put "%.0s" somewhere in the string, which will
|
|
* match the user name string passed by the C code, but not
|
|
* put the user name in the final string.
|
|
*/
|
|
return g_strdup_printf (_("%s's Home"), g_get_user_name ());
|
|
}
|
|
|
|
static gpointer
|
|
default_computer_link_name (void)
|
|
{
|
|
return g_strdup (_("Computer"));
|
|
}
|
|
|
|
static gpointer
|
|
default_trash_link_name (void)
|
|
{
|
|
return g_strdup (_("Trash"));
|
|
}
|
|
|
|
static gpointer
|
|
default_network_link_name (void)
|
|
{
|
|
return g_strdup (_("Network Servers"));
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
* global_preferences_register_enumerations
|
|
*
|
|
* Register enumerations for INTEGER preferences that need them.
|
|
*
|
|
* This function needs to be called before the preferences dialog
|
|
* panes are populated, as they use the registered information to
|
|
* create enumeration item widgets.
|
|
*/
|
|
static void
|
|
global_preferences_register_enumerations (void)
|
|
{
|
|
guint i;
|
|
|
|
/* Register the enumerations.
|
|
* These enumerations are used in the preferences dialog to
|
|
* populate widgets and route preferences changes between the
|
|
* storage (GConf) and the displayed values.
|
|
*/
|
|
eel_enumeration_register ("click_policy",
|
|
click_policy_enum_entries,
|
|
G_N_ELEMENTS (click_policy_enum_entries));
|
|
eel_enumeration_register ("default_folder_viewer",
|
|
default_folder_viewer_enum_entries,
|
|
G_N_ELEMENTS (default_folder_viewer_enum_entries));
|
|
eel_enumeration_register ("default_icon_view_sort_order",
|
|
default_icon_view_sort_order_enum_entries,
|
|
G_N_ELEMENTS (default_icon_view_sort_order_enum_entries));
|
|
eel_enumeration_register ("default_zoom_level",
|
|
default_zoom_level_enum_entries,
|
|
G_N_ELEMENTS (default_zoom_level_enum_entries));
|
|
eel_enumeration_register ("executable_text_activation",
|
|
executable_text_activation_enum_entries,
|
|
G_N_ELEMENTS (executable_text_activation_enum_entries));
|
|
eel_enumeration_register ("file_size",
|
|
file_size_enum_entries,
|
|
G_N_ELEMENTS (file_size_enum_entries));
|
|
eel_enumeration_register ("search_bar_type",
|
|
search_bar_type_enum_entries,
|
|
G_N_ELEMENTS (search_bar_type_enum_entries));
|
|
eel_enumeration_register ("speed_tradeoff",
|
|
speed_tradeoff_enum_entries,
|
|
G_N_ELEMENTS (speed_tradeoff_enum_entries));
|
|
eel_enumeration_register ("standard_font_size",
|
|
standard_font_size_entries,
|
|
G_N_ELEMENTS (standard_font_size_entries));
|
|
eel_enumeration_register ("date_format",
|
|
date_format_entries,
|
|
G_N_ELEMENTS (date_format_entries));
|
|
eel_enumeration_register ("new_tab_position",
|
|
new_tab_position_entries,
|
|
G_N_ELEMENTS (new_tab_position_entries));
|
|
|
|
/* Set the enumeration ids for preferences that need them */
|
|
for (i = 0; preference_defaults[i].name != NULL; i++) {
|
|
if (eel_strlen (preference_defaults[i].enumeration_id) > 0) {
|
|
g_assert (preference_defaults[i].type == PREFERENCE_STRING
|
|
|| preference_defaults[i].type == PREFERENCE_STRING_ARRAY
|
|
|| preference_defaults[i].type == PREFERENCE_INTEGER);
|
|
eel_preferences_set_enumeration_id (preference_defaults[i].name,
|
|
preference_defaults[i].enumeration_id);
|
|
}
|
|
}
|
|
}
|
|
|
|
static void
|
|
global_preferences_install_one_default (const char *preference_name,
|
|
PreferenceType preference_type,
|
|
const PreferenceDefault *preference_default)
|
|
{
|
|
gpointer value = NULL;
|
|
char **string_array_value;
|
|
|
|
g_return_if_fail (preference_name != NULL);
|
|
g_return_if_fail (preference_type >= PREFERENCE_BOOLEAN);
|
|
g_return_if_fail (preference_type <= PREFERENCE_STRING_ARRAY);
|
|
g_return_if_fail (preference_default != NULL);
|
|
|
|
/* If a callback is given, use that to fetch the default value */
|
|
if (preference_default->fallback_callback != NULL) {
|
|
value = (* preference_default->fallback_callback) ();
|
|
} else {
|
|
value = preference_default->fallback_value;
|
|
}
|
|
|
|
switch (preference_type) {
|
|
case PREFERENCE_BOOLEAN:
|
|
eel_preferences_set_emergency_fallback_boolean (preference_name,
|
|
GPOINTER_TO_INT (value));
|
|
break;
|
|
|
|
case PREFERENCE_INTEGER:
|
|
eel_preferences_set_emergency_fallback_integer (preference_name,
|
|
|
|
GPOINTER_TO_INT (value));
|
|
break;
|
|
|
|
case PREFERENCE_STRING:
|
|
eel_preferences_set_emergency_fallback_string (preference_name,
|
|
value);
|
|
break;
|
|
|
|
case PREFERENCE_STRING_ARRAY:
|
|
string_array_value = g_strsplit (value,
|
|
STRING_ARRAY_DEFAULT_TOKENS_DELIMETER,
|
|
-1);
|
|
eel_preferences_set_emergency_fallback_string_array (preference_name,
|
|
string_array_value);
|
|
g_strfreev (string_array_value);
|
|
break;
|
|
|
|
default:
|
|
g_assert_not_reached ();
|
|
}
|
|
|
|
/* Free the dynamic default value if needed */
|
|
if (preference_default->fallback_callback != NULL
|
|
&& preference_default->fallback_callback_result_free_function != NULL) {
|
|
(* preference_default->fallback_callback_result_free_function) (value);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* global_preferences_install_defaults
|
|
*
|
|
* Install defaults and visibilities.
|
|
*
|
|
* Most of the defaults come from the preference_defaults table above.
|
|
*
|
|
* Many preferences require their defaults to be computed, and so there
|
|
* are special functions to install those.
|
|
*/
|
|
static void
|
|
global_preferences_install_defaults (void)
|
|
{
|
|
guint i;
|
|
|
|
for (i = 0; preference_defaults[i].name != NULL; i++) {
|
|
global_preferences_install_one_default (preference_defaults[i].name,
|
|
preference_defaults[i].type,
|
|
&preference_defaults[i]);
|
|
}
|
|
}
|
|
|
|
static gpointer
|
|
default_font_callback (void)
|
|
{
|
|
return g_strdup ("sans 12");
|
|
}
|
|
|
|
/*
|
|
* Public functions
|
|
*/
|
|
char *
|
|
nautilus_global_preferences_get_default_folder_viewer_preference_as_iid (void)
|
|
{
|
|
int preference_value;
|
|
const char *viewer_iid;
|
|
|
|
preference_value =
|
|
eel_preferences_get_enum (NAUTILUS_PREFERENCES_DEFAULT_FOLDER_VIEWER);
|
|
|
|
if (preference_value == NAUTILUS_DEFAULT_FOLDER_VIEWER_LIST_VIEW) {
|
|
viewer_iid = NAUTILUS_LIST_VIEW_IID;
|
|
} else if (preference_value == NAUTILUS_DEFAULT_FOLDER_VIEWER_COMPACT_VIEW) {
|
|
viewer_iid = NAUTILUS_COMPACT_VIEW_IID;
|
|
} else {
|
|
viewer_iid = NAUTILUS_ICON_VIEW_IID;
|
|
}
|
|
|
|
return g_strdup (viewer_iid);
|
|
}
|
|
|
|
/* The icon view uses 2 variables to store the sort order and
|
|
* whether to use manual layout. However, the UI for these
|
|
* preferences presensts them as single option menu. So we
|
|
* use the following preference as a proxy for the other two.
|
|
* In nautilus-global-preferences.c we install callbacks for
|
|
* the proxy preference and update the other 2 when it changes
|
|
*/
|
|
static void
|
|
default_icon_view_sort_order_or_manual_layout_changed_callback (gpointer callback_data)
|
|
{
|
|
int default_sort_order_or_manual_layout;
|
|
int default_sort_order;
|
|
|
|
default_sort_order_or_manual_layout =
|
|
eel_preferences_get_enum (NAUTILUS_PREFERENCES_ICON_VIEW_DEFAULT_SORT_ORDER_OR_MANUAL_LAYOUT);
|
|
|
|
eel_preferences_set_boolean (NAUTILUS_PREFERENCES_ICON_VIEW_DEFAULT_USE_MANUAL_LAYOUT,
|
|
default_sort_order_or_manual_layout == PREFERENCES_SORT_ORDER_MANUALLY);
|
|
|
|
if (default_sort_order_or_manual_layout != PREFERENCES_SORT_ORDER_MANUALLY) {
|
|
default_sort_order = default_sort_order_or_manual_layout;
|
|
|
|
g_return_if_fail (default_sort_order >= NAUTILUS_FILE_SORT_BY_DISPLAY_NAME);
|
|
g_return_if_fail (default_sort_order <= NAUTILUS_FILE_SORT_BY_EMBLEMS);
|
|
|
|
eel_preferences_set_enum (NAUTILUS_PREFERENCES_ICON_VIEW_DEFAULT_SORT_ORDER,
|
|
default_sort_order);
|
|
}
|
|
}
|
|
|
|
void
|
|
nautilus_global_preferences_init (void)
|
|
{
|
|
static gboolean initialized = FALSE;
|
|
int i;
|
|
|
|
if (initialized) {
|
|
return;
|
|
}
|
|
|
|
initialized = TRUE;
|
|
|
|
eel_preferences_init ("/apps/nautilus");
|
|
|
|
/* Install defaults */
|
|
global_preferences_install_defaults ();
|
|
|
|
global_preferences_register_enumerations ();
|
|
|
|
/* Add monitors for any other GConf paths we have keys in */
|
|
for (i=0; EXTRA_MONITOR_PATHS[i] != NULL; i++) {
|
|
eel_preferences_monitor_directory (EXTRA_MONITOR_PATHS[i]);
|
|
}
|
|
|
|
/* Set up storage for values accessed in this file */
|
|
eel_preferences_add_callback (NAUTILUS_PREFERENCES_ICON_VIEW_DEFAULT_SORT_ORDER_OR_MANUAL_LAYOUT,
|
|
default_icon_view_sort_order_or_manual_layout_changed_callback,
|
|
NULL);
|
|
|
|
/* Preload everything in a big batch */
|
|
eel_gconf_preload_cache ("/apps/nautilus/preferences",
|
|
GCONF_CLIENT_PRELOAD_ONELEVEL);
|
|
eel_gconf_preload_cache ("/desktop/gnome/file_views",
|
|
GCONF_CLIENT_PRELOAD_ONELEVEL);
|
|
|
|
/* These are always needed for the desktop */
|
|
eel_gconf_preload_cache ("/apps/nautilus/desktop",
|
|
GCONF_CLIENT_PRELOAD_ONELEVEL);
|
|
eel_gconf_preload_cache ("/apps/nautilus/icon_view",
|
|
GCONF_CLIENT_PRELOAD_ONELEVEL);
|
|
}
|