Tim Niemueller wrote: > Rodney Dawes wrote: > >> notifications with libnotify/notification-daemon, to nm-applet. It's > > I like it. But I would even like it better if it would display the > notification like gnome-power-manager with an arrow pointing to the > object in the notification area that this notification belongs to. I stole the bits from g-p-m and applied it to your patch. The notification is now placed "correctly". Feel free to use it. Cheers, Michael -- Why is it that all of the instruments seeking intelligent life in the universe are pointed away from Earth?
? dispatcher-daemon/.deps ? gnome/applet/.deps ? gnome/libnm_glib/.deps ? gnome/vpn-properties/.deps ? libnm-util/.deps ? po/stamp-it ? src/.deps ? src/backends/.deps ? src/dhcp-manager/.deps ? src/named-manager/.deps ? src/vpn-manager/.deps ? test/.deps ? test/libnm-util/.deps ? test/test-common/.deps ? utils/.deps ? vpn-daemons/pptp/auth-dialog/.deps ? vpn-daemons/pptp/po/stamp-it ? vpn-daemons/pptp/properties/.deps ? vpn-daemons/pptp/src/.deps ? vpn-daemons/vpnc/auth-dialog/.deps ? vpn-daemons/vpnc/po/stamp-it ? vpn-daemons/vpnc/properties/.deps ? vpn-daemons/vpnc/src/.deps Index: gnome/applet/Makefile.am =================================================================== RCS file: /cvs/gnome/NetworkManager/gnome/applet/Makefile.am,v retrieving revision 1.16 diff -u -3 -p -r1.16 Makefile.am --- gnome/applet/Makefile.am 16 Jan 2006 18:34:13 -0000 1.16 +++ gnome/applet/Makefile.am 15 Feb 2006 03:37:58 -0000 @@ -17,6 +17,7 @@ nm_applet_CPPFLAGS = \ $(LIBGNOMEUI_CFLAGS) \ $(PANEL_APPLET_CFLAGS) \ $(GNOME_KEYRING_CFLAGS) \ + $(NOTIFY_CFLAGS) \ -DICONDIR=\""$(datadir)/pixmaps"\" \ -DGLADEDIR=\""$(gladedir)"\" \ -DBINDIR=\""$(bindir)"\" \ @@ -97,6 +98,7 @@ nm_applet_LDADD = \ $(GCONF_LIBS) \ $(LIBGNOMEUI_LIBS) \ $(GNOME_KEYRING_LIBS) \ + $(NOTIFY_LIBS) \ $(top_builddir)/utils/libnmutils.la \ $(top_builddir)/libnm-util/libnm-util.la \ $(NULL) Index: gnome/applet/applet.c =================================================================== RCS file: /cvs/gnome/NetworkManager/gnome/applet/applet.c,v retrieving revision 1.103 diff -u -3 -p -r1.103 applet.c --- gnome/applet/applet.c 30 Jan 2006 18:45:16 -0000 1.103 +++ gnome/applet/applet.c 15 Feb 2006 03:37:59 -0000 @@ -33,6 +33,7 @@ #include <string.h> #include <gtk/gtk.h> +#include <gtk/gtkwidget.h> #include <glib/gi18n.h> #include <libgnomeui/libgnomeui.h> @@ -43,6 +44,10 @@ #include <glade/glade.h> #include <gconf/gconf-client.h> +#ifdef ENABLE_NOTIFY +#include <libnotify/notify.h> +#endif + #include "applet.h" #include "applet-compat.h" #include "applet-dbus.h" @@ -1063,6 +1068,116 @@ static gboolean animation_timeout (NMWir return TRUE; } +#ifdef ENABLE_NOTIFY +/* + * get_widget_position + * + * Helper function to determine the x/y location of a widget + * + */ +static gboolean get_widget_position (GtkWidget *widget, + int *x, + int *y) +{ + /* assertion checks */ + g_assert (widget); + g_assert (x); + g_assert (y); + + gdk_window_get_origin (GDK_WINDOW (widget->window), x, y); + + *x += widget->allocation.x; + *y += widget->allocation.y; + *x += widget->allocation.width / 2; + *y += widget->allocation.height; + + /* g_debug ("widget position x=%i, y=%i", *x, *y); */ + + return TRUE; +} +#endif + +/* + * nmwa_notify_state + * + * Notify the user of change in connectivity + * + */ +static void nmwa_notify_state (NMWirelessApplet *applet, NetworkDevice *act_dev, WirelessNetwork *active_network) +{ +#ifdef ENABLE_NOTIFY + NotifyNotification * n; + NotifyUrgency urgency = NOTIFY_URGENCY_NORMAL; + char * title = NULL; + char * msg = NULL; + char * icon = NULL; + static int state = NM_STATE_ASLEEP; + int x; + int y; + + if (!notify_is_initted ()) + notify_init ("NetworkManager"); + + switch (applet->nm_state) + { + case NM_STATE_ASLEEP: + case NM_STATE_DISCONNECTED: + title = g_strdup (_("Disconnected")); + msg = g_strdup (_("The network connection has been disconnected.")); + icon = g_strdup ("nm-no-connection"); + urgency = NOTIFY_URGENCY_CRITICAL; + break; + + case NM_STATE_CONNECTED: + title = g_strdup (_("Connected")); + if (network_device_is_wired (act_dev)) + { + msg = g_strdup (_("Connected to a wired network interface.")); + icon = g_strdup ("nm-device-wired"); + urgency = NOTIFY_URGENCY_LOW; + } + else if (network_device_is_wireless (act_dev)) + { + if (applet->is_adhoc) + { + msg = g_strdup (_("An ad-hoc wireless network connection has been established.")); + icon = g_strdup ("nm-adhoc"); + } + else + { + msg = g_strdup_printf (_("A wireless network connection to '%s' has been established."), + active_network ? wireless_network_get_essid (active_network) : "(unknown)"); + icon = g_strdup ("nm-device-wireless"); + } + } + + break; + + default: + break; + } + + if (state != applet->nm_state && title && msg && icon) { + n = notify_notification_new (title, msg, icon, NULL); + + get_widget_position(GTK_WIDGET (applet), &x, &y); + notify_notification_set_hint_int32 (n, "x", x); + notify_notification_set_hint_int32 (n, "y", y); + + notify_notification_set_urgency (n, urgency); + + notify_notification_show (n, NULL); + + g_object_unref (n); + } + g_free (icon); + g_free (msg); + g_free (title); + + state = applet->nm_state; +#endif +} + /* * nmwa_update_state @@ -1188,6 +1303,8 @@ done: else show_applet = FALSE; } + + nmwa_notify_state (applet, act_dev, active_network); /* determine if we should hide the notification icon */ if (show_applet)
Attachment:
signature.asc
Description: OpenPGP digital signature