network-manager-applet r543 - in branches/network-manager-applet-0-6: . editor libnma src



Author: tambeti
Date: Tue Feb 19 22:13:14 2008
New Revision: 543
URL: http://svn.gnome.org/viewvc/network-manager-applet?rev=543&view=rev

Log:
2008-02-19  Tambet Ingo  <tambet gmail com>

        Improve the editor to support wired networks and LEAP and phase2
authentications.



Added:
   branches/network-manager-applet-0-6/editor/widget-wso-leap.c
   branches/network-manager-applet-0-6/libnma/
   branches/network-manager-applet-0-6/libnma/Makefile.am
   branches/network-manager-applet-0-6/libnma/libnma.c
   branches/network-manager-applet-0-6/libnma/libnma.h
Removed:
   branches/network-manager-applet-0-6/editor/editor.glade
Modified:
   branches/network-manager-applet-0-6/ChangeLog
   branches/network-manager-applet-0-6/Makefile.am
   branches/network-manager-applet-0-6/configure.ac
   branches/network-manager-applet-0-6/editor/Makefile.am
   branches/network-manager-applet-0-6/editor/bssid-editor-dialog.c
   branches/network-manager-applet-0-6/editor/bssid-editor-dialog.h
   branches/network-manager-applet-0-6/editor/editor-app.c
   branches/network-manager-applet-0-6/editor/editor-gconf-helper.c
   branches/network-manager-applet-0-6/editor/editor-gconf-helper.h
   branches/network-manager-applet-0-6/editor/widget-wso-wep.c
   branches/network-manager-applet-0-6/editor/widget-wso-wpa-enterprise.c
   branches/network-manager-applet-0-6/editor/widget-wso-wpa-personal.c
   branches/network-manager-applet-0-6/editor/widget-wso.h
   branches/network-manager-applet-0-6/src/Makefile.am
   branches/network-manager-applet-0-6/src/applet.glade
   branches/network-manager-applet-0-6/src/wireless-security-option.c
   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/Makefile.am
==============================================================================
--- branches/network-manager-applet-0-6/Makefile.am	(original)
+++ branches/network-manager-applet-0-6/Makefile.am	Tue Feb 19 22:13:14 2008
@@ -1,4 +1,4 @@
-SUBDIRS = src editor icons po
+SUBDIRS = libnma src editor icons po
 
 EXTRA_DIST =				\
 	CONTRIBUTING			\

Modified: branches/network-manager-applet-0-6/configure.ac
==============================================================================
--- branches/network-manager-applet-0-6/configure.ac	(original)
+++ branches/network-manager-applet-0-6/configure.ac	Tue Feb 19 22:13:14 2008
@@ -251,6 +251,7 @@
 
 AC_OUTPUT([
 Makefile
+libnma/Makefile
 src/Makefile
 editor/Makefile
 icons/Makefile

Modified: branches/network-manager-applet-0-6/editor/Makefile.am
==============================================================================
--- branches/network-manager-applet-0-6/editor/Makefile.am	(original)
+++ branches/network-manager-applet-0-6/editor/Makefile.am	Tue Feb 19 22:13:14 2008
@@ -1,6 +1,6 @@
 NULL=
 
-INCLUDES = -I${top_srcdir}/../include -I${top_srcdir}/../libnm-util
+INCLUDES = -I${top_srcdir}
 
 bin_PROGRAMS = nm-editor
 
@@ -17,7 +17,7 @@
 	$(GNOME_KEYRING_CFLAGS)								\
 	$(NM_CFLAGS)									\
 	-DICONDIR=\""$(datadir)/pixmaps"\"						\
-	-DGLADEDIR=\""$(gladedir)"\"							\
+	-DGLADEDIR=\""$(datadir)/nm-applet"\"						\
 	-DBINDIR=\""$(bindir)"\"								\
 	-DSYSCONFDIR=\""$(sysconfdir)"\"						\
 	-DAUTOSTARTDIR=\""$(datadir)/gnome/autostart"\"			\
@@ -36,6 +36,7 @@
 	bssid-editor-dialog.c	\
 	bssid-editor-dialog.h	\
 	widget-wso.h			\
+	widget-wso-leap.c		\
 	widget-wso-wep.c		\
 	widget-wso-wpa-personal.c		\
 	widget-wso-wpa-enterprise.c		\
@@ -57,19 +58,15 @@
 	$(LIBGNOMEUI_LIBS)					\
 	$(GNOME_KEYRING_LIBS)				\
 	$(NM_LIBS) \
+	../libnma/libnma.la \
 	$(NULL)
 
 
-gladedir = $(datadir)/nm-editor
-glade_DATA = editor.glade
 desktopdatadir = $(datadir)/applications
 desktopdata_DATA = nm-editor.desktop
 
 CLEANFILES = $(server_DATA) *.bak *.gladep
 
 EXTRA_DIST = 				\
-	$(glade_DATA)			\
 	$(desktopdata_DATA)		\
 	$(NULL)
-
-

Modified: branches/network-manager-applet-0-6/editor/bssid-editor-dialog.c
==============================================================================
--- branches/network-manager-applet-0-6/editor/bssid-editor-dialog.c	(original)
+++ branches/network-manager-applet-0-6/editor/bssid-editor-dialog.c	Tue Feb 19 22:13:14 2008
@@ -49,6 +49,7 @@
 
 typedef struct _bssid_editor_data
 {
+	char		*glade_file;
 	GladeXML	*glade_xml;
 	GtkWidget	*dialog;
 	GtkWidget	*treeview;
@@ -57,191 +58,69 @@
 	GtkWidget	*edit_button;
 } BED_DATA; //bssid_editor_dialog
 
-void selection_changed_cb (GtkTreeSelection *selection, gpointer data);
-void add_button_clicked_cb(GtkButton *button, gpointer data);
-void remove_button_clicked_cb(GtkButton *button, gpointer data);
-void edit_button_clicked_cb(GtkButton *button, gpointer data);
-
-
-gboolean run_bssid_editor(GtkWidget *parent, gchar *gconf_dir)
+static void
+edit_button_clicked_cb (GtkButton *button, gpointer data)
 {
-	char				*glade_file;
-	GtkTreeSelection	*select;
-	GConfClient			*gconf_client;
-	GSList				*bssids;
-	GtkListStore		*store;
-	GtkTreeViewColumn	*column;
-	GtkCellRenderer		*renderer;
-	GtkTreeModel		*filter;
-	GError				*err = NULL;
+	GtkWidget			*dialog;
+	GtkWidget			*bssid_entry;
 	BED_DATA			*bed_data;
-	gboolean			rc = FALSE;
-
-	bed_data = (BED_DATA *)malloc(sizeof(BED_DATA));
-	if(bed_data == NULL)
-	{
-		g_print("malloc error\n");
-		return FALSE;
-	}
-
-	memset(bed_data, 0, sizeof(BED_DATA));
-
-	// load the glade file
-	glade_file = g_build_filename (GLADEDIR, "editor.glade", NULL);
-	if (!glade_file || !g_file_test (glade_file, G_FILE_TEST_IS_REGULAR))
-		glade_file = g_build_filename ("", "editor.glade", NULL);
-
-	if (!glade_file || !g_file_test (glade_file, G_FILE_TEST_IS_REGULAR))
-	{
-		g_print("Error loading editor.glade file!\n");
-		g_free (glade_file);
-		return FALSE;
-	}
-
-	bed_data->glade_xml = glade_xml_new (glade_file, BSSID_DIALOG, NULL);
-	g_free(glade_file);
-
-	bed_data->dialog = glade_xml_get_widget (bed_data->glade_xml, BSSID_DIALOG);
-
-	bed_data->treeview = glade_xml_get_widget( bed_data->glade_xml, 
-			BSSID_TREEVIEW);
-	bed_data->add_button = glade_xml_get_widget( bed_data->glade_xml, 
-			BSSID_ADD);
-	bed_data->remove_button = glade_xml_get_widget( bed_data->glade_xml, 
-			BSSID_REMOVE);
-	bed_data->edit_button = glade_xml_get_widget( bed_data->glade_xml, 
-			BSSID_EDIT);
-
-	select = gtk_tree_view_get_selection(GTK_TREE_VIEW (bed_data->treeview));
-	gtk_tree_selection_set_mode (select, GTK_SELECTION_SINGLE);
-
-	g_signal_connect (G_OBJECT (select), "changed",
-			G_CALLBACK (selection_changed_cb), bed_data);
-	g_signal_connect (G_OBJECT (bed_data->add_button), "clicked",
-			G_CALLBACK (add_button_clicked_cb), bed_data);
-	g_signal_connect (G_OBJECT (bed_data->remove_button), "clicked",
-			G_CALLBACK (remove_button_clicked_cb), bed_data);
-	g_signal_connect (G_OBJECT (bed_data->edit_button), "clicked",
-			G_CALLBACK (edit_button_clicked_cb), bed_data);
-
-	store = gtk_list_store_new (1, G_TYPE_STRING);
-
-	gconf_client = gconf_client_get_default();
-
-	// Get the bssids
-	bssids = gconf_client_get_list(gconf_client, gconf_dir, 
-			GCONF_VALUE_STRING, &err);
-	if(err == 0)
-	{
-		gchar	*bssid = NULL; 
-
-		while(bssids)
-		{
-			GtkTreeIter			iter;
-
-			bssid = g_strdup(bssids->data);
-
-			gtk_list_store_append (store, &iter);
-
-			gtk_list_store_set (store, &iter, 0, bssid, -1);
+	GladeXML			*glade_xml;
+	GtkTreeSelection	*selection;
+	GtkTreeIter			iter;
+	GtkTreeIter			childIter;
+	GtkTreeModel		*model;
+	GtkListStore		*store;
+	gchar				*bssid_value = NULL;
 
-			g_free(bssids->data);
+	bed_data = data;
 
-			bssids = g_slist_delete_link (bssids, bssids);
-		}
-	}
+	selection = gtk_tree_view_get_selection (
+			GTK_TREE_VIEW (bed_data->treeview));
 
-	filter = gtk_tree_model_filter_new (GTK_TREE_MODEL (store), NULL);
+	if(!gtk_tree_selection_get_selected (selection, &model, &iter))
+		return;
 
-	gtk_tree_view_set_model (GTK_TREE_VIEW (bed_data->treeview), filter);
+	gtk_tree_model_get (model, &iter, 0, &bssid_value, -1);
+	if(bssid_value == NULL)
+		return;
 
-	g_object_unref (store);
-	g_object_unref (filter);
+	glade_xml = glade_xml_new (bed_data->glade_file, BSSID_EDITOR_DIALOG, NULL);
 
-	renderer = gtk_cell_renderer_text_new ();
-	column = gtk_tree_view_column_new_with_attributes ("Name", renderer,
-			"markup", 0, NULL);
+	dialog = glade_xml_get_widget (glade_xml, BSSID_EDITOR_DIALOG);
 
-	gtk_tree_view_append_column (GTK_TREE_VIEW (bed_data->treeview), column);
-	gtk_tree_view_column_set_sort_column_id (column, 0);
+	bssid_entry = glade_xml_get_widget( glade_xml, 
+			BSSID_EDITOR_ENTRY);
 
+	gtk_window_set_transient_for(GTK_WINDOW(dialog), 
+			GTK_WINDOW(bed_data->dialog));
 
-	gtk_window_set_transient_for(GTK_WINDOW(bed_data->dialog), 
-			GTK_WINDOW(parent));
+	gtk_entry_set_text(GTK_ENTRY(bssid_entry), bssid_value);
 
-	gint result = gtk_dialog_run (GTK_DIALOG (bed_data->dialog));
+	gint result = gtk_dialog_run (GTK_DIALOG(dialog));
 
 	if(result == GTK_RESPONSE_OK)
 	{
-		GtkTreeIter			iter;
-		GtkTreeModel		*model;
-		gboolean			valid;
-		gchar				*new_bssid;
-		GSList				*bssid_list;
-
-		model = gtk_tree_view_get_model(GTK_TREE_VIEW(bed_data->treeview));
-
-		valid = gtk_tree_model_get_iter_first(model, &iter);
-
-		bssid_list = NULL;
-
-		while(valid)
-		{
-			gtk_tree_model_get(model, &iter, 0, &new_bssid, -1);
-
-			bssid_list = g_slist_append(bssid_list, new_bssid);
+		gchar *new_bssid;
 
-			valid = gtk_tree_model_iter_next(model, &iter);
-		}
+		new_bssid = g_strdup(gtk_entry_get_text(GTK_ENTRY(bssid_entry)));
 
-		err = NULL;
+		store = GTK_LIST_STORE(gtk_tree_model_filter_get_model(
+					GTK_TREE_MODEL_FILTER(model)));
 
-		if(bssid_list)
-		{
-			gconf_client_set_list(gconf_client, gconf_dir, 
-					GCONF_VALUE_STRING, bssid_list, NULL);
-		}
-		else
-		{
-			gconf_client_unset(gconf_client, gconf_dir, NULL);
-		}
+		gtk_tree_model_filter_convert_iter_to_child_iter(
+				GTK_TREE_MODEL_FILTER(model),
+				&childIter,
+				&iter);
 
-		gconf_client_suggest_sync(gconf_client, NULL);
-		rc = TRUE;
+		gtk_list_store_set ( store, &childIter, 0, new_bssid, -1);
 	}
 
-	gtk_widget_destroy(bed_data->dialog);
-	g_object_unref (bed_data->glade_xml);
-
-	free(bed_data);
-
-	g_object_unref(gconf_client);
-
-	return rc;
-}
-
-
-
-
-void selection_changed_cb (GtkTreeSelection *selection, gpointer data)
-{
-	GtkTreeIter			iter;
-	GtkTreeModel		*model;
-	BED_DATA			*bed_data;
-	gboolean			enable;
-
-	bed_data = data;
-
-	enable = gtk_tree_selection_get_selected (selection, &model, &iter);
-
-	gtk_widget_set_sensitive(bed_data->remove_button, enable);
-	gtk_widget_set_sensitive(bed_data->edit_button, enable);
+	gtk_widget_destroy(dialog);
+	g_object_unref (glade_xml);
 }
 
-
-
-
-void remove_button_clicked_cb(GtkButton *button, gpointer data)
+static void
+remove_button_clicked_cb(GtkButton *button, gpointer data)
 {
 	GtkTreeSelection	*selection;
 	GtkTreeIter			iter;
@@ -269,12 +148,9 @@
 	gtk_list_store_remove ( store, &childIter);
 }
 
-
-
-
-void add_button_clicked_cb(GtkButton *button, gpointer data)
+static void
+add_button_clicked_cb(GtkButton *button, gpointer data)
 {
-	char				*glade_file;
 	GtkWidget			*dialog;
 	GtkWidget			*bssid_entry;
 	BED_DATA			*bed_data;
@@ -282,20 +158,7 @@
 
 	bed_data = data;
 
-	// load the glade file
-	glade_file = g_build_filename (GLADEDIR, "editor.glade", NULL);
-	if (!glade_file || !g_file_test (glade_file, G_FILE_TEST_IS_REGULAR))
-		glade_file = g_build_filename ("", "editor.glade", NULL);
-
-	if (!glade_file || !g_file_test (glade_file, G_FILE_TEST_IS_REGULAR))
-	{
-		g_print("Error loading editor.glade file!\n");
-		g_free (glade_file);
-		return;
-	}
-
-	glade_xml = glade_xml_new (glade_file, BSSID_EDITOR_DIALOG, NULL);
-	g_free(glade_file);
+	glade_xml = glade_xml_new (bed_data->glade_file, BSSID_EDITOR_DIALOG, NULL);
 
 	dialog = glade_xml_get_widget (glade_xml, BSSID_EDITOR_DIALOG);
 
@@ -340,88 +203,162 @@
 	}
 
 	gtk_widget_destroy(dialog);
-	g_free(glade_xml);
+	g_object_unref (glade_xml);
 
 }
 
-
-
-
-void edit_button_clicked_cb(GtkButton *button, gpointer data)
+static void
+selection_changed_cb (GtkTreeSelection *selection, gpointer data)
 {
-	char				*glade_file;
-	GtkWidget			*dialog;
-	GtkWidget			*bssid_entry;
-	BED_DATA			*bed_data;
-	GladeXML			*glade_xml;
-	GtkTreeSelection	*selection;
 	GtkTreeIter			iter;
-	GtkTreeIter			childIter;
 	GtkTreeModel		*model;
-	GtkListStore		*store;
-	gchar				*bssid_value = NULL;
+	BED_DATA			*bed_data;
+	gboolean			enable;
 
 	bed_data = data;
 
-	selection = gtk_tree_view_get_selection (
-			GTK_TREE_VIEW (bed_data->treeview));
+	enable = gtk_tree_selection_get_selected (selection, &model, &iter);
 
-	if(!gtk_tree_selection_get_selected (selection, &model, &iter))
-		return;
+	gtk_widget_set_sensitive(bed_data->remove_button, enable);
+	gtk_widget_set_sensitive(bed_data->edit_button, enable);
+}
 
-	gtk_tree_model_get (model, &iter, 0, &bssid_value, -1);
-	if(bssid_value == NULL)
-		return;
+gboolean
+run_bssid_editor (const char *glade_file, GtkWidget *parent, const char *gconf_dir)
+{
+	GtkTreeSelection	*select;
+	GConfClient			*gconf_client;
+	GSList				*bssids;
+	GtkListStore		*store;
+	GtkTreeViewColumn	*column;
+	GtkCellRenderer		*renderer;
+	GtkTreeModel		*filter;
+	GError				*err = NULL;
+	BED_DATA			*bed_data;
+	gboolean			rc = FALSE;
+
+	bed_data = g_new0 (BED_DATA, 1);
+	bed_data->glade_file = g_strdup (glade_file);
 
 	// load the glade file
-	glade_file = g_build_filename (GLADEDIR, "editor.glade", NULL);
-	if (!glade_file || !g_file_test (glade_file, G_FILE_TEST_IS_REGULAR))
-		glade_file = g_build_filename ("", "editor.glade", NULL);
+	bed_data->glade_xml = glade_xml_new (glade_file, BSSID_DIALOG, NULL);
+
+	bed_data->dialog = glade_xml_get_widget (bed_data->glade_xml, BSSID_DIALOG);
+
+	bed_data->treeview = glade_xml_get_widget( bed_data->glade_xml, 
+			BSSID_TREEVIEW);
+	bed_data->add_button = glade_xml_get_widget( bed_data->glade_xml, 
+			BSSID_ADD);
+	bed_data->remove_button = glade_xml_get_widget( bed_data->glade_xml, 
+			BSSID_REMOVE);
+	bed_data->edit_button = glade_xml_get_widget( bed_data->glade_xml, 
+			BSSID_EDIT);
 
-	if (!glade_file || !g_file_test (glade_file, G_FILE_TEST_IS_REGULAR))
+	select = gtk_tree_view_get_selection(GTK_TREE_VIEW (bed_data->treeview));
+	gtk_tree_selection_set_mode (select, GTK_SELECTION_SINGLE);
+
+	g_signal_connect (G_OBJECT (select), "changed",
+			G_CALLBACK (selection_changed_cb), bed_data);
+	g_signal_connect (G_OBJECT (bed_data->add_button), "clicked",
+			G_CALLBACK (add_button_clicked_cb), bed_data);
+	g_signal_connect (G_OBJECT (bed_data->remove_button), "clicked",
+			G_CALLBACK (remove_button_clicked_cb), bed_data);
+	g_signal_connect (G_OBJECT (bed_data->edit_button), "clicked",
+			G_CALLBACK (edit_button_clicked_cb), bed_data);
+
+	store = gtk_list_store_new (1, G_TYPE_STRING);
+
+	gconf_client = gconf_client_get_default();
+
+	// Get the bssids
+	bssids = gconf_client_get_list(gconf_client, gconf_dir, 
+			GCONF_VALUE_STRING, &err);
+	if(err == 0)
 	{
-		g_print("Error loading editor.glade file!\n");
-		g_free (glade_file);
-		return;
+		gchar	*bssid = NULL; 
+
+		while(bssids)
+		{
+			GtkTreeIter			iter;
+
+			bssid = g_strdup(bssids->data);
+
+			gtk_list_store_append (store, &iter);
+
+			gtk_list_store_set (store, &iter, 0, bssid, -1);
+
+			g_free(bssids->data);
+
+			bssids = g_slist_delete_link (bssids, bssids);
+		}
 	}
 
-	glade_xml = glade_xml_new (glade_file, BSSID_EDITOR_DIALOG, NULL);
-	g_free(glade_file);
+	filter = gtk_tree_model_filter_new (GTK_TREE_MODEL (store), NULL);
 
-	dialog = glade_xml_get_widget (glade_xml, BSSID_EDITOR_DIALOG);
+	gtk_tree_view_set_model (GTK_TREE_VIEW (bed_data->treeview), filter);
 
-	bssid_entry = glade_xml_get_widget( glade_xml, 
-			BSSID_EDITOR_ENTRY);
+	g_object_unref (store);
+	g_object_unref (filter);
 
-	gtk_window_set_transient_for(GTK_WINDOW(dialog), 
-			GTK_WINDOW(bed_data->dialog));
+	renderer = gtk_cell_renderer_text_new ();
+	column = gtk_tree_view_column_new_with_attributes ("Name", renderer,
+			"markup", 0, NULL);
 
-	gtk_entry_set_text(GTK_ENTRY(bssid_entry), bssid_value);
+	gtk_tree_view_append_column (GTK_TREE_VIEW (bed_data->treeview), column);
+	gtk_tree_view_column_set_sort_column_id (column, 0);
 
-	gint result = gtk_dialog_run (GTK_DIALOG(dialog));
+
+	gtk_window_set_transient_for(GTK_WINDOW(bed_data->dialog), 
+			GTK_WINDOW(parent));
+
+	gint result = gtk_dialog_run (GTK_DIALOG (bed_data->dialog));
 
 	if(result == GTK_RESPONSE_OK)
 	{
-		gchar *new_bssid;
+		GtkTreeIter			iter;
+		GtkTreeModel		*model;
+		gboolean			valid;
+		gchar				*new_bssid;
+		GSList				*bssid_list;
 
-		new_bssid = g_strdup(gtk_entry_get_text(GTK_ENTRY(bssid_entry)));
+		model = gtk_tree_view_get_model(GTK_TREE_VIEW(bed_data->treeview));
 
-		store = GTK_LIST_STORE(gtk_tree_model_filter_get_model(
-					GTK_TREE_MODEL_FILTER(model)));
+		valid = gtk_tree_model_get_iter_first(model, &iter);
 
-		gtk_tree_model_filter_convert_iter_to_child_iter(
-				GTK_TREE_MODEL_FILTER(model),
-				&childIter,
-				&iter);
+		bssid_list = NULL;
 
-		gtk_list_store_set ( store, &childIter, 0, new_bssid, -1);
-	}
+		while(valid)
+		{
+			gtk_tree_model_get(model, &iter, 0, &new_bssid, -1);
 
-	gtk_widget_destroy(dialog);
-	g_free(glade_xml);
+			bssid_list = g_slist_append(bssid_list, new_bssid);
+
+			valid = gtk_tree_model_iter_next(model, &iter);
+		}
 
+		err = NULL;
 
+		if(bssid_list)
+		{
+			gconf_client_set_list(gconf_client, gconf_dir, 
+					GCONF_VALUE_STRING, bssid_list, NULL);
+		}
+		else
+		{
+			gconf_client_unset(gconf_client, gconf_dir, NULL);
+		}
 
-}
+		gconf_client_suggest_sync(gconf_client, NULL);
+		rc = TRUE;
+	}
+
+	gtk_widget_destroy(bed_data->dialog);
+	g_object_unref (bed_data->glade_xml);
+	g_free (bed_data->glade_file);
+
+	g_free (bed_data);
 
+	g_object_unref(gconf_client);
 
+	return rc;
+}

Modified: branches/network-manager-applet-0-6/editor/bssid-editor-dialog.h
==============================================================================
--- branches/network-manager-applet-0-6/editor/bssid-editor-dialog.h	(original)
+++ branches/network-manager-applet-0-6/editor/bssid-editor-dialog.h	Tue Feb 19 22:13:14 2008
@@ -27,13 +27,9 @@
 #endif
 
 #include <gtk/gtk.h>
-#include <gconf/gconf-client.h>
-#include <glade/glade.h>
-#include <dbus/dbus.h>
-#include <dbus/dbus-glib.h>
-#include <net/ethernet.h>
-
-gboolean run_bssid_editor(GtkWidget *parent, gchar *gconf_dir);
 
+gboolean run_bssid_editor (const char *glade_file,
+			   GtkWidget *parent,
+			   const char *gconf_dir);
 
 #endif // BSSID_EDITOR_DIALOG_H

