diff options
Diffstat (limited to 'ui/qt')
-rw-r--r-- | ui/qt/main_window_slots.cpp | 4 | ||||
-rw-r--r-- | ui/qt/packet_list.cpp | 42 | ||||
-rw-r--r-- | ui/qt/packet_list.h | 2 |
3 files changed, 26 insertions, 22 deletions
diff --git a/ui/qt/main_window_slots.cpp b/ui/qt/main_window_slots.cpp index 3e84b215b3..909ce154e3 100644 --- a/ui/qt/main_window_slots.cpp +++ b/ui/qt/main_window_slots.cpp @@ -1178,7 +1178,7 @@ void MainWindow::setMenusForSelectedPacket() } } - have_filter_expr = !packet_list_->getFilterFromRowAndColumn().isEmpty(); + have_filter_expr = !packet_list_->getFilterFromRowAndColumn(packet_list_->currentIndex()).isEmpty(); main_ui_->actionEditMarkPacket->setEnabled(frame_selected); main_ui_->actionEditMarkAllDisplayed->setEnabled(have_frames); @@ -2588,7 +2588,7 @@ void MainWindow::matchFieldFilter(FilterAction::Action action, FilterAction::Act QString field_filter; if (packet_list_->contextMenuActive() || packet_list_->hasFocus()) { - field_filter = packet_list_->getFilterFromRowAndColumn(); + field_filter = packet_list_->getFilterFromRowAndColumn(packet_list_->currentIndex()); } else if (capture_file_.capFile() && capture_file_.capFile()->finfo_selected) { char *tmp_field = proto_construct_match_selected_string(capture_file_.capFile()->finfo_selected, capture_file_.capFile()->edt); diff --git a/ui/qt/packet_list.cpp b/ui/qt/packet_list.cpp index f00df6fe6c..1f07d129ae 100644 --- a/ui/qt/packet_list.cpp +++ b/ui/qt/packet_list.cpp @@ -598,7 +598,6 @@ void PacketList::contextMenuEvent(QContextMenuEvent *event) ctx_menu_.addAction(action); decode_as_->setData(QVariant::fromValue(true)); - ctx_column_ = columnAt(event->x()); // Set menu sensitivity for the current column and set action data. if ( frameData ) @@ -607,7 +606,6 @@ void PacketList::contextMenuEvent(QContextMenuEvent *event) emit frameSelected(-1); ctx_menu_.exec(event->globalPos()); - ctx_column_ = -1; decode_as_->setData(QVariant()); } @@ -672,11 +670,11 @@ void PacketList::mouseMoveEvent (QMouseEvent *event) QMimeData * mimeData = nullptr; QWidget * content = nullptr; - QString filter = getFilterFromRowAndColumn(); + QString filter = getFilterFromRowAndColumn(curIndex); if ( ! filter.isEmpty() ) { QString abbrev; - QString name = model()->headerData(ctx_column_, header()->orientation()).toString(); + QString name = model()->headerData(curIndex.column(), header()->orientation()).toString(); if ( ! filter.isEmpty() ) { @@ -1060,13 +1058,19 @@ bool PacketList::contextMenuActive() return ctx_column_ >= 0 ? true : false; } -QString PacketList::getFilterFromRowAndColumn() +QString PacketList::getFilterFromRowAndColumn(QModelIndex idx) { frame_data *fdata; QString filter; - int row = currentIndex().row(); - if (!cap_file_ || !packet_list_model_ || ctx_column_ < 0 || ctx_column_ >= cap_file_->cinfo.num_cols) return filter; + if ( ! idx.isValid() ) + return filter; + + int row = idx.row(); + int column = idx.column(); + + if (!cap_file_ || !packet_list_model_ || column < 0 || column >= cap_file_->cinfo.num_cols) + return filter; fdata = packet_list_model_->getRowFdata(row); @@ -1091,8 +1095,8 @@ QString PacketList::getFilterFromRowAndColumn() fdata, &cap_file_->cinfo); epan_dissect_fill_in_columns(&edt, TRUE, TRUE); - if ((cap_file_->cinfo.columns[ctx_column_].col_custom_occurrence) || - (strchr (cap_file_->cinfo.col_expr.col_expr_val[ctx_column_], ',') == NULL)) + if ((cap_file_->cinfo.columns[column].col_custom_occurrence) || + (strchr (cap_file_->cinfo.col_expr.col_expr_val[column], ',') == NULL)) { /* Only construct the filter when a single occurrence is displayed * otherwise we might end up with a filter like "ip.proto==1,6". @@ -1101,20 +1105,20 @@ QString PacketList::getFilterFromRowAndColumn() * the filter might be calculated as "ip.proto==1 && ip.proto==6" * instead? */ - if (strlen(cap_file_->cinfo.col_expr.col_expr[ctx_column_]) != 0 && - strlen(cap_file_->cinfo.col_expr.col_expr_val[ctx_column_]) != 0) { + if (strlen(cap_file_->cinfo.col_expr.col_expr[column]) != 0 && + strlen(cap_file_->cinfo.col_expr.col_expr_val[column]) != 0) { gboolean is_string_value = FALSE; - if (cap_file_->cinfo.columns[ctx_column_].col_fmt == COL_CUSTOM) { - header_field_info *hfi = proto_registrar_get_byname(cap_file_->cinfo.columns[ctx_column_].col_custom_fields); + if (cap_file_->cinfo.columns[column].col_fmt == COL_CUSTOM) { + header_field_info *hfi = proto_registrar_get_byname(cap_file_->cinfo.columns[column].col_custom_fields); if (hfi && hfi->parent == -1) { /* Protocol only */ - filter.append(cap_file_->cinfo.col_expr.col_expr[ctx_column_]); + filter.append(cap_file_->cinfo.col_expr.col_expr[column]); } else if (hfi && hfi->type == FT_STRING) { /* Custom string, add quotes */ is_string_value = TRUE; } } else { - header_field_info *hfi = proto_registrar_get_byname(cap_file_->cinfo.col_expr.col_expr[ctx_column_]); + header_field_info *hfi = proto_registrar_get_byname(cap_file_->cinfo.col_expr.col_expr[column]); if (hfi && hfi->type == FT_STRING) { /* Could be an address type such as usb.src which must be quoted. */ is_string_value = TRUE; @@ -1124,12 +1128,12 @@ QString PacketList::getFilterFromRowAndColumn() if (filter.isEmpty()) { if (is_string_value) { filter.append(QString("%1 == \"%2\"") - .arg(cap_file_->cinfo.col_expr.col_expr[ctx_column_]) - .arg(cap_file_->cinfo.col_expr.col_expr_val[ctx_column_])); + .arg(cap_file_->cinfo.col_expr.col_expr[column]) + .arg(cap_file_->cinfo.col_expr.col_expr_val[column])); } else { filter.append(QString("%1 == %2") - .arg(cap_file_->cinfo.col_expr.col_expr[ctx_column_]) - .arg(cap_file_->cinfo.col_expr.col_expr_val[ctx_column_])); + .arg(cap_file_->cinfo.col_expr.col_expr[column]) + .arg(cap_file_->cinfo.col_expr.col_expr_val[column])); } } } diff --git a/ui/qt/packet_list.h b/ui/qt/packet_list.h index 437681c55d..9f07f17abd 100644 --- a/ui/qt/packet_list.h +++ b/ui/qt/packet_list.h @@ -55,7 +55,7 @@ public: void clear(); void writeRecent(FILE *rf); bool contextMenuActive(); - QString getFilterFromRowAndColumn(); + QString getFilterFromRowAndColumn(QModelIndex idx); void resetColorized(); QString packetComment(); void setPacketComment(QString new_comment); |