From 80d24298e992d81b31ce58dd675472d2cdc1ca4c Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Tue, 21 Feb 2006 08:03:26 +0000 Subject: [PATCH] 2006-02-21 Dan Williams * gnome/applet/applet.[ch] gnome/applet/applet-dbus.c - Implement notification support for VPN messages too git-svn-id: http://svn-archive.gnome.org/svn/NetworkManager/trunk@1483 4912f4e0-d625-0410-9fb7-b9a5a253dbdc --- ChangeLog | 6 ++ gnome/applet/applet-dbus.c | 4 +- gnome/applet/applet.c | 141 ++++++++++++++++++++++++++++++------- gnome/applet/applet.h | 4 +- 4 files changed, 127 insertions(+), 28 deletions(-) diff --git a/ChangeLog b/ChangeLog index 4856604289..ad7fdd45a3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2006-02-21 Dan Williams + + * gnome/applet/applet.[ch] + gnome/applet/applet-dbus.c + - Implement notification support for VPN messages too + 2006-02-21 Dan Williams * gnome/applet/applet-dbus-info.c diff --git a/gnome/applet/applet-dbus.c b/gnome/applet/applet-dbus.c index dd3971ed71..9a931a90ce 100644 --- a/gnome/applet/applet-dbus.c +++ b/gnome/applet/applet-dbus.c @@ -210,7 +210,7 @@ static DBusHandlerResult nmwa_dbus_filter (DBusConnection *connection, DBusMessa char *error_msg; if (dbus_message_get_args (message, NULL, DBUS_TYPE_STRING, &vpn_name, DBUS_TYPE_STRING, &error_msg, DBUS_TYPE_INVALID)) { - nmwa_schedule_vpn_failure_dialog (applet, member, vpn_name, error_msg); + nmwa_schedule_vpn_failure_alert (applet, member, vpn_name, error_msg); /* clear the 'last_attempt_success' key in gconf so we prompt for password next time */ nmwa_dbus_vpn_set_last_attempt_status (applet, vpn_name, FALSE); } @@ -224,7 +224,7 @@ static DBusHandlerResult nmwa_dbus_filter (DBusConnection *connection, DBusMessa { char *stripped = g_strstrip (g_strdup (banner)); - nmwa_schedule_vpn_login_banner_dialog (applet, vpn_name, stripped); + nmwa_schedule_vpn_login_banner (applet, vpn_name, stripped); g_free (stripped); /* set the 'last_attempt_success' key in gconf so we DON'T prompt for password next time */ diff --git a/gnome/applet/applet.c b/gnome/applet/applet.c index 114a483a76..a39151c64e 100644 --- a/gnome/applet/applet.c +++ b/gnome/applet/applet.c @@ -365,6 +365,7 @@ static void nmwa_about_cb (NMWirelessApplet *applet) typedef struct DialogCBData { + NMWirelessApplet *applet; char *msg; char *title; } DialogCBData; @@ -379,6 +380,7 @@ static void free_dialog_cb_data (DialogCBData *data) g_free (data); } +#ifndef ENABLE_NOTIFY static void vpn_failure_dialog_close_cb (GtkWidget *dialog, gpointer user_data) { DialogCBData *data; @@ -421,15 +423,52 @@ static gboolean nmwa_show_vpn_failure_dialog (DialogCBData *cb_data) return FALSE; } +#endif + + +#ifdef ENABLE_NOTIFY +/* + * nmwa_notify_vpn_failure + * + * Notify the user of that the VPN connection failed + * + */ +static gboolean nmwa_notify_vpn_failure (DialogCBData *cb_data) +{ + NotifyNotification * n; + NotifyUrgency urgency = NOTIFY_URGENCY_NORMAL; + char * icon = NULL; + + g_return_val_if_fail (cb_data != NULL, FALSE); + g_return_val_if_fail (cb_data->msg != NULL, FALSE); + g_return_val_if_fail (cb_data->title != NULL, FALSE); + + if (!notify_is_initted ()) + notify_init ("NetworkManager"); + + icon = g_strdup ("gnome-lockscreen"); + urgency = NOTIFY_URGENCY_CRITICAL; + + n = notify_notification_new (cb_data->title, cb_data->msg, icon, + (GtkWidget *) cb_data->applet); + notify_notification_set_urgency (n, urgency); + notify_notification_show (n, NULL); + g_object_unref (n); + g_free (icon); + free_dialog_cb_data (cb_data); + + return FALSE; +} +#endif /* - * nmwa_schedule_vpn_failure_dialog + * nmwa_schedule_vpn_failure_alert * - * Schedule display of the VPN Failure dialog. + * Schedule display of a VPN failure message. * */ -void nmwa_schedule_vpn_failure_dialog (NMWirelessApplet *applet, const char *member, const char *vpn_name, const char *error_msg) +void nmwa_schedule_vpn_failure_alert (NMWirelessApplet *applet, const char *member, const char *vpn_name, const char *error_msg) { DialogCBData *cb_data = NULL; gchar *error_head = NULL; @@ -442,7 +481,7 @@ void nmwa_schedule_vpn_failure_dialog (NMWirelessApplet *applet, const char *mem g_return_if_fail (error_msg != NULL); cb_data = g_malloc0 (sizeof (DialogCBData)); - cb_data->title = g_strdup (_("VPN Error")); + cb_data->applet = applet; if (!strcmp (member, NM_DBUS_VPN_SIGNAL_LOGIN_FAILED)) { @@ -477,25 +516,31 @@ void nmwa_schedule_vpn_failure_dialog (NMWirelessApplet *applet, const char *mem error_data = g_strdup_printf (_("The VPN service said: \"%s\""), error_msg); +#ifdef ENABLE_NOTIFY + cb_data->title = g_strdup (error_head); + cb_data->msg = g_strdup_printf ("\n%s\n\n%s", error_desc, error_data); + g_idle_add ((GSourceFunc) nmwa_notify_vpn_failure, cb_data); +#else + cb_data->title = g_strdup (_("VPN Error")); cb_data->msg = g_strdup_printf ("%s\n\n" "%s\n\n%s", error_head, error_desc, error_data); - + g_idle_add ((GSourceFunc) nmwa_show_vpn_failure_dialog, cb_data); +#endif g_free (error_head); g_free (error_desc); g_free (error_data); - - g_idle_add ((GSourceFunc) nmwa_show_vpn_failure_dialog, cb_data); } +#ifndef ENABLE_NOTIFY static void vpn_login_banner_dialog_close_cb (GtkWidget *dialog, gpointer user_data) { - char *message; + DialogCBData *data; - if ((message = g_object_get_data (G_OBJECT (dialog), "message"))) + if ((data = g_object_get_data (G_OBJECT (dialog), "data"))) { - g_object_set_data (G_OBJECT (dialog), "message", NULL); - g_free (message); + g_object_set_data (G_OBJECT (dialog), "data", NULL); + free_dialog_cb_data (data); } gtk_widget_destroy (dialog); @@ -508,16 +553,19 @@ static void vpn_login_banner_dialog_close_cb (GtkWidget *dialog, gpointer user_d * Present the VPN login banner dialog. * */ -static gboolean nmwa_show_vpn_login_banner_dialog (char *message) +static gboolean nmwa_show_vpn_login_banner_dialog (gpointer user_data) { + DialogCBData *cb_data = (DialogCBData *) user_data; GtkWidget *dialog; - g_return_val_if_fail (message != NULL, FALSE); + g_return_val_if_fail (cb_data != NULL, FALSE); + g_return_val_if_fail (cb_data->msg != NULL, FALSE); - dialog = gtk_message_dialog_new_with_markup (NULL, 0, GTK_MESSAGE_INFO, GTK_BUTTONS_OK, message, NULL); + dialog = gtk_message_dialog_new_with_markup (NULL, 0, GTK_MESSAGE_INFO, + GTK_BUTTONS_OK, cb_data->msg, NULL); g_signal_connect (dialog, "response", G_CALLBACK (vpn_login_banner_dialog_close_cb), NULL); g_signal_connect (dialog, "close", G_CALLBACK (vpn_login_banner_dialog_close_cb), NULL); - g_object_set_data (G_OBJECT (dialog), "message", message); + g_object_set_data (G_OBJECT (dialog), "data", cb_data); /* Bash focus-stealing prevention in the face */ gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_CENTER_ALWAYS); @@ -527,29 +575,74 @@ static gboolean nmwa_show_vpn_login_banner_dialog (char *message) return FALSE; } +#endif + +#ifdef ENABLE_NOTIFY +/* + * nmwa_notify_vpn_login_banner + * + * Notify the user of that the VPN's login banner + * + */ +static gboolean nmwa_notify_vpn_login_banner (DialogCBData *cb_data) +{ + NotifyNotification * n; + NotifyUrgency urgency = NOTIFY_URGENCY_NORMAL; + char * icon = NULL; + + g_return_val_if_fail (cb_data != NULL, FALSE); + g_return_val_if_fail (cb_data->msg != NULL, FALSE); + g_return_val_if_fail (cb_data->title != NULL, FALSE); + + if (!notify_is_initted ()) + notify_init ("NetworkManager"); + + icon = g_strdup ("gnome-lockscreen"); + urgency = NOTIFY_URGENCY_LOW; + + n = notify_notification_new (cb_data->title, cb_data->msg, icon, + (GtkWidget *) cb_data->applet); + notify_notification_set_urgency (n, urgency); + notify_notification_show (n, NULL); + g_object_unref (n); + g_free (icon); + free_dialog_cb_data (cb_data); + + return FALSE; +} +#endif /* - * nmwa_schedule_vpn_login_banner_dialog + * nmwa_schedule_vpn_login_banner * - * Schedule display of the VPN Login Banner dialog. + * Schedule a display of the VPN banner * */ -void nmwa_schedule_vpn_login_banner_dialog (NMWirelessApplet *applet, const char *vpn_name, const char *banner) +void nmwa_schedule_vpn_login_banner (NMWirelessApplet *applet, const char *vpn_name, const char *banner) { - char *msg; + DialogCBData * cb_data = NULL; char *msg2; g_return_if_fail (applet != NULL); g_return_if_fail (vpn_name != NULL); g_return_if_fail (banner != NULL); - msg2 = g_strdup_printf (_("VPN connection '%s' said:"), vpn_name); - msg = g_strdup_printf ("%s\n\n%s\n\n\"%s\"", - _("VPN Login Message"), msg2, banner); - g_free (msg2); + cb_data = g_malloc0 (sizeof (DialogCBData)); + cb_data->applet = applet; - g_idle_add ((GSourceFunc) nmwa_show_vpn_login_banner_dialog, msg); + msg2 = g_strdup_printf (_("VPN connection '%s' said:"), vpn_name); + +#ifdef ENABLE_NOTIFY + cb_data->title = g_strdup (_("VPN Login Message")); + cb_data->msg = g_strdup_printf ("\n%s\n\n%s", msg2, banner); + g_idle_add ((GSourceFunc) nmwa_notify_vpn_login_banner, cb_data); +#else + cb_data->msg = g_strdup_printf ("%s\n\n%s\n\n\"%s\"", + _("VPN Login Message"), msg2, banner); + g_idle_add ((GSourceFunc) nmwa_show_vpn_login_banner_dialog, cb_data); +#endif + g_free (msg2); } diff --git a/gnome/applet/applet.h b/gnome/applet/applet.h index 8f74c70470..13bc85b1bd 100644 --- a/gnome/applet/applet.h +++ b/gnome/applet/applet.h @@ -139,8 +139,8 @@ NetworkDevice * nmwa_get_device_for_nm_path (GSList *dev_list, const char *nm_ NMWirelessApplet * nmwa_new (void); void nmwa_schedule_warning_dialog (NMWirelessApplet *applet, const char *msg); gboolean nmwa_driver_notify (gpointer user_data); -void nmwa_schedule_vpn_failure_dialog (NMWirelessApplet *applet, const char *member, const char *vpn_name, const char *error_msg); -void nmwa_schedule_vpn_login_banner_dialog (NMWirelessApplet *applet, const char *vpn_name, const char *banner); +void nmwa_schedule_vpn_failure_alert (NMWirelessApplet *applet, const char *member, const char *vpn_name, const char *error_msg); +void nmwa_schedule_vpn_login_banner (NMWirelessApplet *applet, const char *vpn_name, const char *banner); NetworkDevice * nmwa_get_first_active_device (GSList *dev_list); VPNConnection * nmwa_get_first_active_vpn_connection (NMWirelessApplet *applet);