int gth_sort_by_filename_but_ignore_path (const char *name1, const char *name2) { /* This sorts by the filename. It ignores the path portion, if present. */ /* Based heavily on the Nautilus compare_by_display_name (libnautilus-private/nautilus-file.c) function, for consistent Nautilus / gthumb behaviour. */ char *key_1, *key_2; gboolean sort_last_1, sort_last_2; int compare; char *unesc_name1, *unesc_name2; sort_last_1 = file_name_from_path (name1)[0] == SORT_LAST_CHAR1 || file_name_from_path (name1)[0] == SORT_LAST_CHAR2; sort_last_2 = file_name_from_path (name2)[0] == SORT_LAST_CHAR1 || file_name_from_path (name2)[0] == SORT_LAST_CHAR2; if (sort_last_1 && !sort_last_2) { compare = +1; } else if (!sort_last_1 && sort_last_2) { compare = -1; } else { unesc_name1 = gnome_vfs_unescape_string (name1, ""); unesc_name2 = gnome_vfs_unescape_string (name2, ""); key_1 = g_utf8_collate_key_for_filename (file_name_from_path (unesc_name1), -1); key_2 = g_utf8_collate_key_for_filename (file_name_from_path (unesc_name2), -1); compare = strcmp (key_1, key_2); g_free(key_1); g_free(key_2); g_free(unesc_name1); g_free(unesc_name2); } return compare; }
nsresult HeaderSniffer::PerformSave (const GulCString &defaultFileName) { EmbedPersistFlags flags; PRBool askDownloadDest; flags = galeon_embed_persist_get_flags (mEmbedPersist); askDownloadDest = (flags & EMBED_PERSIST_ASK_DESTINATION) || eel_gconf_get_boolean (CONF_DOWNLOADING_ASK_DIR); /* Validate the file name to ensure legality. */ char *default_name = g_strdup (defaultFileName.get()); default_name = g_strdelimit (default_name, ":/", ' '); char *filename; filename = gnome_vfs_unescape_string (default_name, NULL); if (!g_utf8_validate (filename, -1, NULL)) { g_free (filename); filename = g_strdup (default_name); } g_free (default_name); GtkWidget *parent; parent = galeon_embed_persist_get_fc_parent (mEmbedPersist); if (!askDownloadDest) { nsCOMPtr<nsILocalFile> destFile; nsresult rv = BuildDownloadPath (filename, parent, getter_AddRefs (destFile)); if (NS_SUCCEEDED (rv)) { g_free (filename); return InitiateDownload (destFile); } } GulFileChooser *dialog; const char *title; title = galeon_embed_persist_get_fc_title (mEmbedPersist); dialog = gul_file_chooser_new (title ? title: _("Save"), GTK_WIDGET (parent), GTK_FILE_CHOOSER_ACTION_SAVE, CONF_STATE_LAST_DOWNLOAD_DIR); if (mDocument && (flags & EMBED_PERSIST_SAVE_CONTENT)) { /* Reset the flags to turn off content, the user toggles * if they want to turn it on */ GtkWidget *toggle; int f = flags & ~EMBED_PERSIST_SAVE_CONTENT; flags = (EmbedPersistFlags) f; galeon_embed_persist_set_flags (mEmbedPersist, flags); toggle = gtk_check_button_new_with_mnemonic (_("Save _with content")); gtk_widget_show (toggle); gtk_file_chooser_set_extra_widget (GTK_FILE_CHOOSER (dialog), toggle); g_signal_connect (toggle, "toggled", G_CALLBACK (content_toggled_cb), mEmbedPersist); } gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (dialog), filename); NS_ADDREF (this); /* add a ref to this object, so it doesn't dissappear */ g_signal_connect (dialog, "response", G_CALLBACK (filechooser_response_cb), this); guint32 user_time; g_object_get (mEmbedPersist, "user_time", &user_time, NULL); if (!user_time) { g_warning ("No user time specified in embed persist for file save" ); } gul_x11_window_update_user_time (GTK_WIDGET (dialog), user_time); gtk_widget_show (GTK_WIDGET (dialog)); g_free (filename); return NS_OK; }