Read in multiple files from the file chooser when in openMultiple mode.

Fixes bug 255900.
r+sr=bryner a=asa


git-svn-id: svn://10.0.0.236/trunk@162842 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
caillon%redhat.com
2004-09-27 17:52:57 +00:00
parent ef0e4d73b4
commit cfb468f0b8
2 changed files with 34 additions and 7 deletions

View File

@@ -43,7 +43,7 @@
#include "nsIURI.h"
#include "nsIWidget.h"
#include "nsILocalFile.h"
#include "nsISupportsArray.h"
#include "nsArrayEnumerator.h"
#include "nsVoidArray.h"
#include "nsMemory.h"
#include "nsEnumeratorUtils.h"
@@ -80,6 +80,7 @@ typedef enum
typedef gchar* (*_gtk_file_chooser_get_filename_fn)(GtkFileChooser *chooser);
typedef GSList* (*_gtk_file_chooser_get_filenames_fn)(GtkFileChooser *chooser);
typedef GtkWidget* (*_gtk_file_chooser_dialog_new_fn)(const gchar *title,
GtkWindow *parent,
GtkFileChooserAction action,
@@ -95,6 +96,7 @@ typedef void (*_gtk_file_filter_set_name_fn)(GtkFileFilter* filter, const gchar*
DECL_FUNC_PTR(gtk_file_chooser_get_filename);
DECL_FUNC_PTR(gtk_file_chooser_get_filenames);
DECL_FUNC_PTR(gtk_file_chooser_dialog_new);
DECL_FUNC_PTR(gtk_file_chooser_set_select_multiple);
DECL_FUNC_PTR(gtk_file_chooser_set_current_name);
@@ -148,6 +150,7 @@ nsFilePicker::LoadSymbolsGTK24()
GET_LIBGTK_FUNC(gtk_file_chooser_get_filename);
}
GET_LIBGTK_FUNC(gtk_file_chooser_get_filenames);
GET_LIBGTK_FUNC(gtk_file_chooser_dialog_new);
GET_LIBGTK_FUNC(gtk_file_chooser_set_select_multiple);
GET_LIBGTK_FUNC(gtk_file_chooser_set_current_name);
@@ -211,13 +214,37 @@ nsFilePicker::~nsFilePicker()
{
}
void
ReadMultipleFiles(gpointer filename, gpointer array)
{
nsCOMPtr<nsILocalFile> localfile;
nsresult rv = NS_NewNativeLocalFile(nsDependentCString(NS_STATIC_CAST(char*, filename)),
PR_FALSE,
getter_AddRefs(localfile));
if (NS_SUCCEEDED(rv)) {
nsCOMArray<nsILocalFile>& files = *NS_STATIC_CAST(nsCOMArray<nsILocalFile>*, array);
files.AppendObject(localfile);
}
g_free(filename);
}
void
nsFilePicker::ReadValuesFromFileChooser(GtkWidget *file_chooser)
{
// Grab the filename
gchar *filename = _gtk_file_chooser_get_filename (GTK_FILE_CHOOSER(file_chooser));
mFile.Assign(filename);
g_free(filename);
mFiles.Clear();
if (mMode == nsIFilePicker::modeOpenMultiple) {
mFile.Truncate();
GSList *list = _gtk_file_chooser_get_filenames (GTK_FILE_CHOOSER(file_chooser));
g_slist_foreach(list, ReadMultipleFiles, NS_STATIC_CAST(gpointer, &mFiles));
g_slist_free(list);
} else {
gchar *filename = _gtk_file_chooser_get_filename (GTK_FILE_CHOOSER(file_chooser));
mFile.Assign(filename);
g_free(filename);
}
// Remember last used directory.
nsCOMPtr<nsILocalFile> file;

View File

@@ -43,10 +43,10 @@
#include "nsBaseFilePicker.h"
#include "nsString.h"
#include "nsVoidArray.h"
#include "nsCOMArray.h"
class nsIWidget;
class nsILocalFile;
class nsISupportsArray;
class PRLibrary;
class nsFilePicker : public nsBaseFilePicker
@@ -70,7 +70,7 @@ protected:
nsCOMPtr<nsIWidget> mParentWidget;
nsCOMPtr<nsILocalFile> mDisplayDirectory;
nsCOMPtr<nsISupportsArray> mFiles;
nsCOMArray<nsILocalFile> mFiles;
PRInt16 mMode;
PRInt16 mSelectedType;