[Galago-commits] r2368 - in trunk/notify-daemon-ng: . src

galago-commits at freedesktop.org galago-commits at freedesktop.org
Fri Dec 9 12:23:22 PST 2005


Author: johnp
Date: 2005-12-09 12:23:18 -0800 (Fri, 09 Dec 2005)
New Revision: 2368

Modified:
   trunk/notify-daemon-ng/ChangeLog
   trunk/notify-daemon-ng/src/eggnotificationbubblewidget.c
   trunk/notify-daemon-ng/src/eggnotificationbubblewidget.h
   trunk/notify-daemon-ng/src/notifydaemon-dbus-glue.h
   trunk/notify-daemon-ng/src/notifydaemon.c
   trunk/notify-daemon-ng/src/notifydaemon.h
   trunk/notify-daemon-ng/src/notifydaemon.xml
Log:
* src/eggnotificationbubblewidget.c (_layout_window): Add buttons for
  actions
  (draw_bubble_widget): close the cairo path so courner caps work
  (egg_notification_bubble_widget_create_button): new method to create
  a button and add it to the bubble
  (egg_notification_bubble_widget_clear_buttons): new method for clearing
  up all the buttons in the bubble

  * src/notifydaemon.xml: make the Notify method async so we can get the
  sender

  * src/notifydaemon.c (_emit_action_invoked_signal):  Emits the dbus 
  signal when one of the action buttons is clicked
  (_emit_closed_signal): emits a Closed signal over the bus when the
  bubble is closed
  (_close_notification): call _emit_closed_signal
  (_notification_daemon_handle_bubble_widget_action): new method - iternal
  callback we hook up to the buttons' "clicked" signal
  (notify_daemon_notify_handler): change to an async method
  store the unique name of the sender that called us
  setup buttons if actions have been added 


Modified: trunk/notify-daemon-ng/ChangeLog
===================================================================
--- trunk/notify-daemon-ng/ChangeLog	2005-12-09 19:35:13 UTC (rev 2367)
+++ trunk/notify-daemon-ng/ChangeLog	2005-12-09 20:23:18 UTC (rev 2368)
@@ -1,3 +1,27 @@
+2005-12-09  John (J5) Palmieri  <johnp at redhat.com>
+
+	* src/eggnotificationbubblewidget.c (_layout_window): Add buttons for
+	actions
+	(draw_bubble_widget): close the cairo path so courner caps work
+	(egg_notification_bubble_widget_create_button): new method to create
+	a button and add it to the bubble
+	(egg_notification_bubble_widget_clear_buttons): new method for clearing
+	up all the buttons in the bubble
+	
+	* src/notifydaemon.xml: make the Notify method async so we can get the
+	sender
+
+	* src/notifydaemon.c (_emit_action_invoked_signal):  Emits the dbus 
+	signal when one of the action buttons is clicked
+	(_emit_closed_signal): emits a Closed signal over the bus when the
+	bubble is closed
+	(_close_notification): call _emit_closed_signal
+	(_notification_daemon_handle_bubble_widget_action): new method - iternal
+	callback we hook up to the buttons' "clicked" signal
+	(notify_daemon_notify_handler): change to an async method
+	store the unique name of the sender that called us
+	setup buttons if actions have been added 
+	
 2005-11-22  John (J5) Palmieri  <johnp at redhat.com>
 
 	* src/eggnotificationbubblewidget.c: Add a more stylized bubble

Modified: trunk/notify-daemon-ng/src/eggnotificationbubblewidget.c
===================================================================
--- trunk/notify-daemon-ng/src/eggnotificationbubblewidget.c	2005-12-09 19:35:13 UTC (rev 2367)
+++ trunk/notify-daemon-ng/src/eggnotificationbubblewidget.c	2005-12-09 20:23:18 UTC (rev 2368)
@@ -240,7 +240,7 @@
   gtk_widget_show (bubble_widget->bubble_widget_header_label);
   gtk_widget_show (bubble_widget->bubble_widget_body_label);
 
