static void update_desktop_directory (NemoDesktopDirectory *desktop) { char *desktop_path; char *desktop_uri; NemoDirectory *real_directory; real_directory = desktop->details->real_directory; if (real_directory != NULL) { g_hash_table_foreach_remove (desktop->details->callbacks, (GHRFunc) gtk_true, NULL); g_hash_table_foreach_remove (desktop->details->monitors, (GHRFunc) gtk_true, NULL); g_signal_handlers_disconnect_by_func (real_directory, done_loading_callback, desktop); g_signal_handlers_disconnect_by_func (real_directory, forward_files_added_cover, desktop); g_signal_handlers_disconnect_by_func (real_directory, forward_files_changed_cover, desktop); nemo_directory_unref (real_directory); } desktop_path = nemo_get_desktop_directory (); desktop_uri = g_filename_to_uri (desktop_path, NULL, NULL); real_directory = nemo_directory_get_by_uri (desktop_uri); g_free (desktop_uri); g_free (desktop_path); g_signal_connect_object (real_directory, "done_loading", G_CALLBACK (done_loading_callback), desktop, 0); g_signal_connect_object (real_directory, "files_added", G_CALLBACK (forward_files_added_cover), desktop, 0); g_signal_connect_object (real_directory, "files_changed", G_CALLBACK (forward_files_changed_cover), desktop, 0); desktop->details->real_directory = real_directory; }
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; }
static gchar * get_insertion_string (NemoAction *action, TokenType token_type, GList *selection, NemoFile *parent) { GList *l; GString *str = g_string_new(""); gboolean first = TRUE; switch (token_type) { case TOKEN_PATH_LIST: if (g_list_length (selection) > 0) { for (l = selection; l != NULL; l = l->next) { if (!first) str = insert_separator (action, str); str = insert_quote (action, str); gchar *path = get_path (action, NEMO_FILE (l->data)); if (path) str = score_append (action, str, path); g_free (path); str = insert_quote (action, str); first = FALSE; } } else { goto default_parent_path; } break; case TOKEN_URI_LIST: if (g_list_length (selection) > 0) { for (l = selection; l != NULL; l = l->next) { if (!first) str = insert_separator (action, str); str = insert_quote (action, str); gchar *uri = nemo_file_get_uri (NEMO_FILE (l->data)); str = score_append (action, str, uri); g_free (uri); str = insert_quote (action, str); first = FALSE; } } else { goto default_parent_path; } break; case TOKEN_PARENT_PATH: ; default_parent_path: ; gchar *path = get_path (action, parent); if (path == NULL) { gchar *name = nemo_file_get_display_name (parent); if (g_strcmp0 (name, "x-nemo-desktop") == 0) path = nemo_get_desktop_directory (); else path = g_strdup (""); g_free (name); } str = insert_quote (action, str); str = score_append (action, str, path); str = insert_quote (action, str); g_free (path); break; case TOKEN_FILE_DISPLAY_NAME: if (g_list_length (selection) > 0) { gchar *file_display_name = nemo_file_get_display_name (NEMO_FILE (selection->data)); str = score_append (action, str, file_display_name); g_free (file_display_name); } else { goto default_parent_display_name; } break; case TOKEN_PARENT_DISPLAY_NAME: ; default_parent_display_name: ; gchar *parent_display_name; gchar *real_display_name = nemo_file_get_display_name (parent); if (g_strcmp0 (real_display_name, "x-nemo-desktop") == 0) parent_display_name = g_strdup_printf (_("Desktop")); else parent_display_name = nemo_file_get_display_name (parent); g_free (real_display_name); str = insert_quote (action, str); str = score_append (action, str, parent_display_name); str = insert_quote (action, str); g_free (parent_display_name); break; case TOKEN_DEVICE: if (g_list_length (selection) > 0) { for (l = selection; l != NULL; l = l->next) { if (!first) str = insert_separator (action, str); str = insert_quote (action, str); gchar *dev = get_device_path (action, NEMO_FILE (l->data)); if (dev) str = score_append (action, str, dev); g_free (dev); str = insert_quote (action, str); first = FALSE; } } else { goto default_parent_path; } break; default: break; } gchar *ret = str->str; g_string_free (str, FALSE); return ret; }