Modified: branches/network-manager-applet-0-6/editor/editor-app.c
==============================================================================
--- branches/network-manager-applet-0-6/editor/editor-app.c	(original)
+++ branches/network-manager-applet-0-6/editor/editor-app.c	Tue Feb 19 22:13:14 2008
@@ -1,3 +1,5 @@
+/* -*- Mode: C; tab-width: 5; indent-tabs-mode: t; c-basic-offset: 5 -*- */
+
 /* NetworkManager Wireless Editor -- Edit wireless access points
  *
  * Calvin Gaisford <cgaisford novell com>
@@ -43,9 +45,10 @@
 #include "bssid-editor-dialog.h"
 #include "widget-wso.h"
 
-#define WE_GCONF_WIRELESS_PATH	"/system/networking/wireless/networks"
+#define WE_GCONF_WIRELESS_PATH     "/system/networking/wireless/networks"
+#define WE_GCONF_WIRED_PATH        "/system/networking/wired/networks"
 
-#define WE_ICON_SIZE	24	
+#define WE_ICON_SIZE	22
 
 // WirelessNetworkTreeView defines
 #define WNTV_DISPLAY_COLUMN	0
@@ -61,248 +64,404 @@
 #define SEC_OPTION_WPA2_PERSONAL	4
 #define SEC_OPTION_WPA_ENTERPRISE	5
 #define SEC_OPTION_WPA2_ENTERPRISE	6
+#define SEC_OPTION_LEAP				7
 
+// This function not only updated the gconf entry with the new
+// essid entry, but also moves the gconf dir for the entire set
+// of entries since they are stored in gconf by the essid
+static void
+essid_entry_changed (GtkEntry *essid_entry, gpointer data)
+{
+	WE_DATA		*we_data;
+	const gchar		*new_essid;
+	gboolean	do_update;
 
-WE_DATA *get_editor();
-gboolean quit_editor(WE_DATA *we_data);
-void about_editor_cb(GtkMenuItem *menuitem, gpointer user_data);
-gboolean setup_dialog_idle(WE_DATA *we_data);
-void setup_dialog(WE_DATA *we_data);
-void populate_model(WE_DATA *we_data, GtkListStore *store);
-void network_selection_changed_cb (GtkTreeSelection *selection, 
-		gpointer data);
-void bssids_button_clicked_cb(GtkButton *button, gpointer user_data);
-void network_remove_button_clicked_cb(GtkButton *button, gpointer user_data);
-void update_dialog_for_current_network(WE_DATA *we_data, gboolean enabled);
-void essid_entry_changed(GtkEntry *essid_entry, gpointer data);
-gboolean essid_entry_focus_lost(GtkWidget *widget, GdkEventFocus *event, 
-		gpointer data);
-void security_combo_changed(GtkWidget *combo, gpointer data);
-void change_security_settings(gint option, gpointer data);
-void time_stamp_changed(GnomeDateEdit *dateedit, gpointer user_data);
-void update_security_widget(gint option, gpointer data);
-void set_security_combo(gint option, gpointer data);
-void connect_signal_handlers(WE_DATA *we_data, gboolean connect);
-
-
+	do_update = FALSE;
+	we_data = (WE_DATA *)data;
+	new_essid = gtk_entry_get_text(essid_entry);
 
-int main(int argc, char **argv)
-{
-	WE_DATA			*we_data;
-
-	gnome_program_init(PACKAGE, VERSION,
-			LIBGNOMEUI_MODULE, argc, argv,
-			GNOME_PARAM_NONE, GNOME_PARAM_NONE);
+	if(we_data->essid_value == NULL)
+		do_update = TRUE;
+	else if(g_ascii_strcasecmp(new_essid, we_data->essid_value) != 0)
+		do_update = TRUE;
 
-	we_data = get_editor();
-	if(we_data != NULL)
+	if(we_data->essid_value != NULL)
 	{
-		gtk_widget_show_all(we_data->window);
-		gtk_main();
-		return 0; 
+		g_free(we_data->essid_value);
+		we_data->essid_value = g_strdup(new_essid);
 	}
 
-	return -1; 
-}
+	if(do_update)
+	{
+		GtkTreeSelection	*selection;
+		GError				*err = NULL;
+		GtkTreeIter			iter;
+		GtkTreeIter			childIter;
+		GtkTreeModel		*model;
+		GtkListStore		*store;
+		gchar				*key = NULL;
+		gchar				*gconf_path;
+		gchar				*gconf_new_path;
+		GSList				*gconf_entries;
 
+		selection = gtk_tree_view_get_selection (
+				GTK_TREE_VIEW (we_data->treeview));
 
-WE_DATA *get_editor()
-{
-	WE_DATA				*we_data;
-	GtkTreeSelection	*select;
-	GtkWidget			*widget;
+		if(!gtk_tree_selection_get_selected (selection, &model, &iter))
+			return;
 
-	we_data = (WE_DATA *)malloc(sizeof(WE_DATA));
-	if(we_data == NULL)
-	{
-		g_print("malloc error\n");
-		return NULL;
-	}
+		gtk_tree_model_get (model, &iter, WNTV_DATA_COLUMN, &gconf_path, -1);
+		if(gconf_path == NULL)
+			return;
 
-	memset(we_data, 0, sizeof(WE_DATA));
+		// go through and move all of the gconf entries to the new entry
+		key = g_strdup_printf("%s/essid", gconf_path);
+		gconf_client_set_string(we_data->gconf_client, key, new_essid, &err);
+		g_free(key);
 
-	// load the glade file
-	we_data->glade_file = g_build_filename (GLADEDIR, "editor.glade", NULL);
-	if (!we_data->glade_file || 
-			!g_file_test (we_data->glade_file, G_FILE_TEST_IS_REGULAR))
-	{
-		we_data->glade_file = g_build_filename ("", "editor.glade", NULL);
-	}
+		gconf_new_path = g_strdup_printf("%s/%s", WE_GCONF_WIRELESS_PATH, 
+				new_essid);
 
-	if (!we_data->glade_file || 
-			!g_file_test (we_data->glade_file, G_FILE_TEST_IS_REGULAR))
-	{
-		g_print("Error loading editor.glade file!\n");
-		g_free (we_data->glade_file);
-		return NULL;
-	}
+		err = NULL;
+		gconf_entries = gconf_client_all_entries(we_data->gconf_client,
+				gconf_path,
+				&err);
+		while (gconf_entries)
+		{
+			GConfEntry	*gconf_entry;
+			gchar		*entry_tail;
 
-	we_data->editor_xml = glade_xml_new (we_data->glade_file, 
-			"wireless_editor", NULL);
+			gconf_entry = gconf_entries->data;
 
-	we_data->window = glade_xml_get_widget (we_data->editor_xml, 
-			"wireless_editor");
+			entry_tail = g_strrstr(gconf_entry->key, "/");
+			if(entry_tail != NULL)
+			{
+				gchar		*new_key;
 
-	we_data->gconf_client = gconf_client_get_default();
+				new_key = g_strdup_printf("%s%s", gconf_new_path, entry_tail);
 
-	g_signal_connect_swapped (we_data->window, "delete_event", 
-			G_CALLBACK (quit_editor), we_data);
+				gconf_client_set(we_data->gconf_client,
+						new_key,
+						gconf_entry->value,
+						&err);
 
-	widget = glade_xml_get_widget(we_data->editor_xml, "quit_nm_editor");
+				gconf_client_unset(we_data->gconf_client,
+						gconf_entry->key,
+						&err);
+				g_free(new_key);
+			}
+			gconf_entry_free(gconf_entry);
+			gconf_entries = g_slist_delete_link (gconf_entries, gconf_entries);
+		}
+		gconf_client_suggest_sync(we_data->gconf_client, &err);
 
-	g_signal_connect_swapped (widget, "activate", 
-			G_CALLBACK (quit_editor), we_data);
 
+		// now update the data in the treeview
+		store = GTK_LIST_STORE(gtk_tree_model_filter_get_model(
+					GTK_TREE_MODEL_FILTER(model)));
 
-	widget = glade_xml_get_widget(we_data->editor_xml, "about_nm_editor");
+		gtk_tree_model_filter_convert_iter_to_child_iter(
+				GTK_TREE_MODEL_FILTER(model),
+				&childIter,
+				&iter);
 
-	g_signal_connect_swapped (widget, "activate", 
-			G_CALLBACK (about_editor_cb), we_data->window);
+		gtk_list_store_set (
+				store,
+				&childIter,
+				WNTV_DISPLAY_COLUMN, g_strdup(new_essid),
+				WNTV_DATA_COLUMN, g_strdup(gconf_new_path),
+				-1);
 
-	we_data->treeview = glade_xml_get_widget(we_data->editor_xml, 
-			"wireless_treeview");
+		g_free(gconf_new_path);
+	}
+}
 
-	select = gtk_tree_view_get_selection (GTK_TREE_VIEW (we_data->treeview));
-	gtk_tree_selection_set_mode (select, GTK_SELECTION_SINGLE);
+static gboolean
+essid_entry_focus_lost (GtkWidget *widget, GdkEventFocus *event, gpointer data)
+{
+	essid_entry_changed (GTK_ENTRY (widget), data);
+	return FALSE;
+}
 
-	g_signal_connect (G_OBJECT (select), "changed",
-			G_CALLBACK (network_selection_changed_cb), we_data);
+static void
+change_security_settings (gint option, gpointer data)
+{
+	WE_DATA		*we_data;
 
-	we_data->essid_entry = glade_xml_get_widget(we_data->editor_xml, 
-			"essid_entry");
-	we_data->security_combo = glade_xml_get_widget(we_data->editor_xml, 
-			"security_combo");
-	we_data->stamp_editor = glade_xml_get_widget(we_data->editor_xml, 
-			"lastused_dateedit");
-	we_data->remove_button = glade_xml_get_widget(we_data->editor_xml, 
-			"remove_button");
+	we_data = data;
+	g_return_if_fail(we_data != NULL);
 
-	widget = glade_xml_get_widget(we_data->editor_xml, "bssids_modify");
+	switch(option)
+	{
+		default:
+		case SEC_OPTION_NONE:
+			eh_gconf_client_set_int(we_data, "we_cipher", 
+					IW_AUTH_CIPHER_NONE);
+			eh_gconf_client_unset(we_data, "wep_auth_algorithm");
+			eh_gconf_client_unset(we_data, "wpa_psk_wpa_version");
+			break;
+		case SEC_OPTION_WEP64:
+			eh_gconf_client_set_int(we_data, "we_cipher", 
+					IW_AUTH_CIPHER_WEP40);
+			eh_gconf_client_set_int(we_data, "wep_auth_algorithm", 
+					IW_AUTH_ALG_OPEN_SYSTEM);
+			eh_gconf_client_unset(we_data, "wpa_psk_wpa_version");
+			break;
+		case SEC_OPTION_WEP128:
+			eh_gconf_client_set_int(we_data, "we_cipher", 
+					IW_AUTH_CIPHER_WEP104);
+			eh_gconf_client_set_int(we_data, "wep_auth_algorithm", 
+					IW_AUTH_ALG_OPEN_SYSTEM);
+			eh_gconf_client_unset(we_data, "wpa_psk_wpa_version");
+			break;
+		case SEC_OPTION_WPA_PERSONAL:
+			eh_gconf_client_set_int(we_data, "we_cipher", 0); // auto
+			eh_gconf_client_set_int(we_data, "wpa_psk_wpa_version",
+					IW_AUTH_WPA_VERSION_WPA);
+			eh_gconf_client_unset(we_data, "wep_auth_algorithm");
+			break;
+		case SEC_OPTION_WPA2_PERSONAL:
+			eh_gconf_client_set_int(we_data, "we_cipher", 0); // auto
+			eh_gconf_client_set_int(we_data, "wpa_psk_wpa_version",
+					IW_AUTH_WPA_VERSION_WPA2);
+			eh_gconf_client_unset(we_data, "wep_auth_algorithm");
+			break;
+		case SEC_OPTION_WPA_ENTERPRISE:
+			eh_gconf_client_set_int(we_data, "we_cipher", 
+					NM_AUTH_TYPE_WPA_EAP);
+			eh_gconf_client_set_int(we_data, "wpa_eap_wpa_version",
+					IW_AUTH_WPA_VERSION_WPA);
+			eh_gconf_client_unset(we_data, "wep_auth_algorithm");
+			break;
+		case SEC_OPTION_WPA2_ENTERPRISE:
+			eh_gconf_client_set_int(we_data, "we_cipher", 
+					NM_AUTH_TYPE_WPA_EAP);
+			eh_gconf_client_set_int(we_data, "wpa_eap_wpa_version",
+					IW_AUTH_WPA_VERSION_WPA2);
+			eh_gconf_client_unset(we_data, "wep_auth_algorithm");
+			break;
+		case SEC_OPTION_LEAP:
+			eh_gconf_client_set_int(we_data, "we_cipher", NM_AUTH_TYPE_LEAP);
+			eh_gconf_client_unset(we_data, "wep_auth_algorithm");
+			break;
+	}
+}
 
-	g_signal_connect (G_OBJECT (widget), "clicked",
-			G_CALLBACK (bssids_button_clicked_cb), we_data);
+static void
+update_security_widget (gint option, gpointer data)
+{
+	WE_DATA		*we_data;
+	GtkWidget	*vbox;
+	GList		*children;
+	GtkWidget	*childWidget;
 
-	g_signal_connect (G_OBJECT (we_data->remove_button), "clicked",
-			G_CALLBACK (network_remove_button_clicked_cb), we_data);
+	we_data = data;
+	g_return_if_fail(we_data != NULL);
 
-	g_idle_add((GSourceFunc)setup_dialog_idle, we_data);
+	vbox = GTK_WIDGET( glade_xml_get_widget(we_data->editor_xml, 
+				"swapout_vbox"));
+	g_return_if_fail(vbox != NULL);
 
-	return we_data;
-}
+	// loop through and remove all of the existing children
+	for(children = gtk_container_get_children(GTK_CONTAINER(vbox));
+			children;
+			children = g_list_next(children))
+	{
+		GtkWidget *child = GTK_WIDGET(children->data);
+		gtk_container_remove(GTK_CONTAINER(vbox), child);
+	}
 
+	if(we_data->sub_xml != NULL)
+	{
+		g_object_unref(we_data->sub_xml);
+		we_data->sub_xml = NULL;
+	}
 
-gboolean quit_editor(WE_DATA *we_data)
-{
-	if(we_data != NULL)
+	switch(option)
 	{
-		if(we_data->editor_xml != NULL)
-			g_object_unref(we_data->editor_xml);
-		if(we_data->gconf_client != NULL)
-			g_object_unref(we_data->gconf_client);
-		if(we_data->glade_file != NULL)
-			g_free(we_data->glade_file);
-		free(we_data);
+		default:
+		case SEC_OPTION_NONE:
+			childWidget = NULL;
+			break;
+		case SEC_OPTION_WEP64:
+		case SEC_OPTION_WEP128:
+			childWidget = get_wep_widget(we_data);
+			break;
+		case SEC_OPTION_WPA_PERSONAL:
+		case SEC_OPTION_WPA2_PERSONAL:
+			childWidget = get_wpa_personal_widget(we_data);
+			break;
+		case SEC_OPTION_WPA_ENTERPRISE:
+		case SEC_OPTION_WPA2_ENTERPRISE:
+			childWidget = get_wpa_enterprise_widget(we_data);
+			break;
+		case SEC_OPTION_LEAP:
+			childWidget = get_leap_widget(we_data);
+			break;
 	}
 
-	gtk_exit(0);
-	return TRUE;
+	if(childWidget != NULL)
+		gtk_container_add(GTK_CONTAINER(vbox), childWidget);
 }
 
-static void about_dialog_activate_link_cb (GtkAboutDialog *about,
-		const gchar *url,
-		gpointer data)
+static void
+security_combo_changed (GtkWidget *combo, gpointer data)
 {
-	gnome_url_show (url, NULL);
+	int active;
+
+	active = gtk_combo_box_get_active(GTK_COMBO_BOX(combo));
+	change_security_settings (active, data);
+	update_security_widget (active, data);
 }
 
-void about_editor_cb(GtkMenuItem *menuitem, gpointer user_data)
+static void
+time_stamp_changed (GnomeDateEdit *dateedit, gpointer user_data)
 {
-	static const gchar *authors[] =
-	{
-		"Calvin Gaisford <cgaisford novell com>",
-		"\nNetworkManager Developers:",
-		"Christopher Aillon <caillon redhat com>",
-		"Jonathan Blandford <jrb redhat com>",
-		"John Palmieri <johnp redhat com>",
-		"Ray Strode <rstrode redhat com>",
-		"Colin Walters <walters redhat com>",
-		"Dan Williams <dcbw redhat com>",
-		"David Zeuthen <davidz redhat com>",
-		"Bill Moss <bmoss clemson edu>",
-		"Tom Parker",
-		"j bootlab org",
-		"Peter Jones <pjones redhat com>",
-		"Robert Love <rml novell com>",
-		"Tim Niemueller <tim niemueller de>",
-		NULL
-	};
+	WE_DATA				*we_data;
+	GtkTreeSelection	*selection;
+	gchar				*key = NULL;
+	GtkTreeIter			iter;
+	GtkTreeModel		*model;
+	gchar				*gconf_path;
+	GError 				*err = NULL;
+	time_t				t;
 
-	static const gchar *artists[] =
-	{
-		NULL
-	};
+	we_data = user_data;
 
-	static const gchar *documenters[] =
-	{
-		NULL
-	};
+	selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (we_data->treeview));
+	if(!gtk_tree_selection_get_selected (selection, &model, &iter))
+		return;
 
-#if !GTK_CHECK_VERSION(2,6,0)
-	GdkPixbuf	*pixbuf;
-	char		*file;
-	GtkWidget	*about_dialog;
+	gtk_tree_model_get (model, &iter, WNTV_DATA_COLUMN, &gconf_path, -1);
+	if(gconf_path == NULL)
+		return;
 
-	/* GTK 2.4 and earlier, have to use libgnome for about dialog */
-	file = gnome_program_locate_file (NULL, GNOME_FILE_DOMAIN_PIXMAP, 
-			"gnome-networktool.png", FALSE, NULL);
-	pixbuf = gdk_pixbuf_new_from_file (file, NULL);
-	g_free (file);
+	key = g_strdup_printf("%s/timestamp", gconf_path);
 
-	about_dialog = gnome_about_new (_("NetworkManager Editor"),
-			VERSION,
-			_("Copyright \xc2\xa9 2007 Novell, Inc."),
-			_("Editor for managing your wireless networks"),
-			authors,
-			documenters,
-			_("translator-credits"),
-			pixbuf);
-	g_object_unref (pixbuf);
+	t = gnome_date_edit_get_time(dateedit);
 
-	gtk_window_set_screen (GTK_WINDOW (about_dialog), 
-			gtk_widget_get_screen (GTK_WIDGET (applet)));
-	g_signal_connect (about_dialog, "destroy", 
-			G_CALLBACK (gtk_widget_destroyed), &about_dialog);
-	gtk_widget_show (about_dialog);
+	gconf_client_set_int(we_data->gconf_client, key, t, NULL);
 
-#else
-	static gboolean been_here = FALSE;
-	if (!been_here)
+	gconf_client_suggest_sync(we_data->gconf_client, &err);
+
+	g_free(key);
+}
+
+static void
+connect_signal_handlers (WE_DATA *we_data, gboolean connect)
+{
+	if(g_signal_handler_is_connected(G_OBJECT(we_data->essid_entry), 
+				we_data->essid_shid))
 	{
-		been_here = TRUE;
-		gtk_about_dialog_set_url_hook (about_dialog_activate_link_cb, 
-				NULL, NULL);
+		g_signal_handler_disconnect(G_OBJECT(we_data->essid_entry), 
+				we_data->essid_shid);
+		we_data->essid_shid = 0;
+	}
+	if(g_signal_handler_is_connected(G_OBJECT(we_data->essid_entry), 
+				we_data->essid_focus_shid))
+	{
+		g_signal_handler_disconnect(G_OBJECT(we_data->essid_entry), 
+				we_data->essid_focus_shid);
+		we_data->essid_focus_shid = 0;
+	}
+	if(g_signal_handler_is_connected(G_OBJECT(we_data->security_combo), 
+				we_data->combo_shid))
+	{
+		g_signal_handler_disconnect(G_OBJECT(we_data->security_combo), 
+				we_data->combo_shid);
+		we_data->essid_shid = 0;
+	}
+	if(g_signal_handler_is_connected(G_OBJECT(we_data->stamp_editor), 
+				we_data->stamp_date_shid))
+	{
+		g_signal_handler_disconnect(G_OBJECT(we_data->stamp_editor), 
+				we_data->stamp_date_shid);
+		we_data->stamp_date_shid = 0;
+	}
+	if(g_signal_handler_is_connected(G_OBJECT(we_data->stamp_editor), 
+				we_data->stamp_time_shid))
+	{
+		g_signal_handler_disconnect(G_OBJECT(we_data->stamp_editor), 
+				we_data->stamp_time_shid);
+		we_data->stamp_time_shid = 0;
+	}
+	if(connect)
+	{
+		we_data->essid_shid = g_signal_connect(
+				G_OBJECT(we_data->essid_entry), "activate", 
+				GTK_SIGNAL_FUNC (essid_entry_changed), we_data);
+		we_data->essid_focus_shid = g_signal_connect(
+				G_OBJECT(we_data->essid_entry), "focus-out-event", 
+				GTK_SIGNAL_FUNC (essid_entry_focus_lost), we_data);
+		we_data->combo_shid = g_signal_connect(
+				G_OBJECT(we_data->security_combo), "changed", 
+				GTK_SIGNAL_FUNC (security_combo_changed), we_data);
+		we_data->stamp_date_shid = g_signal_connect(
+				G_OBJECT(we_data->stamp_editor), "date-changed", 
+				GTK_SIGNAL_FUNC (time_stamp_changed), we_data);
+		we_data->stamp_time_shid = g_signal_connect(
+				G_OBJECT(we_data->stamp_editor), "time-changed", 
+				GTK_SIGNAL_FUNC (time_stamp_changed), we_data);
 	}
-
-	/* GTK 2.6 and later code */
-	gtk_show_about_dialog (NULL,
-			"name", _("NetworkManager Editor"),
-			"version", VERSION,
-			"copyright", _("Copyright \xc2\xa9 2007 Novell, Inc."),
-			"comments", _("Editor for managing your wireless networks."),
-			"website", "http://www.gnome.org/projects/NetworkManager/";,
-			"authors", authors,
-			"artists", artists,
-			"documenters", documenters,
-			"translator-credits", _("translator-credits"),
-			"logo-icon-name", GTK_STOCK_NETWORK,
-			NULL);
-#endif
 }
 
-gboolean setup_dialog_idle(WE_DATA *we_data)
+static void
+network_remove_button_clicked_cb (GtkButton *button, gpointer user_data)
 {
-	setup_dialog(we_data);
-	return FALSE;
+	WE_DATA		*we_data;
+	GtkTreeSelection	*selection;
+	GError				*err = NULL;
+	GtkTreeIter			iter;
+	GtkTreeIter			childIter;
+	GtkTreeModel		*model;
+	GtkListStore		*store;
+	gchar				*gconf_path;
+	GSList				*gconf_entries;
+
+	we_data = (WE_DATA *)user_data;
+
+	selection = gtk_tree_view_get_selection (
+			GTK_TREE_VIEW (we_data->treeview));
+
+	if(!gtk_tree_selection_get_selected (selection, &model, &iter))
+		return;
+
+	gtk_tree_model_get (model, &iter, WNTV_DATA_COLUMN, &gconf_path, -1);
+	if(gconf_path == NULL)
+		return;
+
+	err = NULL;
+	gconf_entries = gconf_client_all_entries(we_data->gconf_client,
+			gconf_path,
+			&err);
+
+	while (gconf_entries)
+	{
+		GConfEntry	*gconf_entry;
+
+		gconf_entry = gconf_entries->data;
+
+		gconf_client_unset(we_data->gconf_client,
+				gconf_entry->key,
+				&err);
+
+		gconf_entry_free(gconf_entry);
+		gconf_entries = g_slist_delete_link (gconf_entries, gconf_entries);
+	}
+
+	gconf_client_suggest_sync(we_data->gconf_client, &err);
+
+	// now update the data in the treeview
+	store = GTK_LIST_STORE(gtk_tree_model_filter_get_model(
+				GTK_TREE_MODEL_FILTER(model)));
+
+	gtk_tree_model_filter_convert_iter_to_child_iter(
+			GTK_TREE_MODEL_FILTER(model),
+			&childIter,
+			&iter);
+
+	gtk_list_store_remove ( store, &childIter);
+
 }
 
 static gint
@@ -311,13 +470,19 @@
 			   GtkTreeIter *b,
 			   gpointer user_data)
 {
-	char *aa;
-	char *bb;
+	char *aa = NULL;
+	char *bb = NULL;
 	gint result;
 
 	gtk_tree_model_get (model, a, WNTV_DISPLAY_COLUMN, &aa, -1);
 	gtk_tree_model_get (model, b, WNTV_DISPLAY_COLUMN, &bb, -1);
-	result = strcmp (aa, bb);
+
+	if (aa == NULL)
+		result = -1;
+	else if (bb == NULL)
+		result = 1;
+	else
+		result = strcmp (aa, bb);
 
 	g_free (aa);
 	g_free (bb);
@@ -325,7 +490,67 @@
 	return result;
 }
 
-void setup_dialog(WE_DATA *we_data)
+static void
+add_networks (GtkListStore *store, GConfClient *gconf_client, const char *gconf_prefix, GdkPixbuf *pixbuf)
+{
+	GSList *gconf_dirs;
+
+	gconf_dirs = gconf_client_all_dirs (gconf_client, gconf_prefix, NULL);
+	while (gconf_dirs) {
+		gchar *gconf_entry_dir = gconf_dirs->data;
+		gchar *key;
+		gchar *ssid;
+
+		key = g_strdup_printf ("%s/essid", gconf_entry_dir);
+		ssid = gconf_client_get_string (gconf_client, key, NULL);
+		g_free (key);
+
+		if (ssid) {
+			GtkTreeIter iter;
+
+			gtk_list_store_append (store, &iter);
+
+			gtk_list_store_set (store, &iter,
+							WNTV_DISPLAY_COLUMN, ssid,
+							WNTV_PIXBUF_COLUMN, pixbuf,
+							WNTV_DATA_COLUMN, gconf_entry_dir,
+							-1);
+
+			g_free (ssid);
+		}
+
+		gconf_dirs = g_slist_delete_link (gconf_dirs, gconf_dirs);
+	}
+}
+
+static void
+populate_model (WE_DATA *we_data, GtkListStore *store)
+{
+	GdkPixbuf    *pixbuf;
+	GtkIconTheme *theme;
+
+	if (gtk_widget_has_screen (we_data->treeview))
+		theme = gtk_icon_theme_get_for_screen (gtk_widget_get_screen (we_data->treeview));
+	else
+		theme = gtk_icon_theme_get_default ();
+
+	/* Wireless */
+	pixbuf = gtk_icon_theme_load_icon (theme, "nm-device-wireless", WE_ICON_SIZE, 0, NULL);
+	add_networks (store, we_data->gconf_client, WE_GCONF_WIRELESS_PATH, pixbuf);
+	g_object_unref (pixbuf);
+
+	/* Wired */
+	pixbuf = gtk_icon_theme_load_icon (theme, "nm-device-wired", WE_ICON_SIZE, 0, NULL);
+	add_networks (store, we_data->gconf_client, WE_GCONF_WIRED_PATH, pixbuf);
+	g_object_unref (pixbuf);
+
+	gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (store),
+								   WNTV_DISPLAY_COLUMN,
+								   GTK_SORT_ASCENDING);
+}
+
+static void
+setup_dialog (WE_DATA *we_data)
 {
 	GtkListStore      *store;
 	GtkTreeViewColumn *column;
@@ -334,35 +559,32 @@
 	GtkTreeIter			iter;
 
 	store = gtk_list_store_new (WNTV_NUM_COLUMNS,
-			G_TYPE_STRING,
-			GDK_TYPE_PIXBUF,
-			G_TYPE_POINTER);
+						   G_TYPE_STRING,
+						   GDK_TYPE_PIXBUF,
+						   G_TYPE_POINTER);
 
 	gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (store),
-									 WNTV_DISPLAY_COLUMN,
-									 sort_networks,
-									 NULL,
-									 NULL);
+							   WNTV_DISPLAY_COLUMN,
+							   sort_networks,
+							   NULL,
+							   NULL);
 
 	populate_model (we_data, store);
 
 	filter = gtk_tree_model_filter_new (GTK_TREE_MODEL (store), NULL);
 
-	gtk_tree_view_set_model (GTK_TREE_VIEW (we_data->treeview),
-			filter);
+	gtk_tree_view_set_model (GTK_TREE_VIEW (we_data->treeview), filter);
 
 	g_object_unref (store);
 	g_object_unref (filter);
 
 	renderer = gtk_cell_renderer_pixbuf_new ();
-	column = gtk_tree_view_column_new_with_attributes ("Image", renderer,
-			"pixbuf", WNTV_PIXBUF_COLUMN, NULL);
+	column = gtk_tree_view_column_new_with_attributes ("Image", renderer, "pixbuf", WNTV_PIXBUF_COLUMN, NULL);
 
 	gtk_tree_view_append_column (GTK_TREE_VIEW (we_data->treeview), column);
 
 	renderer = gtk_cell_renderer_text_new ();
-	column = gtk_tree_view_column_new_with_attributes ("Name", renderer,
-			"markup", WNTV_DISPLAY_COLUMN, NULL);
+	column = gtk_tree_view_column_new_with_attributes ("Name", renderer, "markup", WNTV_DISPLAY_COLUMN, NULL);
 
 	gtk_tree_view_append_column (GTK_TREE_VIEW (we_data->treeview), column);
 	gtk_tree_view_column_set_sort_column_id (column, 0);
@@ -404,100 +626,155 @@
 			0, _("WPA2 Enterprise"), 
 			-1);
 
-	gtk_combo_box_set_model (GTK_COMBO_BOX(we_data->security_combo), 
-			GTK_TREE_MODEL (store));
+	gtk_list_store_append (store, &iter);
+	gtk_list_store_set (store, &iter, 
+			0, _("LEAP"), 
+			-1);
 
+	gtk_combo_box_set_model (GTK_COMBO_BOX(we_data->security_combo), GTK_TREE_MODEL (store));
 	g_object_unref (store);
 }
 
-
-void populate_model(WE_DATA *we_data, GtkListStore *store)
+static gboolean
+setup_dialog_idle (gpointer data)
 {
-	GtkTreeIter   iter;
-	GdkPixbuf    *pixbuf;
-	int           icon_size = WE_ICON_SIZE;
-	GtkIconTheme *theme;
-	GSList			*gconf_dirs;
-	GError 			*err;
-
-	if (gtk_widget_has_screen (we_data->treeview))
-	{
-		theme = gtk_icon_theme_get_for_screen (
-				gtk_widget_get_screen (we_data->treeview));
-	}
-	else
-	{
-		theme = gtk_icon_theme_get_default ();
-	}
-
-	pixbuf = gtk_icon_theme_load_icon (theme, "nm-device-wireless", icon_size, 
-			0, NULL);
-
-	gconf_dirs = gconf_client_all_dirs(we_data->gconf_client, 
-			WE_GCONF_WIRELESS_PATH, &err);
+	WE_DATA *we_data = (WE_DATA *) data;
 
-	while (gconf_dirs)
-	{
-		GError		*err = NULL;
-		gchar		*name_key = NULL;
-		gchar		*name;
-		gchar		*gconf_entry_dir;
-
-
-		gconf_entry_dir = g_strdup(gconf_dirs->data);
-		name_key = g_strdup_printf("%s/essid", gconf_entry_dir);
-		name = gconf_client_get_string (we_data->gconf_client, name_key, &err);
-		if (name && strlen (name)) {
-			gtk_list_store_append (store, &iter);
+	setup_dialog (we_data);
 
-			gtk_list_store_set (store, &iter,
-					WNTV_DISPLAY_COLUMN, name,
-					WNTV_PIXBUF_COLUMN, pixbuf,
-					WNTV_DATA_COLUMN, gconf_entry_dir,
-					-1);
-		}
+	return FALSE;
+}
 
-		g_free(name_key);
+static gboolean
+quit_editor (WE_DATA *we_data)
+{
+	if (we_data) {
+		if (we_data->editor_xml)
+			g_object_unref (we_data->editor_xml);
+		if (we_data->gconf_client)
+			g_object_unref (we_data->gconf_client);
+		if (we_data->glade_file)
+			g_free (we_data->glade_file);
 
-		gconf_dirs = g_slist_delete_link (gconf_dirs, gconf_dirs);
+		g_free (we_data);
 	}
 
-	gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (store),
-										  WNTV_DISPLAY_COLUMN,
-										  GTK_SORT_ASCENDING);
+	gtk_exit (0);
+	return TRUE;
 }
 
