Added libnotify support
This commit is contained in:
parent
900da7ba78
commit
b7f42b4ba4
3 changed files with 831 additions and 1 deletions
823
mozilla-libnotify.patch
Normal file
823
mozilla-libnotify.patch
Normal file
|
|
@ -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<nsIAlertsService> 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<nsIWindowWatcher> wwatch(do_GetService(NS_WINDOWWATCHER_CONTRACTID));
|
||||
nsCOMPtr<nsIDOMWindow> newWindow;
|
||||
- nsresult rv;
|
||||
|
||||
nsCOMPtr<nsISupportsArray> 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 <gdk-pixbuf/gdk-pixbuf.h>
|
||||
+#include <libnotify/notify.h>
|
||||
+#include <gdk/gdk.h>
|
||||
+
|
||||
+static PRBool gHasActions = PR_FALSE;
|
||||
+
|
||||
+static void notify_action_cb(NotifyNotification *notification,
|
||||
+ gchar *action, gpointer user_data)
|
||||
+{
|
||||
+ nsAlertsIconListener* alert = static_cast<nsAlertsIconListener*> (user_data);
|
||||
+ alert->SendCallback();
|
||||
+}
|
||||
+
|
||||
+static void notify_closed_cb(NotifyNotification *notification,
|
||||
+ gpointer user_data)
|
||||
+{
|
||||
+ g_object_unref(notification);
|
||||
+
|
||||
+ nsAlertsIconListener* alert = static_cast<nsAlertsIconListener*> (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<gfxIImageFrame> frame = aFrame;
|
||||
+ nsCOMPtr<nsIImage> image = do_GetInterface(frame);
|
||||
+ if (!image)
|
||||
+ return NS_ERROR_FAILURE;
|
||||
+
|
||||
+ nsresult rv = image->LockImagePixels(PR_FALSE);
|
||||
+ if (NS_FAILED(rv))
|
||||
+ return rv;
|
||||
+
|
||||
+ nsCOMPtr<nsIImageToPixbuf> 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<nsIURI> imageUri;
|
||||
+ NS_NewURI(getter_AddRefs(imageUri), aImageUrl);
|
||||
+ if (!imageUri)
|
||||
+ return ShowAlert(NULL);
|
||||
+
|
||||
+ nsCOMPtr<imgILoader> 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<nsIStringBundleService> bundleService =
|
||||
+ do_GetService(NS_STRINGBUNDLE_CONTRACTID);
|
||||
+
|
||||
+ nsCAutoString appShortName;
|
||||
+ if (bundleService) {
|
||||
+ nsCOMPtr<nsIStringBundle> 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 <gdk-pixbuf/gdk-pixbuf.h>
|
||||
+
|
||||
+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<imgIRequest> mIconRequest;
|
||||
+ nsCString mAlertTitle;
|
||||
+ nsCString mAlertText;
|
||||
+
|
||||
+ nsCOMPtr<nsIObserver> 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<nsAlertsIconListener> 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)
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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 <jhorak@redhat.com> - 1.9.1.2-4
|
||||
- Added libnotify support
|
||||
|
||||
* Wed Aug 12 2009 Martin Stransky <stransky@redhat.com> 1.9.1.2-3
|
||||
- Added fix from #516118 - Headers not C89
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue