Qt: fix closing editor in capture interfaces dialog
Whenever (every second) the points list is updated, a dataChanged signal is emitted and Qt decides to close all editors. Workaround this issue by disabling the dataChanged signal. (Alternatively, we could change the list into a pointer-to-list again.) Change-Id: Ie06d118d011a72f5be5608c2324ca2715a3f97c7 Fixes: v2.3.0rc0-2014-gf8dc2346df ("Qt: fix memleak of PointList in interface statistics") Reviewed-on: https://code.wireshark.org/review/20530 Petri-Dish: Peter Wu <peter@lekensteyn.nl> Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org> Reviewed-by: Stig Bjørlykke <stig@bjorlykke.org> Reviewed-by: Anders Broman <a.broman58@gmail.com>
This commit is contained in:
parent
e1b14fbcfe
commit
721182b09b
|
@ -111,6 +111,8 @@ class InterfaceTreeWidgetItem : public QTreeWidgetItem
|
|||
public:
|
||||
InterfaceTreeWidgetItem(QTreeWidget *tree) : QTreeWidgetItem(tree) {}
|
||||
bool operator< (const QTreeWidgetItem &other) const;
|
||||
QVariant data(int column, int role) const;
|
||||
void setData(int column, int role, const QVariant &value);
|
||||
QList<int> points;
|
||||
|
||||
void updateInterfaceColumns(interface_t *device)
|
||||
|
@ -1116,6 +1118,29 @@ bool InterfaceTreeWidgetItem::operator< (const QTreeWidgetItem &other) const {
|
|||
return QTreeWidgetItem::operator<(other);
|
||||
}
|
||||
|
||||
QVariant InterfaceTreeWidgetItem::data(int column, int role) const
|
||||
{
|
||||
// See setData for the special col_traffic_ treatment.
|
||||
if (column == col_traffic_ && role == Qt::UserRole) {
|
||||
return qVariantFromValue(points);
|
||||
}
|
||||
|
||||
return QTreeWidgetItem::data(column, role);
|
||||
}
|
||||
|
||||
void InterfaceTreeWidgetItem::setData(int column, int role, const QVariant &value)
|
||||
{
|
||||
// Workaround for closing editors on updates to the points list: normally
|
||||
// QTreeWidgetItem::setData emits dataChanged when the value (list) changes.
|
||||
// We could store a pointer to the list, or just have this hack that does
|
||||
// not emit dataChanged.
|
||||
if (column == col_traffic_ && role == Qt::UserRole) {
|
||||
points = value.value<QList<int> >();
|
||||
return;
|
||||
}
|
||||
|
||||
QTreeWidgetItem::setData(column, role, value);
|
||||
}
|
||||
|
||||
//
|
||||
// InterfaceTreeDelegate
|
||||
|
|
Loading…
Reference in New Issue