-
-void network_selection_changed_cb (GtkTreeSelection *selection, 
-		gpointer data)
+static void
+about_dialog_activate_link_cb (GtkAboutDialog *about,
+						 const gchar *url,
+						 gpointer data)
 {
-	GtkTreeModel		*model;
-	GtkTreeIter			iter;
-	WE_DATA				*we_data;
-
-	we_data = data;
+	gnome_url_show (url, NULL);
+}
 
-	if(!gtk_tree_selection_get_selected (selection, &model, &iter))
+static void
+about_editor_cb (GtkMenuItem *menuitem, gpointer user_data)
+{
+	static const gchar *authors[] =
 	{
-		update_dialog_for_current_network(we_data, FALSE);
-		return;
-	}
+		"Calvin Gaisford <cgaisford novell com>",
+		"\nNetworkManager Developers:",
+		"Christopher Aillon <caillon redhat com>",
+		"Jonathan Blandford <jrb redhat com>",
+		"John Palmieri <johnp redhat com>",
+		"Ray Strode <rstrode redhat com>",
+		"Colin Walters <walters redhat com>",
+		"Dan Williams <dcbw redhat com>",
+		"David Zeuthen <davidz redhat com>",
+		"Bill Moss <bmoss clemson edu>",
+		"Tom Parker",
+		"j bootlab org",
+		"Peter Jones <pjones redhat com>",
+		"Robert Love <rml novell com>",
+		"Tim Niemueller <tim niemueller de>",
+		NULL
+	};
 
-	gtk_tree_model_get (model, &iter, WNTV_DATA_COLUMN, 
-			&(we_data->cur_gconf_dir), -1);
+	static const gchar *artists[] =
+	{
+		NULL
+	};
 
-	if(we_data->cur_gconf_dir != NULL)
+	static const gchar *documenters[] =
 	{
-		connect_signal_handlers(we_data, FALSE);
-		update_dialog_for_current_network(we_data, TRUE);
-		connect_signal_handlers(we_data, TRUE);
+		NULL
+	};
+
+#if !GTK_CHECK_VERSION(2,6,0)
+	GdkPixbuf	*pixbuf;
+	char		*file;
+	GtkWidget	*about_dialog;
+
+	/* GTK 2.4 and earlier, have to use libgnome for about dialog */
+	file = gnome_program_locate_file (NULL, GNOME_FILE_DOMAIN_PIXMAP, 
+			"gnome-networktool.png", FALSE, NULL);
+	pixbuf = gdk_pixbuf_new_from_file (file, NULL);
+	g_free (file);
+
+	about_dialog = gnome_about_new (_("NetworkManager Editor"),
+			VERSION,
+			_("Copyright \xc2\xa9 2007 Novell, Inc."),
+			_("Editor for managing your wireless networks"),
+			authors,
+			documenters,
+			_("translator-credits"),
+			pixbuf);
+	g_object_unref (pixbuf);
+
+	gtk_window_set_screen (GTK_WINDOW (about_dialog), 
+			gtk_widget_get_screen (GTK_WIDGET (applet)));
+	g_signal_connect (about_dialog, "destroy", 
+			G_CALLBACK (gtk_widget_destroyed), &about_dialog);
+	gtk_widget_show (about_dialog);
+
+#else
+	static gboolean been_here = FALSE;
+	if (!been_here)
+	{
+		been_here = TRUE;
+		gtk_about_dialog_set_url_hook (about_dialog_activate_link_cb, 
+				NULL, NULL);
 	}
-	else
-		update_dialog_for_current_network(we_data, FALSE);
+
+	/* GTK 2.6 and later code */
+	gtk_show_about_dialog (NULL,
+			"name", _("NetworkManager Editor"),
+			"version", VERSION,
+			"copyright", _("Copyright \xc2\xa9 2007 Novell, Inc."),
+			"comments", _("Editor for managing your wireless networks."),
+			"website", "http://www.gnome.org/projects/NetworkManager/";,
+			"authors", authors,
+			"artists", artists,
+			"documenters", documenters,
+			"translator-credits", _("translator-credits"),
+			"logo-icon-name", GTK_STOCK_NETWORK,
+			NULL);
+#endif
 }
 
+static void
+set_security_combo (gint option, gpointer data)
+{
+	WE_DATA *we_data = (WE_DATA *) data;
+	GtkWidget	*combo;
+
+	combo = glade_xml_get_widget (we_data->editor_xml, "security_combo");
+	gtk_combo_box_set_active (GTK_COMBO_BOX (combo), option);
+
+	if (we_data->cur_gconf_dir && !strncmp (we_data->cur_gconf_dir, WE_GCONF_WIRELESS_PATH, strlen (WE_GCONF_WIRELESS_PATH)))
+		gtk_widget_set_sensitive (combo, TRUE);
+	else
+		gtk_widget_set_sensitive (combo, FALSE);
 
-void update_dialog_for_current_network(WE_DATA *we_data, gboolean enabled)
+	update_security_widget (option, data);
+}
+
+static void
+update_dialog_for_current_network (WE_DATA *we_data, gboolean enabled)
 {
 	GError				*err = NULL;
 	gchar				*key = NULL;
@@ -597,418 +874,100 @@
 		widget = glade_xml_get_widget(we_data->editor_xml, 
 				"lastused_dateedit");
 
-		gnome_date_edit_set_time(GNOME_DATE_EDIT(widget), t);
-		gtk_widget_set_sensitive(widget, TRUE);
-	}
-
-	widget = glade_xml_get_widget(we_data->editor_xml, "bssids_modify");
-	gtk_widget_set_sensitive(widget, TRUE);
-
-
-	// ============ GET CIPHER PROPERTY AND SWITCH ============
-	// Get the cipher
-	we_cipher = eh_gconf_client_get_int(we_data, "we_cipher");
-
-	switch(we_cipher)
-	{
-		default:
-		case IW_AUTH_CIPHER_NONE:		// no security
-			set_security_combo(SEC_OPTION_NONE, we_data);
-			break;
-		case IW_AUTH_CIPHER_WEP40:		// WEP 64bit
-			set_security_combo(SEC_OPTION_WEP64, we_data);
-			break;
-		case IW_AUTH_CIPHER_WEP104:		// WEP 128bit
-			set_security_combo(SEC_OPTION_WEP128, we_data);
-			break;
-		case NM_AUTH_TYPE_WPA_PSK_AUTO:	// WPA or WPA2 PERSONAL
-		case IW_AUTH_CIPHER_TKIP:
-		case IW_AUTH_CIPHER_CCMP:
-			{
-				wpa_version = eh_gconf_client_get_int(we_data, 
-						"wpa_psk_wpa_version");
-				switch(wpa_version)
-				{
-					case IW_AUTH_WPA_VERSION_WPA:
-						set_security_combo(SEC_OPTION_WPA_PERSONAL, we_data);
-						break;
-					default:
-					case IW_AUTH_WPA_VERSION_WPA2:
-						set_security_combo(SEC_OPTION_WPA2_PERSONAL, we_data);
-						break;
-				}
-				break;
-			}
-		case NM_AUTH_TYPE_WPA_EAP:		// WPA or WPA2 Enterprise
-			{
-				wpa_version = eh_gconf_client_get_int(we_data, 
-						"wpa_eap_wpa_version");
-				switch(wpa_version)
-				{
-					case IW_AUTH_WPA_VERSION_WPA:
-						set_security_combo(SEC_OPTION_WPA_ENTERPRISE, we_data);
-						break;
-					default:
-					case IW_AUTH_WPA_VERSION_WPA2:
-						set_security_combo(SEC_OPTION_WPA2_ENTERPRISE, we_data);
-						break;
-				}
-				break;
-			}
-	}
-}
-
-
-gboolean essid_entry_focus_lost(GtkWidget *widget, GdkEventFocus *event, 
-		gpointer data)
-{
-	essid_entry_changed(GTK_ENTRY(widget), data);
-	return FALSE;
-}
-
-
-// This function not only updated the gconf entry with the new
-// essid entry, but also moves the gconf dir for the entire set
-// of entries since they are stored in gconf by the essid
-void essid_entry_changed(GtkEntry *essid_entry, gpointer data)
-{
-	WE_DATA		*we_data;
-	const gchar		*new_essid;
-	gboolean	do_update;
-
-	do_update = FALSE;
-	we_data = (WE_DATA *)data;
-	new_essid = gtk_entry_get_text(essid_entry);
-
-	if(we_data->essid_value == NULL)
-		do_update = TRUE;
-	else if(g_ascii_strcasecmp(new_essid, we_data->essid_value) != 0)
-		do_update = TRUE;
-
-	if(we_data->essid_value != NULL)
-	{
-		g_free(we_data->essid_value);
-		we_data->essid_value = g_strdup(new_essid);
-	}
-
-	if(do_update)
-	{
-		GtkTreeSelection	*selection;
-		GError				*err = NULL;
-		GtkTreeIter			iter;
-		GtkTreeIter			childIter;
-		GtkTreeModel		*model;
-		GtkListStore		*store;
-		gchar				*key = NULL;
-		gchar				*gconf_path;
-		gchar				*gconf_new_path;
-		GSList				*gconf_entries;
-
-		selection = gtk_tree_view_get_selection (
-				GTK_TREE_VIEW (we_data->treeview));
-
-		if(!gtk_tree_selection_get_selected (selection, &model, &iter))
-			return;
-
-		gtk_tree_model_get (model, &iter, WNTV_DATA_COLUMN, &gconf_path, -1);
-		if(gconf_path == NULL)
-			return;
-
-		// go through and move all of the gconf entries to the new entry
-		key = g_strdup_printf("%s/essid", gconf_path);
-		gconf_client_set_string(we_data->gconf_client, key, new_essid, &err);
-		g_free(key);
-
-		gconf_new_path = g_strdup_printf("%s/%s", WE_GCONF_WIRELESS_PATH, 
-				new_essid);
-
-		err = NULL;
-		gconf_entries = gconf_client_all_entries(we_data->gconf_client,
-				gconf_path,
-				&err);
-		while (gconf_entries)
-		{
-			GConfEntry	*gconf_entry;
-			gchar		*entry_tail;
-
-			gconf_entry = gconf_entries->data;
-
-			entry_tail = g_strrstr(gconf_entry->key, "/");
-			if(entry_tail != NULL)
-			{
-				gchar		*new_key;
-
-				new_key = g_strdup_printf("%s%s", gconf_new_path, entry_tail);
-
-				gconf_client_set(we_data->gconf_client,
-						new_key,
-						gconf_entry->value,
-						&err);
-
-				gconf_client_unset(we_data->gconf_client,
-						gconf_entry->key,
-						&err);
-				g_free(new_key);
-			}
-			gconf_entry_free(gconf_entry);
-			gconf_entries = g_slist_delete_link (gconf_entries, gconf_entries);
-		}
-		gconf_client_suggest_sync(we_data->gconf_client, &err);
-
-
-		// now update the data in the treeview
-		store = GTK_LIST_STORE(gtk_tree_model_filter_get_model(
-					GTK_TREE_MODEL_FILTER(model)));
-
-		gtk_tree_model_filter_convert_iter_to_child_iter(
-				GTK_TREE_MODEL_FILTER(model),
-				&childIter,
-				&iter);
-
-		gtk_list_store_set (
-				store,
-				&childIter,
-				WNTV_DISPLAY_COLUMN, g_strdup(new_essid),
-				WNTV_DATA_COLUMN, g_strdup(gconf_new_path),
-				-1);
-
-		g_free(gconf_new_path);
-	}
-}
-
-
-void security_combo_changed(GtkWidget *combo, gpointer data)
-{
-	switch(gtk_combo_box_get_active(GTK_COMBO_BOX(combo)))
-	{
-		case 0:
-		default:
-			change_security_settings(SEC_OPTION_NONE, data);
-			update_security_widget(SEC_OPTION_NONE, data);
-			break;
-		case 1:
-			change_security_settings(SEC_OPTION_WEP64, data);
-			update_security_widget(SEC_OPTION_WEP64, data);
-			break;
-		case 2:
-			change_security_settings(SEC_OPTION_WEP128, data);
-			update_security_widget(SEC_OPTION_WEP128, data);
-			break;
-		case 3:
-			change_security_settings(SEC_OPTION_WPA_PERSONAL, data);
-			update_security_widget(SEC_OPTION_WPA_PERSONAL, data);
-			break;
-		case 4:
-			change_security_settings(SEC_OPTION_WPA2_PERSONAL, data);
-			update_security_widget(SEC_OPTION_WPA2_PERSONAL, data);
-			break;
-		case 5:
-			change_security_settings(SEC_OPTION_WPA_ENTERPRISE, data);
-			update_security_widget(SEC_OPTION_WPA_ENTERPRISE, data);
-			break;
-		case 6:
-			change_security_settings(SEC_OPTION_WPA2_ENTERPRISE, data);
-			update_security_widget(SEC_OPTION_WPA2_ENTERPRISE, data);
-			break;
-	}
-}
-
-
-
-void change_security_settings(gint option, gpointer data)
-{
-	WE_DATA		*we_data;
-
-	we_data = data;
-	g_return_if_fail(we_data != NULL);
-
-	switch(option)
-	{
-		default:
-		case SEC_OPTION_NONE:
-			eh_gconf_client_set_int(we_data, "we_cipher", 
-					IW_AUTH_CIPHER_NONE);
-			eh_gconf_client_unset(we_data, "wep_auth_algorithm");
-			eh_gconf_client_unset(we_data, "wpa_psk_wpa_version");
-			break;
-		case SEC_OPTION_WEP64:
-			eh_gconf_client_set_int(we_data, "we_cipher", 
-					IW_AUTH_CIPHER_WEP40);
-			eh_gconf_client_set_int(we_data, "wep_auth_algorithm", 
-					IW_AUTH_ALG_OPEN_SYSTEM);
-			eh_gconf_client_unset(we_data, "wpa_psk_wpa_version");
-			break;
-		case SEC_OPTION_WEP128:
-			eh_gconf_client_set_int(we_data, "we_cipher", 
-					IW_AUTH_CIPHER_WEP104);
-			eh_gconf_client_set_int(we_data, "wep_auth_algorithm", 
-					IW_AUTH_ALG_OPEN_SYSTEM);
-			eh_gconf_client_unset(we_data, "wpa_psk_wpa_version");
-			break;
-		case SEC_OPTION_WPA_PERSONAL:
-			eh_gconf_client_set_int(we_data, "we_cipher", 0); // auto
-			eh_gconf_client_set_int(we_data, "wpa_psk_wpa_version",
-					IW_AUTH_WPA_VERSION_WPA);
-			eh_gconf_client_unset(we_data, "wep_auth_algorithm");
-			break;
-		case SEC_OPTION_WPA2_PERSONAL:
-			eh_gconf_client_set_int(we_data, "we_cipher", 0); // auto
-			eh_gconf_client_set_int(we_data, "wpa_psk_wpa_version",
-					IW_AUTH_WPA_VERSION_WPA2);
-			eh_gconf_client_unset(we_data, "wep_auth_algorithm");
-			break;
-		case SEC_OPTION_WPA_ENTERPRISE:
-			eh_gconf_client_set_int(we_data, "we_cipher", 
-					NM_AUTH_TYPE_WPA_EAP);
-			eh_gconf_client_set_int(we_data, "wpa_eap_wpa_version",
-					IW_AUTH_WPA_VERSION_WPA);
-			eh_gconf_client_unset(we_data, "wep_auth_algorithm");
-			break;
-		case SEC_OPTION_WPA2_ENTERPRISE:
-			eh_gconf_client_set_int(we_data, "we_cipher", 
-					NM_AUTH_TYPE_WPA_EAP);
-			eh_gconf_client_set_int(we_data, "wpa_eap_wpa_version",
-					IW_AUTH_WPA_VERSION_WPA2);
-			eh_gconf_client_unset(we_data, "wep_auth_algorithm");
-			break;
-	}
-}
-
-
-
-void set_security_combo(gint option, gpointer data)
-{
-	GtkWidget	*combo;
-	WE_DATA		*we_data;
-
-	we_data = data;
-
-	// get the combo so we can set the value
-	combo = GTK_WIDGET( glade_xml_get_widget(we_data->editor_xml, 
-				"security_combo"));
-	g_return_if_fail(combo != NULL);
-
-	gtk_combo_box_set_active(GTK_COMBO_BOX(combo), option);
-	gtk_widget_set_sensitive(combo, TRUE);
-	update_security_widget(option, data);
-}
-
-
-
-void update_security_widget(gint option, gpointer data)
-{
-	WE_DATA		*we_data;
-	GtkWidget	*vbox;
-	GList		*children;
-	GtkWidget	*childWidget;
-
-	we_data = data;
-	g_return_if_fail(we_data != NULL);
-
-	vbox = GTK_WIDGET( glade_xml_get_widget(we_data->editor_xml, 
-				"swapout_vbox"));
-	g_return_if_fail(vbox != NULL);
-
-	// loop through and remove all of the existing children
-	for(children = gtk_container_get_children(GTK_CONTAINER(vbox));
-			children;
-			children = g_list_next(children))
-	{
-		GtkWidget *child = GTK_WIDGET(children->data);
-		gtk_container_remove(GTK_CONTAINER(vbox), child);
+		gnome_date_edit_set_time(GNOME_DATE_EDIT(widget), t);
+		gtk_widget_set_sensitive(widget, TRUE);
 	}
 
-	if(we_data->sub_xml != NULL)
-	{
-		g_object_unref(we_data->sub_xml);
-		we_data->sub_xml = NULL;
-	}
+	widget = glade_xml_get_widget(we_data->editor_xml, "bssids_modify");
+	gtk_widget_set_sensitive(widget, TRUE);
 
-	switch(option)
+
+	// ============ GET CIPHER PROPERTY AND SWITCH ============
+	// Get the cipher
+	we_cipher = eh_gconf_client_get_int(we_data, "we_cipher");
+
+	switch(we_cipher)
 	{
 		default:
-		case SEC_OPTION_NONE:
-			childWidget = NULL;
+		case IW_AUTH_CIPHER_NONE:		// no security
+			set_security_combo(SEC_OPTION_NONE, we_data);
 			break;
-		case SEC_OPTION_WEP64:
-		case SEC_OPTION_WEP128:
-			childWidget = get_wep_widget(we_data);
+		case IW_AUTH_CIPHER_WEP40:		// WEP 64bit
+			set_security_combo(SEC_OPTION_WEP64, we_data);
 			break;
-		case SEC_OPTION_WPA_PERSONAL:
-		case SEC_OPTION_WPA2_PERSONAL:
-			childWidget = get_wpa_personal_widget(we_data);
+		case IW_AUTH_CIPHER_WEP104:		// WEP 128bit
+			set_security_combo(SEC_OPTION_WEP128, we_data);
 			break;
-		case SEC_OPTION_WPA_ENTERPRISE:
-		case SEC_OPTION_WPA2_ENTERPRISE:
-			childWidget = get_wpa_enterprise_widget(we_data);
+		case NM_AUTH_TYPE_WPA_PSK_AUTO:	// WPA or WPA2 PERSONAL
+		case IW_AUTH_CIPHER_TKIP:
+		case IW_AUTH_CIPHER_CCMP:
+			{
+				wpa_version = eh_gconf_client_get_int(we_data, 
+						"wpa_psk_wpa_version");
+				switch(wpa_version)
+				{
+					case IW_AUTH_WPA_VERSION_WPA:
+						set_security_combo(SEC_OPTION_WPA_PERSONAL, we_data);
+						break;
+					default:
+					case IW_AUTH_WPA_VERSION_WPA2:
+						set_security_combo(SEC_OPTION_WPA2_PERSONAL, we_data);
+						break;
+				}
+				break;
+			}
+		case NM_AUTH_TYPE_WPA_EAP:		// WPA or WPA2 Enterprise
+			{
+				wpa_version = eh_gconf_client_get_int(we_data, 
+						"wpa_eap_wpa_version");
+				switch(wpa_version)
+				{
+					case IW_AUTH_WPA_VERSION_WPA:
+						set_security_combo(SEC_OPTION_WPA_ENTERPRISE, we_data);
+						break;
+					default:
+					case IW_AUTH_WPA_VERSION_WPA2:
+						set_security_combo(SEC_OPTION_WPA2_ENTERPRISE, we_data);
+						break;
+				}
+				break;
+			}
+		case NM_AUTH_TYPE_LEAP:
+			set_security_combo(SEC_OPTION_LEAP, we_data);
 			break;
 	}
-
-	if(childWidget != NULL)
-		gtk_container_add(GTK_CONTAINER(vbox), childWidget);
 }
 
