From 943d9c10621216caaaa3425289618b2166eb6cbb3e9f801a8fff182137d2f179 Mon Sep 17 00:00:00 2001 From: Wolfgang Rosenauer Date: Sun, 13 Sep 2009 22:08:25 +0000 Subject: [PATCH] KDE integration OBS-URL: https://build.opensuse.org/package/show/mozilla:Factory/MozillaFirefox?expand=0&rev=112 --- MozillaFirefox.changes | 8 + MozillaFirefox.spec | 7 +- firefox-cross-desktop.patch | 43 ---- firefox-kde.patch | 407 ++++++++++++++++++++++++++++++++++++ kde.js | 1 + 5 files changed, 422 insertions(+), 44 deletions(-) create mode 100644 firefox-kde.patch create mode 100644 kde.js diff --git a/MozillaFirefox.changes b/MozillaFirefox.changes index b75af495..e5f2dcbd 100644 --- a/MozillaFirefox.changes +++ b/MozillaFirefox.changes @@ -1,3 +1,11 @@ +------------------------------------------------------------------- +Mon Sep 14 00:07:55 CEST 2009 - wr@rosenauer.org + +- added KDE integration patch from llunak@novell.com + (mozilla-kde.patch) + * support for knotify, making -kde4-addon obsolete + * KDE-specific support functional (bnc#170055) - + ------------------------------------------------------------------- Thu Sep 10 09:34:26 CEST 2009 - wr@rosenauer.org diff --git a/MozillaFirefox.spec b/MozillaFirefox.spec index d70be087..72e180c9 100644 --- a/MozillaFirefox.spec +++ b/MozillaFirefox.spec @@ -40,6 +40,7 @@ Source3: mozilla.sh.in Source4: find-external-requires.sh # this needs to be shipped when lockdown changes are back Source5: firefox.schemas +Source6: kde.js Source7: l10n-%{version}.tar.bz2 Source8: firefox-mimeinfo.xml Source16: firefox.1 @@ -50,6 +51,7 @@ Patch3: toolkit-download-folder.patch Patch4: mozilla-linkorder.patch Patch5: firefox-bug506901.patch Patch6: firefox-cross-desktop.patch +Patch7: firefox-kde.patch Patch14: credits.patch Patch17: firefox-appname.patch BuildRoot: %{_tmppath}/%{name}-%{version}-build @@ -147,6 +149,7 @@ cd $RPM_BUILD_DIR/mozilla %patch4 -p1 %patch5 -p1 %patch6 -p1 +%patch7 -p1 %patch14 %patch17 @@ -244,12 +247,14 @@ cp %{SOURCE16} $RPM_BUILD_ROOT%{_mandir}/man1/%{progname}.1 # apply SUSE defaults sed -e 's,RPM_VERSION,%{version}-%{release},g' \ %{SOURCE17} > suse-default-prefs -cp suse-default-prefs $RPM_BUILD_ROOT/%{progdir}/defaults/preferences/firefox-build.js +cp suse-default-prefs $RPM_BUILD_ROOT%{progdir}/defaults/preferences/firefox-build.js rm suse-default-prefs # use correct locale for useragent cat > $RPM_BUILD_ROOT%{progdir}/defaults/preferences/firefox-l10n.js << EOF pref("general.useragent.locale", "chrome://global/locale/intl.properties"); EOF +# install kde.js +install -m 644 %{SOURCE6} $RPM_BUILD_ROOT%{progdir}/defaults/preferences/kde.js ########## # ADDONS # diff --git a/firefox-cross-desktop.patch b/firefox-cross-desktop.patch index 4b7b9e7b..ef9da9a3 100644 --- a/firefox-cross-desktop.patch +++ b/firefox-cross-desktop.patch @@ -24,46 +24,3 @@ diff --git a/browser/base/content/nsContextMenu.js b/browser/base/content/nsCont haveSetDesktopBackground && this.onLoadedImage); if (haveSetDesktopBackground && this.onLoadedImage) { -diff --git a/browser/components/preferences/advanced.js b/browser/components/preferences/advanced.js ---- a/browser/components/preferences/advanced.js -+++ b/browser/components/preferences/advanced.js -@@ -594,20 +594,38 @@ var gAdvancedPane = { - var brandShortName = brandBundle.getString("brandShortName"); - var promptTitle = shellBundle.getString("setDefaultBrowserTitle"); - var promptMessage; - const IPS = Components.interfaces.nsIPromptService; - var psvc = Components.classes["@mozilla.org/embedcomp/prompt-service;1"] - .getService(IPS); -+ -+ var env = Components.classes["@mozilla.org/process/environment;1"] -+ .getService(Components.interfaces.nsIEnvironment); -+ var kde_session = 0; -+ if (env.get('KDE_FULL_SESSION') == "true") -+ kde_session = 1; -+ - if (!shellSvc.isDefaultBrowser(false)) { - promptMessage = shellBundle.getFormattedString("setDefaultBrowserMessage", - [brandShortName]); - var rv = psvc.confirmEx(window, promptTitle, promptMessage, - IPS.STD_YES_NO_BUTTONS, - null, null, null, null, { }); -- if (rv == 0) -+ if (rv == 0) { - shellSvc.setDefaultBrowser(true, false); -+ if (kde_session == 1) { -+ var shellObj = Components.classes["@mozilla.org/file/local;1"] -+ .createInstance(Components.interfaces.nsILocalFile); -+ shellObj.initWithPath("/usr/bin/kwriteconfig"); -+ var process = Components.classes["@mozilla.org/process/util;1"] -+ .createInstance(Components.interfaces.nsIProcess); -+ process.init(shellObj); -+ var args = ["--file", "kdeglobals", "--group", "General", "--key", "BrowserApplication", "MozillaFirefox"]; -+ process.run(false, args, args.length); -+ } -+ } - } - else { - promptMessage = shellBundle.getFormattedString("alreadyDefaultBrowser", - [brandShortName]); - psvc.alert(window, promptTitle, promptMessage); - } diff --git a/firefox-kde.patch b/firefox-kde.patch new file mode 100644 index 00000000..ced3523d --- /dev/null +++ b/firefox-kde.patch @@ -0,0 +1,407 @@ +--- mozilla/browser/components/build/nsModule.cpp.sav 2009-09-11 14:42:26.000000000 +0200 ++++ mozilla/browser/components/build/nsModule.cpp 2009-09-11 14:42:35.000000000 +0200 +@@ -46,7 +46,7 @@ + #elif defined(XP_MACOSX) + #include "nsMacShellService.h" + #elif defined(MOZ_WIDGET_GTK2) +-#include "nsGNOMEShellService.h" ++#include "nsUnixShellService.h" + #endif + + #ifndef WINCE +@@ -88,7 +88,8 @@ NS_GENERIC_FACTORY_CONSTRUCTOR(nsWindows + #elif defined(XP_MACOSX) + NS_GENERIC_FACTORY_CONSTRUCTOR(nsMacShellService) + #elif defined(MOZ_WIDGET_GTK2) +-NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsGNOMEShellService, Init) ++// in nsUnixShellService ++//NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsUnixShellService, Init) + #endif + + #ifndef WINCE +@@ -132,7 +133,7 @@ static const nsModuleComponentInfo compo + { "Browser Shell Service", + NS_SHELLSERVICE_CID, + NS_SHELLSERVICE_CONTRACTID, +- nsGNOMEShellServiceConstructor }, ++ nsUnixShellServiceConstructor }, + + #endif + +--- mozilla/browser/components/shell/src/Makefile.in.sav 2009-09-11 14:42:26.000000000 +0200 ++++ mozilla/browser/components/shell/src/Makefile.in 2009-09-11 14:42:35.000000000 +0200 +@@ -75,11 +75,12 @@ ifneq (,$(filter mac cocoa,$(MOZ_WIDGET_ + CPPSRCS = nsMacShellService.cpp + else + ifeq ($(MOZ_WIDGET_TOOLKIT), gtk2) +-CPPSRCS = nsGNOMEShellService.cpp ++CPPSRCS = nsUnixShellService.cpp nsGNOMEShellService.cpp nsKDEShellService.cpp + REQUIRES += \ + mozgnome \ + thebes \ + $(NULL) ++LOCAL_INCLUDES += -I$(topsrcdir)/toolkit/xre + endif + endif + endif +--- mozilla/browser/components/shell/src/nsKDEShellService.cpp.sav 2009-09-11 14:42:26.000000000 +0200 ++++ mozilla/browser/components/shell/src/nsKDEShellService.cpp 2009-09-11 14:42:35.000000000 +0200 +@@ -0,0 +1,193 @@ ++/* -*- 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 ++ * ++ * The contents of this file are subject to the Mozilla Public License Version ++ * 1.1 (the "License"); you may not use this file except in compliance with ++ * the License. You may obtain a copy of the License at ++ * http://www.mozilla.org/MPL/ ++ * ++ * Software distributed under the License is distributed on an "AS IS" basis, ++ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License ++ * for the specific language governing rights and limitations under the ++ * License. ++ * ++ * The Original Code is Shell Service. ++ * ++ * The Initial Developer of the Original Code is mozilla.org. ++ * Portions created by the Initial Developer are Copyright (C) 2004 ++ * the Initial Developer. All Rights Reserved. ++ * ++ * Contributor(s): ++ * ++ * Alternatively, the contents of this file may be used under the terms of ++ * either the GNU General Public License Version 2 or later (the "GPL"), or ++ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), ++ * in which case the provisions of the GPL or the LGPL are applicable instead ++ * of those above. If you wish to allow use of your version of this file only ++ * under the terms of either the GPL or the LGPL, and not to allow others to ++ * use your version of this file under the terms of the MPL, indicate your ++ * 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 ++ * 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 "nsKDEShellService.h" ++#include "nsShellService.h" ++#include "nsKDEUtils.h" ++#include "nsCOMPtr.h" ++#include "nsIPrefService.h" ++#include "nsIProcess.h" ++#include "nsILocalFile.h" ++#include "nsServiceManagerUtils.h" ++#include "nsComponentManagerUtils.h" ++ ++nsresult ++nsKDEShellService::Init() ++ { ++ if( !nsKDEUtils::kdeSupport()) ++ return NS_ERROR_NOT_AVAILABLE; ++ return NS_OK; ++ } ++ ++NS_IMPL_ISUPPORTS1(nsKDEShellService, nsIShellService) ++ ++NS_IMETHODIMP ++nsKDEShellService::IsDefaultBrowser(PRBool aStartupCheck, ++ PRBool* aIsDefaultBrowser) ++ { ++ *aIsDefaultBrowser = PR_FALSE; ++ if (aStartupCheck) ++ mCheckedThisSession = PR_TRUE; ++ nsCStringArray command; ++ command.AppendCString( NS_LITERAL_CSTRING( "ISDEFAULTBROWSER" )); ++ if( nsKDEUtils::command( command )) ++ *aIsDefaultBrowser = PR_TRUE; ++ return NS_OK; ++ } ++ ++NS_IMETHODIMP ++nsKDEShellService::SetDefaultBrowser(PRBool aClaimAllTypes, ++ PRBool aForAllUsers) ++ { ++ nsCStringArray command; ++ command.AppendCString( NS_LITERAL_CSTRING( "SETDEFAULTBROWSER" )); ++ command.AppendCString( aClaimAllTypes ? NS_LITERAL_CSTRING( "ALLTYPES" ) : NS_LITERAL_CSTRING( "NORMAL" )); ++ return nsKDEUtils::command( command ) ? NS_OK : NS_ERROR_FAILURE; ++ } ++ ++NS_IMETHODIMP ++nsKDEShellService::GetShouldCheckDefaultBrowser(PRBool* aResult) ++{ ++ // 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; ++ return NS_OK; ++ } ++ ++ nsCOMPtr prefs; ++ nsCOMPtr pserve(do_GetService(NS_PREFSERVICE_CONTRACTID)); ++ if (pserve) ++ pserve->GetBranch("", getter_AddRefs(prefs)); ++ ++ if (prefs) ++ prefs->GetBoolPref(PREF_CHECKDEFAULTBROWSER, aResult); ++ ++ return NS_OK; ++} ++ ++NS_IMETHODIMP ++nsKDEShellService::SetShouldCheckDefaultBrowser(PRBool aShouldCheck) ++{ ++ nsCOMPtr prefs; ++ nsCOMPtr pserve(do_GetService(NS_PREFSERVICE_CONTRACTID)); ++ if (pserve) ++ pserve->GetBranch("", getter_AddRefs(prefs)); ++ ++ if (prefs) ++ prefs->SetBoolPref(PREF_CHECKDEFAULTBROWSER, aShouldCheck); ++ ++ return NS_OK; ++} ++ ++NS_IMETHODIMP ++nsKDEShellService::SetDesktopBackground(nsIDOMElement* aElement, ++ PRInt32 aPosition) ++ { ++ return NS_ERROR_NOT_IMPLEMENTED; ++ } ++ ++NS_IMETHODIMP ++nsKDEShellService::GetDesktopBackgroundColor(PRUint32 *aColor) ++ { ++ return NS_ERROR_NOT_IMPLEMENTED; ++ } ++ ++NS_IMETHODIMP ++nsKDEShellService::SetDesktopBackgroundColor(PRUint32 aColor) ++ { ++ return NS_ERROR_NOT_IMPLEMENTED; ++ } ++ ++NS_IMETHODIMP ++nsKDEShellService::OpenApplication(PRInt32 aApplication) ++ { ++ nsCStringArray command; ++ if( aApplication == APPLICATION_MAIL ) ++ command.AppendCString( NS_LITERAL_CSTRING( "OPENMAIL" )); ++ else if( aApplication == APPLICATION_NEWS ) ++ command.AppendCString( NS_LITERAL_CSTRING( "OPENNEWS" )); ++ else ++ return NS_ERROR_NOT_IMPLEMENTED; ++ return nsKDEUtils::command( command ) ? NS_OK : NS_ERROR_FAILURE; ++ } ++ ++NS_IMETHODIMP ++nsKDEShellService::OpenApplicationWithURI(nsILocalFile* aApplication, const nsACString& aURI) ++ { ++ nsCStringArray command; ++ command.AppendCString( NS_LITERAL_CSTRING( "RUN" )); ++ nsCString app; ++ nsresult rv = aApplication->GetNativePath( app ); ++ NS_ENSURE_SUCCESS( rv, rv ); ++ command.AppendCString( app ); ++ command.AppendCString( aURI ); ++ return nsKDEUtils::command( command ) ? NS_OK : NS_ERROR_FAILURE; ++ } ++ ++NS_IMETHODIMP ++nsKDEShellService::GetDefaultFeedReader(nsILocalFile** _retval) ++ { ++ *_retval = nsnull; ++ ++ nsCStringArray command; ++ command.AppendCString( NS_LITERAL_CSTRING( "GETDEFAULTFEEDREADER" )); ++ nsCStringArray output; ++ if( !nsKDEUtils::command( command, &output ) || output.Count() != 1 ) ++ return NS_ERROR_FAILURE; ++ ++ nsCString path; ++ path = *output[ 0 ]; ++ if (path.IsEmpty()) ++ return NS_ERROR_FAILURE; ++ ++ nsresult rv; ++ nsCOMPtr defaultReader = ++ do_CreateInstance("@mozilla.org/file/local;1", &rv); ++ NS_ENSURE_SUCCESS(rv, rv); ++ ++ rv = defaultReader->InitWithNativePath(path); ++ NS_ENSURE_SUCCESS(rv, rv); ++ ++ PRBool exists; ++ rv = defaultReader->Exists(&exists); ++ NS_ENSURE_SUCCESS(rv, rv); ++ if (!exists) ++ return NS_ERROR_FAILURE; ++ ++ NS_ADDREF(*_retval = defaultReader); ++ return NS_OK; ++ } +--- mozilla/browser/components/shell/src/nsKDEShellService.h.sav 2009-09-11 14:42:26.000000000 +0200 ++++ mozilla/browser/components/shell/src/nsKDEShellService.h 2009-09-11 14:42:35.000000000 +0200 +@@ -0,0 +1,59 @@ ++/* -*- 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 ++ * ++ * The contents of this file are subject to the Mozilla Public License Version ++ * 1.1 (the "License"); you may not use this file except in compliance with ++ * the License. You may obtain a copy of the License at ++ * http://www.mozilla.org/MPL/ ++ * ++ * Software distributed under the License is distributed on an "AS IS" basis, ++ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License ++ * for the specific language governing rights and limitations under the ++ * License. ++ * ++ * The Original Code is Shell Service. ++ * ++ * The Initial Developer of the Original Code is mozilla.org. ++ * Portions created by the Initial Developer are Copyright (C) 2004 ++ * the Initial Developer. All Rights Reserved. ++ * ++ * Contributor(s): ++ * ++ * Alternatively, the contents of this file may be used under the terms of ++ * either the GNU General Public License Version 2 or later (the "GPL"), or ++ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), ++ * in which case the provisions of the GPL or the LGPL are applicable instead ++ * of those above. If you wish to allow use of your version of this file only ++ * under the terms of either the GPL or the LGPL, and not to allow others to ++ * use your version of this file under the terms of the MPL, indicate your ++ * 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 ++ * 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 ***** */ ++ ++#ifndef nskdeshellservice_h____ ++#define nskdeshellservice_h____ ++ ++#include "nsIShellService.h" ++#include "nsStringAPI.h" ++ ++class nsKDEShellService : public nsIShellService ++{ ++public: ++ nsKDEShellService() : mCheckedThisSession(PR_FALSE) { } ++ ++ NS_DECL_ISUPPORTS ++ NS_DECL_NSISHELLSERVICE ++ ++ nsresult Init() NS_HIDDEN; ++ ++private: ++ ~nsKDEShellService() {} ++ ++ PRPackedBool mCheckedThisSession; ++}; ++ ++#endif // nskdeshellservice_h____ +--- mozilla/browser/components/shell/src/nsUnixShellService.cpp.sav 2009-09-11 14:42:26.000000000 +0200 ++++ mozilla/browser/components/shell/src/nsUnixShellService.cpp 2009-09-11 14:42:35.000000000 +0200 +@@ -0,0 +1,52 @@ ++/* -*- 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 ++ * ++ * The contents of this file are subject to the Mozilla Public License Version ++ * 1.1 (the "License"); you may not use this file except in compliance with ++ * the License. You may obtain a copy of the License at ++ * http://www.mozilla.org/MPL/ ++ * ++ * Software distributed under the License is distributed on an "AS IS" basis, ++ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License ++ * for the specific language governing rights and limitations under the ++ * License. ++ * ++ * The Original Code is Shell Service. ++ * ++ * The Initial Developer of the Original Code is mozilla.org. ++ * Portions created by the Initial Developer are Copyright (C) 2004 ++ * the Initial Developer. All Rights Reserved. ++ * ++ * Contributor(s): ++ * ++ * Alternatively, the contents of this file may be used under the terms of ++ * either the GNU General Public License Version 2 or later (the "GPL"), or ++ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), ++ * in which case the provisions of the GPL or the LGPL are applicable instead ++ * of those above. If you wish to allow use of your version of this file only ++ * under the terms of either the GPL or the LGPL, and not to allow others to ++ * use your version of this file under the terms of the MPL, indicate your ++ * 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 ++ * 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 "nsUnixShellService.h" ++#include "nsGNOMEShellService.h" ++#include "nsKDEShellService.h" ++#include "nsKDEUtils.h" ++#include "nsIGenericFactory.h" ++ ++NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsGNOMEShellService, Init) ++NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsKDEShellService, Init) ++ ++NS_METHOD ++nsUnixShellServiceConstructor(nsISupports *aOuter, REFNSIID aIID, void **aResult) ++{ ++ if( nsKDEUtils::kdeSupport()) ++ return nsKDEShellServiceConstructor( aOuter, aIID, aResult ); ++ return nsGNOMEShellServiceConstructor( aOuter, aIID, aResult ); ++} +--- mozilla/browser/components/shell/src/nsUnixShellService.h.sav 2009-09-11 14:42:26.000000000 +0200 ++++ mozilla/browser/components/shell/src/nsUnixShellService.h 2009-09-11 14:42:35.000000000 +0200 +@@ -0,0 +1,45 @@ ++/* -*- 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 ++ * ++ * The contents of this file are subject to the Mozilla Public License Version ++ * 1.1 (the "License"); you may not use this file except in compliance with ++ * the License. You may obtain a copy of the License at ++ * http://www.mozilla.org/MPL/ ++ * ++ * Software distributed under the License is distributed on an "AS IS" basis, ++ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License ++ * for the specific language governing rights and limitations under the ++ * License. ++ * ++ * The Original Code is Shell Service. ++ * ++ * The Initial Developer of the Original Code is mozilla.org. ++ * Portions created by the Initial Developer are Copyright (C) 2004 ++ * the Initial Developer. All Rights Reserved. ++ * ++ * Contributor(s): ++ * ++ * Alternatively, the contents of this file may be used under the terms of ++ * either the GNU General Public License Version 2 or later (the "GPL"), or ++ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), ++ * in which case the provisions of the GPL or the LGPL are applicable instead ++ * of those above. If you wish to allow use of your version of this file only ++ * under the terms of either the GPL or the LGPL, and not to allow others to ++ * use your version of this file under the terms of the MPL, indicate your ++ * 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 ++ * 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 ***** */ ++ ++#ifndef nsunixshellservice_h____ ++#define nsunixshellservice_h____ ++ ++#include "nsIShellService.h" ++ ++NS_METHOD ++nsUnixShellServiceConstructor(nsISupports *aOuter, REFNSIID aIID, void **aResult); ++ ++#endif // nsunixshellservice_h____ diff --git a/kde.js b/kde.js new file mode 100644 index 00000000..f06d73ae --- /dev/null +++ b/kde.js @@ -0,0 +1 @@ +pref("browser.preferences.instantApply", false);