-  bubble_widget->table = gtk_table_new (2, 2, FALSE);
+  bubble_widget->table = gtk_table_new (3, 2, FALSE);
   gtk_table_set_col_spacings (bubble_widget->table, 5);
   gtk_table_set_row_spacings (bubble_widget->table, 5);
  
@@ -299,6 +299,12 @@
   gtk_container_remove (GTK_CONTAINER (bubble_widget->table), 
                         bubble_widget->bubble_widget_body_label);
 
+  if (bubble_widget->button_hbox != NULL &&
+        gtk_widget_get_parent (bubble_widget->button_hbox) != NULL)
+    gtk_container_remove (GTK_CONTAINER (bubble_widget->table), 
+                        bubble_widget->button_hbox);
+
+
   if (alignment == TRIANGLE_LEFT)
     {
       gtk_table_attach (GTK_TABLE (bubble_widget->table),
@@ -340,6 +346,17 @@
                         0, 0);
 
     }
+
+    if (bubble_widget->button_hbox != NULL)
+      {
+        gtk_table_attach (GTK_TABLE (bubble_widget->table),
+                          bubble_widget->button_hbox,
+                          1, 2, 2, 3,
+                          GTK_FILL, GTK_FILL,
+                          0, 0);
+     
+        gtk_widget_show_all (bubble_widget->button_hbox);
+      }
 }
 
 static void
@@ -446,6 +463,7 @@
   
 }
 
+
 void
 egg_notification_bubble_widget_set_pos (EggNotificationBubbleWidget   *bubble_widget,
                                  gint x, gint y)
@@ -463,6 +481,8 @@
 
   gtk_window_move (GTK_WINDOW (bubble_widget), x, y);
 
+  /* TODO: This is wrong - if elements are added before
+           set_pos is called the layout become wrong */
   if (x < (monitor.x + monitor.width) / 2)
       _layout_window (bubble_widget, TRIANGLE_LEFT);
   else
@@ -638,7 +658,7 @@
                       rect->y,
                       p1x, 
                       rect->y);
-      cairo_line_to (cr, triangle[0].x, rect->y);
+      cairo_close_path (cr);
     }
   else
     {
@@ -736,7 +756,7 @@
                       rect->y,
                       p1x, 
                       rect->y);
-      cairo_line_to (cr, triangle[0].x, rect->y);
+      cairo_close_path (cr);
     }
   else
     {
@@ -1066,3 +1086,46 @@
     }
 }
 
+GtkWidget *      
+egg_notification_bubble_widget_create_button (EggNotificationBubbleWidget *bubble_widget,
+                                              const gchar *label)
+{
+  GtkWidget *b;
+  GtkWidget *l;
+  gchar *label_markup;
+
+  b = gtk_button_new ();
+  gtk_button_set_relief (b, GTK_RELIEF_NONE);
+  gtk_container_set_border_width (GTK_CONTAINER (b), 0);
+
+  label_markup = g_markup_printf_escaped ("<span weight=\"bold\" underline=\"single\" foreground=\"blue\">%s</span>", label);
+
+  l = gtk_label_new (label_markup);
+  gtk_label_set_use_markup (l, TRUE);
+
+  g_free (label_markup);
+
+  gtk_container_add (GTK_CONTAINER (b), l);
+
+  gtk_widget_show_all (b); 
+  
+  if (bubble_widget->button_hbox == NULL)
+    bubble_widget->button_hbox = gtk_hbox_new (FALSE, 0); 
+
+  gtk_box_pack_end (GTK_BOX (bubble_widget->button_hbox),
+                    b,
+                    FALSE, FALSE,
+                    0);
+
+  return (b);
+}
+
+void
+egg_notification_bubble_widget_clear_buttons (EggNotificationBubbleWidget *bubble_widget)
+{
+  if (bubble_widget->button_hbox != NULL)
+    gtk_widget_destroy (bubble_widget->button_hbox);
+
+  bubble_widget->button_hbox = NULL;
+}
+

