commit 0b579ad93f99133e6d92af08a36a3d5693edad5f Author: Vincent Untz Date: Mon Oct 10 09:12:59 2011 +0200 Do not crash if nautilus schema is not present A lot of users use file-roller in non-GNOME environments, where nautilus is not installed. We don't want to crash in that case as we only need the nautilus schema to determine if we use single-click vs double-click. https://bugzilla.gnome.org/show_bug.cgi?id=649094 diff --git a/src/fr-window.c b/src/fr-window.c index 743c8fe..0357b68 100644 --- a/src/fr-window.c +++ b/src/fr-window.c @@ -4642,6 +4642,9 @@ is_single_click_policy (FrWindow *window) char *value; gboolean result; + if (!window->priv->settings_nautilus) + return FALSE; + value = g_settings_get_string (window->priv->settings_nautilus, NAUTILUS_CLICK_POLICY); result = (value != NULL) && (strncmp (value, "single", 6) == 0); g_free (value); @@ -5425,6 +5428,8 @@ fr_window_construct (FrWindow *window) GtkToolItem *open_recent_tool_item; GtkWidget *menu_item; GError *error = NULL; + const char * const *schemas; + const char *schema; /* data common to all windows. */ @@ -5441,7 +5446,15 @@ fr_window_construct (FrWindow *window) window->priv->settings_ui = g_settings_new (FILE_ROLLER_SCHEMA_UI); window->priv->settings_general = g_settings_new (FILE_ROLLER_SCHEMA_GENERAL); window->priv->settings_dialogs = g_settings_new (FILE_ROLLER_SCHEMA_DIALOGS); - window->priv->settings_nautilus = g_settings_new (NAUTILUS_SCHEMA); + + /* Only use the nautilus schema if it's installed */ + schemas = g_settings_list_schemas(); + for (; *schemas != NULL; schemas++) { + if (g_strcmp0 (*schemas, NAUTILUS_SCHEMA) == 0) { + window->priv->settings_nautilus = g_settings_new (NAUTILUS_SCHEMA); + break; + } + } /* Create the application. */ @@ -6045,10 +6058,12 @@ fr_window_construct (FrWindow *window) "changed::" PREF_LISTING_USE_MIME_ICONS, G_CALLBACK (pref_use_mime_icons_changed), window); - g_signal_connect (window->priv->settings_nautilus, - "changed::" NAUTILUS_CLICK_POLICY, - G_CALLBACK (pref_click_policy_changed), - window); + + if (window->priv->settings_nautilus) + g_signal_connect (window->priv->settings_nautilus, + "changed::" NAUTILUS_CLICK_POLICY, + G_CALLBACK (pref_click_policy_changed), + window); /* Give focus to the list. */