--- 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<nsISupports> 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 <shlobj.h>
@@ -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<nsIPrefBranch> 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<nsCString> 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<nsIGConfService> 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<nsCString> command;
++ command.AppendElement( NS_LITERAL_CSTRING( "GETPROXY" ));
++ command.AppendElement( url );
++ nsTArray<nsCString> 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<nsCString> 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<nsCString>* 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<nsCString>& command, nsTArray<nsCString>* output )
+ {
+ return self()->internalCommand( command, NULL, false, output );
+ }
+
-+bool nsKDEUtils::commandBlockUi( const nsCStringArray& command, const GtkWindow* parent, nsCStringArray* output )
++bool nsKDEUtils::commandBlockUi( const nsTArray<nsCString>& command, const GtkWindow* parent, nsTArray<nsCString>* 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<nsCString>& command, const GtkWindow* parent, bool blockUi,
++ nsTArray<nsCString>* 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<nsCString>& 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 <stdio.h>
+
+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<nsCString>& command, nsTArray<nsCString>* 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<nsCString>& command, const GtkWindow* parent, nsTArray<nsCString>* 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<nsCString>& command );
++ bool internalCommand( const nsTArray<nsCString>& command, const GtkWindow* parent, bool isParent,
++ nsTArray<nsCString>* 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<nsCString> 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<nsCString> 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<nsCString> command;
++ command.AppendElement( NS_LITERAL_CSTRING( "GETAPPDESCFORSCHEME" ));
++ command.AppendElement( aScheme );
++ nsTArray<nsCString> 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<nsCString> command;
++ command.AppendElement( NS_LITERAL_CSTRING( "GETFROMEXTENSION" ));
++ command.AppendElement( aFileExt );
+ return GetFromHelper( command );
+}
+
+/* static */ already_AddRefed<nsMIMEInfoBase>
+nsKDERegistry::GetFromType(const nsACString& aMIMEType)
+{
-+ nsCStringArray command;
-+ command.AppendCString( NS_LITERAL_CSTRING( "GETFROMTYPE" ));
-+ command.AppendCString( aMIMEType );
++ nsTArray<nsCString> command;
++ command.AppendElement( NS_LITERAL_CSTRING( "GETFROMTYPE" ));
++ command.AppendElement( aMIMEType );
+ return GetFromHelper( command );
+}
+
+/* static */ already_AddRefed<nsMIMEInfoBase>
-+nsKDERegistry::GetFromHelper(const nsCStringArray& command)
++nsKDERegistry::GetFromHelper(const nsTArray<nsCString>& command)
+{
-+ nsCStringArray output;
-+ if( nsKDEUtils::command( command, &output ) && output.Count() == 3 )
++ nsTArray<nsCString> output;
++ if( nsKDEUtils::command( command, &output ) && output.Length() == 3 )
+ {
-+ nsCString mimetype = *output[ 0 ];
++ nsCString mimetype = output[ 0 ];
+ nsRefPtr<nsMIMEInfoUnix> 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<nsMIMEInfoBase> GetFromType(const nsACString& aMIMEType);
+ private:
-+ static already_AddRefed<nsMIMEInfoBase> GetFromHelper(const nsCStringArray& command);
++ static already_AddRefed<nsMIMEInfoBase> GetFromHelper(const nsTArray<nsCString>& 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<nsMIMEInfoBase> mimeInfo = nsGNOMERegistry::GetFromType(mSchemeOrType);
+ nsRefPtr<nsMIMEInfoBase> 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<nsCString> 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 <gtk/gtk.h>
+#include <gdk/gdkx.h>
@@ -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 <hildon-fm-2/hildon/hildon-file-chooser-dialog.h>
#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<nsCString> 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<nsCString> 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<nsILocalFile> 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<nsCString> 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<nsCString> 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 <Carbon/Carbon.h>
#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<nsCString> 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<nsCString> command;
++ command.AppendElement( NS_LITERAL_CSTRING("OPEN") );
++ command.AppendElement( mPath );
+ return nsKDEUtils::command( command ) ? NS_OK : NS_ERROR_FAILURE;
+ }
+