diff options
Diffstat (limited to 'libnautilus-private/nautilus-global-preferences.c')
-rw-r--r-- | libnautilus-private/nautilus-global-preferences.c | 366 |
1 files changed, 224 insertions, 142 deletions
diff --git a/libnautilus-private/nautilus-global-preferences.c b/libnautilus-private/nautilus-global-preferences.c index 9c6892007..d8b52981f 100644 --- a/libnautilus-private/nautilus-global-preferences.c +++ b/libnautilus-private/nautilus-global-preferences.c @@ -50,6 +50,29 @@ static GList * global_preferences_get_sidebar_panel_view_identifiers (void); static gboolean global_preferences_close_dialog_callback (GtkWidget *dialog, gpointer user_data); static void global_preferences_initialize_if_needed (void); +static void global_preferences_register_with_defaults (const char *name, + const char *description, + NautilusPreferenceType type, + gconstpointer novice_default, + gconstpointer intermediate_default, + gconstpointer hacker_default); +static void global_preferences_register_boolean_with_defaults (const char *name, + const char *description, + gboolean novice_default, + gboolean intermediate_default, + gboolean hacker_default); +static void global_preferences_register_string_with_defaults (const char *name, + const char *description, + const char *novice_default, + const char *intermediate_default, + const char *hacker_default); +static void global_preferences_register_enum_with_defaults (const char *name, + const char *description, + int novice_default, + int intermediate_default, + int hacker_default); + +static GtkWidget *global_prefs_dialog = NULL; /* * Private stuff @@ -263,8 +286,6 @@ nautilus_global_preferences_get_disabled_sidebar_panel_view_identifiers (void) static GtkWidget * global_preferences_get_dialog (void) { - static GtkWidget * global_prefs_dialog = NULL; - global_preferences_initialize_if_needed (); if (!global_prefs_dialog) @@ -292,12 +313,16 @@ global_preferences_register_sidebar_panels_preferences_for_ui (void) preference_key = global_preferences_get_sidebar_panel_key (identifier->iid); g_assert (preference_key != NULL); - - nautilus_preferences_set_info (preference_key, - identifier->name, - NAUTILUS_PREFERENCE_BOOLEAN, - (gconstpointer) TRUE); - + + /* FIXME: The actual defaults fed to this function need to be queried + * so that only the appropiate sidebar panels show for a user level. + */ + global_preferences_register_boolean_with_defaults (preference_key, + identifier->name, + TRUE, + TRUE, + TRUE); + g_free (preference_key); } @@ -334,6 +359,72 @@ global_preferences_is_sidebar_panel_enabled (NautilusViewIdentifier *panel_ident } static void +global_preferences_register_with_defaults (const char *name, + const char *description, + NautilusPreferenceType type, + gconstpointer novice_default, + gconstpointer intermediate_default, + gconstpointer hacker_default) +{ + gconstpointer defaults[3]; + + defaults[0] = novice_default; + defaults[1] = intermediate_default; + defaults[2] = hacker_default; + + nautilus_preference_set_info_by_name (name, + description, + type, + defaults, + 3); +} + +static void +global_preferences_register_boolean_with_defaults (const char *name, + const char *description, + gboolean novice_default, + gboolean intermediate_default, + gboolean hacker_default) +{ + global_preferences_register_with_defaults (name, + description, + NAUTILUS_PREFERENCE_BOOLEAN, + (gconstpointer) novice_default, + (gconstpointer) intermediate_default, + (gconstpointer) hacker_default); +} + +static void +global_preferences_register_string_with_defaults (const char *name, + const char *description, + const char *novice_default, + const char *intermediate_default, + const char *hacker_default) +{ + global_preferences_register_with_defaults (name, + description, + NAUTILUS_PREFERENCE_STRING, + (gconstpointer) novice_default, + (gconstpointer) intermediate_default, + (gconstpointer) hacker_default); +} + +static void +global_preferences_register_enum_with_defaults (const char *name, + const char *description, + int novice_default, + int intermediate_default, + int hacker_default) +{ + global_preferences_register_with_defaults (name, + description, + NAUTILUS_PREFERENCE_ENUM, + (gconstpointer) novice_default, + (gconstpointer) intermediate_default, + (gconstpointer) hacker_default); +} + +static void global_preferences_register_for_ui (void) { static gboolean preference_for_ui_registered = FALSE; @@ -343,65 +434,119 @@ global_preferences_register_for_ui (void) preference_for_ui_registered = TRUE; + /* * In the soon to come star trek future, the following information * will be fetched using the latest xml techniques. */ - + /* Window create new */ - nautilus_preferences_set_info (NAUTILUS_PREFERENCES_WINDOW_ALWAYS_NEW, - "Open each item in a new window", - NAUTILUS_PREFERENCE_BOOLEAN, - (gconstpointer) FALSE); + global_preferences_register_boolean_with_defaults (NAUTILUS_PREFERENCES_WINDOW_ALWAYS_NEW, + "Open each item in a new window", + FALSE, + FALSE, + FALSE); /* Click activation type */ - nautilus_preferences_set_info (NAUTILUS_PREFERENCES_CLICK_POLICY, - "Click policy", - NAUTILUS_PREFERENCE_ENUM, - (gconstpointer) NAUTILUS_CLICK_POLICY_SINGLE); - - nautilus_preferences_enum_add_entry (NAUTILUS_PREFERENCES_CLICK_POLICY, - "single", - "Activate items with a single click", - NAUTILUS_CLICK_POLICY_SINGLE); - - nautilus_preferences_enum_add_entry (NAUTILUS_PREFERENCES_CLICK_POLICY, - "double", - "Activate items with a double click", - NAUTILUS_CLICK_POLICY_DOUBLE); - + global_preferences_register_enum_with_defaults (NAUTILUS_PREFERENCES_CLICK_POLICY, + "Click policy", + NAUTILUS_CLICK_POLICY_SINGLE, + NAUTILUS_CLICK_POLICY_SINGLE, + NAUTILUS_CLICK_POLICY_SINGLE); + + nautilus_preference_enum_add_entry_by_name (NAUTILUS_PREFERENCES_CLICK_POLICY, + "single", + "Activate items with a single click", + NAUTILUS_CLICK_POLICY_SINGLE); + + nautilus_preference_enum_add_entry_by_name (NAUTILUS_PREFERENCES_CLICK_POLICY, + "double", + "Activate items with a double click", + NAUTILUS_CLICK_POLICY_DOUBLE); + /* Remote views */ - nautilus_preferences_set_info (NAUTILUS_PREFERENCES_SHOW_TEXT_IN_REMOTE_ICONS, - "Display text in icons even for remote text files", - NAUTILUS_PREFERENCE_BOOLEAN, - (gconstpointer) FALSE); + global_preferences_register_boolean_with_defaults (NAUTILUS_PREFERENCES_SHOW_TEXT_IN_REMOTE_ICONS, + "Display text in icons even for remote text files", + FALSE, + FALSE, + FALSE); /* Sidebar panels */ global_preferences_register_sidebar_panels_preferences_for_ui (); /* Appearance options */ - nautilus_preferences_set_info (NAUTILUS_PREFERENCES_ANTI_ALIASED_CANVAS, - "Use smoother (but slower) graphics", - NAUTILUS_PREFERENCE_BOOLEAN, - (gconstpointer) FALSE); - + global_preferences_register_boolean_with_defaults (NAUTILUS_PREFERENCES_ANTI_ALIASED_CANVAS, + "Use smoother (but slower) graphics", + FALSE, + FALSE, + FALSE); + /* Directory View */ - nautilus_preferences_set_info (NAUTILUS_PREFERENCES_DIRECTORY_VIEW_FONT_FAMILY, - "Font familiy used to display file names", - NAUTILUS_PREFERENCE_STRING, - (gconstpointer) "helvetica"); + global_preferences_register_string_with_defaults (NAUTILUS_PREFERENCES_DIRECTORY_VIEW_FONT_FAMILY, + "Font familiy used to display file names", + "helvetica", + "helvetica", + "helvetica"); /* toolbar icons */ - nautilus_preferences_set_info (NAUTILUS_PREFERENCES_EAZEL_TOOLBAR_ICONS, - "Use Eazel's toolbar icons", - NAUTILUS_PREFERENCE_BOOLEAN, - (gconstpointer) FALSE); + global_preferences_register_boolean_with_defaults (NAUTILUS_PREFERENCES_EAZEL_TOOLBAR_ICONS, + "Use Eazel's toolbar icons", + FALSE, + FALSE, + FALSE); + + /* + * These dont have a UI (yet ? maybe in the advanced settings ?). + * They do need to have appropiate defaults nontheless. + */ + + global_preferences_register_string_with_defaults (NAUTILUS_PREFERENCES_ICON_THEME, + "Show entire filename", + "default", + "default", + "default"); + + global_preferences_register_boolean_with_defaults (NAUTILUS_PREFERENCES_SHOW_REAL_FILE_NAME, + "Show entire filename", + FALSE, + FALSE, + TRUE); + + global_preferences_register_boolean_with_defaults (NAUTILUS_PREFERENCES_SHOW_HIDDEN_FILES, + "Show hidden files", + FALSE, + TRUE, + TRUE); + + global_preferences_register_boolean_with_defaults (NAUTILUS_PREFERENCES_CAN_ADD_CONTENT, + "Can add Content", + FALSE, + TRUE, + TRUE); - /* Miscellaneous */ - nautilus_preferences_set_info (NAUTILUS_PREFERENCES_SHOW_REAL_FILE_NAME, - "Show entire file file", - NAUTILUS_PREFERENCE_BOOLEAN, - (gconstpointer) FALSE); + { + const char *user_main_directory; + char *novice_home_location; + char *intermediate_home_location; + char *hacker_home_location; + + /* FIXME bugzilla.eazel.com 715: This call needs to be spanked to conform. Should return a strduped string */ + user_main_directory = nautilus_get_user_main_directory (); + + novice_home_location = g_strdup_printf ("file://%s", user_main_directory); + intermediate_home_location = g_strdup_printf ("file://%s", g_get_home_dir()); + hacker_home_location = g_strdup_printf ("file://%s", g_get_home_dir()); + + global_preferences_register_string_with_defaults (NAUTILUS_PREFERENCES_HOME_URI, + "Home Location", + novice_home_location, + intermediate_home_location, + hacker_home_location); + + g_free (novice_home_location); + g_free (intermediate_home_location); + g_free (hacker_home_location); + } } static gboolean @@ -413,76 +558,6 @@ global_preferences_close_dialog_callback (GtkWidget *dialog, return TRUE; } -#define USER_LEVEL_NOVICE 0 -#define USER_LEVEL_INTERMEDIATE 1 -#define USER_LEVEL_HACKER 2 - -static void -user_level_changed_callback (GtkObject *user_level_manager, - gpointer user_data) -{ - int new_user_level; - char *home_uri_string; - - gboolean show_hidden_files = FALSE; - gboolean use_real_home = TRUE; - gboolean show_real_file_name = FALSE; - gboolean can_add_content = TRUE; - - const char *user_main_directory; - - new_user_level = nautilus_user_level_manager_get_user_level (); - - /* Set some preferences according to the user level */ - switch (new_user_level) { - case USER_LEVEL_NOVICE: - show_hidden_files = FALSE; - use_real_home = FALSE; - show_real_file_name = FALSE; - can_add_content = FALSE; - break; - - case USER_LEVEL_INTERMEDIATE: - show_hidden_files = FALSE; - use_real_home = TRUE; - show_real_file_name = FALSE; - can_add_content = TRUE; - break; - - case USER_LEVEL_HACKER: - default: - show_hidden_files = TRUE; - use_real_home = TRUE; - show_real_file_name = TRUE; - can_add_content = TRUE; - break; - } - - nautilus_preferences_set_boolean (NAUTILUS_PREFERENCES_SHOW_HIDDEN_FILES, - show_hidden_files); - - nautilus_preferences_set_boolean (NAUTILUS_PREFERENCES_SHOW_REAL_FILE_NAME, - show_real_file_name); - - nautilus_preferences_set_boolean (NAUTILUS_PREFERENCES_CAN_ADD_CONTENT, - can_add_content); - - /* FIXME bugzilla.eazel.com 715: This call needs to be spanked to conform. Should return a strduped string */ - user_main_directory = nautilus_get_user_main_directory (); - - if (use_real_home) - home_uri_string = g_strdup_printf ("file://%s", g_get_home_dir()); - else - home_uri_string = g_strdup_printf ("file://%s", user_main_directory); - - g_assert (home_uri_string != NULL); - - nautilus_preferences_set (NAUTILUS_PREFERENCES_HOME_URI, - home_uri_string); - - g_free (home_uri_string); -} - static void global_preferences_initialize_if_needed (void) { @@ -493,15 +568,6 @@ global_preferences_initialize_if_needed (void) } global_preferences_register_for_ui (); - - /* Register to find out about user level changes */ - gtk_signal_connect (GTK_OBJECT (nautilus_user_level_manager_get ()), - "user_level_changed", - user_level_changed_callback, - NULL); - - /* Invoke the callback once to make sure stuff is properly setup */ - user_level_changed_callback (NULL, NULL); initialized = TRUE; } @@ -512,40 +578,56 @@ global_preferences_initialize_if_needed (void) void nautilus_global_preferences_show_dialog (void) { - GtkWidget * global_prefs_dialog = global_preferences_get_dialog (); + GtkWidget *dialog = global_preferences_get_dialog (); - gtk_widget_show (global_prefs_dialog); + gtk_widget_show (dialog); } void nautilus_global_preferences_hide_dialog (void) { - GtkWidget * global_prefs_dialog = global_preferences_get_dialog (); + GtkWidget *dialog = global_preferences_get_dialog (); - gtk_widget_hide (global_prefs_dialog); + gtk_widget_hide (dialog); } void nautilus_global_preferences_set_dialog_title (const char *title) { - GtkWidget *global_prefs_dialog; + GtkWidget *dialog; g_return_if_fail (title != NULL); - global_prefs_dialog = global_preferences_get_dialog (); + dialog = global_preferences_get_dialog (); - gtk_window_set_title (GTK_WINDOW (global_prefs_dialog), title); + gtk_window_set_title (GTK_WINDOW (dialog), title); } void -nautilus_global_preferences_shutdown (void) +nautilus_global_preferences_dialog_update (void) { + gboolean was_showing = FALSE; + /* Free the dialog first, cause it has refs to preferences */ - GtkWidget * global_prefs_dialog = global_preferences_get_dialog (); - gtk_widget_destroy (global_prefs_dialog); + if (global_prefs_dialog != NULL) { + was_showing = GTK_WIDGET_VISIBLE (global_prefs_dialog); + + gtk_widget_destroy (global_prefs_dialog); + } + + global_prefs_dialog = global_preferences_create_dialog (); - gtk_signal_disconnect_by_func (GTK_OBJECT (nautilus_user_level_manager_get ()), - user_level_changed_callback, - NULL); + if (was_showing) { + nautilus_global_preferences_show_dialog (); + } +} + +void +nautilus_global_preferences_shutdown (void) +{ + /* Free the dialog first, cause it has refs to preferences */ + if (global_prefs_dialog != NULL) { + gtk_widget_destroy (global_prefs_dialog); + } /* Now free the preferences tables and stuff */ nautilus_preferences_shutdown (); |