Modified: trunk/notify-daemon-ng/src/eggnotificationbubblewidget.h
===================================================================
--- trunk/notify-daemon-ng/src/eggnotificationbubblewidget.h	2005-12-09 19:35:13 UTC (rev 2367)
+++ trunk/notify-daemon-ng/src/eggnotificationbubblewidget.h	2005-12-09 20:23:18 UTC (rev 2368)
@@ -47,6 +47,7 @@
   GtkWidget *table;
   GtkWidget *bubble_widget_header_label;
   GtkWidget *bubble_widget_body_label;
+  GtkWidget *button_hbox;
   PangoLayout *body_layout;
 
   gint x, y;
@@ -94,6 +95,12 @@
                                                                     int                            width,
                                                                     int                            height,
                                                                     int                            rowstride);
+
+
+GtkWidget *      egg_notification_bubble_widget_create_button (EggNotificationBubbleWidget *bubble_widget,
+                                                               const gchar *label);
+
+void             egg_notification_bubble_widget_clear_buttons (EggNotificationBubbleWidget *bubble_widget);
 G_END_DECLS
 
 #endif /* __EGG_NOTIFICATION_BUBBLE_WIDGET_H__ */

Modified: trunk/notify-daemon-ng/src/notifydaemon-dbus-glue.h
===================================================================
--- trunk/notify-daemon-ng/src/notifydaemon-dbus-glue.h	2005-12-09 19:35:13 UTC (rev 2367)
+++ trunk/notify-daemon-ng/src/notifydaemon-dbus-glue.h	2005-12-09 20:23:18 UTC (rev 2368)
@@ -53,40 +53,37 @@
 #endif /* !G_ENABLE_DEBUG */
 
 
-/* BOOLEAN:STRING,STRING,UINT,STRING,STRING,BOXED,BOXED,INT,POINTER,POINTER (/tmp/dbus-binding-tool-c-marshallers.Dt9soe:1) */
-extern void dbus_glib_marshal__BOOLEAN__STRING_STRING_UINT_STRING_STRING_BOXED_BOXED_INT_POINTER_POINTER (GClosure     *closure,
-                                                                                                          GValue       *return_value,
-                                                                                                          guint         n_param_values,
-                                                                                                          const GValue *param_values,
-                                                                                                          gpointer      invocation_hint,
-                                                                                                          gpointer      marshal_data);
+/* NONE:STRING,STRING,UINT,STRING,STRING,BOXED,BOXED,INT,POINTER (/tmp/dbus-binding-tool-c-marshallers.DKIhPQ:1) */
+extern void dbus_glib_marshal__VOID__STRING_STRING_UINT_STRING_STRING_BOXED_BOXED_INT_POINTER (GClosure     *closure,
+                                                                                               GValue       *return_value,
+                                                                                               guint         n_param_values,
+                                                                                               const GValue *param_values,
+                                                                                               gpointer      invocation_hint,
+                                                                                               gpointer      marshal_data);
 void
