aboutsummaryrefslogtreecommitdiffstats
path: root/gtk
diff options
context:
space:
mode:
authorGerald Combs <gerald@wireshark.org>2011-02-07 20:24:42 +0000
committerGerald Combs <gerald@wireshark.org>2011-02-07 20:24:42 +0000
commitc257693621ec8ea2dc9f47655d76aadb9f700b49 (patch)
tree70c9d2ba68d581bd96a65e06e021b162e307034e /gtk
parent4efa18be2289e6bfbe0f91d45e34d372acdad092 (diff)
Switch from GtkCList (which is deprecated) to GtkTreeView+GtkListStore.
Make a bunch of functions static. Get rid of a no-longer-necessary struct. Clean up other parts of the code. svn path=/trunk/; revision=35862
Diffstat (limited to 'gtk')
-rw-r--r--gtk/airpcap_dlg.c1049
-rw-r--r--gtk/airpcap_gui_utils.c265
-rw-r--r--gtk/airpcap_gui_utils.h44
-rw-r--r--gtk/keys.h12
4 files changed, 619 insertions, 751 deletions
diff --git a/gtk/airpcap_dlg.c b/gtk/airpcap_dlg.c
index b863185c24..e662139b76 100644
--- a/gtk/airpcap_dlg.c
+++ b/gtk/airpcap_dlg.c
@@ -24,7 +24,6 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
@@ -62,6 +61,14 @@
#include "airpcap_dlg.h"
/*
+ * This structure is used because we need to store infos about the currently selected
+ * row in the key list.
+ */
+typedef struct{
+ gint row;
+}airpcap_key_ls_selected_info_t;
+
+/*
* This function is used to write the preferences to the preferences file.
* It has the same behaviour as prefs_main_write() in prefs_dlg.c
*/
@@ -94,47 +101,69 @@ write_prefs_to_file(void)
/*
* Callback for the select row event in the key list widget
*/
-void
-on_key_ls_select_row(GtkWidget *widget _U_,
- gint row,
- gint column,
- GdkEventButton *event _U_,
- gpointer data)
+static void
+on_key_list_select_row(GtkTreeSelection *selection, gpointer data)
{
- airpcap_key_ls_selected_info_t* selected_item;
-
- selected_item = g_object_get_data(G_OBJECT(data),AIRPCAP_ADVANCED_SELECTED_KEY_LIST_ITEM_KEY);
+ GtkWidget *add_new_key_bt, *edit_key_bt, *remove_key_bt;
+ GtkWidget *move_key_up_bt, *move_key_down_bt;
+ GtkTreeIter iter;
+ GtkTreeModel *model;
+ GtkTreePath *path, *path_up, *path_down;
+
+ add_new_key_bt = g_object_get_data(G_OBJECT(data), AIRPCAP_KEY_MGMT_NEW_KEY);
+ edit_key_bt = g_object_get_data(G_OBJECT(data), AIRPCAP_KEY_MGMT_EDIT_KEY);
+ remove_key_bt = g_object_get_data(G_OBJECT(data), AIRPCAP_KEY_MGMT_DELETE_KEY);
+ move_key_up_bt = g_object_get_data(G_OBJECT(data), AIRPCAP_KEY_MGMT_UP_KEY);
+ move_key_down_bt = g_object_get_data(G_OBJECT(data), AIRPCAP_KEY_MGMT_DOWN_KEY);
+
+ if (gtk_tree_selection_get_selected(selection, &model, &iter)) {
+ path = gtk_tree_model_get_path(model, &iter);
+ path_up = gtk_tree_path_copy(path);
+ path_down = gtk_tree_path_copy(path);
+ gtk_tree_path_next(path_down);
+
+ if (gtk_tree_model_iter_n_children(model, NULL) >= MAX_ENCRYPTION_KEYS) {
+ gtk_widget_set_sensitive(add_new_key_bt, FALSE);
+ } else {
+ gtk_widget_set_sensitive(add_new_key_bt, TRUE);
+ }
- selected_item->row = row;
- selected_item->column = column;
-}
+ gtk_widget_set_sensitive(edit_key_bt, TRUE);
+ gtk_widget_set_sensitive(remove_key_bt, TRUE);
-/*
- * Callback for the unselect row event in the key list widget
- */
-void
-on_key_ls_unselect_row(GtkWidget *widget _U_,
- gint row _U_,
- gint column _U_,
- GdkEventButton *event _U_,
- gpointer data)
-{
- airpcap_key_ls_selected_info_t* selected_item;
+ /* ...and we have to use two different methods to figure out first/last because? */
+ if (gtk_tree_path_prev(path_up)) {
+ gtk_widget_set_sensitive(move_key_up_bt, TRUE);
+ } else {
+ gtk_widget_set_sensitive(move_key_up_bt, FALSE);
+ }
- selected_item = g_object_get_data(G_OBJECT(data),AIRPCAP_ADVANCED_SELECTED_KEY_LIST_ITEM_KEY);
+ if (gtk_tree_model_get_iter(model, &iter, path_down)) {
+ gtk_widget_set_sensitive(move_key_down_bt, TRUE);
+ } else {
+ gtk_widget_set_sensitive(move_key_down_bt, FALSE);
+ }
- selected_item->row = NO_ROW_SELECTED;
- selected_item->column = NO_COLUMN_SELECTED;
+ gtk_tree_path_free(path);
+ gtk_tree_path_free(path_up);
+ gtk_tree_path_free(path_down);
+ } else {
+ gtk_widget_set_sensitive(add_new_key_bt, FALSE);
+ gtk_widget_set_sensitive(edit_key_bt, FALSE);
+ gtk_widget_set_sensitive(remove_key_bt, FALSE);
+ gtk_widget_set_sensitive(move_key_up_bt, FALSE);
+ gtk_widget_set_sensitive(move_key_down_bt, FALSE);
+ }
}
-
/*
- * Callback for the click column event in the key list widget
+ * Callback for the select row event in the key list widget
*/
-void
-on_key_ls_click_column(GtkWidget *widget _U_,
- gint column _U_,
- gpointer data _U_)
-{
+static void
+on_key_list_reorder(GtkTreeModel *model _U_, GtkTreePath *path _U_, GtkTreeIter *iter _U_, gpointer no _U_, gpointer data) {
+ GtkTreeSelection *selection;
+
+ selection = g_object_get_data(G_OBJECT(data), AIRPCAP_ADVANCED_EDIT_KEY_SELECTION_KEY);
+ on_key_list_select_row(selection, data);
}
/*
@@ -182,7 +211,7 @@ on_edit_type_cb_changed(GtkWidget *w, gpointer data)
type_text = gtk_combo_box_get_active_text(GTK_COMBO_BOX(type_cb));
- if (string_is_not_empty(type_text))
+ if (g_ascii_strcasecmp(type_text, ""))
{
/*
* If it is a WEP key, no SSID is required! Gray out the entry text so
@@ -250,7 +279,7 @@ on_add_type_cb_changed(GtkWidget *w, gpointer data)
type_text = gtk_combo_box_get_active_text(GTK_COMBO_BOX(type_cb));
- if (string_is_not_empty(type_text))
+ if (g_ascii_strcasecmp(type_text, ""))
{
/*
* If it is a WEP key, no SSID is required! Gray out rhe entry text so
@@ -296,19 +325,6 @@ on_add_type_cb_changed(GtkWidget *w, gpointer data)
}
/*
- * Returns FALSE if a text string has length 0, i.e. the first char
- * is '\0', TRUE otherwise
- */
-gboolean
-string_is_not_empty(gchar *s)
-{
- if (g_ascii_strcasecmp(s,"") != 0)
- return TRUE;
- else
- return FALSE;
-}
-
-/*
* Callback for the wrong crc combo
*/
static void
@@ -354,7 +370,8 @@ on_capture_type_cb_changed(GtkWidget *cb, gpointer user_data _U_)
/*
* Thread function used to blink the led
*/
-gboolean update_blink(gpointer data)
+static gboolean
+update_blink(gpointer data)
{
airpcap_if_info_t* sel;
PAirpcapHandle ad;
@@ -383,7 +400,7 @@ gboolean update_blink(gpointer data)
/*
* Blink button callback
*/
-void
+static void
on_blink_bt_clicked( GtkWidget *blink_bt, gpointer data _U_)
{
PAirpcapHandle ad = NULL;
@@ -418,7 +435,7 @@ on_blink_bt_clicked( GtkWidget *blink_bt, gpointer data _U_)
/*
* Callback for the 'Any' adapter What's This button.
*/
-void
+static void
on_what_s_this_bt_clicked( GtkWidget *blink_bt _U_, gpointer data _U_)
{
simple_dialog(ESD_TYPE_INFO,ESD_BTN_OK,
@@ -433,7 +450,7 @@ on_what_s_this_bt_clicked( GtkWidget *blink_bt _U_, gpointer data _U_)
}
/* the window was closed, cleanup things */
-void
+static void
on_key_management_destroy(GtkWidget *w _U_, gpointer data)
{
GtkWidget *airpcap_advanced_w,
@@ -508,7 +525,7 @@ on_airpcap_advanced_destroy(GtkWidget *w _U_, gpointer data)
* can't revert back to the old set of keys by pressing 'Cancel'. We
* either need to fix reversion or get rid of the 'Apply' button.
*/
-void
+static void
on_key_management_apply_bt_clicked(GtkWidget *button _U_, gpointer data)
{
/* advenced window */
@@ -517,16 +534,17 @@ on_key_management_apply_bt_clicked(GtkWidget *button _U_, gpointer data)
/* widgets in the toolbar */
GtkWidget *toolbar;
GtkWidget *toolbar_cb;
- GtkWidget *key_ls;
GtkWidget *decryption_mode_cb;
+ GtkListStore *key_list_store;
+
module_t *wlan_module = prefs_find_module("wlan");
gchar *decryption_mode_string;
/* retrieve main window */
key_management_w = GTK_WIDGET(data);
decryption_mode_cb = GTK_WIDGET(g_object_get_data(G_OBJECT(key_management_w),AIRPCAP_ADVANCED_DECRYPTION_MODE_KEY));
- key_ls = GTK_WIDGET(g_object_get_data(G_OBJECT(key_management_w),AIRPCAP_ADVANCED_KEYLIST_KEY));
+ key_list_store = GTK_LIST_STORE(g_object_get_data(G_OBJECT(key_management_w),AIRPCAP_ADVANCED_KEYLIST_KEY));
toolbar = GTK_WIDGET(g_object_get_data(G_OBJECT(key_management_w),AIRPCAP_TOOLBAR_KEY));
toolbar_cb = GTK_WIDGET(g_object_get_data(G_OBJECT(key_management_w),AIRPCAP_TOOLBAR_DECRYPTION_KEY));
@@ -553,7 +571,7 @@ on_key_management_apply_bt_clicked(GtkWidget *button _U_, gpointer data)
g_free(decryption_mode_string);
/* Save the configuration */
- airpcap_read_and_save_decryption_keys_from_clist(key_ls,airpcap_if_selected,airpcap_if_list); /* This will save the keys for every adapter */
+ airpcap_read_and_save_decryption_keys_from_list_store(key_list_store,airpcap_if_selected,airpcap_if_list); /* This will save the keys for every adapter */
/* The update will make redissect al the packets... no need to do it here again */
update_decryption_mode(toolbar_cb);
@@ -563,15 +581,6 @@ on_key_management_apply_bt_clicked(GtkWidget *button _U_, gpointer data)
}
/*
- * Callback for the 'Reset Configuration' button.
- */
-void
-on_reset_configuration_bt_clicked(GtkWidget *button _U_, gpointer data _U_)
-{
- return;
-}
-
-/*
* Callback used to add a WEP key in the add new key box;
*/
static void
@@ -581,7 +590,7 @@ on_add_key_ok_bt_clicked(GtkWidget *widget _U_, gpointer data)
*key_en,
*ssid_en;
- GtkWidget *key_ls;
+ GtkListStore *key_list_store;
GString *new_type_string,
*new_key_string,
@@ -591,26 +600,13 @@ on_add_key_ok_bt_clicked(GtkWidget *widget _U_, gpointer data)
gchar *key_entered = NULL;
gchar *ssid_entered = NULL;
- airpcap_key_ls_selected_info_t *selected_item;
-
- int keys_in_list = 0;
-
unsigned int i;
- gint r = NO_ROW_SELECTED;
- gint c = NO_COLUMN_SELECTED;
-
- key_ls = g_object_get_data(G_OBJECT(data),AIRPCAP_ADVANCED_ADD_KEY_LIST_KEY);
- selected_item = g_object_get_data(G_OBJECT(data),AIRPCAP_ADVANCED_SELECTED_KEY_LIST_ITEM_KEY);
+ key_list_store = g_object_get_data(G_OBJECT(data),AIRPCAP_ADVANCED_ADD_KEY_LIST_KEY);
type_cb = g_object_get_data(G_OBJECT(data),AIRPCAP_ADVANCED_ADD_KEY_TYPE_KEY);
key_en = g_object_get_data(G_OBJECT(data),AIRPCAP_ADVANCED_ADD_KEY_KEY_KEY);
ssid_en = g_object_get_data(G_OBJECT(data),AIRPCAP_ADVANCED_ADD_KEY_SSID_KEY);
- r = selected_item->row;
- c = selected_item->column;
-
- keys_in_list = GTK_CLIST(key_ls)->rows;
-
type_entered = gtk_combo_box_get_active_text(GTK_COMBO_BOX(type_cb));
key_entered = g_strdup(gtk_entry_get_text(GTK_ENTRY(key_en)));
ssid_entered = g_strdup(gtk_entry_get_text(GTK_ENTRY(ssid_en)));
@@ -624,11 +620,8 @@ on_add_key_ok_bt_clicked(GtkWidget *widget _U_, gpointer data)
g_free(key_entered );
g_free(ssid_entered);
- g_strchug(new_key_string->str);
- g_strchomp(new_key_string->str);
-
- g_strchug(new_ssid_string->str);
- g_strchomp(new_ssid_string->str);
+ g_strstrip(new_key_string->str);
+ g_strstrip(new_ssid_string->str);
/* Check which type of key the user has entered */
if (g_ascii_strcasecmp(new_type_string->str,AIRPCAP_WEP_KEY_STRING) == 0) /* WEP key */
@@ -671,7 +664,7 @@ on_add_key_ok_bt_clicked(GtkWidget *widget _U_, gpointer data)
}
/* If so... add key */
- airpcap_add_key_to_list(key_ls, new_type_string->str, new_key_string->str, new_ssid_string->str);
+ airpcap_add_key_to_list(key_list_store, new_type_string->str, new_key_string->str, new_ssid_string->str);
if (airpcap_if_selected != NULL) airpcap_if_selected->saved = FALSE;
}
@@ -706,7 +699,7 @@ on_add_key_ok_bt_clicked(GtkWidget *widget _U_, gpointer data)
}
/* If so... add key */
- airpcap_add_key_to_list(key_ls, new_type_string->str, new_key_string->str, new_ssid_string->str);
+ airpcap_add_key_to_list(key_list_store, new_type_string->str, new_key_string->str, new_ssid_string->str);
if (airpcap_if_selected != NULL) airpcap_if_selected->saved = FALSE;
}
@@ -741,7 +734,7 @@ on_add_key_ok_bt_clicked(GtkWidget *widget _U_, gpointer data)
}
/* If so... add key */
- airpcap_add_key_to_list(key_ls, new_type_string->str, new_key_string->str, new_ssid_string->str);
+ airpcap_add_key_to_list(key_list_store, new_type_string->str, new_key_string->str, new_ssid_string->str);
if (airpcap_if_selected != NULL) airpcap_if_selected->saved = FALSE;
}
@@ -768,7 +761,9 @@ on_edit_key_ok_bt_clicked(GtkWidget *widget _U_, gpointer data)
*key_en,
*ssid_en;
- GtkWidget *key_ls;
+ GtkListStore *key_list_store;
+ GtkTreeSelection *selection;
+ GtkTreeIter iter;
GString *new_type_string,
*new_key_string,
@@ -778,30 +773,24 @@ on_edit_key_ok_bt_clicked(GtkWidget *widget _U_, gpointer data)
gchar *key_entered = NULL;
gchar *ssid_entered = NULL;
- airpcap_key_ls_selected_info_t *selected_item;
-
- int keys_in_list = 0;
-
unsigned int i;
- gint r = NO_ROW_SELECTED;
- gint c = NO_COLUMN_SELECTED;
-
- key_ls = g_object_get_data(G_OBJECT(data),AIRPCAP_ADVANCED_EDIT_KEY_LIST_KEY);
- selected_item = g_object_get_data(G_OBJECT(data),AIRPCAP_ADVANCED_EDIT_KEY_SELECTED_KEY);
+ key_list_store = g_object_get_data(G_OBJECT(data),AIRPCAP_ADVANCED_EDIT_KEY_LIST_KEY);
+ selection = g_object_get_data(G_OBJECT(data), AIRPCAP_ADVANCED_EDIT_KEY_SELECTION_KEY);
type_cb = g_object_get_data(G_OBJECT(data),AIRPCAP_ADVANCED_EDIT_KEY_TYPE_KEY);
key_en = g_object_get_data(G_OBJECT(data),AIRPCAP_ADVANCED_EDIT_KEY_KEY_KEY);
ssid_en = g_object_get_data(G_OBJECT(data),AIRPCAP_ADVANCED_EDIT_KEY_SSID_KEY);
- r = selected_item->row;
- c = selected_item->column;
-
- keys_in_list = GTK_CLIST(key_ls)->rows;
+ if (!gtk_tree_selection_get_selected(selection, NULL, &iter))
+ return;
type_entered = gtk_combo_box_get_active_text(GTK_COMBO_BOX(type_cb));
key_entered = g_strdup(gtk_entry_get_text(GTK_ENTRY(key_en)));
ssid_entered = g_strdup(gtk_entry_get_text(GTK_ENTRY(ssid_en)));
+ g_strstrip(key_entered);
+ g_strstrip(ssid_entered);
+
/* Check if key is correct */
new_type_string = g_string_new(type_entered);
new_key_string = g_string_new(key_entered);
@@ -811,12 +800,6 @@ on_edit_key_ok_bt_clicked(GtkWidget *widget _U_, gpointer data)
g_free(key_entered );
g_free(ssid_entered);
- g_strchug(new_key_string->str);
- g_strchomp(new_key_string->str);
-
- g_strchug(new_ssid_string->str);
- g_strchomp(new_ssid_string->str);
-
/* Check which type of key the user has entered */
if (g_ascii_strcasecmp(new_type_string->str,AIRPCAP_WEP_KEY_STRING) == 0) /* WEP key */
{
@@ -858,7 +841,13 @@ on_edit_key_ok_bt_clicked(GtkWidget *widget _U_, gpointer data)
}
/* If so... Modify key */
- airpcap_modify_key_in_list(key_ls, r, new_type_string->str, new_key_string->str, new_ssid_string->str);
+ gtk_list_store_set(key_list_store, &iter,
+ KL_COL_TYPE, new_type_string->str,
+ KL_COL_KEY, new_key_string->str,
+#ifdef HAVE_AIRPDCAP
+ KL_COL_SSID, new_ssid_string->str,
+#endif
+ -1);
if (airpcap_if_selected != NULL) airpcap_if_selected->saved = FALSE;
}
@@ -893,7 +882,13 @@ on_edit_key_ok_bt_clicked(GtkWidget *widget _U_, gpointer data)
}
/* If so... Modify key */
- airpcap_modify_key_in_list(key_ls, r, new_type_string->str, new_key_string->str, new_ssid_string->str);
+ gtk_list_store_set(key_list_store, &iter,
+ KL_COL_TYPE, new_type_string->str,
+ KL_COL_KEY, new_key_string->str,
+#ifdef HAVE_AIRPDCAP
+ KL_COL_SSID, new_ssid_string->str,
+#endif
+ -1);
if (airpcap_if_selected != NULL) airpcap_if_selected->saved = FALSE;
}
@@ -928,7 +923,13 @@ on_edit_key_ok_bt_clicked(GtkWidget *widget _U_, gpointer data)
}
/* If so... Modify key */
- airpcap_modify_key_in_list(key_ls, r, new_type_string->str, new_key_string->str, new_ssid_string->str);
+ gtk_list_store_set(key_list_store, &iter,
+ KL_COL_TYPE, new_type_string->str,
+ KL_COL_KEY, new_key_string->str,
+#ifdef HAVE_AIRPDCAP
+ KL_COL_SSID, new_ssid_string->str,
+#endif
+ -1);
if (airpcap_if_selected != NULL) airpcap_if_selected->saved = FALSE;
}
@@ -948,7 +949,7 @@ on_edit_key_ok_bt_clicked(GtkWidget *widget _U_, gpointer data)
/*
* Callback for the 'Add Key' button.
*/
-void
+static void
on_add_new_key_bt_clicked(GtkWidget *button _U_, gpointer data)
{
GtkWidget *add_key_window;
@@ -969,30 +970,13 @@ on_add_new_key_bt_clicked(GtkWidget *button _U_, gpointer data)
GtkWidget *airpcap_advanced_w;
- /* Key List Widget */
- GtkWidget *key_ls;
-
- gint keys_in_list = 0;
-
- /* Selected entry in the key list (if any)*/
- airpcap_key_ls_selected_info_t* selected_item;
-
- gint r,c;
+ GtkListStore *key_list_store;
airpcap_advanced_w = GTK_WIDGET(data);
- /* Retrieve the selected item... if no row is selected, this is null... */
- selected_item = g_object_get_data(G_OBJECT(airpcap_advanced_w),AIRPCAP_ADVANCED_SELECTED_KEY_LIST_ITEM_KEY);
-
- r = selected_item->row;
- c = selected_item->column;
-
- /* Retrieve the key list widget pointer, and add it to the add_key_w */
- key_ls = g_object_get_data(G_OBJECT(airpcap_advanced_w),AIRPCAP_ADVANCED_KEYLIST_KEY);
+ key_list_store = g_object_get_data(G_OBJECT(airpcap_advanced_w),AIRPCAP_ADVANCED_KEYLIST_KEY);
- keys_in_list = GTK_CLIST(key_ls)->rows;
-
- if (keys_in_list >= MAX_ENCRYPTION_KEYS) /* Check if we have already reached the maximum number of allowed keys... */
+ if (gtk_tree_model_iter_n_children(GTK_TREE_MODEL(key_list_store), NULL) >= MAX_ENCRYPTION_KEYS)
{
simple_dialog(ESD_TYPE_ERROR,ESD_BTN_OK,"Maximum number (%d) of decryption keys reached! You cannot add another key!\n",MAX_ENCRYPTION_KEYS);
return;
@@ -1002,7 +986,7 @@ on_add_new_key_bt_clicked(GtkWidget *button _U_, gpointer data)
gtk_widget_set_sensitive(airpcap_advanced_w,FALSE);
/* Pop-up a new window */
- add_key_window = window_new (GTK_WINDOW_TOPLEVEL, "Add Decryption Key");
+ add_key_window = dlg_window_new ("Add Decryption Key");
gtk_widget_set_name (add_key_window, "add_key_window");
gtk_container_set_border_width (GTK_CONTAINER (add_key_window), 5);
gtk_window_set_resizable (GTK_WINDOW (add_key_window), FALSE);
@@ -1119,8 +1103,7 @@ on_add_new_key_bt_clicked(GtkWidget *button _U_, gpointer data)
g_signal_connect(add_key_window, "destroy", G_CALLBACK(on_add_key_w_destroy), data);
/* Add widget data */
- g_object_set_data(G_OBJECT(add_key_window),AIRPCAP_ADVANCED_ADD_KEY_LIST_KEY,key_ls);
- g_object_set_data(G_OBJECT(add_key_window),AIRPCAP_ADVANCED_SELECTED_KEY_LIST_ITEM_KEY,selected_item);
+ g_object_set_data(G_OBJECT(add_key_window),AIRPCAP_ADVANCED_ADD_KEY_LIST_KEY,key_list_store);
g_object_set_data(G_OBJECT(add_key_window),AIRPCAP_ADVANCED_ADD_KEY_TYPE_KEY,add_type_cb);
g_object_set_data(G_OBJECT(add_key_window),AIRPCAP_ADVANCED_ADD_KEY_KEY_KEY,add_key_te);
g_object_set_data(G_OBJECT(add_key_window),AIRPCAP_ADVANCED_ADD_KEY_SSID_KEY,add_ssid_te);
@@ -1133,7 +1116,7 @@ on_add_new_key_bt_clicked(GtkWidget *button _U_, gpointer data)
/*
* Edit key window destroy callback
*/
-void
+static void
on_edit_key_w_destroy(GtkWidget *button _U_, gpointer data)
{
GtkWidget *airpcap_advanced_w;
@@ -1148,7 +1131,7 @@ on_edit_key_w_destroy(GtkWidget *button _U_, gpointer data)
/*
* Add key window destroy callback
*/
-void
+static void
on_add_key_w_destroy(GtkWidget *button _U_, gpointer data)
{
GtkWidget *airpcap_advanced_w;
@@ -1163,45 +1146,23 @@ on_add_key_w_destroy(GtkWidget *button _U_, gpointer data)
/*
* Callback for the 'Remove Key' button.
*/
-void
+static void
on_remove_key_bt_clicked(GtkWidget *button _U_, gpointer data)
{
- GtkWidget *key_ls;
- GtkWidget *airpcap_advanced_w;
-
- gint keys_in_list;
-
- airpcap_key_ls_selected_info_t *selected_item;
-
- gint c = NO_COLUMN_SELECTED;
- gint r = NO_ROW_SELECTED;
-
- airpcap_advanced_w = GTK_WIDGET(data);
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ GtkTreeSelection *selection;
/* retrieve needed stuff */
- key_ls = g_object_get_data(G_OBJECT(airpcap_advanced_w),AIRPCAP_ADVANCED_KEYLIST_KEY);
- selected_item = g_object_get_data(G_OBJECT(airpcap_advanced_w),AIRPCAP_ADVANCED_SELECTED_KEY_LIST_ITEM_KEY);
-
- /*
- * Better to store the selected_item data in two new variables, because maybe some
- * select_row signal will be emitted somewhere...
- */
- r = selected_item->row;
- c = selected_item->column;
+ selection = g_object_get_data(G_OBJECT(data), AIRPCAP_ADVANCED_EDIT_KEY_SELECTION_KEY);
- keys_in_list = GTK_CLIST(key_ls)->rows;
-
- if ( r == NO_ROW_SELECTED ) /* No key selected */
- return;
+ if (!gtk_tree_selection_get_selected(selection, &model, &iter))
+ return;
/* Remove selected key */
- gtk_clist_remove(GTK_CLIST(key_ls),r);
-
- /* Reselect another row, if any... */
- if ( r < (keys_in_list-1) )
- gtk_clist_select_row(GTK_CLIST(key_ls),r,c);
- else
- gtk_clist_select_row(GTK_CLIST(key_ls),r-1,c);
+ gtk_list_store_remove(GTK_LIST_STORE(model), &iter);
+ gtk_tree_selection_select_iter(selection, &iter);
+ /* XXX - select the last item if needed? */
/* Need to save config... */
if (airpcap_if_selected != NULL) airpcap_if_selected->saved = FALSE;
@@ -1210,7 +1171,7 @@ on_remove_key_bt_clicked(GtkWidget *button _U_, gpointer data)
/*
* Callback for the 'Edit Key' button.
*/
-void
+static void
on_edit_key_bt_clicked(GtkWidget *button _U_, gpointer data)
{
GtkWidget *edit_key_window;
@@ -1231,288 +1192,211 @@ on_edit_key_bt_clicked(GtkWidget *button _U_, gpointer data)
GtkWidget *airpcap_advanced_w;
- /* Key List Widget */
- GtkWidget *key_ls;
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ GtkTreeSelection *selection;
- /* Selected entry in the key list (if any)*/
- airpcap_key_ls_selected_info_t* selected_item;
+ /* Key List Store */
+ GtkListStore *key_list_store;
gchar *row_type,
*row_key,
- *row_ssid;
-
- gint r,c;
+ *row_ssid = "";
airpcap_advanced_w = GTK_WIDGET(data);
/* Retrieve the selected item... if no row is selected, this is null... */
- selected_item = g_object_get_data(G_OBJECT(airpcap_advanced_w),AIRPCAP_ADVANCED_SELECTED_KEY_LIST_ITEM_KEY);
-
- r = selected_item->row;
- c = selected_item->column;
+ selection = g_object_get_data(G_OBJECT(data), AIRPCAP_ADVANCED_EDIT_KEY_SELECTION_KEY);
+ key_list_store = g_object_get_data (G_OBJECT(data), AIRPCAP_ADVANCED_KEYLIST_KEY);
- /* Retrieve the key list widget pointer, and add it to the edit_key_w */
- key_ls = g_object_get_data(G_OBJECT(airpcap_advanced_w),AIRPCAP_ADVANCED_KEYLIST_KEY);
- if ((r != NO_ROW_SELECTED) && (c != NO_COLUMN_SELECTED))
- {
- gtk_clist_get_text(GTK_CLIST(key_ls),r,0,&row_type);
- gtk_clist_get_text(GTK_CLIST(key_ls),r,1,&row_key);
- gtk_clist_get_text(GTK_CLIST(key_ls),r,2,&row_ssid);
-
- /* Gray out the Advanced Wireless Setting window */
- gtk_widget_set_sensitive(airpcap_advanced_w,FALSE);
-
- /* Pop-up a new window */
- edit_key_window = window_new (GTK_WINDOW_TOPLEVEL, "Edit Decryption Key");
- gtk_widget_set_name (edit_key_window, "edit_key_window");
- gtk_container_set_border_width (GTK_CONTAINER (edit_key_window), 5);
- gtk_window_set_resizable (GTK_WINDOW (edit_key_window), FALSE);
-
- main_v_box = gtk_vbox_new (FALSE, 0);
- gtk_widget_set_name (main_v_box, "main_v_box");
- gtk_widget_show (main_v_box);
- gtk_container_add (GTK_CONTAINER (edit_key_window), main_v_box);
-
- edit_frame = gtk_frame_new (NULL);
- gtk_widget_set_name (edit_frame, "edit_frame");
- gtk_widget_show (edit_frame);
- gtk_box_pack_start (GTK_BOX (main_v_box), edit_frame, TRUE, TRUE, 0);
-
- edit_frame_al = gtk_alignment_new (0.5, 0.5, 1, 1);
- gtk_widget_set_name (edit_frame_al, "edit_frame_al");
- gtk_widget_show (edit_frame_al);
- gtk_container_add (GTK_CONTAINER (edit_frame), edit_frame_al);
- gtk_alignment_set_padding (GTK_ALIGNMENT (edit_frame_al), 0, 0, 12, 0);
-
- edit_tb = gtk_table_new (2, 3, FALSE);
- gtk_widget_set_name (edit_tb, "edit_tb");
- gtk_container_set_border_width(GTK_CONTAINER(edit_tb),5);
- gtk_widget_show (edit_tb);
- gtk_container_add (GTK_CONTAINER (edit_frame_al), edit_tb);
-
- edit_type_cb = gtk_combo_box_new_text();
- gtk_combo_box_append_text(GTK_COMBO_BOX(edit_type_cb), AIRPCAP_WEP_KEY_STRING);
+ if (!gtk_tree_selection_get_selected(selection, &model, &iter))
+ return;
+ gtk_tree_model_get(model, &iter,
+ KL_COL_TYPE, &row_type,
+ KL_COL_KEY, &row_key,
#ifdef HAVE_AIRPDCAP
- gtk_combo_box_append_text(GTK_COMBO_BOX(edit_type_cb), AIRPCAP_WPA_PWD_KEY_STRING);
- gtk_combo_box_append_text(GTK_COMBO_BOX(edit_type_cb), AIRPCAP_WPA_BIN_KEY_STRING);
+ KL_COL_SSID, &row_ssid,
#endif
- /* Set current type */
- gtk_combo_box_set_active(GTK_COMBO_BOX(edit_type_cb), 0);
+ -1);
+
+ /* Gray out the Advanced Wireless Setting window */
+ gtk_widget_set_sensitive(airpcap_advanced_w,FALSE);
+
+ /* Pop-up a new window */
+ edit_key_window = dlg_window_new("Edit Decryption Key");
+ gtk_widget_set_name (edit_key_window, "edit_key_window");
+ gtk_container_set_border_width (GTK_CONTAINER (edit_key_window), 5);
+ gtk_window_set_resizable (GTK_WINDOW (edit_key_window), FALSE);
+
+ main_v_box = gtk_vbox_new (FALSE, 0);
+ gtk_widget_set_name (main_v_box, "main_v_box");
+ gtk_widget_show (main_v_box);
+ gtk_container_add (GTK_CONTAINER (edit_key_window), main_v_box);
+
+ edit_frame = gtk_frame_new (NULL);
+ gtk_widget_set_name (edit_frame, "edit_frame");
+ gtk_widget_show (edit_frame);
+ gtk_box_pack_start (GTK_BOX (main_v_box), edit_frame, TRUE, TRUE, 0);
+
+ edit_frame_al = gtk_alignment_new (0.5, 0.5, 1, 1);
+ gtk_widget_set_name (edit_frame_al, "edit_frame_al");
+ gtk_widget_show (edit_frame_al);
+ gtk_container_add (GTK_CONTAINER (edit_frame), edit_frame_al);
+ gtk_alignment_set_padding (GTK_ALIGNMENT (edit_frame_al), 0, 0, 12, 0);
+
+ edit_tb = gtk_table_new (2, 3, FALSE);
+ gtk_widget_set_name (edit_tb, "edit_tb");
+ gtk_container_set_border_width(GTK_CONTAINER(edit_tb),5);
+ gtk_widget_show (edit_tb);
+ gtk_container_add (GTK_CONTAINER (edit_frame_al), edit_tb);
+
+ edit_type_cb = gtk_combo_box_new_text();
+ gtk_combo_box_append_text(GTK_COMBO_BOX(edit_type_cb), AIRPCAP_WEP_KEY_STRING);
+
#ifdef HAVE_AIRPDCAP
- if (g_ascii_strcasecmp(row_type, AIRPCAP_WPA_PWD_KEY_STRING) == 0) {
- gtk_combo_box_set_active(GTK_COMBO_BOX(edit_type_cb), 1);
- } else if (g_ascii_strcasecmp(row_type, AIRPCAP_WPA_BIN_KEY_STRING) == 0) {
- gtk_combo_box_set_active(GTK_COMBO_BOX(edit_type_cb), 2);
- }
+ gtk_combo_box_append_text(GTK_COMBO_BOX(edit_type_cb), AIRPCAP_WPA_PWD_KEY_STRING);
+ gtk_combo_box_append_text(GTK_COMBO_BOX(edit_type_cb), AIRPCAP_WPA_BIN_KEY_STRING);
#endif
- gtk_widget_set_name (edit_type_cb, "edit_type_cb");
- gtk_widget_show (edit_type_cb);
- gtk_table_attach (GTK_TABLE (edit_tb), edit_type_cb, 0, 1, 1, 2,
- (GtkAttachOptions) (GTK_FILL),
- (GtkAttachOptions) (0), 0, 0);
- gtk_widget_set_size_request (edit_type_cb, 83, -1);
-
- edit_key_te = gtk_entry_new ();
- gtk_widget_set_name (edit_key_te, "edit_key_te");
- /* Set current key */
- gtk_entry_set_text(GTK_ENTRY(edit_key_te),row_key);
- gtk_widget_show (edit_key_te);
- gtk_table_attach (GTK_TABLE (edit_tb), edit_key_te, 1, 2, 1, 2,
- (GtkAttachOptions) (0), (GtkAttachOptions) (0), 0, 0);
- gtk_widget_set_size_request (edit_key_te, 178, -1);
-
- edit_ssid_te = gtk_entry_new ();
- gtk_widget_set_name (edit_ssid_te, "edit_ssid_te");
-
- /* Set current ssid (if key type is not WEP!)*/
- if (g_ascii_strcasecmp(row_type,AIRPCAP_WEP_KEY_STRING) == 0)
- {
- gtk_widget_set_sensitive(edit_ssid_te,FALSE);
- }
- else
- {
- gtk_widget_set_sensitive(edit_ssid_te,TRUE);
- gtk_entry_set_text(GTK_ENTRY(edit_ssid_te),row_ssid);
- }
-
- /* XXX - Decomment only when WPA and WPA@ will be ready */
+ /* Set current type */
+ gtk_combo_box_set_active(GTK_COMBO_BOX(edit_type_cb), 0);
#ifdef HAVE_AIRPDCAP
- gtk_widget_show (edit_ssid_te);
+ if (g_ascii_strcasecmp(row_type, AIRPCAP_WPA_PWD_KEY_STRING) == 0) {
+ gtk_combo_box_set_active(GTK_COMBO_BOX(edit_type_cb), 1);
+ } else if (g_ascii_strcasecmp(row_type, AIRPCAP_WPA_BIN_KEY_STRING) == 0) {
+ gtk_combo_box_set_active(GTK_COMBO_BOX(edit_type_cb), 2);
+ }
#endif
- gtk_table_attach (GTK_TABLE (edit_tb), edit_ssid_te, 2, 3, 1, 2,
- (GtkAttachOptions) (0), (GtkAttachOptions) (0), 0, 0);
-
- edit_type_lb = gtk_label_new ("Type");
- gtk_widget_set_name (edit_type_lb, "edit_type_lb");
- gtk_widget_show (edit_type_lb);
- gtk_table_attach (GTK_TABLE (edit_tb), edit_type_lb, 0, 1, 0, 1,
- (GtkAttachOptions) (GTK_FILL),
- (GtkAttachOptions) (0), 0, 0);
- gtk_label_set_justify (GTK_LABEL (edit_type_lb), GTK_JUSTIFY_CENTER);
-
- edit_key_lb = gtk_label_new ("Key");
- gtk_widget_set_name (edit_key_lb, "edit_key_lb");
- gtk_widget_show (edit_key_lb);
- gtk_table_attach (GTK_TABLE (edit_tb), edit_key_lb, 1, 2, 0, 1,
- (GtkAttachOptions) (GTK_FILL),
- (GtkAttachOptions) (0), 0, 0);
- gtk_label_set_justify (GTK_LABEL (edit_key_lb), GTK_JUSTIFY_CENTER);
-
- edit_ssid_lb = gtk_label_new ("");
- gtk_widget_set_name (edit_ssid_lb, "edit_ssid_lb");
- /* XXX - Decomment only when WPA and WPA_BIN will be ready */
- gtk_widget_show (edit_ssid_lb);
- gtk_table_attach (GTK_TABLE (edit_tb), edit_ssid_lb, 2, 3, 0, 1,
- (GtkAttachOptions) (GTK_FILL),
- (GtkAttachOptions) (0), 0, 0);
- gtk_label_set_justify (GTK_LABEL (edit_ssid_lb), GTK_JUSTIFY_CENTER);
-
- low_h_button_box = gtk_hbutton_box_new ();
- gtk_widget_set_name (low_h_button_box, "low_h_button_box");
- gtk_container_set_border_width (GTK_CONTAINER (low_h_button_box), 5);
- gtk_widget_show (low_h_button_box);
- gtk_box_pack_end (GTK_BOX (main_v_box), low_h_button_box, FALSE, FALSE, 0);
- gtk_button_box_set_layout (GTK_BUTTON_BOX (low_h_button_box),
- GTK_BUTTONBOX_END);
-
- ok_bt = gtk_button_new_with_mnemonic ("OK");
- gtk_widget_set_name (ok_bt, "ok_bt");
- gtk_widget_show (ok_bt);
- gtk_container_add (GTK_CONTAINER (low_h_button_box), ok_bt);
- GTK_WIDGET_SET_FLAGS (ok_bt, GTK_CAN_DEFAULT);
-
- cancel_bt = gtk_button_new_with_mnemonic ("Cancel");
- gtk_widget_set_name (cancel_bt, "cancel_bt");
- gtk_widget_show (cancel_bt);
- gtk_container_add (GTK_CONTAINER (low_h_button_box), cancel_bt);
- GTK_WIDGET_SET_FLAGS (cancel_bt, GTK_CAN_DEFAULT);
-
- edit_frame_lb = gtk_label_new ("<b>Modify Selected Key</b>");
- gtk_widget_set_name (edit_frame_lb, "edit_frame_lb");
- gtk_widget_show (edit_frame_lb);
- gtk_frame_set_label_widget (GTK_FRAME (edit_frame), edit_frame_lb);
- gtk_label_set_use_markup (GTK_LABEL (edit_frame_lb), TRUE);
-
- /* Add callbacks */
- g_signal_connect(ok_bt, "clicked", G_CALLBACK(on_edit_key_ok_bt_clicked), edit_key_window );
- g_signal_connect(cancel_bt, "clicked", G_CALLBACK(window_cancel_button_cb), edit_key_window );
- g_signal_connect(edit_type_cb, "changed", G_CALLBACK(on_edit_type_cb_changed), edit_key_window);
- g_signal_connect(edit_key_window, "delete_event", G_CALLBACK(window_delete_event_cb), NULL);
- g_signal_connect(edit_key_window, "destroy", G_CALLBACK(on_edit_key_w_destroy), data);
-
- /* Add widget data */
- g_object_set_data(G_OBJECT(edit_key_window),AIRPCAP_ADVANCED_EDIT_KEY_LIST_KEY,key_ls);
- g_object_set_data(G_OBJECT(edit_key_window),AIRPCAP_ADVANCED_EDIT_KEY_SELECTED_KEY,selected_item);
- g_object_set_data(G_OBJECT(edit_key_window),AIRPCAP_ADVANCED_EDIT_KEY_TYPE_KEY,edit_type_cb);
- g_object_set_data(G_OBJECT(edit_key_window),AIRPCAP_ADVANCED_EDIT_KEY_KEY_KEY,edit_key_te);
- g_object_set_data(G_OBJECT(edit_key_window),AIRPCAP_ADVANCED_EDIT_KEY_SSID_KEY,edit_ssid_te);
- g_object_set_data(G_OBJECT(edit_key_window),AIRPCAP_ADVANCED_EDIT_KEY_KEY_LABEL_KEY,edit_key_lb);
- g_object_set_data(G_OBJECT(edit_key_window),AIRPCAP_ADVANCED_EDIT_KEY_SSID_LABEL_KEY,edit_ssid_lb);
-
- gtk_widget_show(edit_key_window);
+ gtk_widget_set_name (edit_type_cb, "edit_type_cb");
+ gtk_widget_show (edit_type_cb);
+ gtk_table_attach (GTK_TABLE (edit_tb), edit_type_cb, 0, 1, 1, 2,
+ (GtkAttachOptions) (GTK_FILL),
+ (GtkAttachOptions) (0), 0, 0);
+ gtk_widget_set_size_request (edit_type_cb, 83, -1);
+
+ edit_key_te = gtk_entry_new ();
+ gtk_widget_set_name (edit_key_te, "edit_key_te");
+ /* Set current key */
+ gtk_entry_set_text(GTK_ENTRY(edit_key_te),row_key);
+ gtk_widget_show (edit_key_te);
+ gtk_table_attach (GTK_TABLE (edit_tb), edit_key_te, 1, 2, 1, 2,
+ (GtkAttachOptions) (0), (GtkAttachOptions) (0), 0, 0);
+ gtk_widget_set_size_request (edit_key_te, 178, -1);
+
+ edit_ssid_te = gtk_entry_new ();
+ gtk_widget_set_name (edit_ssid_te, "edit_ssid_te");
+
+ /* Set current ssid (if key type is not WEP!)*/
+ if (g_ascii_strcasecmp(row_type,AIRPCAP_WEP_KEY_STRING) == 0)
+ {
+ gtk_widget_set_sensitive(edit_ssid_te,FALSE);
+ }
+ else
+ {
+ gtk_widget_set_sensitive(edit_ssid_te,TRUE);
+ gtk_entry_set_text(GTK_ENTRY(edit_ssid_te),row_ssid);
}
-}
-/*
- * Callback for the 'Move Key Up' button.
- */
-void
-on_move_key_up_bt_clicked(GtkWidget *button _U_, gpointer data)
-{
- GtkWidget *airpcap_advanced_w;
- GtkWidget *key_ls;
+ /* XXX - Decomment only when WPA and WPA@ will be ready */
+#ifdef HAVE_AIRPDCAP
+ gtk_widget_show (edit_ssid_te);
+#endif
+ gtk_table_attach (GTK_TABLE (edit_tb), edit_ssid_te, 2, 3, 1, 2,
+ (GtkAttachOptions) (0), (GtkAttachOptions) (0), 0, 0);
- gint keys_in_list;
+ edit_type_lb = gtk_label_new ("Type");
+ gtk_widget_set_name (edit_type_lb, "edit_type_lb");
+ gtk_widget_show (edit_type_lb);
+ gtk_table_attach (GTK_TABLE (edit_tb), edit_type_lb, 0, 1, 0, 1,
+ (GtkAttachOptions) (GTK_FILL),
+ (GtkAttachOptions) (0), 0, 0);
+ gtk_label_set_justify (GTK_LABEL (edit_type_lb), GTK_JUSTIFY_CENTER);
- airpcap_key_ls_selected_info_t *selected_item;
+ edit_key_lb = gtk_label_new ("Key");
+ gtk_widget_set_name (edit_key_lb, "edit_key_lb");
+ gtk_widget_show (edit_key_lb);
+ gtk_table_attach (GTK_TABLE (edit_tb), edit_key_lb, 1, 2, 0, 1,
+ (GtkAttachOptions) (GTK_FILL),
+ (GtkAttachOptions) (0), 0, 0);
+ gtk_label_set_justify (GTK_LABEL (edit_key_lb), GTK_JUSTIFY_CENTER);
- gint c = NO_COLUMN_SELECTED;
- gint r = NO_ROW_SELECTED;
+ edit_ssid_lb = gtk_label_new ("");
+ gtk_widget_set_name (edit_ssid_lb, "edit_ssid_lb");
+ /* XXX - Decomment only when WPA and WPA_BIN will be ready */
+ gtk_widget_show (edit_ssid_lb);
+ gtk_table_attach (GTK_TABLE (edit_tb), edit_ssid_lb, 2, 3, 0, 1,
+ (GtkAttachOptions) (GTK_FILL),
+ (GtkAttachOptions) (0), 0, 0);
+ gtk_label_set_justify (GTK_LABEL (edit_ssid_lb), GTK_JUSTIFY_CENTER);
- airpcap_advanced_w = GTK_WIDGET(data);
+ low_h_button_box = gtk_hbutton_box_new ();
+ gtk_widget_set_name (low_h_button_box, "low_h_button_box");
+ gtk_container_set_border_width (GTK_CONTAINER (low_h_button_box), 5);
+ gtk_widget_show (low_h_button_box);
+ gtk_box_pack_end (GTK_BOX (main_v_box), low_h_button_box, FALSE, FALSE, 0);
+ gtk_button_box_set_layout (GTK_BUTTON_BOX (low_h_button_box),
+ GTK_BUTTONBOX_END);
- /* retrieve needed stuff */
- key_ls = g_object_get_data(G_OBJECT(airpcap_advanced_w),AIRPCAP_ADVANCED_KEYLIST_KEY);
- selected_item = g_object_get_data(G_OBJECT(airpcap_advanced_w),AIRPCAP_ADVANCED_SELECTED_KEY_LIST_ITEM_KEY);
+ ok_bt = gtk_button_new_with_mnemonic ("OK");
+ gtk_widget_set_name (ok_bt, "ok_bt");
+ gtk_widget_show (ok_bt);
+ gtk_container_add (GTK_CONTAINER (low_h_button_box), ok_bt);
+ GTK_WIDGET_SET_FLAGS (ok_bt, GTK_CAN_DEFAULT);
- /*
- * Better to store the selected_item data in two new variables, because maybe some
- * select_row signal will be emitted somewhere...
- */
- r = selected_item->row;
- c = selected_item->column;
+ cancel_bt = gtk_button_new_with_mnemonic ("Cancel");
+ gtk_widget_set_name (cancel_bt, "cancel_bt");
+ gtk_widget_show (cancel_bt);
+ gtk_container_add (GTK_CONTAINER (low_h_button_box), cancel_bt);
+ GTK_WIDGET_SET_FLAGS (cancel_bt, GTK_CAN_DEFAULT);
- keys_in_list = GTK_CLIST(key_ls)->rows;
+ edit_frame_lb = gtk_label_new ("<b>Modify Selected Key</b>");
+ gtk_widget_set_name (edit_frame_lb, "edit_frame_lb");
+ gtk_widget_show (edit_frame_lb);
+ gtk_frame_set_label_widget (GTK_FRAME (edit_frame), edit_frame_lb);
+ gtk_label_set_use_markup (GTK_LABEL (edit_frame_lb), TRUE);
- if (keys_in_list < 2) /* With less than 2 keys, nothing can be moved ... */
- return;
+ /* Add callbacks */
+ g_signal_connect(ok_bt, "clicked", G_CALLBACK(on_edit_key_ok_bt_clicked), edit_key_window );
+ g_signal_connect(cancel_bt, "clicked", G_CALLBACK(window_cancel_button_cb), edit_key_window );
+ g_signal_connect(edit_type_cb, "changed", G_CALLBACK(on_edit_type_cb_changed), edit_key_window);
+ g_signal_connect(edit_key_window, "delete_event", G_CALLBACK(window_delete_event_cb), NULL);
+ g_signal_connect(edit_key_window, "destroy", G_CALLBACK(on_edit_key_w_destroy), data);
- if ( r == 0 ) /* Cannot move up the first row */
- return;
+ /* Add widget data */
+ g_object_set_data(G_OBJECT(edit_key_window),AIRPCAP_ADVANCED_EDIT_KEY_LIST_KEY,key_list_store);
+ g_object_set_data(G_OBJECT(edit_key_window),AIRPCAP_ADVANCED_EDIT_KEY_SELECTION_KEY,selection);
+ g_object_set_data(G_OBJECT(edit_key_window),AIRPCAP_ADVANCED_EDIT_KEY_TYPE_KEY,edit_type_cb);
+ g_object_set_data(G_OBJECT(edit_key_window),AIRPCAP_ADVANCED_EDIT_KEY_KEY_KEY,edit_key_te);
+ g_object_set_data(G_OBJECT(edit_key_window),AIRPCAP_ADVANCED_EDIT_KEY_SSID_KEY,edit_ssid_te);
+ g_object_set_data(G_OBJECT(edit_key_window),AIRPCAP_ADVANCED_EDIT_KEY_KEY_LABEL_KEY,edit_key_lb);
+ g_object_set_data(G_OBJECT(edit_key_window),AIRPCAP_ADVANCED_EDIT_KEY_SSID_LABEL_KEY,edit_ssid_lb);
- /* Move up selected key */
- gtk_clist_swap_rows (GTK_CLIST(key_ls),r-1,r);
- /*
- * Re-select the just moved key... so the user can keep pressing 'Move Key Up'
- * without re-select the row...
- */
- gtk_clist_select_row (GTK_CLIST(key_ls),r-1,c);
+ g_free(row_type);
+ g_free(row_key);
+#ifdef HAVE_AIRPDCAP
+ g_free(row_ssid);
+#endif
+ gtk_widget_show(edit_key_window);
+}
- /* Need to save config... */
- if (airpcap_if_selected != NULL) airpcap_if_selected->saved = FALSE;
+/*
+ * Callback for the 'Move Key Up' button.
+ */
+static void
+on_move_key_up_bt_clicked(GtkWidget *button _U_, gpointer key_list)
+{
+ tree_view_list_store_move_selection(GTK_TREE_VIEW(key_list), TRUE);
}
/*
* Callback for the 'Move Key Down' button.
*/
void
-on_move_key_down_bt_clicked(GtkWidget *button _U_, gpointer data)
+on_move_key_down_bt_clicked(GtkWidget *button _U_, gpointer list_view)
{
- GtkWidget *airpcap_advanced_w;
- GtkWidget *key_ls;
-
- gint keys_in_list;
-
- airpcap_key_ls_selected_info_t *selected_item;
-
- gint c = NO_COLUMN_SELECTED;
- gint r = NO_ROW_SELECTED;
-
- airpcap_advanced_w = GTK_WIDGET(data);
-
- /* retrieve needed stuff */
- key_ls = g_object_get_data(G_OBJECT(airpcap_advanced_w),AIRPCAP_ADVANCED_KEYLIST_KEY);
- selected_item = g_object_get_data(G_OBJECT(airpcap_advanced_w),AIRPCAP_ADVANCED_SELECTED_KEY_LIST_ITEM_KEY);
-
- /*
- * Better to store the selected_item data in two new variables, because maybe some
- * select_row signal will be emitted somewhere...
- */
- r = selected_item->row;
- c = selected_item->column;
-
- keys_in_list = GTK_CLIST(key_ls)->rows;
-
- if (keys_in_list < 2) /* With less than 2 keys, nothing can be moved ... */
- return;
-
- if ( (r+1) == keys_in_list ) /* Cannot move down the last row */
- return;
-
- /* Move down selected key */
- gtk_clist_swap_rows (GTK_CLIST(key_ls),r,r+1);
-
- /*
- * Re-select the just moved key... so the user can keep pressing 'Move Key Down'
- * without re-select the row...
- */
- gtk_clist_select_row (GTK_CLIST(key_ls),r+1,c);
-
- /* Need to save config... */
- if (airpcap_if_selected != NULL) airpcap_if_selected->saved = FALSE;
+ tree_view_list_store_move_selection(GTK_TREE_VIEW(list_view), FALSE);
}
/* Turns the decryption on or off */
@@ -1660,7 +1544,6 @@ display_airpcap_advanced_cb(GtkWidget *w _U_, gpointer data)
GtkWidget *basic_parameters_frame_lb;
GtkWidget *low_buttons_h_box;
GtkWidget *left_h_button_box;
- GtkWidget *reset_configuration_bt;
GtkWidget *right_h_button_box;
GtkWidget *ok_bt;
GtkWidget *apply_bt;
@@ -1925,13 +1808,6 @@ display_airpcap_advanced_cb(GtkWidget *w _U_, gpointer data)
gtk_box_pack_start (GTK_BOX (low_buttons_h_box), left_h_button_box, FALSE,
FALSE, 0);
- reset_configuration_bt = gtk_button_new_with_mnemonic ("Reset Configuration");
- gtk_widget_set_name (reset_configuration_bt, "reset_configuration_bt");
- /* gtk_widget_show (reset_configuration_bt); */
- gtk_container_add (GTK_CONTAINER (low_buttons_h_box),
- reset_configuration_bt);
- GTK_WIDGET_SET_FLAGS (reset_configuration_bt, GTK_CAN_DEFAULT);
-
right_h_button_box = dlg_button_row_new(GTK_STOCK_OK, GTK_STOCK_APPLY, GTK_STOCK_CANCEL, NULL);
gtk_widget_show (right_h_button_box);
gtk_box_pack_end (GTK_BOX (low_buttons_h_box), right_h_button_box, FALSE,
@@ -1961,7 +1837,6 @@ display_airpcap_advanced_cb(GtkWidget *w _U_, gpointer data)
g_signal_connect (capture_type_cb, "changed", G_CALLBACK(on_capture_type_cb_changed), NULL);
g_signal_connect (fcs_ck, "toggled", G_CALLBACK(on_fcs_ck_toggled), NULL);
g_signal_connect (fcs_filter_cb, "changed", G_CALLBACK(on_fcs_filter_cb_changed), NULL);
- g_signal_connect (reset_configuration_bt, "clicked", G_CALLBACK(on_reset_configuration_bt_clicked), NULL);
g_signal_connect (apply_bt, "clicked", G_CALLBACK(on_advanced_apply_bt_clicked), airpcap_advanced_w);
g_signal_connect (ok_bt,"clicked", G_CALLBACK(on_advanced_ok_bt_clicked), airpcap_advanced_w);
g_signal_connect (cancel_bt,"clicked", G_CALLBACK(on_advanced_cancel_bt_clicked), airpcap_advanced_w);
@@ -1994,7 +1869,7 @@ display_airpcap_advanced_cb(GtkWidget *w _U_, gpointer data)
/*
* Callback for the Wireless Advanced Settings 'Apply' button.
*/
-void
+static void
on_advanced_apply_bt_clicked(GtkWidget *button _U_, gpointer data)
{
/* advenced window */
@@ -2042,7 +1917,7 @@ on_advanced_apply_bt_clicked(GtkWidget *button _U_, gpointer data)
/*
* Callback for the OK button 'clicked' in the Advanced Wireless Settings window.
*/
-void
+static void
on_advanced_ok_bt_clicked(GtkWidget *button _U_, gpointer data)
{
PAirpcapHandle ad = NULL;
@@ -2078,7 +1953,7 @@ on_advanced_ok_bt_clicked(GtkWidget *button _U_, gpointer data)
/*
* Callback for the CANCEL button 'clicked' in the Advanced Wireless Settings window.
*/
-void
+static void
on_advanced_cancel_bt_clicked(GtkWidget *button _U_, gpointer data)
{
PAirpcapHandle ad = NULL;
@@ -2159,12 +2034,8 @@ display_airpcap_key_management_cb(GtkWidget *w _U_, gpointer data)
GtkWidget *decryption_mode_cb;
GtkWidget *keys_v_sub_box;
GtkWidget *keys_scrolled_w;
- GtkWidget *key_ls;
- GtkWidget *key_list_decryption_type_col_lb;
- GtkWidget *key_list_decryption_key_col_lb;
-#ifdef HAVE_AIRPDCAP
- GtkWidget *key_ls_decryption_ssid_col_lb;
-#endif
+ GtkListStore *key_list_store;
+ GtkWidget *key_list;
GtkWidget *key_v_button_box;
GtkWidget *add_new_key_bt;
GtkWidget *remove_key_bt;
@@ -2174,7 +2045,6 @@ display_airpcap_key_management_cb(GtkWidget *w _U_, gpointer data)
GtkWidget *keys_frame_lb;
GtkWidget *low_buttons_h_box;
GtkWidget *left_h_button_box;
- GtkWidget *reset_configuration_bt;
GtkWidget *right_h_button_box;
GtkWidget *ok_bt;
GtkWidget *apply_bt;
@@ -2184,15 +2054,17 @@ display_airpcap_key_management_cb(GtkWidget *w _U_, gpointer data)
GtkWidget *toolbar,
*toolbar_decryption_ck;
- /* other stuff */
- /*GList *channel_list,*capture_list;*/
- /*GList *linktype_list = NULL;*/
+ /* key list */
+ GtkTreeViewColumn *column;
+ GtkCellRenderer *renderer;
+ GtkTreeSortable *sortable;
+ GtkTreeSelection *selection;
+ GtkTreeIter iter;
/* Selected row/column structure */
airpcap_key_ls_selected_info_t *key_ls_selected_item;
key_ls_selected_item = (airpcap_key_ls_selected_info_t*)g_malloc(sizeof(airpcap_key_ls_selected_info_t));
key_ls_selected_item->row = NO_ROW_SELECTED;
- key_ls_selected_item->column = NO_COLUMN_SELECTED;
/* user data - RETRIEVE pointers of toolbar widgets */
toolbar = GTK_WIDGET(data);
@@ -2281,47 +2153,84 @@ display_airpcap_key_management_cb(GtkWidget *w _U_, gpointer data)
0);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (keys_scrolled_w), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
+
+
+ /* Create the store */
+ key_list_store = gtk_list_store_new(KL_NUM_COLS,
+ G_TYPE_STRING, /* Type */
+ G_TYPE_STRING /* Key */
#ifdef HAVE_AIRPDCAP
- key_ls = gtk_clist_new (3);
-#else
- key_ls = gtk_clist_new (2);
+ , G_TYPE_STRING /* SSID */
#endif
+ );
- gtk_widget_set_name (key_ls, "key_ls");
- gtk_widget_show (key_ls);
+ /* Create a view */
+ key_list = gtk_tree_view_new_with_model(GTK_TREE_MODEL(key_list_store));
- gtk_container_add (GTK_CONTAINER (keys_scrolled_w), key_ls);
- gtk_clist_set_column_width (GTK_CLIST (key_ls), 0, 54);
- gtk_clist_set_column_width (GTK_CLIST (key_ls), 1, 113);
-#ifdef HAVE_AIRPDCAP
- gtk_clist_set_column_width (GTK_CLIST (key_ls), 2, 80);
+ sortable = GTK_TREE_SORTABLE(key_list_store);
+
+#if GTK_CHECK_VERSION(2,6,0)
+ /* Speed up the list display */
+ gtk_tree_view_set_fixed_height_mode(GTK_TREE_VIEW(key_list), TRUE);
#endif
- gtk_clist_column_titles_show (GTK_CLIST (key_ls));
- gtk_clist_set_shadow_type (GTK_CLIST (key_ls), GTK_SHADOW_ETCHED_IN);
- gtk_clist_set_column_justification(GTK_CLIST (key_ls),0,GTK_JUSTIFY_CENTER);
-
- key_list_decryption_type_col_lb = gtk_label_new ("Type");
- gtk_widget_set_name (key_list_decryption_type_col_lb,
- "key_list_decryption_type_col_lb");
- gtk_widget_show (key_list_decryption_type_col_lb);
- gtk_clist_set_column_widget (GTK_CLIST (key_ls), 0, key_list_decryption_type_col_lb);
-
- key_list_decryption_key_col_lb = gtk_label_new ("Key");
- gtk_widget_set_name (key_list_decryption_key_col_lb,
- "key_list_decryption_key_col_lb");
- gtk_widget_show (key_list_decryption_key_col_lb);
- gtk_clist_set_column_widget (GTK_CLIST (key_ls), 1,
- key_list_decryption_key_col_lb);
+
+ /* Setup the sortable columns */
+ gtk_tree_view_set_headers_clickable(GTK_TREE_VIEW(key_list), FALSE);
+
+ /* The view now holds a reference. We can get rid of our own reference */
+ g_object_unref(G_OBJECT(key_list_store));
+
+ /*
+ * Create the first column packet, associating the "text" attribute of the
+ * cell_renderer to the first column of the model
+ */
+ renderer = gtk_cell_renderer_text_new();
+ column = gtk_tree_view_column_new_with_attributes("Type", renderer,
+ "text", KL_COL_TYPE, NULL);
+ gtk_tree_view_column_set_sort_column_id(column, KL_COL_TYPE);
+ gtk_tree_view_column_set_resizable(column, TRUE);
+ gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
+ gtk_tree_view_column_set_min_width(column, 60);
+ gtk_tree_view_column_set_fixed_width(column, 100);
+ /* Add the column to the view. */
+ gtk_tree_view_append_column(GTK_TREE_VIEW(key_list), column);
+
+ /* Key */
+ renderer = gtk_cell_renderer_text_new();
+ column = gtk_tree_view_column_new_with_attributes("Key", renderer,
+ "text", KL_COL_KEY, NULL);
+ gtk_tree_view_column_set_sort_column_id(column, KL_COL_KEY);
+ gtk_tree_view_column_set_resizable(column, TRUE);
+ gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
+ gtk_tree_view_column_set_min_width(column, 120);
+ gtk_tree_view_column_set_fixed_width(column, 200);
+ gtk_tree_view_append_column(GTK_TREE_VIEW(key_list), column);
#ifdef HAVE_AIRPDCAP
- key_ls_decryption_ssid_col_lb = gtk_label_new ("SSID");
- gtk_widget_set_name (key_ls_decryption_ssid_col_lb,
- "key_ls_decryption_ssid_col_lb");
- gtk_widget_show (key_ls_decryption_ssid_col_lb);
- gtk_clist_set_column_widget (GTK_CLIST (key_ls), 2,
- key_ls_decryption_ssid_col_lb);
+ /* SSID */
+ renderer = gtk_cell_renderer_text_new();
+ column = gtk_tree_view_column_new_with_attributes("SSID", renderer,
+ "text", KL_COL_SSID,
+ NULL);
+ gtk_tree_view_column_set_sort_column_id(column, KL_COL_SSID);
+ gtk_tree_view_column_set_resizable(column, TRUE);
+ gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
+ gtk_tree_view_column_set_min_width(column, 80);
+ gtk_tree_view_column_set_fixed_width(column, 150);
+ gtk_tree_view_append_column(GTK_TREE_VIEW(key_list), column);
#endif
+ /* Now enable the sorting of each column */
+ gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(key_list), TRUE);
+ gtk_tree_view_set_headers_clickable(GTK_TREE_VIEW(key_list), TRUE);
+
+ /* Setup the selection handler */
+ selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(key_list));
+ gtk_tree_selection_set_mode(selection, GTK_SELECTION_SINGLE);
+
+ gtk_widget_show (key_list);
+
+ gtk_container_add (GTK_CONTAINER (keys_scrolled_w), key_list);
key_v_button_box = gtk_vbutton_box_new ();
gtk_widget_set_name (key_v_button_box, "key_v_button_box");
@@ -2377,13 +2286,6 @@ display_airpcap_key_management_cb(GtkWidget *w _U_, gpointer data)
gtk_box_pack_start (GTK_BOX (low_buttons_h_box), left_h_button_box, FALSE,
FALSE, 0);
- reset_configuration_bt = gtk_button_new_with_mnemonic ("Reset Configuration");
- gtk_widget_set_name (reset_configuration_bt, "reset_configuration_bt");
- /* gtk_widget_show (reset_configuration_bt); */
- gtk_container_add (GTK_CONTAINER (left_h_button_box),
- reset_configuration_bt);
- GTK_WIDGET_SET_FLAGS (reset_configuration_bt, GTK_CAN_DEFAULT);
-
right_h_button_box = dlg_button_row_new(GTK_STOCK_OK, GTK_STOCK_APPLY, GTK_STOCK_CANCEL, NULL);
gtk_widget_set_name (right_h_button_box, "right_h_button_box");
gtk_widget_show (right_h_button_box);
@@ -2402,28 +2304,33 @@ display_airpcap_key_management_cb(GtkWidget *w _U_, gpointer data)
g_signal_connect (add_new_key_bt, "clicked", G_CALLBACK(on_add_new_key_bt_clicked), key_management_w);
g_signal_connect (remove_key_bt, "clicked", G_CALLBACK(on_remove_key_bt_clicked), key_management_w);
g_signal_connect (edit_key_bt, "clicked", G_CALLBACK(on_edit_key_bt_clicked), key_management_w);
- g_signal_connect (move_key_up_bt, "clicked", G_CALLBACK(on_move_key_up_bt_clicked), key_management_w);
- g_signal_connect (move_key_down_bt, "clicked", G_CALLBACK(on_move_key_down_bt_clicked), key_management_w);
- g_signal_connect (reset_configuration_bt, "clicked", G_CALLBACK(on_reset_configuration_bt_clicked), NULL);
+ g_signal_connect (move_key_up_bt, "clicked", G_CALLBACK(on_move_key_up_bt_clicked), key_list);
+ g_signal_connect (move_key_down_bt, "clicked", G_CALLBACK(on_move_key_down_bt_clicked), key_list);
g_signal_connect (apply_bt, "clicked", G_CALLBACK(on_key_management_apply_bt_clicked), key_management_w);
g_signal_connect (ok_bt, "clicked", G_CALLBACK(on_key_management_ok_bt_clicked), key_management_w);
g_signal_connect (cancel_bt, "clicked", G_CALLBACK(on_key_management_cancel_bt_clicked), key_management_w);
- g_signal_connect (key_ls, "select_row", G_CALLBACK(on_key_ls_select_row), key_management_w);
- g_signal_connect (key_ls, "unselect_row", G_CALLBACK(on_key_ls_unselect_row), key_management_w);
- g_signal_connect (key_ls, "click_column", G_CALLBACK(on_key_ls_click_column), NULL);
+ g_signal_connect (selection, "changed", G_CALLBACK(on_key_list_select_row), key_management_w);
+ g_signal_connect (key_list_store, "rows_reordered", G_CALLBACK(on_key_list_reorder), key_management_w);
/* Different because the window will be closed ... */
/*window_set_cancel_button(key_management_w, ok_bt, window_cancel_button_cb);
window_set_cancel_button(key_management_w, cancel_bt, window_cancel_button_cb);*/
- g_object_set_data (G_OBJECT(key_management_w), AIRPCAP_ADVANCED_SELECTED_KEY_LIST_ITEM_KEY,key_ls_selected_item);
+ g_object_set_data (G_OBJECT(key_management_w), AIRPCAP_ADVANCED_EDIT_KEY_SELECTION_KEY,selection);
/* Store pointers to all widgets, for use by lookup_widget(). */
g_object_set_data (G_OBJECT(key_management_w), AIRPCAP_ADVANCED_DECRYPTION_MODE_KEY, decryption_mode_cb);
- g_object_set_data (G_OBJECT(key_management_w), AIRPCAP_ADVANCED_KEYLIST_KEY, key_ls);
+ g_object_set_data (G_OBJECT(key_management_w), AIRPCAP_ADVANCED_KEYLIST_KEY, key_list_store);
g_object_set_data (G_OBJECT(key_management_w), AIRPCAP_ADVANCED_OK_KEY, ok_bt);
g_object_set_data (G_OBJECT(key_management_w), AIRPCAP_ADVANCED_CANCEL_KEY, cancel_bt);
+ /* Enable / disable buttons */
+ g_object_set_data (G_OBJECT(key_management_w), AIRPCAP_KEY_MGMT_NEW_KEY, add_new_key_bt);
+ g_object_set_data (G_OBJECT(key_management_w), AIRPCAP_KEY_MGMT_EDIT_KEY, edit_key_bt);
+ g_object_set_data (G_OBJECT(key_management_w), AIRPCAP_KEY_MGMT_DELETE_KEY, remove_key_bt);
+ g_object_set_data (G_OBJECT(key_management_w), AIRPCAP_KEY_MGMT_UP_KEY, move_key_up_bt);
+ g_object_set_data (G_OBJECT(key_management_w), AIRPCAP_KEY_MGMT_DOWN_KEY, move_key_down_bt);
+
/*
* I will need the toolbar and the main widget in some callback,
* so I will add the toolbar pointer to the key_management_w
@@ -2444,16 +2351,19 @@ display_airpcap_key_management_cb(GtkWidget *w _U_, gpointer data)
else /* Keys from lists are equals, or Wireshark has got no keys */
{
airpcap_load_decryption_keys(airpcap_if_list);
- airpcap_fill_key_list(key_ls);
+ airpcap_fill_key_list(key_list_store);
/* At the end, so that it appears completely all together ... */
gtk_widget_show (key_management_w);
}
+
+ gtk_tree_model_get_iter_first(GTK_TREE_MODEL(key_list_store), &iter);
+ gtk_tree_selection_select_iter(selection, &iter);
}
/*
* Callback for the OK button 'clicked' in the Decryption Key Management window.
*/
-void
+static void
on_key_management_ok_bt_clicked(GtkWidget *button, gpointer data)
{
/* advanced window */
@@ -2474,28 +2384,25 @@ on_key_management_ok_bt_clicked(GtkWidget *button, gpointer data)
/*
* Callback for the CANCEL button 'clicked' in the Decryption Key Management window.
*/
-void
+static void
on_key_management_cancel_bt_clicked(GtkWidget *button _U_, gpointer data)
{
/* Retrieve object data */
GtkWidget *key_management_w;
GtkWidget *cancel_bt;
GtkWidget *ok_bt;
- GtkWidget *key_ls;
+ GtkListStore *key_list_store;
/* widgets in the toolbar */
GtkWidget *toolbar,
*toolbar_decryption_ck,
*key_management_bt;
- /* Row selected structure */
- airpcap_key_ls_selected_info_t *selected_item;
-
/* Retrieve the GUI object pointers */
key_management_w = GTK_WIDGET(data);
cancel_bt = GTK_WIDGET(g_object_get_data(G_OBJECT(key_management_w),AIRPCAP_ADVANCED_CANCEL_KEY));
ok_bt = GTK_WIDGET(g_object_get_data(G_OBJECT(key_management_w),AIRPCAP_ADVANCED_OK_KEY));
- key_ls = GTK_WIDGET(g_object_get_data(G_OBJECT(key_management_w),AIRPCAP_ADVANCED_KEYLIST_KEY));
+ key_list_store = GTK_LIST_STORE(g_object_get_data(G_OBJECT(key_management_w),AIRPCAP_ADVANCED_KEYLIST_KEY));
key_management_bt = GTK_WIDGET(g_object_get_data(G_OBJECT(key_management_w),AIRPCAP_ADVANCED_KEY));
toolbar = GTK_WIDGET(g_object_get_data(G_OBJECT(key_management_w),AIRPCAP_TOOLBAR_KEY));
@@ -2503,14 +2410,68 @@ on_key_management_cancel_bt_clicked(GtkWidget *button _U_, gpointer data)
/* retrieve toolbar info */
toolbar_decryption_ck = GTK_WIDGET(g_object_get_data(G_OBJECT(toolbar),AIRPCAP_TOOLBAR_DECRYPTION_KEY));
- /* Retrieve the selected row item pointer... */
- selected_item = (airpcap_key_ls_selected_info_t*)(g_object_get_data(G_OBJECT(key_management_w),AIRPCAP_ADVANCED_SELECTED_KEY_LIST_ITEM_KEY));
- /* And free it */
- g_free(selected_item);
-
gtk_widget_destroy(key_management_w);
}
+
+static void
+on_keys_check_cancel_bt_clicked (GtkWidget *button _U_, gpointer user_data)
+{
+ GtkWidget *key_management_w;
+ GtkWidget *keys_check_w;
+ GtkListStore *key_list_store;
+
+ keys_check_w = GTK_WIDGET(user_data);
+
+ key_management_w = g_object_get_data(G_OBJECT(keys_check_w),AIRPCAP_CHECK_WINDOW_KEY);
+
+ /* w may be NULL if airpcap_keys_check_w() has been called while Wireshark was loading,
+ and is not NULL if it was called when the Key Management widget has been clicked */
+ if (key_management_w != NULL)
+ {
+ /* ... */
+ key_list_store = g_object_get_data(G_OBJECT(key_management_w),AIRPCAP_ADVANCED_KEYLIST_KEY);
+ airpcap_fill_key_list(key_list_store);
+ gtk_widget_show (key_management_w);
+ }
+
+ gtk_widget_destroy(keys_check_w);
+}
+
+static void
+on_keys_check_ok_bt_clicked (GtkWidget *button _U_, gpointer user_data)
+{
+ GtkWidget *key_management_w;
+ GtkWidget *keys_check_w;
+
+ GtkWidget *merge_rb,
+ *keep_rb,
+ *import_rb,
+ *ignore_rb;
+
+ keys_check_w = GTK_WIDGET(user_data);
+
+ key_management_w = g_object_get_data(G_OBJECT(keys_check_w),AIRPCAP_CHECK_WINDOW_KEY);
+ merge_rb = g_object_get_data(G_OBJECT(keys_check_w),AIRPCAP_CHECK_WINDOW_RADIO_MERGE_KEY);
+ keep_rb = g_object_get_data(G_OBJECT(keys_check_w),AIRPCAP_CHECK_WINDOW_RADIO_KEEP_KEY);
+ import_rb = g_object_get_data(G_OBJECT(keys_check_w),AIRPCAP_CHECK_WINDOW_RADIO_IMPORT_KEY);
+ ignore_rb = g_object_get_data(G_OBJECT(keys_check_w),AIRPCAP_CHECK_WINDOW_RADIO_IGNORE_KEY);
+
+ /* Find out which radio button is selected and call the correct function */
+ if (GTK_TOGGLE_BUTTON(merge_rb)->active) on_merge_bt_clicked (merge_rb,keys_check_w);
+ else if (GTK_TOGGLE_BUTTON(keep_rb)->active) on_keep_bt_clicked (keep_rb,keys_check_w);
+ else if (GTK_TOGGLE_BUTTON(import_rb)->active) on_import_bt_clicked (import_rb,keys_check_w);
+ else if (GTK_TOGGLE_BUTTON(ignore_rb)->active) on_ignore_bt_clicked (ignore_rb,keys_check_w);
+ else on_keys_check_cancel_bt_clicked(NULL,keys_check_w);
+}
+
+static void
+on_keys_check_w_destroy (GtkWidget *w _U_, gpointer user_data)
+{
+ gtk_widget_set_sensitive(top_level,TRUE);
+ gtk_widget_set_sensitive(GTK_WIDGET(user_data),TRUE);
+}
+
/*
* Dialog box that appears whenever keys are not consistent between Wireshark and AirPcap
*/
@@ -2670,70 +2631,12 @@ airpcap_keys_check_w(GtkWidget *w, gpointer data _U_)
gtk_widget_show(keys_check_w);
}
-void
-on_keys_check_cancel_bt_clicked (GtkWidget *button _U_, gpointer user_data)
-{
- GtkWidget *key_management_w;
- GtkWidget *keys_check_w;
- GtkWidget *key_ls;
-
- keys_check_w = GTK_WIDGET(user_data);
-
- key_management_w = g_object_get_data(G_OBJECT(keys_check_w),AIRPCAP_CHECK_WINDOW_KEY);
-
- /* w may be NULL if airpcap_keys_check_w() has been called while Wireshark was loading,
- and is not NULL if it was called when the Key Management widget has been clicked */
- if (key_management_w != NULL)
- {
- /* ... */
- key_ls = g_object_get_data(G_OBJECT(key_management_w),AIRPCAP_ADVANCED_KEYLIST_KEY);
- airpcap_fill_key_list(key_ls);
- gtk_widget_show (key_management_w);
- }
-
- gtk_widget_destroy(keys_check_w);
-}
-
-void
-on_keys_check_ok_bt_clicked (GtkWidget *button _U_, gpointer user_data)
-{
- GtkWidget *key_management_w;
- GtkWidget *keys_check_w;
-
- GtkWidget *merge_rb,
- *keep_rb,
- *import_rb,
- *ignore_rb;
-
- keys_check_w = GTK_WIDGET(user_data);
-
- key_management_w = g_object_get_data(G_OBJECT(keys_check_w),AIRPCAP_CHECK_WINDOW_KEY);
- merge_rb = g_object_get_data(G_OBJECT(keys_check_w),AIRPCAP_CHECK_WINDOW_RADIO_MERGE_KEY);
- keep_rb = g_object_get_data(G_OBJECT(keys_check_w),AIRPCAP_CHECK_WINDOW_RADIO_KEEP_KEY);
- import_rb = g_object_get_data(G_OBJECT(keys_check_w),AIRPCAP_CHECK_WINDOW_RADIO_IMPORT_KEY);
- ignore_rb = g_object_get_data(G_OBJECT(keys_check_w),AIRPCAP_CHECK_WINDOW_RADIO_IGNORE_KEY);
-
- /* Find out which radio button is selected and call the correct function */
- if (GTK_TOGGLE_BUTTON(merge_rb)->active) on_merge_bt_clicked (merge_rb,keys_check_w);
- else if (GTK_TOGGLE_BUTTON(keep_rb)->active) on_keep_bt_clicked (keep_rb,keys_check_w);
- else if (GTK_TOGGLE_BUTTON(import_rb)->active) on_import_bt_clicked (import_rb,keys_check_w);
- else if (GTK_TOGGLE_BUTTON(ignore_rb)->active) on_ignore_bt_clicked (ignore_rb,keys_check_w);
- else on_keys_check_cancel_bt_clicked(NULL,keys_check_w);
-}
-
-void
-on_keys_check_w_destroy (GtkWidget *w _U_, gpointer user_data)
-{
- gtk_widget_set_sensitive(top_level,TRUE);
- gtk_widget_set_sensitive(GTK_WIDGET(user_data),TRUE);
-}
-
-void
+static void
on_keep_bt_clicked (GtkWidget *button _U_, gpointer user_data)
{
GtkWidget *key_management_w;
GtkWidget *keys_check_w;
- GtkWidget *key_ls=NULL;
+ GtkListStore *key_list_store=NULL;
GList* wireshark_keys=NULL;
guint n_wireshark_keys = 0;
@@ -2775,18 +2678,18 @@ on_keep_bt_clicked (GtkWidget *button _U_, gpointer user_data)
if (key_management_w != NULL)
{
/* ... */
- key_ls = g_object_get_data(G_OBJECT(key_management_w),AIRPCAP_ADVANCED_KEYLIST_KEY);
- airpcap_fill_key_list(key_ls);
+ key_list_store = g_object_get_data(G_OBJECT(key_management_w),AIRPCAP_ADVANCED_KEYLIST_KEY);
+ airpcap_fill_key_list(key_list_store);
gtk_widget_show (key_management_w);
}
}
-void
+static void
on_merge_bt_clicked (GtkWidget* button _U_, gpointer user_data)
{
GtkWidget *key_management_w;
GtkWidget *keys_check_w;
- GtkWidget *key_ls;
+ GtkListStore *key_list_store;
guint n_adapters = 0;
guint n_wireshark_keys = 0;
@@ -2856,19 +2759,18 @@ on_merge_bt_clicked (GtkWidget* button _U_, gpointer user_data)
if (key_management_w != NULL)
{
/* ... */
- key_ls = g_object_get_data(G_OBJECT(key_management_w),AIRPCAP_ADVANCED_KEYLIST_KEY);
- airpcap_fill_key_list(key_ls);
+ key_list_store = g_object_get_data(G_OBJECT(key_management_w),AIRPCAP_ADVANCED_KEYLIST_KEY);
+ airpcap_fill_key_list(key_list_store);
gtk_widget_show (key_management_w);
}
}
-
-void
+static void
on_import_bt_clicked (GtkWidget* button _U_, gpointer user_data)
{
GtkWidget *key_management_w;
GtkWidget *keys_check_w;
- GtkWidget *key_ls;
+ GtkListStore *key_list_store;
guint n_adapters = 0;
guint n_wireshark_keys = 0;
@@ -2935,19 +2837,18 @@ on_import_bt_clicked (GtkWidget* button _U_, gpointer user_data)
if (key_management_w != NULL)
{
/* ... */
- key_ls = g_object_get_data(G_OBJECT(key_management_w),AIRPCAP_ADVANCED_KEYLIST_KEY);
- airpcap_fill_key_list(key_ls);
+ key_list_store = g_object_get_data(G_OBJECT(key_management_w),AIRPCAP_ADVANCED_KEYLIST_KEY);
+ airpcap_fill_key_list(key_list_store);
gtk_widget_show (key_management_w);
}
}
-
-void
+static void
on_ignore_bt_clicked (GtkWidget* button _U_, gpointer user_data)
{
GtkWidget *key_management_w;
GtkWidget *keys_check_w;
- GtkWidget *key_ls;
+ GtkListStore *key_list_store;
keys_check_w = GTK_WIDGET(user_data);
@@ -2958,8 +2859,8 @@ on_ignore_bt_clicked (GtkWidget* button _U_, gpointer user_data)
if (key_management_w != NULL)
{
/* ... */
- key_ls = g_object_get_data(G_OBJECT(key_management_w),AIRPCAP_ADVANCED_KEYLIST_KEY);
- airpcap_fill_key_list(key_ls);
+ key_list_store = g_object_get_data(G_OBJECT(key_management_w),AIRPCAP_ADVANCED_KEYLIST_KEY);
+ airpcap_fill_key_list(key_list_store);
gtk_widget_show (key_management_w);
}
diff --git a/gtk/airpcap_gui_utils.c b/gtk/airpcap_gui_utils.c
index f9f9610b7c..43ec1206a9 100644
--- a/gtk/airpcap_gui_utils.c
+++ b/gtk/airpcap_gui_utils.c
@@ -250,40 +250,23 @@ airpcap_set_toolbar_stop_capture(airpcap_if_info_t* if_info)
* Add a key (string) to the given list
*/
void
-airpcap_add_key_to_list(GtkWidget *keylist, gchar* type, gchar* key, gchar* ssid)
+airpcap_add_key_to_list(GtkListStore *key_list_store, gchar* type, gchar* key, gchar* ssid)
{
- gchar* new_row[3];
+ GtkTreeIter iter;
- new_row[0] = g_strdup(type);
- new_row[1] = g_strdup(key);
- new_row[2] = g_strdup(ssid);
-
- gtk_clist_append(GTK_CLIST(keylist),new_row);
-
- g_free(new_row[0]);
- g_free(new_row[1]);
- g_free(new_row[2]);
-}
-
-/*
- * Modify a key given a list and a row
- */
-void
-airpcap_modify_key_in_list(GtkWidget *keylist, gint row, gchar* type, gchar* key, gchar* ssid)
-{
- gchar* new_row[3];
-
- new_row[0] = g_strdup(type);
- new_row[1] = g_strdup(key);
- new_row[2] = g_strdup(ssid);
-
- gtk_clist_set_text(GTK_CLIST(keylist),row,0,new_row[0]);
- gtk_clist_set_text(GTK_CLIST(keylist),row,1,new_row[1]);
- gtk_clist_set_text(GTK_CLIST(keylist),row,2,new_row[2]);
+#if GTK_CHECK_VERSION(2,6,0)
+ gtk_list_store_insert_with_values(key_list_store , &iter, G_MAXINT,
+#else
+ gtk_list_store_append(key_list_store, &iter);
+ gtk_list_store_set(key_list_store, &iter,
+#endif
+ KL_COL_TYPE, type,
+ KL_COL_KEY, key,
+#ifdef HAVE_AIRPDCAP
+ KL_COL_SSID, ssid,
+#endif
+ -1);
- g_free(new_row[0]);
- g_free(new_row[1]);
- g_free(new_row[2]);
}
/*
@@ -293,15 +276,15 @@ airpcap_modify_key_in_list(GtkWidget *keylist, gint row, gchar* type, gchar* key
* (i.e. the WPA problem)
*/
void
-airpcap_fill_key_list(GtkWidget *keylist)
+airpcap_fill_key_list(GtkListStore *key_list_store)
{
gchar* s = NULL;
gchar* s2 = NULL;
unsigned int i,n;
- gchar* new_row[3];
airpcap_if_info_t* fake_if_info;
GList* wireshark_key_list=NULL;
decryption_key_t* curr_key = NULL;
+ GtkTreeIter iter;
n = 0;
@@ -317,61 +300,55 @@ airpcap_fill_key_list(GtkWidget *keylist)
if(curr_key->type == AIRPDCAP_KEY_TYPE_WEP)
{
- s = g_strdup(curr_key->key->str);
-
- new_row[0] = g_strdup(AIRPCAP_WEP_KEY_STRING);
- new_row[1] = g_strdup(s);
- new_row[2] = g_strdup("");
-
- gtk_clist_append(GTK_CLIST(keylist),new_row);
-
- g_free(new_row[0]);
- g_free(new_row[1]);
- g_free(new_row[2]);
-
- g_free(s);
+#if GTK_CHECK_VERSION(2,6,0)
+ gtk_list_store_insert_with_values(key_list_store , &iter, G_MAXINT,
+#else
+ gtk_list_store_append(key_list_store, &iter);
+ gtk_list_store_set(key_list_store, &iter,
+#endif
+ KL_COL_TYPE, AIRPCAP_WEP_KEY_STRING,
+ KL_COL_KEY, curr_key->key->str,
+#ifdef HAVE_AIRPDCAP
+ KL_COL_SSID, "",
+#endif
+ -1);
}
else if(curr_key->type == AIRPDCAP_KEY_TYPE_WPA_PWD)
{
- s = g_strdup(curr_key->key->str);
- if(curr_key->ssid != NULL)
- s2= g_strdup(format_uri(curr_key->ssid, ":"));
- else
- s2 = NULL;
-
- new_row[0] = g_strdup(AIRPCAP_WPA_PWD_KEY_STRING);
- new_row[1] = g_strdup(s);
-
if(curr_key->ssid != NULL)
- new_row[2] = g_strdup(s2);
+ s2 = format_uri(curr_key->ssid, ":");
else
- new_row[2] = g_strdup("");
+ s2 = "";
- gtk_clist_append(GTK_CLIST(keylist),new_row);
-
- g_free(new_row[0]);
- g_free(new_row[1]);
- g_free(new_row[2]);
+#if GTK_CHECK_VERSION(2,6,0)
+ gtk_list_store_insert_with_values(key_list_store , &iter, G_MAXINT,
+#else
+ gtk_list_store_append(key_list_store, &iter);
+ gtk_list_store_set(key_list_store, &iter,
+#endif
+ KL_COL_TYPE, AIRPCAP_WPA_PWD_KEY_STRING,
+ KL_COL_KEY, curr_key->key->str,
+#ifdef HAVE_AIRPDCAP
+ KL_COL_SSID, s2,
+#endif
+ -1);
- g_free(s);
- if(s2 != NULL)
- g_free(s2);
}
else if(curr_key->type == AIRPDCAP_KEY_TYPE_WPA_PMK)
{
- s = g_strdup(curr_key->key->str);
-
- new_row[0] = g_strdup(AIRPCAP_WPA_BIN_KEY_STRING);
- new_row[1] = g_strdup(s);
- new_row[2] = g_strdup("");
-
- gtk_clist_append(GTK_CLIST(keylist),new_row);
-
- g_free(new_row[0]);
- g_free(new_row[1]);
- g_free(new_row[2]);
+#if GTK_CHECK_VERSION(2,6,0)
+ gtk_list_store_insert_with_values(key_list_store , &iter, G_MAXINT,
+#else
+ gtk_list_store_append(key_list_store, &iter);
+ gtk_list_store_set(key_list_store, &iter,
+#endif
+ KL_COL_TYPE, AIRPCAP_WPA_BIN_KEY_STRING,
+ KL_COL_KEY, curr_key->key->str,
+#ifdef HAVE_AIRPDCAP
+ KL_COL_SSID, "",
+#endif
+ -1);
- g_free(s);
}
}
@@ -745,10 +722,12 @@ airpcap_update_channel_combo(GtkWidget* channel_cb, airpcap_if_info_t* if_info)
/*
* Takes the keys from the GtkList widget, and add them to the interface list
*/
-void
-airpcap_add_keys_from_list(GtkWidget *key_ls, airpcap_if_info_t *if_info _U_)
+static void
+airpcap_add_keys_from_list(GtkListStore *key_list_store, airpcap_if_info_t *if_info _U_)
{
- GString *new_key;
+ GtkTreePath *path;
+ GtkTreeIter iter;
+ GtkTreeModel *model = GTK_TREE_MODEL(key_list_store);
/* airpcap stuff */
guint i, j;
@@ -759,16 +738,10 @@ airpcap_add_keys_from_list(GtkWidget *key_ls, airpcap_if_info_t *if_info _U_)
guint keys_in_list = 0;
- gchar *row_type,
- *row_key,
- *row_ssid;
+ gchar *row_type, *row_key; /* SSID not needed for AirPcap */
+ size_t key_len;
- keys_in_list = GTK_CLIST(key_ls)->rows;
-
- /*
- * Save the encryption keys, if we have any of them
- */
- KeysCollectionSize = 0;
+ keys_in_list = gtk_tree_model_iter_n_children(model, NULL);
/*
* Calculate the size of the keys collection
@@ -779,12 +752,6 @@ airpcap_add_keys_from_list(GtkWidget *key_ls, airpcap_if_info_t *if_info _U_)
* Allocate the collection
*/
KeysCollection = (PAirpcapKeysCollection)g_malloc(KeysCollectionSize);
- if(!KeysCollection)
- {
- /* Simple dialog ERROR */
- simple_dialog(ESD_TYPE_ERROR,ESD_BTN_OK,"%s","Failed memory allocation for KeysCollection!");
- return;
- }
/*
* Populate the key collection
@@ -793,10 +760,13 @@ airpcap_add_keys_from_list(GtkWidget *key_ls, airpcap_if_info_t *if_info _U_)
for(i = 0; i < keys_in_list; i++)
{
- /* Retrieve the row infos */
- gtk_clist_get_text(GTK_CLIST(key_ls),i,0,&row_type);
- gtk_clist_get_text(GTK_CLIST(key_ls),i,1,&row_key);
- gtk_clist_get_text(GTK_CLIST(key_ls),i,2,&row_ssid);
+ path = gtk_tree_path_new_from_indices(i, -1);
+ gtk_tree_model_get_iter(model, &iter, path);
+ gtk_tree_path_free(path);
+ gtk_tree_model_get(model, &iter,
+ KL_COL_TYPE, &row_type,
+ KL_COL_KEY, &row_key,
+ -1);
if(g_ascii_strcasecmp(row_type,AIRPCAP_WEP_KEY_STRING) == 0)
KeysCollection->Keys[i].KeyType = AIRPDCAP_KEY_TYPE_WEP;
@@ -806,19 +776,20 @@ airpcap_add_keys_from_list(GtkWidget *key_ls, airpcap_if_info_t *if_info _U_)
KeysCollection->Keys[i].KeyType = AIRPCAP_KEYTYPE_CCMP;
/* Retrieve the Item corresponding to the i-th key */
- new_key = g_string_new(row_key);
-
- KeysCollection->Keys[i].KeyLen = (guint) new_key->len / 2;
+ key_len = strlen(row_key);
+ KeysCollection->Keys[i].KeyLen = (guint) key_len / 2;
memset(&KeysCollection->Keys[i].KeyData, 0, sizeof(KeysCollection->Keys[i].KeyData));
- for(j = 0 ; j < new_key->len; j += 2)
+ for(j = 0 ; j < key_len; j += 2)
{
- s[0] = new_key->str[j];
- s[1] = new_key->str[j+1];
+ s[0] = row_key[j];
+ s[1] = row_key[j+1];
s[2] = '\0';
KeyByte = (guint8)strtol(s, NULL, 16);
KeysCollection->Keys[i].KeyData[j / 2] = KeyByte;
}
+ g_free(row_type);
+ g_free(row_key);
}
/*
@@ -839,10 +810,12 @@ airpcap_add_keys_from_list(GtkWidget *key_ls, airpcap_if_info_t *if_info _U_)
/*
* Takes the keys from the GtkList widget, and add them to the interface list
*/
-void
-airpcap_add_keys_to_driver_from_list(GtkWidget *key_ls,airpcap_if_info_t *fake_if_info)
+static void
+airpcap_add_keys_to_driver_from_list(GtkListStore *key_list_store, airpcap_if_info_t *fake_if_info)
{
- GString *new_key;
+ GtkTreePath *path;
+ GtkTreeIter iter;
+ GtkTreeModel *model = GTK_TREE_MODEL(key_list_store);
/* airpcap stuff */
guint i, j;
@@ -853,14 +826,13 @@ airpcap_add_keys_to_driver_from_list(GtkWidget *key_ls,airpcap_if_info_t *fake_i
guint keys_in_list = 0;
- gchar *row_type,
- *row_key,
- *row_ssid;
+ gchar *row_type, *row_key; /* SSID not needed for AirPcap */
+ size_t key_len;
if(fake_if_info == NULL)
return;
- keys_in_list = GTK_CLIST(key_ls)->rows;
+ keys_in_list = gtk_tree_model_iter_n_children(model, NULL);
/*
* Save the encryption keys, if we have any of them
@@ -876,12 +848,6 @@ airpcap_add_keys_to_driver_from_list(GtkWidget *key_ls,airpcap_if_info_t *fake_i
* Allocate the collection
*/
KeysCollection = (PAirpcapKeysCollection)g_malloc(KeysCollectionSize);
- if(!KeysCollection)
- {
- /* Simple dialog ERROR */
- simple_dialog(ESD_TYPE_ERROR,ESD_BTN_OK,"%s","Failed memory allocation for KeysCollection!");
- return;
- }
/*
* Populate the key collection
@@ -890,10 +856,13 @@ airpcap_add_keys_to_driver_from_list(GtkWidget *key_ls,airpcap_if_info_t *fake_i
for(i = 0; i < keys_in_list; i++)
{
- /* Retrieve the row infos */
- gtk_clist_get_text(GTK_CLIST(key_ls),i,0,&row_type);
- gtk_clist_get_text(GTK_CLIST(key_ls),i,1,&row_key);
- gtk_clist_get_text(GTK_CLIST(key_ls),i,2,&row_ssid);
+ path = gtk_tree_path_new_from_indices(i, -1);
+ gtk_tree_model_get_iter(model, &iter, path);
+ gtk_tree_path_free(path);
+ gtk_tree_model_get(model, &iter,
+ KL_COL_TYPE, &row_type,
+ KL_COL_KEY, &row_key,
+ -1);
if(g_ascii_strcasecmp(row_type,AIRPCAP_WEP_KEY_STRING) == 0)
KeysCollection->Keys[i].KeyType = AIRPDCAP_KEY_TYPE_WEP;
@@ -903,24 +872,25 @@ airpcap_add_keys_to_driver_from_list(GtkWidget *key_ls,airpcap_if_info_t *fake_i
KeysCollection->Keys[i].KeyType = AIRPDCAP_KEY_TYPE_WPA_PMK;
/* Retrieve the Item corresponding to the i-th key */
- new_key = g_string_new(row_key);
+ key_len = strlen(row_key);
- KeysCollection->Keys[i].KeyLen = (guint) new_key->len / 2;
+ KeysCollection->Keys[i].KeyLen = (guint) key_len / 2;
memset(&KeysCollection->Keys[i].KeyData, 0, sizeof(KeysCollection->Keys[i].KeyData));
/* Key must be saved in adifferent way, depending on its type... */
if(KeysCollection->Keys[i].KeyType == AIRPDCAP_KEY_TYPE_WEP)
{
- for(j = 0 ; j < new_key->len; j += 2)
+ for(j = 0 ; j < key_len; j += 2)
{
- s[0] = new_key->str[j];
- s[1] = new_key->str[j+1];
+ s[0] = row_key[j];
+ s[1] = row_key[j+1];
s[2] = '\0';
KeyByte = (guint8)strtol(s, NULL, 16);
KeysCollection->Keys[i].KeyData[j / 2] = KeyByte;
}
}
- /* XXX - Save the keys that are not WEP!!! */
+ g_free(row_type);
+ g_free(row_key);
}
/*
@@ -942,19 +912,21 @@ airpcap_add_keys_to_driver_from_list(GtkWidget *key_ls,airpcap_if_info_t *fake_i
* current adapter, and save them as default for ALL the others.
*/
void
-airpcap_read_and_save_decryption_keys_from_clist(GtkWidget* key_ls, airpcap_if_info_t* info_if, GList* if_list)
+airpcap_read_and_save_decryption_keys_from_list_store(GtkListStore* key_list_store, airpcap_if_info_t* info_if, GList* if_list)
{
+ GtkTreeIter iter;
+ GtkTreeModel *model = GTK_TREE_MODEL(key_list_store);
+ gboolean items_left;
gint if_n = 0;
gint i = 0;
gint r = 0;
- gint n = 0;
airpcap_if_info_t* curr_if = NULL;
airpcap_if_info_t* fake_info_if = NULL;
GList* key_list=NULL;
char* tmp_type = NULL;
char* tmp_key = NULL;
- char* tmp_ssid = NULL;
+ char* tmp_ssid = "";
decryption_key_t* tmp_dk=NULL;
@@ -962,17 +934,20 @@ airpcap_read_and_save_decryption_keys_from_clist(GtkWidget* key_ls, airpcap_if_i
* Save the keys for Wireshark...
*/
- /* Create a list of keys from the list widget... */
- n = GTK_CLIST(key_ls)->rows;
+ /* Create a list of keys from the list store */
+ for (items_left = gtk_tree_model_get_iter_first (model, &iter);
+ items_left;
+ items_left = gtk_tree_model_iter_next (model, &iter)) {
- for(i = 0; i < n; i++)
- {
- /* XXX - Create a decryption_key_t struct, and pass a list of those structs!!! */
- gtk_clist_get_text(GTK_CLIST(key_ls),i,0,&tmp_type);
- gtk_clist_get_text(GTK_CLIST(key_ls),i,1,&tmp_key);
- gtk_clist_get_text(GTK_CLIST(key_ls),i,2,&tmp_ssid);
+ gtk_tree_model_get(model, &iter,
+ KL_COL_TYPE, &tmp_type,
+ KL_COL_KEY, &tmp_key,
+#ifdef HAVE_AIRPDCAP
+ KL_COL_SSID, &tmp_ssid,
+#endif
+ -1);
- if(g_ascii_strcasecmp(tmp_type,AIRPCAP_WEP_KEY_STRING) == 0)
+ if(g_ascii_strcasecmp(tmp_type, AIRPCAP_WEP_KEY_STRING) == 0)
{
tmp_dk = (decryption_key_t*)g_malloc(sizeof(decryption_key_t));
tmp_dk->key = g_string_new(tmp_key);
@@ -981,7 +956,7 @@ airpcap_read_and_save_decryption_keys_from_clist(GtkWidget* key_ls, airpcap_if_i
tmp_dk->bits = (guint) tmp_dk->key->len * 4;
key_list = g_list_append(key_list,tmp_dk);
}
- else if(g_ascii_strcasecmp(tmp_type,AIRPCAP_WPA_PWD_KEY_STRING) == 0)
+ else if(g_ascii_strcasecmp(tmp_type, AIRPCAP_WPA_PWD_KEY_STRING) == 0)
{
tmp_dk = (decryption_key_t*)g_malloc(sizeof(decryption_key_t));
tmp_dk->key = g_string_new(tmp_key);
@@ -991,7 +966,7 @@ airpcap_read_and_save_decryption_keys_from_clist(GtkWidget* key_ls, airpcap_if_i
tmp_dk->bits = 256;
key_list = g_list_append(key_list,tmp_dk);
}
- else if(g_ascii_strcasecmp(tmp_type,AIRPCAP_WPA_BIN_KEY_STRING) == 0)
+ else if(g_ascii_strcasecmp(tmp_type, AIRPCAP_WPA_BIN_KEY_STRING) == 0)
{
tmp_dk = (decryption_key_t*)g_malloc(sizeof(decryption_key_t));
tmp_dk->key = g_string_new(tmp_key);
@@ -1000,6 +975,10 @@ airpcap_read_and_save_decryption_keys_from_clist(GtkWidget* key_ls, airpcap_if_i
tmp_dk->bits = 256;
key_list = g_list_append(key_list,tmp_dk);
}
+ g_free(tmp_type);
+#ifdef HAVE_AIRPDCAP
+ g_free(tmp_ssid);
+#endif
}
r = save_wlan_wireshark_wep_keys(key_list);
@@ -1012,7 +991,7 @@ airpcap_read_and_save_decryption_keys_from_clist(GtkWidget* key_ls, airpcap_if_i
fake_info_if = airpcap_driver_fake_if_info_new();
- airpcap_add_keys_to_driver_from_list(key_ls,fake_info_if);
+ airpcap_add_keys_to_driver_from_list(key_list_store,fake_info_if);
airpcap_save_driver_if_configuration(fake_info_if);
airpcap_if_info_free(fake_info_if);
diff --git a/gtk/airpcap_gui_utils.h b/gtk/airpcap_gui_utils.h
index 00c8ed59ab..a27ea032fe 100644
--- a/gtk/airpcap_gui_utils.h
+++ b/gtk/airpcap_gui_utils.h
@@ -47,21 +47,21 @@
#define AIRPCAP_DECRYPTION_TYPE_STRING_NONE "None"
#define NO_ROW_SELECTED -1
-#define NO_COLUMN_SELECTED -1
+
+/* Key list columns */
+enum {
+ KL_COL_TYPE,
+ KL_COL_KEY,
+#ifdef HAVE_AIRPDCAP
+ KL_COL_SSID,
+#endif
+ KL_NUM_COLS
+};
/* Controls the releay of settings back to the adapter. */
extern gboolean change_airpcap_settings;
/*
- * This structure is used because we need to store infos about the currently selected
- * row in the key list.
- */
-typedef struct{
- gint row;
- gint column;
-}airpcap_key_ls_selected_info_t;
-
-/*
* set up the airpcap toolbar for the new capture interface
*/
void
@@ -77,25 +77,13 @@ airpcap_set_toolbar_stop_capture(airpcap_if_info_t* if_info);
* Add a key (string) to the given list
*/
void
-airpcap_add_key_to_list(GtkWidget *keylist, gchar* type, gchar* key, gchar* ssid);
-
-/*
- * Takes the keys from the GtkList widget, and add them to the interface list
- */
-void
-airpcap_add_keys_to_driver_from_list(GtkWidget *key_ls,airpcap_if_info_t *fake_if_info);
-
-/*
- * Modify a key given a list and a row
- */
-void
-airpcap_modify_key_in_list(GtkWidget *keylist, gint row, gchar* type, gchar* key, gchar* ssid);
+airpcap_add_key_to_list(GtkListStore *key_list_store, gchar* type, gchar* key, gchar* ssid);
/*
* Fill the list with the keys
*/
void
-airpcap_fill_key_list(GtkWidget *keylist);
+airpcap_fill_key_list(GtkListStore *key_list_store);
/*
* Function used to retrieve the AirpcapValidationType given the string name.
@@ -190,12 +178,6 @@ int
airpcap_if_is_any(airpcap_if_info_t* if_info);
/*
- * Takes the keys from the GtkList widget, and add them to the interface list
- */
-void
-airpcap_add_keys_from_list(GtkWidget *w, airpcap_if_info_t *if_info);
-
-/*
* Update channel combo box. If the airpcap interface is "Any", the combo box will be disabled.
*/
void
@@ -206,7 +188,7 @@ airpcap_update_channel_combo(GtkWidget* channel_cb, airpcap_if_info_t* if_info);
* current adapter, and save them as default for ALL the others.
*/
void
-airpcap_read_and_save_decryption_keys_from_clist(GtkWidget* key_ls, airpcap_if_info_t* info_if, GList* if_list);
+airpcap_read_and_save_decryption_keys_from_list_store(GtkListStore* key_list_store, airpcap_if_info_t* info_if, GList* if_list);
/*
* This function will load from the preferences file ALL the
diff --git a/gtk/keys.h b/gtk/keys.h
index ac294fa5f7..ab0c771c7f 100644
--- a/gtk/keys.h
+++ b/gtk/keys.h
@@ -62,7 +62,7 @@
#ifdef HAVE_AIRPCAP
#define AIRPCAP_TOOLBAR_KEY "airpcap_toolbar_key"
#define AIRPCAP_TOOLBAR_INTERFACE_KEY "airpcap_toolbar_if_key"
-#define AIRPCAP_TOOLBAR_LINK_TYPE_KEY "airpcap_toolbar_lt_key"
+#define AIRPCAP_TOOLBAR_LINK_TYPE_KEY "airpcap_toolbar_lt_key"
#define AIRPCAP_TOOLBAR_CHANNEL_KEY "airpcap_toolbar_ch_key"
#define AIRPCAP_TOOLBAR_CHANNEL_LABEL_KEY "airpcap_toolbar_ch_lb_key"
#define AIRPCAP_TOOLBAR_CHANNEL_OFFSET_KEY "airpcap_toolbar_ch_offset_key"
@@ -77,7 +77,7 @@
#define AIRPCAP_ADVANCED_KEY "airpcap_advanced_key"
#define AIRPCAP_ADVANCED_INTERFACE_KEY "airpcap_advanced_if_key"
-#define AIRPCAP_ADVANCED_LINK_TYPE_KEY "airpcap_advanced_lt_key"
+#define AIRPCAP_ADVANCED_LINK_TYPE_KEY "airpcap_advanced_lt_key"
#define AIRPCAP_ADVANCED_CHANNEL_KEY "airpcap_advanced_ch_key"
#define AIRPCAP_ADVANCED_CHANNEL_OFFSET_KEY "airpcap_advanced_ch_offset_key"
#define AIRPCAP_ADVANCED_FCS_CHECK_KEY "airpcap_advanced_fcs_check_key"
@@ -113,11 +113,17 @@
#define AIRPCAP_CHECK_WINDOW_KEY "airpcap_check_window_key"
-#define AIRPCAP_ADVANCED_SELECTED_KEY_LIST_ITEM_KEY "airpcap_advanced_selected_key_list_item_key"
+#define AIRPCAP_ADVANCED_EDIT_KEY_SELECTION_KEY "airpcap_advanced_edit_key_selection_key"
#define AIRPCAP_OPTIONS_ADVANCED_KEY "airpcap_options_advanced_key"
#define AIRPCAP_ADVANCED_FROM_KEY "airpcap_advanced_from_key"
+
+#define AIRPCAP_KEY_MGMT_NEW_KEY "airpcap_key_mgmt_new_key"
+#define AIRPCAP_KEY_MGMT_EDIT_KEY "airpcap_key_mgmt_edit_key"
+#define AIRPCAP_KEY_MGMT_DELETE_KEY "airpcap_key_mgmt_delete_key"
+#define AIRPCAP_KEY_MGMT_UP_KEY "airpcap_key_mgmt_up_key"
+#define AIRPCAP_KEY_MGMT_DOWN_KEY "airpcap_key_mgmt_down_key"
#endif /* HAVE_AIRPCAP */
#endif /* __KEYS_H__ */