static void nemo_main_application_continue_startup (NemoApplication *app) { NemoMainApplication *self = NEMO_MAIN_APPLICATION (app); /* create DBus manager */ self->priv->dbus_manager = nemo_dbus_manager_new (); self->priv->fdb_manager = nemo_freedesktop_dbus_new (); /* Check the user's ~/.config/nemo directory and post warnings * if there are problems. */ nemo_application_check_required_directory (app, nemo_get_user_directory ()); /* register views */ nemo_icon_view_register (); nemo_list_view_register (); nemo_icon_view_compact_register (); #if defined(ENABLE_EMPTY_VIEW) && ENABLE_EMPTY_VIEW nemo_empty_view_register (); #endif /* Watch for unmounts so we can close open windows */ /* TODO-gio: This should be using the UNMOUNTED feature of GFileMonitor instead */ self->priv->volume_monitor = g_volume_monitor_get (); g_signal_connect_object (self->priv->volume_monitor, "mount_removed", G_CALLBACK (mount_removed_callback), self, 0); g_signal_connect_object (self->priv->volume_monitor, "mount_added", G_CALLBACK (mount_added_callback), self, 0); g_signal_connect_swapped (nemo_window_state, "changed::" NEMO_WINDOW_STATE_START_WITH_MENU_BAR, G_CALLBACK (menu_state_changed_callback), self); }
static gboolean check_required_directories (NemoApplication *application) { char *user_directory; char *desktop_directory; GSList *directories; gboolean ret; g_assert (NEMO_IS_APPLICATION (application)); ret = TRUE; user_directory = nemo_get_user_directory (); desktop_directory = nemo_get_desktop_directory (); directories = NULL; if (!g_file_test (user_directory, G_FILE_TEST_IS_DIR)) { directories = g_slist_prepend (directories, user_directory); } if (!g_file_test (desktop_directory, G_FILE_TEST_IS_DIR)) { directories = g_slist_prepend (directories, desktop_directory); } if (directories != NULL) { int failed_count; GString *directories_as_string; GSList *l; char *error_string; const char *detail_string; GtkDialog *dialog; ret = FALSE; failed_count = g_slist_length (directories); directories_as_string = g_string_new ((const char *)directories->data); for (l = directories->next; l != NULL; l = l->next) { g_string_append_printf (directories_as_string, ", %s", (const char *)l->data); } if (failed_count == 1) { error_string = g_strdup_printf (_("Nemo could not create the required folder \"%s\"."), directories_as_string->str); detail_string = _("Before running Nemo, please create the following folder, or " "set permissions such that Nemo can create it."); } else { error_string = g_strdup_printf (_("Nemo could not create the following required folders: " "%s."), directories_as_string->str); detail_string = _("Before running Nemo, please create these folders, or " "set permissions such that Nemo can create them."); } dialog = eel_show_error_dialog (error_string, detail_string, NULL); /* We need the main event loop so the user has a chance to see the dialog. */ gtk_application_add_window (GTK_APPLICATION (application), GTK_WINDOW (dialog)); g_string_free (directories_as_string, TRUE); g_free (error_string); } g_slist_free (directories); g_free (user_directory); g_free (desktop_directory); return ret; }