diff --git a/mozilla-libnotify.patch b/mozilla-libnotify.patch new file mode 100644 index 0000000..161dedb --- /dev/null +++ b/mozilla-libnotify.patch @@ -0,0 +1,823 @@ +diff -up mozilla-1.9.1/config/autoconf.mk.in.libnotify mozilla-1.9.1/config/autoconf.mk.in +--- mozilla-1.9.1/config/autoconf.mk.in.libnotify 2009-07-30 17:30:11.000000000 +0200 ++++ mozilla-1.9.1/config/autoconf.mk.in 2009-08-21 15:31:20.000000000 +0200 +@@ -57,14 +57,14 @@ MOZ_PKG_SPECIAL = @MOZ_PKG_SPECIAL@ + prefix = @prefix@ + exec_prefix = @exec_prefix@ + bindir = @bindir@ +-includedir = @includedir@/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION) ++includedir = @includedir@/$(MOZ_APP_NAME)-sdk-$(MOZ_APP_VERSION) + libdir = @libdir@ + datadir = @datadir@ + mandir = @mandir@ +-idldir = $(datadir)/idl/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION) ++idldir = $(datadir)/idl/$(MOZ_APP_NAME)-sdk-$(MOZ_APP_VERSION) + + installdir = $(libdir)/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION) +-sdkdir = $(libdir)/$(MOZ_APP_NAME)-devel-$(MOZ_APP_VERSION) ++sdkdir = $(libdir)/$(MOZ_APP_NAME)-sdk-$(MOZ_APP_VERSION) + + DIST = $(DEPTH)/dist + LIBXUL_SDK = @LIBXUL_SDK@ +@@ -528,6 +528,10 @@ MOZ_PANGO_LIBS = @MOZ_PANGO_LIB + MOZ_XIE_LIBS = @MOZ_XIE_LIBS@ + XT_LIBS = @XT_LIBS@ + ++MOZ_LIBNOTIFY_CFLAGS = @MOZ_LIBNOTIFY_CFLAGS@ ++MOZ_LIBNOTIFY_LIBS = @MOZ_LIBNOTIFY_LIBS@ ++MOZ_ENABLE_LIBNOTIFY = @MOZ_ENABLE_LIBNOTIFY@ ++ + GLIB_CFLAGS = @GLIB_CFLAGS@ + GLIB_LIBS = @GLIB_LIBS@ + GLIB_GMODULE_LIBS = @GLIB_GMODULE_LIBS@ +diff -up mozilla-1.9.1/config/system-headers.libnotify mozilla-1.9.1/config/system-headers +--- mozilla-1.9.1/config/system-headers.libnotify 2009-07-30 17:30:11.000000000 +0200 ++++ mozilla-1.9.1/config/system-headers 2009-08-21 15:31:20.000000000 +0200 +@@ -432,6 +432,7 @@ libgnomevfs/gnome-vfs-ops.h + libgnomevfs/gnome-vfs-standard-callbacks.h + libIDL/IDL.h + lib$routines.h ++libnotify/notify.h + limits + limits.h + link.h +diff -up mozilla-1.9.1/configure.in.libnotify mozilla-1.9.1/configure.in +--- mozilla-1.9.1/configure.in.libnotify 2009-07-30 17:30:11.000000000 +0200 ++++ mozilla-1.9.1/configure.in 2009-08-21 15:31:20.000000000 +0200 +@@ -132,6 +132,7 @@ LIBGNOME_VERSION=2.0 + STARTUP_NOTIFICATION_VERSION=0.8 + DBUS_VERSION=0.60 + SQLITE_VERSION=3.6.10 ++LIBNOTIFY_VERSION=0.4 + + MSMANIFEST_TOOL= + +@@ -5186,6 +5187,39 @@ AC_SUBST(MOZ_DBUS_GLIB_CFLAGS) + AC_SUBST(MOZ_DBUS_GLIB_LIBS) + + dnl ======================================================== ++dnl = libnotify support ++dnl ======================================================== ++ ++if test "$MOZ_ENABLE_GTK2" ++then ++ MOZ_ENABLE_LIBNOTIFY=1 ++ ++ MOZ_ARG_DISABLE_BOOL(libnotify, ++ [ --disable-libnotify Disable libnotify support ], ++ MOZ_ENABLE_LIBNOTIFY=, ++ MOZ_ENABLE_LIBNOTIFY=1) ++ ++ if test "$MOZ_ENABLE_LIBNOTIFY" ++ then ++ AC_DEFINE(MOZ_ENABLE_LIBNOTIFY) ++ fi ++fi ++ ++if test -z "$SKIP_LIBRARY_CHECKS" ++then ++ if test "$MOZ_ENABLE_GTK2" ++ then ++ if test "$MOZ_ENABLE_LIBNOTIFY" ++ then ++ PKG_CHECK_MODULES(MOZ_LIBNOTIFY, libnotify >= $LIBNOTIFY_VERSION) ++ fi ++ fi ++fi ++AC_SUBST(MOZ_ENABLE_LIBNOTIFY) ++AC_SUBST(MOZ_LIBNOTIFY_CFLAGS) ++AC_SUBST(MOZ_LIBNOTIFY_LIBS) ++ ++dnl ======================================================== + dnl = Build Personal Security Manager + dnl ======================================================== + MOZ_ARG_DISABLE_BOOL(crypto, +diff -up mozilla-1.9.1/js/src/config/system-headers.libnotify mozilla-1.9.1/js/src/config/system-headers +--- mozilla-1.9.1/js/src/config/system-headers.libnotify 2009-07-30 17:30:17.000000000 +0200 ++++ mozilla-1.9.1/js/src/config/system-headers 2009-08-21 15:31:20.000000000 +0200 +@@ -432,6 +432,7 @@ libgnomevfs/gnome-vfs-ops.h + libgnomevfs/gnome-vfs-standard-callbacks.h + libIDL/IDL.h + lib$routines.h ++libnotify/notify.h + limits + limits.h + link.h +diff -up mozilla-1.9.1/toolkit/components/alerts/src/Makefile.in.libnotify mozilla-1.9.1/toolkit/components/alerts/src/Makefile.in +--- mozilla-1.9.1/toolkit/components/alerts/src/Makefile.in.libnotify 2009-07-30 17:30:31.000000000 +0200 ++++ mozilla-1.9.1/toolkit/components/alerts/src/Makefile.in 2009-08-21 15:31:20.000000000 +0200 +@@ -60,6 +60,8 @@ CPPSRCS = \ + nsAlertsService.cpp \ + $(NULL) + ++LOCAL_INCLUDES += -I$(topsrcdir)/toolkit/components/build/ ++ + include $(topsrcdir)/config/rules.mk + + EXTRA_DSO_LDOPTS += $(MOZ_COMPONENT_LIBS) +diff -up mozilla-1.9.1/toolkit/components/alerts/src/nsAlertsService.cpp.libnotify mozilla-1.9.1/toolkit/components/alerts/src/nsAlertsService.cpp +--- mozilla-1.9.1/toolkit/components/alerts/src/nsAlertsService.cpp.libnotify 2009-07-30 17:30:31.000000000 +0200 ++++ mozilla-1.9.1/toolkit/components/alerts/src/nsAlertsService.cpp 2009-08-21 15:31:20.000000000 +0200 +@@ -47,6 +47,7 @@ + #include "nsDependentString.h" + #include "nsWidgetsCID.h" + #include "nsILookAndFeel.h" ++#include "nsToolkitCompsCID.h" + + static NS_DEFINE_CID(kLookAndFeelCID, NS_LOOKANDFEEL_CID); + +@@ -73,9 +74,18 @@ NS_IMETHODIMP nsAlertsService::ShowAlert + nsIObserver * aAlertListener, + const nsAString & aAlertName) + { ++ // Check if there is an optional service that handles system-level notifications ++ nsCOMPtr sysAlerts(do_GetService(NS_SYSTEMALERTSERVICE_CONTRACTID)); ++ nsresult rv; ++ if (sysAlerts) { ++ rv = sysAlerts->ShowAlertNotification(aImageUrl, aAlertTitle, aAlertText, aAlertTextClickable, ++ aAlertCookie, aAlertListener, aAlertName); ++ if (NS_SUCCEEDED(rv)) ++ return rv; ++ } ++ + nsCOMPtr wwatch(do_GetService(NS_WINDOWWATCHER_CONTRACTID)); + nsCOMPtr newWindow; +- nsresult rv; + + nsCOMPtr argsArray; + rv = NS_NewISupportsArray(getter_AddRefs(argsArray)); +diff -up mozilla-1.9.1/toolkit/components/build/nsToolkitCompsCID.h.libnotify mozilla-1.9.1/toolkit/components/build/nsToolkitCompsCID.h +--- mozilla-1.9.1/toolkit/components/build/nsToolkitCompsCID.h.libnotify 2009-07-30 17:30:31.000000000 +0200 ++++ mozilla-1.9.1/toolkit/components/build/nsToolkitCompsCID.h 2009-08-21 15:31:20.000000000 +0200 +@@ -38,6 +38,13 @@ + #define NS_ALERTSERVICE_CONTRACTID \ + "@mozilla.org/alerts-service;1" + ++// This separate service uses the same nsIAlertsService interface, ++// but instead sends a notification to a platform alerts API ++// if available. Using a separate CID allows us to overwrite the XUL ++// alerts service at runtime. ++#define NS_SYSTEMALERTSERVICE_CONTRACTID \ ++ "@mozilla.org/system-alerts-service;1" ++ + #define NS_AUTOCOMPLETECONTROLLER_CONTRACTID \ + "@mozilla.org/autocomplete/controller;1" + +@@ -115,6 +122,10 @@ + #define NS_ALERTSSERVICE_CID \ + { 0xa0ccaaf8, 0x9da, 0x44d8, { 0xb2, 0x50, 0x9a, 0xc3, 0xe9, 0x3c, 0x81, 0x17 } } + ++// {84E11F80-CA55-11DD-AD8B-0800200C9A66} ++#define NS_SYSTEMALERTSSERVICE_CID \ ++{ 0x84e11f80, 0xca55, 0x11dd, { 0xad, 0x8b, 0x08, 0x00, 0x20, 0x0c, 0x9a, 0x66 } } ++ + // {F6D5EBBD-34F4-487d-9D10-3D34123E3EB9} + #define NS_AUTOCOMPLETECONTROLLER_CID \ + { 0xf6d5ebbd, 0x34f4, 0x487d, { 0x9d, 0x10, 0x3d, 0x34, 0x12, 0x3e, 0x3e, 0xb9 } } +diff -up mozilla-1.9.1/toolkit/system/gnome/Makefile.in.libnotify mozilla-1.9.1/toolkit/system/gnome/Makefile.in +--- mozilla-1.9.1/toolkit/system/gnome/Makefile.in.libnotify 2009-07-30 17:30:33.000000000 +0200 ++++ mozilla-1.9.1/toolkit/system/gnome/Makefile.in 2009-08-21 15:31:20.000000000 +0200 +@@ -51,6 +51,13 @@ REQUIRES = \ + xpcom \ + string \ + necko \ ++ alerts \ ++ gfx \ ++ imglib2 \ ++ intl \ ++ widget \ ++ thebes \ ++ cairo \ + $(NULL) + + CPPSRCS = \ +@@ -59,6 +66,13 @@ CPPSRCS = \ + nsGnomeModule.cpp \ + $(NULL) + ++ifdef MOZ_ENABLE_LIBNOTIFY ++CPPSRCS += \ ++ nsAlertsService.cpp \ ++ nsAlertsIconListener.cpp \ ++ $(NULL) ++endif ++ + EXTRA_DSO_LDOPTS += \ + $(XPCOM_GLUE_LDOPTS) \ + $(XPCOM_FROZEN_LDOPTS) \ +@@ -67,8 +81,11 @@ EXTRA_DSO_LDOPTS += \ + $(MOZ_GNOMEVFS_LIBS) \ + $(MOZ_LIBGNOME_LIBS) \ + $(GLIB_LIBS) \ ++ $(MOZ_LIBNOTIFY_LIBS) \ + $(NULL) + ++LOCAL_INCLUDES += -I$(topsrcdir)/toolkit/components/build/ ++ + include $(topsrcdir)/config/rules.mk + + CXXFLAGS += \ +@@ -76,4 +93,5 @@ CXXFLAGS += \ + $(MOZ_GNOMEVFS_CFLAGS) \ + $(MOZ_LIBGNOME_CFLAGS) \ + $(GLIB_CFLAGS) \ ++ $(MOZ_LIBNOTIFY_CFLAGS) \ + $(NULL) +diff -up /dev/null mozilla-1.9.1/toolkit/system/gnome/nsAlertsIconListener.cpp +--- /dev/null 2009-08-21 10:27:01.489538501 +0200 ++++ mozilla-1.9.1/toolkit/system/gnome/nsAlertsIconListener.cpp 2009-08-21 15:31:20.000000000 +0200 +@@ -0,0 +1,326 @@ ++/* -*- 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 mozilla.org code. ++ * ++ * The Initial Developer of the Original Code is ++ * Mozilla Corporation. ++ * Portions created by the Initial Developer are Copyright (C) 2008 ++ * 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 "nsAlertsIconListener.h" ++#include "imgILoader.h" ++#include "imgIRequest.h" ++#include "gfxIImageFrame.h" ++#include "nsIImage.h" ++#include "nsNetUtil.h" ++#include "nsIImageToPixbuf.h" ++#include "nsIStringBundle.h" ++ ++#include ++#include ++#include ++ ++static PRBool gHasActions = PR_FALSE; ++ ++static void notify_action_cb(NotifyNotification *notification, ++ gchar *action, gpointer user_data) ++{ ++ nsAlertsIconListener* alert = static_cast (user_data); ++ alert->SendCallback(); ++} ++ ++static void notify_closed_cb(NotifyNotification *notification, ++ gpointer user_data) ++{ ++ g_object_unref(notification); ++ ++ nsAlertsIconListener* alert = static_cast (user_data); ++ alert->SendClosed(); ++ NS_RELEASE(alert); ++} ++ ++NS_IMPL_ISUPPORTS2(nsAlertsIconListener, imgIContainerObserver, imgIDecoderObserver) ++ ++nsAlertsIconListener::nsAlertsIconListener() ++: mLoadedFrame(PR_FALSE) ++{ ++ MOZ_COUNT_CTOR(nsAlertsIconListener); ++} ++ ++nsAlertsIconListener::~nsAlertsIconListener() ++{ ++ MOZ_COUNT_DTOR(nsAlertsIconListener); ++ ++ if (mIconRequest) ++ mIconRequest->CancelAndForgetObserver(NS_BINDING_ABORTED); ++} ++ ++NS_IMETHODIMP ++nsAlertsIconListener::OnStartRequest(imgIRequest* aRequest) ++{ ++ return NS_OK; ++} ++ ++NS_IMETHODIMP ++nsAlertsIconListener::OnStartDecode(imgIRequest* aRequest) ++{ ++ return NS_OK; ++} ++ ++ ++NS_IMETHODIMP ++nsAlertsIconListener::OnStartContainer(imgIRequest* aRequest, ++ imgIContainer* aContainer) ++{ ++ return NS_OK; ++} ++ ++ ++NS_IMETHODIMP ++nsAlertsIconListener::OnStartFrame(imgIRequest* aRequest, ++ gfxIImageFrame* aFrame) ++{ ++ return NS_OK; ++} ++ ++ ++NS_IMETHODIMP ++nsAlertsIconListener::OnDataAvailable(imgIRequest* aRequest, ++ gfxIImageFrame* aFrame, ++ const nsIntRect* aRect) ++{ ++ return NS_OK; ++} ++ ++NS_IMETHODIMP ++nsAlertsIconListener::OnStopContainer(imgIRequest* aRequest, ++ imgIContainer* aContainer) ++{ ++ return NS_OK; ++} ++ ++ ++NS_IMETHODIMP ++nsAlertsIconListener::OnStopDecode(imgIRequest* aRequest, ++ nsresult status, ++ const PRUnichar* statusArg) ++{ ++ return NS_OK; ++} ++ ++NS_IMETHODIMP ++nsAlertsIconListener::FrameChanged(imgIContainer* aContainer, ++ gfxIImageFrame* aFrame, ++ nsIntRect* aDirtyRect) ++{ ++ return NS_OK; ++} ++ ++NS_IMETHODIMP ++nsAlertsIconListener::OnStopRequest(imgIRequest* aRequest, ++ PRBool aIsLastPart) ++{ ++ PRUint32 imgStatus = imgIRequest::STATUS_ERROR; ++ nsresult rv = aRequest->GetImageStatus(&imgStatus); ++ NS_ENSURE_SUCCESS(rv, rv); ++ if (imgStatus == imgIRequest::STATUS_ERROR && !mLoadedFrame) { ++ // We have an error getting the image. Display the notification with no icon. ++ ShowAlert(NULL); ++ } ++ ++ if (mIconRequest) { ++ mIconRequest->Cancel(NS_BINDING_ABORTED); ++ mIconRequest = nsnull; ++ } ++ return NS_OK; ++} ++ ++NS_IMETHODIMP ++nsAlertsIconListener::OnStopFrame(imgIRequest* aRequest, ++ gfxIImageFrame* aFrame) ++{ ++ if (aRequest != mIconRequest) ++ return NS_ERROR_FAILURE; ++ ++ if (mLoadedFrame) ++ return NS_OK; // only use one frame ++ ++ nsCOMPtr frame = aFrame; ++ nsCOMPtr image = do_GetInterface(frame); ++ if (!image) ++ return NS_ERROR_FAILURE; ++ ++ nsresult rv = image->LockImagePixels(PR_FALSE); ++ if (NS_FAILED(rv)) ++ return rv; ++ ++ nsCOMPtr imgToPixbuf = ++ do_GetService("@mozilla.org/widget/image-to-gdk-pixbuf;1"); ++ ++ GdkPixbuf* imagePixbuf = imgToPixbuf->ConvertImageToPixbuf(image); ++ if (!imagePixbuf) ++ return NS_ERROR_FAILURE; ++ ++ rv = image->UnlockImagePixels(PR_FALSE); ++ if (NS_FAILED(rv)) ++ return rv; ++ ++ ShowAlert(imagePixbuf); ++ ++ g_object_unref(imagePixbuf); ++ ++ mLoadedFrame = PR_TRUE; ++ return NS_OK; ++} ++ ++nsresult ++nsAlertsIconListener::ShowAlert(GdkPixbuf* aPixbuf) ++{ ++ NotifyNotification* notify = notify_notification_new(mAlertTitle.get(), ++ mAlertText.get(), ++ NULL, NULL); ++ if (!notify) ++ return NS_ERROR_OUT_OF_MEMORY; ++ ++ if (aPixbuf) ++ notify_notification_set_icon_from_pixbuf(notify, aPixbuf); ++ ++ NS_ADDREF(this); ++ if (mAlertHasAction) { ++ // What we put as the label doesn't matter here, if the action ++ // string is "default" then that makes the entire bubble clickable ++ // rather than creating a button. ++ notify_notification_add_action(notify, "default", "Activate", ++ notify_action_cb, this, NULL); ++ } ++ ++ g_signal_connect(notify, "closed", G_CALLBACK(notify_closed_cb), this); ++ gboolean result = notify_notification_show(notify, NULL); ++ ++ return result ? NS_OK : NS_ERROR_FAILURE; ++} ++ ++nsresult ++nsAlertsIconListener::StartRequest(const nsAString & aImageUrl) ++{ ++ if (mIconRequest) { ++ // Another icon request is already in flight. Kill it. ++ mIconRequest->Cancel(NS_BINDING_ABORTED); ++ mIconRequest = nsnull; ++ } ++ ++ nsCOMPtr imageUri; ++ NS_NewURI(getter_AddRefs(imageUri), aImageUrl); ++ if (!imageUri) ++ return ShowAlert(NULL); ++ ++ nsCOMPtr il(do_GetService("@mozilla.org/image/loader;1")); ++ if (!il) ++ return ShowAlert(NULL); ++ ++ return il->LoadImage(imageUri, nsnull, nsnull, nsnull, this, ++ nsnull, nsIRequest::LOAD_NORMAL, nsnull, nsnull, ++ getter_AddRefs(mIconRequest)); ++} ++ ++void ++nsAlertsIconListener::SendCallback() ++{ ++ mAlertListener->Observe(NULL, "alertclickcallback", mAlertCookie.get()); ++} ++ ++void ++nsAlertsIconListener::SendClosed() ++{ ++ mAlertListener->Observe(NULL, "alertfinished", mAlertCookie.get()); ++} ++ ++nsresult ++nsAlertsIconListener::InitAlertAsync(const nsAString & aImageUrl, ++ const nsAString & aAlertTitle, ++ const nsAString & aAlertText, ++ PRBool aAlertTextClickable, ++ const nsAString & aAlertCookie, ++ nsIObserver * aAlertListener) ++{ ++ if (!notify_is_initted()) { ++ // Give the name of this application to libnotify ++ nsCOMPtr bundleService = ++ do_GetService(NS_STRINGBUNDLE_CONTRACTID); ++ ++ nsCAutoString appShortName; ++ if (bundleService) { ++ nsCOMPtr bundle; ++ bundleService->CreateBundle("chrome://branding/locale/brand.properties", ++ getter_AddRefs(bundle)); ++ nsAutoString appName; ++ ++ if (bundle) { ++ bundle->GetStringFromName(NS_LITERAL_STRING("brandShortName").get(), ++ getter_Copies(appName)); ++ appShortName = NS_ConvertUTF16toUTF8(appName); ++ } else { ++ NS_WARNING("brand.properties not present, using default application name"); ++ appShortName.AssignLiteral("Mozilla"); ++ } ++ } else { ++ appShortName.AssignLiteral("Mozilla"); ++ } ++ ++ if (!notify_init(appShortName.get())) ++ return NS_ERROR_FAILURE; ++ ++ GList *server_caps = notify_get_server_caps(); ++ if (server_caps) { ++ for (GList* cap = server_caps; cap != NULL; cap = cap->next) { ++ if (!strcmp((char*) cap->data, "actions")) { ++ gHasActions = PR_TRUE; ++ break; ++ } ++ } ++ g_list_foreach(server_caps, (GFunc)g_free, NULL); ++ g_list_free(server_caps); ++ } ++ } ++ ++ if (!gHasActions && aAlertTextClickable) ++ return NS_ERROR_FAILURE; // No good, fallback to XUL ++ ++ mAlertTitle = NS_ConvertUTF16toUTF8(aAlertTitle); ++ mAlertText = NS_ConvertUTF16toUTF8(aAlertText); ++ ++ mAlertHasAction = aAlertTextClickable; ++ ++ mAlertListener = aAlertListener; ++ mAlertCookie = aAlertCookie; ++ ++ return StartRequest(aImageUrl); ++} +diff -up /dev/null mozilla-1.9.1/toolkit/system/gnome/nsAlertsIconListener.h +--- /dev/null 2009-08-21 10:27:01.489538501 +0200 ++++ mozilla-1.9.1/toolkit/system/gnome/nsAlertsIconListener.h 2009-08-21 15:31:20.000000000 +0200 +@@ -0,0 +1,85 @@ ++/* -*- 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 mozilla.org code. ++ * ++ * The Initial Developer of the Original Code is ++ * Mozilla Corporation. ++ * Portions created by the Initial Developer are Copyright (C) 2008 ++ * 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 nsAlertsIconListener_h__ ++#define nsAlertsIconListener_h__ ++ ++#include "nsCOMPtr.h" ++#include "imgIDecoderObserver.h" ++#include "nsStringAPI.h" ++#include "nsIObserver.h" ++ ++#include ++ ++class imgIRequest; ++ ++class nsAlertsIconListener : public imgIDecoderObserver ++{ ++public: ++ NS_DECL_ISUPPORTS ++ NS_DECL_IMGICONTAINEROBSERVER ++ NS_DECL_IMGIDECODEROBSERVER ++ ++ nsAlertsIconListener(); ++ virtual ~nsAlertsIconListener(); ++ ++ nsresult InitAlertAsync(const nsAString & aImageUrl, ++ const nsAString & aAlertTitle, ++ const nsAString & aAlertText, ++ PRBool aAlertTextClickable, ++ const nsAString & aAlertCookie, ++ nsIObserver * aAlertListener); ++ ++ void SendCallback(); ++ void SendClosed(); ++ ++protected: ++ nsCOMPtr mIconRequest; ++ nsCString mAlertTitle; ++ nsCString mAlertText; ++ ++ nsCOMPtr mAlertListener; ++ nsString mAlertCookie; ++ ++ PRPackedBool mLoadedFrame; ++ PRPackedBool mAlertHasAction; ++ ++ nsresult StartRequest(const nsAString & aImageUrl); ++ nsresult ShowAlert(GdkPixbuf* aPixbuf); ++}; ++ ++#endif +diff -up /dev/null mozilla-1.9.1/toolkit/system/gnome/nsAlertsService.cpp +--- /dev/null 2009-08-21 10:27:01.489538501 +0200 ++++ mozilla-1.9.1/toolkit/system/gnome/nsAlertsService.cpp 2009-08-21 15:31:20.000000000 +0200 +@@ -0,0 +1,73 @@ ++/* -*- 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 mozilla.org code. ++ * ++ * The Initial Developer of the Original Code is ++ * Mozilla Corporation. ++ * Portions created by the Initial Developer are Copyright (C) 2008 ++ * 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 "nsAlertsService.h" ++#include "nsAlertsIconListener.h" ++ ++NS_IMPL_THREADSAFE_ADDREF(nsAlertsService) ++NS_IMPL_THREADSAFE_RELEASE(nsAlertsService) ++ ++NS_INTERFACE_MAP_BEGIN(nsAlertsService) ++ NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIAlertsService) ++ NS_INTERFACE_MAP_ENTRY(nsIAlertsService) ++NS_INTERFACE_MAP_END_THREADSAFE ++ ++nsAlertsService::nsAlertsService() ++{} ++ ++nsAlertsService::~nsAlertsService() ++{} ++ ++nsresult ++nsAlertsService::Init() ++{ ++ return NS_OK; ++} ++ ++NS_IMETHODIMP nsAlertsService::ShowAlertNotification(const nsAString & aImageUrl, const nsAString & aAlertTitle, ++ const nsAString & aAlertText, PRBool aAlertTextClickable, ++ const nsAString & aAlertCookie, ++ nsIObserver * aAlertListener, ++ const nsAString & aAlertName) ++{ ++ nsCOMPtr alertListener = new nsAlertsIconListener(); ++ if (!alertListener) ++ return NS_ERROR_OUT_OF_MEMORY; ++ ++ return alertListener->InitAlertAsync(aImageUrl, aAlertTitle, aAlertText, aAlertTextClickable, ++ aAlertCookie, aAlertListener); ++} +diff -up /dev/null mozilla-1.9.1/toolkit/system/gnome/nsAlertsService.h +--- /dev/null 2009-08-21 10:27:01.489538501 +0200 ++++ mozilla-1.9.1/toolkit/system/gnome/nsAlertsService.h 2009-08-21 15:31:20.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 mozilla.org code. ++ * ++ * The Initial Developer of the Original Code is ++ * Mozilla Corporation. ++ * Portions created by the Initial Developer are Copyright (C) 2008 ++ * 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 nsAlertsService_h__ ++#define nsAlertsService_h__ ++ ++#include "nsIAlertsService.h" ++#include "nsCOMPtr.h" ++ ++class nsAlertsService : public nsIAlertsService ++{ ++public: ++ NS_DECL_NSIALERTSSERVICE ++ NS_DECL_ISUPPORTS ++ ++ nsAlertsService(); ++ virtual ~nsAlertsService(); ++ ++ nsresult Init(); ++ ++protected: ++ ++}; ++ ++#endif /* nsAlertsService_h__ */ +diff -up mozilla-1.9.1/toolkit/system/gnome/nsGnomeModule.cpp.libnotify mozilla-1.9.1/toolkit/system/gnome/nsGnomeModule.cpp +--- mozilla-1.9.1/toolkit/system/gnome/nsGnomeModule.cpp.libnotify 2009-07-30 17:30:33.000000000 +0200 ++++ mozilla-1.9.1/toolkit/system/gnome/nsGnomeModule.cpp 2009-08-21 15:31:20.000000000 +0200 +@@ -38,11 +38,20 @@ + + #include "nsGConfService.h" + #include "nsGnomeVFSService.h" ++#include "nsToolkitCompsCID.h" + #include "nsIGenericFactory.h" + ++#ifdef MOZ_ENABLE_LIBNOTIFY ++#include "nsAlertsService.h" ++#endif ++ + NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsGConfService, Init) + NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsGnomeVFSService, Init) + ++#ifdef MOZ_ENABLE_LIBNOTIFY ++NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsAlertsService, Init) ++#endif ++ + static const nsModuleComponentInfo components[] = { + { "GConf Service", + NS_GCONFSERVICE_CID, +@@ -51,7 +60,13 @@ static const nsModuleComponentInfo compo + { "GnomeVFS Service", + NS_GNOMEVFSSERVICE_CID, + NS_GNOMEVFSSERVICE_CONTRACTID, +- nsGnomeVFSServiceConstructor } ++ nsGnomeVFSServiceConstructor }, ++#ifdef MOZ_ENABLE_LIBNOTIFY ++ { "Gnome Alerts Service", ++ NS_SYSTEMALERTSSERVICE_CID, ++ NS_SYSTEMALERTSERVICE_CONTRACTID, ++ nsAlertsServiceConstructor }, ++#endif + }; + + NS_IMPL_NSGETMODULE(mozgnome, components) diff --git a/xulrunner-mozconfig b/xulrunner-mozconfig index 4751550..aeab2c2 100644 --- a/xulrunner-mozconfig +++ b/xulrunner-mozconfig @@ -28,6 +28,7 @@ ac_add_options --disable-javaxpcom ac_add_options --disable-crashreporter ac_add_options --enable-safe-browsing ac_add_options --enable-extensions=default,python/xpcom +ac_add_options --enable-libnotify export BUILD_OFFICIAL=1 export MOZILLA_OFFICIAL=1 diff --git a/xulrunner.spec b/xulrunner.spec index 90ed46b..a6f9bc2 100644 --- a/xulrunner.spec +++ b/xulrunner.spec @@ -12,7 +12,7 @@ Summary: XUL Runtime for Gecko Applications Name: xulrunner Version: 1.9.1.2 -Release: 3%{?dist} +Release: 4%{?dist} URL: http://developer.mozilla.org/En/XULRunner License: MPLv1.1 or GPLv2+ or LGPLv2+ Group: Applications/Internet @@ -29,6 +29,7 @@ Patch2: mozilla-191-path.patch Patch3: mozilla-jemalloc.patch Patch4: mozilla-about-firefox-version.patch Patch5: xulrunner-gtk-include.patch +Patch6: mozilla-libnotify.patch # Fedora specific patches Patch10: mozilla-191-pkgconfig.patch @@ -147,11 +148,13 @@ sed -e 's/__RPM_VERSION_INTERNAL__/%{version_internal}/' %{P:%%PATCH0} \ > version.patch %{__patch} -p1 -b --suffix .version --fuzz=0 < version.patch + %patch1 -p1 -b .build %patch2 -p1 -b .path %patch3 -p1 -b .jemalloc %patch4 -p1 -b .about-firefox-version %patch5 -p1 -b .gtk-include +%patch6 -p1 -b .libnotify %patch10 -p1 -b .pk @@ -451,6 +454,9 @@ fi #--------------------------------------------------------------------- %changelog +* Fri Aug 21 2009 Jan Horak - 1.9.1.2-4 +- Added libnotify support + * Wed Aug 12 2009 Martin Stransky 1.9.1.2-3 - Added fix from #516118 - Headers not C89