+static void
+network_selection_changed_cb (GtkTreeSelection *selection, gpointer data)
+{
+	GtkTreeModel		*model;
+	GtkTreeIter			iter;
+	WE_DATA				*we_data;
 
+	we_data = data;
 
-void connect_signal_handlers(WE_DATA *we_data, gboolean connect)
-{
-	if(g_signal_handler_is_connected(G_OBJECT(we_data->essid_entry), 
-				we_data->essid_shid))
-	{
-		g_signal_handler_disconnect(G_OBJECT(we_data->essid_entry), 
-				we_data->essid_shid);
-		we_data->essid_shid = 0;
-	}
-	if(g_signal_handler_is_connected(G_OBJECT(we_data->essid_entry), 
-				we_data->essid_focus_shid))
-	{
-		g_signal_handler_disconnect(G_OBJECT(we_data->essid_entry), 
-				we_data->essid_focus_shid);
-		we_data->essid_focus_shid = 0;
-	}
-	if(g_signal_handler_is_connected(G_OBJECT(we_data->security_combo), 
-				we_data->combo_shid))
-	{
-		g_signal_handler_disconnect(G_OBJECT(we_data->security_combo), 
-				we_data->combo_shid);
-		we_data->essid_shid = 0;
-	}
-	if(g_signal_handler_is_connected(G_OBJECT(we_data->stamp_editor), 
-				we_data->stamp_date_shid))
-	{
-		g_signal_handler_disconnect(G_OBJECT(we_data->stamp_editor), 
-				we_data->stamp_date_shid);
-		we_data->stamp_date_shid = 0;
-	}
-	if(g_signal_handler_is_connected(G_OBJECT(we_data->stamp_editor), 
-				we_data->stamp_time_shid))
+	if(!gtk_tree_selection_get_selected (selection, &model, &iter))
 	{
-		g_signal_handler_disconnect(G_OBJECT(we_data->stamp_editor), 
-				we_data->stamp_time_shid);
-		we_data->stamp_time_shid = 0;
+		update_dialog_for_current_network(we_data, FALSE);
+		return;
 	}
-	if(connect)
+
+	gtk_tree_model_get (model, &iter, WNTV_DATA_COLUMN, 
+			&(we_data->cur_gconf_dir), -1);
+
+	if(we_data->cur_gconf_dir != NULL)
 	{
-		we_data->essid_shid = g_signal_connect(
-				G_OBJECT(we_data->essid_entry), "activate", 
-				GTK_SIGNAL_FUNC (essid_entry_changed), we_data);
-		we_data->essid_focus_shid = g_signal_connect(
-				G_OBJECT(we_data->essid_entry), "focus-out-event", 
-				GTK_SIGNAL_FUNC (essid_entry_focus_lost), we_data);
-		we_data->combo_shid = g_signal_connect(
-				G_OBJECT(we_data->security_combo), "changed", 
-				GTK_SIGNAL_FUNC (security_combo_changed), we_data);
-		we_data->stamp_date_shid = g_signal_connect(
-				G_OBJECT(we_data->stamp_editor), "date-changed", 
-				GTK_SIGNAL_FUNC (time_stamp_changed), we_data);
-		we_data->stamp_time_shid = g_signal_connect(
-				G_OBJECT(we_data->stamp_editor), "time-changed", 
-				GTK_SIGNAL_FUNC (time_stamp_changed), we_data);
+		connect_signal_handlers(we_data, FALSE);
+		update_dialog_for_current_network(we_data, TRUE);
+		connect_signal_handlers(we_data, TRUE);
 	}
+	else
+		update_dialog_for_current_network(we_data, FALSE);
 }
 
-
-void bssids_button_clicked_cb(GtkButton *button, gpointer user_data)
+static void
+bssids_button_clicked_cb (GtkButton *button, gpointer user_data)
 {
 	WE_DATA				*we_data;
 	GtkTreeSelection	*selection;
@@ -1035,7 +994,7 @@
 	widget = glade_xml_get_widget(we_data->editor_xml,
 			"bssids_entry");
 
-	if(run_bssid_editor(we_data->window, key))
+	if(run_bssid_editor(we_data->glade_file, we_data->window, key))
 	{
 		values = gconf_client_get_list(we_data->gconf_client, key, 
 				GCONF_VALUE_STRING, &err);
@@ -1077,98 +1036,89 @@
 	g_free(key);
 }
 
-
-
-void time_stamp_changed(GnomeDateEdit *dateedit, gpointer user_data)
+static WE_DATA *
+get_editor (void)
 {
-	WE_DATA				*we_data;
-	GtkTreeSelection	*selection;
-	gchar				*key = NULL;
-	GtkTreeIter			iter;
-	GtkTreeModel		*model;
-	gchar				*gconf_path;
-	GError 				*err = NULL;
-	time_t				t;
-
-	we_data = user_data;
-
-	selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (we_data->treeview));
-	if(!gtk_tree_selection_get_selected (selection, &model, &iter))
-		return;
-
-	gtk_tree_model_get (model, &iter, WNTV_DATA_COLUMN, &gconf_path, -1);
-	if(gconf_path == NULL)
-		return;
+	WE_DATA *we_data;
+	GtkTreeSelection *select;
+	GtkWidget *widget;
+
+	we_data = g_new0 (WE_DATA, 1);
+	
+	we_data->glade_file = g_build_filename (GLADEDIR, "applet.glade", NULL);
+	if (!g_file_test (we_data->glade_file, G_FILE_TEST_IS_REGULAR)) {
+		g_print("Error loading glade file!\n");
+		g_free (we_data->glade_file);
+		return NULL;
+	}
 
-	key = g_strdup_printf("%s/timestamp", gconf_path);
+	we_data->editor_xml = glade_xml_new (we_data->glade_file, 
+			"wireless_editor", NULL);
 
-	t = gnome_date_edit_get_time(dateedit);
+	we_data->window = glade_xml_get_widget (we_data->editor_xml, 
+			"wireless_editor");
 
-	gconf_client_set_int(we_data->gconf_client, key, t, NULL);
+	we_data->gconf_client = gconf_client_get_default();
 
-	gconf_client_suggest_sync(we_data->gconf_client, &err);
+	g_signal_connect_swapped (we_data->window, "delete_event", 
+			G_CALLBACK (quit_editor), we_data);
 
-	g_free(key);
-}
+	widget = glade_xml_get_widget(we_data->editor_xml, "quit_nm_editor");
 
+	g_signal_connect_swapped (widget, "activate", 
+			G_CALLBACK (quit_editor), we_data);
 
 
-void network_remove_button_clicked_cb(GtkButton *button, gpointer user_data)
-{
-	WE_DATA		*we_data;
-	GtkTreeSelection	*selection;
-	GError				*err = NULL;
-	GtkTreeIter			iter;
-	GtkTreeIter			childIter;
-	GtkTreeModel		*model;
-	GtkListStore		*store;
-	gchar				*gconf_path;
-	GSList				*gconf_entries;
+	widget = glade_xml_get_widget(we_data->editor_xml, "about_nm_editor");
 
-	we_data = (WE_DATA *)user_data;
+	g_signal_connect_swapped (widget, "activate", 
+			G_CALLBACK (about_editor_cb), we_data->window);
 
-	selection = gtk_tree_view_get_selection (
-			GTK_TREE_VIEW (we_data->treeview));
+	we_data->treeview = glade_xml_get_widget(we_data->editor_xml, 
+			"wireless_treeview");
 
-	if(!gtk_tree_selection_get_selected (selection, &model, &iter))
-		return;
+	select = gtk_tree_view_get_selection (GTK_TREE_VIEW (we_data->treeview));
+	gtk_tree_selection_set_mode (select, GTK_SELECTION_SINGLE);
 
-	gtk_tree_model_get (model, &iter, WNTV_DATA_COLUMN, &gconf_path, -1);
-	if(gconf_path == NULL)
-		return;
+	g_signal_connect (G_OBJECT (select), "changed",
+			G_CALLBACK (network_selection_changed_cb), we_data);
 
-	err = NULL;
-	gconf_entries = gconf_client_all_entries(we_data->gconf_client,
-			gconf_path,
-			&err);
+	we_data->essid_entry = glade_xml_get_widget(we_data->editor_xml, 
+			"essid_entry");
+	we_data->security_combo = glade_xml_get_widget(we_data->editor_xml, 
+			"security_combo");
+	we_data->stamp_editor = glade_xml_get_widget(we_data->editor_xml, 
+			"lastused_dateedit");
+	we_data->remove_button = glade_xml_get_widget(we_data->editor_xml, 
+			"remove_button");
 
-	while (gconf_entries)
-	{
-		GConfEntry	*gconf_entry;
+	widget = glade_xml_get_widget(we_data->editor_xml, "bssids_modify");
 
-		gconf_entry = gconf_entries->data;
+	g_signal_connect (G_OBJECT (widget), "clicked",
+			G_CALLBACK (bssids_button_clicked_cb), we_data);
 
-		gconf_client_unset(we_data->gconf_client,
-				gconf_entry->key,
-				&err);
+	g_signal_connect (G_OBJECT (we_data->remove_button), "clicked",
+			G_CALLBACK (network_remove_button_clicked_cb), we_data);
 
-		gconf_entry_free(gconf_entry);
-		gconf_entries = g_slist_delete_link (gconf_entries, gconf_entries);
-	}
+	g_idle_add (setup_dialog_idle, we_data);
 
-	gconf_client_suggest_sync(we_data->gconf_client, &err);
+	return we_data;
+}
 
-	// now update the data in the treeview
-	store = GTK_LIST_STORE(gtk_tree_model_filter_get_model(
-				GTK_TREE_MODEL_FILTER(model)));
+int
+main (int argc, char **argv)
+{
+	WE_DATA *we_data;
 
-	gtk_tree_model_filter_convert_iter_to_child_iter(
-			GTK_TREE_MODEL_FILTER(model),
-			&childIter,
-			&iter);
+	gnome_program_init (PACKAGE, VERSION, LIBGNOMEUI_MODULE, argc, argv,
+					GNOME_PARAM_NONE, GNOME_PARAM_NONE);
 
-	gtk_list_store_remove ( store, &childIter);
+	we_data = get_editor ();
+	if (we_data) {
+		gtk_widget_show_all (we_data->window);
+		gtk_main ();
+		return 0; 
+	}
 
+	return -1; 
 }
-
-

Modified: branches/network-manager-applet-0-6/editor/editor-gconf-helper.c
==============================================================================
--- branches/network-manager-applet-0-6/editor/editor-gconf-helper.c	(original)
+++ branches/network-manager-applet-0-6/editor/editor-gconf-helper.c	Tue Feb 19 22:13:14 2008
@@ -40,14 +40,15 @@
 #include "editor-gconf-helper.h"
 
 
-void eh_gconf_client_set_string(WE_DATA *we_data, gchar *subkey, gchar *value)
+void
+eh_gconf_client_set_string (WE_DATA *we_data, gchar *subkey, const gchar *value)
 {
-	gchar 	*key;
+	gchar *key;
 
-	key = g_strdup_printf("%s/%s", we_data->cur_gconf_dir, subkey);
-	gconf_client_set_string(we_data->gconf_client, key, value, NULL);
-	gconf_client_suggest_sync(we_data->gconf_client, NULL);
-	g_free(key);
+	key = g_strdup_printf ("%s/%s", we_data->cur_gconf_dir, subkey);
+	gconf_client_set_string (we_data->gconf_client, key, value, NULL);
+	gconf_client_suggest_sync (we_data->gconf_client, NULL);
+	g_free (key);
 }
 
 gchar *eh_gconf_client_get_string(WE_DATA *we_data, gchar *subkey)

Modified: branches/network-manager-applet-0-6/editor/editor-gconf-helper.h
==============================================================================
--- branches/network-manager-applet-0-6/editor/editor-gconf-helper.h	(original)
+++ branches/network-manager-applet-0-6/editor/editor-gconf-helper.h	Tue Feb 19 22:13:14 2008
@@ -43,7 +43,7 @@
 
 #include "editor-app.h"
 
-void eh_gconf_client_set_string(WE_DATA *we_data, gchar *subkey, gchar *value);
+void eh_gconf_client_set_string(WE_DATA *we_data, gchar *subkey, const gchar *value);
 gchar *eh_gconf_client_get_string(WE_DATA *we_data, gchar *subkey);
 void eh_gconf_client_set_int(WE_DATA *we_data, gchar *subkey, gint value);
 gint eh_gconf_client_get_int(WE_DATA *we_data, gchar *subkey);

Added: branches/network-manager-applet-0-6/editor/widget-wso-leap.c
==============================================================================
--- (empty file)
+++ branches/network-manager-applet-0-6/editor/widget-wso-leap.c	Tue Feb 19 22:13:14 2008
@@ -0,0 +1,206 @@
+/* -*- Mode: C; tab-width: 5; indent-tabs-mode: t; c-basic-offset: 5 -*- */
+
+/*
+ * 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 2006 Novell, Inc.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <string.h>
+#include <gtk/gtk.h>
+#include <glib/gi18n.h>
+#include <libgnomeui/libgnomeui.h>
+#include <libgnome/libgnome.h>
+
+#if !GTK_CHECK_VERSION(2,6,0)
+#include <gnome.h>
+#endif
+
+#include <glade/glade.h>
+#include <gconf/gconf-client.h>
+#include <NetworkManager.h>
+#include "widget-wso.h"
+#include "libnma/libnma.h"
+
+static void
+key_mgmt_changed (GtkComboBox *combo, gpointer data)
+{
+	GtkTreeIter iter;
+
+	if (gtk_combo_box_get_active_iter (combo, &iter)) {
+		GtkTreeModel *model;
+		char *value;
+
+		model = gtk_combo_box_get_model (combo);
+		gtk_tree_model_get (model, &iter, LEAP_KEY_MGMT_VALUE_COL, &value, -1);
+
+		eh_gconf_client_set_string ((WE_DATA *) data, "leap_key_mgmt", value);
+		g_free (value);
+	}
+}
+
+static void
+username_changed (GtkEntry *widget, gpointer data)
+{
+	WE_DATA *we_data = (WE_DATA *) data;
+	const gchar *strValue;
+
+	strValue = gtk_entry_get_text (widget);
+	if (strValue)
+		eh_gconf_client_set_string (we_data, "leap_username", strValue);
+}
+
+static gboolean
+username_entry_focus_lost (GtkWidget *widget, GdkEventFocus *event, gpointer data)
+{
+	username_changed (GTK_ENTRY (widget), data);
+	return FALSE;
+}
+
+static void
+show_password_toggled (GtkToggleButton *button, gpointer data)
+{
+	WE_DATA *we_data = (WE_DATA *) data;
+	GtkWidget *widget;
+
+	widget = glade_xml_get_widget (we_data->sub_xml, "leap_password_entry");
+
+	if (gtk_toggle_button_get_active (button)) {
+		gchar *key;
+		GnomeKeyringResult kresult;
+
+		kresult = get_key_from_keyring (we_data->essid_value, &key);
+		if (kresult == GNOME_KEYRING_RESULT_OK || kresult == GNOME_KEYRING_RESULT_NO_SUCH_KEYRING) {
+			gtk_widget_set_sensitive (widget, TRUE);
+
+			if (key) {
+				gtk_entry_set_text (GTK_ENTRY (widget), key);
+				g_free (key);
+			}
+		} else
+			gtk_toggle_button_set_active (button, FALSE);
+
+		if (kresult == GNOME_KEYRING_RESULT_DENIED)
+			gtk_entry_set_text (GTK_ENTRY (widget), _("Unable to read key"));
+	} else {
+		gtk_widget_set_sensitive (widget, FALSE);
+		gtk_entry_set_text (GTK_ENTRY (widget), "");
+	}
+}
+
+static void
+password_changed (GtkButton *button, gpointer user_data)
+{
+	WE_DATA *we_data = (WE_DATA *) user_data;
+	GladeXML			*glade_xml;
+	GtkWidget			*dialog;
+	GtkWindow			*parentWindow;
+	gint result;
+
+	glade_xml = glade_xml_new (we_data->glade_file, "set_password_dialog", NULL);
+	dialog = glade_xml_get_widget (glade_xml, "set_password_dialog");
+
+	parentWindow = GTK_WINDOW (gtk_widget_get_ancestor (GTK_WIDGET (button), GTK_TYPE_WINDOW));
+	gtk_window_set_transient_for (GTK_WINDOW (dialog), parentWindow);
+
+	result = gtk_dialog_run (GTK_DIALOG (dialog));
+	if (result == GTK_RESPONSE_OK) {
+		GtkWidget *entry;
+
+		const gchar *key;
+		GnomeKeyringResult kresult;
+
+		entry = glade_xml_get_widget (glade_xml, "leap_password_entry");
+		key = gtk_entry_get_text (GTK_ENTRY (entry));
+		if (key) {
+			kresult = set_key_in_keyring (we_data->essid_value, key);
+			if (kresult != GNOME_KEYRING_RESULT_OK) {
+				GtkWidget *errorDialog = gtk_message_dialog_new (parentWindow,
+													    GTK_DIALOG_DESTROY_WITH_PARENT,
+													    GTK_MESSAGE_ERROR,
+													    GTK_BUTTONS_CLOSE,
+													    _("Unable to set password"));
+				gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (errorDialog),
+												  _("There was a problem storing the password in the gnome keyring. Error 0x%02X."),
+												  (int) kresult);
+
+				gtk_dialog_run (GTK_DIALOG (errorDialog));
+				gtk_widget_destroy (errorDialog);
+			}
+		}
+	}
+
+	gtk_widget_destroy (dialog);
+	g_object_unref (glade_xml);
+}
+
+GtkWidget *
+get_leap_widget (WE_DATA *we_data)
+{
+	GtkWidget *main_widget;
+	GtkWidget	*widget;
+	char *username;
+	char *key_mgmt;
+	GtkTreeModel *tree_model;
+	GtkTreeIter iter;
+
+	we_data->sub_xml = glade_xml_new (we_data->glade_file, "leap_notebook", NULL);
+	if (!we_data->sub_xml)
+		return NULL;
+
+	main_widget = glade_xml_get_widget (we_data->sub_xml, "leap_notebook");
+	if (!main_widget)
+		return NULL;
+
+	widget = glade_xml_get_widget (we_data->sub_xml, "leap_show_password");
+	g_signal_connect (widget, "toggled", G_CALLBACK (show_password_toggled), we_data);
+
+	/* Username */
+	widget = glade_xml_get_widget (we_data->sub_xml, "leap_username_entry");
+	username = eh_gconf_client_get_string (we_data, "leap_username");
+	if (username) {
+		gtk_entry_set_text (GTK_ENTRY (widget), username);
+		g_free (username);
+	} else
+		gtk_entry_set_text (GTK_ENTRY (widget), "");
+
+	g_signal_connect (widget, "activate", GTK_SIGNAL_FUNC (username_changed), we_data);
+	g_signal_connect (widget, "focus-out-event", GTK_SIGNAL_FUNC (username_entry_focus_lost), we_data);
+
+	/* Set password */
+	widget = glade_xml_get_widget (we_data->sub_xml, "leap_set_password");
+	gtk_widget_show (widget);
+	g_signal_connect (widget, "clicked", GTK_SIGNAL_FUNC (password_changed), we_data);
+
+	/* Key management combo box */
+	widget = glade_xml_get_widget (we_data->sub_xml, "leap_key_mgmt_combobox");
+	tree_model = wso_leap_create_key_mgmt_model ();
+	gtk_combo_box_set_model (GTK_COMBO_BOX (widget), tree_model);
+	g_object_unref (tree_model);
+
+	key_mgmt = eh_gconf_client_get_string (we_data, "leap_key_mgmt");
+	if (key_mgmt && wso_leap_key_mgmt_get_iter (tree_model, key_mgmt, &iter))
+		gtk_combo_box_set_active_iter (GTK_COMBO_BOX (widget), &iter);
+
+	g_free (key_mgmt);
+
+	g_signal_connect (widget, "changed", GTK_SIGNAL_FUNC (key_mgmt_changed), we_data);
+
+	return main_widget;
+}

Modified: branches/network-manager-applet-0-6/editor/widget-wso-wep.c
==============================================================================
--- branches/network-manager-applet-0-6/editor/widget-wso-wep.c	(original)
+++ branches/network-manager-applet-0-6/editor/widget-wso-wep.c	Tue Feb 19 22:13:14 2008
@@ -1,3 +1,5 @@
+/* -*- Mode: C; tab-width: 5; indent-tabs-mode: t; c-basic-offset: 5 -*- */
+
 /* Wireless Security Option WEP Widget
  *
  * Calvin Gaisford <cgaisford novell com>
@@ -39,193 +41,111 @@
 
 #include "widget-wso.h"
 
-void wep_auth_method_changed(GtkWidget *combo, gpointer data);
-void wep_show_toggled(GtkToggleButton *button, gpointer data);
-void set_key_button_clicked_cb(GtkButton *button, gpointer user_data);
-
-GtkWidget *get_wep_widget(WE_DATA *we_data)
-{
-	GtkWidget			*main_widget = NULL;
-	GtkWidget			*widget = NULL;
-	gint				intValue;
-
-	we_data->sub_xml = glade_xml_new(we_data->glade_file, 
-									"wep_notebook", NULL);
-	if(we_data->sub_xml == NULL)
-		return NULL;
-
-	main_widget = glade_xml_get_widget(we_data->sub_xml, "wep_notebook");
-	if(main_widget != NULL)
-		g_object_ref(G_OBJECT(main_widget));
-
-
-	widget = glade_xml_get_widget(we_data->sub_xml, "wep_show_checkbutton");
-	g_signal_connect (G_OBJECT (widget), "toggled",
-	                  G_CALLBACK (wep_show_toggled), we_data);
-
-	widget = glade_xml_get_widget(we_data->sub_xml, "auth_method_combo");
-	intValue = eh_gconf_client_get_int(we_data, "wep_auth_algorithm");
-	if(intValue == IW_AUTH_ALG_SHARED_KEY)
-		gtk_combo_box_set_active(GTK_COMBO_BOX(widget), 1);
-	else
-		gtk_combo_box_set_active(GTK_COMBO_BOX(widget), 0);
-		
-	g_signal_connect( G_OBJECT(widget), "changed", 
-			GTK_SIGNAL_FUNC (wep_auth_method_changed), we_data);
-
-	widget = glade_xml_get_widget(we_data->sub_xml, "wep_key_label");
-	gtk_label_set_text(GTK_LABEL(widget), _("Key"));
-
-	widget = glade_xml_get_widget(we_data->sub_xml, "wep_show_checkbutton");
-	gtk_button_set_label(GTK_BUTTON(widget), _("_Show Key"));
-
-	widget = glade_xml_get_widget(we_data->sub_xml, "wep_set_key_button");
-	g_signal_connect (G_OBJECT (widget), "clicked",
-	                  G_CALLBACK (set_key_button_clicked_cb), we_data);
-
-	return main_widget;
-}
-
-
-void wep_auth_method_changed(GtkWidget *combo, gpointer data)
+static void
+wep_auth_method_changed (GtkComboBox *combo, gpointer data)
 {
-	WE_DATA *we_data;
+	WE_DATA *we_data = (WE_DATA *) data;
 	gint	intValue;
 
-	we_data = data;
-
-	intValue = gtk_combo_box_get_active(GTK_COMBO_BOX(combo));
-	if(intValue == 0)
-		eh_gconf_client_set_int(we_data, "wep_auth_algorithm",
-									IW_AUTH_ALG_OPEN_SYSTEM);
+	intValue = gtk_combo_box_get_active (combo);
+	if (intValue == 0)
+		eh_gconf_client_set_int (we_data, "wep_auth_algorithm", IW_AUTH_ALG_OPEN_SYSTEM);
 	else
-		eh_gconf_client_set_int(we_data, "wep_auth_algorithm", 
-									IW_AUTH_ALG_SHARED_KEY);
+		eh_gconf_client_set_int(we_data, "wep_auth_algorithm", IW_AUTH_ALG_SHARED_KEY);
 }
 
-
-
-void wep_show_toggled(GtkToggleButton *button, gpointer data)
+static void
+wep_show_toggled (GtkToggleButton *button, gpointer data)
 {
-	GtkWidget *widget;
-	WE_DATA *we_data;
-
-	we_data = data;
+	WE_DATA *we_data = (WE_DATA *) data;
+	GtkEntry *entry;
 
-	widget = glade_xml_get_widget(we_data->sub_xml, "wep_key_entry");
+	entry = GTK_ENTRY (glade_xml_get_widget (we_data->sub_xml, "wep_key_entry"));
 
-	if(gtk_toggle_button_get_active(button))
-	{
+	if (gtk_toggle_button_get_active (button)) {
 		gchar *key;
 		GnomeKeyringResult kresult;
 
-		kresult = get_key_from_keyring(we_data->essid_value, &key);
-		if(kresult == GNOME_KEYRING_RESULT_OK ||
-				kresult == GNOME_KEYRING_RESULT_NO_SUCH_KEYRING)
-		{
-			gtk_widget_set_sensitive(widget, TRUE);
-
-			if(key != NULL)
-			{
-				gtk_entry_set_text(GTK_ENTRY(widget), key);
-				g_free(key);
+		kresult = get_key_from_keyring (we_data->essid_value, &key);
+		if (kresult == GNOME_KEYRING_RESULT_OK || kresult == GNOME_KEYRING_RESULT_NO_SUCH_KEYRING) {
+			gtk_widget_set_sensitive (GTK_WIDGET (entry), TRUE);
+
+			if (key) {
+				gtk_entry_set_text (entry, key);
+				g_free (key);
 			}
-		}
-		else
-			gtk_toggle_button_set_active(button, FALSE);
-		if(kresult == GNOME_KEYRING_RESULT_DENIED)
-		{
-			gtk_entry_set_text(GTK_ENTRY(widget), _("Unable to read key"));
-		}
-	}
-	else
-	{
-		gtk_widget_set_sensitive(widget, FALSE);
-		gtk_entry_set_text(GTK_ENTRY(widget), "");
+		} else
+			gtk_toggle_button_set_active (button, FALSE);
+
+		if (kresult == GNOME_KEYRING_RESULT_DENIED)
+			gtk_entry_set_text (entry, _("Unable to read key"));
+	} else {
+		gtk_widget_set_sensitive (GTK_WIDGET (entry), FALSE);
+		gtk_entry_set_text (entry, "");
 	}
 }
 
-
-void set_key_button_clicked_cb(GtkButton *button, gpointer user_data)
+static void
+set_key_button_clicked_cb (GtkButton *button, gpointer user_data)
 {
-	GladeXML			*glade_xml;
-	GtkWidget			*dialog;
-	GtkWidget			*keyEntry;
-	GtkWidget			*formatCombo;
-	WE_DATA				*we_data;
-	GtkListStore      *store;
-	GtkTreeIter			iter;
-	GtkWindow			*parentWindow;
-
-	we_data = user_data;
-
-	glade_xml = glade_xml_new(we_data->glade_file, 
-									"wep_key_editor", NULL);
-
-
-	dialog = glade_xml_get_widget (glade_xml, "wep_key_editor");
-
-	keyEntry = glade_xml_get_widget (glade_xml, "wep_key_editor_entry");
-
-	formatCombo = glade_xml_get_widget (glade_xml, "wep_key_editor_combo");
-
-	parentWindow = GTK_WINDOW(gtk_widget_get_ancestor(
-					GTK_WIDGET(button), GTK_TYPE_WINDOW));
+	WE_DATA *we_data = (WE_DATA *) user_data;
+	GladeXML *glade_xml;
+	GtkListStore *store;
+	GtkTreeIter iter;
+	GtkWindow *parent;
+	GtkWidget *widget;
+	gint we_cipher;
+	gint result;
 
-	gtk_window_set_transient_for(GTK_WINDOW(dialog), parentWindow);
+	glade_xml = glade_xml_new (we_data->glade_file, "wep_key_editor", NULL);
 
 	store = gtk_list_store_new (1, G_TYPE_STRING);
 
 	gtk_list_store_append (store, &iter);
-	gtk_list_store_set (store, &iter, 
-						0, _("Hex"), 
-						-1);
+	gtk_list_store_set (store, &iter, 0, _("Hex"), -1);
 
 	gtk_list_store_append (store, &iter);
-	gtk_list_store_set (store, &iter, 
-						0, _("ASCII"), 
-						-1);
-
-	gint we_cipher = eh_gconf_client_get_int(we_data, "we_cipher");
-	if(we_cipher == IW_AUTH_CIPHER_WEP104)
-	{
+	gtk_list_store_set (store, &iter, 0, _("ASCII"), -1);
+
+	we_cipher = eh_gconf_client_get_int (we_data, "we_cipher");
+	if (we_cipher == IW_AUTH_CIPHER_WEP104) {
 		gtk_list_store_append (store, &iter);
-		gtk_list_store_set (store, &iter, 
-				0, _("Passphrase"), 
-				-1);
+		gtk_list_store_set (store, &iter, 0, _("Passphrase"), -1);
 	}
 
-	gtk_combo_box_set_model(GTK_COMBO_BOX(formatCombo), 
-									GTK_TREE_MODEL (store));
-
-	gtk_combo_box_set_active(GTK_COMBO_BOX(formatCombo), 0);
-
+	widget = glade_xml_get_widget (glade_xml, "wep_key_editor_combo");
+	gtk_combo_box_set_model (GTK_COMBO_BOX (widget), GTK_TREE_MODEL (store));
 	g_object_unref (store);
+	gtk_combo_box_set_active (GTK_COMBO_BOX (widget), 0);
 
-	gint result = gtk_dialog_run (GTK_DIALOG (dialog));
+	parent = GTK_WINDOW (gtk_widget_get_ancestor (GTK_WIDGET (button), GTK_TYPE_WINDOW));
 
-	if(result == GTK_RESPONSE_OK)
-	{
+	widget = glade_xml_get_widget (glade_xml, "wep_key_editor");
+	gtk_window_set_transient_for (GTK_WINDOW (widget), parent);
+	result = gtk_dialog_run (GTK_DIALOG (widget));
+	gtk_widget_hide (widget);
+
+	if (result == GTK_RESPONSE_OK) {
 		const gchar *key;
 		GnomeKeyringResult kresult;
 
-		key = gtk_entry_get_text(GTK_ENTRY(keyEntry));
+		widget = (glade_xml_get_widget (glade_xml, "wep_key_editor_entry"));
+		key = gtk_entry_get_text (GTK_ENTRY (widget));
+
+		/* FIXME: Nothing is done with the wep_key_editor_combo value ????? */
 
-		if(key != NULL)
-		{
+		if (key) {
 			kresult = set_key_in_keyring (we_data->essid_value, key);
 
-			if(kresult != GNOME_KEYRING_RESULT_OK)
-			{
-				GtkWidget *errorDialog = gtk_message_dialog_new (parentWindow,
-						GTK_DIALOG_DESTROY_WITH_PARENT,
-						GTK_MESSAGE_ERROR,
-						GTK_BUTTONS_CLOSE,
-						_("Unable to set key"));
-				gtk_message_dialog_format_secondary_text (
-						GTK_MESSAGE_DIALOG (errorDialog),
-						_("There was a problem setting the wireless key to the gnome keyring. Error 0x%02X."),
-						(int)kresult);
+			if (kresult != GNOME_KEYRING_RESULT_OK) {
+				GtkWidget *errorDialog = gtk_message_dialog_new (parent,
+													    GTK_DIALOG_DESTROY_WITH_PARENT,
+													    GTK_MESSAGE_ERROR,
+													    GTK_BUTTONS_CLOSE,
+													    _("Unable to set key"));
+				gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (errorDialog),
+												  _("There was a problem setting the wireless key to the gnome keyring. Error 0x%02X."),
+												  (int) kresult);
 
 				gtk_dialog_run (GTK_DIALOG (errorDialog));
 				gtk_widget_destroy (errorDialog);
@@ -233,8 +153,39 @@
 		}
 	}
 
-	gtk_widget_destroy(dialog);
-	g_free(glade_xml);
+	g_object_unref (glade_xml);
 }
 
+GtkWidget *
+get_wep_widget (WE_DATA *we_data)
+{
+	GtkWidget *main_widget;
+	GtkWidget *widget;
+	gint intValue;
+
+	we_data->sub_xml = glade_xml_new (we_data->glade_file, "wep_key_notebook", NULL);
+	if (!we_data->sub_xml)
+		return NULL;
+
+	main_widget = glade_xml_get_widget (we_data->sub_xml, "wep_key_notebook");
+	if (!main_widget)
+		return NULL;
+
+	widget = glade_xml_get_widget (we_data->sub_xml, "show_checkbutton");
+	g_signal_connect (widget, "toggled", G_CALLBACK (wep_show_toggled), we_data);
 
+	widget = glade_xml_get_widget (we_data->sub_xml, "auth_method_combo");
+	intValue = eh_gconf_client_get_int (we_data, "wep_auth_algorithm");
+	if (intValue == IW_AUTH_ALG_SHARED_KEY)
+		gtk_combo_box_set_active (GTK_COMBO_BOX (widget), 1);
+	else
+		gtk_combo_box_set_active (GTK_COMBO_BOX (widget), 0);
+
+	g_signal_connect (widget, "changed", GTK_SIGNAL_FUNC (wep_auth_method_changed), we_data);
+
+	widget = glade_xml_get_widget (we_data->sub_xml, "wep_set_key");
+	gtk_widget_show (widget);
+	g_signal_connect (widget, "clicked", G_CALLBACK (set_key_button_clicked_cb), we_data);
+
+	return main_widget;
+}

