[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