diff --git a/ChangeLog b/ChangeLog index fe8afc8..0650826 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,8 +1,19 @@ +2006-03-22 Lucas Rocha + + Implement the "message" command on notification icon + with libnotify bubbles. Patch from Davyd Madeley + . + + * configure.in: add libnotify checking. + * src/notification.c (zenity_notification_handle_stdin, + zenity_notification): initialize libnotify and implement + "message" command. + 2006-03-21 Gora Mohanty * configure.in: Added or (Oriya) to ALL_LINGUAS. -2005-03-13 Lucas Rocha +2006-03-13 Lucas Rocha * configure.in: Post release bump, for unstable 2.15.x development. diff --git a/configure.in b/configure.in index 51f8121..ca4f214 100644 --- a/configure.in +++ b/configure.in @@ -66,6 +66,20 @@ dnl ******************************* AC_PATH_PROG(PERL,perl,) +dnl ******************************* +dnl libnotify check +dnl ******************************* +PKG_CHECK_MODULES(LIBNOTIFY, libnotify >= 0.3.2, + HAVE_LIBNOTIFY="yes", HAVE_LIBNOTIFY="no") +if test "x$HAVE_LIBNOTIFY" = "xyes"; then + ZENITY_CFLAGS="$ZENITY_CFLAGS $LIBNOTIFY_CFLAGS" + ZENITY_LIBS="$ZENITY_LIBS $LIBNOTIFY_LIBS" + + AC_SUBST(ZENITY_CFLAGS) + AC_SUBST(ZENITY_LIBS) + AC_DEFINE(HAVE_LIBNOTIFY, 1, [libnotify is available on this machine]) +fi + dnl ******************************* dnl Internationalization dnl ******************************* diff --git a/src/notification.c b/src/notification.c index 26600cb..6d5f8dd 100644 --- a/src/notification.c +++ b/src/notification.c @@ -26,6 +26,11 @@ #include #include #include + +#ifdef HAVE_LIBNOTIFY +#include +#endif + #include "zenity.h" #include "eggtrayicon.h" #include "util.h" @@ -182,7 +187,33 @@ zenity_notification_handle_stdin (GIOChannel *channel, g_warning ("Could not load notification icon : %s", value); } } else if (!strcmp (command, "message")) { - g_warning ("haven't implemented message support yet"); +#ifdef HAVE_LIBNOTIFY + /* display a notification bubble */ + if (notify_is_initted ()) { + GError *error = NULL; + NotifyNotification *n; + GdkPixbuf *icon; + + n = notify_notification_new (g_strcompress (value), NULL, NULL, + GTK_WIDGET (tray_icon)); + + icon = gtk_image_get_pixbuf (GTK_IMAGE (icon_image)); + + notify_notification_set_icon_from_pixbuf (n, icon); + + notify_notification_show (n, &error); + if (error) { + g_warning (error->message); + g_error_free (error); + } + + g_object_unref (G_OBJECT (n)); + } else { +#else + { /* this brace is for balance */ +#endif + g_warning ("Notification framework not available"); + } } else if (!strcmp (command, "tooltip")) { gtk_tooltips_set_tip (tooltips, icon_event_box, value, value); } else if (!strcmp (command, "visible")) { @@ -275,6 +306,12 @@ zenity_notification (ZenityData *data, ZenityNotificationData *notification_data G_CALLBACK (zenity_notification_icon_press_callback), data); } +#ifdef HAVE_LIBNOTIFY + /* create the notification widget */ + if (!notify_is_initted ()) + notify_init (_("Zenity notification")); +#endif + gtk_widget_show_all (GTK_WIDGET (tray_icon)); /* Does nothing at the moment */