--- a/firefox-kde.patch Sat Feb 18 22:28:33 2012 +0100
+++ b/firefox-kde.patch Tue Feb 21 20:51:21 2012 +0100
@@ -1270,7 +1270,7 @@
new file mode 100644
--- /dev/null
+++ b/browser/components/shell/src/nsKDEShellService.cpp
-@@ -0,0 +1,193 @@
+@@ -0,0 +1,257 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
@@ -1316,6 +1316,9 @@
+#include "nsILocalFile.h"
+#include "nsServiceManagerUtils.h"
+#include "nsComponentManagerUtils.h"
++#include "nsIMutableArray.h"
++#include "nsISupportsPrimitives.h"
++#include "nsArrayUtils.h"
+
+nsresult
+nsKDEShellService::Init()
@@ -1331,13 +1334,23 @@
+nsKDEShellService::IsDefaultBrowser(bool aStartupCheck,
+ bool* aIsDefaultBrowser)
+ {
-+ *aIsDefaultBrowser = PR_FALSE;
++ *aIsDefaultBrowser = false;
+ if (aStartupCheck)
-+ mCheckedThisSession = PR_TRUE;
-+ nsTArray<nsCString> command;
-+ command.AppendElement( NS_LITERAL_CSTRING( "ISDEFAULTBROWSER" ));
++ mCheckedThisSession = true;
++
++ nsCOMPtr<nsIMutableArray> command = do_CreateInstance( NS_ARRAY_CONTRACTID );
++ if (!command)
++ return NS_ERROR_FAILURE;
++
++ nsCOMPtr<nsISupportsCString> str = do_CreateInstance( NS_SUPPORTS_CSTRING_CONTRACTID );
++ if (!str)
++ return NS_ERROR_FAILURE;
++
++ str->SetData( NS_LITERAL_CSTRING( "ISDEFAULTBROWSER" ));
++ command->AppendElement( str, false );
++
+ if( nsKDEUtils::command( command ))
-+ *aIsDefaultBrowser = PR_TRUE;
++ *aIsDefaultBrowser = true;
+ return NS_OK;
+ }
+
@@ -1345,9 +1358,21 @@
+nsKDEShellService::SetDefaultBrowser(bool aClaimAllTypes,
+ bool aForAllUsers)
+ {
-+ nsTArray<nsCString> command;
-+ command.AppendElement( NS_LITERAL_CSTRING( "SETDEFAULTBROWSER" ));
-+ command.AppendElement( aClaimAllTypes ? NS_LITERAL_CSTRING( "ALLTYPES" ) : NS_LITERAL_CSTRING( "NORMAL" ));
++ nsCOMPtr<nsIMutableArray> command = do_CreateInstance( NS_ARRAY_CONTRACTID );
++ if (!command)
++ return NS_ERROR_FAILURE;
++
++ nsCOMPtr<nsISupportsCString> cmdstr = do_CreateInstance( NS_SUPPORTS_CSTRING_CONTRACTID );
++ nsCOMPtr<nsISupportsCString> paramstr = do_CreateInstance( NS_SUPPORTS_CSTRING_CONTRACTID );
++ if (!cmdstr || !paramstr)
++ return NS_ERROR_FAILURE;
++
++ cmdstr->SetData( NS_LITERAL_CSTRING( "SETDEFAULTBROWSER" ));
++ command->AppendElement( cmdstr, false );
++
++ paramstr->SetData( aClaimAllTypes ? NS_LITERAL_CSTRING( "ALLTYPES" ) : NS_LITERAL_CSTRING( "NORMAL" ));
++ command->AppendElement( paramstr, false );
++
+ return nsKDEUtils::command( command ) ? NS_OK : NS_ERROR_FAILURE;
+ }
+
@@ -1357,7 +1382,7 @@
+ // If we've already checked, the browser has been started and this is a
+ // new window open, and we don't want to check again.
+ if (mCheckedThisSession) {
-+ *aResult = PR_FALSE;
++ *aResult = false;
+ return NS_OK;
+ }
+
@@ -1387,7 +1412,7 @@
+}
+
+NS_IMETHODIMP
-+nsKDEShellService::SetDesktopBackground(nsIDOMElement* aElement,
++nsKDEShellService::SetDesktopBackground(nsIDOMElement* aElement,
+ PRInt32 aPosition)
+ {
+ return NS_ERROR_NOT_IMPLEMENTED;
@@ -1408,26 +1433,47 @@
+NS_IMETHODIMP
+nsKDEShellService::OpenApplication(PRInt32 aApplication)
+ {
-+ nsTArray<nsCString> command;
++ nsCOMPtr<nsIMutableArray> command = do_CreateInstance( NS_ARRAY_CONTRACTID );
++ if (!command)
++ return NS_ERROR_FAILURE;
++
++ nsCOMPtr<nsISupportsCString> str = do_CreateInstance( NS_SUPPORTS_CSTRING_CONTRACTID );
++ if (!str)
++ return NS_ERROR_FAILURE;
++
+ if( aApplication == APPLICATION_MAIL )
-+ command.AppendElement( NS_LITERAL_CSTRING( "OPENMAIL" ));
++ str->SetData( NS_LITERAL_CSTRING( "OPENMAIL" ));
+ else if( aApplication == APPLICATION_NEWS )
-+ command.AppendElement( NS_LITERAL_CSTRING( "OPENNEWS" ));
++ str->SetData( NS_LITERAL_CSTRING( "OPENNEWS" ));
+ else
+ return NS_ERROR_NOT_IMPLEMENTED;
++
++ command->AppendElement( str, false );
+ return nsKDEUtils::command( command ) ? NS_OK : NS_ERROR_FAILURE;
+ }
+
+NS_IMETHODIMP
+nsKDEShellService::OpenApplicationWithURI(nsILocalFile* aApplication, const nsACString& aURI)
+ {
-+ nsTArray<nsCString> command;
-+ command.AppendElement( NS_LITERAL_CSTRING( "RUN" ));
-+ nsCString app;
++ nsCOMPtr<nsIMutableArray> command = do_CreateInstance( NS_ARRAY_CONTRACTID );
++ if (!command)
++ return NS_ERROR_FAILURE;
++
++ nsCOMPtr<nsISupportsCString> cmdstr = do_CreateInstance( NS_SUPPORTS_CSTRING_CONTRACTID );
++ nsCOMPtr<nsISupportsCString> appstr = do_CreateInstance( NS_SUPPORTS_CSTRING_CONTRACTID );
++ nsCOMPtr<nsISupportsCString> uristr = do_CreateInstance( NS_SUPPORTS_CSTRING_CONTRACTID );
++ if (!cmdstr || !appstr || !uristr)
++ return NS_ERROR_FAILURE;
++
++ cmdstr->SetData( NS_LITERAL_CSTRING( "RUN" ));
++ command->AppendElement( cmdstr, false );
++ nsCAutoString app;
+ nsresult rv = aApplication->GetNativePath( app );
+ NS_ENSURE_SUCCESS( rv, rv );
-+ command.AppendElement( app );
-+ command.AppendElement( aURI );
++ appstr->SetData( app );
++ command->AppendElement( appstr, false );
++ uristr->SetData( aURI );
++ command->AppendElement( uristr, false );
+ return nsKDEUtils::command( command ) ? NS_OK : NS_ERROR_FAILURE;
+ }
+
@@ -1436,14 +1482,32 @@
+ {
+ *_retval = nsnull;
+
-+ nsTArray<nsCString> command;
-+ command.AppendElement( NS_LITERAL_CSTRING( "GETDEFAULTFEEDREADER" ));
-+ nsTArray<nsCString> output;
-+ if( !nsKDEUtils::command( command, &output ) || output.Length() != 1 )
++ nsCOMPtr<nsIMutableArray> command = do_CreateInstance( NS_ARRAY_CONTRACTID );
++ if( !command )
++ return NS_ERROR_FAILURE;
++
++ nsCOMPtr<nsISupportsCString> str = do_CreateInstance( NS_SUPPORTS_CSTRING_CONTRACTID );
++ if( !str )
+ return NS_ERROR_FAILURE;
+
-+ nsCString path;
-+ path = output[ 0 ];
++ str->SetData( NS_LITERAL_CSTRING( "GETDEFAULTFEEDREADER" ));
++ command->AppendElement( str, false );
++
++ nsCOMPtr<nsIArray> output;
++ if( !nsKDEUtils::command( command, getter_AddRefs( output ) ) )
++ return NS_ERROR_FAILURE;
++
++ PRUint32 length;
++ output->GetLength( &length );
++ if( length != 1 )
++ return NS_ERROR_FAILURE;
++
++ nsCOMPtr<nsISupportsCString> resstr = do_QueryElementAt( output, 0 );
++ if( !resstr )
++ return NS_ERROR_FAILURE;
++
++ nsCAutoString path;
++ resstr->GetData( path );
+ if (path.IsEmpty())
+ return NS_ERROR_FAILURE;
+