-dbus_glib_marshal__BOOLEAN__STRING_STRING_UINT_STRING_STRING_BOXED_BOXED_INT_POINTER_POINTER (GClosure     *closure,
-                                                                                              GValue       *return_value,
-                                                                                              guint         n_param_values,
-                                                                                              const GValue *param_values,
-                                                                                              gpointer      invocation_hint,
-                                                                                              gpointer      marshal_data)
+dbus_glib_marshal__VOID__STRING_STRING_UINT_STRING_STRING_BOXED_BOXED_INT_POINTER (GClosure     *closure,
+                                                                                   GValue       *return_value,
+                                                                                   guint         n_param_values,
+                                                                                   const GValue *param_values,
+                                                                                   gpointer      invocation_hint,
+                                                                                   gpointer      marshal_data)
 {
-  typedef gboolean (*GMarshalFunc_BOOLEAN__STRING_STRING_UINT_STRING_STRING_BOXED_BOXED_INT_POINTER_POINTER) (gpointer     data1,
-                                                                                                              gpointer     arg_1,
-                                                                                                              gpointer     arg_2,
-                                                                                                              guint        arg_3,
-                                                                                                              gpointer     arg_4,
-                                                                                                              gpointer     arg_5,
-                                                                                                              gpointer     arg_6,
-                                                                                                              gpointer     arg_7,
-                                                                                                              gint         arg_8,
-                                                                                                              gpointer     arg_9,
-                                                                                                              gpointer     arg_10,
-                                                                                                              gpointer     data2);
-  register GMarshalFunc_BOOLEAN__STRING_STRING_UINT_STRING_STRING_BOXED_BOXED_INT_POINTER_POINTER callback;
+  typedef void (*GMarshalFunc_VOID__STRING_STRING_UINT_STRING_STRING_BOXED_BOXED_INT_POINTER) (gpointer     data1,
+                                                                                               gpointer     arg_1,
+                                                                                               gpointer     arg_2,
+                                                                                               guint        arg_3,
+                                                                                               gpointer     arg_4,
+                                                                                               gpointer     arg_5,
+                                                                                               gpointer     arg_6,
+                                                                                               gpointer     arg_7,
+                                                                                               gint         arg_8,
+                                                                                               gpointer     arg_9,
+                                                                                               gpointer     data2);
+  register GMarshalFunc_VOID__STRING_STRING_UINT_STRING_STRING_BOXED_BOXED_INT_POINTER callback;
   register GCClosure *cc = (GCClosure*) closure;
   register gpointer data1, data2;
-  gboolean v_return;
 
-  g_return_if_fail (return_value != NULL);
-  g_return_if_fail (n_param_values == 11);
+  g_return_if_fail (n_param_values == 10);
 
   if (G_CCLOSURE_SWAP_DATA (closure))
     {
@@ -98,25 +95,23 @@
       data1 = g_value_peek_pointer (param_values + 0);
       data2 = closure->data;
     }
-  callback = (GMarshalFunc_BOOLEAN__STRING_STRING_UINT_STRING_STRING_BOXED_BOXED_INT_POINTER_POINTER) (marshal_data ? marshal_data : cc->callback);
+  callback = (GMarshalFunc_VOID__STRING_STRING_UINT_STRING_STRING_BOXED_BOXED_INT_POINTER) (marshal_data ? marshal_data : cc->callback);
 
-  v_return = callback (data1,
-                       g_marshal_value_peek_string (param_values + 1),
-                       g_marshal_value_peek_string (param_values + 2),
-                       g_marshal_value_peek_uint (param_values + 3),
-                       g_marshal_value_peek_string (param_values + 4),
-                       g_marshal_value_peek_string (param_values + 5),
-                       g_marshal_value_peek_boxed (param_values + 6),
-                       g_marshal_value_peek_boxed (param_values + 7),
-                       g_marshal_value_peek_int (param_values + 8),
-                       g_marshal_value_peek_pointer (param_values + 9),
-                       g_marshal_value_peek_pointer (param_values + 10),
-                       data2);
-
-  g_value_set_boolean (return_value, v_return);
+  callback (data1,
+            g_marshal_value_peek_string (param_values + 1),
+            g_marshal_value_peek_string (param_values + 2),
+            g_marshal_value_peek_uint (param_values + 3),
+            g_marshal_value_peek_string (param_values + 4),
+            g_marshal_value_peek_string (param_values + 5),
+            g_marshal_value_peek_boxed (param_values + 6),
+            g_marshal_value_peek_boxed (param_values + 7),
+            g_marshal_value_peek_int (param_values + 8),
+            g_marshal_value_peek_pointer (param_values + 9),
+            data2);
 }
+#define dbus_glib_marshal__NONE__STRING_STRING_UINT_STRING_STRING_BOXED_BOXED_INT_POINTER	dbus_glib_marshal__VOID__STRING_STRING_UINT_STRING_STRING_BOXED_BOXED_INT_POINTER
 