Modified: branches/network-manager-applet-0-6/editor/widget-wso-wpa-enterprise.c
==============================================================================
--- branches/network-manager-applet-0-6/editor/widget-wso-wpa-enterprise.c	(original)
+++ branches/network-manager-applet-0-6/editor/widget-wso-wpa-enterprise.c	Tue Feb 19 22:13:14 2008
@@ -1,3 +1,5 @@
+/* -*- Mode: C; tab-width: 5; indent-tabs-mode: t; c-basic-offset: 5 -*- */
+
 /* Wireless Security Option WPA/WPA2 Enterprise Widget
  *
  * Calvin Gaisford <cgaisford novell com>
@@ -23,7 +25,6 @@
 #include <config.h>
 #endif
 
-
 #include <string.h>
 #include <gtk/gtk.h>
 #include <glib/gi18n.h>
@@ -37,418 +38,158 @@
 #include <glade/glade.h>
 #include <gconf/gconf-client.h>
 #include <NetworkManager.h>
-
 #include "widget-wso.h"
+#include "libnma/libnma.h"
 
-void wpa_eap_eap_method_changed(GtkWidget *combo, gpointer data);
-void wpa_eap_key_type_changed(GtkWidget *combo, gpointer data);
-void wpa_eap_show_toggled(GtkToggleButton *button, gpointer data);
-void wpa_eap_private_key_changed(GtkWidget *button, gpointer data);
-void wpa_eap_client_key_changed(GtkWidget *button, gpointer data);
-void wpa_eap_ca_key_changed(GtkWidget *button, gpointer data);
-
-
-void wpa_eap_password_entry_changed(GtkEntry *password_entry, gpointer data);
-gboolean wpa_eap_password_entry_focus_lost(GtkWidget *widget,
-								GdkEventFocus *event, gpointer data);
-void wpa_eap_priv_password_entry_changed(GtkEntry *pass_entry, gpointer data);
-gboolean wpa_eap_priv_password_entry_focus_lost(GtkWidget *widget,
-								GdkEventFocus *event, gpointer data);
-
-void wpa_eap_identity_entry_changed(GtkEntry *widget, gpointer data);
-gboolean wpa_eap_identity_entry_focus_lost(GtkWidget *widget,
-								GdkEventFocus *event, gpointer data);
-void wpa_eap_anon_identity_entry_changed(GtkEntry *widget, gpointer data);
-gboolean wpa_eap_anon_identity_entry_focus_lost(GtkWidget *widget,
-								GdkEventFocus *event, gpointer data);
-
-GtkWidget *get_wpa_enterprise_widget(WE_DATA *we_data)
+static void
+wpa_eap_eap_method_changed (GtkComboBox *combo, gpointer data)
 {
-	GtkWidget			*main_widget = NULL;
-	GtkWidget			*widget = NULL;
-	gint				intValue;
-	gchar				*strValue;
+	GtkTreeIter iter;
 
-	we_data->sub_xml = glade_xml_new(we_data->glade_file, 
-									"wpa_eap_notebook", NULL);
-	if(we_data->sub_xml == NULL)
-		return NULL;
+	if (gtk_combo_box_get_active_iter (combo, &iter)) {
+		GtkTreeModel *model;
+		int value;
 
-	main_widget = glade_xml_get_widget(we_data->sub_xml, "wpa_eap_notebook");
-	if(main_widget != NULL)
-		g_object_ref(G_OBJECT(main_widget));
-
-
-	widget = glade_xml_get_widget(we_data->sub_xml, "show_checkbutton");
-	g_signal_connect (G_OBJECT (widget), "toggled",
-	                  G_CALLBACK (wpa_eap_show_toggled), we_data);
-
-
-	widget = glade_xml_get_widget(we_data->sub_xml, "wpa_eap_eap_method_combo");
-	intValue = eh_gconf_client_get_int(we_data, "wpa_eap_eap_method");
-	switch(intValue)
-	{
-		case NM_EAP_METHOD_MD5:
-			gtk_combo_box_set_active(GTK_COMBO_BOX(widget), 0);
-			break;
-		case NM_EAP_METHOD_MSCHAP:
-			gtk_combo_box_set_active(GTK_COMBO_BOX(widget), 1);
-			break;
-		case NM_EAP_METHOD_OTP:
-			gtk_combo_box_set_active(GTK_COMBO_BOX(widget), 2);
-			break;
-		case NM_EAP_METHOD_GTC:
-			gtk_combo_box_set_active(GTK_COMBO_BOX(widget), 3);
-			break;
-		default:
-		case NM_EAP_METHOD_PEAP:
-			gtk_combo_box_set_active(GTK_COMBO_BOX(widget), 4);
-			break;
-		case NM_EAP_METHOD_TLS:
-			gtk_combo_box_set_active(GTK_COMBO_BOX(widget), 5);
-			break;
-		case NM_EAP_METHOD_TTLS:
-			gtk_combo_box_set_active(GTK_COMBO_BOX(widget), 6);
-			break;
-	}
-	g_signal_connect( G_OBJECT(widget), "changed", 
-			GTK_SIGNAL_FUNC (wpa_eap_eap_method_changed), we_data);
-
-
-	widget = glade_xml_get_widget(we_data->sub_xml, "wpa_eap_key_type_combo");
-	intValue = eh_gconf_client_get_int(we_data, "wpa_eap_key_type");
-	switch(intValue)
-	{
-		default:
-		case NM_AUTH_TYPE_WPA_PSK_AUTO:
-			gtk_combo_box_set_active(GTK_COMBO_BOX(widget), 0);
-			break;
-		case NM_AUTH_TYPE_WPA_PSK_TKIP:
-			gtk_combo_box_set_active(GTK_COMBO_BOX(widget), 1);
-			break;
-		case NM_AUTH_TYPE_WPA_PSK_CCMP:
-			gtk_combo_box_set_active(GTK_COMBO_BOX(widget), 2);
-			break;
-		case NM_AUTH_TYPE_WPA_EAP:
-			gtk_combo_box_set_active(GTK_COMBO_BOX(widget), 3);
-			break;
-	}
-	g_signal_connect( G_OBJECT(widget), "changed", 
-			GTK_SIGNAL_FUNC (wpa_eap_key_type_changed), we_data);
-
-
-	widget = glade_xml_get_widget(we_data->sub_xml, "wpa_eap_identity_entry");
-	strValue = eh_gconf_client_get_string(we_data, "wpa_eap_identity");
-	if(strValue != NULL)
-	{
-		gtk_entry_set_text(GTK_ENTRY(widget), strValue);
-		g_free(strValue);
-	}
-	else
-		gtk_entry_set_text(GTK_ENTRY(widget), "");
-	g_signal_connect( G_OBJECT(widget), "activate", 
-					GTK_SIGNAL_FUNC (wpa_eap_identity_entry_changed), we_data);
-	g_signal_connect( G_OBJECT(widget), "focus-out-event", 
-						GTK_SIGNAL_FUNC (wpa_eap_identity_entry_focus_lost), 
-						we_data);
-
-	widget = glade_xml_get_widget(we_data->sub_xml, 
-									"wpa_eap_anon_identity_entry");
-	strValue = eh_gconf_client_get_string(we_data, "wpa_eap_anon_identity");
-	if(strValue != NULL)
-	{
-		gtk_entry_set_text(GTK_ENTRY(widget), strValue);
-		g_free(strValue);
-	}
-	else
-		gtk_entry_set_text(GTK_ENTRY(widget), "");
-	g_signal_connect( G_OBJECT(widget), "activate", 
-					GTK_SIGNAL_FUNC (wpa_eap_anon_identity_entry_changed), 
-					we_data);
-	g_signal_connect( G_OBJECT(widget), "focus-out-event", 
-					GTK_SIGNAL_FUNC (wpa_eap_anon_identity_entry_focus_lost), 
-					we_data);
-
-
-	widget = glade_xml_get_widget(we_data->sub_xml, 
-									"wpa_eap_private_key_file_chooser_button");
-	strValue = eh_gconf_client_get_string(we_data, "wpa_eap_private_key_file");
-	if(strValue != NULL)
-		gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(widget), strValue);
-	g_signal_connect( G_OBJECT(widget), "selection-changed", 
-			GTK_SIGNAL_FUNC (wpa_eap_private_key_changed), we_data);
-
-
-
-	widget = glade_xml_get_widget(we_data->sub_xml, 
-									"wpa_eap_client_cert_file_chooser_button");
-	strValue = eh_gconf_client_get_string(we_data, "wpa_eap_client_cert_file");
-	if(strValue != NULL)
-		gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(widget), strValue);
-	g_signal_connect( G_OBJECT(widget), "selection-changed", 
-			GTK_SIGNAL_FUNC (wpa_eap_client_key_changed), we_data);
-
-
-
-	widget = glade_xml_get_widget(we_data->sub_xml, 
-									"wpa_eap_ca_cert_file_chooser_button");
-	strValue = eh_gconf_client_get_string(we_data, "wpa_eap_ca_cert_file");
-	if(strValue != NULL)
-		gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(widget), strValue);
-	g_signal_connect( G_OBJECT(widget), "selection-changed", 
-			GTK_SIGNAL_FUNC (wpa_eap_ca_key_changed), we_data);
+		model = gtk_combo_box_get_model (combo);
+		gtk_tree_model_get (model, &iter, WPA_KEY_TYPE_CIPHER_COL, &value, -1);
 
-	return main_widget;
+		eh_gconf_client_set_int ((WE_DATA *) data, "wpa_eap_eap_method", value);
+	}
 }
 
-
-void wpa_eap_eap_method_changed(GtkWidget *combo, gpointer data)
+static void
+wpa_eap_key_type_changed (GtkComboBox *combo, gpointer data)
 {
-	WE_DATA *we_data;
-	gint	intValue;
+	GtkTreeIter iter;
+
+	if (gtk_combo_box_get_active_iter (combo, &iter)) {
+		GtkTreeModel *model;
+		int value;
 
-	we_data = data;
+		model = gtk_combo_box_get_model (combo);
+		gtk_tree_model_get (model, &iter, WPA_KEY_TYPE_CIPHER_COL, &value, -1);
 
-	intValue = gtk_combo_box_get_active(GTK_COMBO_BOX(combo));
-	switch(intValue)
-	{
-		case 0:
-			eh_gconf_client_set_int(we_data, "wpa_eap_eap_method", 
-												NM_EAP_METHOD_MD5);
-			break;
-		case 1:
-			eh_gconf_client_set_int(we_data, "wpa_eap_eap_method", 
-												NM_EAP_METHOD_MSCHAP);
-			break;
-		case 2:
-			eh_gconf_client_set_int(we_data, "wpa_eap_eap_method", 
-												NM_EAP_METHOD_OTP);
-			break;
-		case 3:
-			eh_gconf_client_set_int(we_data, "wpa_eap_eap_method", 
-												NM_EAP_METHOD_GTC);
-			break;
-		default:
-		case 4:
-			eh_gconf_client_set_int(we_data, "wpa_eap_eap_method", 
-												NM_EAP_METHOD_PEAP);
-			break;
-		case 5:
-			eh_gconf_client_set_int(we_data, "wpa_eap_eap_method", 
-												NM_EAP_METHOD_TLS);
-			break;
-		case 6:
-			eh_gconf_client_set_int(we_data, "wpa_eap_eap_method", 
-												NM_EAP_METHOD_TTLS);
-			break;
-	
+		eh_gconf_client_set_int ((WE_DATA *) data, "wpa_eap_key_type", value);
 	}
 }
 
-
-void wpa_eap_key_type_changed(GtkWidget *combo, gpointer data)
+static void
+wpa_eap_phase2_type_changed (GtkComboBox *combo, gpointer data)
 {
-	WE_DATA *we_data;
-	gint	intValue;
+	GtkTreeIter iter;
 
-	we_data = data;
+	if (gtk_combo_box_get_active_iter (combo, &iter)) {
+		GtkTreeModel *model;
+		int value;
 
-	intValue = gtk_combo_box_get_active(GTK_COMBO_BOX(combo));
-	switch(intValue)
-	{
-		default:
-		case 0:
-			eh_gconf_client_set_int(we_data, "wpa_eap_key_type", 
-												NM_AUTH_TYPE_WPA_PSK_AUTO);
-			break;
-		case 1:
-			eh_gconf_client_set_int(we_data, "wpa_eap_key_type", 
-												NM_AUTH_TYPE_WPA_PSK_TKIP);
-			break;
-		case 2:
-			eh_gconf_client_set_int(we_data, "wpa_eap_key_type", 
-												NM_AUTH_TYPE_WPA_PSK_CCMP);
-			break;
-		case 3:
-			eh_gconf_client_set_int(we_data, "wpa_eap_key_type", 
-												NM_AUTH_TYPE_WPA_EAP);
-			break;
+		model = gtk_combo_box_get_model (combo);
+		gtk_tree_model_get (model, &iter, WPA_EAP_VALUE_COL, &value, -1);
+
+		eh_gconf_client_set_int ((WE_DATA *) data, "wpa_eap_phase2_type", value);
 	}
 }
 
-
-void wpa_eap_private_key_changed(GtkWidget *button, gpointer data)
+static void
+wpa_eap_private_key_changed (GtkFileChooser *chooser, gpointer data)
 {
-	WE_DATA *we_data;
-	gchar	*strValue = NULL;
-
-	we_data = data;
+	WE_DATA *we_data = (WE_DATA *) data;
+	gchar *strValue;
 
-	strValue = gtk_file_chooser_get_filename(
-								GTK_FILE_CHOOSER(button));
-	if(strValue != NULL)
-		eh_gconf_client_set_string(we_data, "wpa_eap_private_key_file", 
-												strValue);
+	strValue = gtk_file_chooser_get_filename (chooser);
+	if (strValue) {
+		eh_gconf_client_set_string (we_data, "wpa_eap_private_key_file", strValue);
+		g_free (strValue);
+	}
 }
 
-
-void wpa_eap_client_key_changed(GtkWidget *button, gpointer data)
+static void
+wpa_eap_client_key_changed (GtkFileChooser *chooser, gpointer data)
 {
-	WE_DATA *we_data;
-	gchar	*strValue = NULL;
-
-	we_data = data;
+	WE_DATA *we_data = (WE_DATA *) data;
+	gchar *strValue;
 
-	strValue = gtk_file_chooser_get_filename(
-								GTK_FILE_CHOOSER(button));
-	if(strValue != NULL)
-		eh_gconf_client_set_string(we_data, "wpa_eap_client_cert_file", 
-												strValue);
+	strValue = gtk_file_chooser_get_filename (chooser);
+	if (strValue) {
+		eh_gconf_client_set_string (we_data, "wpa_eap_client_cert_file", strValue);
+		g_free (strValue);
+	}
 }
 
-
-void wpa_eap_ca_key_changed(GtkWidget *button, gpointer data)
+static void
+wpa_eap_ca_key_changed (GtkFileChooser *chooser, gpointer data)
 {
-	WE_DATA *we_data;
-	gchar	*strValue = NULL;
-
-	we_data = data;
+	WE_DATA *we_data = (WE_DATA *) data;
+	gchar *strValue;
 
-	strValue = gtk_file_chooser_get_filename(
-								GTK_FILE_CHOOSER(button));
-	if(strValue != NULL)
-		eh_gconf_client_set_string(we_data, "wpa_eap_ca_cert_file", 
-												strValue);
+	strValue = gtk_file_chooser_get_filename (chooser);
+	if (strValue) {
+		eh_gconf_client_set_string (we_data, "wpa_eap_ca_cert_file", strValue);
+		g_free (strValue);
+	}
 }
 
-void wpa_eap_show_toggled(GtkToggleButton *button, gpointer data)
+static void
+wpa_eap_password_entry_changed (GtkEntry *password_entry, gpointer data)
 {
-	GtkWidget *widget;
-	WE_DATA *we_data;
-	gint32	sid;
-	gchar *key = NULL;
-	GnomeKeyringResult kresult;
+	WE_DATA *we_data = (WE_DATA *) data;
+	const gchar *password;
 
-	we_data = data;
-
-	widget = glade_xml_get_widget(we_data->sub_xml, "wpa_eap_passwd_entry");
-	if(gtk_toggle_button_get_active(button))
-	{
-		kresult = get_eap_key_from_keyring(we_data->essid_value, &key);
-		if (key != NULL)
-		{
-			gtk_entry_set_text(GTK_ENTRY(widget), key);
-			g_free(key);
-		}
-		else
-			gtk_entry_set_text(GTK_ENTRY(widget), "");
-
-		gtk_widget_set_sensitive(widget, TRUE);
-		gtk_entry_set_editable(GTK_ENTRY(widget), TRUE);
+	password = gtk_entry_get_text (password_entry);
+	if (password) {
+		GnomeKeyringResult kresult;
 
-		sid = g_signal_connect( G_OBJECT(widget), "activate", 
-					GTK_SIGNAL_FUNC (wpa_eap_password_entry_changed), we_data);
-		g_object_set_data(G_OBJECT(widget), "password_activate_sid",
-						GINT_TO_POINTER(sid));
-		sid = g_signal_connect( G_OBJECT(widget), "focus-out-event", 
-						GTK_SIGNAL_FUNC (wpa_eap_password_entry_focus_lost), 
-						we_data);
-		g_object_set_data(G_OBJECT(widget), "password_focus_out_sid",
-						GINT_TO_POINTER(sid));
-	}
-	else
-	{
-		gtk_widget_set_sensitive(widget, FALSE);
-		gtk_entry_set_editable(GTK_ENTRY(widget), FALSE);
-		gtk_entry_set_text(GTK_ENTRY(widget), "");
-
-		sid = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(widget), 
-							"password_activate_sid"));
-		g_signal_handler_disconnect(G_OBJECT(widget), sid);
-		sid = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(widget), 
-							"password_focus_out_sid"));
-		g_signal_handler_disconnect(G_OBJECT(widget), sid);
-	}
+		kresult = set_eap_key_in_keyring (we_data->essid_value, password);
+		if (kresult != GNOME_KEYRING_RESULT_OK) {
+			GtkWindow *parentWindow;
+			GtkWidget *errorDialog;
 
+			parentWindow = GTK_WINDOW (gtk_widget_get_ancestor (GTK_WIDGET (password_entry), GTK_TYPE_WINDOW));
+			errorDialog = gtk_message_dialog_new (parentWindow,
+										   GTK_DIALOG_DESTROY_WITH_PARENT,
+										   GTK_MESSAGE_ERROR,
+										   GTK_BUTTONS_CLOSE,
+										   _("Unable to set password"));
+			gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (errorDialog),
+											  _("There was a problem storing the private password in the gnome keyring. Error 0x%02X."),
+											  (int) kresult);
 
-	widget = glade_xml_get_widget(we_data->sub_xml, 
-									"wpa_eap_private_key_passwd_entry");
-	if(gtk_toggle_button_get_active(button))
-	{
-		kresult = get_key_from_keyring(we_data->essid_value, &key);
-		if(key != NULL)
-		{
-			gtk_entry_set_text(GTK_ENTRY(widget), key);
-			g_free(key);
+			gtk_dialog_run (GTK_DIALOG (errorDialog));
+			gtk_widget_destroy (errorDialog);
 		}
-
-		gtk_widget_set_sensitive(widget, TRUE);
-		gtk_entry_set_editable(GTK_ENTRY(widget), TRUE);
-
-		sid = g_signal_connect( G_OBJECT(widget), "activate", 
-					GTK_SIGNAL_FUNC (wpa_eap_priv_password_entry_changed), 
-					we_data);
-		g_object_set_data(G_OBJECT(widget), "priv_password_activate_sid",
-					GINT_TO_POINTER(sid));
-		sid = g_signal_connect( G_OBJECT(widget), "focus-out-event", 
-					GTK_SIGNAL_FUNC (wpa_eap_priv_password_entry_focus_lost), 
-					we_data);
-		g_object_set_data(G_OBJECT(widget), "priv_password_focus_out_sid",
-					GINT_TO_POINTER(sid));
 	}
-	else
-	{
-		gtk_widget_set_sensitive(widget, FALSE);
-		gtk_entry_set_editable(GTK_ENTRY(widget), FALSE);
-		gtk_entry_set_text(GTK_ENTRY(widget), "");
-
-		sid = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(widget), 
-							"priv_password_activate_sid"));
-		g_signal_handler_disconnect(G_OBJECT(widget), sid);
-		sid = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(widget), 
-							"priv_password_focus_out_sid"));
-		g_signal_handler_disconnect(G_OBJECT(widget), sid);
-	}
-
 }
 
-
-gboolean wpa_eap_password_entry_focus_lost(GtkWidget *widget,
-								GdkEventFocus *event, gpointer data)
+static gboolean
+wpa_eap_password_entry_focus_lost (GtkWidget *widget, GdkEventFocus *event, gpointer data)
 {
-	wpa_eap_password_entry_changed(GTK_ENTRY(widget), data);
+	wpa_eap_password_entry_changed (GTK_ENTRY (widget), data);
 	return FALSE;
 }
 
-void wpa_eap_password_entry_changed(GtkEntry *password_entry, gpointer data)
+static void
+wpa_eap_priv_password_entry_changed (GtkEntry *pass_entry, gpointer data)
 {
-	gchar *password;
-	WE_DATA *we_data;
+	WE_DATA *we_data = (WE_DATA *) data;
+	const gchar *password;
 
-	we_data = data;
-
-	password = (gchar *)gtk_entry_get_text(password_entry);
-	if(password != NULL)
-	{
+	password = gtk_entry_get_text (pass_entry);
+	if (password) {
 		GnomeKeyringResult kresult;
 
-		kresult = set_eap_key_in_keyring (we_data->essid_value, password);
-		if(kresult != GNOME_KEYRING_RESULT_OK)
-		{
+		kresult = set_key_in_keyring (we_data->essid_value, password);
+		if (kresult != GNOME_KEYRING_RESULT_OK) {
 			GtkWindow *parentWindow;
+			GtkWidget *errorDialog;
 
-			parentWindow = GTK_WINDOW(gtk_widget_get_ancestor(
-					GTK_WIDGET(password_entry), GTK_TYPE_WINDOW));
-
-			GtkWidget *errorDialog = gtk_message_dialog_new (parentWindow,
-					GTK_DIALOG_DESTROY_WITH_PARENT,
-					GTK_MESSAGE_ERROR,
-					GTK_BUTTONS_CLOSE,
-					_("Unable to set password"));
-			gtk_message_dialog_format_secondary_text (
-					GTK_MESSAGE_DIALOG (errorDialog),
-					_("There was a problem storing the private password in the gnome keyring. Error 0x%02X."),
-					(int)kresult);
+			parentWindow = GTK_WINDOW (gtk_widget_get_ancestor (GTK_WIDGET (pass_entry), GTK_TYPE_WINDOW));
+			errorDialog = gtk_message_dialog_new (parentWindow,
+										   GTK_DIALOG_DESTROY_WITH_PARENT,
+										   GTK_MESSAGE_ERROR,
+										   GTK_BUTTONS_CLOSE,
+										   _("Unable to set password"));
+			gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (errorDialog),
+											  _("There was a problem storing the private password in the gnome keyring. Error 0x%02X."),
+											  (int) kresult);
 
 			gtk_dialog_run (GTK_DIALOG (errorDialog));
 			gtk_widget_destroy (errorDialog);
@@ -456,85 +197,235 @@
 	}
 }
 
-
-gboolean wpa_eap_priv_password_entry_focus_lost(GtkWidget *widget,
-								GdkEventFocus *event, gpointer data)
+static gboolean
+wpa_eap_priv_password_entry_focus_lost (GtkWidget *widget, GdkEventFocus *event, gpointer data)
 {
-	wpa_eap_priv_password_entry_changed(GTK_ENTRY(widget), data);
+	wpa_eap_priv_password_entry_changed (GTK_ENTRY (widget), data);
 	return FALSE;
 }
 
-void wpa_eap_priv_password_entry_changed(GtkEntry *pass_entry, gpointer data)
+static void
+wpa_eap_show_toggled (GtkToggleButton *button, gpointer data)
 {
-	gchar *password;
-	WE_DATA *we_data;
-
-	we_data = data;
-
-	password = (gchar *)gtk_entry_get_text(pass_entry);
-	if(password != NULL)
-	{
-		GnomeKeyringResult kresult;
+	WE_DATA *we_data = (WE_DATA *) data;
+	GtkWidget *widget;
+	gint32	sid;
+	gchar *key = NULL;
+	GnomeKeyringResult kresult;
 
-		kresult = set_key_in_keyring (we_data->essid_value, password);
-		if(kresult != GNOME_KEYRING_RESULT_OK)
-		{
-			GtkWindow *parentWindow;
+	widget = glade_xml_get_widget (we_data->sub_xml, "wpa_eap_passwd_entry");
+	if (gtk_toggle_button_get_active (button)) {
+		kresult = get_eap_key_from_keyring (we_data->essid_value, &key);
+		if (key) {
+			gtk_entry_set_text (GTK_ENTRY (widget), key);
+			g_free (key);
+		} else
+			gtk_entry_set_text (GTK_ENTRY (widget), "");
+
+		gtk_widget_set_sensitive (widget, TRUE);
+		gtk_entry_set_editable (GTK_ENTRY (widget), TRUE);
+
+		sid = g_signal_connect (widget, "activate", 
+						    GTK_SIGNAL_FUNC (wpa_eap_password_entry_changed), we_data);
+		g_object_set_data (G_OBJECT (widget), "password_activate_sid", GINT_TO_POINTER (sid));
+		sid = g_signal_connect (widget, "focus-out-event", 
+						    GTK_SIGNAL_FUNC (wpa_eap_password_entry_focus_lost), 
+						    we_data);
+		g_object_set_data (G_OBJECT (widget), "password_focus_out_sid", GINT_TO_POINTER (sid));
+	} else {
+		gtk_widget_set_sensitive (widget, FALSE);
+		gtk_entry_set_editable (GTK_ENTRY (widget), FALSE);
+		gtk_entry_set_text (GTK_ENTRY (widget), "");
+
+		sid = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (widget), "password_activate_sid"));
+		g_signal_handler_disconnect (widget, sid);
+		sid = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (widget), "password_focus_out_sid"));
+		g_signal_handler_disconnect (widget, sid);
+	}
+
+	widget = glade_xml_get_widget(we_data->sub_xml, "wpa_eap_private_key_passwd_entry");
+	if (gtk_toggle_button_get_active(button)) {
+		kresult = get_key_from_keyring (we_data->essid_value, &key);
+		if(key) {
+			gtk_entry_set_text (GTK_ENTRY (widget), key);
+			g_free (key);
+		}
 
-			parentWindow = GTK_WINDOW(gtk_widget_get_ancestor(
-					GTK_WIDGET(pass_entry), GTK_TYPE_WINDOW));
+		gtk_widget_set_sensitive (widget, TRUE);
+		gtk_entry_set_editable (GTK_ENTRY (widget), TRUE);
 
-			GtkWidget *errorDialog = gtk_message_dialog_new (parentWindow,
-					GTK_DIALOG_DESTROY_WITH_PARENT,
-					GTK_MESSAGE_ERROR,
-					GTK_BUTTONS_CLOSE,
-					_("Unable to set password"));
-			gtk_message_dialog_format_secondary_text (
-					GTK_MESSAGE_DIALOG (errorDialog),
-					_("There was a problem storing the private password in the gnome keyring. Error 0x%02X."),
-					(int)kresult);
+		sid = g_signal_connect (widget, "activate", 
+						    GTK_SIGNAL_FUNC (wpa_eap_priv_password_entry_changed), 
+						    we_data);
+		g_object_set_data (G_OBJECT (widget), "priv_password_activate_sid", GINT_TO_POINTER (sid));
+		sid = g_signal_connect (widget, "focus-out-event", 
+						    GTK_SIGNAL_FUNC (wpa_eap_priv_password_entry_focus_lost), 
+						    we_data);
+		g_object_set_data (G_OBJECT (widget), "priv_password_focus_out_sid", GINT_TO_POINTER(sid));
+	} else {
+		gtk_widget_set_sensitive (widget, FALSE);
+		gtk_entry_set_editable (GTK_ENTRY (widget), FALSE);
+		gtk_entry_set_text (GTK_ENTRY (widget), "");
 
-			gtk_dialog_run (GTK_DIALOG (errorDialog));
-			gtk_widget_destroy (errorDialog);
-		}
+		sid = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (widget), "priv_password_activate_sid"));
+		g_signal_handler_disconnect(widget, sid);
+		sid = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (widget), "priv_password_focus_out_sid"));
+		g_signal_handler_disconnect (widget, sid);
 	}
 }
 
-gboolean wpa_eap_identity_entry_focus_lost(GtkWidget *widget,
-								GdkEventFocus *event, gpointer data)
+static void
+wpa_eap_identity_entry_changed (GtkEntry *widget, gpointer data)
 {
-	wpa_eap_identity_entry_changed(GTK_ENTRY(widget), data);
-	return FALSE;
+	WE_DATA *we_data = (WE_DATA *) data;
+	const gchar *strValue;
+
+	strValue = gtk_entry_get_text (widget);
+	if (strValue)
+		eh_gconf_client_set_string (we_data, "wpa_eap_identity", strValue);
 }
 
-void wpa_eap_identity_entry_changed(GtkEntry *widget, gpointer data)
+static void
+wpa_eap_anon_identity_entry_changed (GtkEntry *widget, gpointer data)
 {
-	gchar *strValue;
-	WE_DATA *we_data;
+	WE_DATA *we_data = (WE_DATA *) data;
+	const gchar *val;
 
-	we_data = data;
+	val = gtk_entry_get_text (widget);
+	if (val)
+		eh_gconf_client_set_string (we_data, "wpa_eap_anon_identity", val);
+}
 
-	strValue = (gchar *)gtk_entry_get_text(widget);
-	if(strValue != NULL)
-		eh_gconf_client_set_string(we_data, "wpa_eap_identity", strValue);
+static gboolean
+wpa_eap_identity_entry_focus_lost (GtkWidget *widget, GdkEventFocus *event, gpointer data)
+{
+	wpa_eap_identity_entry_changed (GTK_ENTRY (widget), data);
+	return FALSE;
 }
 
-gboolean wpa_eap_anon_identity_entry_focus_lost(GtkWidget *widget,
-								GdkEventFocus *event, gpointer data)
+static gboolean
+wpa_eap_anon_identity_entry_focus_lost (GtkWidget *widget, GdkEventFocus *event, gpointer data)
 {
-	wpa_eap_anon_identity_entry_changed(GTK_ENTRY(widget), data);
+	wpa_eap_anon_identity_entry_changed (GTK_ENTRY (widget), data);
 	return FALSE;
 }
 
-void wpa_eap_anon_identity_entry_changed(GtkEntry *widget, gpointer data)
+GtkWidget *
+get_wpa_enterprise_widget (WE_DATA *we_data)
 {
-	gchar *strValue;
-	WE_DATA *we_data;
+	GtkWidget			*main_widget = NULL;
+	GtkWidget			*widget = NULL;
+	gint				intValue;
+	gchar				*strValue;
+	GtkTreeModel *tree_model;
+	GtkTreeIter iter;
+	GtkCellRenderer *renderer;
+	int num_added;
+	int capabilities = 0xFFFFFFFF;
 
-	we_data = data;
+	we_data->sub_xml = glade_xml_new (we_data->glade_file, "wpa_eap_notebook", NULL);
+	if (!we_data->sub_xml)
+		return NULL;
 
-	strValue = (gchar *)gtk_entry_get_text(widget);
-	if(strValue != NULL)
-		eh_gconf_client_set_string(we_data, "wpa_eap_anon_identity", strValue);
-}
+	main_widget = glade_xml_get_widget (we_data->sub_xml, "wpa_eap_notebook");
+	if (!main_widget)
+		return NULL;
+
+	widget = glade_xml_get_widget (we_data->sub_xml, "show_checkbutton");
+	g_signal_connect (widget, "toggled", G_CALLBACK (wpa_eap_show_toggled), we_data);
+
+	renderer = gtk_cell_renderer_text_new ();
 
+	/* EAP method combo */
+	widget = glade_xml_get_widget (we_data->sub_xml, "wpa_eap_eap_method_combo");
+	tree_model = wso_wpa_create_eap_method_model ();
+	gtk_combo_box_set_model (GTK_COMBO_BOX (widget), tree_model);
+	g_object_unref (tree_model);
+	gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (widget), renderer, TRUE);
+	gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (widget), renderer, "text", 0, NULL);
+
+	intValue = eh_gconf_client_get_int (we_data, "wpa_eap_eap_method");
+	if (wso_wpa_eap_method_get_iter (tree_model, (uint) intValue, &iter))
+		gtk_combo_box_set_active_iter (GTK_COMBO_BOX (widget), &iter);
+
+	g_signal_connect (widget, "changed", GTK_SIGNAL_FUNC (wpa_eap_eap_method_changed), we_data);
+
+	/* EAP key type combo */
+	widget = glade_xml_get_widget (we_data->sub_xml, "wpa_eap_key_type_combo");
+	tree_model = wso_wpa_create_key_type_model (capabilities, TRUE, &num_added);
+	gtk_combo_box_set_model (GTK_COMBO_BOX (widget), tree_model);
+	g_object_unref (tree_model);
+	gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (widget), renderer, TRUE);
+	gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (widget), renderer, "text", 0, NULL);
+
+	intValue = eh_gconf_client_get_int (we_data, "wpa_eap_key_type");
+	if (wso_wpa_key_type_get_iter (tree_model, (uint) intValue, &iter))
+		gtk_combo_box_set_active_iter (GTK_COMBO_BOX (widget), &iter);
+
+	g_signal_connect (widget, "changed", GTK_SIGNAL_FUNC (wpa_eap_key_type_changed), we_data);
+
+	/* EAP phase2 type combo */
+	widget = glade_xml_get_widget (we_data->sub_xml, "wpa_eap_phase2_type_combo");
+	tree_model = wso_wpa_create_phase2_type_model (capabilities, &num_added);
+	gtk_combo_box_set_model (GTK_COMBO_BOX (widget), tree_model);
+	g_object_unref (tree_model);
+	gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (widget), renderer, TRUE);
+	gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (widget), renderer, "text", 0, NULL);
+
+	intValue = eh_gconf_client_get_int (we_data, "wpa_eap_phase2_type");
+	if (wso_wpa_phase2_type_get_iter (tree_model, (uint) intValue, &iter))
+		gtk_combo_box_set_active_iter (GTK_COMBO_BOX (widget), &iter);
+
+	g_signal_connect (widget, "changed", GTK_SIGNAL_FUNC (wpa_eap_phase2_type_changed), we_data);
+
+	widget = glade_xml_get_widget (we_data->sub_xml, "wpa_eap_identity_entry");
+	strValue = eh_gconf_client_get_string (we_data, "wpa_eap_identity");
+	if (strValue) {
+		gtk_entry_set_text (GTK_ENTRY (widget), strValue);
+		g_free (strValue);
+	} else
+		gtk_entry_set_text (GTK_ENTRY (widget), "");
+
+	g_signal_connect (widget, "activate", GTK_SIGNAL_FUNC (wpa_eap_identity_entry_changed), we_data);
+	g_signal_connect (widget, "focus-out-event", GTK_SIGNAL_FUNC (wpa_eap_identity_entry_focus_lost), we_data);
+
+	widget = glade_xml_get_widget (we_data->sub_xml, "wpa_eap_anon_identity_entry");
+	strValue = eh_gconf_client_get_string (we_data, "wpa_eap_anon_identity");
+	if (strValue) {
+		gtk_entry_set_text (GTK_ENTRY (widget), strValue);
+		g_free (strValue);
+	} else
+		gtk_entry_set_text (GTK_ENTRY (widget), "");
+
+	g_signal_connect (widget, "activate", GTK_SIGNAL_FUNC (wpa_eap_anon_identity_entry_changed), we_data);
+	g_signal_connect (widget, "focus-out-event", GTK_SIGNAL_FUNC (wpa_eap_anon_identity_entry_focus_lost), we_data);
+
+	widget = glade_xml_get_widget (we_data->sub_xml, "wpa_eap_private_key_file_chooser_button");
+	strValue = eh_gconf_client_get_string (we_data, "wpa_eap_private_key_file");
+	if (strValue) {
+		gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (widget), strValue);
+		g_free (strValue);
+	}
+
+	g_signal_connect (widget, "selection-changed", GTK_SIGNAL_FUNC (wpa_eap_private_key_changed), we_data);
+
+	widget = glade_xml_get_widget (we_data->sub_xml, "wpa_eap_client_cert_file_chooser_button");
+	strValue = eh_gconf_client_get_string (we_data, "wpa_eap_client_cert_file");
+	if (strValue) {
+		gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (widget), strValue);
+		g_free (strValue);
+	}
+
+	g_signal_connect (widget, "selection-changed", GTK_SIGNAL_FUNC (wpa_eap_client_key_changed), we_data);
+
+	widget = glade_xml_get_widget (we_data->sub_xml, "wpa_eap_ca_cert_file_chooser_button");
+	strValue = eh_gconf_client_get_string (we_data, "wpa_eap_ca_cert_file");
+	if (strValue) {
+		gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (widget), strValue);
+		g_free (strValue);
+	}
+
+	g_signal_connect (widget, "selection-changed", GTK_SIGNAL_FUNC (wpa_eap_ca_key_changed), we_data);
+
+	return main_widget;
+}

