forked from osmocom/wireshark
Qt: Use correct column width when switching profile
QTreeView::setColumnHidden() saves column width on hide and restores column width on show. When switching from a profile with hidden columns to a profile where this columns are shown we get a sectionResized() signal with the saved width from the old profile, initiated from columnsChanged() -> setColumnVisibility(). We must avoid setting this as a new column width because this is recent values from a old column layout. In other cases we use setColumnVisibility() we don’t need to set a new column width either, because we store the column width ourself. Don't store column width when hiding column (new_width == 0). Restore column width when showing column because profiles may have changed the packet_list layout. Change-Id: I7e89c3477402ec6d621cd2015ee74b086f60d6cb Reviewed-on: https://code.wireshark.org/review/12111 Petri-Dish: Stig Bjørlykke <stig@bjorlykke.org> Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org> Reviewed-by: Stig Bjørlykke <stig@bjorlykke.org>
This commit is contained in:
parent
ff5719c6e8
commit
4980d505f2
|
@ -250,7 +250,8 @@ PacketList::PacketList(QWidget *parent) :
|
||||||
capture_in_progress_(false),
|
capture_in_progress_(false),
|
||||||
tail_timer_id_(0),
|
tail_timer_id_(0),
|
||||||
rows_inserted_(false),
|
rows_inserted_(false),
|
||||||
columns_changed_(false)
|
columns_changed_(false),
|
||||||
|
set_column_visibility_(false)
|
||||||
{
|
{
|
||||||
QMenu *main_menu_item, *submenu;
|
QMenu *main_menu_item, *submenu;
|
||||||
QAction *action;
|
QAction *action;
|
||||||
|
@ -559,9 +560,11 @@ void PacketList::paintEvent(QPaintEvent *event)
|
||||||
|
|
||||||
void PacketList::setColumnVisibility()
|
void PacketList::setColumnVisibility()
|
||||||
{
|
{
|
||||||
|
set_column_visibility_ = true;
|
||||||
for (int i = 0; i < prefs.num_cols; i++) {
|
for (int i = 0; i < prefs.num_cols; i++) {
|
||||||
setColumnHidden(i, get_column_visible(i) ? false : true);
|
setColumnHidden(i, get_column_visible(i) ? false : true);
|
||||||
}
|
}
|
||||||
|
set_column_visibility_ = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
int PacketList::sizeHintForColumn(int column) const
|
int PacketList::sizeHintForColumn(int column) const
|
||||||
|
@ -636,8 +639,9 @@ void PacketList::redrawVisiblePackets() {
|
||||||
// prefs.col_list has changed.
|
// prefs.col_list has changed.
|
||||||
void PacketList::columnsChanged()
|
void PacketList::columnsChanged()
|
||||||
{
|
{
|
||||||
|
columns_changed_ = true;
|
||||||
if (!cap_file_) {
|
if (!cap_file_) {
|
||||||
columns_changed_ = true;
|
// Keep columns_changed_ = true until we load a capture file.
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -984,6 +988,7 @@ void PacketList::setCaptureFile(capture_file *cf)
|
||||||
cap_file_ = cf;
|
cap_file_ = cf;
|
||||||
if (cap_file_ && columns_changed_) {
|
if (cap_file_ && columns_changed_) {
|
||||||
columnsChanged();
|
columnsChanged();
|
||||||
|
applyRecentColumnWidths();
|
||||||
}
|
}
|
||||||
packet_list_model_->setCaptureFile(cf);
|
packet_list_model_->setCaptureFile(cf);
|
||||||
create_near_overlay_ = true;
|
create_near_overlay_ = true;
|
||||||
|
@ -1223,8 +1228,12 @@ void PacketList::columnVisibilityTriggered()
|
||||||
QAction *ha = qobject_cast<QAction*>(sender());
|
QAction *ha = qobject_cast<QAction*>(sender());
|
||||||
if (!ha) return;
|
if (!ha) return;
|
||||||
|
|
||||||
set_column_visible(ha->data().toInt(), ha->isChecked());
|
int col = ha->data().toInt();
|
||||||
|
set_column_visible(col, ha->isChecked());
|
||||||
setColumnVisibility();
|
setColumnVisibility();
|
||||||
|
if (ha->isChecked()) {
|
||||||
|
setColumnWidth(col, recent_get_column_width(col));
|
||||||
|
}
|
||||||
if (!prefs.gui_use_pref_save) {
|
if (!prefs.gui_use_pref_save) {
|
||||||
prefs_main_write();
|
prefs_main_write();
|
||||||
}
|
}
|
||||||
|
@ -1232,9 +1241,16 @@ void PacketList::columnVisibilityTriggered()
|
||||||
|
|
||||||
void PacketList::sectionResized(int col, int, int new_width)
|
void PacketList::sectionResized(int col, int, int new_width)
|
||||||
{
|
{
|
||||||
if (isVisible()) {
|
if (isVisible() && !columns_changed_ && !set_column_visibility_ && new_width > 0) {
|
||||||
// Column 1 gets an invalid value (32 on OS X) when we're not yet
|
// Column 1 gets an invalid value (32 on OS X) when we're not yet
|
||||||
// visible.
|
// visible.
|
||||||
|
//
|
||||||
|
// Don't set column width when columns changed or setting column
|
||||||
|
// visibility because we may get a sectionReized() from QTreeView
|
||||||
|
// with values from a old columns layout.
|
||||||
|
//
|
||||||
|
// Don't set column width when hiding a column.
|
||||||
|
|
||||||
recent_set_column_width(col, new_width);
|
recent_set_column_width(col, new_width);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -117,6 +117,7 @@ private:
|
||||||
bool tail_at_end_;
|
bool tail_at_end_;
|
||||||
bool rows_inserted_;
|
bool rows_inserted_;
|
||||||
bool columns_changed_;
|
bool columns_changed_;
|
||||||
|
bool set_column_visibility_;
|
||||||
|
|
||||||
void setFrameReftime(gboolean set, frame_data *fdata);
|
void setFrameReftime(gboolean set, frame_data *fdata);
|
||||||
void setColumnVisibility();
|
void setColumnVisibility();
|
||||||
|
|
Loading…
Reference in New Issue