예제 #1
0
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;
}
예제 #2
0
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;
}