Modified: branches/network-manager-applet-0-6/editor/widget-wso-wpa-personal.c
==============================================================================
--- branches/network-manager-applet-0-6/editor/widget-wso-wpa-personal.c	(original)
+++ branches/network-manager-applet-0-6/editor/widget-wso-wpa-personal.c	Tue Feb 19 22:13:14 2008
@@ -1,3 +1,5 @@
+/* -*- Mode: C; tab-width: 5; indent-tabs-mode: t; c-basic-offset: 5 -*- */
+
 /* Wireless Security Option WPA/WPA2 Personal Widget
  *
  * Calvin Gaisford <cgaisford novell com>
@@ -36,163 +38,91 @@
 #include <glade/glade.h>
 #include <gconf/gconf-client.h>
 #include <NetworkManager.h>
-
 #include "widget-wso.h"
+#include "libnma/libnma.h"
 
-void wpa_psk_type_changed(GtkWidget *combo, gpointer data);
-void wpa_psk_show_toggled(GtkToggleButton *button, gpointer data);
-void wpa_psk_set_password_button_clicked_cb(GtkButton *button, 
-												gpointer user_data);
-
-GtkWidget *get_wpa_personal_widget(WE_DATA *we_data)
+static void
+wpa_psk_type_changed (GtkComboBox *combo, gpointer data)
 {
-	GtkWidget			*main_widget = NULL;
-	GtkWidget			*widget = NULL;
-	gint				intValue;
-
-	we_data->sub_xml = glade_xml_new(we_data->glade_file, 
-									"wpa_psk_notebook", NULL);
-	if(we_data->sub_xml == NULL)
-		return NULL;
+	GtkTreeIter iter;
 
-	main_widget = glade_xml_get_widget(we_data->sub_xml, "wpa_psk_notebook");
-	if(main_widget != NULL)
-		g_object_ref(G_OBJECT(main_widget));
-
-	// set the combo to match what is in gconf
-
-	widget = glade_xml_get_widget(we_data->sub_xml, "show_checkbutton");
-	g_signal_connect (G_OBJECT (widget), "toggled",
-	                  G_CALLBACK (wpa_psk_show_toggled), we_data);
-
-	widget = glade_xml_get_widget(we_data->sub_xml, "wpa_psk_type_combo");
-	intValue = eh_gconf_client_get_int(we_data, "we_cipher");
-	if (intValue == IW_AUTH_CIPHER_CCMP)
-		gtk_combo_box_set_active(GTK_COMBO_BOX(widget), 1);
-	else if (intValue == IW_AUTH_CIPHER_TKIP)
-		gtk_combo_box_set_active(GTK_COMBO_BOX(widget), 2);
-	else	// set to auto
-		gtk_combo_box_set_active(GTK_COMBO_BOX(widget), 0);
-		
-	g_signal_connect( G_OBJECT(widget), "changed", 
-			GTK_SIGNAL_FUNC (wpa_psk_type_changed), we_data);
-
-	widget = glade_xml_get_widget(we_data->sub_xml, "wpa_psk_set_password");
-	g_signal_connect (G_OBJECT (widget), "clicked",
-	                  	G_CALLBACK (wpa_psk_set_password_button_clicked_cb), 
-						we_data);
+	if (gtk_combo_box_get_active_iter (combo, &iter)) {
+		GtkTreeModel *model;
+		int value;
 
-	return main_widget;
-}
-
-
-void wpa_psk_type_changed(GtkWidget *combo, gpointer data)
-{
-	WE_DATA *we_data;
-	gint	intValue;
+		model = gtk_combo_box_get_model (combo);
+		gtk_tree_model_get (model, &iter, WPA_KEY_TYPE_CIPHER_COL, &value, -1);
 
-	we_data = data;
-
-	intValue = gtk_combo_box_get_active(GTK_COMBO_BOX(combo));
-	if(intValue == 1)
-		eh_gconf_client_set_int(we_data, "we_cipher", IW_AUTH_CIPHER_CCMP);
-	else if(intValue == 2)
-		eh_gconf_client_set_int(we_data, "we_cipher", IW_AUTH_CIPHER_TKIP);
-	else
-		eh_gconf_client_set_int(we_data, "we_cipher", 0);
+		eh_gconf_client_set_int ((WE_DATA *) data, "wpa_psk_key_mgt", value);
+	}
 }
 
-
-
-void wpa_psk_show_toggled(GtkToggleButton *button, gpointer data)
+static void
+wpa_psk_show_toggled (GtkToggleButton *button, gpointer data)
 {
+	WE_DATA *we_data = (WE_DATA *) data;
 	GtkWidget *widget;
-	WE_DATA *we_data;
 
-	we_data = data;
+	widget = glade_xml_get_widget (we_data->sub_xml, "wpa_psk_entry");
 
-	widget = glade_xml_get_widget(we_data->sub_xml, "wpa_psk_entry");
-
-	if(gtk_toggle_button_get_active(button))
-	{
+	if (gtk_toggle_button_get_active (button)) {
 		gchar *key;
 		GnomeKeyringResult kresult;
 
-		kresult = get_key_from_keyring(we_data->essid_value, &key);
-		if(kresult == GNOME_KEYRING_RESULT_OK ||
-				kresult == GNOME_KEYRING_RESULT_NO_SUCH_KEYRING)
-		{
-			gtk_widget_set_sensitive(widget, TRUE);
-
-			if(key != NULL)
-			{
-				gtk_entry_set_text(GTK_ENTRY(widget), key);
-				g_free(key);
+		kresult = get_key_from_keyring (we_data->essid_value, &key);
+		if (kresult == GNOME_KEYRING_RESULT_OK || kresult == GNOME_KEYRING_RESULT_NO_SUCH_KEYRING) {
+			gtk_widget_set_sensitive (widget, TRUE);
+
+			if (key) {
+				gtk_entry_set_text (GTK_ENTRY (widget), key);
+				g_free (key);
 			}
-		}
-		else
-			gtk_toggle_button_set_active(button, FALSE);
+		} else
+			gtk_toggle_button_set_active (button, FALSE);
 
-		if(kresult == GNOME_KEYRING_RESULT_DENIED)
-		{
-			gtk_entry_set_text(GTK_ENTRY(widget), _("Unable to read key"));
-		}
-	}
-	else
-	{
-		gtk_widget_set_sensitive(widget, FALSE);
-		gtk_entry_set_text(GTK_ENTRY(widget), "");
+		if (kresult == GNOME_KEYRING_RESULT_DENIED)
+			gtk_entry_set_text (GTK_ENTRY (widget), _("Unable to read key"));
+	} else {
+		gtk_widget_set_sensitive (widget, FALSE);
+		gtk_entry_set_text (GTK_ENTRY (widget), "");
 	}
 }
 
-
-void wpa_psk_set_password_button_clicked_cb(GtkButton *button, 
-												gpointer user_data)
+static void
+wpa_psk_set_password_button_clicked_cb (GtkButton *button, gpointer user_data)
 {
+	WE_DATA *we_data = (WE_DATA *) user_data;
 	GladeXML			*glade_xml;
 	GtkWidget			*dialog;
-	GtkWidget			*keyEntry;
-	WE_DATA				*we_data;
 	GtkWindow			*parentWindow;
+	gint result;
 
-	we_data = user_data;
-
-	glade_xml = glade_xml_new(we_data->glade_file, 
-									"set_password_dialog", NULL);
-
+	glade_xml = glade_xml_new (we_data->glade_file, "set_password_dialog", NULL);
 	dialog = glade_xml_get_widget (glade_xml, "set_password_dialog");
 
-	keyEntry = glade_xml_get_widget (glade_xml, "password_entry");
-
-	parentWindow = GTK_WINDOW(gtk_widget_get_ancestor(
-					GTK_WIDGET(button), GTK_TYPE_WINDOW));
+	parentWindow = GTK_WINDOW (gtk_widget_get_ancestor (GTK_WIDGET (button), GTK_TYPE_WINDOW));
+	gtk_window_set_transient_for (GTK_WINDOW (dialog), parentWindow);
 
-	gtk_window_set_transient_for(GTK_WINDOW(dialog), parentWindow);
+	result = gtk_dialog_run (GTK_DIALOG (dialog));
+	if (result == GTK_RESPONSE_OK) {
+		GtkWidget *entry;
 
-	gint result = gtk_dialog_run (GTK_DIALOG (dialog));
-
-	if(result == GTK_RESPONSE_OK)
-	{
 		const gchar *key;
 		GnomeKeyringResult kresult;
 
-		key = gtk_entry_get_text(GTK_ENTRY(keyEntry));
-
-		if(key != NULL)
-		{
+		entry = glade_xml_get_widget (glade_xml, "password_entry");
+		key = gtk_entry_get_text (GTK_ENTRY (entry));
+		if (key) {
 			kresult = set_key_in_keyring (we_data->essid_value, key);
-
-			if(kresult != GNOME_KEYRING_RESULT_OK)
-			{
+			if (kresult != GNOME_KEYRING_RESULT_OK) {
 				GtkWidget *errorDialog = gtk_message_dialog_new (parentWindow,
-						GTK_DIALOG_DESTROY_WITH_PARENT,
-						GTK_MESSAGE_ERROR,
-						GTK_BUTTONS_CLOSE,
-						_("Unable to set password"));
-				gtk_message_dialog_format_secondary_text (
-						GTK_MESSAGE_DIALOG (errorDialog),
-						_("There was a problem storing the password in the gnome keyring. Error 0x%02X."),
-						(int)kresult);
+													    GTK_DIALOG_DESTROY_WITH_PARENT,
+													    GTK_MESSAGE_ERROR,
+													    GTK_BUTTONS_CLOSE,
+													    _("Unable to set password"));
+				gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (errorDialog),
+												  _("There was a problem storing the password in the gnome keyring. Error 0x%02X."),
+												  (int) kresult);
 
 				gtk_dialog_run (GTK_DIALOG (errorDialog));
 				gtk_widget_destroy (errorDialog);
@@ -200,7 +130,48 @@
 		}
 	}
 
-	gtk_widget_destroy(dialog);
-	g_free(glade_xml);
+	gtk_widget_destroy (dialog);
+	g_object_unref (glade_xml);
 }
 
+GtkWidget *
+get_wpa_personal_widget (WE_DATA *we_data)
+{
+	GtkWidget *main_widget;
+	GtkWidget	*widget;
+	gint intValue;
+	GtkTreeModel *tree_model;
+	GtkTreeIter iter;
+	int num_added;
+	int capabilities = 0xFFFFFFFF;
+
+	we_data->sub_xml = glade_xml_new (we_data->glade_file, "wpa_psk_notebook", NULL);
+	if (!we_data->sub_xml)
+		return NULL;
+
+	main_widget = glade_xml_get_widget (we_data->sub_xml, "wpa_psk_notebook");
+	if (!main_widget)
+		return NULL;
+
+	/* set the combo to match what is in gconf */
+	widget = glade_xml_get_widget (we_data->sub_xml, "show_checkbutton");
+	g_signal_connect (widget, "toggled", G_CALLBACK (wpa_psk_show_toggled), we_data);
+
+	/* Key type combo */
+	widget = glade_xml_get_widget (we_data->sub_xml, "wpa_psk_type_combo");
+	tree_model = wso_wpa_create_key_type_model (capabilities, TRUE, &num_added);
+	gtk_combo_box_set_model (GTK_COMBO_BOX (widget), tree_model);
+	g_object_unref (tree_model);
+
+	intValue = eh_gconf_client_get_int (we_data, "wpa_psk_key_mgt");
+	if (wso_wpa_key_type_get_iter (tree_model, (uint) intValue, &iter))
+		gtk_combo_box_set_active_iter (GTK_COMBO_BOX (widget), &iter);
+
+	g_signal_connect (widget, "changed", GTK_SIGNAL_FUNC (wpa_psk_type_changed), we_data);
+
+	widget = glade_xml_get_widget (we_data->sub_xml, "wpa_psk_set_password");
+	g_signal_connect (widget, "clicked", G_CALLBACK (wpa_psk_set_password_button_clicked_cb), we_data);
+	gtk_widget_show (widget);
+
+	return main_widget;
+}

Modified: branches/network-manager-applet-0-6/editor/widget-wso.h
==============================================================================
--- branches/network-manager-applet-0-6/editor/widget-wso.h	(original)
+++ branches/network-manager-applet-0-6/editor/widget-wso.h	Tue Feb 19 22:13:14 2008
@@ -33,6 +33,7 @@
 GtkWidget *get_wep_widget(WE_DATA *we_data);
 GtkWidget *get_wpa_personal_widget(WE_DATA *we_data);
 GtkWidget *get_wpa_enterprise_widget(WE_DATA *we_data);
+GtkWidget *get_leap_widget(WE_DATA *we_data);
 
 
 #endif // WIDGET_WSO_H

Added: branches/network-manager-applet-0-6/libnma/Makefile.am
==============================================================================
--- (empty file)
+++ branches/network-manager-applet-0-6/libnma/Makefile.am	Tue Feb 19 22:13:14 2008
@@ -0,0 +1,12 @@
+INCLUDES = \
+	-I$(top_srcdir) \
+	$(GTK_CFLAGS) \
+	$(NM_CFLAGS)
+
+noinst_LTLIBRARIES = libnma.la
+
+libnma_la_SOURCES = \
+	libnma.c \
+	libnma.h
+
+libnma_la_LDFLAGS = $(GTK_LIBS) $(NM_LIBS)

Added: branches/network-manager-applet-0-6/libnma/libnma.c
==============================================================================
--- (empty file)
+++ branches/network-manager-applet-0-6/libnma/libnma.c	Tue Feb 19 22:13:14 2008
@@ -0,0 +1,223 @@
+/* -*- Mode: C; tab-width: 5; indent-tabs-mode: t; c-basic-offset: 5 -*- */
+
+#include <NetworkManager.h>
+#include <iwlib.h>
+#include <glib/gi18n.h>
+#include "libnma.h"
+
+GtkTreeModel *
+wso_wpa_create_key_type_model (int capabilities, gboolean wpa_eap, int *num_added)
+{
+	GtkListStore *	model;
+	GtkTreeIter	iter;
+	int			num = 1;
+	const char *	name;
+
+	g_return_val_if_fail (num_added != NULL, NULL);
+
+	model = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_INT);
+
+	name = _("Automatic (Default)");
+	gtk_list_store_append (model, &iter);
+	gtk_list_store_set (model, &iter, WPA_KEY_TYPE_NAME_COL, name,
+					WPA_KEY_TYPE_CIPHER_COL, NM_AUTH_TYPE_WPA_PSK_AUTO, -1);
+
+	if (capabilities & NM_802_11_CAP_CIPHER_CCMP)
+	{
+		name = _("AES-CCMP");
+		gtk_list_store_append (model, &iter);
+		gtk_list_store_set (model, &iter, WPA_KEY_TYPE_NAME_COL, name,
+			WPA_KEY_TYPE_CIPHER_COL, IW_AUTH_CIPHER_CCMP, -1);
+		num++;
+	}
+	if (capabilities & NM_802_11_CAP_CIPHER_TKIP)
+	{
+		name = _("TKIP");
+		gtk_list_store_append (model, &iter);
+		gtk_list_store_set (model, &iter, WPA_KEY_TYPE_NAME_COL, name,
+			WPA_KEY_TYPE_CIPHER_COL, IW_AUTH_CIPHER_TKIP, -1);
+		num++;
+	}
+	if (wpa_eap && capabilities & NM_802_11_CAP_KEY_MGMT_802_1X)
+	{
+		name = _("Dynamic WEP");
+		gtk_list_store_append (model, &iter);
+		gtk_list_store_set (model, &iter, WPA_KEY_TYPE_NAME_COL, name,
+			WPA_KEY_TYPE_CIPHER_COL, IW_AUTH_CIPHER_WEP104, -1);
+		num++;
+	}
+
+	*num_added = num;
+	return GTK_TREE_MODEL (model);
+}
+
+gboolean
+wso_wpa_key_type_get_iter (GtkTreeModel *model, uint key_type, GtkTreeIter *iter)
+{
+	gboolean valid;
+
+	valid = gtk_tree_model_get_iter_first (model, iter);
+	while (valid) {
+		int current;
+
+		gtk_tree_model_get (model, iter, WPA_KEY_TYPE_CIPHER_COL, &current, -1);
+		if (current == key_type)
+			return TRUE;
+
+		valid = gtk_tree_model_iter_next (model, iter);
+	}
+
+	iter = NULL;
+	return FALSE;
+}
+
+GtkTreeModel *
+wso_wpa_create_phase2_type_model (int capabilities, int *num_added)
+{
+	GtkListStore *	model;
+	GtkTreeIter	iter;
+	const char *	name;
+
+	g_return_val_if_fail (num_added != NULL, NULL);
+
+	model = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_INT);
+
+	name = _("None (Default)");
+	gtk_list_store_append (model, &iter);
+	gtk_list_store_set (model, &iter, WPA_KEY_TYPE_NAME_COL, name,
+					WPA_KEY_TYPE_CIPHER_COL, NM_PHASE2_AUTH_NONE, -1);
+
+	name = _("PAP");
+	gtk_list_store_append (model, &iter);
+	gtk_list_store_set (model, &iter, WPA_KEY_TYPE_NAME_COL, name,
+					WPA_KEY_TYPE_CIPHER_COL, NM_PHASE2_AUTH_PAP, -1);
+
+	name = _("MSCHAP");
+	gtk_list_store_append (model, &iter);
+	gtk_list_store_set (model, &iter, WPA_KEY_TYPE_NAME_COL, name,
+					WPA_KEY_TYPE_CIPHER_COL, NM_PHASE2_AUTH_MSCHAP, -1);
+
+	name = _("MSCHAPV2");
+	gtk_list_store_append (model, &iter);
+	gtk_list_store_set (model, &iter, WPA_KEY_TYPE_NAME_COL, name,
+					WPA_KEY_TYPE_CIPHER_COL, NM_PHASE2_AUTH_MSCHAPV2, -1);
+
+	name = _("GTC");
+	gtk_list_store_append (model, &iter);
+	gtk_list_store_set (model, &iter, WPA_KEY_TYPE_NAME_COL, name,
+					WPA_KEY_TYPE_CIPHER_COL, NM_PHASE2_AUTH_GTC, -1);
+
+	*num_added = 5;
+	return GTK_TREE_MODEL (model);
+}
+
+gboolean
+wso_wpa_phase2_type_get_iter (GtkTreeModel *model, uint phase2_type, GtkTreeIter *iter)
+{
+	gboolean valid;
+
+	valid = gtk_tree_model_get_iter_first (model, iter);
+	while (valid) {
+		int current;
+
+		gtk_tree_model_get (model, iter, WPA_KEY_TYPE_CIPHER_COL, &current, -1);
+		if (current == phase2_type)
+			return TRUE;
+
+		valid = gtk_tree_model_iter_next (model, iter);
+	}
+
+	iter = NULL;
+	return FALSE;
+}
+
+GtkTreeModel *
+wso_wpa_create_eap_method_model (void)
+{
+	GtkListStore *	model;
+	GtkTreeIter	iter;
+	struct {
+		const char *		name;
+		int				value;
+	} *list, eap_method_list[] = {
+		{ _("PEAP"),		NM_EAP_METHOD_PEAP },
+		{ _("TLS"),		NM_EAP_METHOD_TLS },
+		{ _("TTLS"),		NM_EAP_METHOD_TTLS },
+		{ NULL,			0 }
+	};
+
+	model = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_INT);
+	list = eap_method_list;
+	while (list->name) {
+		gtk_list_store_append (model, &iter);
+		gtk_list_store_set (model, &iter, WPA_EAP_NAME_COL, list->name, WPA_EAP_VALUE_COL, list->value, -1);
+		list++;
+	}
+
+	return GTK_TREE_MODEL (model);
+}
+
+gboolean
+wso_wpa_eap_method_get_iter (GtkTreeModel *model, uint eap_method, GtkTreeIter *iter)
+{
+	gboolean valid;
+
+	valid = gtk_tree_model_get_iter_first (model, iter);
+	while (valid) {
+		int current;
+
+		gtk_tree_model_get (model, iter, WPA_EAP_VALUE_COL, &current, -1);
+		if (current == eap_method)
+			return TRUE;
+
+		valid = gtk_tree_model_iter_next (model, iter);
+	}
+
+	iter = NULL;
+	return FALSE;
+}
+
+/* LEAP */
+
+GtkTreeModel *
+wso_leap_create_key_mgmt_model (void)
+{
+	GtkListStore *model;
+	GtkTreeIter iter;
+
+	model = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_STRING);
+	gtk_list_store_append (model, &iter);
+	gtk_list_store_set (model, &iter, LEAP_KEY_MGMT_NAME_COL, "IEEE 802.1X",
+					LEAP_KEY_MGMT_VALUE_COL, "IEEE8021X", -1);
+	gtk_list_store_append (model, &iter);
+	gtk_list_store_set (model, &iter, LEAP_KEY_MGMT_NAME_COL, "WPA-EAP",
+					LEAP_KEY_MGMT_VALUE_COL, "WPA-EAP", -1);
+
+	return GTK_TREE_MODEL (model);
+}
+
+gboolean
+wso_leap_key_mgmt_get_iter (GtkTreeModel *model, const char *key_mgmt, GtkTreeIter *iter)
+{
+	gboolean valid;
+
+	g_return_val_if_fail (key_mgmt != NULL, FALSE);
+
+	valid = gtk_tree_model_get_iter_first (model, iter);
+	while (valid) {
+		char *current;
+
+		gtk_tree_model_get (model, iter, LEAP_KEY_MGMT_VALUE_COL, &current, -1);
+		if (current && !strcmp (current, key_mgmt)) {
+			g_free (current);
+			return TRUE;
+		}
+
+		g_free (current);
+
+		valid = gtk_tree_model_iter_next (model, iter);
+	}
+
+	iter = NULL;
+	return FALSE;
+}

