diff options
author | Guy Harris <guy@alum.mit.edu> | 2014-07-24 19:25:44 -0700 |
---|---|---|
committer | Guy Harris <guy@alum.mit.edu> | 2014-07-25 03:00:43 +0000 |
commit | 35b4487538dc88a5687c5e3a99c8c70c099fdfa8 (patch) | |
tree | 959e1cbf88f1fba0cea7c4bc5b18d2b4901b25ea /ui/qt | |
parent | 0501465a3acb2abc108177ea5149ec8de4a05210 (diff) |
Handle empty interface lists when the list changes.
Don't assume that a change to the interface list is from a non-empty
interface list to a different non-empty interface list.
Change-Id: I94054ca0cf2661704aff1869385aa2155c19677d
Reviewed-on: https://code.wireshark.org/review/3193
Reviewed-by: Guy Harris <guy@alum.mit.edu>
Diffstat (limited to 'ui/qt')
-rw-r--r-- | ui/qt/interface_tree.cpp | 126 | ||||
-rw-r--r-- | ui/qt/interface_tree.h | 1 |
2 files changed, 48 insertions, 79 deletions
diff --git a/ui/qt/interface_tree.cpp b/ui/qt/interface_tree.cpp index 2d03390bf2..6512a960a1 100644 --- a/ui/qt/interface_tree.cpp +++ b/ui/qt/interface_tree.cpp @@ -121,26 +121,23 @@ void InterfaceTree::resizeEvent(QResizeEvent *evt) setUpdatesEnabled(true); } -void InterfaceTree::getInterfaceList() +void InterfaceTree::display() { #ifdef HAVE_LIBPCAP - GList *if_list; - int err; - gchar *err_str = NULL; + interface_t device; + setDisabled(false); clear(); - if_list = capture_interface_list(&err, &err_str,main_window_update); - if_list = g_list_sort(if_list, if_list_comparator_alph); - - if (if_list == NULL) { + if (global_capture_opts.all_ifaces->len == 0) { + // Error,or just no interfaces? QTreeWidgetItem *ti = new QTreeWidgetItem(); QLabel *err_label; - if (err == CANT_GET_INTERFACE_LIST || err == DONT_HAVE_PCAP) { - err_label = new QLabel(gchar_free_to_qstring(err_str)); - } else { + if (global_capture_opts.ifaces_err == 0) { err_label = new QLabel("No interfaces found"); + } else { + err_label = new QLabel(gchar_free_to_qstring(global_capture_opts.ifaces_err_info)); } err_label->setWordWrap(true); @@ -151,48 +148,33 @@ void InterfaceTree::getInterfaceList() return; } - // XXX Do we need to check for this? capture_interface_list returns an error if the length is 0. - if (g_list_length(if_list) > 0) { - interface_t device; - setDisabled(false); - - for (guint i = 0; i < global_capture_opts.all_ifaces->len; i++) { - QList<int> *points; - - device = g_array_index(global_capture_opts.all_ifaces, interface_t, i); + for (guint i = 0; i < global_capture_opts.all_ifaces->len; i++) { + QList<int> *points; - /* Continue if capture device is hidden */ - if (device.hidden) { - continue; - } + device = g_array_index(global_capture_opts.all_ifaces, interface_t, i); - QTreeWidgetItem *ti = new QTreeWidgetItem(); - ti->setText(0, QString().fromUtf8(device.display_name)); - ti->setData(0, Qt::UserRole, QString(device.name)); - points = new QList<int>(); - ti->setData(1, Qt::UserRole, qVariantFromValue(points)); - addTopLevelItem(ti); - // XXX Add other device information - resizeColumnToContents(1); - if (strstr(prefs.capture_device, device.name) != NULL) { - device.selected = TRUE; - global_capture_opts.num_selected++; - global_capture_opts.all_ifaces = g_array_remove_index(global_capture_opts.all_ifaces, i); - g_array_insert_val(global_capture_opts.all_ifaces, i, device); - } - if (device.selected) { - ti->setSelected(true); - } + /* Continue if capture device is hidden */ + if (device.hidden) { + continue; } - } - free_interface_list(if_list); - resizeEvent(NULL); - if (!stat_timer_) { - updateStatistics(); - stat_timer_ = new QTimer(this); - connect(stat_timer_, SIGNAL(timeout()), this, SLOT(updateStatistics())); - stat_timer_->start(stat_update_interval_); + QTreeWidgetItem *ti = new QTreeWidgetItem(); + ti->setText(0, QString().fromUtf8(device.display_name)); + ti->setData(0, Qt::UserRole, QString(device.name)); + points = new QList<int>(); + ti->setData(1, Qt::UserRole, qVariantFromValue(points)); + addTopLevelItem(ti); + // XXX Add other device information + resizeColumnToContents(1); + if (strstr(prefs.capture_device, device.name) != NULL) { + device.selected = TRUE; + global_capture_opts.num_selected++; + global_capture_opts.all_ifaces = g_array_remove_index(global_capture_opts.all_ifaces, i); + g_array_insert_val(global_capture_opts.all_ifaces, i, device); + } + if (device.selected) { + ti->setSelected(true); + } } #else QTreeWidgetItem *ti = new QTreeWidgetItem(); @@ -205,6 +187,21 @@ void InterfaceTree::getInterfaceList() #endif // HAVE_LIBPCAP } +void InterfaceTree::getInterfaceList() +{ + display(); + resizeEvent(NULL); + +#ifdef HAVE_LIBPCAP + if (!stat_timer_) { + updateStatistics(); + stat_timer_ = new QTimer(this); + connect(stat_timer_, SIGNAL(timeout()), this, SLOT(updateStatistics())); + stat_timer_->start(stat_update_interval_); + } +#endif +} + void InterfaceTree::getPoints(int row, PointList *pts) { QTreeWidgetItemIterator iter(this); @@ -339,36 +336,7 @@ void InterfaceTree::setSelectedInterfaces() void InterfaceTree::interfaceListChanged() { #ifdef HAVE_LIBPCAP - interface_t device; - clear(); - for (guint i = 0; i < global_capture_opts.all_ifaces->len; i++) { - QList<int> *points; - - device = g_array_index(global_capture_opts.all_ifaces, interface_t, i); - - /* Continue if capture device is hidden */ - if (device.hidden) { - continue; - } - - QTreeWidgetItem *ti = new QTreeWidgetItem(); - ti->setText(0, QString().fromUtf8(device.display_name)); - ti->setData(0, Qt::UserRole, QString(device.name)); - points = new QList<int>(); - ti->setData(1, Qt::UserRole, qVariantFromValue(points)); - addTopLevelItem(ti); - // XXX Add other device information - resizeColumnToContents(1); - if (strstr(prefs.capture_device, device.name) != NULL) { - device.selected = TRUE; - global_capture_opts.num_selected++; - global_capture_opts.all_ifaces = g_array_remove_index(global_capture_opts.all_ifaces, i); - g_array_insert_val(global_capture_opts.all_ifaces, i, device); - } - if (device.selected) { - ti->setSelected(true); - } - } + display(); #endif } diff --git a/ui/qt/interface_tree.h b/ui/qt/interface_tree.h index eeab0eeacb..48b5b5acd9 100644 --- a/ui/qt/interface_tree.h +++ b/ui/qt/interface_tree.h @@ -48,6 +48,7 @@ protected: void hideEvent(QHideEvent *evt); void showEvent(QShowEvent *evt); void resizeEvent(QResizeEvent *evt); + void display(); private: #ifdef HAVE_LIBPCAP |