aboutsummaryrefslogtreecommitdiffstats
path: root/gtk
diff options
context:
space:
mode:
authorMichael Tüxen <tuexen@fh-muenster.de>2011-09-01 20:43:47 +0000
committerMichael Tüxen <tuexen@fh-muenster.de>2011-09-01 20:43:47 +0000
commit6fb53f8d202585fed1b50f806838226c400d2a16 (patch)
tree423b199c0bea18a8de45360072a0c2d8a762ac27 /gtk
parent6ac265b51248462ffb810fd54bd6d36d35799841 (diff)
When double clicking on an interface in the main welcome menu opens the edit interfaces
dialog box. This was suggested by stig. The patch was obtained by Irene Ruengeler. svn path=/trunk/; revision=38845
Diffstat (limited to 'gtk')
-rw-r--r--gtk/capture_dlg.c390
-rw-r--r--gtk/capture_dlg.h5
-rw-r--r--gtk/main_welcome.c6
-rw-r--r--gtk/main_welcome.h2
4 files changed, 231 insertions, 172 deletions
diff --git a/gtk/capture_dlg.c b/gtk/capture_dlg.c
index df419ba94b..b0490cbff4 100644
--- a/gtk/capture_dlg.c
+++ b/gtk/capture_dlg.c
@@ -220,6 +220,9 @@ capture_dlg_prep(gpointer parent_w);
extern gint if_list_comparator_alph (const void *first_arg, const void *second_arg);
+static void
+make_and_fill_rows(void);
+
/* stop the currently running capture */
void
capture_stop_cb(GtkWidget *w _U_, gpointer d _U_)
@@ -1591,11 +1594,6 @@ update_options_table(gint index)
#endif
g_array_append_val(global_capture_opts.ifaces, interface_opts);
}
- path_str = g_strdup_printf("%d", index);
- path = gtk_tree_path_new_from_string(path_str);
- if_cb = (GtkTreeView *) g_object_get_data(G_OBJECT(cap_open_w), E_CAP_IFACE_KEY);
- model = gtk_tree_view_get_model(if_cb);
- gtk_tree_model_get_iter (model, &iter, path);
if (row.no_addresses == 0) {
temp = g_strdup_printf("<b>%s</b>", row.display_name);
} else {
@@ -1608,30 +1606,39 @@ update_options_table(gint index)
break;
}
}
- gtk_tree_model_get(model, &iter, CAPTURE, &enabled, -1);
- if (enabled == FALSE) {
- num_selected++;
- }
if (row.has_snaplen) {
snaplen_string = g_strdup_printf("%d", row.snaplen);
} else {
snaplen_string = g_strdup("default");
}
+ if (cap_open_w) {
+ if_cb = (GtkTreeView *) g_object_get_data(G_OBJECT(cap_open_w), E_CAP_IFACE_KEY);
+ path_str = g_strdup_printf("%d", marked_row);
+ path = gtk_tree_path_new_from_string(path_str);
+ model = gtk_tree_view_get_model(if_cb);
+ gtk_tree_model_get_iter (model, &iter, path);
+ gtk_tree_model_get(model, &iter, CAPTURE, &enabled, -1);
+ if (enabled == FALSE) {
+ num_selected++;
+ }
+
#if defined(HAVE_PCAP_CREATE)
- gtk_list_store_set (GTK_LIST_STORE(model), &iter, CAPTURE, TRUE, INTERFACE, temp, LINK, link->name, PMODE, row.pmode?"enabled":"disabled", SNAPLEN, snaplen_string, BUFFER, (guint) row.buffer, MONITOR, row.monitor_mode_supported?(row.monitor_mode_enabled?"enabled":"disabled"):"n/a", FILTER, row.cfilter, -1);
+ gtk_list_store_set (GTK_LIST_STORE(model), &iter, CAPTURE, TRUE, INTERFACE, temp, LINK, link->name, PMODE, row.pmode?"enabled":"disabled", SNAPLEN, snaplen_string, BUFFER, (guint) row.buffer, MONITOR, row.monitor_mode_supported?(row.monitor_mode_enabled?"enabled":"disabled"):"n/a", FILTER, row.cfilter, -1);
#elif defined(_WIN32) && !defined(HAVE_PCAP_CREATE)
- gtk_list_store_set (GTK_LIST_STORE(model), &iter, CAPTURE, TRUE, INTERFACE, temp,LINK, link->name, PMODE, row.pmode?"enabled":"disabled", SNAPLEN, snaplen_string, BUFFER, (guint) row.buffer, FILTER, row.cfilter, -1);
+ gtk_list_store_set (GTK_LIST_STORE(model), &iter, CAPTURE, TRUE, INTERFACE, temp,LINK, link->name, PMODE, row.pmode?"enabled":"disabled", SNAPLEN, snaplen_string, BUFFER, (guint) row.buffer, FILTER, row.cfilter, -1);
#else
- gtk_list_store_set (GTK_LIST_STORE(model), &iter, CAPTURE, TRUE, INTERFACE, temp,LINK, link->name, PMODE, row.pmode?"enabled":"disabled", SNAPLEN, snaplen_string, FILTER, row.cfilter, -1);
+ gtk_list_store_set (GTK_LIST_STORE(model), &iter, CAPTURE, TRUE, INTERFACE, temp,LINK, link->name, PMODE, row.pmode?"enabled":"disabled", SNAPLEN, snaplen_string, FILTER, row.cfilter, -1);
#endif
#ifdef USE_THREADS
- if (num_selected > 0) {
+ if (num_selected > 0) {
#else
- if (num_selected == 1) {
+ if (num_selected == 1) {
#endif
- gtk_widget_set_sensitive(ok_bt, TRUE);
- } else {
- gtk_widget_set_sensitive(ok_bt, FALSE);
+ gtk_widget_set_sensitive(ok_bt, TRUE);
+ } else {
+ gtk_widget_set_sensitive(ok_bt, FALSE);
+ }
+ gtk_tree_path_free (path);
}
if (interfaces_dialog_window_present()) {
update_selected_interface(g_strdup(row.name), TRUE);
@@ -1639,7 +1646,6 @@ update_options_table(gint index)
if (get_welcome_window() != NULL) {
change_interface_selection(g_strdup(row.name), TRUE);
}
- gtk_tree_path_free (path);
}
static void
@@ -1729,7 +1735,7 @@ adjust_snap_sensitivity(GtkWidget *tb _U_, gpointer parent_w _U_)
g_array_insert_val(rows, marked_row, row);
}
-static void options_interface_cb(GtkTreeView *view, GtkTreePath *path, GtkTreeViewColumn *column _U_, gpointer userdata)
+void options_interface_cb(GtkTreeView *view, GtkTreePath *path, GtkTreeViewColumn *column _U_, gpointer userdata)
{
GtkWidget *caller, *window, *swindow=NULL, *if_view,
*main_vb, *if_hb, *if_lb, *if_lb_name,
@@ -1765,11 +1771,13 @@ static void options_interface_cb(GtkTreeView *view, GtkTreePath *path, GtkTreeVi
GtkWidget *advanced_bt;
#endif
interface_row row;
+ displayed_interface d_interface;
GtkTreeModel *model;
GtkTreeIter iter;
link_row *temp;
gboolean found = FALSE;
gint num_supported_link_types;
+ guint i;
gchar *tok;
GtkCellRenderer *renderer;
GtkListStore *store;
@@ -1782,11 +1790,38 @@ static void options_interface_cb(GtkTreeView *view, GtkTreePath *path, GtkTreeVi
return;
}
+ row.display_name = NULL;
+ row.no_addresses = 0;
+ row.addresses = NULL;
+ row.links = NULL;
+ row.active_dlt = -1;
+ row.pmode = FALSE;
+ row.monitor_mode_enabled = FALSE;
+ row.monitor_mode_supported = FALSE;
+ row.has_snaplen = FALSE;
+ row.snaplen = 65535;
+ row.cfilter = NULL;
+ row.buffer = 1;
+
model = gtk_tree_view_get_model(view);
gtk_tree_model_get_iter (model, &iter, path);
marked_row = atoi(gtk_tree_path_to_string(path));
- row = g_array_index(rows, interface_row, marked_row);
+ if (cap_open_w) {
+ row = g_array_index(rows, interface_row, marked_row);
+ } else if (get_welcome_window() != NULL) {
+ d_interface = get_interface_data(marked_row);
+ if (!rows || rows->len == 0) {
+ make_and_fill_rows();
+ }
+ for (i = 0; i < rows->len; i++) {
+ row = g_array_index(rows, interface_row, i);
+ if (strcmp(row.name, (char*)d_interface.name)==0) {
+ marked_row = i;
+ break;
+ }
+ }
+ }
opt_edit_w = dlg_window_new("Edit Interface Settings");
g_object_set_data(G_OBJECT(opt_edit_w), E_OPT_EDIT_CALLER_PTR_KEY, caller);
g_object_set_data(G_OBJECT(caller), E_OPT_EDIT_DIALOG_PTR_KEY, opt_edit_w);
@@ -1827,6 +1862,7 @@ static void options_interface_cb(GtkTreeView *view, GtkTreePath *path, GtkTreeVi
gtk_box_pack_start(GTK_BOX(if_vb_left), if_ip_lb, FALSE, FALSE, 0);
if (row.no_addresses > 0) {
+ gchar *temp_addresses = g_strdup(row.addresses);
gtk_box_pack_start(GTK_BOX(capture_vb), if_ip_hb, TRUE, TRUE, 0);
gtk_box_pack_start(GTK_BOX(if_ip_hb), if_vb_right, TRUE, TRUE, 3);
swindow = gtk_scrolled_window_new (NULL, NULL);
@@ -1842,13 +1878,14 @@ static void options_interface_cb(GtkTreeView *view, GtkTreePath *path, GtkTreeVi
NULL);
gtk_tree_view_append_column(GTK_TREE_VIEW(if_view), column);
store = gtk_list_store_new(1, G_TYPE_STRING);
- for (tok = strtok (row.addresses, "\n"); tok; tok = strtok(NULL, "\n")) {
+ for (tok = strtok (temp_addresses, "\n"); tok; tok = strtok(NULL, "\n")) {
gtk_list_store_append (store, &iter);
gtk_list_store_set (store, &iter, 0, tok, -1);
}
gtk_tree_view_set_model(GTK_TREE_VIEW(if_view), GTK_TREE_MODEL (store));
gtk_container_add (GTK_CONTAINER (swindow), if_view);
gtk_box_pack_start(GTK_BOX(if_vb_right), swindow, TRUE, TRUE, 0);
+ g_free(temp_addresses);
} else {
gtk_box_pack_start(GTK_BOX(capture_vb), if_ip_hb, FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(if_ip_hb), if_vb_right, FALSE, FALSE, 3);
@@ -2559,6 +2596,7 @@ capture_prep_cb(GtkWidget *w _U_, gpointer d _U_)
simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "%s", err_str);
g_free(err_str);
}
+ if_list = g_list_sort (if_list, if_list_comparator_alph);
#ifdef HAVE_AIRPCAP
/* update airpcap interface list */
@@ -2653,7 +2691,7 @@ capture_prep_cb(GtkWidget *w _U_, gpointer d _U_)
column = gtk_tree_view_column_new_with_attributes("Capture Filter", renderer, "text", FILTER, NULL);
gtk_tree_view_append_column(GTK_TREE_VIEW(view), column);
gtk_tree_view_column_set_alignment(column, 0.5);
- create_and_fill_model(if_list, TRUE, GTK_TREE_VIEW(view));
+ create_and_fill_model(GTK_TREE_VIEW(view));
selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(view));
gtk_tree_selection_set_mode(selection, GTK_SELECTION_SINGLE);
gtk_container_add (GTK_CONTAINER (swindow), view);
@@ -3498,30 +3536,178 @@ capture_dlg_prep(gpointer parent_w) {
return TRUE;
}
-GtkTreeModel *create_and_fill_model(GList *if_list, gboolean do_hide, GtkTreeView *view)
+static void
+make_and_fill_rows(void)
{
- GtkListStore *store;
- GtkTreeIter iter;
- GList *if_entry, *list;
+ GList *if_entry, *if_list;
if_info_t *if_info;
- char *if_string="", *temp="", *snaplen_string;
+ char *if_string="", *temp="";
gchar *descr;
if_capabilities_t *caps=NULL;
gint linktype_count;
cap_settings_t cap_settings;
GSList *curr_addr;
- int ips = 0;
- guint i, j;
+ int ips = 0, err;
+ guint i;
if_addr_t *addr;
GList *lt_entry;
link_row *link = NULL;
data_link_info_t *data_link_info;
- gchar *str, *link_type_name = NULL;
+ gchar *str, *err_str = NULL, *link_type_name = NULL;
interface_row row;
interface_options interface_opts;
gboolean found = FALSE;
GString *ip_str;
+ rows = g_array_new(TRUE, TRUE, sizeof(interface_row));
+ /* Scan through the list and build a list of strings to display. */
+ if_list = capture_interface_list(&err, &err_str);
+ if_list = g_list_sort (if_list, if_list_comparator_alph);
+ if (if_list == NULL && err == CANT_GET_INTERFACE_LIST) {
+ simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "%s", err_str);
+ g_free(err_str);
+ return;
+ } else if (err_str) {
+ g_free(err_str);
+ }
+ for (if_entry = if_list; if_entry != NULL; if_entry = g_list_next(if_entry)) {
+ if_info = if_entry->data;
+ ip_str = g_string_new("");
+ str = "";
+ ips = 0;
+ row.name = g_strdup(if_info->name);
+ /* Is this interface hidden and, if so, should we include it anyway? */
+ if (!prefs_is_capture_device_hidden(if_info->name)) {
+ /* It's not hidden, or it is but we should include it in the list. */
+ /* Do we have a user-supplied description? */
+ descr = capture_dev_user_descr_find(if_info->name);
+ if (descr != NULL) {
+ /* Yes, we have a user-supplied description; use it. */
+ if_string = g_strdup_printf("%s: %s", descr, if_info->name);
+ g_free(descr);
+ } else {
+ /* No, we don't have a user-supplied description; did we get
+ one from the OS or libpcap? */
+ if (if_info->description != NULL) {
+ /* Yes - use it. */
+ if_string = g_strdup_printf("%s: %s", if_info->description, if_info->name);
+ } else {
+ /* No. */
+ if_string = g_strdup(if_info->name);
+ }
+ }
+ if (if_info->loopback) {
+ row.display_name = g_strdup_printf("%s (loopback)", if_string);
+ } else {
+ row.display_name = g_strdup(if_string);
+ }
+ found = FALSE;
+ for (i = 0; i < global_capture_opts.ifaces->len; i++) {
+ interface_opts = g_array_index(global_capture_opts.ifaces, interface_options, i);
+ if (!interface_opts.name || strcmp(interface_opts.name, (char*)row.name)!=0) {
+ continue;
+ } else {
+ found = TRUE;
+ break;
+ }
+ }
+ if (found) {
+#if defined(_WIN32) || defined(HAVE_PCAP_CREATE)
+ row.buffer = interface_opts.buffer_size;
+#endif
+ row.pmode = interface_opts.promisc_mode;
+ row.has_snaplen = interface_opts.has_snaplen;
+ row.snaplen = interface_opts.snaplen;
+ row.cfilter = g_strdup(interface_opts.cfilter);
+ } else {
+#if defined(_WIN32) || defined(HAVE_PCAP_CREATE)
+ row.buffer = global_capture_opts.default_options.buffer_size;
+#endif
+ row.pmode = global_capture_opts.default_options.promisc_mode;
+ row.has_snaplen = global_capture_opts.default_options.has_snaplen;
+ row.snaplen = global_capture_opts.default_options.snaplen;
+ row.cfilter = g_strdup(global_capture_opts.default_options.cfilter);
+ }
+ cap_settings = capture_get_cap_settings(if_info->name);
+ caps = capture_get_if_capabilities(if_info->name, cap_settings.monitor_mode, NULL);
+ for (; (curr_addr = g_slist_nth(if_info->addrs, ips)) != NULL; ips++) {
+ if (ips != 0) {
+ g_string_append(ip_str, "\n");
+ }
+ addr = (if_addr_t *)curr_addr->data;
+ switch (addr->ifat_type) {
+ case IF_AT_IPv4:
+ g_string_append(ip_str, ip_to_str((guint8 *)&addr->addr.ip4_addr));
+ break;
+ case IF_AT_IPv6:
+ g_string_append(ip_str, ip6_to_str((struct e_in6_addr *)&addr->addr.ip6_addr));
+ break;
+ default:
+ /* In case we add non-IP addresses */
+ break;
+ }
+ }
+ linktype_count = 0;
+ row.links = NULL;
+ if (caps != NULL) {
+#ifdef HAVE_PCAP_CREATE
+ row.monitor_mode_enabled = cap_settings.monitor_mode;
+ row.monitor_mode_supported = caps->can_set_rfmon;
+#endif
+ for (lt_entry = caps->data_link_types; lt_entry != NULL; lt_entry = g_list_next(lt_entry)) {
+ data_link_info = lt_entry->data;
+ if (data_link_info->description != NULL) {
+ str = g_strdup_printf("%s", data_link_info->description);
+ } else {
+ str = g_strdup_printf("%s (not supported)", data_link_info->name);
+ }
+ if (linktype_count == 0) {
+ link_type_name = g_strdup(str);
+ row.active_dlt = data_link_info->dlt;
+ }
+ link = (link_row *)g_malloc(sizeof(link_row));
+ link->dlt = data_link_info->dlt;
+ link->name = g_strdup(str);
+ row.links = g_list_append(row.links, link);
+ linktype_count++;
+ }
+ } else {
+ cap_settings.monitor_mode = FALSE;
+#ifdef HAVE_PCAP_CREATE
+ row.monitor_mode_enabled = FALSE;
+ row.monitor_mode_supported = FALSE;
+#endif
+ row.active_dlt = -1;
+ link_type_name = g_strdup("default");
+ }
+ row.addresses = g_strdup(ip_str->str);
+ row.no_addresses = ips;
+ if (ips == 0) {
+ temp = g_strdup_printf("<b>%s</b>", row.display_name);
+ } else {
+ temp = g_strdup_printf("<b>%s</b>\n<span size='small'>%s</span>", row.display_name, row.addresses);
+ }
+ g_array_append_val(rows, row);
+ if (caps != NULL) {
+ free_if_capabilities(caps);
+ }
+ }
+ g_string_free(ip_str, TRUE);
+ }
+}
+
+GtkTreeModel *create_and_fill_model(GtkTreeView *view)
+{
+ GtkListStore *store;
+ GtkTreeIter iter;
+ GList *list;
+ char *temp="", *snaplen_string;
+ guint i, j;
+ link_row *link = NULL;
+ interface_row row;
+ interface_options interface_opts;
+ gboolean found = FALSE;
+
#if defined(HAVE_PCAP_CREATE)
store = gtk_list_store_new (8, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_UINT, G_TYPE_STRING, G_TYPE_STRING);
#elif defined(_WIN32) && !defined (HAVE_PCAP_CREATE)
@@ -3530,6 +3716,9 @@ GtkTreeModel *create_and_fill_model(GList *if_list, gboolean do_hide, GtkTreeVie
store = gtk_list_store_new (6, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
#endif
+ if (!rows || rows->len == 0) {
+ make_and_fill_rows();
+ }
if (rows && rows->len > 0) {
for (i = 0; i < rows->len; i++) {
row = g_array_index(rows, interface_row, i);
@@ -3569,147 +3758,6 @@ GtkTreeModel *create_and_fill_model(GList *if_list, gboolean do_hide, GtkTreeVie
gtk_list_store_set (store, &iter, CAPTURE, found, INTERFACE, temp, LINK, link->name, PMODE, row.pmode?"enabled":"disabled", SNAPLEN, snaplen_string, FILTER, row.cfilter, -1);
#endif
}
- } else {
- rows = g_array_new(TRUE, TRUE, sizeof(interface_row));
- /* Scan through the list and build a list of strings to display. */
- for (if_entry = if_list; if_entry != NULL; if_entry = g_list_next(if_entry)) {
- if_info = if_entry->data;
- ip_str = g_string_new("");
- str = "";
- ips = 0;
- row.name = g_strdup(if_info->name);
- /* Is this interface hidden and, if so, should we include it anyway? */
- if (!prefs_is_capture_device_hidden(if_info->name) || !do_hide) {
- /* It's not hidden, or it is but we should include it in the list. */
- /* Do we have a user-supplied description? */
- descr = capture_dev_user_descr_find(if_info->name);
- if (descr != NULL) {
- /* Yes, we have a user-supplied description; use it. */
- if_string = g_strdup_printf("%s: %s", descr, if_info->name);
- g_free(descr);
- } else {
- /* No, we don't have a user-supplied description; did we get
- one from the OS or libpcap? */
- if (if_info->description != NULL) {
- /* Yes - use it. */
- if_string = g_strdup_printf("%s: %s", if_info->description, if_info->name);
- } else {
- /* No. */
- if_string = g_strdup(if_info->name);
- }
- }
- if (if_info->loopback) {
- row.display_name = g_strdup_printf("%s (loopback)", if_string);
- } else {
- row.display_name = g_strdup(if_string);
- }
- found = FALSE;
- for (i = 0; i < global_capture_opts.ifaces->len; i++) {
- interface_opts = g_array_index(global_capture_opts.ifaces, interface_options, i);
- if (!interface_opts.name || strcmp(interface_opts.name, (char*)row.name)!=0) {
- continue;
- } else {
- found = TRUE;
- num_selected++;
- break;
- }
- }
- if (found) {
-#if defined(_WIN32) || defined(HAVE_PCAP_CREATE)
- row.buffer = interface_opts.buffer_size;
-#endif
- row.pmode = interface_opts.promisc_mode;
- row.has_snaplen = interface_opts.has_snaplen;
- row.snaplen = interface_opts.snaplen;
- row.cfilter = g_strdup(interface_opts.cfilter);
- } else {
-#if defined(_WIN32) || defined(HAVE_PCAP_CREATE)
- row.buffer = global_capture_opts.default_options.buffer_size;
-#endif
- row.pmode = global_capture_opts.default_options.promisc_mode;
- row.has_snaplen = global_capture_opts.default_options.has_snaplen;
- row.snaplen = global_capture_opts.default_options.snaplen;
- row.cfilter = g_strdup(global_capture_opts.default_options.cfilter);
- }
- cap_settings = capture_get_cap_settings(if_info->name);
- gtk_list_store_append (store, &iter);
- caps = capture_get_if_capabilities(if_info->name, cap_settings.monitor_mode, NULL);
- for (; (curr_addr = g_slist_nth(if_info->addrs, ips)) != NULL; ips++) {
- if (ips != 0) {
- g_string_append(ip_str, "\n");
- }
- addr = (if_addr_t *)curr_addr->data;
- switch (addr->ifat_type) {
- case IF_AT_IPv4:
- g_string_append(ip_str, ip_to_str((guint8 *)&addr->addr.ip4_addr));
- break;
- case IF_AT_IPv6:
- g_string_append(ip_str, ip6_to_str((struct e_in6_addr *)&addr->addr.ip6_addr));
- break;
- default:
- /* In case we add non-IP addresses */
- break;
- }
- }
- linktype_count = 0;
- row.links = NULL;
- if (caps != NULL) {
-#ifdef HAVE_PCAP_CREATE
- row.monitor_mode_enabled = cap_settings.monitor_mode;
- row.monitor_mode_supported = caps->can_set_rfmon;
-#endif
- for (lt_entry = caps->data_link_types; lt_entry != NULL; lt_entry = g_list_next(lt_entry)) {
- data_link_info = lt_entry->data;
- if (data_link_info->description != NULL) {
- str = g_strdup_printf("%s", data_link_info->description);
- } else {
- str = g_strdup_printf("%s (not supported)", data_link_info->name);
- }
- if (linktype_count == 0) {
- link_type_name = g_strdup(str);
- row.active_dlt = data_link_info->dlt;
- }
- link = (link_row *)g_malloc(sizeof(link_row));
- link->dlt = data_link_info->dlt;
- link->name = g_strdup(str);
- row.links = g_list_append(row.links, link);
- linktype_count++;
- }
- } else {
- cap_settings.monitor_mode = FALSE;
-#ifdef HAVE_PCAP_CREATE
- row.monitor_mode_enabled = FALSE;
- row.monitor_mode_supported = FALSE;
-#endif
- row.active_dlt = -1;
- link_type_name = g_strdup("default");
- }
- row.addresses = g_strdup(ip_str->str);
- row.no_addresses = ips;
- if (ips == 0) {
- temp = g_strdup_printf("<b>%s</b>", row.display_name);
- } else {
- temp = g_strdup_printf("<b>%s</b>\n<span size='small'>%s</span>", row.display_name, row.addresses);
- }
- g_array_append_val(rows, row);
- if (row.has_snaplen) {
- snaplen_string = g_strdup_printf("%d", row.snaplen);
- } else {
- snaplen_string = g_strdup("default");
- }
-#if defined(HAVE_PCAP_CREATE)
- gtk_list_store_set (store, &iter, CAPTURE, found, INTERFACE, temp, LINK, link_type_name, PMODE, row.pmode?"enabled":"disabled", SNAPLEN, snaplen_string, BUFFER, (guint) row.buffer, MONITOR, row.monitor_mode_supported?(row.monitor_mode_enabled?"enabled":"disabled"):"n/a", FILTER, row.cfilter, -1);
-#elif defined(_WIN32) && !defined(HAVE_PCAP_CREATE)
- gtk_list_store_set (store, &iter, CAPTURE, found, INTERFACE, temp, LINK, link_type_name, PMODE, row.pmode?"enabled":"disabled", SNAPLEN, snaplen_string, BUFFER, (guint) row.buffer, FILTER, row.cfilter, -1);
-#else
- gtk_list_store_set (store, &iter, CAPTURE, found, INTERFACE, temp, LINK, link_type_name, PMODE, row.pmode?"enabled":"disabled", SNAPLEN, snaplen_string, FILTER, row.cfilter, -1);
-#endif
- if (caps != NULL) {
- free_if_capabilities(caps);
- }
- }
- g_string_free(ip_str, TRUE);
- }
}
gtk_tree_view_set_model(GTK_TREE_VIEW(view), GTK_TREE_MODEL(store));
return GTK_TREE_MODEL(store);
diff --git a/gtk/capture_dlg.h b/gtk/capture_dlg.h
index f127a87c51..2cb006486f 100644
--- a/gtk/capture_dlg.h
+++ b/gtk/capture_dlg.h
@@ -161,7 +161,7 @@ cap_settings_t
capture_get_cap_settings (gchar *if_name);
GtkTreeModel*
-create_and_fill_model (GList *if_list, gboolean do_hide, GtkTreeView *view);
+create_and_fill_model (GtkTreeView *view);
gboolean
query_tooltip_tree_view_cb (GtkWidget *widget,
@@ -200,4 +200,7 @@ dlg_window_present(void);
void
enable_selected_interface(gchar *name, gboolean enable);
+void
+options_interface_cb(GtkTreeView *view, GtkTreePath *path, GtkTreeViewColumn *column _U_, gpointer userdata);
+
#endif /* capture_dlg.h */
diff --git a/gtk/main_welcome.c b/gtk/main_welcome.c
index 6abc9253d9..c2bc30943b 100644
--- a/gtk/main_welcome.c
+++ b/gtk/main_welcome.c
@@ -1214,6 +1214,7 @@ welcome_new(void)
if_view = gtk_tree_view_new ();
g_object_set(G_OBJECT(if_view), "headers-visible", FALSE, NULL);
+ g_signal_connect(if_view, "row-activated", G_CALLBACK(options_interface_cb), (gpointer)welcome_hb);
g_object_set_data(G_OBJECT(welcome_hb), TREE_VIEW_INTERFACES, if_view);
renderer = gtk_cell_renderer_pixbuf_new();
column = gtk_tree_view_column_new_with_attributes ("",
@@ -1428,3 +1429,8 @@ GtkWidget* get_welcome_window(void)
return welcome_hb;
}
+displayed_interface get_interface_data(gint index)
+{
+ return g_array_index(interfaces, displayed_interface, index);
+}
+
diff --git a/gtk/main_welcome.h b/gtk/main_welcome.h
index 75f0d0fae1..566f7669e2 100644
--- a/gtk/main_welcome.h
+++ b/gtk/main_welcome.h
@@ -89,4 +89,6 @@ void change_selection_for_all(gboolean enable);
void add_interface_to_list(gchar *name, gchar *descr, remote_options *remote_opts);
#endif
+displayed_interface get_interface_data(gint index);
+
#endif /* __MAIN_WELCOME_H__ */