Added: branches/network-manager-applet-0-6/libnma/libnma.h
==============================================================================
--- (empty file)
+++ branches/network-manager-applet-0-6/libnma/libnma.h	Tue Feb 19 22:13:14 2008
@@ -0,0 +1,40 @@
+/* -*- Mode: C; tab-width: 5; indent-tabs-mode: t; c-basic-offset: 5 -*- */
+
+#ifndef NMA_LIB_H
+#define NMA_LIB_H
+
+#include <gtk/gtk.h>
+
+#define WPA_KEY_TYPE_NAME_COL		0
+#define WPA_KEY_TYPE_CIPHER_COL	1
+
+#define WPA_EAP_NAME_COL		0
+#define WPA_EAP_VALUE_COL	1
+
+GtkTreeModel *wso_wpa_create_key_type_model    (int capabilities,
+									   gboolean wpa_eap,
+									   int *num_added);
+gboolean      wso_wpa_key_type_get_iter        (GtkTreeModel *model,
+									   uint key_type,
+									   GtkTreeIter *iter);
+
+GtkTreeModel *wso_wpa_create_phase2_type_model (int capabilities,
+									   int *num_added);
+gboolean      wso_wpa_phase2_type_get_iter     (GtkTreeModel *model,
+									   uint phase2_type,
+									   GtkTreeIter *iter);
+
+GtkTreeModel *wso_wpa_create_eap_method_model  (void);
+gboolean      wso_wpa_eap_method_get_iter      (GtkTreeModel *model,
+									   uint eap_method,
+									   GtkTreeIter *iter);
+
+#define LEAP_KEY_MGMT_NAME_COL  0
+#define LEAP_KEY_MGMT_VALUE_COL 1
+
+GtkTreeModel *wso_leap_create_key_mgmt_model   (void);
+gboolean      wso_leap_key_mgmt_get_iter       (GtkTreeModel *model,
+									   const char *key_mgmt,
+									   GtkTreeIter *iter);
+
+#endif /* NMA_LIB_H */

Modified: branches/network-manager-applet-0-6/src/Makefile.am
==============================================================================
--- branches/network-manager-applet-0-6/src/Makefile.am	(original)
+++ branches/network-manager-applet-0-6/src/Makefile.am	Tue Feb 19 22:13:14 2008
@@ -3,6 +3,7 @@
 bin_PROGRAMS = nm-applet
 
 nm_applet_CPPFLAGS =									\
+	-I$(top_srcdir)										\
 	$(DBUS_CFLAGS)										\
 	$(GTHREAD_CFLAGS)									\
 	$(HAL_CFLAGS)										\
@@ -114,13 +115,13 @@
 	$(LIBGNOMEUI_LIBS)					\
 	$(GNOME_KEYRING_LIBS)				\
 	$(NM_LIBS) \
+	 ../libnma/libnma.la \
 	$(NULL)
 
 if WITH_NOTIFY
 nm_applet_LDADD += $(NOTIFY_LIBS)
 endif
 
-
 gladedir = $(datadir)/nm-applet
 glade_DATA = applet.glade keyring.png
 

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	Tue Feb 19 22:13:14 2008
@@ -2,6 +2,7 @@
 <!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd";>
 
 <glade-interface>
+<requires lib="gnome"/>
 
 <widget class="GtkDialog" id="trust_dialog">
   <property name="border_width">5</property>
@@ -516,6 +517,7 @@
 		      <property name="max_length">0</property>
 		      <property name="text" translatable="yes"></property>
 		      <property name="has_frame">True</property>
+		      <property name="invisible_char">â</property>
 		      <property name="activates_default">True</property>
 		    </widget>
 		    <packing>
@@ -1795,6 +1797,7 @@
 	      <property name="max_length">0</property>
 	      <property name="text" translatable="yes"></property>
 	      <property name="has_frame">True</property>
+	      <property name="invisible_char">â</property>
 	      <property name="activates_default">False</property>
 	    </widget>
 	    <packing>
@@ -1881,16 +1884,44 @@
 	  </child>
 
 	  <child>
-	    <widget class="GtkCheckButton" id="show_checkbutton">
+	    <widget class="GtkHBox" id="hbox10">
 	      <property name="visible">True</property>
-	      <property name="can_focus">True</property>
-	      <property name="label" translatable="yes">Show key</property>
-	      <property name="use_underline">True</property>
-	      <property name="relief">GTK_RELIEF_NORMAL</property>
-	      <property name="focus_on_click">True</property>
-	      <property name="active">False</property>
-	      <property name="inconsistent">False</property>
-	      <property name="draw_indicator">True</property>
+	      <property name="homogeneous">False</property>
+	      <property name="spacing">5</property>
+
+	      <child>
+		<widget class="GtkCheckButton" id="show_checkbutton">
+		  <property name="visible">True</property>
+		  <property name="can_focus">True</property>
+		  <property name="label" translatable="yes">Show key</property>
+		  <property name="use_underline">True</property>
+		  <property name="relief">GTK_RELIEF_NORMAL</property>
+		  <property name="focus_on_click">True</property>
+		  <property name="active">False</property>
+		  <property name="inconsistent">False</property>
+		  <property name="draw_indicator">True</property>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">True</property>
+		  <property name="fill">True</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkButton" id="wep_set_key">
+		  <property name="can_focus">True</property>
+		  <property name="label" translatable="yes">Set _Key</property>
+		  <property name="use_underline">True</property>
+		  <property name="relief">GTK_RELIEF_NORMAL</property>
+		  <property name="focus_on_click">True</property>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">False</property>
+		</packing>
+	      </child>
 	    </widget>
 	    <packing>
 	      <property name="left_attach">1</property>
@@ -1898,7 +1929,7 @@
 	      <property name="top_attach">1</property>
 	      <property name="bottom_attach">2</property>
 	      <property name="x_options">fill</property>
-	      <property name="y_options"></property>
+	      <property name="y_options">fill</property>
 	    </packing>
 	  </child>
 	</widget>
@@ -1990,7 +2021,7 @@
 	<widget class="GtkTable" id="table5">
 	  <property name="border_width">6</property>
 	  <property name="visible">True</property>
-	  <property name="n_rows">3</property>
+	  <property name="n_rows">4</property>
 	  <property name="n_columns">2</property>
 	  <property name="homogeneous">False</property>
 	  <property name="row_spacing">6</property>
@@ -2005,6 +2036,7 @@
 	      <property name="max_length">0</property>
 	      <property name="text" translatable="yes"></property>
 	      <property name="has_frame">True</property>
+	      <property name="invisible_char">â</property>
 	      <property name="activates_default">False</property>
 	    </widget>
 	    <packing>
@@ -2025,6 +2057,7 @@
 	      <property name="max_length">0</property>
 	      <property name="text" translatable="yes"></property>
 	      <property name="has_frame">True</property>
+	      <property name="invisible_char">â</property>
 	      <property name="activates_default">False</property>
 	    </widget>
 	    <packing>
@@ -2113,8 +2146,8 @@
 	    <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="top_attach">3</property>
+	      <property name="bottom_attach">4</property>
 	      <property name="x_options">fill</property>
 	      <property name="y_options"></property>
 	    </packing>
@@ -2130,10 +2163,59 @@
 	    <packing>
 	      <property name="left_attach">1</property>
 	      <property name="right_attach">2</property>
+	      <property name="top_attach">3</property>
+	      <property name="bottom_attach">4</property>
+	      <property name="x_options">fill</property>
+	      <property name="y_options">fill</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkHBox" id="hbox9">
+	      <property name="visible">True</property>
+	      <property name="homogeneous">False</property>
+	      <property name="spacing">5</property>
+
+	      <child>
+		<widget class="GtkCheckButton" id="leap_show_password">
+		  <property name="visible">True</property>
+		  <property name="can_focus">True</property>
+		  <property name="label" translatable="yes">Show password</property>
+		  <property name="use_underline">True</property>
+		  <property name="relief">GTK_RELIEF_NORMAL</property>
+		  <property name="focus_on_click">True</property>
+		  <property name="active">False</property>
+		  <property name="inconsistent">False</property>
+		  <property name="draw_indicator">True</property>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">True</property>
+		  <property name="fill">True</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkButton" id="leap_set_password">
+		  <property name="can_focus">True</property>
+		  <property name="label" translatable="yes">Set _Password</property>
+		  <property name="use_underline">True</property>
+		  <property name="relief">GTK_RELIEF_NORMAL</property>
+		  <property name="focus_on_click">True</property>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">False</property>
+		</packing>
+	      </child>
+	    </widget>
+	    <packing>
+	      <property name="left_attach">1</property>
+	      <property name="right_attach">2</property>
 	      <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>
@@ -2268,6 +2350,7 @@
 	      <property name="max_length">0</property>
 	      <property name="text" translatable="yes"></property>
 	      <property name="has_frame">True</property>
+	      <property name="invisible_char">â</property>
 	      <property name="activates_default">True</property>
 	    </widget>
 	    <packing>
@@ -2353,16 +2436,44 @@
 	  </child>
 
 	  <child>
-	    <widget class="GtkCheckButton" id="show_checkbutton">
+	    <widget class="GtkHBox" id="hbox8">
 	      <property name="visible">True</property>
-	      <property name="can_focus">True</property>
-	      <property name="label" translatable="yes">Show password</property>
-	      <property name="use_underline">True</property>
-	      <property name="relief">GTK_RELIEF_NORMAL</property>
-	      <property name="focus_on_click">True</property>
-	      <property name="active">False</property>
-	      <property name="inconsistent">False</property>
-	      <property name="draw_indicator">True</property>
+	      <property name="homogeneous">False</property>
+	      <property name="spacing">5</property>
+
+	      <child>
+		<widget class="GtkCheckButton" id="show_checkbutton">
+		  <property name="visible">True</property>
+		  <property name="can_focus">True</property>
+		  <property name="label" translatable="yes">Show password</property>
+		  <property name="use_underline">True</property>
+		  <property name="relief">GTK_RELIEF_NORMAL</property>
+		  <property name="focus_on_click">True</property>
+		  <property name="active">False</property>
+		  <property name="inconsistent">False</property>
+		  <property name="draw_indicator">True</property>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">True</property>
+		  <property name="fill">True</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkButton" id="wpa_psk_set_password">
+		  <property name="can_focus">True</property>
+		  <property name="label" translatable="yes">Set _Password</property>
+		  <property name="use_underline">True</property>
+		  <property name="relief">GTK_RELIEF_NORMAL</property>
+		  <property name="focus_on_click">True</property>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">False</property>
+		</packing>
+	      </child>
 	    </widget>
 	    <packing>
 	      <property name="left_attach">1</property>
@@ -2370,7 +2481,7 @@
 	      <property name="top_attach">1</property>
 	      <property name="bottom_attach">2</property>
 	      <property name="x_options">fill</property>
-	      <property name="y_options"></property>
+	      <property name="y_options">fill</property>
 	    </packing>
 	  </child>
 	</widget>
@@ -2601,6 +2712,7 @@
 	      <property name="max_length">0</property>
 	      <property name="text" translatable="yes"></property>
 	      <property name="has_frame">True</property>
+	      <property name="invisible_char">â</property>
 	      <property name="activates_default">False</property>
 	    </widget>
 	    <packing>
@@ -2753,6 +2865,7 @@
 	      <property name="max_length">0</property>
 	      <property name="text" translatable="yes"></property>
 	      <property name="has_frame">True</property>
+	      <property name="invisible_char">â</property>
 	      <property name="activates_default">False</property>
 	    </widget>
 	    <packing>
@@ -2773,6 +2886,7 @@
 	      <property name="max_length">0</property>
 	      <property name="text" translatable="yes"></property>
 	      <property name="has_frame">True</property>
+	      <property name="invisible_char">â</property>
 	      <property name="activates_default">False</property>
 	    </widget>
 	    <packing>
@@ -2793,6 +2907,7 @@
 	      <property name="max_length">0</property>
 	      <property name="text" translatable="yes"></property>
 	      <property name="has_frame">True</property>
+	      <property name="invisible_char">â</property>
 	      <property name="activates_default">False</property>
 	    </widget>
 	    <packing>
@@ -3117,6 +3232,7 @@
 	      <property name="max_length">0</property>
 	      <property name="text" translatable="yes"></property>
 	      <property name="has_frame">True</property>
+	      <property name="invisible_char">â</property>
 	      <property name="activates_default">True</property>
 	    </widget>
 	    <packing>
@@ -3283,4 +3399,1344 @@
   </child>
 </widget>
 
