# HG changeset patch # User Wolfgang Rosenauer # Date 1329853881 -3600 # Node ID c7b8a6aede34f65bfbee84f8dec6a79c4d36f259 # Parent 997d2e729a8c47d0edc5076984950c81ffd2f61b ported and reenabled KDE integration (bnc#746591) explicitely build-require xorg-x11-devel diff -r 997d2e729a8c -r c7b8a6aede34 MozillaFirefox/MozillaFirefox.changes --- a/MozillaFirefox/MozillaFirefox.changes Sat Feb 18 22:28:33 2012 +0100 +++ b/MozillaFirefox/MozillaFirefox.changes Tue Feb 21 20:51:21 2012 +0100 @@ -1,3 +1,9 @@ +------------------------------------------------------------------- +Tue Feb 21 16:42:43 UTC 2012 - wr@rosenauer.org + +- ported and reenabled KDE integration (bnc#746591) +- explicitely build-require xorg-x11-devel + ------------------------------------------------------------------- Fri Feb 17 17:41:11 UTC 2012 - pcerny@suse.com diff -r 997d2e729a8c -r c7b8a6aede34 MozillaFirefox/MozillaFirefox.spec --- a/MozillaFirefox/MozillaFirefox.spec Sat Feb 18 22:28:33 2012 +0100 +++ b/MozillaFirefox/MozillaFirefox.spec Tue Feb 21 20:51:21 2012 +0100 @@ -34,6 +34,7 @@ BuildRequires: startup-notification-devel BuildRequires: unzip BuildRequires: update-desktop-files +BuildRequires: xorg-x11-devel BuildRequires: yasm BuildRequires: zip %if %suse_version > 1110 @@ -206,7 +207,7 @@ %patch2 -p1 %patch3 -p1 %patch4 -p1 -#%patch5 -p1 +%patch5 -p1 %patch6 -p1 %patch7 -p1 %patch8 -p1 @@ -224,10 +225,10 @@ %patch31 -p1 %patch32 -p1 %if %suse_version >= 1110 -#%patch33 -p1 +%patch33 -p1 %endif %if %suse_version >= 1140 -#%patch34 -p1 +%patch34 -p1 %endif %patch38 -p1 %patch39 -p1 @@ -240,11 +241,11 @@ TIME="\"$(date -d "${modified}" "+%%R")\"" find . -regex ".*\.c\|.*\.cpp\|.*\.h" -exec sed -i "s/__DATE__/${DATE}/g;s/__TIME__/${TIME}/g" {} + # -#kdehelperversion=$(cat toolkit/xre/nsKDEUtils.cpp | grep '#define KMOZILLAHELPER_VERSION' | cut -d ' ' -f 3) -#if test "$kdehelperversion" != %{kde_helper_version}; then -# echo fix kde helper version in the .spec file -# exit 1 -#fi +kdehelperversion=$(cat toolkit/xre/nsKDEUtils.cpp | grep '#define KMOZILLAHELPER_VERSION' | cut -d ' ' -f 3) +if test "$kdehelperversion" != %{kde_helper_version}; then + echo fix kde helper version in the .spec file + exit 1 +fi source %{SOURCE5} export MOZ_SOURCE_STAMP=$REV export SOURCE_REPO=$REPO diff -r 997d2e729a8c -r c7b8a6aede34 firefox-kde.patch --- 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 command; -+ command.AppendElement( NS_LITERAL_CSTRING( "ISDEFAULTBROWSER" )); ++ mCheckedThisSession = true; ++ ++ nsCOMPtr command = do_CreateInstance( NS_ARRAY_CONTRACTID ); ++ if (!command) ++ return NS_ERROR_FAILURE; ++ ++ nsCOMPtr 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 command; -+ command.AppendElement( NS_LITERAL_CSTRING( "SETDEFAULTBROWSER" )); -+ command.AppendElement( aClaimAllTypes ? NS_LITERAL_CSTRING( "ALLTYPES" ) : NS_LITERAL_CSTRING( "NORMAL" )); ++ nsCOMPtr command = do_CreateInstance( NS_ARRAY_CONTRACTID ); ++ if (!command) ++ return NS_ERROR_FAILURE; ++ ++ nsCOMPtr cmdstr = do_CreateInstance( NS_SUPPORTS_CSTRING_CONTRACTID ); ++ nsCOMPtr 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 command; ++ nsCOMPtr command = do_CreateInstance( NS_ARRAY_CONTRACTID ); ++ if (!command) ++ return NS_ERROR_FAILURE; ++ ++ nsCOMPtr 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 command; -+ command.AppendElement( NS_LITERAL_CSTRING( "RUN" )); -+ nsCString app; ++ nsCOMPtr command = do_CreateInstance( NS_ARRAY_CONTRACTID ); ++ if (!command) ++ return NS_ERROR_FAILURE; ++ ++ nsCOMPtr cmdstr = do_CreateInstance( NS_SUPPORTS_CSTRING_CONTRACTID ); ++ nsCOMPtr appstr = do_CreateInstance( NS_SUPPORTS_CSTRING_CONTRACTID ); ++ nsCOMPtr 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 command; -+ command.AppendElement( NS_LITERAL_CSTRING( "GETDEFAULTFEEDREADER" )); -+ nsTArray output; -+ if( !nsKDEUtils::command( command, &output ) || output.Length() != 1 ) ++ nsCOMPtr command = do_CreateInstance( NS_ARRAY_CONTRACTID ); ++ if( !command ) ++ return NS_ERROR_FAILURE; ++ ++ nsCOMPtr 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 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 resstr = do_QueryElementAt( output, 0 ); ++ if( !resstr ) ++ return NS_ERROR_FAILURE; ++ ++ nsCAutoString path; ++ resstr->GetData( path ); + if (path.IsEmpty()) + return NS_ERROR_FAILURE; + diff -r 997d2e729a8c -r c7b8a6aede34 mozilla-kde.patch --- a/mozilla-kde.patch Sat Feb 18 22:28:33 2012 +0100 +++ b/mozilla-kde.patch Tue Feb 21 20:51:21 2012 +0100 @@ -1,3 +1,9 @@ +Description: Add KDE integration to Firefox (toolkit parts) +Author: Wolfgang Rosenauer +Author: Lubos Lunak +Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=140751 + https://bugzilla.novell.com/show_bug.cgi?id=170055 + diff --git a/modules/libpref/src/Makefile.in b/modules/libpref/src/Makefile.in --- a/modules/libpref/src/Makefile.in +++ b/modules/libpref/src/Makefile.in @@ -2171,9 +2177,9 @@ + command.AppendElement( NS_LITERAL_CSTRING( "GETPROXY" )); + command.AppendElement( url ); + nsTArray result; -+ if( !nsKDEUtils::command( command, &result ) || result.Count() != 1 ) ++ if( !nsKDEUtils::command( command, &result ) || result.Length() != 1 ) + return NS_ERROR_FAILURE; -+ aResult = *result[ 0 ]; ++ aResult = result[0]; + return NS_OK; +} + @@ -2204,7 +2210,7 @@ new file mode 100644 --- /dev/null +++ b/toolkit/xre/nsKDEUtils.cpp -@@ -0,0 +1,330 @@ +@@ -0,0 +1,372 @@ +/* -*- 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 @@ -2244,6 +2250,10 @@ + +#include "nsKDEUtils.h" +#include "nsIWidget.h" ++#include "nsISupportsPrimitives.h" ++#include "nsIMutableArray.h" ++#include "nsComponentManagerUtils.h" ++#include "nsArrayUtils.h" + +#include + @@ -2302,7 +2312,7 @@ + nsTArray command; + command.AppendElement( NS_LITERAL_CSTRING( "CHECK" )); + command.AppendElement( NS_LITERAL_CSTRING( MAKE_STR( KMOZILLAHELPER_VERSION ))); -+ bool kde = nsKDEUtils::command( command.get() ); ++ bool kde = nsKDEUtils::command( command ); +#ifdef DEBUG_KDE + fprintf( stderr, "KDE RUNNING %d\n", kde ); +#endif @@ -2395,6 +2405,46 @@ + return self()->internalCommand( command, NULL, false, output ); + } + ++bool nsKDEUtils::command( nsIArray* command, nsIArray** output) ++ { ++ NS_ENSURE_ARG( command ); ++ ++ nsTArray in; ++ PRUint32 length; ++ command->GetLength( &length ); ++ for ( PRUint32 i = 0; i < length; i++ ) ++ { ++ nsCOMPtr str = do_QueryElementAt( command, i ); ++ if( str ) ++ { ++ nsCAutoString s; ++ str->GetData( s ); ++ in.AppendElement( s ); ++ } ++ } ++ ++ nsTArray out; ++ bool ret = self()->internalCommand( in, NULL, false, &out ); ++ ++ if ( !output ) return ret; ++ ++ nsCOMPtr result = do_CreateInstance( NS_ARRAY_CONTRACTID ); ++ if ( !result ) return false; ++ ++ for ( PRUint32 i = 0; i < out.Length(); i++ ) ++ { ++ nsCOMPtr rstr = do_CreateInstance( NS_SUPPORTS_CSTRING_CONTRACTID ); ++ if ( !rstr ) return false; ++ ++ rstr->SetData( out[i] ); ++ result->AppendElement( rstr, false ); ++ } ++ ++ NS_ADDREF( *output = result); ++ return ret; ++ } ++ ++ +bool nsKDEUtils::commandBlockUi( const nsTArray& command, const GtkWindow* parent, nsTArray* output ) + { + return self()->internalCommand( command, parent, true, output ); @@ -2403,11 +2453,9 @@ +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(internal_command); ++ feedCommand( 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; @@ -2539,7 +2587,7 @@ new file mode 100644 --- /dev/null +++ b/toolkit/xre/nsKDEUtils.h -@@ -0,0 +1,78 @@ +@@ -0,0 +1,81 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- + * + * ***** BEGIN LICENSE BLOCK ***** @@ -2587,6 +2635,8 @@ + +typedef struct _GtkWindow GtkWindow; + ++class nsIArray; ++ +class NS_EXPORT nsKDEUtils + { + public: @@ -2599,6 +2649,7 @@ + static bool kdeSupport(); + /* Executes the given helper command, returns true if helper returned success. */ + static bool command( const nsTArray& command, nsTArray* output = NULL ); ++ static bool command( nsIArray* command, nsIArray** 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). */