File libnotify-svn3018.patch of Package libnotify

Index: libnotify/notification.c
===================================================================
--- libnotify/notification.c	(révision 2973)
+++ libnotify/notification.c	(copie de travail)
@@ -31,6 +31,7 @@
 # define HAVE_STATUS_ICON
 # include <gtk/gtkstatusicon.h>
 #endif
+#include <gdk/gdkx.h>
 
 #define CHECK_DBUS_VERSION(major, minor) \
 	(DBUS_MAJOR_VER > (major) || \
@@ -46,7 +47,7 @@
 static void notify_notification_class_init(NotifyNotificationClass *klass);
 static void notify_notification_init(NotifyNotification *sp);
 static void notify_notification_finalize(GObject *object);
-static void _close_signal_handler(DBusGProxy *proxy, guint32 id,
+static void _close_signal_handler(DBusGProxy *proxy, guint32 id, guint32 reason,
 								  NotifyNotification *notification);
 
 static void _action_signal_handler(DBusGProxy *proxy, guint32 id,
@@ -89,6 +90,8 @@ struct _NotifyNotificationPrivate
 	gboolean has_nondefault_actions;
 	gboolean updates_pending;
 	gboolean signals_registered;
+
+	gint closed_reason;
 };
 
 enum
@@ -100,11 +103,13 @@ enum
 enum
 {
 	PROP_0,
+	PROP_ID,
 	PROP_SUMMARY,
 	PROP_BODY,
 	PROP_ICON_NAME,
 	PROP_ATTACH_WIDGET,
-	PROP_STATUS_ICON
+	PROP_STATUS_ICON,
+	PROP_CLOSED_REASON
 };
 
 static void notify_notification_set_property(GObject *object, guint prop_id,
@@ -156,6 +161,18 @@ notify_notification_class_init(NotifyNot
 					 NULL, NULL,
 					 g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
 
+	g_object_class_install_property(object_class, PROP_ID,
+		g_param_spec_int("id", "ID",
+		                 "The notification ID",
+		                 0,
+		                 G_MAXINT32,
+		                 0,
+		                 G_PARAM_READWRITE |
+		                 G_PARAM_CONSTRUCT |
+		                 G_PARAM_STATIC_NAME |
+		                 G_PARAM_STATIC_NICK |
+		                 G_PARAM_STATIC_BLURB));
+
 	g_object_class_install_property(object_class, PROP_SUMMARY,
 		g_param_spec_string("summary", "Summary",
 							"The summary text",
@@ -210,6 +227,17 @@ notify_notification_class_init(NotifyNot
 							G_PARAM_STATIC_NICK |
 							G_PARAM_STATIC_BLURB));
 #endif /* HAVE_STATUS_ICON */
+
+	g_object_class_install_property(object_class, PROP_CLOSED_REASON,
+		g_param_spec_int("closed-reason", "Closed Reason",
+		                 "The reason code for why the notification was closed",
+		                 -1,
+		                 G_MAXINT32,
+		                 -1,
+		                 G_PARAM_READABLE |
+		                 G_PARAM_STATIC_NAME |
+		                 G_PARAM_STATIC_NICK |
+		                 G_PARAM_STATIC_BLURB));
 }
 
 static void
@@ -223,6 +251,10 @@ notify_notification_set_property(GObject
 
 	switch (prop_id)
 	{
+		case PROP_ID:
+			priv->id = g_value_get_int(value);
+			break;
+
 		case PROP_SUMMARY:
 			notify_notification_update(notification, g_value_get_string(value),
 									   priv->body, priv->icon_name);
@@ -268,6 +300,10 @@ notify_notification_get_property(GObject
 
 	switch (prop_id)
 	{
+		case PROP_ID:
+			g_value_set_int(value, priv->id);
+			break;
+
 		case PROP_SUMMARY:
 			g_value_set_string(value, priv->summary);
 			break;
@@ -290,6 +326,10 @@ notify_notification_get_property(GObject
 			break;
 #endif
 
+		case PROP_CLOSED_REASON:
+			g_value_set_int(value, priv->closed_reason);
+			break;
+
 		default:
 			G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
 			break;
@@ -317,6 +357,7 @@ notify_notification_init(NotifyNotificat
 {
 	obj->priv = g_new0(NotifyNotificationPrivate, 1);
 	obj->priv->timeout = NOTIFY_EXPIRES_DEFAULT;
+	obj->priv->closed_reason = -1;
 	obj->priv->hints = g_hash_table_new_full(g_str_hash, g_str_equal,
 											 g_free,
 											 (GFreeFunc)_g_value_free);
@@ -375,6 +416,13 @@ notify_notification_finalize(GObject *ob
 	G_OBJECT_CLASS(parent_class)->finalize(object);
 }
 
+static GtkWidget *
+get_internal_tray_icon (GtkStatusIcon *status) 
+{
+	/* This function is a temporary hack */
+	return GTK_WIDGET (*((GtkWidget**)(status->priv)));	
+}
+
 static void
 _notify_notification_update_applet_hints(NotifyNotification *n)
 {
@@ -386,6 +434,18 @@ _notify_notification_update_applet_hints
 	if (priv->status_icon != NULL)
 	{
 		GdkRectangle rect;
+		GtkWidget *internal_tray = get_internal_tray_icon (priv->status_icon);
+		GdkWindow *window;
+
+		// TODO: this is sort of a hack, but we need a window ID to send along
+		gtk_widget_realize (internal_tray);
+		window = internal_tray->window;
+
+		if (window != NULL)
+		{
+			guint32 xid = GDK_WINDOW_XID (window);
+			notify_notification_set_hint_uint32(n, "window-xid", xid);
+		}
 
 		if (!gtk_status_icon_get_geometry(priv->status_icon, &screen,
 										  &rect, NULL))
@@ -670,12 +730,13 @@ notify_notification_set_geometry_hints(N
 }
 
 static void
-_close_signal_handler(DBusGProxy *proxy, guint32 id,
+_close_signal_handler(DBusGProxy *proxy, guint32 id, guint32 reason,
 					  NotifyNotification *notification)
 {
 	if (id == notification->priv->id)
 	{
 		g_object_ref(G_OBJECT(notification));
+		notification->priv->closed_reason = reason;
 		g_signal_emit(notification, signals[SIGNAL_CLOSED], 0);
 		notification->priv->id = 0;
 		g_object_unref(G_OBJECT(notification));
@@ -982,6 +1043,32 @@ notify_notification_set_hint_int32(Notif
 						g_strdup(key), hint_value);
 }
 
+
+/**
+ * notify_notification_set_hint_uint32:
+ * @notification: The notification.
+ * @key: The hint.
+ * @value: The hint's value.
+ *
+ * Sets a hint with an unsigned 32-bit integer value.
+ */
+void
+notify_notification_set_hint_uint32(NotifyNotification *notification,
+                                    const gchar *key, guint value)
+{
+	GValue *hint_value;
+
+	g_return_if_fail(notification != NULL);
+	g_return_if_fail(NOTIFY_IS_NOTIFICATION(notification));
+	g_return_if_fail(key != NULL && *key != '\0');
+
+	hint_value = g_new0(GValue, 1);
+	g_value_init(hint_value, G_TYPE_UINT);
+	g_value_set_uint(hint_value, value);
+	g_hash_table_insert(notification->priv->hints,
+						g_strdup(key), hint_value);
+}
+
 /**
  * notify_notification_set_hint_double:
  * @notification: The notification.
@@ -1232,3 +1319,21 @@ notify_notification_close(NotifyNotifica
 
 	return TRUE;
 }
+
+/**
+ * notify_notification_get_closed_reason:
+ * @notification: The notification.
+ *
+ * Returns the closed reason code for the notification. This is valid only
+ * after the "closed" signal is emitted.
+ *
+ * Returns: The closed reason code.
+ */
+gint
+notify_notification_get_closed_reason(const NotifyNotification *notification)
+{
+	g_return_val_if_fail(notification != NULL, -1);
+	g_return_val_if_fail(NOTIFY_IS_NOTIFICATION(notification), -1);
+
+	return notification->priv->closed_reason;
+}
Index: libnotify/notify-marshal.list
===================================================================
--- libnotify/notify-marshal.list	(révision 2973)
+++ libnotify/notify-marshal.list	(copie de travail)
@@ -1 +1,2 @@
+VOID:UINT,UINT
 VOID:UINT,STRING
Index: libnotify/notify.c
===================================================================
--- libnotify/notify.c	(révision 2973)
+++ libnotify/notify.c	(copie de travail)
@@ -72,13 +72,19 @@ notify_init(const char *app_name)
 									   NOTIFY_DBUS_CORE_INTERFACE);
 	dbus_g_connection_unref(bus);
 
+	dbus_g_object_register_marshaller(notify_marshal_VOID__UINT_UINT,
+									  G_TYPE_NONE,
+									  G_TYPE_UINT,
+									  G_TYPE_UINT, G_TYPE_INVALID);
+
 	dbus_g_object_register_marshaller(notify_marshal_VOID__UINT_STRING,
 									  G_TYPE_NONE,
 									  G_TYPE_UINT,
 									  G_TYPE_STRING, G_TYPE_INVALID);
 
 	dbus_g_proxy_add_signal(_proxy, "NotificationClosed",
-							G_TYPE_UINT, G_TYPE_INVALID);
+							G_TYPE_UINT, G_TYPE_UINT, 
+							G_TYPE_INVALID);
 	dbus_g_proxy_add_signal(_proxy, "ActionInvoked",
 							G_TYPE_UINT, G_TYPE_STRING,
 							G_TYPE_INVALID);
Index: libnotify/notification.h
===================================================================
--- libnotify/notification.h	(révision 2973)
+++ libnotify/notification.h	(copie de travail)
@@ -25,7 +25,6 @@
 #include <glib.h>
 #include <glib-object.h>
 #include <gtk/gtk.h>
-#include <gtk/gtkversion.h>
 
 G_BEGIN_DECLS
 
@@ -77,7 +76,9 @@ typedef enum
 
 } NotifyUrgency;
 
-typedef void (*NotifyActionCallback)(NotifyNotification *, gchar *, gpointer);
+typedef void (*NotifyActionCallback)(NotifyNotification *notification,
+									 gchar *action,
+									 gpointer user_data);
 
 #define NOTIFY_ACTION_CALLBACK(func) ((NotifyActionCallback)(func))
 
@@ -128,6 +129,8 @@ void notify_notification_set_icon_from_p
 
 void notify_notification_set_hint_int32(NotifyNotification *notification,
 										const gchar *key, gint value);
+void notify_notification_set_hint_uint32(NotifyNotification *notification,
+										const gchar *key, guint value);
 
 void notify_notification_set_hint_double(NotifyNotification *notification,
 										 const gchar *key, gdouble value);
@@ -154,6 +157,9 @@ void notify_notification_clear_actions(N
 gboolean notify_notification_close(NotifyNotification *notification,
 								   GError **error);
 
+gint notify_notification_get_closed_reason(
+	const NotifyNotification *notification);
+
 G_END_DECLS
 
 #endif /* NOTIFY_NOTIFICATION_H */
Index: tools/notify-send.c
===================================================================
--- tools/notify-send.c	(révision 2973)
+++ tools/notify-send.c	(copie de travail)
@@ -3,20 +3,20 @@
  *
  * Copyright (C) 2004 Christian Hammond.
  *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
+ * This library is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
  *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the Free
- * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA  02111-1307  USA
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA  02111-1307, USA.
  */
 #include <config.h>
 
Index: AUTHORS
===================================================================
--- AUTHORS	(révision 2973)
+++ AUTHORS	(copie de travail)
@@ -14,3 +14,4 @@ Patch Writers:
 	M.S.
 	mderezynski
 	Ed Catmur <ed@catmur.co.uk>
+	Lucas Rocha
Index: ChangeLog
===================================================================
--- ChangeLog	(révision 2973)
+++ ChangeLog	(copie de travail)
@@ -1,3 +1,48 @@
+Thu Sep 25 18:45:41 PDT 2008  Christian Hammond <chipx86@chipx86.com>
+
+	* libnotify/notification.c:
+	* libnotify/notification.h:
+	  - Prevent a backwards-compatibility breakage introduced where the
+	    "reason" code was added to the "closed" signal. This meant that
+	    existing signal handlers that passed extra data would break. We now
+	    require that you call notify_notification_get_closed_reason() to get
+	    this data.
+
+Thu Sep 25 18:05:38 PDT 2008  Christian Hammond <chipx86@chipx86.com>
+
+	* libnotify/notification.h:
+	* NEWS:
+	  - Fixed a breakage where we were including gtkversion.h directly.
+	    Reported by Richard Hughes.
+
+Tue Mar 18 21:51:32 PDT 2008  Christian Hammond <chipx86@chipx86.com>
+
+	* libnotify/notification.c:
+	* libnotify/notification.h:
+	* libnotify/notify.c:
+	* libnotify/notify-marshal.list:
+	* NEWS:
+	  - Add support for sending the closed reason in the signal handler.
+	    Closes ticket #139.
+
+Sat Aug 25 18:08:01 PDT 2007  Christian Hammond <chipx86@chipx86.com>
+
+	* tools/notify-send.c:
+	  - Relicense notify-send under the LGPL in order to keep licensing
+	    simple and to allow reuse in more projects. Fixes bug #124.
+
+Sun Apr 29 02:45:20 PDT 2007  Christian Hammond <chipx86@chipx86.com>
+
+	* configure.ac:
+	  - Bump to version 0.4.4.90.
+
+Sun Apr 29 00:39:32 PDT 2007  Christian Hammond <chipx86@chipx86.com>
+
+	* docs/reference/tmpl/notification.sgml:
+	* libnotify/notification.c:
+	  - Patch by Lucas Rocha to add GObject property accessors for
+	    notification IDs.
+
 ========================= 0.4.4 =========================
 
 Tue Feb 27 21:11:36 PST 2007  Christian Hammond <chipx86@chipx86.com>
Index: docs/ChangeLog
===================================================================
--- docs/ChangeLog	(révision 2973)
+++ docs/ChangeLog	(copie de travail)
@@ -1,3 +1,9 @@
+Sat Aug 25 18:25:02 PDT 2007  Christian Hammond <chipx86@chipx86.com>
+
+	* notification-spec.xml:
+	  - Add a spec_version return value for GetServerInformation.
+	  - Bump to version 1.0. It's about time, and things are pretty solid now.
+
 Wed Jan 25 23:45:11 PST 2006  Christian Hammond <chipx86@chipx86.com>
 
 	* notification-spec.xml:
Index: docs/notification-spec.xml
===================================================================
--- docs/notification-spec.xml	(révision 2973)
+++ docs/notification-spec.xml	(copie de travail)
@@ -3,8 +3,8 @@
 <article id="index">
  <articleinfo>
   <title>Desktop Notifications Specification</title>
-  <releaseinfo>Version 0.9</releaseinfo>
-  <date>15 January 2006</date>
+  <releaseinfo>Version 1.0</releaseinfo>
+  <date>25 August 2007</date>
   <authorgroup>
    <author>
     <firstname>Mike</firstname>
@@ -27,6 +27,15 @@
   </authorgroup>
   <revhistory>
    <revision>
+    <revnumber>1.0</revnumber>
+    <date>25 August 2007</date>
+    <authorinitials>cdh</authorinitials>
+    <revremark>
+	 Added spec_version to the GetServerInformation return values.
+	 Mark this specification as a 1.0.
+    </revremark>
+   </revision>
+   <revision>
     <revnumber>0.9</revnumber>
     <date>15 January 2006</date>
     <authorinitials>cdh</authorinitials>
@@ -1049,6 +1058,7 @@
       <paramdef>out STRING <parameter>name</parameter></paramdef>
       <paramdef>out STRING <parameter>vendor</parameter></paramdef>
       <paramdef>out STRING <parameter>version</parameter></paramdef>
+      <paramdef>out STRING <parameter>spec_version</parameter></paramdef>
      </funcprototype>
     </funcsynopsis>
     <para>
@@ -1084,6 +1094,11 @@
         <entry>STRING</entry>
         <entry>The server's version number.</entry>
        </row>
+       <row>
+        <entry><parameter>spec_version</parameter></entry>
+        <entry>STRING</entry>
+        <entry>The specification version the server is compliant with.</entry>
+       </row>
       </tbody>
      </tgroup>
     </table>
Index: docs/reference/tmpl/notification.sgml
===================================================================
--- docs/reference/tmpl/notification.sgml	(révision 2973)
+++ docs/reference/tmpl/notification.sgml	(copie de travail)
@@ -66,6 +66,11 @@ not be used directly. Use the accessor f
 
 </para>
 
+<!-- ##### ARG NotifyNotification:id ##### -->
+<para>
+
+</para>
+
 <!-- ##### ARG NotifyNotification:status-icon ##### -->
 <para>
 
Index: NEWS
===================================================================
--- NEWS	(révision 2973)
+++ NEWS	(copie de travail)
@@ -1,3 +1,13 @@
+version 0.4.5:
+	* Added GObject property accessors for notification IDs. Patch by Lucas
+	  Rocha.
+	* Added support for sending the closed reason in the "closed" signal
+	  handler. (Ticket #139)
+	* Added support for sending the status icon XID to the notification
+	  daemon. This will allow better position tracking for context
+	  notifications. Patch by Colin Walters.
+	* Fixed a breakage where we were including gtkversion.h directly.
+
 version 0.4.4 (27-February-2007):
 	* Fixed a bug where a notification's ID could be reset when a different
 	  notification was closed. Patch by jylefort. (Bug #94)
openSUSE Build Service is sponsored by