diff --git a/info-daemon/NetworkManagerInfoPassphraseDialog.c b/info-daemon/NetworkManagerInfoPassphraseDialog.c new file mode 100644 index 0000000000..639fd870de --- /dev/null +++ b/info-daemon/NetworkManagerInfoPassphraseDialog.c @@ -0,0 +1,228 @@ +/* NetworkManagerInfo -- Manage allowed access points and provide a UI + * for WEP key entry + * + * Dan Williams + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * (C) Copyright 2004 Red Hat, Inc. + */ + +#include +#include +#include +#include +#include +#include +#include + +#include "NetworkManagerInfoDbus.h" +#include "NetworkManagerInfoPassphraseDialog.h" + + +/* + * nmi_passphrase_dialog_clear + * + * Return dialog to its original state; clear out any network or device qdatas, + * clear the passphrase entry, and hide the dialog. + * + */ +void nmi_passphrase_dialog_clear (GtkWidget *dialog, GtkWidget *entry) +{ + char *data; + + g_return_if_fail (dialog != NULL); + g_return_if_fail (entry != NULL); + + data = g_object_get_data (G_OBJECT (dialog), "device"); + if (data) + { + g_free (data); + g_object_set_data (G_OBJECT (dialog), "device", NULL); + } + + data = g_object_get_data (G_OBJECT (dialog), "network"); + if (data) + { + g_free (data); + g_object_set_data (G_OBJECT (dialog), "network", NULL); + } + + gtk_entry_set_text (GTK_ENTRY (entry), ""); + gtk_widget_hide (dialog); +} + + +/* + * nmi_passphrase_dialog_ok_clicked + * + * OK button handler; grab the passphrase and send it back + * to NetworkManager. Get rid of the dialog. + * + */ +void nmi_passphrase_dialog_ok_clicked (GtkWidget *ok_button, gpointer user_data) +{ + GtkWidget *dialog = gtk_widget_get_toplevel (ok_button); + NMIAppInfo *info = (NMIAppInfo *)user_data; + + g_return_if_fail (info != NULL); + + if (GTK_WIDGET_TOPLEVEL (dialog)) + { + GtkWidget *entry = glade_xml_get_widget (info->passphrase_dialog, "passphrase_entry"); + const char *passphrase = gtk_entry_get_text (GTK_ENTRY (entry)); + const char *device = g_object_get_data (G_OBJECT (dialog), "device"); + const char *network = g_object_get_data (G_OBJECT (dialog), "network"); + gchar *key = NULL; + GConfEntry *gconf_entry; + + /* Tell NetworkManager about the key the user typed in */ + nmi_dbus_return_user_key (info->connection, device, network, passphrase); + + /* Update GConf with the new user key */ + key = g_strdup_printf ("%s/%s", NMI_GCONF_TRUSTED_NETWORKS_PATH, network); + gconf_entry = gconf_client_get_entry (info->gconf_client, key, NULL, TRUE, NULL); + g_free (key); + if (gconf_entry) + { + gconf_entry_unref (gconf_entry); + key = g_strdup_printf ("%s/%s/key", NMI_GCONF_TRUSTED_NETWORKS_PATH, network); + gconf_client_set_string (info->gconf_client, key, passphrase, NULL); + g_free (key); + } + + nmi_passphrase_dialog_clear (dialog, entry); + } +} + + +/* + * nmi_passphrase_dialog_cancel_clicked + * + * Cancel button handler; return a cancellation message to NetworkManager + * and get rid of the dialog. + * + */ +void nmi_passphrase_dialog_cancel_clicked (GtkWidget *cancel_button, gpointer user_data) +{ + GtkWidget *dialog = gtk_widget_get_toplevel (cancel_button); + NMIAppInfo *info = (NMIAppInfo *)user_data; + + g_return_if_fail (info != NULL); + + if (GTK_WIDGET_TOPLEVEL (dialog)) + { + const char *device = g_object_get_data (G_OBJECT (dialog), "device"); + const char *network = g_object_get_data (G_OBJECT (dialog), "network"); + + nmi_dbus_return_user_key (info->connection, device, network, "***canceled***"); + nmi_passphrase_dialog_clear (dialog, glade_xml_get_widget (info->passphrase_dialog, "passphrase_entry")); + } +} + + +/* + * nmi_passphrase_dialog_show + * + * Pop up the user key dialog in response to a dbus message + * + */ +void nmi_passphrase_dialog_show (const char *device, const char *network, NMIAppInfo *info) +{ + GtkWidget *dialog; + GtkWidget *label; + const gchar *label_text; + + g_return_if_fail (info != NULL); + g_return_if_fail (device != NULL); + g_return_if_fail (network != NULL); + + dialog = glade_xml_get_widget (info->passphrase_dialog, "passphrase_dialog"); + nmi_passphrase_dialog_clear (dialog, glade_xml_get_widget (info->passphrase_dialog, "passphrase_entry")); + + /* Insert the Network name into the dialog text */ + label = glade_xml_get_widget (info->passphrase_dialog, "label1"); + label_text = gtk_label_get_label (GTK_LABEL (label)); + if (label_text) + { + gchar *new_label_text = g_strdup_printf (label_text, network); + gtk_label_set_label (GTK_LABEL (label), new_label_text); + } + + g_object_set_data (G_OBJECT (dialog), "device", g_strdup (device)); + g_object_set_data (G_OBJECT (dialog), "network", g_strdup (network)); + + gtk_widget_show (dialog); +} + + +/* + * nmi_passphrase_dialog_cancel + * + * Cancel and hide any user key dialog that might be up + * + */ +void nmi_passphrase_dialog_cancel (NMIAppInfo *info) +{ + GtkWidget *dialog; + GtkWidget *entry; + + g_return_if_fail (info != NULL); + + dialog = glade_xml_get_widget (info->passphrase_dialog, "passphrase_dialog"); + entry = glade_xml_get_widget (info->passphrase_dialog, "passphrase_entry"); + nmi_passphrase_dialog_clear (dialog, entry); +} + + +/* + * nmi_passphrase_dialog_init + * + * Initialize the passphrase dialog + * + * Returns: 0 on success + * -1 on failure + */ +int nmi_passphrase_dialog_init (NMIAppInfo *info) +{ + GtkWidget *dialog; + GtkButton *ok_button; + GtkButton *cancel_button; + GtkEntry *entry; + + info->passphrase_dialog = glade_xml_new(GLADEDIR"/passphrase.glade", NULL, NULL); + if (!info->passphrase_dialog) + { + fprintf (stderr, "Could not open the passphrase dialog glade file!\n"); + return (-1); + } + + dialog = glade_xml_get_widget (info->passphrase_dialog, "passphrase_dialog"); + gtk_widget_hide (dialog); + + ok_button = GTK_BUTTON (glade_xml_get_widget (info->passphrase_dialog, "login_button")); + g_signal_connect (G_OBJECT (ok_button), "clicked", GTK_SIGNAL_FUNC (nmi_passphrase_dialog_ok_clicked), info); + gtk_widget_grab_default (GTK_WIDGET (ok_button)); + cancel_button = GTK_BUTTON (glade_xml_get_widget (info->passphrase_dialog, "cancel_button")); + g_signal_connect (G_OBJECT (cancel_button), "clicked", GTK_SIGNAL_FUNC (nmi_passphrase_dialog_cancel_clicked), info); + + entry = GTK_ENTRY (glade_xml_get_widget (info->passphrase_dialog, "passphrase_entry")); + gtk_entry_set_visibility (entry, FALSE); + gtk_entry_set_invisible_char (entry, '*'); + + nmi_passphrase_dialog_clear (dialog, GTK_WIDGET (entry)); + + return (0); +} diff --git a/info-daemon/NetworkManagerInfoPassphraseDialog.h b/info-daemon/NetworkManagerInfoPassphraseDialog.h new file mode 100644 index 0000000000..9d13f7d625 --- /dev/null +++ b/info-daemon/NetworkManagerInfoPassphraseDialog.h @@ -0,0 +1,34 @@ +/* NetworkManagerInfo -- Manage allowed access points and provide a UI + * for WEP key entry + * + * Dan Williams + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * (C) Copyright 2004 Red Hat, Inc. + */ + +#ifndef NETWORK_MANAGER_INFO_PASSPHRASE_DIALOG_H +#define NETWORK_MANAGER_INFO_PASSPHRASE_DIALOG_H + +#include "NetworkManagerInfo.h" + +int nmi_passphrase_dialog_init (NMIAppInfo *info); + +void nmi_passphrase_dialog_show (const char *device, const char *network, NMIAppInfo *info); + +void nmi_passphrase_dialog_cancel (NMIAppInfo *info); + +#endif