mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-09 03:15:11 +00:00
fix for unix file picker not handling null window parents bug 34328 r=brendan, slamm
fix for mailnews' file->save as dialog not saving files on unix in due to its handling of file extentions and filters. this code now uses nsIFilePicker. fixes nsbeta2+ bug 31096. r=mscott
This commit is contained in:
parent
a5516c5d4a
commit
2804c173c5
@ -171,7 +171,7 @@ var nsOpenCommand =
|
||||
fp.init(window, window.editorShell.GetString("OpenHTMLFile"), nsIFilePicker.modeOpen);
|
||||
|
||||
// While we include "All", include filters that prefer HTML and Text files
|
||||
fp.setFilters(nsIFilePicker.filterText | nsIFilePicker.filterHTML | nsIFilePicker.filterAll);
|
||||
fp.appendFilters(nsIFilePicker.filterText | nsIFilePicker.filterHTML | nsIFilePicker.filterAll);
|
||||
|
||||
/* doesn't handle *.shtml files */
|
||||
try {
|
||||
|
@ -735,10 +735,10 @@ function GetLocalFileURL(filterType)
|
||||
fp.init(window, editorShell.GetString("OpenHTMLFile"), nsIFilePicker.modeOpen);
|
||||
|
||||
if (filterType == "img")
|
||||
fp.setFilters(nsIFilePicker.filterImages);
|
||||
fp.appendFilters(nsIFilePicker.filterImages);
|
||||
else
|
||||
// While we allow "All", include filters that prefer HTML and Text files
|
||||
fp.setFilters(nsIFilePicker.filterText | nsIFilePicker.filterHTML | nsIFilePicker.filterAll);
|
||||
fp.appendFilters(nsIFilePicker.filterText | nsIFilePicker.filterHTML | nsIFilePicker.filterAll);
|
||||
|
||||
/* doesn't handle *.shtml files */
|
||||
try {
|
||||
|
@ -120,8 +120,8 @@ nsPSMUIHandlerImpl::PromptForFile(const PRUnichar *prompt, const char *fileRegEx
|
||||
|
||||
|
||||
fp->Init(nsnull, prompt, nsIFilePicker::modeOpen);
|
||||
fp->SetFilters(nsIFilePicker::filterAll);
|
||||
fp->AppendFilter(NS_ConvertASCIItoUCS2(fileRegEx).GetUnicode(), NS_ConvertASCIItoUCS2(fileRegEx).GetUnicode());
|
||||
fp->AppendFilters(nsIFilePicker::filterAll);
|
||||
PRInt16 mode;
|
||||
nsresult rv = fp->Show(&mode);
|
||||
|
||||
|
@ -27,8 +27,8 @@
|
||||
// xpcom
|
||||
#include "nsIComponentManager.h"
|
||||
#include "nsIServiceManager.h"
|
||||
#include "nsIFileSpecWithUI.h"
|
||||
#include "nsFileStream.h"
|
||||
#include "nsIFileSpecWithUI.h"
|
||||
#include "nsIStringStream.h"
|
||||
#include "nsEscape.h"
|
||||
#include "nsXPIDLString.h"
|
||||
@ -101,9 +101,8 @@
|
||||
#include "nsMsgPrintEngine.h"
|
||||
|
||||
// Save As
|
||||
#include "nsIFileWidget.h"
|
||||
#include "nsIFilePicker.h"
|
||||
#include "nsIStringBundle.h"
|
||||
#include "nsWidgetsCID.h"
|
||||
#include "nsINetSupportDialogService.h"
|
||||
|
||||
// Find / Find Again
|
||||
@ -115,7 +114,6 @@ static NS_DEFINE_CID(kRDFServiceCID, NS_RDFSERVICE_CID);
|
||||
static NS_DEFINE_CID(kMsgSendLaterCID, NS_MSGSENDLATER_CID);
|
||||
static NS_DEFINE_CID(kMsgCopyServiceCID, NS_MSGCOPYSERVICE_CID);
|
||||
static NS_DEFINE_CID(kMsgPrintEngineCID, NS_MSG_PRINTENGINE_CID);
|
||||
static NS_DEFINE_IID(kCFileWidgetCID, NS_FILEWIDGET_CID);
|
||||
static NS_DEFINE_CID(kNetSupportDialogCID, NS_NETSUPPORTDIALOG_CID);
|
||||
|
||||
/* This is the next generation string retrieval call */
|
||||
@ -724,26 +722,9 @@ done:
|
||||
NS_IMETHODIMP
|
||||
nsMessenger::SaveAs(const char* url, PRBool asFile, nsIMsgIdentity* identity, nsIMsgWindow *aMsgWindow)
|
||||
{
|
||||
nsresult rv = NS_ERROR_FAILURE;
|
||||
nsresult rv = NS_ERROR_FAILURE;
|
||||
nsIMsgMessageService* messageService = nsnull;
|
||||
nsCOMPtr<nsIFileSpec> aSpec;
|
||||
PRInt16 saveAsFileType = 0; // 0 - raw, 1 = html, 2 = text;
|
||||
const char *defaultFile = "mail";
|
||||
nsCOMPtr<nsIFileWidget> fileWidget;
|
||||
nsAutoString promptString;
|
||||
nsString* titles = nsnull;
|
||||
nsString* filters = nsnull;
|
||||
nsString* nextTitle;
|
||||
nsString* nextFilter;
|
||||
nsAutoString HTMLFiles;
|
||||
nsAutoString TextFiles;
|
||||
nsFileSpec parentPath;
|
||||
nsFileDlgResults dialogResult;
|
||||
nsFileSpec tFileSpec;
|
||||
nsFileSpec fileSpec;
|
||||
char *fileName = nsnull;
|
||||
nsCString tmpFilenameString;
|
||||
nsCString extString;
|
||||
nsAutoString defaultFile(NS_ConvertASCIItoUCS2("mail"));
|
||||
nsCOMPtr<nsIUrlListener> urlListener;
|
||||
nsSaveAsListener *aListener = nsnull;
|
||||
nsCOMPtr<nsIURI> aURL;
|
||||
@ -753,10 +734,9 @@ nsMessenger::SaveAs(const char* url, PRBool asFile, nsIMsgIdentity* identity, ns
|
||||
nsCOMPtr<nsIStreamListener> convertedListener;
|
||||
PRBool needDummyHeader = PR_TRUE;
|
||||
PRBool canonicalLineEnding = PR_FALSE;
|
||||
|
||||
NS_WITH_SERVICE(nsIStreamConverterService,
|
||||
streamConverterService,
|
||||
kIStreamConverterServiceCID, &rv);
|
||||
PRInt16 saveAsFileType = 0; // 0 - raw, 1 = html, 2 = text;
|
||||
|
||||
nsCOMPtr<nsIStreamConverterService> streamConverterService = do_GetService(kIStreamConverterServiceCID, &rv);
|
||||
if (NS_FAILED(rv)) goto done;
|
||||
|
||||
if (!url) {
|
||||
@ -767,106 +747,60 @@ nsMessenger::SaveAs(const char* url, PRBool asFile, nsIMsgIdentity* identity, ns
|
||||
rv = GetMessageServiceFromURI(url, &messageService);
|
||||
if (NS_FAILED(rv)) goto done;
|
||||
|
||||
if (asFile)
|
||||
{
|
||||
rv = nsComponentManager::CreateInstance(kCFileWidgetCID, nsnull,
|
||||
NS_GET_IID(nsIFileWidget),
|
||||
getter_AddRefs(fileWidget));
|
||||
if (asFile) {
|
||||
|
||||
nsCOMPtr<nsIFilePicker> filePicker = do_CreateInstance("component://mozilla/filepicker", &rv);
|
||||
if (NS_FAILED(rv)) goto done;
|
||||
|
||||
promptString = GetString(NS_ConvertASCIItoUCS2("SaveMailAs").GetUnicode());
|
||||
|
||||
titles = new nsString[3];
|
||||
if (!titles)
|
||||
{
|
||||
rv = NS_ERROR_OUT_OF_MEMORY;
|
||||
goto done;
|
||||
}
|
||||
filters = new nsString[3];
|
||||
if (!filters)
|
||||
{
|
||||
rv = NS_ERROR_OUT_OF_MEMORY;
|
||||
goto done;
|
||||
}
|
||||
nextTitle = titles;
|
||||
nextFilter = filters;
|
||||
// The names of the file types are localizable
|
||||
fileWidget->SetDefaultString(NS_ConvertASCIItoUCS2(defaultFile));
|
||||
filePicker->Init(nsnull, GetString(NS_ConvertASCIItoUCS2("SaveMailAs").GetUnicode()), nsIFilePicker::modeSave);
|
||||
|
||||
HTMLFiles = GetString(NS_ConvertASCIItoUCS2("HTMLFiles").GetUnicode());
|
||||
TextFiles = GetString(NS_ConvertASCIItoUCS2("TextFiles").GetUnicode());
|
||||
if (HTMLFiles.Length() == 0 || TextFiles.Length() == 0)
|
||||
goto SkipFilters;
|
||||
|
||||
*nextTitle++ = GetString(NS_ConvertASCIItoUCS2("EMLFiles").GetUnicode());
|
||||
(*nextFilter++).AssignWithConversion("*.eml");
|
||||
*nextTitle++ = HTMLFiles;
|
||||
(*nextFilter++).AssignWithConversion("*.htm; *.html; *.shtml");
|
||||
*nextTitle++ = TextFiles;
|
||||
(*nextFilter++).AssignWithConversion("*.txt");
|
||||
fileWidget->SetFilterList(3, titles, filters);
|
||||
|
||||
SkipFilters:
|
||||
filePicker->SetDefaultString(defaultFile.GetUnicode());
|
||||
filePicker->AppendFilter(GetString(NS_ConvertASCIItoUCS2("EMLFiles").GetUnicode()),
|
||||
NS_ConvertASCIItoUCS2("*.eml").GetUnicode());
|
||||
filePicker->AppendFilters(nsIFilePicker::filterHTML | nsIFilePicker::filterText | nsIFilePicker::filterAll);
|
||||
|
||||
dialogResult = fileWidget->PutFile(nsnull, promptString, tFileSpec);
|
||||
delete [] titles;
|
||||
delete [] filters;
|
||||
|
||||
if (dialogResult == nsFileDlgResults_Cancel)
|
||||
PRInt16 dialogResult;
|
||||
filePicker->Show(&dialogResult);
|
||||
|
||||
if (dialogResult == nsIFilePicker::returnCancel)
|
||||
goto done;
|
||||
|
||||
rv = fileWidget->GetFile(fileSpec);
|
||||
nsCOMPtr<nsILocalFile> localFile;
|
||||
rv = filePicker->GetFile(getter_AddRefs(localFile));
|
||||
if (NS_FAILED(rv)) goto done;
|
||||
|
||||
fileName = fileSpec.GetLeafName();
|
||||
tmpFilenameString = fileName;
|
||||
|
||||
nsCRT::free(fileName);
|
||||
nsXPIDLCString tmpFileName;
|
||||
rv = localFile->GetLeafName(getter_Copies(tmpFileName));
|
||||
if (NS_FAILED(rv)) goto done;
|
||||
nsCAutoString fileName(tmpFileName);
|
||||
|
||||
// First, check if they put ANY extension on the file, if not,
|
||||
// then we should look at the type of file they have chosen and
|
||||
// tack on the file extension for them.
|
||||
//
|
||||
if (tmpFilenameString.RFind(".", PR_TRUE) == -1)
|
||||
if (fileName.RFind(".", PR_TRUE) != -1)
|
||||
{
|
||||
fileWidget->GetSelectedType(saveAsFileType);
|
||||
switch (saveAsFileType) {
|
||||
case 2:
|
||||
extString = ".html";
|
||||
break;
|
||||
case 3:
|
||||
extString = ".txt";
|
||||
break;
|
||||
default:
|
||||
case 1:
|
||||
extString = ".eml";
|
||||
break;
|
||||
}
|
||||
|
||||
// Doing this since the GetSelectedType() is not zero
|
||||
// relative
|
||||
saveAsFileType--;
|
||||
|
||||
// No append the extension and create the output stream
|
||||
tmpFilenameString.Append(extString);
|
||||
fileSpec.SetLeafName(tmpFilenameString.GetBuffer());
|
||||
rv = NS_NewFileSpecWithSpec(fileSpec, getter_AddRefs(aSpec));
|
||||
}
|
||||
else
|
||||
{
|
||||
if (tmpFilenameString.RFind(".htm", PR_TRUE) != -1)
|
||||
if (fileName.RFind(".htm", PR_TRUE) != -1)
|
||||
saveAsFileType = 1;
|
||||
else if (tmpFilenameString.RFind(".txt", PR_TRUE) != -1)
|
||||
else if (fileName.RFind(".txt", PR_TRUE) != -1)
|
||||
saveAsFileType = 2;
|
||||
else
|
||||
saveAsFileType = 0; // .eml type
|
||||
|
||||
rv = NS_NewFileSpecWithSpec(fileSpec, getter_AddRefs(aSpec));
|
||||
} else {
|
||||
saveAsFileType = 0; // .eml type
|
||||
}
|
||||
|
||||
if (NS_FAILED(rv)) goto done;
|
||||
|
||||
aListener = new nsSaveAsListener(aSpec, this);
|
||||
|
||||
// XXX argh! converting from nsILocalFile to nsFileSpec ... oh baby, lets drop from unicode to ascii too
|
||||
// nsXPIDLString path;
|
||||
// localFile->GetUnicodePath(getter_Copies(path));
|
||||
nsXPIDLCString path;
|
||||
localFile->GetPath(getter_Copies(path));
|
||||
nsCOMPtr<nsIFileSpec> fileSpec = do_CreateInstance("component://netscape/filespec", &rv);
|
||||
if (NS_FAILED(rv)) goto done;
|
||||
fileSpec->SetNativePath(path);
|
||||
|
||||
aListener = new nsSaveAsListener(fileSpec, this);
|
||||
if (!aListener) {
|
||||
rv = NS_ERROR_OUT_OF_MEMORY;
|
||||
goto done;
|
||||
@ -881,7 +815,7 @@ nsMessenger::SaveAs(const char* url, PRBool asFile, nsIMsgIdentity* identity, ns
|
||||
switch (saveAsFileType) {
|
||||
case 0:
|
||||
default:
|
||||
rv = messageService->SaveMessageToDisk(url, aSpec, PR_TRUE,
|
||||
rv = messageService->SaveMessageToDisk(url, fileSpec, PR_TRUE,
|
||||
urlListener, nsnull,
|
||||
PR_FALSE, mMsgWindow);
|
||||
break;
|
||||
@ -932,15 +866,17 @@ nsMessenger::SaveAs(const char* url, PRBool asFile, nsIMsgIdentity* identity, ns
|
||||
nsnull, nsnull, nsnull);
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
{
|
||||
// ** save as Template
|
||||
fileSpec = "nsmail.tmp";
|
||||
rv = NS_NewFileSpecWithSpec(fileSpec, getter_AddRefs(aSpec));
|
||||
nsCOMPtr<nsIFileSpec> fileSpec;
|
||||
nsFileSpec tmpFileSpec = "nsmail.tmp";
|
||||
rv = NS_NewFileSpecWithSpec(tmpFileSpec, getter_AddRefs(fileSpec));
|
||||
if (NS_FAILED(rv)) goto done;
|
||||
|
||||
aListener = new nsSaveAsListener(aSpec, this);
|
||||
aListener = new nsSaveAsListener(fileSpec, this);
|
||||
if (!aListener) {
|
||||
rv = NS_ERROR_OUT_OF_MEMORY;
|
||||
goto done;
|
||||
@ -949,8 +885,7 @@ nsMessenger::SaveAs(const char* url, PRBool asFile, nsIMsgIdentity* identity, ns
|
||||
NS_ADDREF(aListener);
|
||||
|
||||
if (identity)
|
||||
rv = identity->GetStationeryFolder(
|
||||
getter_Copies(aListener->m_templateUri));
|
||||
rv = identity->GetStationeryFolder(getter_Copies(aListener->m_templateUri));
|
||||
if (NS_FAILED(rv)) goto done;
|
||||
|
||||
needDummyHeader =
|
||||
@ -964,7 +899,7 @@ nsMessenger::SaveAs(const char* url, PRBool asFile, nsIMsgIdentity* identity, ns
|
||||
getter_AddRefs(urlListener));
|
||||
if (NS_FAILED(rv)) goto done;
|
||||
|
||||
rv = messageService->SaveMessageToDisk(url, aSpec,
|
||||
rv = messageService->SaveMessageToDisk(url, fileSpec,
|
||||
needDummyHeader,
|
||||
urlListener, nsnull,
|
||||
canonicalLineEnding, mMsgWindow);
|
||||
|
@ -68,7 +68,7 @@ function chooseProfileFolder( aRootFolder )
|
||||
try {
|
||||
var fp = Components.classes["component://mozilla/filepicker"].createInstance(Components.interfaces.nsIFilePicker);
|
||||
fp.init(window, bundle.GetStringFromName("chooseFolder"), Components.interfaces.nsIFilePicker.modeGetFolder);
|
||||
fp.setFilters(Components.interfaces.nsIFilePicker.filterAll);
|
||||
fp.appendFilters(Components.interfaces.nsIFilePicker.filterAll);
|
||||
fp.show();
|
||||
// later change to
|
||||
aRootFolder = fp.file.unicodePath;
|
||||
|
@ -56,12 +56,12 @@ interface nsIFilePicker : nsISupports
|
||||
void init(in nsIDOMWindow parent, in wstring title, in short mode);
|
||||
|
||||
/**
|
||||
* Set filter list to something in the predefined list
|
||||
* Append to the filter list with things from the predefined list
|
||||
*
|
||||
* @param filters mask of filters i.e. (filterAll | filterHTML)
|
||||
*
|
||||
*/
|
||||
void setFilters(in long filterMask);
|
||||
void appendFilters(in long filterMask);
|
||||
|
||||
/**
|
||||
* Add a filter
|
||||
|
@ -379,7 +379,7 @@ nsFilePicker::PutLocalFile(Str255 & inTitle, Str255 & inDefaultName, FSSpec* out
|
||||
//
|
||||
//-------------------------------------------------------------------------
|
||||
|
||||
NS_IMETHODIMP nsFilePicker::SetFilters(PRInt32 filterMask)
|
||||
NS_IMETHODIMP nsFilePicker::AppendFilters(PRInt32 filterMask)
|
||||
{
|
||||
|
||||
#if USE_IC // FOR NOW JUST BYPASS ALL THIS CODE
|
||||
|
@ -57,7 +57,6 @@ nsFilePicker::nsFilePicker()
|
||||
mUnicodeEncoder = nsnull;
|
||||
mUnicodeDecoder = nsnull;
|
||||
mDisplayDirectory = do_CreateInstance("component://mozilla/file/local");
|
||||
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
@ -204,7 +203,7 @@ NS_IMETHODIMP nsFilePicker::Show(PRInt16 *retval)
|
||||
//
|
||||
//-------------------------------------------------------------------------
|
||||
|
||||
NS_IMETHODIMP nsFilePicker::SetFilters(PRInt32 aFilterMask)
|
||||
NS_IMETHODIMP nsFilePicker::AppendFilters(PRInt32 aFilterMask)
|
||||
{
|
||||
nsresult rv;
|
||||
nsCOMPtr<nsIStringBundleService> stringService = do_GetService(kStringBundleServiceCID);
|
||||
@ -218,7 +217,6 @@ NS_IMETHODIMP nsFilePicker::SetFilters(PRInt32 aFilterMask)
|
||||
PRUnichar *title;
|
||||
PRUnichar *filter;
|
||||
|
||||
mFilterList.SetLength(0);
|
||||
if (aFilterMask & filterAll) {
|
||||
stringBundle->GetStringFromName(NS_ConvertASCIItoUCS2("allTitle").GetUnicode(), &title);
|
||||
stringBundle->GetStringFromName(NS_ConvertASCIItoUCS2("allFilter").GetUnicode(), &filter);
|
||||
|
@ -132,6 +132,15 @@ interface nsIAppShellService : nsISupports
|
||||
*/
|
||||
void GetHiddenWindow(out nsIXULWindow aResult);
|
||||
|
||||
/**
|
||||
* Return the (singleton) application hidden window, automatically created
|
||||
* and maintained by this AppShellService.
|
||||
* @param aResult the hidden window. Do not unhide hidden window.
|
||||
* Do not taunt hidden window.
|
||||
*/
|
||||
nsIDOMWindow getHiddenDOMWindow();
|
||||
|
||||
|
||||
/**
|
||||
* Return the (singleton) application hidden window as an nsIDOMWindow,
|
||||
* and, the corresponding JavaScript context pointer. This is useful
|
||||
|
@ -637,6 +637,22 @@ nsAppShellService::GetHiddenWindow(nsIXULWindow **aWindow)
|
||||
return *aWindow ? NS_OK : NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsAppShellService::GetHiddenDOMWindow(nsIDOMWindow **aWindow)
|
||||
{
|
||||
nsresult rv;
|
||||
nsCOMPtr<nsIDocShell> docShell;
|
||||
rv = mHiddenWindow->GetDocShell(getter_AddRefs(docShell));
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
nsCOMPtr<nsIDOMWindow> hiddenDOMWindow(do_GetInterface(docShell, &rv));
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
*aWindow = hiddenDOMWindow;
|
||||
NS_IF_ADDREF(*aWindow);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsAppShellService::GetHiddenWindowAndJSContext(nsIDOMWindow **aWindow,
|
||||
JSContext **aJSContext)
|
||||
|
@ -803,7 +803,7 @@ function RevealSearchPanel()
|
||||
try {
|
||||
var fp = Components.classes["component://mozilla/filepicker"].createInstance(nsIFilePicker);
|
||||
fp.init(window, bundle.GetStringFromName("openFile"), nsIFilePicker.modeOpen);
|
||||
fp.setFilters(nsIFilePicker.filterHTML | nsIFilePicker.filterText |
|
||||
fp.appendFilters(nsIFilePicker.filterHTML | nsIFilePicker.filterText |
|
||||
nsIFilePicker.filterAll | nsIFilePicker.filterImages | nsIFilePicker.filterXML);
|
||||
if (fp.show() == nsIFilePicker.returnOK) {
|
||||
openNewWindowWith(fp.fileURL.spec);
|
||||
|
@ -120,9 +120,9 @@ function onChooseFile()
|
||||
|
||||
// When loading into Composer, direct user to prefer HTML files and text files:
|
||||
if (dialog.openAppList.data == "2")
|
||||
fp.setFilters(nsIFilePicker.filterHTML | nsIFilePicker.filterText | nsIFilePicker.filterAll);
|
||||
fp.appendFilters(nsIFilePicker.filterHTML | nsIFilePicker.filterText | nsIFilePicker.filterAll);
|
||||
else
|
||||
fp.setFilters(nsIFilePicker.filterHTML | nsIFilePicker.filterText |
|
||||
fp.appendFilters(nsIFilePicker.filterHTML | nsIFilePicker.filterText |
|
||||
nsIFilePicker.filterAll | nsIFilePicker.filterImages | nsIFilePicker.filterXML);
|
||||
|
||||
if (fp.show() == nsIFilePicker.returnOK && fp.fileURL.spec && fp.fileURL.spec.length > 0)
|
||||
|
@ -36,17 +36,21 @@
|
||||
|
||||
|
||||
const DEBUG = true; /* set to false to suppress debug messages */
|
||||
const FILEPICKER_PROGID = "component://mozilla/filepicker";
|
||||
const FILEPICKER_CID = Components.ID("{54ae32f8-1dd2-11b2-a209-df7c505370f8}");
|
||||
const APPSHELL_SERV_PROGID= "component://netscape/appshell/appShellService";
|
||||
const nsIAppShellService = Components.interfaces.nsIAppShellService;
|
||||
const nsILocalFile = Components.interfaces.nsILocalFile;
|
||||
const nsIFileURL = Components.interfaces.nsIFileURL;
|
||||
const nsISupports = Components.interfaces.nsISupports;
|
||||
const nsIFactory = Components.interfaces.nsIFactory;
|
||||
const nsIFilePicker = Components.interfaces.nsIFilePicker;
|
||||
const bundle = srGetStrBundle("chrome://global/locale/filepicker.properties");
|
||||
var lastDirectory = "/";
|
||||
const FILEPICKER_PROGID = "component://mozilla/filepicker";
|
||||
const FILEPICKER_CID = Components.ID("{54ae32f8-1dd2-11b2-a209-df7c505370f8}");
|
||||
|
||||
const APPSHELL_SERV_PROGID = "component://netscape/appshell/appShellService";
|
||||
const nsIAppShellService = Components.interfaces.nsIAppShellService;
|
||||
const nsILocalFile = Components.interfaces.nsILocalFile;
|
||||
const nsIFileURL = Components.interfaces.nsIFileURL;
|
||||
const nsISupports = Components.interfaces.nsISupports;
|
||||
const nsIFactory = Components.interfaces.nsIFactory;
|
||||
const nsIFilePicker = Components.interfaces.nsIFilePicker;
|
||||
const nsIInterfaceRequestor = Components.interfaces.nsIInterfaceRequestor
|
||||
const nsIDOMWindow = Components.interfaces.nsIDOMWindow;
|
||||
|
||||
const bundle = srGetStrBundle("chrome://global/locale/filepicker.properties");
|
||||
var lastDirectory = "/";
|
||||
|
||||
function nsFilePicker()
|
||||
{
|
||||
@ -89,30 +93,30 @@ nsFilePicker.prototype = {
|
||||
this.mMode = mode;
|
||||
},
|
||||
|
||||
setFilters: function(filterMask) {
|
||||
appendFilters: function(filterMask) {
|
||||
if (filterMask & nsIFilePicker.filterHTML) {
|
||||
this.mFilterTitles.push(bundle.GetStringFromName("htmlTitle"));
|
||||
this.mFilters.push(bundle.GetStringFromName("htmlFilter"));
|
||||
this.appendFilter(bundle.GetStringFromName("htmlTitle"),
|
||||
bundle.GetStringFromName("htmlFilter"));
|
||||
}
|
||||
if (filterMask & nsIFilePicker.filterText) {
|
||||
this.mFilterTitles.push(bundle.GetStringFromName("textTitle"));
|
||||
this.mFilters.push(bundle.GetStringFromName("textFilter"));
|
||||
this.appendFilter(bundle.GetStringFromName("textTitle"),
|
||||
bundle.GetStringFromName("textFilter"));
|
||||
}
|
||||
if (filterMask & nsIFilePicker.filterImages) {
|
||||
this.mFilterTitles.push(bundle.GetStringFromName("imageTitle"));
|
||||
this.mFilters.push(bundle.GetStringFromName("imageFilter"));
|
||||
this.appendFilter(bundle.GetStringFromName("imageTitle"),
|
||||
bundle.GetStringFromName("imageFilter"));
|
||||
}
|
||||
if (filterMask & nsIFilePicker.filterXML) {
|
||||
this.mFilterTitles.push(bundle.GetStringFromName("xmlTitle"));
|
||||
this.mFilters.push(bundle.GetStringFromName("xmlFilter"));
|
||||
this.appendFilter(bundle.GetStringFromName("xmlTitle"),
|
||||
bundle.GetStringFromName("xmlFilter"));
|
||||
}
|
||||
if (filterMask & nsIFilePicker.filterXUL) {
|
||||
this.mFilterTitles.push(bundle.GetStringFromName("xulTitle"));
|
||||
this.mFilters.push(bundle.GetStringFromName("xulFilter"));
|
||||
this.appendFilter(bundle.GetStringFromName("xulTitle"),
|
||||
bundle.GetStringFromName("xulFilter"));
|
||||
}
|
||||
if (filterMask & nsIFilePicker.filterAll) {
|
||||
this.mFilterTitles.push(bundle.GetStringFromName("allTitle"));
|
||||
this.mFilters.push(bundle.GetStringFromName("allFilter"));
|
||||
this.appendFilter(bundle.GetStringFromName("allTitle"),
|
||||
bundle.GetStringFromName("allFilter"));
|
||||
}
|
||||
},
|
||||
|
||||
@ -132,26 +136,34 @@ nsFilePicker.prototype = {
|
||||
o.filters.types = this.mFilters;
|
||||
o.retvals = new Object();
|
||||
|
||||
dump("nsIDOMWindow id value = " + nsIDOMWindow.id + "\n");
|
||||
|
||||
var parent;
|
||||
try {
|
||||
if (this.mParentWindow) {
|
||||
parent = this.mParentWindow;
|
||||
} else if (window) {
|
||||
} else if (typeof(window) == "object" && window != null) {
|
||||
parent = window;
|
||||
} else {
|
||||
var appShellService = Components.classes[APPSHELL_SERV_PROGID].getService(nsIAppShellService);
|
||||
parent = appShellService.GetHiddenWindow();
|
||||
try {
|
||||
var appShellService = Components.classes[APPSHELL_SERV_PROGID].getService(nsIAppShellService);
|
||||
parent = appShellService.getHiddenDOMWindow();
|
||||
} catch(ex) {
|
||||
dump("Can't get parent. xpconnect hates me so we can't get one from the appShellService.\n");
|
||||
dump(ex + "\n");
|
||||
}
|
||||
}
|
||||
} catch(ex) { }
|
||||
} catch(ex) { dump("fuck\n"); }
|
||||
|
||||
parent.openDialog("chrome://global/content/filepicker.xul",
|
||||
"",
|
||||
"chrome,modal,resizeable=yes,dependent=yes",
|
||||
o);
|
||||
|
||||
this.mFile = o.retvals.file;
|
||||
lastDirectory = o.retvals.directory;
|
||||
return o.retvals.buttonStatus;
|
||||
try {
|
||||
parent.openDialog("chrome://global/content/filepicker.xul",
|
||||
"",
|
||||
"chrome,modal,resizeable=yes,dependent=yes",
|
||||
o);
|
||||
this.mFile = o.retvals.file;
|
||||
lastDirectory = o.retvals.directory;
|
||||
return o.retvals.buttonStatus;
|
||||
} catch(ex) { dump("unable to open file picker\n" + ex + "\n"); }
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -36,17 +36,21 @@
|
||||
|
||||
|
||||
const DEBUG = true; /* set to false to suppress debug messages */
|
||||
const FILEPICKER_PROGID = "component://mozilla/filepicker";
|
||||
const FILEPICKER_CID = Components.ID("{54ae32f8-1dd2-11b2-a209-df7c505370f8}");
|
||||
const APPSHELL_SERV_PROGID= "component://netscape/appshell/appShellService";
|
||||
const nsIAppShellService = Components.interfaces.nsIAppShellService;
|
||||
const nsILocalFile = Components.interfaces.nsILocalFile;
|
||||
const nsIFileURL = Components.interfaces.nsIFileURL;
|
||||
const nsISupports = Components.interfaces.nsISupports;
|
||||
const nsIFactory = Components.interfaces.nsIFactory;
|
||||
const nsIFilePicker = Components.interfaces.nsIFilePicker;
|
||||
const bundle = srGetStrBundle("chrome://global/locale/filepicker.properties");
|
||||
var lastDirectory = "/";
|
||||
const FILEPICKER_PROGID = "component://mozilla/filepicker";
|
||||
const FILEPICKER_CID = Components.ID("{54ae32f8-1dd2-11b2-a209-df7c505370f8}");
|
||||
|
||||
const APPSHELL_SERV_PROGID = "component://netscape/appshell/appShellService";
|
||||
const nsIAppShellService = Components.interfaces.nsIAppShellService;
|
||||
const nsILocalFile = Components.interfaces.nsILocalFile;
|
||||
const nsIFileURL = Components.interfaces.nsIFileURL;
|
||||
const nsISupports = Components.interfaces.nsISupports;
|
||||
const nsIFactory = Components.interfaces.nsIFactory;
|
||||
const nsIFilePicker = Components.interfaces.nsIFilePicker;
|
||||
const nsIInterfaceRequestor = Components.interfaces.nsIInterfaceRequestor
|
||||
const nsIDOMWindow = Components.interfaces.nsIDOMWindow;
|
||||
|
||||
const bundle = srGetStrBundle("chrome://global/locale/filepicker.properties");
|
||||
var lastDirectory = "/";
|
||||
|
||||
function nsFilePicker()
|
||||
{
|
||||
@ -89,30 +93,30 @@ nsFilePicker.prototype = {
|
||||
this.mMode = mode;
|
||||
},
|
||||
|
||||
setFilters: function(filterMask) {
|
||||
appendFilters: function(filterMask) {
|
||||
if (filterMask & nsIFilePicker.filterHTML) {
|
||||
this.mFilterTitles.push(bundle.GetStringFromName("htmlTitle"));
|
||||
this.mFilters.push(bundle.GetStringFromName("htmlFilter"));
|
||||
this.appendFilter(bundle.GetStringFromName("htmlTitle"),
|
||||
bundle.GetStringFromName("htmlFilter"));
|
||||
}
|
||||
if (filterMask & nsIFilePicker.filterText) {
|
||||
this.mFilterTitles.push(bundle.GetStringFromName("textTitle"));
|
||||
this.mFilters.push(bundle.GetStringFromName("textFilter"));
|
||||
this.appendFilter(bundle.GetStringFromName("textTitle"),
|
||||
bundle.GetStringFromName("textFilter"));
|
||||
}
|
||||
if (filterMask & nsIFilePicker.filterImages) {
|
||||
this.mFilterTitles.push(bundle.GetStringFromName("imageTitle"));
|
||||
this.mFilters.push(bundle.GetStringFromName("imageFilter"));
|
||||
this.appendFilter(bundle.GetStringFromName("imageTitle"),
|
||||
bundle.GetStringFromName("imageFilter"));
|
||||
}
|
||||
if (filterMask & nsIFilePicker.filterXML) {
|
||||
this.mFilterTitles.push(bundle.GetStringFromName("xmlTitle"));
|
||||
this.mFilters.push(bundle.GetStringFromName("xmlFilter"));
|
||||
this.appendFilter(bundle.GetStringFromName("xmlTitle"),
|
||||
bundle.GetStringFromName("xmlFilter"));
|
||||
}
|
||||
if (filterMask & nsIFilePicker.filterXUL) {
|
||||
this.mFilterTitles.push(bundle.GetStringFromName("xulTitle"));
|
||||
this.mFilters.push(bundle.GetStringFromName("xulFilter"));
|
||||
this.appendFilter(bundle.GetStringFromName("xulTitle"),
|
||||
bundle.GetStringFromName("xulFilter"));
|
||||
}
|
||||
if (filterMask & nsIFilePicker.filterAll) {
|
||||
this.mFilterTitles.push(bundle.GetStringFromName("allTitle"));
|
||||
this.mFilters.push(bundle.GetStringFromName("allFilter"));
|
||||
this.appendFilter(bundle.GetStringFromName("allTitle"),
|
||||
bundle.GetStringFromName("allFilter"));
|
||||
}
|
||||
},
|
||||
|
||||
@ -132,26 +136,34 @@ nsFilePicker.prototype = {
|
||||
o.filters.types = this.mFilters;
|
||||
o.retvals = new Object();
|
||||
|
||||
dump("nsIDOMWindow id value = " + nsIDOMWindow.id + "\n");
|
||||
|
||||
var parent;
|
||||
try {
|
||||
if (this.mParentWindow) {
|
||||
parent = this.mParentWindow;
|
||||
} else if (window) {
|
||||
} else if (typeof(window) == "object" && window != null) {
|
||||
parent = window;
|
||||
} else {
|
||||
var appShellService = Components.classes[APPSHELL_SERV_PROGID].getService(nsIAppShellService);
|
||||
parent = appShellService.GetHiddenWindow();
|
||||
try {
|
||||
var appShellService = Components.classes[APPSHELL_SERV_PROGID].getService(nsIAppShellService);
|
||||
parent = appShellService.getHiddenDOMWindow();
|
||||
} catch(ex) {
|
||||
dump("Can't get parent. xpconnect hates me so we can't get one from the appShellService.\n");
|
||||
dump(ex + "\n");
|
||||
}
|
||||
}
|
||||
} catch(ex) { }
|
||||
} catch(ex) { dump("fuck\n"); }
|
||||
|
||||
parent.openDialog("chrome://global/content/filepicker.xul",
|
||||
"",
|
||||
"chrome,modal,resizeable=yes,dependent=yes",
|
||||
o);
|
||||
|
||||
this.mFile = o.retvals.file;
|
||||
lastDirectory = o.retvals.directory;
|
||||
return o.retvals.buttonStatus;
|
||||
try {
|
||||
parent.openDialog("chrome://global/content/filepicker.xul",
|
||||
"",
|
||||
"chrome,modal,resizeable=yes,dependent=yes",
|
||||
o);
|
||||
this.mFile = o.retvals.file;
|
||||
lastDirectory = o.retvals.directory;
|
||||
return o.retvals.buttonStatus;
|
||||
} catch(ex) { dump("unable to open file picker\n" + ex + "\n"); }
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -126,7 +126,7 @@ function PrefNavSelectFile(prefID) {
|
||||
var fp = Components.classes["component://mozilla/filepicker"].createInstance(nsIFilePicker);
|
||||
/* XXX no title here */
|
||||
fp.init(window, "", nsIFilePicker.modeOpen);
|
||||
fp.setFilters(nsIFilePicker.filterAll);
|
||||
fp.appendFilters(nsIFilePicker.filterAll);
|
||||
fp.show();
|
||||
var field = document.getElementById(prefID);
|
||||
field.setAttribute("value", fp.file.unicodePath);
|
||||
@ -139,7 +139,7 @@ function PrefCacheSelectFolder() {
|
||||
var fp = Components.classes["component://mozilla/filepicker"].createInstance(nsIFilePicker);
|
||||
/* XXX no title here */
|
||||
fp.init(window, "", nsIFilePicker.modeGetFolder);
|
||||
fp.setFilters(nsIFilePicker.filterAll);
|
||||
fp.appendFilters(nsIFilePicker.filterAll);
|
||||
fp.show();
|
||||
var field = document.getElementById("pref:string:browser.cache.directory");
|
||||
field.setAttribute("value", fp.file.unicodePath);
|
||||
|
@ -41,7 +41,7 @@ function getFileOrFolderSpec( aTitle, aFolder )
|
||||
mode = nsIFilePicker.modeOpen;
|
||||
|
||||
fp.init(window, aTitle, mode);
|
||||
fp.setFilters(nsIFilePicker.filterAll);
|
||||
fp.appendFilters(nsIFilePicker.filterAll);
|
||||
fp.show();
|
||||
}
|
||||
catch(e) {
|
||||
|
Loading…
Reference in New Issue
Block a user