+<widget class="GtkDialog" id="set_password_dialog">
+  <property name="title" translatable="yes">Set Password</property>
+  <property name="type">GTK_WINDOW_TOPLEVEL</property>
+  <property name="window_position">GTK_WIN_POS_CENTER_ON_PARENT</property>
+  <property name="modal">False</property>
+  <property name="resizable">False</property>
+  <property name="destroy_with_parent">False</property>
+  <property name="decorated">True</property>
+  <property name="skip_taskbar_hint">False</property>
+  <property name="skip_pager_hint">False</property>
+  <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+  <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
+  <property name="focus_on_map">True</property>
+  <property name="urgency_hint">False</property>
+  <property name="has_separator">False</property>
+
+  <child internal-child="vbox">
+    <widget class="GtkVBox" id="dialog-vbox2">
+      <property name="visible">True</property>
+      <property name="homogeneous">False</property>
+      <property name="spacing">0</property>
+
+      <child internal-child="action_area">
+	<widget class="GtkHButtonBox" id="dialog-action_area2">
+	  <property name="visible">True</property>
+	  <property name="layout_style">GTK_BUTTONBOX_END</property>
+
+	  <child>
+	    <widget class="GtkButton" id="cancelbutton1">
+	      <property name="visible">True</property>
+	      <property name="can_default">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="label">gtk-cancel</property>
+	      <property name="use_stock">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <property name="response_id">-6</property>
+	    </widget>
+	  </child>
+
+	  <child>
+	    <widget class="GtkButton" id="okbutton1">
+	      <property name="visible">True</property>
+	      <property name="can_default">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="label">gtk-ok</property>
+	      <property name="use_stock">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <property name="response_id">-5</property>
+	    </widget>
+	  </child>
+	</widget>
+	<packing>
+	  <property name="padding">0</property>
+	  <property name="expand">False</property>
+	  <property name="fill">True</property>
+	  <property name="pack_type">GTK_PACK_END</property>
+	</packing>
+      </child>
+
+      <child>
+	<widget class="GtkTable" id="table8">
+	  <property name="visible">True</property>
+	  <property name="n_rows">1</property>
+	  <property name="n_columns">2</property>
+	  <property name="homogeneous">False</property>
+	  <property name="row_spacing">0</property>
+	  <property name="column_spacing">0</property>
+
+	  <child>
+	    <widget class="GtkLabel" id="label34">
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">Password:</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">0</property>
+	      <property name="bottom_attach">1</property>
+	      <property name="x_options">fill</property>
+	      <property name="y_options"></property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkEntry" id="password_entry">
+	      <property name="visible">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="editable">True</property>
+	      <property name="visibility">True</property>
+	      <property name="max_length">0</property>
+	      <property name="text" translatable="yes"></property>
+	      <property name="has_frame">True</property>
+	      <property name="invisible_char">â</property>
+	      <property name="activates_default">False</property>
+	    </widget>
+	    <packing>
+	      <property name="left_attach">1</property>
+	      <property name="right_attach">2</property>
+	      <property name="top_attach">0</property>
+	      <property name="bottom_attach">1</property>
+	      <property name="y_options"></property>
+	    </packing>
+	  </child>
+	</widget>
+	<packing>
+	  <property name="padding">0</property>
+	  <property name="expand">True</property>
+	  <property name="fill">True</property>
+	</packing>
+      </child>
+    </widget>
+  </child>
+</widget>
+
+<widget class="GtkDialog" id="wep_key_editor">
+  <property name="title" translatable="yes">Set WEP Key</property>
+  <property name="type">GTK_WINDOW_TOPLEVEL</property>
+  <property name="window_position">GTK_WIN_POS_CENTER_ON_PARENT</property>
+  <property name="modal">False</property>
+  <property name="resizable">False</property>
+  <property name="destroy_with_parent">True</property>
+  <property name="decorated">True</property>
+  <property name="skip_taskbar_hint">False</property>
+  <property name="skip_pager_hint">False</property>
+  <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+  <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
+  <property name="focus_on_map">True</property>
+  <property name="urgency_hint">False</property>
+  <property name="has_separator">False</property>
+
+  <child internal-child="vbox">
+    <widget class="GtkVBox" id="vbox4">
+      <property name="visible">True</property>
+      <property name="homogeneous">False</property>
+      <property name="spacing">0</property>
+
+      <child internal-child="action_area">
+	<widget class="GtkHButtonBox" id="hbuttonbox2">
+	  <property name="visible">True</property>
+	  <property name="layout_style">GTK_BUTTONBOX_END</property>
+
+	  <child>
+	    <widget class="GtkButton" id="button1">
+	      <property name="visible">True</property>
+	      <property name="can_default">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="label">gtk-cancel</property>
+	      <property name="use_stock">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <property name="response_id">-6</property>
+	    </widget>
+	  </child>
+
+	  <child>
+	    <widget class="GtkButton" id="button2">
+	      <property name="visible">True</property>
+	      <property name="can_default">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="label">gtk-ok</property>
+	      <property name="use_stock">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <property name="response_id">-5</property>
+	    </widget>
+	  </child>
+	</widget>
+	<packing>
+	  <property name="padding">0</property>
+	  <property name="expand">False</property>
+	  <property name="fill">True</property>
+	  <property name="pack_type">GTK_PACK_END</property>
+	</packing>
+      </child>
+
+      <child>
+	<widget class="GtkTable" id="table9">
+	  <property name="border_width">5</property>
+	  <property name="visible">True</property>
+	  <property name="n_rows">2</property>
+	  <property name="n_columns">2</property>
+	  <property name="homogeneous">False</property>
+	  <property name="row_spacing">6</property>
+	  <property name="column_spacing">12</property>
+
+	  <child>
+	    <widget class="GtkLabel" id="label35">
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">Key:</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">0</property>
+	      <property name="bottom_attach">1</property>
+	      <property name="x_options">fill</property>
+	      <property name="y_options"></property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkEntry" id="wep_key_editor_entry">
+	      <property name="width_request">300</property>
+	      <property name="visible">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="editable">True</property>
+	      <property name="visibility">True</property>
+	      <property name="max_length">0</property>
+	      <property name="text" translatable="yes"></property>
+	      <property name="has_frame">True</property>
+	      <property name="invisible_char">â</property>
+	      <property name="activates_default">False</property>
+	    </widget>
+	    <packing>
+	      <property name="left_attach">1</property>
+	      <property name="right_attach">2</property>
+	      <property name="top_attach">0</property>
+	      <property name="bottom_attach">1</property>
+	      <property name="y_options"></property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkLabel" id="label36">
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">Format:</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">1</property>
+	      <property name="bottom_attach">2</property>
+	      <property name="x_options">fill</property>
+	      <property name="y_options"></property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkComboBox" id="wep_key_editor_combo">
+	      <property name="visible">True</property>
+	      <property name="items" translatable="yes">Hex
+ASCII
+Passphrase</property>
+	      <property name="add_tearoffs">False</property>
+	      <property name="focus_on_click">True</property>
+	    </widget>
+	    <packing>
+	      <property name="left_attach">1</property>
+	      <property name="right_attach">2</property>
+	      <property name="top_attach">1</property>
+	      <property name="bottom_attach">2</property>
+	      <property name="x_options">fill</property>
+	      <property name="y_options">fill</property>
+	    </packing>
+	  </child>
+	</widget>
+	<packing>
+	  <property name="padding">0</property>
+	  <property name="expand">True</property>
+	  <property name="fill">True</property>
+	</packing>
+      </child>
+    </widget>
+  </child>
+</widget>
+
+<widget class="GtkWindow" id="wireless_editor">
+  <property name="title" translatable="yes">Wireless Networks</property>
+  <property name="type">GTK_WINDOW_TOPLEVEL</property>
+  <property name="window_position">GTK_WIN_POS_NONE</property>
+  <property name="modal">False</property>
+  <property name="default_width">600</property>
+  <property name="default_height">400</property>
+  <property name="resizable">True</property>
+  <property name="destroy_with_parent">False</property>
+  <property name="decorated">True</property>
+  <property name="skip_taskbar_hint">False</property>
+  <property name="skip_pager_hint">False</property>
+  <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
+  <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
+  <property name="focus_on_map">True</property>
+  <property name="urgency_hint">False</property>
+
+  <child>
+    <widget class="GtkVBox" id="vbox5">
+      <property name="visible">True</property>
+      <property name="homogeneous">False</property>
+      <property name="spacing">0</property>
+
+      <child>
+	<widget class="GtkMenuBar" id="menubar1">
+	  <property name="visible">True</property>
+	  <property name="pack_direction">GTK_PACK_DIRECTION_LTR</property>
+	  <property name="child_pack_direction">GTK_PACK_DIRECTION_LTR</property>
+
+	  <child>
+	    <widget class="GtkMenuItem" id="file1">
+	      <property name="visible">True</property>
+	      <property name="stock_item">GNOMEUIINFO_MENU_FILE_TREE</property>
+
+	      <child>
+		<widget class="GtkMenu" id="file1_menu">
+
+		  <child>
+		    <widget class="GtkImageMenuItem" id="quit_nm_editor">
+		      <property name="visible">True</property>
+		      <property name="stock_item">GNOMEUIINFO_MENU_EXIT_ITEM</property>
+		      <signal name="activate" handler="on_quit_activate" last_modification_time="Mon, 08 Jan 2007 22:18:37 GMT"/>
+		    </widget>
+		  </child>
+		</widget>
+	      </child>
+	    </widget>
+	  </child>
+
+	  <child>
+	    <widget class="GtkMenuItem" id="help1">
+	      <property name="visible">True</property>
+	      <property name="stock_item">GNOMEUIINFO_MENU_HELP_TREE</property>
+
+	      <child>
+		<widget class="GtkMenu" id="help1_menu">
+
+		  <child>
+		    <widget class="GtkImageMenuItem" id="about_nm_editor">
+		      <property name="visible">True</property>
+		      <property name="stock_item">GNOMEUIINFO_MENU_ABOUT_ITEM</property>
+		      <signal name="activate" handler="on_about_nm_editor" last_modification_time="Mon, 08 Jan 2007 22:18:37 GMT"/>
+		    </widget>
+		  </child>
+		</widget>
+	      </child>
+	    </widget>
+	  </child>
+	</widget>
+	<packing>
+	  <property name="padding">0</property>
+	  <property name="expand">False</property>
+	  <property name="fill">False</property>
+	</packing>
+      </child>
+
+      <child>
+	<widget class="GtkHPaned" id="hpaned1">
+	  <property name="visible">True</property>
+	  <property name="can_focus">True</property>
+	  <property name="position">1</property>
+
+	  <child>
+	    <widget class="GtkVBox" id="vbox6">
+	      <property name="border_width">6</property>
+	      <property name="width_request">175</property>
+	      <property name="visible">True</property>
+	      <property name="homogeneous">False</property>
+	      <property name="spacing">0</property>
+
+	      <child>
+		<widget class="GtkLabel" id="label37">
+		  <property name="visible">True</property>
+		  <property name="label" translatable="yes">Networks</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="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">False</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkScrolledWindow" id="scrolledwindow1">
+		  <property name="visible">True</property>
+		  <property name="can_focus">True</property>
+		  <property name="hscrollbar_policy">GTK_POLICY_NEVER</property>
+		  <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+		  <property name="shadow_type">GTK_SHADOW_IN</property>
+		  <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
+
+		  <child>
+		    <widget class="GtkTreeView" id="wireless_treeview">
+		      <property name="visible">True</property>
+		      <property name="can_focus">True</property>
+		      <property name="headers_visible">False</property>
+		      <property name="rules_hint">False</property>
+		      <property name="reorderable">False</property>
+		      <property name="enable_search">True</property>
+		      <property name="fixed_height_mode">False</property>
+		      <property name="hover_selection">False</property>
+		      <property name="hover_expand">False</property>
+		    </widget>
+		  </child>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">True</property>
+		  <property name="fill">True</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkHButtonBox" id="hbuttonbox3">
+		  <property name="visible">True</property>
+		  <property name="layout_style">GTK_BUTTONBOX_END</property>
+		  <property name="spacing">0</property>
+
+		  <child>
+		    <widget class="GtkButton" id="remove_button">
+		      <property name="visible">True</property>
+		      <property name="sensitive">False</property>
+		      <property name="can_default">True</property>
+		      <property name="can_focus">True</property>
+		      <property name="label">gtk-remove</property>
+		      <property name="use_stock">True</property>
+		      <property name="relief">GTK_RELIEF_NONE</property>
+		      <property name="focus_on_click">True</property>
+		    </widget>
+		  </child>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">True</property>
+		</packing>
+	      </child>
+	    </widget>
+	    <packing>
+	      <property name="shrink">False</property>
+	      <property name="resize">False</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkVBox" id="vbox7">
+	      <property name="border_width">6</property>
+	      <property name="visible">True</property>
+	      <property name="homogeneous">False</property>
+	      <property name="spacing">0</property>
+
+	      <child>
+		<widget class="GtkLabel" id="label38">
+		  <property name="visible">True</property>
+		  <property name="label" translatable="yes">Properties</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="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">False</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkScrolledWindow" id="scrolledwindow2">
+		  <property name="visible">True</property>
+		  <property name="can_focus">True</property>
+		  <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+		  <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+		  <property name="shadow_type">GTK_SHADOW_NONE</property>
+		  <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
+
+		  <child>
+		    <widget class="GtkViewport" id="viewport1">
+		      <property name="visible">True</property>
+		      <property name="shadow_type">GTK_SHADOW_NONE</property>
+
+		      <child>
+			<widget class="GtkVBox" id="properties_vbox">
+			  <property name="visible">True</property>
+			  <property name="homogeneous">False</property>
+			  <property name="spacing">5</property>
+
+			  <child>
+			    <widget class="GtkTable" id="table10">
+			      <property name="visible">True</property>
+			      <property name="n_rows">4</property>
+			      <property name="n_columns">2</property>
+			      <property name="homogeneous">False</property>
+			      <property name="row_spacing">5</property>
+			      <property name="column_spacing">5</property>
+
+			      <child>
+				<widget class="GtkLabel" id="label39">
+				  <property name="visible">True</property>
+				  <property name="label" translatable="yes">Name:</property>
+				  <property name="use_underline">False</property>
+				  <property name="use_markup">False</property>
+				  <property name="justify">GTK_JUSTIFY_RIGHT</property>
+				  <property name="wrap">False</property>
+				  <property name="selectable">False</property>
+				  <property name="xalign">1</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">0</property>
+				  <property name="bottom_attach">1</property>
+				  <property name="x_options">fill</property>
+				  <property name="y_options"></property>
+				</packing>
+			      </child>
+
+			      <child>
+				<widget class="GtkEntry" id="essid_entry">
+				  <property name="visible">True</property>
+				  <property name="can_focus">True</property>
+				  <property name="editable">True</property>
+				  <property name="visibility">True</property>
+				  <property name="max_length">0</property>
+				  <property name="text" translatable="yes"></property>
+				  <property name="has_frame">True</property>
+				  <property name="invisible_char">â</property>
+				  <property name="activates_default">False</property>
+				</widget>
+				<packing>
+				  <property name="left_attach">1</property>
+				  <property name="right_attach">2</property>
+				  <property name="top_attach">0</property>
+				  <property name="bottom_attach">1</property>
+				  <property name="y_options"></property>
+				</packing>
+			      </child>
+
+			      <child>
+				<widget class="GtkLabel" id="label40">
+				  <property name="visible">True</property>
+				  <property name="label" translatable="yes">bssids:</property>
+				  <property name="use_underline">False</property>
+				  <property name="use_markup">False</property>
+				  <property name="justify">GTK_JUSTIFY_RIGHT</property>
+				  <property name="wrap">False</property>
+				  <property name="selectable">False</property>
+				  <property name="xalign">1</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">1</property>
+				  <property name="bottom_attach">2</property>
+				  <property name="x_options">fill</property>
+				  <property name="y_options"></property>
+				</packing>
+			      </child>
+
+			      <child>
+				<widget class="GtkHBox" id="hbox11">
+				  <property name="visible">True</property>
+				  <property name="homogeneous">False</property>
+				  <property name="spacing">0</property>
+
+				  <child>
+				    <widget class="GtkEntry" id="bssids_entry">
+				      <property name="visible">True</property>
+				      <property name="can_focus">True</property>
+				      <property name="editable">False</property>
+				      <property name="visibility">True</property>
+				      <property name="max_length">0</property>
+				      <property name="text" translatable="yes"></property>
+				      <property name="has_frame">True</property>
+				      <property name="invisible_char">â</property>
+				      <property name="activates_default">False</property>
+				    </widget>
+				    <packing>
+				      <property name="padding">0</property>
+				      <property name="expand">True</property>
+				      <property name="fill">True</property>
+				    </packing>
+				  </child>
+
+				  <child>
+				    <widget class="GtkButton" id="bssids_modify">
+				      <property name="visible">True</property>
+				      <property name="sensitive">False</property>
+				      <property name="can_focus">True</property>
+				      <property name="label">gtk-edit</property>
+				      <property name="use_stock">True</property>
+				      <property name="relief">GTK_RELIEF_NONE</property>
+				      <property name="focus_on_click">True</property>
+				    </widget>
+				    <packing>
+				      <property name="padding">0</property>
+				      <property name="expand">False</property>
+				      <property name="fill">False</property>
+				    </packing>
+				  </child>
+				</widget>
+				<packing>
+				  <property name="left_attach">1</property>
+				  <property name="right_attach">2</property>
+				  <property name="top_attach">1</property>
+				  <property name="bottom_attach">2</property>
+				  <property name="x_options">fill</property>
+				  <property name="y_options">fill</property>
+				</packing>
+			      </child>
+
+			      <child>
+				<widget class="GtkLabel" id="label41">
+				  <property name="visible">True</property>
+				  <property name="label" translatable="yes">Security:</property>
+				  <property name="use_underline">False</property>
+				  <property name="use_markup">False</property>
+				  <property name="justify">GTK_JUSTIFY_RIGHT</property>
+				  <property name="wrap">False</property>
+				  <property name="selectable">False</property>
+				  <property name="xalign">1</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">3</property>
+				  <property name="bottom_attach">4</property>
+				  <property name="x_options">fill</property>
+				  <property name="y_options"></property>
+				</packing>
+			      </child>
+
+			      <child>
+				<widget class="GtkComboBox" id="security_combo">
+				  <property name="visible">True</property>
+				  <property name="sensitive">False</property>
+				  <property name="items" translatable="yes">None
+WEP 128-bit Passphrase
+WEB 64/128 bit Hex
+WEP 64/128-bit ASCII
+</property>
+				  <property name="add_tearoffs">False</property>
+				  <property name="focus_on_click">True</property>
+				</widget>
+				<packing>
+				  <property name="left_attach">1</property>
+				  <property name="right_attach">2</property>
+				  <property name="top_attach">3</property>
+				  <property name="bottom_attach">4</property>
+				  <property name="x_options">fill</property>
+				  <property name="y_options">fill</property>
+				</packing>
+			      </child>
+
+			      <child>
+				<widget class="GtkLabel" id="label42">
+				  <property name="visible">True</property>
+				  <property name="label" translatable="yes">Last Used:</property>
+				  <property name="use_underline">False</property>
+				  <property name="use_markup">False</property>
+				  <property name="justify">GTK_JUSTIFY_RIGHT</property>
+				  <property name="wrap">False</property>
+				  <property name="selectable">False</property>
+				  <property name="xalign">1</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="GnomeDateEdit" id="lastused_dateedit">
+				  <property name="visible">True</property>
+				  <property name="sensitive">False</property>
+				  <property name="dateedit_flags">GNOME_DATE_EDIT_SHOW_TIME|GNOME_DATE_EDIT_24_HR</property>
+				  <property name="lower_hour">0</property>
+				  <property name="upper_hour">23</property>
+				</widget>
+				<packing>
+				  <property name="left_attach">1</property>
+				  <property name="right_attach">2</property>
+				  <property name="top_attach">2</property>
+				  <property name="bottom_attach">3</property>
+				  <property name="y_options"></property>
+				</packing>
+			      </child>
+			    </widget>
+			    <packing>
+			      <property name="padding">0</property>
+			      <property name="expand">False</property>
+			      <property name="fill">True</property>
+			    </packing>
+			  </child>
+
+			  <child>
+			    <widget class="GtkVBox" id="swapout_vbox">
+			      <property name="visible">True</property>
+			      <property name="homogeneous">False</property>
+			      <property name="spacing">0</property>
+
+			      <child>
+				<placeholder/>
+			      </child>
+			    </widget>
+			    <packing>
+			      <property name="padding">0</property>
+			      <property name="expand">True</property>
+			      <property name="fill">True</property>
+			    </packing>
+			  </child>
+			</widget>
+		      </child>
+		    </widget>
+		  </child>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">True</property>
+		  <property name="fill">True</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkHButtonBox" id="hbuttonbox4">
+		  <property name="visible">True</property>
+		  <property name="layout_style">GTK_BUTTONBOX_END</property>
+		  <property name="spacing">0</property>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">True</property>
+		</packing>
+	      </child>
+	    </widget>
+	    <packing>
+	      <property name="shrink">False</property>
+	      <property name="resize">True</property>
+	    </packing>
+	  </child>
+	</widget>
+	<packing>
+	  <property name="padding">0</property>
+	  <property name="expand">True</property>
+	  <property name="fill">True</property>
+	</packing>
+      </child>
+    </widget>
+  </child>
+</widget>
+
+<widget class="GtkDialog" id="bssids_dialog">
+  <property name="width_request">300</property>
+  <property name="height_request">250</property>
+  <property name="title" translatable="yes">bssid editor</property>
+  <property name="type">GTK_WINDOW_TOPLEVEL</property>
+  <property name="window_position">GTK_WIN_POS_CENTER_ON_PARENT</property>
+  <property name="modal">False</property>
+  <property name="resizable">True</property>
+  <property name="destroy_with_parent">False</property>
+  <property name="decorated">True</property>
+  <property name="skip_taskbar_hint">False</property>
+  <property name="skip_pager_hint">False</property>
+  <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+  <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
+  <property name="focus_on_map">True</property>
+  <property name="urgency_hint">False</property>
+  <property name="has_separator">True</property>
+
+  <child internal-child="vbox">
+    <widget class="GtkVBox" id="vbox8">
+      <property name="visible">True</property>
+      <property name="homogeneous">False</property>
+      <property name="spacing">0</property>
+
+      <child internal-child="action_area">
+	<widget class="GtkHButtonBox" id="hbuttonbox5">
+	  <property name="visible">True</property>
+	  <property name="layout_style">GTK_BUTTONBOX_END</property>
+
+	  <child>
+	    <widget class="GtkButton" id="button3">
+	      <property name="visible">True</property>
+	      <property name="can_default">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="label">gtk-cancel</property>
+	      <property name="use_stock">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <property name="response_id">-6</property>
+	    </widget>
+	  </child>
+
+	  <child>
+	    <widget class="GtkButton" id="button4">
+	      <property name="visible">True</property>
+	      <property name="can_default">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="label">gtk-ok</property>
+	      <property name="use_stock">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <property name="response_id">-5</property>
+	    </widget>
+	  </child>
+	</widget>
+	<packing>
+	  <property name="padding">0</property>
+	  <property name="expand">False</property>
+	  <property name="fill">True</property>
+	  <property name="pack_type">GTK_PACK_END</property>
+	</packing>
+      </child>
+
+      <child>
+	<widget class="GtkVBox" id="vbox9">
+	  <property name="border_width">5</property>
+	  <property name="visible">True</property>
+	  <property name="homogeneous">False</property>
+	  <property name="spacing">0</property>
+
+	  <child>
+	    <widget class="GtkLabel" id="label43">
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">Access points</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="padding">0</property>
+	      <property name="expand">False</property>
+	      <property name="fill">False</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkHBox" id="hbox12">
+	      <property name="visible">True</property>
+	      <property name="homogeneous">False</property>
+	      <property name="spacing">5</property>
+
+	      <child>
+		<widget class="GtkScrolledWindow" id="scrolledwindow3">
+		  <property name="visible">True</property>
+		  <property name="can_focus">True</property>
+		  <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+		  <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+		  <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
+		  <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
+
+		  <child>
+		    <widget class="GtkTreeView" id="bssids_treeview">
+		      <property name="visible">True</property>
+		      <property name="can_focus">True</property>
+		      <property name="headers_visible">False</property>
+		      <property name="rules_hint">False</property>
+		      <property name="reorderable">False</property>
+		      <property name="enable_search">False</property>
+		      <property name="fixed_height_mode">False</property>
+		      <property name="hover_selection">False</property>
+		      <property name="hover_expand">False</property>
+		    </widget>
+		  </child>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">True</property>
+		  <property name="fill">True</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkVButtonBox" id="vbuttonbox1">
+		  <property name="visible">True</property>
+		  <property name="layout_style">GTK_BUTTONBOX_START</property>
+		  <property name="spacing">5</property>
+
+		  <child>
+		    <widget class="GtkButton" id="add_button">
+		      <property name="visible">True</property>
+		      <property name="can_default">True</property>
+		      <property name="can_focus">True</property>
+		      <property name="relief">GTK_RELIEF_NORMAL</property>
+		      <property name="focus_on_click">True</property>
+
+		      <child>
+			<widget class="GtkAlignment" id="alignment2">
+			  <property name="visible">True</property>
+			  <property name="xalign">0</property>
+			  <property name="yalign">0.5</property>
+			  <property name="xscale">0</property>
+			  <property name="yscale">0</property>
+			  <property name="top_padding">0</property>
+			  <property name="bottom_padding">0</property>
+			  <property name="left_padding">0</property>
+			  <property name="right_padding">0</property>
+
+			  <child>
+			    <widget class="GtkHBox" id="hbox13">
+			      <property name="visible">True</property>
+			      <property name="homogeneous">False</property>
+			      <property name="spacing">2</property>
+
+			      <child>
+				<widget class="GtkImage" id="image3">
+				  <property name="visible">True</property>
+				  <property name="stock">gtk-add</property>
+				  <property name="icon_size">4</property>
+				  <property name="xalign">0.5</property>
+				  <property name="yalign">0.5</property>
+				  <property name="xpad">0</property>
+				  <property name="ypad">0</property>
+				</widget>
+				<packing>
+				  <property name="padding">0</property>
+				  <property name="expand">False</property>
+				  <property name="fill">False</property>
+				</packing>
+			      </child>
+
+			      <child>
+				<widget class="GtkLabel" id="label44">
+				  <property name="visible">True</property>
+				  <property name="label" translatable="yes">_Add</property>
+				  <property name="use_underline">True</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.5</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="padding">0</property>
+				  <property name="expand">False</property>
+				  <property name="fill">False</property>
+				</packing>
+			      </child>
+			    </widget>
+			  </child>
+			</widget>
+		      </child>
+		    </widget>
+		  </child>
+
+		  <child>
+		    <widget class="GtkButton" id="remove_button">
+		      <property name="visible">True</property>
+		      <property name="sensitive">False</property>
+		      <property name="can_default">True</property>
+		      <property name="can_focus">True</property>
+		      <property name="relief">GTK_RELIEF_NORMAL</property>
+		      <property name="focus_on_click">True</property>
+
+		      <child>
+			<widget class="GtkAlignment" id="alignment3">
+			  <property name="visible">True</property>
+			  <property name="xalign">0</property>
+			  <property name="yalign">0.5</property>
+			  <property name="xscale">0</property>
+			  <property name="yscale">0</property>
+			  <property name="top_padding">0</property>
+			  <property name="bottom_padding">0</property>
+			  <property name="left_padding">0</property>
+			  <property name="right_padding">0</property>
+
+			  <child>
+			    <widget class="GtkHBox" id="hbox14">
+			      <property name="visible">True</property>
+			      <property name="homogeneous">False</property>
+			      <property name="spacing">2</property>
+
+			      <child>
+				<widget class="GtkImage" id="image4">
+				  <property name="visible">True</property>
+				  <property name="stock">gtk-remove</property>
+				  <property name="icon_size">4</property>
+				  <property name="xalign">0.5</property>
+				  <property name="yalign">0.5</property>
+				  <property name="xpad">0</property>
+				  <property name="ypad">0</property>
+				</widget>
+				<packing>
+				  <property name="padding">0</property>
+				  <property name="expand">False</property>
+				  <property name="fill">False</property>
+				</packing>
+			      </child>
+
+			      <child>
+				<widget class="GtkLabel" id="label45">
+				  <property name="visible">True</property>
+				  <property name="label" translatable="yes">_Remove</property>
+				  <property name="use_underline">True</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.5</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="padding">0</property>
+				  <property name="expand">False</property>
+				  <property name="fill">False</property>
+				</packing>
+			      </child>
+			    </widget>
+			  </child>
+			</widget>
+		      </child>
+		    </widget>
+		  </child>
+
+		  <child>
+		    <widget class="GtkButton" id="edit_button">
+		      <property name="visible">True</property>
+		      <property name="sensitive">False</property>
+		      <property name="can_default">True</property>
+		      <property name="can_focus">True</property>
+		      <property name="relief">GTK_RELIEF_NORMAL</property>
+		      <property name="focus_on_click">True</property>
+
+		      <child>
+			<widget class="GtkAlignment" id="alignment4">
+			  <property name="visible">True</property>
+			  <property name="xalign">0</property>
+			  <property name="yalign">0.5</property>
+			  <property name="xscale">0</property>
+			  <property name="yscale">0</property>
+			  <property name="top_padding">0</property>
+			  <property name="bottom_padding">0</property>
+			  <property name="left_padding">0</property>
+			  <property name="right_padding">0</property>
+
+			  <child>
+			    <widget class="GtkHBox" id="hbox15">
+			      <property name="visible">True</property>
+			      <property name="homogeneous">False</property>
+			      <property name="spacing">2</property>
+
+			      <child>
+				<widget class="GtkImage" id="image5">
+				  <property name="visible">True</property>
+				  <property name="stock">gtk-edit</property>
+				  <property name="icon_size">4</property>
+				  <property name="xalign">0.5</property>
+				  <property name="yalign">0.5</property>
+				  <property name="xpad">0</property>
+				  <property name="ypad">0</property>
+				</widget>
+				<packing>
+				  <property name="padding">0</property>
+				  <property name="expand">False</property>
+				  <property name="fill">False</property>
+				</packing>
+			      </child>
+
+			      <child>
+				<widget class="GtkLabel" id="label46">
+				  <property name="visible">True</property>
+				  <property name="label" translatable="yes">_Edit</property>
+				  <property name="use_underline">True</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.5</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="padding">0</property>
+				  <property name="expand">False</property>
+				  <property name="fill">False</property>
+				</packing>
+			      </child>
+			    </widget>
+			  </child>
+			</widget>
+		      </child>
+		    </widget>
+		  </child>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">True</property>
+		</packing>
+	      </child>
+	    </widget>
+	    <packing>
+	      <property name="padding">0</property>
+	      <property name="expand">True</property>
+	      <property name="fill">True</property>
+	    </packing>
+	  </child>
+	</widget>
+	<packing>
+	  <property name="padding">0</property>
+	  <property name="expand">True</property>
+	  <property name="fill">True</property>
+	</packing>
+      </child>
+    </widget>
+  </child>
+</widget>
+
+<widget class="GtkDialog" id="bssid_editor">
+  <property name="title" translatable="yes">Edit Access Point</property>
+  <property name="type">GTK_WINDOW_TOPLEVEL</property>
+  <property name="window_position">GTK_WIN_POS_NONE</property>
+  <property name="modal">False</property>
+  <property name="resizable">False</property>
+  <property name="destroy_with_parent">False</property>
+  <property name="decorated">True</property>
+  <property name="skip_taskbar_hint">False</property>
+  <property name="skip_pager_hint">False</property>
+  <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+  <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
+  <property name="focus_on_map">True</property>
+  <property name="urgency_hint">False</property>
+  <property name="has_separator">True</property>
+
+  <child internal-child="vbox">
+    <widget class="GtkVBox" id="vbox10">
+      <property name="visible">True</property>
+      <property name="homogeneous">False</property>
+      <property name="spacing">0</property>
+
+      <child internal-child="action_area">
+	<widget class="GtkHButtonBox" id="hbuttonbox6">
+	  <property name="visible">True</property>
+	  <property name="layout_style">GTK_BUTTONBOX_END</property>
+
+	  <child>
+	    <widget class="GtkButton" id="button5">
+	      <property name="visible">True</property>
+	      <property name="can_default">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="label">gtk-cancel</property>
+	      <property name="use_stock">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <property name="response_id">-6</property>
+	    </widget>
+	  </child>
+
+	  <child>
+	    <widget class="GtkButton" id="button6">
+	      <property name="visible">True</property>
+	      <property name="can_default">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="label">gtk-ok</property>
+	      <property name="use_stock">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <property name="response_id">-5</property>
+	    </widget>
+	  </child>
+	</widget>
+	<packing>
+	  <property name="padding">0</property>
+	  <property name="expand">False</property>
+	  <property name="fill">True</property>
+	  <property name="pack_type">GTK_PACK_END</property>
+	</packing>
+      </child>
+
+      <child>
+	<widget class="GtkHBox" id="hbox16">
+	  <property name="border_width">5</property>
+	  <property name="visible">True</property>
+	  <property name="homogeneous">False</property>
+	  <property name="spacing">5</property>
+
+	  <child>
+	    <widget class="GtkLabel" id="label47">
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">Access Point:</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.5</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="padding">0</property>
+	      <property name="expand">False</property>
+	      <property name="fill">False</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkEntry" id="bssid_entry">
+	      <property name="visible">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="editable">True</property>
+	      <property name="visibility">True</property>
+	      <property name="max_length">0</property>
+	      <property name="text" translatable="yes"></property>
+	      <property name="has_frame">True</property>
+	      <property name="invisible_char">â</property>
+	      <property name="activates_default">False</property>
+	    </widget>
+	    <packing>
+	      <property name="padding">0</property>
+	      <property name="expand">True</property>
+	      <property name="fill">True</property>
+	    </packing>
+	  </child>
+	</widget>
+	<packing>
+	  <property name="padding">5</property>
+	  <property name="expand">False</property>
+	  <property name="fill">True</property>
+	</packing>
+      </child>
+    </widget>
+  </child>
+</widget>
+
 </glade-interface>

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	Tue Feb 19 22:13:14 2008
@@ -190,91 +190,3 @@
 	model = GTK_LIST_STORE (gtk_combo_box_get_model (combo));
 	g_object_unref (G_OBJECT (model));
 }
-
-
-GtkTreeModel *
-wso_wpa_create_key_type_model (int capabilities, gboolean wpa_eap, int *num_added)
-{
-	GtkListStore *	model;
-	GtkTreeIter	iter;
-	int			num = 1;
-	const char *	name;
-
-	g_return_val_if_fail (num_added != NULL, NULL);
-
-	model = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_INT);
-
-	name = _("Automatic (Default)");
-	gtk_list_store_append (model, &iter);
-	gtk_list_store_set (model, &iter, WPA_KEY_TYPE_NAME_COL, name,
-					WPA_KEY_TYPE_CIPHER_COL, NM_AUTH_TYPE_WPA_PSK_AUTO, -1);
-
-	if (capabilities & NM_802_11_CAP_CIPHER_CCMP)
-	{
-		name = _("AES-CCMP");
-		gtk_list_store_append (model, &iter);
-		gtk_list_store_set (model, &iter, WPA_KEY_TYPE_NAME_COL, name,
-			WPA_KEY_TYPE_CIPHER_COL, IW_AUTH_CIPHER_CCMP, -1);
-		num++;
-	}
-	if (capabilities & NM_802_11_CAP_CIPHER_TKIP)
-	{
-		name = _("TKIP");
-		gtk_list_store_append (model, &iter);
-		gtk_list_store_set (model, &iter, WPA_KEY_TYPE_NAME_COL, name,
-			WPA_KEY_TYPE_CIPHER_COL, IW_AUTH_CIPHER_TKIP, -1);
-		num++;
-	}
-	if (wpa_eap && capabilities & NM_802_11_CAP_KEY_MGMT_802_1X)
-	{
-		name = _("Dynamic WEP");
-		gtk_list_store_append (model, &iter);
-		gtk_list_store_set (model, &iter, WPA_KEY_TYPE_NAME_COL, name,
-			WPA_KEY_TYPE_CIPHER_COL, IW_AUTH_CIPHER_WEP104, -1);
-		num++;
-	}
-
-	*num_added = num;
-	return GTK_TREE_MODEL (model);
-}
-
-GtkTreeModel *
-wso_wpa_create_phase2_type_model (int capabilities, gboolean wpa_eap, int *num_added)
-{
-	GtkListStore *	model;
-	GtkTreeIter	iter;
-	const char *	name;
-
-	g_return_val_if_fail (num_added != NULL, NULL);
-
-	model = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_INT);
-
-	name = _("None (Default)");
-	gtk_list_store_append (model, &iter);
-	gtk_list_store_set (model, &iter, WPA_KEY_TYPE_NAME_COL, name,
-					WPA_KEY_TYPE_CIPHER_COL, NM_PHASE2_AUTH_NONE, -1);
-
-	name = _("PAP");
-	gtk_list_store_append (model, &iter);
-	gtk_list_store_set (model, &iter, WPA_KEY_TYPE_NAME_COL, name,
-					WPA_KEY_TYPE_CIPHER_COL, NM_PHASE2_AUTH_PAP, -1);
-
-	name = _("MSCHAP");
-	gtk_list_store_append (model, &iter);
-	gtk_list_store_set (model, &iter, WPA_KEY_TYPE_NAME_COL, name,
-					WPA_KEY_TYPE_CIPHER_COL, NM_PHASE2_AUTH_MSCHAP, -1);
-
-	name = _("MSCHAPV2");
-	gtk_list_store_append (model, &iter);
-	gtk_list_store_set (model, &iter, WPA_KEY_TYPE_NAME_COL, name,
-					WPA_KEY_TYPE_CIPHER_COL, NM_PHASE2_AUTH_MSCHAPV2, -1);
-
-	name = _("GTC");
-	gtk_list_store_append (model, &iter);
-	gtk_list_store_set (model, &iter, WPA_KEY_TYPE_NAME_COL, name,
-					WPA_KEY_TYPE_CIPHER_COL, NM_PHASE2_AUTH_GTC, -1);
-
-	*num_added = 5;
-	return GTK_TREE_MODEL (model);
-}
-

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	Tue Feb 19 22:13:14 2008
@@ -29,6 +29,7 @@
 #include "wso-leap.h"
 #include "wso-private.h"
 #include "dbus-helpers.h"
+#include "libnma/libnma.h"
 #include "NetworkManager.h"
 
 
@@ -77,7 +78,7 @@
 	entry = glade_xml_get_widget (opt->uixml, "leap_key_mgmt_combobox");
 	combo_model = gtk_combo_box_get_model(GTK_COMBO_BOX(entry));
 	gtk_combo_box_get_active_iter(GTK_COMBO_BOX(entry), &iter);
-	gtk_tree_model_get(combo_model, &iter, 1, &opt->data->key_mgmt, -1);
+	gtk_tree_model_get(combo_model, &iter, LEAP_KEY_MGMT_VALUE_COL, &opt->data->key_mgmt, -1);
 
 	dbus_message_iter_init_append (message, &dbus_iter);
 
@@ -89,6 +90,11 @@
 	return TRUE;
 }
 
+static void show_password_cb (GtkToggleButton *button, GtkEntry *entry)
+{
+	gtk_entry_set_visibility (entry, gtk_toggle_button_get_active (button));
+}
+
 static GtkWidget *
 widget_create_func (WirelessSecurityOption *opt,
                     GtkSignalFunc validate_cb,
@@ -97,8 +103,7 @@
 	GtkWidget *	entry;
 	GtkWidget *	widget;
 	GtkWidget *	key_mgmt;
-	GtkListStore *	list_store;
-	GtkTreeIter 	iter;
+	GtkTreeModel *	model;
 
 	g_return_val_if_fail (opt != NULL, NULL);
 	g_return_val_if_fail (opt->data != NULL, NULL);
@@ -112,18 +117,16 @@
 	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);
+
 	/* set-up key_mgmt combo box */
 
 	key_mgmt = glade_xml_get_widget (opt->uixml, "leap_key_mgmt_combobox");
 
 	/* create tree model containing combo box items */
-	list_store = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_STRING);
-	gtk_list_store_append(list_store, &iter);
-	gtk_list_store_set(list_store, &iter, 0, "IEEE 802.1X", 1, "IEEE8021X", -1);
-	gtk_list_store_append(list_store, &iter);
-	gtk_list_store_set(list_store, &iter, 0, "WPA-EAP", 1, "WPA-EAP", -1);
-
-	gtk_combo_box_set_model(GTK_COMBO_BOX(key_mgmt), GTK_TREE_MODEL(list_store));
+	model = wso_leap_create_key_mgmt_model ();
+	gtk_combo_box_set_model(GTK_COMBO_BOX(key_mgmt), model);
 
 	/* set default choice to be IEEE 802.1X */
 	gtk_combo_box_set_active(GTK_COMBO_BOX(key_mgmt), 0);

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	Tue Feb 19 22:13:14 2008
@@ -76,11 +76,4 @@
 int			wso_wep_auth_combo_get_auth_alg (WirelessSecurityOption *opt, GtkComboBox * combo);
 void			wso_wep_auth_combo_cleanup (WirelessSecurityOption *opt, GtkComboBox * combo);
 
-#define WPA_KEY_TYPE_NAME_COL		0
-#define WPA_KEY_TYPE_CIPHER_COL	1
-
-GtkTreeModel *	wso_wpa_create_key_type_model (int capabilities, gboolean wpa_eap, int *num_added);
-GtkTreeModel *	wso_wpa_create_phase2_type_model (int capabilities, gboolean wpa_eap, int *num_added);
-
-
 #endif	/* WIRELESS_SECURITY_OPTION_PRIVATE_H */

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	Tue Feb 19 22:13:14 2008
@@ -33,9 +33,8 @@
 #include "cipher.h"
 #include "dbus-helpers.h"
 #include "NetworkManager.h"
+#include "libnma/libnma.h"
 
-#define WPA_EAP_NAME_COL		0
-#define WPA_EAP_VALUE_COL	1
 
 struct OptData
 {
@@ -237,16 +236,6 @@
 	GtkCellRenderer *		renderer;
 	int					num_added;
 
-	struct {
-		const char *		name;
-		int				value;
-	} *list, eap_method_list[] = {
-		{ _("PEAP"),		NM_EAP_METHOD_PEAP },
-		{ _("TLS"),		NM_EAP_METHOD_TLS },
-		{ _("TTLS"),		NM_EAP_METHOD_TTLS },
-		{ NULL,			0 }
-	};
-
 	g_return_val_if_fail (glade_file != NULL, NULL);
 
 	opt = g_malloc0 (sizeof (WirelessSecurityOption));
@@ -267,14 +256,7 @@
 	}
 
 	eap_method_combo = glade_xml_get_widget (opt->uixml, "wpa_eap_eap_method_combo");
-	model = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_INT);
-	list = eap_method_list;
-	while (list->name)
-	{
-		gtk_list_store_append (model, &iter);
-		gtk_list_store_set (model, &iter, WPA_EAP_NAME_COL, list->name, WPA_EAP_VALUE_COL, list->value, -1);
-		list++;
-	}
+	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);
 	gtk_combo_box_set_active_iter (GTK_COMBO_BOX (eap_method_combo), &iter);
@@ -293,7 +275,7 @@
 		gtk_widget_set_sensitive (key_type_combo, FALSE);
 
 	phase2_type_combo = glade_xml_get_widget (opt->uixml, "wpa_eap_phase2_type_combo");
-	tree_model = wso_wpa_create_phase2_type_model (capabilities, TRUE, &num_added);
+	tree_model = wso_wpa_create_phase2_type_model (capabilities, &num_added);
 	gtk_combo_box_set_model (GTK_COMBO_BOX (phase2_type_combo), tree_model);
 	gtk_tree_model_get_iter_first (tree_model, &iter);
 	gtk_combo_box_set_active_iter (GTK_COMBO_BOX (phase2_type_combo), &iter);

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	Tue Feb 19 22:13:14 2008
@@ -34,6 +34,7 @@
 #include "cipher-wpa-psk-passphrase.h"
 #include "dbus-helpers.h"
 #include "NetworkManager.h"
+#include "libnma/libnma.h"
 
 
 struct OptData



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]