network-manager-applet r552 - in branches/network-manager-applet-0-6: . src
- From: tambeti svn gnome org
- To: svn-commits-list gnome org
- Subject: network-manager-applet r552 - in branches/network-manager-applet-0-6: . src
- Date: Fri, 22 Feb 2008 21:51:47 +0000 (GMT)
Author: tambeti
Date: Fri Feb 22 21:51:47 2008
New Revision: 552
URL: http://svn.gnome.org/viewvc/network-manager-applet?rev=552&view=rev
Log:
2008-02-22 Tambet Ingo <tambet gmail com>
Implement prepopulating of the passphrase dialog with the last
known good
values. Especially helpful for WPA-EAP which has a lot of
widgets to fill.
* src/passphrase-dialog.c (populate_dialog): Implement.
* src/nm-wired-dialog.c (populate_dialog): Implement.
* src/wireless-security-manager.c: Store wireless options in a
* hash to store
their types.
(wsm_get_option_by_type): Implement.
* src/nm-gconf-wso.c (nm_gconf_wso_populate_wso): Implement.
* src/nm-gconf-wso-wpa-psk.c
* (nm_gconf_wso_wpa_psk_get_wpa_version): Implement.
* src/nm-gconf-wso-wpa-eap.c
* (nm_gconf_wso_wpa_eap_get_wpa_version): Implement.
* src/wireless-security-option.c
* (wso_populate_from_dbus_params): Implement.
* src/wso-wpa-psk.c (populate_from_dbus_func): Implement.
* src/wso-wpa-eap.c (populate_from_dbus_func): Implement.
* src/wso-leap.c (widget_create_func): Comment out the
* "show_password" button
signal handler. For some unknown reason, it totally breaks the
LEAP dialog.
(populate_from_dbus_func): Implement.
Modified:
branches/network-manager-applet-0-6/ChangeLog
branches/network-manager-applet-0-6/src/applet.glade
branches/network-manager-applet-0-6/src/nm-gconf-wso-wpa-eap.c
branches/network-manager-applet-0-6/src/nm-gconf-wso-wpa-eap.h
branches/network-manager-applet-0-6/src/nm-gconf-wso-wpa-psk.c
branches/network-manager-applet-0-6/src/nm-gconf-wso-wpa-psk.h
branches/network-manager-applet-0-6/src/nm-gconf-wso.c
branches/network-manager-applet-0-6/src/nm-gconf-wso.h
branches/network-manager-applet-0-6/src/nm-wired-dialog.c
branches/network-manager-applet-0-6/src/passphrase-dialog.c
branches/network-manager-applet-0-6/src/wireless-security-manager.c
branches/network-manager-applet-0-6/src/wireless-security-manager.h
branches/network-manager-applet-0-6/src/wireless-security-option.c
branches/network-manager-applet-0-6/src/wireless-security-option.h
branches/network-manager-applet-0-6/src/wso-leap.c
branches/network-manager-applet-0-6/src/wso-private.h
branches/network-manager-applet-0-6/src/wso-wpa-eap.c
branches/network-manager-applet-0-6/src/wso-wpa-psk.c
Modified: branches/network-manager-applet-0-6/src/applet.glade
==============================================================================
--- branches/network-manager-applet-0-6/src/applet.glade (original)
+++ branches/network-manager-applet-0-6/src/applet.glade Fri Feb 22 21:51:47 2008
@@ -2171,7 +2171,35 @@
</child>
<child>
- <widget class="GtkHBox" id="hbox9">
+ <widget class="GtkLabel" id="label48">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes"></property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">1</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkHBox" id="hbox17">
<property name="visible">True</property>
<property name="homogeneous">False</property>
<property name="spacing">5</property>
@@ -2216,6 +2244,7 @@
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
<property name="x_options">fill</property>
+ <property name="y_options">fill</property>
</packing>
</child>
</widget>
Modified: branches/network-manager-applet-0-6/src/nm-gconf-wso-wpa-eap.c
==============================================================================
--- branches/network-manager-applet-0-6/src/nm-gconf-wso-wpa-eap.c (original)
+++ branches/network-manager-applet-0-6/src/nm-gconf-wso-wpa-eap.c Fri Feb 22 21:51:47 2008
@@ -436,6 +436,14 @@
gnome_keyring_attribute_list_free (attributes);
}
+gboolean
+nm_gconf_wso_wpa_eap_get_wpa_version (NMGConfWSOWPA_EAP *self)
+{
+ g_return_val_if_fail (self != NULL, FALSE);
+
+ return self->priv->wpa_version;
+}
+
static void
nm_gconf_wso_wpa_eap_init (NMGConfWSOWPA_EAP *self)
{
Modified: branches/network-manager-applet-0-6/src/nm-gconf-wso-wpa-eap.h
==============================================================================
--- branches/network-manager-applet-0-6/src/nm-gconf-wso-wpa-eap.h (original)
+++ branches/network-manager-applet-0-6/src/nm-gconf-wso-wpa-eap.h Fri Feb 22 21:51:47 2008
@@ -59,4 +59,6 @@
NMGConfWSOWPA_EAP * nm_gconf_wso_wpa_eap_new_deserialize_gconf (GConfClient *client, NMNetworkType type, const char *network, int we_cipher);
+gboolean nm_gconf_wso_wpa_eap_get_wpa_version (NMGConfWSOWPA_EAP *gconf_wso);
+
#endif /* NM_GCONF_WSO_WPA_EAP_H */
Modified: branches/network-manager-applet-0-6/src/nm-gconf-wso-wpa-psk.c
==============================================================================
--- branches/network-manager-applet-0-6/src/nm-gconf-wso-wpa-psk.c (original)
+++ branches/network-manager-applet-0-6/src/nm-gconf-wso-wpa-psk.c Fri Feb 22 21:51:47 2008
@@ -135,6 +135,14 @@
return TRUE;
}
+gboolean
+nm_gconf_wso_wpa_psk_get_wpa_version (NMGConfWSOWPA_PSK *self)
+{
+ g_return_val_if_fail (self != NULL, FALSE);
+
+ return self->priv->wpa_version;
+}
+
static void
nm_gconf_wso_wpa_psk_init (NMGConfWSOWPA_PSK * self)
{
Modified: branches/network-manager-applet-0-6/src/nm-gconf-wso-wpa-psk.h
==============================================================================
--- branches/network-manager-applet-0-6/src/nm-gconf-wso-wpa-psk.h (original)
+++ branches/network-manager-applet-0-6/src/nm-gconf-wso-wpa-psk.h Fri Feb 22 21:51:47 2008
@@ -58,4 +58,6 @@
NMGConfWSOWPA_PSK * nm_gconf_wso_wpa_psk_new_deserialize_gconf (GConfClient *client, NMNetworkType type, const char *network, int we_cipher);
+gboolean nm_gconf_wso_wpa_psk_get_wpa_version (NMGConfWSOWPA_PSK *self);
+
#endif /* NM_GCONF_WSO_WPA_PSK_H */
Modified: branches/network-manager-applet-0-6/src/nm-gconf-wso.c
==============================================================================
--- branches/network-manager-applet-0-6/src/nm-gconf-wso.c (original)
+++ branches/network-manager-applet-0-6/src/nm-gconf-wso.c Fri Feb 22 21:51:47 2008
@@ -202,6 +202,34 @@
return gconf_wso;
}
+/* HACK: to convert the NMGConfWSO -> WirelessSecurityOption,
+ * we serialize the NMGConfWSO to a dbus message and then let
+ * the WSO to deserialize it.
+ */
+gboolean
+nm_gconf_wso_populate_wso (NMGConfWSO *self, WirelessSecurityOption *opt)
+{
+ DBusMessage *message;
+ DBusMessageIter iter;
+ gboolean success = FALSE;
+
+ g_return_val_if_fail (self != NULL, FALSE);
+ g_return_val_if_fail (opt != NULL, FALSE);
+
+ message = dbus_message_new_method_call (NMI_DBUS_SERVICE, NMI_DBUS_PATH, NMI_DBUS_INTERFACE, "foobar");
+ dbus_message_iter_init_append (message, &iter);
+
+ if (nm_gconf_wso_serialize_dbus (self, &iter)) {
+ dbus_message_iter_init (message, &iter);
+
+ success = wso_populate_from_dbus_params (opt, &iter);
+ }
+
+ dbus_message_unref (message);
+
+ return success;
+}
+
void
nm_gconf_wso_set_we_cipher (NMGConfWSO *self,
int we_cipher)
Modified: branches/network-manager-applet-0-6/src/nm-gconf-wso.h
==============================================================================
--- branches/network-manager-applet-0-6/src/nm-gconf-wso.h (original)
+++ branches/network-manager-applet-0-6/src/nm-gconf-wso.h Fri Feb 22 21:51:47 2008
@@ -80,6 +80,8 @@
NMGConfWSO * nm_gconf_wso_new_from_wso (WirelessSecurityOption *opt, const char *ssid);
+gboolean nm_gconf_wso_populate_wso (NMGConfWSO *self, WirelessSecurityOption *opt);
+
int nm_gconf_wso_get_we_cipher (NMGConfWSO *self);
const char * nm_gconf_wso_get_key (NMGConfWSO *self);
Modified: branches/network-manager-applet-0-6/src/nm-wired-dialog.c
==============================================================================
--- branches/network-manager-applet-0-6/src/nm-wired-dialog.c (original)
+++ branches/network-manager-applet-0-6/src/nm-wired-dialog.c Fri Feb 22 21:51:47 2008
@@ -11,6 +11,7 @@
#include "nm-utils.h"
#include "NetworkManager.h"
#include "wso-wpa-eap.h"
+#include "nm-gconf-wso-wpa-eap.h"
#define WIRED_DIALOG_INFO_TAG "wired-dialog-info-tag"
@@ -215,6 +216,27 @@
gtk_window_present (GTK_WINDOW (dialog));
}
+static void
+populate_dialog (GtkWidget *dialog, GConfClient *gconf_client, const char *network_id)
+{
+ char *escaped_network;
+ NMGConfWSO *gconf_wso;
+
+ if (!network_id)
+ return;
+
+ escaped_network = gconf_escape_key (network_id, strlen (network_id));
+ gconf_wso = nm_gconf_wso_new_deserialize_gconf (gconf_client, NETWORK_TYPE_WIRED, escaped_network);
+ g_free (escaped_network);
+
+ if (gconf_wso && NM_IS_GCONF_WSO_WPA_EAP (gconf_wso)) {
+ WiredDialogInfo *info;
+
+ info = g_object_get_data (G_OBJECT (dialog), WIRED_DIALOG_INFO_TAG);
+ nm_gconf_wso_populate_wso (gconf_wso, info->opt);
+ }
+}
+
void
nma_wired_dialog_ask_password (NMApplet *applet,
const char *network_id,
@@ -236,6 +258,8 @@
g_signal_connect (dialog, "response", G_CALLBACK (ask_password_response), NULL);
+ populate_dialog (dialog, applet->gconf_client, network_id);
+
gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_CENTER_ALWAYS);
gtk_widget_realize (dialog);
gdk_x11_window_set_user_time (dialog->window, gdk_x11_get_server_time (dialog->window));
Modified: branches/network-manager-applet-0-6/src/passphrase-dialog.c
==============================================================================
--- branches/network-manager-applet-0-6/src/passphrase-dialog.c (original)
+++ branches/network-manager-applet-0-6/src/passphrase-dialog.c Fri Feb 22 21:51:47 2008
@@ -25,6 +25,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#include <iwlib.h>
#include <gtk/gtk.h>
#include <glade/glade.h>
#include <glib.h>
@@ -39,6 +40,10 @@
#include "NetworkManager.h"
#include "wireless-security-manager.h"
+#include "nm-gconf-wso-wpa-eap.h"
+#include "nm-gconf-wso-wpa-psk.h"
+#include "nm-gconf-wso-leap.h"
+
typedef struct {
NMApplet *applet;
DBusMessage *message;
@@ -162,6 +167,44 @@
}
+static void
+populate_dialog (GConfClient *gconf_client, const char *essid, WirelessSecurityManager *wsm)
+{
+ char *escaped_network;
+ NMGConfWSO *gconf_wso;
+ WirelessSecurityOption *wso = NULL;
+
+ if (!essid)
+ return;
+
+ escaped_network = gconf_escape_key (essid, strlen (essid));
+ gconf_wso = nm_gconf_wso_new_deserialize_gconf (gconf_client, NETWORK_TYPE_ALLOWED, escaped_network);
+ g_free (escaped_network);
+
+ if (!gconf_wso)
+ /* Not in GConf yet */
+ return;
+
+ if (NM_IS_GCONF_WSO_WPA_EAP (gconf_wso)) {
+ if (nm_gconf_wso_wpa_eap_get_wpa_version (NM_GCONF_WSO_WPA_EAP (gconf_wso)) == IW_AUTH_WPA_VERSION_WPA)
+ wso = wsm_get_option_by_type (wsm, WSO_TYPE_WPA_EAP);
+ else
+ wso = wsm_get_option_by_type (wsm, WSO_TYPE_WPA2_EAP);
+ } else if (NM_IS_GCONF_WSO_WPA_PSK (gconf_wso)) {
+ if (nm_gconf_wso_wpa_psk_get_wpa_version (NM_GCONF_WSO_WPA_PSK (gconf_wso)) == IW_AUTH_WPA_VERSION_WPA)
+ wso = wsm_get_option_by_type (wsm, WSO_TYPE_WPA_PSK);
+ else
+ wso = wsm_get_option_by_type (wsm, WSO_TYPE_WPA2_PSK);
+ } else if (NM_IS_GCONF_WSO_LEAP (gconf_wso))
+ wso = wsm_get_option_by_type (wsm, WSO_TYPE_LEAP);
+
+ /* FIXME: Handle WEPs */
+
+ if (wso)
+ nm_gconf_wso_populate_wso (gconf_wso, wso);
+}
+
+
/*
* nmi_passphrase_dialog_new
*
@@ -253,6 +296,8 @@
g_signal_connect (dialog, "response", GTK_SIGNAL_FUNC (nmi_passphrase_dialog_response_received), info);
+ populate_dialog (applet->gconf_client, wireless_network_get_essid (net), wsm);
+
/* Bash focus-stealing prevention in the face */
gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_CENTER_ALWAYS);
gtk_widget_realize (GTK_WIDGET (dialog));
Modified: branches/network-manager-applet-0-6/src/wireless-security-manager.c
==============================================================================
--- branches/network-manager-applet-0-6/src/wireless-security-manager.c (original)
+++ branches/network-manager-applet-0-6/src/wireless-security-manager.c Fri Feb 22 21:51:47 2008
@@ -1,3 +1,5 @@
+/* -*- Mode: C; tab-width: 5; indent-tabs-mode: t; c-basic-offset: 5 -*- */
+
/* NetworkManager Wireless Applet -- Display wireless access points and allow user control
*
* Dan Williams <dcbw redhat com>
@@ -41,7 +43,7 @@
struct WirelessSecurityManager
{
char * glade_file;
- GSList * options;
+ GHashTable *options;
};
@@ -53,11 +55,18 @@
wsm = g_malloc0 (sizeof (WirelessSecurityManager));
wsm->glade_file = g_strdup (glade_file);
+ wsm->options = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, (GDestroyNotify) wso_free);
return wsm;
}
+static gboolean
+remove_all (gpointer key, gpointer value, gpointer user_data)
+{
+ return TRUE;
+}
+
gboolean wsm_set_capabilities (WirelessSecurityManager *wsm, guint32 capabilities)
{
WirelessSecurityOption * opt;
@@ -66,27 +75,25 @@
g_return_val_if_fail (wsm != NULL, FALSE);
/* Free previous options */
- g_slist_foreach (wsm->options, (GFunc) wso_free, NULL);
- g_slist_free (wsm->options);
- wsm->options = NULL;
+ g_hash_table_foreach_remove (wsm->options, remove_all, NULL);
if (capabilities & NM_802_11_CAP_PROTO_NONE)
{
opt = wso_none_new (wsm->glade_file);
if (opt)
- wsm->options = g_slist_append (wsm->options, opt);
+ g_hash_table_insert (wsm->options, GINT_TO_POINTER (WSO_TYPE_NONE), opt);
}
if (capabilities & NM_802_11_CAP_PROTO_WEP)
{
if ((opt = wso_wep_passphrase_new (wsm->glade_file)))
- wsm->options = g_slist_append (wsm->options, opt);
+ g_hash_table_insert (wsm->options, GINT_TO_POINTER (WSO_TYPE_WEP_PASSPHRASE), opt);
if ((opt = wso_wep_hex_new (wsm->glade_file)))
- wsm->options = g_slist_append (wsm->options, opt);
+ g_hash_table_insert (wsm->options, GINT_TO_POINTER (WSO_TYPE_WEP_HEX), opt);
if ((opt = wso_wep_ascii_new (wsm->glade_file)))
- wsm->options = g_slist_append (wsm->options, opt);
+ g_hash_table_insert (wsm->options, GINT_TO_POINTER (WSO_TYPE_WEP_ASCII), opt);
}
if (capabilities & NM_802_11_CAP_PROTO_WPA)
@@ -94,12 +101,12 @@
if (capabilities & NM_802_11_CAP_KEY_MGMT_802_1X)
{
if ((opt = wso_wpa_eap_new (wsm->glade_file, capabilities, FALSE)))
- wsm->options = g_slist_append (wsm->options, opt);
+ g_hash_table_insert (wsm->options, GINT_TO_POINTER (WSO_TYPE_WPA_EAP), opt);
}
if (capabilities & NM_802_11_CAP_KEY_MGMT_PSK)
{
if ((opt = wso_wpa_psk_new (wsm->glade_file, capabilities, FALSE)))
- wsm->options = g_slist_append (wsm->options, opt);
+ g_hash_table_insert (wsm->options, GINT_TO_POINTER (WSO_TYPE_WPA_PSK), opt);
}
}
@@ -108,19 +115,19 @@
if (capabilities & NM_802_11_CAP_KEY_MGMT_802_1X)
{
if ((opt = wso_wpa_eap_new (wsm->glade_file, capabilities, TRUE)))
- wsm->options = g_slist_append (wsm->options, opt);
+ g_hash_table_insert (wsm->options, GINT_TO_POINTER (WSO_TYPE_WPA2_EAP), opt);
}
if (capabilities & NM_802_11_CAP_KEY_MGMT_PSK)
{
if ((opt = wso_wpa_psk_new (wsm->glade_file, capabilities, TRUE)))
- wsm->options = g_slist_append (wsm->options, opt);
+ g_hash_table_insert (wsm->options, GINT_TO_POINTER (WSO_TYPE_WPA2_PSK), opt);
}
}
if ((opt = wso_leap_new (wsm->glade_file, capabilities)))
- wsm->options = g_slist_append (wsm->options, opt);
+ g_hash_table_insert (wsm->options, GINT_TO_POINTER (WSO_TYPE_LEAP), opt);
- if (!wsm->options)
+ if (g_hash_table_size (wsm->options) == 0)
{
nm_warning ("capabilities='%x' and did not match any protocals, not even none!", capabilities);
ret = FALSE;
@@ -131,27 +138,57 @@
#define NAME_COLUMN 0
#define OPT_COLUMN 1
+
+static void
+add_wso_type (gpointer key, gpointer val, gpointer user_data)
+{
+ GSList **list = (GSList **) user_data;
+
+ *list = g_slist_prepend (*list, key);
+}
+
+static int
+sort_wso_types (gconstpointer a, gconstpointer b)
+{
+ int aa = GPOINTER_TO_INT (a);
+ int bb = GPOINTER_TO_INT (b);
+
+ if (aa < bb)
+ return -1;
+ if (aa > bb)
+ return 1;
+
+ return 0;
+}
+
void wsm_update_combo (WirelessSecurityManager *wsm, GtkComboBox *combo)
{
- GtkListStore * model;
- GSList * elt;
+ GtkListStore *model;
+ GSList *iter;
+ GSList *wso_types = NULL;
g_return_if_fail (wsm != NULL);
g_return_if_fail (combo != NULL);
- model = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_POINTER);
+ /* All this messing around with wso_types list is for sorting.
+ We can't just sort the model since the model itself doesn't
+ have enough information for sorting. */
- for (elt = wsm->options; elt; elt = elt->next)
- {
- WirelessSecurityOption * opt = (WirelessSecurityOption *) (elt->data);
- GtkTreeIter iter;
+ g_hash_table_foreach (wsm->options, add_wso_type, &wso_types);
+ wso_types = g_slist_sort (wso_types, sort_wso_types);
+
+ model = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_POINTER);
- g_assert (opt);
+ for (iter = wso_types; iter; iter = iter->next) {
+ WirelessSecurityOption *opt = (WirelessSecurityOption *) g_hash_table_lookup (wsm->options, iter->data);
+ GtkTreeIter iter;
gtk_list_store_append (model, &iter);
gtk_list_store_set (model, &iter, NAME_COLUMN, wso_get_name (opt), OPT_COLUMN, opt, -1);
}
+ g_slist_free (wso_types);
+
gtk_combo_box_set_model (GTK_COMBO_BOX (combo), GTK_TREE_MODEL (model));
gtk_combo_box_set_active (GTK_COMBO_BOX (combo), 0);
}
@@ -210,13 +247,19 @@
}
+WirelessSecurityOption * wsm_get_option_by_type (WirelessSecurityManager *wsm, WSOType type)
+{
+ g_return_val_if_fail (wsm != NULL, NULL);
+
+ return (WirelessSecurityOption *) g_hash_table_lookup (wsm->options, GINT_TO_POINTER (type));
+}
+
void wsm_free (WirelessSecurityManager *wsm)
{
g_return_if_fail (wsm != NULL);
g_free (wsm->glade_file);
- g_slist_foreach (wsm->options, (GFunc) wso_free, NULL);
- g_slist_free (wsm->options);
+ g_hash_table_destroy (wsm->options);
memset (wsm, 0, sizeof (WirelessSecurityManager));
g_free (wsm);
}
Modified: branches/network-manager-applet-0-6/src/wireless-security-manager.h
==============================================================================
--- branches/network-manager-applet-0-6/src/wireless-security-manager.h (original)
+++ branches/network-manager-applet-0-6/src/wireless-security-manager.h Fri Feb 22 21:51:47 2008
@@ -28,6 +28,17 @@
typedef struct WirelessSecurityManager WirelessSecurityManager;
+typedef enum {
+ WSO_TYPE_NONE,
+ WSO_TYPE_WEP_PASSPHRASE,
+ WSO_TYPE_WEP_HEX,
+ WSO_TYPE_WEP_ASCII,
+ WSO_TYPE_WPA_EAP,
+ WSO_TYPE_WPA_PSK,
+ WSO_TYPE_WPA2_EAP,
+ WSO_TYPE_WPA2_PSK,
+ WSO_TYPE_LEAP
+} WSOType;
WirelessSecurityManager * wsm_new (const char * glade_file);
@@ -45,4 +56,6 @@
WirelessSecurityOption * wsm_get_option_for_active (WirelessSecurityManager *wsm, GtkComboBox *combo);
+WirelessSecurityOption * wsm_get_option_by_type (WirelessSecurityManager *wsm, WSOType type);
+
#endif /* WIRELESS_SECURITY_MANAGER_H */
Modified: branches/network-manager-applet-0-6/src/wireless-security-option.c
==============================================================================
--- branches/network-manager-applet-0-6/src/wireless-security-option.c (original)
+++ branches/network-manager-applet-0-6/src/wireless-security-option.c Fri Feb 22 21:51:47 2008
@@ -81,6 +81,28 @@
return (*(opt->append_dbus_params_func))(opt, ssid, message);
}
+gboolean
+wso_populate_from_dbus_params (WirelessSecurityOption *opt, DBusMessageIter *iter)
+{
+ gboolean success = TRUE;
+
+ g_return_val_if_fail (opt != NULL, FALSE);
+ g_return_val_if_fail (iter != NULL, FALSE);
+
+ if (opt->append_dbus_params_func) {
+ int cipher;
+
+ /* Remove the cipher */
+ g_return_val_if_fail (dbus_message_iter_get_arg_type (iter) == DBUS_TYPE_INT32, FALSE);
+ dbus_message_iter_get_basic (iter, &cipher);
+ dbus_message_iter_next (iter);
+
+ success = opt->populate_from_dbus_func (opt, iter);
+ }
+
+ return success;
+}
+
void wso_free (WirelessSecurityOption * opt)
{
/* Free the option-specific data first */
Modified: branches/network-manager-applet-0-6/src/wireless-security-option.h
==============================================================================
--- branches/network-manager-applet-0-6/src/wireless-security-option.h (original)
+++ branches/network-manager-applet-0-6/src/wireless-security-option.h Fri Feb 22 21:51:47 2008
@@ -39,6 +39,8 @@
gboolean wso_append_dbus_params (WirelessSecurityOption *opt, const char *ssid, DBusMessage *message);
+gboolean wso_populate_from_dbus_params (WirelessSecurityOption *opt, DBusMessageIter *iter);
+
void wso_free (WirelessSecurityOption * opt);
#endif /* WIRELESS_SECURITY_OPTION_H */
Modified: branches/network-manager-applet-0-6/src/wso-leap.c
==============================================================================
--- branches/network-manager-applet-0-6/src/wso-leap.c (original)
+++ branches/network-manager-applet-0-6/src/wso-leap.c Fri Feb 22 21:51:47 2008
@@ -117,8 +117,9 @@
entry = glade_xml_get_widget (opt->uixml, "leap_password_entry");
g_signal_connect (G_OBJECT (entry), "changed", validate_cb, user_data);
- widget = glade_xml_get_widget (opt->uixml, "leap_show_password");
- g_signal_connect (widget, "clicked", GTK_SIGNAL_FUNC (show_password_cb), entry);
+ /* FIXME: ugh, this breaks everything and I have no idea why */
+/* widget = glade_xml_get_widget (opt->uixml, "leap_show_password"); */
+/* g_signal_connect (widget, "clicked", GTK_SIGNAL_FUNC (show_password_cb), entry); */
/* set-up key_mgmt combo box */
@@ -143,6 +144,54 @@
}
+static gboolean
+populate_from_dbus_func (WirelessSecurityOption *opt, DBusMessageIter *iter)
+{
+ char *username = NULL;
+ char *password = NULL;
+ char *key_mgmt = NULL;
+ GtkWidget *w;
+
+ if (!nmu_security_deserialize_leap (iter, &username, &password, &key_mgmt))
+ return FALSE;
+
+ if (username) {
+ w = glade_xml_get_widget (opt->uixml, "leap_username_entry");
+ gtk_entry_set_text (GTK_ENTRY (w), username);
+ }
+
+ if (password) {
+ w = glade_xml_get_widget (opt->uixml, "leap_password_entry");
+ gtk_entry_set_text (GTK_ENTRY (w), password);
+ }
+
+ if (key_mgmt) {
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ gboolean valid;
+
+ w = glade_xml_get_widget (opt->uixml, "leap_key_mgmt_combobox");
+ model = gtk_combo_box_get_model (GTK_COMBO_BOX (w));
+
+ valid = gtk_tree_model_get_iter_first (model, &iter);
+ while (valid) {
+ gchar *row = NULL;
+
+ gtk_tree_model_get (model, &iter, 1, &row, -1);
+ if (row && strcmp (row, key_mgmt) == 0) {
+ gtk_combo_box_set_active_iter (GTK_COMBO_BOX (w), &iter);
+ valid = FALSE;
+ } else
+ valid = gtk_tree_model_iter_next (model, &iter);
+
+ g_free (row);
+ }
+ }
+
+ return TRUE;
+}
+
+
WirelessSecurityOption *
wso_leap_new (const char *glade_file,
int capabilities)
@@ -158,6 +207,7 @@
opt->validate_input_func = validate_input_func;
opt->widget_create_func = widget_create_func;
opt->append_dbus_params_func = append_dbus_params_func;
+ opt->populate_from_dbus_func = populate_from_dbus_func;
if (!(opt->uixml = glade_xml_new (glade_file, opt->widget_name, NULL)))
{
Modified: branches/network-manager-applet-0-6/src/wso-private.h
==============================================================================
--- branches/network-manager-applet-0-6/src/wso-private.h (original)
+++ branches/network-manager-applet-0-6/src/wso-private.h Fri Feb 22 21:51:47 2008
@@ -66,6 +66,8 @@
* dbus message describing this particular security option
*/
gboolean (*append_dbus_params_func)(WirelessSecurityOption *opt, const char *ssid, DBusMessage *message);
+
+ gboolean (*populate_from_dbus_func)(WirelessSecurityOption *opt, DBusMessageIter *iter);
};
Modified: branches/network-manager-applet-0-6/src/wso-wpa-eap.c
==============================================================================
--- branches/network-manager-applet-0-6/src/wso-wpa-eap.c (original)
+++ branches/network-manager-applet-0-6/src/wso-wpa-eap.c Fri Feb 22 21:51:47 2008
@@ -220,6 +220,99 @@
}
+typedef struct {
+ GtkComboBox *combo;
+ gint value;
+} ComboSelectInfo;
+
+static gboolean
+combo_select (GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer user_data)
+{
+ ComboSelectInfo *info = user_data;
+ GValue val = { 0, };
+ gint i;
+
+ gtk_tree_model_get_value (model, iter, 1, &val);
+ i = g_value_get_int (&val);
+
+ if (i == info->value) {
+ gtk_combo_box_set_active_iter (info->combo, iter);
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static gboolean
+populate_from_dbus_func (WirelessSecurityOption *opt, DBusMessageIter *iter)
+{
+ char *identity = NULL;
+ char *passwd = NULL;
+ char *anon_identity = NULL;
+ char *private_key_passwd = NULL;
+ char *private_key_file = NULL;
+ char *client_cert_file = NULL;
+ char *ca_cert_file = NULL;
+ int wpa_version;
+ int eap_method;
+ int key_type;
+ GtkWidget *w;
+ ComboSelectInfo info;
+
+ if (!nmu_security_deserialize_wpa_eap (iter, &eap_method, &key_type, &identity, &passwd,
+ &anon_identity, &private_key_passwd, &private_key_file,
+ &client_cert_file, &ca_cert_file, &wpa_version))
+ return FALSE;
+
+ w = glade_xml_get_widget (opt->uixml, "wpa_eap_eap_method_combo");
+ info.combo = GTK_COMBO_BOX (w);
+ info.value = eap_method;
+ gtk_tree_model_foreach (gtk_combo_box_get_model (info.combo), combo_select, &info);
+
+ w = glade_xml_get_widget (opt->uixml, "wpa_eap_key_type_combo");
+ info.combo = GTK_COMBO_BOX (w);
+ info.value = key_type;
+ gtk_tree_model_foreach (gtk_combo_box_get_model (info.combo), combo_select, &info);
+
+ if (identity) {
+ w = glade_xml_get_widget (opt->uixml, "wpa_eap_identity_entry");
+ gtk_entry_set_text (GTK_ENTRY (w), identity);
+ }
+
+ if (passwd) {
+ w = glade_xml_get_widget (opt->uixml, "wpa_eap_passwd_entry");
+ gtk_entry_set_text (GTK_ENTRY (w), passwd);
+ }
+
+ if (anon_identity) {
+ w = glade_xml_get_widget (opt->uixml, "wpa_eap_anon_identity_entry");
+ gtk_entry_set_text (GTK_ENTRY (w), anon_identity);
+ }
+
+ if (private_key_passwd) {
+ w = glade_xml_get_widget (opt->uixml, "wpa_eap_private_key_passwd_entry");
+ gtk_entry_set_text (GTK_ENTRY (w), private_key_passwd);
+ }
+
+ if (client_cert_file && g_file_test (client_cert_file, G_FILE_TEST_EXISTS)) {
+ w = glade_xml_get_widget (opt->uixml, "wpa_eap_client_cert_file_chooser_button");
+ gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (w), client_cert_file);
+ }
+
+ if (ca_cert_file && g_file_test (ca_cert_file, G_FILE_TEST_EXISTS)) {
+ w = glade_xml_get_widget (opt->uixml, "wpa_eap_ca_cert_file_chooser_button");
+ gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (w), ca_cert_file);
+ }
+
+ if (private_key_file && g_file_test (private_key_file, G_FILE_TEST_EXISTS)) {
+ w = glade_xml_get_widget (opt->uixml, "wpa_eap_private_key_file_chooser_button");
+ gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (w), private_key_file);
+ }
+
+ return TRUE;
+}
+
+
WirelessSecurityOption *
wso_wpa_eap_new (const char *glade_file,
int capabilities,
@@ -230,7 +323,6 @@
GtkWidget * eap_method_combo;
GtkWidget * key_type_combo;
GtkWidget * phase2_type_combo;
- GtkListStore * model;
GtkTreeModel * tree_model;
GtkTreeIter iter;
GtkCellRenderer * renderer;
@@ -248,6 +340,7 @@
opt->validate_input_func = validate_input_func;
opt->widget_create_func = widget_create_func;
opt->append_dbus_params_func = append_dbus_params_func;
+ opt->populate_from_dbus_func = populate_from_dbus_func;
if (!(opt->uixml = glade_xml_new (glade_file, opt->widget_name, NULL)))
{
@@ -256,9 +349,9 @@
}
eap_method_combo = glade_xml_get_widget (opt->uixml, "wpa_eap_eap_method_combo");
- model = wso_wpa_create_eap_method_model ();
- gtk_combo_box_set_model (GTK_COMBO_BOX (eap_method_combo), GTK_TREE_MODEL (model));
- gtk_tree_model_get_iter_first (GTK_TREE_MODEL (model), &iter);
+ tree_model = wso_wpa_create_eap_method_model ();
+ gtk_combo_box_set_model (GTK_COMBO_BOX (eap_method_combo), tree_model);
+ gtk_tree_model_get_iter_first (tree_model, &iter);
gtk_combo_box_set_active_iter (GTK_COMBO_BOX (eap_method_combo), &iter);
/* FIXME: Why do we need this here but not in the same place in wso-wpa-psk.c ? */
Modified: branches/network-manager-applet-0-6/src/wso-wpa-psk.c
==============================================================================
--- branches/network-manager-applet-0-6/src/wso-wpa-psk.c (original)
+++ branches/network-manager-applet-0-6/src/wso-wpa-psk.c Fri Feb 22 21:51:47 2008
@@ -1,3 +1,5 @@
+/* -*- Mode: C; tab-width: 5; indent-tabs-mode: t; c-basic-offset: 5 -*- */
+
/* NetworkManager Wireless Applet -- Display wireless access points and allow user control
*
* Dan Williams <dcbw redhat com>
@@ -132,6 +134,49 @@
}
+typedef struct {
+ GtkComboBox *combo;
+ gint value;
+} ComboSelectInfo;
+
+static gboolean
+combo_select (GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer user_data)
+{
+ ComboSelectInfo *info = user_data;
+ GValue val = { 0, };
+ gint i;
+
+ gtk_tree_model_get_value (model, iter, WPA_KEY_TYPE_CIPHER_COL, &val);
+ i = g_value_get_int (&val);
+
+ if (i == info->value) {
+ gtk_combo_box_set_active_iter (info->combo, iter);
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static gboolean
+populate_from_dbus_func (WirelessSecurityOption *opt, DBusMessageIter *iter)
+{
+ char *key = NULL;
+ int key_len;
+ int wpa_version;
+ int key_mgt;
+ ComboSelectInfo info;
+
+ if (!nmu_security_deserialize_wpa_psk (iter, &key, &key_len, &wpa_version, &key_mgt))
+ return FALSE;
+
+ info.combo = GTK_COMBO_BOX (glade_xml_get_widget (opt->uixml, opt->data->key_type_combo_name));
+ info.value = key_mgt;
+ gtk_tree_model_foreach (gtk_combo_box_get_model (info.combo), combo_select, &info);
+
+ return TRUE;
+}
+
+
static void
key_type_combo_changed_cb (GtkComboBox *combo,
gpointer user_data)
@@ -184,6 +229,7 @@
opt->validate_input_func = validate_input_func;
opt->widget_create_func = widget_create_func;
opt->append_dbus_params_func = append_dbus_params_func;
+ opt->populate_from_dbus_func = populate_from_dbus_func;
if (!(opt->uixml = glade_xml_new (glade_file, opt->widget_name, NULL)))
{
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]