-/* BOOLEAN:UINT,POINTER (/tmp/dbus-binding-tool-c-marshallers.Dt9soe:2) */
+/* BOOLEAN:UINT,POINTER (/tmp/dbus-binding-tool-c-marshallers.DKIhPQ:2) */
 extern void dbus_glib_marshal__BOOLEAN__UINT_POINTER (GClosure     *closure,
                                                       GValue       *return_value,
                                                       guint         n_param_values,
@@ -169,7 +164,7 @@
 
 #include <dbus/dbus-glib.h>
 static const DBusGMethodInfo dbus_glib__methods[] = {
-  { (GCallback) notify_daemon_notify_handler, dbus_glib_marshal__BOOLEAN__STRING_STRING_UINT_STRING_STRING_BOXED_BOXED_INT_POINTER_POINTER, 0 },
+  { (GCallback) notify_daemon_notify_handler, dbus_glib_marshal__NONE__STRING_STRING_UINT_STRING_STRING_BOXED_BOXED_INT_POINTER, 0 },
   { (GCallback) notify_daemon_close_notification_handler, dbus_glib_marshal__BOOLEAN__UINT_POINTER, 148 },
 };
 
@@ -177,7 +172,7 @@
   0,
   dbus_glib__methods,
   2,
-"org.freedesktop.Notifications\0Notify\0S\0app_name\0I\0s\0icon\0I\0s\0id\0I\0u\0trouble\0I\0s\0d_ret\0I\0s\0str_ret\0I\0as\0hints\0I\0a{sv}\0timeout\0I\0i\0return_id\0O\0F\0N\0u\0\0org.freedesktop.Notifications\0CloseNotification\0S\0id\0I\0u\0\0\0",
+"org.freedesktop.Notifications\0Notify\0A\0app_name\0I\0s\0icon\0I\0s\0id\0I\0u\0trouble\0I\0s\0d_ret\0I\0s\0str_ret\0I\0as\0hints\0I\0a{sv}\0timeout\0I\0i\0return_id\0O\0F\0N\0u\0\0org.freedesktop.Notifications\0CloseNotification\0S\0id\0I\0u\0\0\0",
 "\0",
 "\0"
 };

Modified: trunk/notify-daemon-ng/src/notifydaemon.c
===================================================================
--- trunk/notify-daemon-ng/src/notifydaemon.c	2005-12-09 19:35:13 UTC (rev 2367)
+++ trunk/notify-daemon-ng/src/notifydaemon.c	2005-12-09 20:23:18 UTC (rev 2368)
@@ -31,6 +31,7 @@
 #include <glib.h>
 #include <glib-object.h>
 #include <glib/gi18n.h>
+#include <dbus/dbus.h>
 #include <dbus/dbus-glib.h>
 #include <gtk/gtk.h>
 
@@ -53,6 +54,7 @@
 };
 
 static void notify_daemon_finalize (GObject * object);
+static void _emit_closed_signal (GObject *notify_widget);
 
 G_DEFINE_TYPE (NotifyDaemon, notify_daemon, G_TYPE_OBJECT);
 
@@ -117,6 +119,97 @@
 }
 
 static void
