diff -r 15d0aa5d4b63 -r 3fabd9f66322 mozilla-kde.patch --- a/mozilla-kde.patch Fri Dec 23 18:44:50 2011 +0100 +++ b/mozilla-kde.patch Sun Dec 25 10:36:35 2011 +0100 @@ -21,7 +21,7 @@ diff --git a/modules/libpref/src/Preferences.cpp b/modules/libpref/src/Preferences.cpp --- a/modules/libpref/src/Preferences.cpp +++ b/modules/libpref/src/Preferences.cpp -@@ -53,16 +53,17 @@ +@@ -56,16 +56,17 @@ #include "nsIStringEnumerator.h" #include "nsIZipReader.h" #include "nsPrefBranch.h" @@ -39,7 +39,7 @@ #include "prefapi.h" #include "prefread.h" #include "prefapi_private_data.h" -@@ -956,30 +957,48 @@ pref_LoadPrefsInDir(nsIFile* aDir, char +@@ -935,30 +936,48 @@ pref_LoadPrefsInDir(nsIFile* aDir, char } static nsresult pref_LoadPrefsInDirList(const char *listId) @@ -71,7 +71,7 @@ NS_GET_IID(nsISimpleEnumerator), getter_AddRefs(dirList)); if (dirList) { - PRBool hasMore; + bool hasMore; while (NS_SUCCEEDED(dirList->HasMoreElements(&hasMore)) && hasMore) { nsCOMPtr elem; dirList->GetNext(getter_AddRefs(elem)); @@ -89,7 +89,7 @@ } static nsresult pref_ReadPrefFromJar(nsZipArchive* jarReader, const char *name) -@@ -1072,28 +1091,40 @@ static nsresult pref_InitInitialObjects( +@@ -1051,28 +1070,40 @@ static nsresult pref_InitInitialObjects( /* these pref file names should not be used: we process them after all other application pref files for backwards compatibility */ static const char* specialFiles[] = { #if defined(XP_MACOSX) @@ -112,7 +112,7 @@ }; + if(nsKDEUtils::kdeSession()) { // TODO what if some setup actually requires the helper? -+ for( int i = 0; ++ for(int i = 0; + i < NS_ARRAY_LENGTH(specialFiles); + ++i ) { + if( *specialFiles[ i ] == '\0' ) { @@ -122,7 +122,7 @@ + } + } + - rv = pref_LoadPrefsInDir(defaultPrefDir, specialFiles, NS_ARRAY_LENGTH(specialFiles)); + rv = pref_LoadPrefsInDir(defaultPrefDir, specialFiles, ArrayLength(specialFiles)); if (NS_FAILED(rv)) NS_WARNING("Error parsing application default preferences."); @@ -147,7 +147,7 @@ diff --git a/toolkit/components/downloads/nsDownloadManager.cpp b/toolkit/components/downloads/nsDownloadManager.cpp --- a/toolkit/components/downloads/nsDownloadManager.cpp +++ b/toolkit/components/downloads/nsDownloadManager.cpp -@@ -71,16 +71,20 @@ +@@ -74,16 +74,20 @@ #ifdef XP_WIN #include @@ -168,22 +168,22 @@ #include "AndroidBridge.h" #endif -@@ -2203,16 +2207,25 @@ nsDownload::SetState(DownloadState aStat +@@ -2214,16 +2218,25 @@ nsDownload::SetState(DownloadState aStat nsCOMPtr pref(do_GetService(NS_PREFSERVICE_CONTRACTID)); // Master pref to control this function. - PRBool showTaskbarAlert = PR_TRUE; + bool showTaskbarAlert = true; if (pref) pref->GetBoolPref(PREF_BDM_SHOWALERTONCOMPLETE, &showTaskbarAlert); if (showTaskbarAlert) { + if( nsKDEUtils::kdeSupport()) { -+ nsCStringArray command; -+ command.AppendCString( NS_LITERAL_CSTRING( "DOWNLOADFINISHED" )); -+ nsAutoString displayName; -+ GetDisplayName( displayName ); -+ command.AppendCString( nsCAutoString( ToNewUTF8String( displayName ))); -+ nsKDEUtils::command( command ); ++ nsTArray command; ++ command.AppendElement( NS_LITERAL_CSTRING( "DOWNLOADFINISHED" )); ++ nsAutoString displayName; ++ GetDisplayName( displayName ); ++ command.AppendElement( nsCAutoString( ToNewUTF8String( displayName ))); ++ nsKDEUtils::command( command ); + } else { + // begin non-KDE block PRInt32 alertInterval = 2000; @@ -194,7 +194,7 @@ PRInt64 goat = PR_Now() - mStartTime; showTaskbarAlert = goat > alertIntervalUSec; -@@ -2236,19 +2249,20 @@ nsDownload::SetState(DownloadState aStat +@@ -2247,19 +2260,20 @@ nsDownload::SetState(DownloadState aStat // If downloads are automatically removed per the user's // retention policy, there's no reason to make the text clickable // because if it is, they'll click open the download manager and @@ -2110,7 +2110,7 @@ ~nsUnixSystemProxySettings() {} nsCOMPtr mGConf; - PRBool IsProxyMode(const char* aMode); + bool IsProxyMode(const char* aMode); nsresult SetProxyResultFromGConf(const char* aKeyBase, const char* aType, nsACString& aResult); nsresult GetProxyFromGConf(const nsACString& aScheme, const nsACString& aHost, PRInt32 aPort, nsACString& aResult); + nsresult GetProxyFromKDE(const nsACString& aScheme, const nsACString& aHost, PRInt32 aPort, nsACString& aResult); @@ -2121,8 +2121,8 @@ nsresult nsUnixSystemProxySettings::Init() { - // If this is a GNOME session, load gconf and try to use its preferences. -@@ -407,16 +410,19 @@ nsUnixSystemProxySettings::GetProxyForUR + mGConf = do_GetService(NS_GCONFSERVICE_CONTRACTID); +@@ -408,16 +411,19 @@ nsUnixSystemProxySettings::GetProxyForUR nsCAutoString host; rv = aURI->GetHost(host); NS_ENSURE_SUCCESS(rv, rv); @@ -2142,7 +2142,7 @@ #define NS_UNIXSYSTEMPROXYSERVICE_CID /* 0fa3158c-d5a7-43de-9181-a285e74cf1d4 */\ { 0x0fa3158c, 0xd5a7, 0x43de, \ -@@ -437,8 +443,34 @@ static const mozilla::Module::ContractID +@@ -438,8 +444,34 @@ static const mozilla::Module::ContractID static const mozilla::Module kUnixProxyModule = { mozilla::Module::kVersion, @@ -2167,10 +2167,10 @@ + url += ":"; + url += nsPrintfCString("%d", aPort); + } -+ nsCStringArray command; -+ command.AppendCString( NS_LITERAL_CSTRING( "GETPROXY" )); -+ command.AppendCString( url ); -+ nsCStringArray result; ++ nsTArray command; ++ command.AppendElement( NS_LITERAL_CSTRING( "GETPROXY" )); ++ command.AppendElement( url ); ++ nsTArray result; + if( !nsKDEUtils::command( command, &result ) || result.Count() != 1 ) + return NS_ERROR_FAILURE; + aResult = *result[ 0 ]; @@ -2180,10 +2180,10 @@ diff --git a/toolkit/xre/Makefile.in b/toolkit/xre/Makefile.in --- a/toolkit/xre/Makefile.in +++ b/toolkit/xre/Makefile.in -@@ -94,17 +94,18 @@ EXPORTS = nsWindowsDllInterceptor.h - else +@@ -95,17 +95,18 @@ else ifeq ($(MOZ_WIDGET_TOOLKIT),cocoa) CMMSRCS = nsNativeAppSupportCocoa.mm + EXPORTS = MacQuirks.h else ifeq ($(MOZ_WIDGET_TOOLKIT),os2) CPPSRCS += nsNativeAppSupportOS2.cpp @@ -2195,16 +2195,16 @@ else ifeq ($(MOZ_WIDGET_TOOLKIT),qt) MOCSRCS += moc_nsNativeAppSupportQt.cpp - $(NULL) CPPSRCS += $(MOCSRCS) CPPSRCS += nsNativeAppSupportQt.cpp CPPSRCS += nsQAppInstance.cpp EXPORTS += nsQAppInstance.h + else diff --git a/toolkit/xre/nsKDEUtils.cpp b/toolkit/xre/nsKDEUtils.cpp new file mode 100644 --- /dev/null +++ b/toolkit/xre/nsKDEUtils.cpp -@@ -0,0 +1,328 @@ +@@ -0,0 +1,330 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 @@ -2299,10 +2299,10 @@ + +static bool getKdeSupport() + { -+ nsCStringArray command; -+ command.AppendCString( NS_LITERAL_CSTRING( "CHECK" )); -+ command.AppendCString( NS_LITERAL_CSTRING( MAKE_STR( KMOZILLAHELPER_VERSION ))); -+ bool kde = nsKDEUtils::command( command ); ++ nsTArray command; ++ command.AppendElement( NS_LITERAL_CSTRING( "CHECK" )); ++ command.AppendElement( NS_LITERAL_CSTRING( MAKE_STR( KMOZILLAHELPER_VERSION ))); ++ bool kde = nsKDEUtils::command( command.get() ); +#ifdef DEBUG_KDE + fprintf( stderr, "KDE RUNNING %d\n", kde ); +#endif @@ -2344,7 +2344,7 @@ +struct nsKDECommandData + { + FILE* file; -+ nsCStringArray* output; ++ nsTArray* output; + GMainLoop* loop; + bool success; + }; @@ -2368,7 +2368,7 @@ + line.ReplaceSubstring( "\\n", "\n" ); + line.ReplaceSubstring( "\\" "\\", "\\" ); // \\ -> \ , i.e. unescape + if( p->output && !( command_done || command_failed )) -+ p->output->AppendCString( nsCString( buf )); // TODO utf8? ++ p->output->AppendElement( nsCString( buf )); // TODO utf8? + } + bool quit = false; + if( feof( p->file ) || command_failed ) @@ -2390,22 +2390,24 @@ + return TRUE; + } + -+bool nsKDEUtils::command( const nsCStringArray& command, nsCStringArray* output ) ++bool nsKDEUtils::command( const nsTArray& command, nsTArray* output ) + { + return self()->internalCommand( command, NULL, false, output ); + } + -+bool nsKDEUtils::commandBlockUi( const nsCStringArray& command, const GtkWindow* parent, nsCStringArray* output ) ++bool nsKDEUtils::commandBlockUi( const nsTArray& command, const GtkWindow* parent, nsTArray* output ) + { + return self()->internalCommand( command, parent, true, output ); + } + -+bool nsKDEUtils::internalCommand( const nsCStringArray& command, const GtkWindow* parent, bool blockUi, -+ nsCStringArray* output ) ++bool nsKDEUtils::internalCommand( const nsTArray& command, const GtkWindow* parent, bool blockUi, ++ nsTArray* output ) + { ++ nsCString internal_command; ++ internal_command.AssignLiteral(command); + if( !startHelper()) + return false; -+ feedCommand( command ); ++ feedCommand(internal_command); + // do not store the data in 'this' but in extra structure, just in case there + // is reentrancy (can there be? the event loop is re-entered) + nsKDECommandData data; @@ -2515,13 +2517,13 @@ + helperRunning = false; + } + -+void nsKDEUtils::feedCommand( const nsCStringArray& command ) ++void nsKDEUtils::feedCommand( const nsTArray& command ) + { + for( int i = 0; -+ i < command.Count(); ++ i < command.Length(); + ++i ) + { -+ nsCString line = *command[ i ]; ++ nsCString line = command[ i ]; + line.ReplaceSubstring( "\\", "\\" "\\" ); // \ -> \\ , i.e. escape + line.ReplaceSubstring( "\n", "\\n" ); +#ifdef DEBUG_KDE @@ -2537,7 +2539,7 @@ new file mode 100644 --- /dev/null +++ b/toolkit/xre/nsKDEUtils.h -@@ -0,0 +1,77 @@ +@@ -0,0 +1,78 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- + * + * ***** BEGIN LICENSE BLOCK ***** @@ -2580,7 +2582,7 @@ +#define nsKDEUtils_h__ + +#include "nsStringGlue.h" -+#include "nsVoidArray.h" ++#include "nsTArray.h" +#include + +typedef struct _GtkWindow GtkWindow; @@ -2596,20 +2598,21 @@ + for Firefox. This should be used everywhere where the external helper is needed. */ + static bool kdeSupport(); + /* Executes the given helper command, returns true if helper returned success. */ -+ static bool command( const nsCStringArray& command, nsCStringArray* output = NULL ); ++ static bool command( const nsTArray& command, nsTArray* output = NULL ); + /* Like command(), but additionally blocks the parent widget like if there was + a modal dialog shown and enters the event loop (i.e. there are still paint updates, + this is for commands that take long). */ -+ static bool commandBlockUi( const nsCStringArray& command, const GtkWindow* parent, nsCStringArray* output = NULL ); ++ static bool commandBlockUi( const nsTArray& command, const GtkWindow* parent, nsTArray* output = NULL ); ++ + private: + nsKDEUtils(); + ~nsKDEUtils(); + static nsKDEUtils* self(); + bool startHelper(); + void closeHelper(); -+ void feedCommand( const nsCStringArray& command ); -+ bool internalCommand( const nsCStringArray& command, const GtkWindow* parent, bool isParent, -+ nsCStringArray* output ); ++ void feedCommand( const nsTArray& command ); ++ bool internalCommand( const nsTArray& command, const GtkWindow* parent, bool isParent, ++ nsTArray* output ); + FILE* commandFile; + FILE* replyFile; + }; @@ -2847,20 +2850,20 @@ +/* static */ PRBool +nsKDERegistry::HandlerExists(const char *aProtocolScheme) +{ -+ nsCStringArray command; -+ command.AppendCString( NS_LITERAL_CSTRING( "HANDLEREXISTS" )); -+ command.AppendCString( nsCAutoString( aProtocolScheme )); ++ nsTArray command; ++ command.AppendElement( NS_LITERAL_CSTRING( "HANDLEREXISTS" )); ++ command.AppendElement( nsCAutoString( aProtocolScheme )); + return nsKDEUtils::command( command ); +} + +/* static */ nsresult +nsKDERegistry::LoadURL(nsIURI *aURL) +{ -+ nsCStringArray command; -+ command.AppendCString( NS_LITERAL_CSTRING( "OPEN" )); ++ nsTArray command; ++ command.AppendElement( NS_LITERAL_CSTRING( "OPEN" )); + nsCString url; + aURL->GetSpec( url ); -+ command.AppendCString( url ); ++ command.AppendElement( url ); + return nsKDEUtils::command( command ); +} + @@ -2868,12 +2871,12 @@ +nsKDERegistry::GetAppDescForScheme(const nsACString& aScheme, + nsAString& aDesc) +{ -+ nsCStringArray command; -+ command.AppendCString( NS_LITERAL_CSTRING( "GETAPPDESCFORSCHEME" )); -+ command.AppendCString( aScheme ); -+ nsCStringArray output; -+ if( nsKDEUtils::command( command, &output ) && output.Count() == 1 ) -+ CopyUTF8toUTF16( *output[ 0 ], aDesc ); ++ nsTArray command; ++ command.AppendElement( NS_LITERAL_CSTRING( "GETAPPDESCFORSCHEME" )); ++ command.AppendElement( aScheme ); ++ nsTArray output; ++ if( nsKDEUtils::command( command, &output ) && output.Length() == 1 ) ++ CopyUTF8toUTF16( output[ 0 ], aDesc ); +} + + @@ -2881,33 +2884,33 @@ +nsKDERegistry::GetFromExtension(const nsACString& aFileExt) +{ + NS_ASSERTION(aFileExt[0] != '.', "aFileExt shouldn't start with a dot"); -+ nsCStringArray command; -+ command.AppendCString( NS_LITERAL_CSTRING( "GETFROMEXTENSION" )); -+ command.AppendCString( aFileExt ); ++ nsTArray command; ++ command.AppendElement( NS_LITERAL_CSTRING( "GETFROMEXTENSION" )); ++ command.AppendElement( aFileExt ); + return GetFromHelper( command ); +} + +/* static */ already_AddRefed +nsKDERegistry::GetFromType(const nsACString& aMIMEType) +{ -+ nsCStringArray command; -+ command.AppendCString( NS_LITERAL_CSTRING( "GETFROMTYPE" )); -+ command.AppendCString( aMIMEType ); ++ nsTArray command; ++ command.AppendElement( NS_LITERAL_CSTRING( "GETFROMTYPE" )); ++ command.AppendElement( aMIMEType ); + return GetFromHelper( command ); +} + +/* static */ already_AddRefed -+nsKDERegistry::GetFromHelper(const nsCStringArray& command) ++nsKDERegistry::GetFromHelper(const nsTArray& command) +{ -+ nsCStringArray output; -+ if( nsKDEUtils::command( command, &output ) && output.Count() == 3 ) ++ nsTArray output; ++ if( nsKDEUtils::command( command, &output ) && output.Length() == 3 ) + { -+ nsCString mimetype = *output[ 0 ]; ++ nsCString mimetype = output[ 0 ]; + nsRefPtr mimeInfo = new nsMIMEInfoUnix( mimetype ); + NS_ENSURE_TRUE(mimeInfo, nsnull); -+ nsCString description = *output[ 1 ]; ++ nsCString description = output[ 1 ]; + mimeInfo->SetDescription(NS_ConvertUTF8toUTF16(description)); -+ nsCString handlerAppName = *output[ 2 ]; ++ nsCString handlerAppName = output[ 2 ]; + mimeInfo->SetDefaultDescription(NS_ConvertUTF8toUTF16(handlerAppName)); + mimeInfo->SetPreferredAction(nsIMIMEInfo::useSystemDefault); + nsMIMEInfoBase* retval; @@ -2920,7 +2923,7 @@ new file mode 100644 --- /dev/null +++ b/uriloader/exthandler/unix/nsKDERegistry.h -@@ -0,0 +1,61 @@ +@@ -0,0 +1,62 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * @@ -2960,10 +2963,11 @@ + +#include "nsIURI.h" +#include "nsCOMPtr.h" ++#include "nsTArray.h" + +class nsMIMEInfoBase; +class nsCAutoString; -+class nsCStringArray; ++class nsCString; + +class nsKDERegistry +{ @@ -2979,7 +2983,7 @@ + + static already_AddRefed GetFromType(const nsACString& aMIMEType); + private: -+ static already_AddRefed GetFromHelper(const nsCStringArray& command); ++ static already_AddRefed GetFromHelper(const nsTArray& command); + +}; diff --git a/uriloader/exthandler/unix/nsMIMEInfoUnix.cpp b/uriloader/exthandler/unix/nsMIMEInfoUnix.cpp @@ -3027,9 +3031,9 @@ } NS_IMETHODIMP - nsMIMEInfoUnix::GetHasDefaultHandler(PRBool *_retval) + nsMIMEInfoUnix::GetHasDefaultHandler(bool *_retval) { - *_retval = PR_FALSE; + *_retval = false; - nsRefPtr mimeInfo = nsGNOMERegistry::GetFromType(mSchemeOrType); + nsRefPtr mimeInfo = nsCommonRegistry::GetFromType(mSchemeOrType); if (!mimeInfo) { @@ -3041,7 +3045,7 @@ } } if (mimeInfo) - *_retval = PR_TRUE; + *_retval = true; if (*_retval) return NS_OK; @@ -3056,13 +3060,13 @@ #endif + if( nsKDEUtils::kdeSupport()) { -+ PRBool supports; ++ bool supports; + if( NS_SUCCEEDED( GetHasDefaultHandler( &supports )) && supports ) { -+ nsCStringArray command; -+ command.AppendCString( NS_LITERAL_CSTRING( "OPEN" )); -+ command.AppendCString( nativePath ); -+ command.AppendCString( NS_LITERAL_CSTRING( "MIMETYPE" )); -+ command.AppendCString( mSchemeOrType ); ++ nsTArray command; ++ command.AppendElement( NS_LITERAL_CSTRING( "OPEN" )); ++ command.AppendElement( nativePath ); ++ command.AppendElement( NS_LITERAL_CSTRING( "MIMETYPE" )); ++ command.AppendElement( mSchemeOrType ); + if( nsKDEUtils::command( command )) + return NS_OK; + } @@ -3125,7 +3129,7 @@ ContentAction::Action::defaultActionForScheme(QString(aProtocolScheme) + ':'); if (action.isValid()) - *aHandlerExists = PR_TRUE; + *aHandlerExists = true; #endif #ifdef MOZ_WIDGET_GTK2 @@ -3156,7 +3160,7 @@ @@ -1299,17 +1299,17 @@ nsOSHelperAppService::GetFromExtension(c minorType, mime_types_description, - PR_TRUE); + true); if (NS_FAILED(rv) || majorType.IsEmpty()) { @@ -3212,14 +3216,14 @@ diff --git a/widget/src/gtk2/nsFilePicker.cpp b/widget/src/gtk2/nsFilePicker.cpp --- a/widget/src/gtk2/nsFilePicker.cpp +++ b/widget/src/gtk2/nsFilePicker.cpp -@@ -31,16 +31,17 @@ - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete +@@ -33,16 +33,17 @@ * the provisions above, a recipient may use your version of this file under * the terms of any one of the MPL, the GPL or the LGPL. * * ***** END LICENSE BLOCK ***** */ + #include "mozilla/Util.h" + #include +#include @@ -3230,7 +3234,7 @@ #include "nsIStringBundle.h" #include "nsArrayEnumerator.h" -@@ -49,16 +50,17 @@ +@@ -51,16 +52,17 @@ #include "nsNetUtil.h" #include "nsReadableUtils.h" #include "mozcontainer.h" @@ -3245,10 +3249,10 @@ #include #endif - #define MAX_PREVIEW_SIZE 180 + using namespace mozilla; - nsILocalFile *nsFilePicker::mPrevDisplayDirectory = nsnull; -@@ -281,17 +283,19 @@ nsFilePicker::AppendFilters(PRInt32 aFil + #define MAX_PREVIEW_SIZE 180 +@@ -285,17 +287,19 @@ nsFilePicker::AppendFilters(PRInt32 aFil return nsBaseFilePicker::AppendFilters(aFilterMask); } @@ -3269,7 +3273,7 @@ mFilters.AppendElement(filter); mFilterNames.AppendElement(name); -@@ -429,16 +433,19 @@ confirm_overwrite_file(GtkWidget *parent +@@ -433,16 +437,19 @@ confirm_overwrite_file(GtkWidget *parent gtk_widget_destroy(dialog); return result; @@ -3289,7 +3293,7 @@ GtkWindow *parent_widget = get_gtk_window_for_nsiwidget(mParentWidget); GtkFileChooserAction action = GetGtkFileChooserAction(mMode); -@@ -579,8 +586,234 @@ nsFilePicker::Show(PRInt16 *aReturn) +@@ -583,8 +590,234 @@ nsFilePicker::Show(PRInt16 *aReturn) *aReturn = nsIFilePicker::returnCancel; break; } @@ -3403,47 +3407,47 @@ + } + } + -+ nsCStringArray command; -+ command.AppendCString( nsCAutoString( arg )); -+ command.AppendCString( startdir ); ++ nsTArray command; ++ command.AppendElement( nsCAutoString( arg )); ++ command.AppendElement( startdir ); + if( mMode != nsIFilePicker::modeGetFolder ) + { -+ command.AppendCString( filters ); ++ command.AppendElement( filters ); + nsCAutoString selected; + selected.AppendInt( mSelectedType ); -+ command.AppendCString( selected ); ++ command.AppendElement( selected ); + } -+ command.AppendCString( title ); ++ command.AppendElement( title ); + if( mMode == nsIFilePicker::modeOpenMultiple ) -+ command.AppendCString( NS_LITERAL_CSTRING( "MULTIPLE" )); ++ command.AppendElement( NS_LITERAL_CSTRING( "MULTIPLE" )); + if( PRInt32 xid = windowToXid( mParentWidget )) + { -+ command.AppendCString( NS_LITERAL_CSTRING( "PARENT" )); ++ command.AppendElement( NS_LITERAL_CSTRING( "PARENT" )); + nsCAutoString parent; + parent.AppendInt( xid ); -+ command.AppendCString( parent ); ++ command.AppendElement( parent ); + } + -+ nsCStringArray output; ++ nsTArray output; + if( nsKDEUtils::commandBlockUi( command, get_gtk_window_for_nsiwidget( mParentWidget ), &output )) + { + *aReturn = nsIFilePicker::returnOK; + mFiles.Clear(); + if( mMode != nsIFilePicker::modeGetFolder ) + { -+ mSelectedType = atoi( output[ 0 ]->get()); -+ output.RemoveCStringAt( 0 ); ++ mSelectedType = atoi( output[ 0 ].get()); ++ output.RemoveElementAt( 0 ); + } + if (mMode == nsIFilePicker::modeOpenMultiple) + { + mFileURL.Truncate(); -+ PRUint32 count = output.Count(); ++ PRUint32 count = output.Length(); + for( PRUint32 i = 0; + i < count; + ++i ) + { + nsCOMPtr localfile; -+ nsresult rv = NS_NewNativeLocalFile( *output[ i ], ++ nsresult rv = NS_NewNativeLocalFile( output[ i ], + PR_FALSE, + getter_AddRefs(localfile)); + if (NS_SUCCEEDED(rv)) @@ -3452,14 +3456,14 @@ + } + else + { -+ if( output.Count() == 0 ) ++ if( output.Length() == 0 ) + mFileURL = nsCString(); + else if( mAllowURLs ) -+ mFileURL = *output[ 0 ]; ++ mFileURL = output[ 0 ]; + else // GetFile() actually requires it to be url even for local files :-/ + { + mFileURL = nsCString( "file://" ); -+ mFileURL.Append( *output[ 0 ] ); ++ mFileURL.Append( output[ 0 ] ); + } + } + // Remember last used directory. @@ -3479,7 +3483,7 @@ + GetFile(getter_AddRefs(file)); + if (file) + { -+ PRBool exists = PR_FALSE; ++ bool exists = false; + file->Exists(&exists); + if (exists) // TODO do overwrite check in the helper app + *aReturn = nsIFilePicker::returnReplace; @@ -3501,22 +3505,22 @@ + nsXPIDLCString title; + title.Adopt(ToNewUTF8String(mTitle)); + -+ nsCStringArray command; -+ command.AppendCString( NS_LITERAL_CSTRING( "APPSDIALOG" )); -+ command.AppendCString( title ); ++ nsTArray command; ++ command.AppendElement( NS_LITERAL_CSTRING( "APPSDIALOG" )); ++ command.AppendElement( title ); + if( PRInt32 xid = windowToXid( mParentWidget )) + { -+ command.AppendCString( NS_LITERAL_CSTRING( "PARENT" )); ++ command.AppendElement( NS_LITERAL_CSTRING( "PARENT" )); + nsCAutoString parent; + parent.AppendInt( xid ); -+ command.AppendCString( parent ); ++ command.AppendElement( parent ); + } + -+ nsCStringArray output; ++ nsTArray output; + if( nsKDEUtils::commandBlockUi( command, get_gtk_window_for_nsiwidget( mParentWidget ), &output )) + { + *aReturn = nsIFilePicker::returnOK; -+ mFileURL = output.Count() > 0 ? *output[ 0 ] : nsCString(); ++ mFileURL = output.Length() > 0 ? output[ 0 ] : nsCString(); + } + else + { @@ -3563,7 +3567,7 @@ diff --git a/xpcom/components/ManifestParser.cpp b/xpcom/components/ManifestParser.cpp --- a/xpcom/components/ManifestParser.cpp +++ b/xpcom/components/ManifestParser.cpp -@@ -60,16 +60,17 @@ +@@ -62,16 +62,17 @@ #include "nsTextFormatter.h" #include "nsVersionComparator.h" #include "nsXPCOMCIDInternal.h" @@ -3574,14 +3578,14 @@ #include "nsIXULRuntime.h" +#include "nsKDEUtils.h" + using namespace mozilla; + struct ManifestDirective { const char* directive; int argc; - // Some directives should only be delivered for NS_COMPONENT_LOCATION - // manifests. -@@ -430,16 +431,17 @@ ParseManifestCommon(NSLocationType aType +@@ -434,16 +435,17 @@ ParseManifestCommon(NSLocationType aType NS_NAMED_LITERAL_STRING(kPlatform, "platform"); NS_NAMED_LITERAL_STRING(kContentAccessible, "contentaccessible"); NS_NAMED_LITERAL_STRING(kApplication, "application"); @@ -3599,7 +3603,7 @@ nsAutoString appVersion; nsAutoString geckoVersion; nsAutoString osTarget; -@@ -474,39 +476,44 @@ ParseManifestCommon(NSLocationType aType +@@ -478,39 +480,44 @@ ParseManifestCommon(NSLocationType aType CopyUTF8toUTF16(s, abi); abi.Insert(PRUnichar('_'), 0); abi.Insert(osTarget, 0); @@ -3644,7 +3648,7 @@ char *token; char *newline = buf; -@@ -585,24 +592,26 @@ ParseManifestCommon(NSLocationType aType +@@ -589,24 +596,26 @@ ParseManifestCommon(NSLocationType aType TriState stAppVersion = eUnspecified; TriState stGeckoVersion = eUnspecified; TriState stApp = eUnspecified; @@ -3671,7 +3675,7 @@ if (directive->contentflags && (CheckFlag(kPlatform, wtoken, platform) || CheckFlag(kContentAccessible, wtoken, contentAccessible))) -@@ -623,16 +632,17 @@ ParseManifestCommon(NSLocationType aType +@@ -627,16 +636,17 @@ ParseManifestCommon(NSLocationType aType } if (!ok || @@ -3714,11 +3718,11 @@ diff --git a/xpcom/io/nsLocalFileUnix.cpp b/xpcom/io/nsLocalFileUnix.cpp --- a/xpcom/io/nsLocalFileUnix.cpp +++ b/xpcom/io/nsLocalFileUnix.cpp -@@ -87,16 +87,17 @@ - #include "nsXPIDLString.h" +@@ -90,16 +90,17 @@ #include "prproces.h" #include "nsIDirectoryEnumerator.h" #include "nsISimpleEnumerator.h" + #include "private/pprio.h" #ifdef MOZ_WIDGET_GTK2 #include "nsIGIOService.h" @@ -3726,13 +3730,13 @@ +#include "nsKDEUtils.h" #endif - #ifdef XP_MACOSX + #ifdef MOZ_WIDGET_COCOA #include #include "CocoaFileUtils.h" #include "prmem.h" #include "plbase64.h" -@@ -1785,44 +1786,50 @@ nsLocalFile::SetPersistentDescriptor(con +@@ -1795,44 +1796,51 @@ nsLocalFile::SetPersistentDescriptor(con return InitWithNativePath(aPersistentDescriptor); #endif } @@ -3747,7 +3751,7 @@ - return NS_ERROR_FAILURE; - + nsCAutoString url; - PRBool isDirectory; + bool isDirectory; if (NS_FAILED(IsDirectory(&isDirectory))) return NS_ERROR_FAILURE; @@ -3774,9 +3778,9 @@ } + + if(nsKDEUtils::kdeSupport()) { -+ nsCStringArray command; -+ command.AppendCString( NS_LITERAL_CSTRING( "OPEN" )); -+ command.AppendCString( url ); ++ nsTArray command; ++ command.AppendElement( NS_LITERAL_CSTRING("OPEN") ); ++ command.AppendElement( url ); + return nsKDEUtils::command( command ) ? NS_OK : NS_ERROR_FAILURE; + } + @@ -3789,7 +3793,8 @@ + return giovfs->ShowURIForInput(url); + else + return gnomevfs->ShowURIForInput(url); - #elif defined(XP_MACOSX) ++ + #elif defined(MOZ_WIDGET_COCOA) CFURLRef url; if (NS_SUCCEEDED(GetCFURL(&url))) { nsresult rv = CocoaFileUtils::RevealFileInFinder(url); @@ -3797,7 +3802,7 @@ return rv; } return NS_ERROR_FAILURE; -@@ -1848,16 +1855,23 @@ nsLocalFile::Launch() +@@ -1858,16 +1866,23 @@ nsLocalFile::Launch() if (nsnull == connection) return NS_ERROR_FAILURE; @@ -3807,9 +3812,9 @@ return NS_OK; #else + if( nsKDEUtils::kdeSupport()) { -+ nsCStringArray command; -+ command.AppendCString( NS_LITERAL_CSTRING( "OPEN" )); -+ command.AppendCString( mPath ); ++ nsTArray command; ++ command.AppendElement( NS_LITERAL_CSTRING("OPEN") ); ++ command.AppendElement( mPath ); + return nsKDEUtils::command( command ) ? NS_OK : NS_ERROR_FAILURE; + } +