+_emit_action_invoked_signal (GObject *notify_widget, gchar *action)
+{
+  DBusConnection *con;
+  DBusError error;
+
+  dbus_error_init (&error);
+
+  con = dbus_bus_get (DBUS_BUS_SESSION, &error);
+
+  if (con == NULL)
+    {
+      g_warning ("Error sending ActionInvoked signal: %s", error.message);
+      dbus_error_free (&error);
+    }
+  else
+    {
+      DBusMessage *message;
+          
+      gchar *dest;
+      guint id;
+        
+      message = dbus_message_new_signal ("/org/freedesktop/Notifications", 
+                                         "org.freedesktop.Notifications",
+                                         "ActionInvoked");
+
+      dest = g_object_get_data (notify_widget,
+                                "_notify_sender");
+      id = GPOINTER_TO_UINT (g_object_get_data (notify_widget,
+                                                "_notify_id"));
+
+      g_assert (dest != NULL);
+
+      dbus_message_set_destination (message, dest); 
+      dbus_message_append_args (message, 
+                                DBUS_TYPE_UINT32, &id, 
+                                DBUS_TYPE_STRING, &action,
+                                DBUS_TYPE_INVALID);
+                                 
+      dbus_connection_send (con, message, NULL);
+     
+      dbus_message_unref (message);
+      dbus_connection_unref (con);
+    }
+}
+
+static void
+_emit_closed_signal (GObject *notify_widget)
+{
+  DBusConnection *con;
+  DBusError error;
+
+  dbus_error_init (&error);
+
+  con = dbus_bus_get (DBUS_BUS_SESSION, &error);
+
+  if (con == NULL)
+    {
+      g_warning ("Error sending Close signal: %s", error.message);
+      dbus_error_free (&error);
+    }
+  else
+    {
+      DBusMessage *message;
+          
+      gchar *dest;
+      guint id;
+        
+      message = dbus_message_new_signal ("/org/freedesktop/Notifications", 
+                                         "org.freedesktop.Notifications",
+                                         "NotificationClosed");
+
+      dest = g_object_get_data (notify_widget,
+                                "_notify_sender");
+      id = GPOINTER_TO_UINT (g_object_get_data (notify_widget,
+                                                "_notify_id"));
+
+      g_assert (dest != NULL);
+
+      dbus_message_set_destination (message, dest); 
+      dbus_message_append_args (message, 
+                                DBUS_TYPE_UINT32, &id,
+                                DBUS_TYPE_INVALID);
+                                 
+      dbus_connection_send (con, message, NULL);
+     
+      dbus_message_unref (message);
+      dbus_connection_unref (con);
+    }
+}
+
+static void
 _close_notification (NotifyDaemon *daemon, 
                      guint id)
 {
@@ -130,11 +223,11 @@
 
   if (nt)
     {
+      _emit_closed_signal (G_OBJECT (nt->widget));
+
       egg_notification_bubble_widget_hide (nt->widget);
       g_hash_table_remove (priv->notification_hash, &id);
     }
-
-  /* TODO: send message to client that notification was closed */
 }
 
 
@@ -158,10 +251,18 @@
   expiration = nt->expiration;
 
   if (now.tv_sec > expiration.tv_sec)
-    return TRUE;
+    {
+      _emit_closed_signal (G_OBJECT (nt->widget));
+      return TRUE;
+    }
   else if (now.tv_sec == expiration.tv_sec)
-    if (now.tv_usec > expiration.tv_usec)
-      return TRUE;
+    {
+      if (now.tv_usec > expiration.tv_usec)
+        {
+          _emit_closed_signal (G_OBJECT (nt->widget));
+          return TRUE;
+        }
+    }
 
   *phas_more_timeouts = TRUE;
   
@@ -408,6 +509,17 @@
 }
 
 static void
+_notification_daemon_handle_bubble_widget_action (GtkWidget *b, 
+                                                  EggNotificationBubbleWidget *bw)
+{
+  gchar *action;
+
+  action = (gchar *) g_object_get_data (G_OBJECT (b), "_notify_action");
+
+  _emit_action_invoked_signal (G_OBJECT (bw), action);  
+}
+
+static void
 _notification_daemon_handle_bubble_widget_default (EggNotificationBubbleWidget *bw,
                                                    NotifyDaemon *daemon)
 {
@@ -421,11 +533,10 @@
                               guint id,
                               const gchar *summary,
                               const gchar *body,
-                              GSList *actions,
+                              gchar **actions,
                               GHashTable *hints,
                               int timeout,
-                              guint *return_id,
-                              GError **error)
+                              DBusGMethodInvocation *context)
 {
   NotifyDaemonPrivate *priv;
   NotifyTimeout *nt;
@@ -433,6 +544,9 @@
   GValue *data;
   gboolean use_pos_data;
   gint x, y;
+  guint return_id;
+  gchar *sender;
+  gint i;
 
   nt = NULL;
 
@@ -468,8 +582,42 @@
         }
     }
 
+  /* set up action buttons */
+  i = 0;
+  while (actions[i] != NULL)
+    {
+      gchar *l;
+      GtkWidget *b;
+
+      l = actions[i + 1];
+      if (l == NULL)
+        {
+          g_warning ("Label not found for action %s. "
+                     "The protocol specifies that a label must "
+                     "follow an action in the actions array", actions[i]);
+
+          break;
+        }
+
+      b = egg_notification_bubble_widget_create_button (bw, l);
+       
+      g_object_set_data_full (G_OBJECT (b), 
+                              "_notify_action", 
+                              g_strdup (actions[i]), 
+                              (GDestroyNotify) g_free);
+
+      g_signal_connect (b, 
+                        "clicked",
+                        (GCallback)_notification_daemon_handle_bubble_widget_action, 
+                        bw);
+
+      i = i + 2;
+    }
+
   if (use_pos_data)
     egg_notification_bubble_widget_set_pos (bw, x, y);
+  else
+    egg_notification_bubble_widget_set_pos (bw, 100, 20);
 
   /* check for icon_data if icon == "" */
   if (strcmp ("", icon) == 0)
@@ -484,15 +632,23 @@
   egg_notification_bubble_widget_show (bw);
 
   if (id == 0)
-    *return_id = _store_notification (daemon, bw, timeout);
+    return_id = _store_notification (daemon, bw, timeout);
   else
-    *return_id = id;
+    return_id = id;
 
-  g_object_set_data (G_OBJECT (bw), "_notify_id", GUINT_TO_POINTER (*return_id));
+  sender = dbus_g_method_get_sender (context);
 
+  g_object_set_data (G_OBJECT (bw), "_notify_id", GUINT_TO_POINTER (return_id));
+  g_object_set_data_full (G_OBJECT (bw), 
+                          "_notify_sender", 
+                          sender, 
+                          (GDestroyNotify) g_free);
+
   if (nt)
     _calculate_timeout (daemon, nt, timeout);
 
+  dbus_g_method_return (context, return_id);
+
   return TRUE;
 }
 
@@ -559,3 +715,4 @@
 
   return 0;
 }
+

Modified: trunk/notify-daemon-ng/src/notifydaemon.h
===================================================================
--- trunk/notify-daemon-ng/src/notifydaemon.h	2005-12-09 19:35:13 UTC (rev 2367)
+++ trunk/notify-daemon-ng/src/notifydaemon.h	2005-12-09 20:23:18 UTC (rev 2368)
@@ -25,6 +25,9 @@
 #include <glib.h>
 #include <glib-object.h>
 
+#include <dbus/dbus-glib.h>
+#include <dbus/dbus-glib-lowlevel.h>
+
 G_BEGIN_DECLS
 #define NOTIFY_TYPE_DAEMON (notify_daemon_get_type ())
 #define NOTIFY_DAEMON(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NOTIFY_TYPE_DAEMON, NotifyDaemon))
@@ -68,11 +71,10 @@
                                        guint id,
                                        const gchar *summary,
                                        const gchar *body,
-                                       GSList *actions,
+                                       gchar **actions,
                                        GHashTable *hints,
                                        int timeout,
-                                       guint *return_id,
-                                       GError **error);
+                                       DBusGMethodInvocation *context);
 
 gboolean notify_daemon_close_notification_handler (NotifyDaemon *daemon,
                                                    guint id,

Modified: trunk/notify-daemon-ng/src/notifydaemon.xml
===================================================================
--- trunk/notify-daemon-ng/src/notifydaemon.xml	2005-12-09 19:35:13 UTC (rev 2367)
+++ trunk/notify-daemon-ng/src/notifydaemon.xml	2005-12-09 20:23:18 UTC (rev 2368)
@@ -6,6 +6,7 @@
     <annotation name="org.freedesktop.DBus.GLib.CSymbol" value="NotifyDaemon"/>
     <method name="Notify">
       <annotation name="org.freedesktop.DBus.GLib.CSymbol" value="notify_daemon_notify_handler"/>
+      <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
       <arg type="s" name="app_name" direction="in" />
       <arg type="s" name="icon" direction="in" />
       <arg type="u" name="id" direction="in" />



More information about the galago-commits mailing list