From 982fc7184d46621948e53b485c7504c9d11f3350 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Fri, 17 May 2024 17:00:59 +0200 Subject: Merging upstream version 4.2.5. Signed-off-by: Daniel Baumann --- ui/qt/export_dissection_dialog.cpp | 6 +++ ui/qt/models/column_list_model.cpp | 2 +- ui/qt/models/packet_list_model.cpp | 69 +++++++++++++++++++++++++++++++++++ ui/qt/packet_list.cpp | 2 + ui/qt/packet_range_group_box.cpp | 19 ++++++++-- ui/qt/rtp_player_dialog.cpp | 6 ++- ui/qt/sequence_dialog.cpp | 50 ++++++++++++++++--------- ui/qt/sequence_dialog.h | 5 ++- ui/qt/tcp_stream_dialog.cpp | 16 +++++++- ui/qt/utils/data_printer.cpp | 48 ++++++++++++++++++++---- ui/qt/voip_calls_dialog.cpp | 3 +- ui/qt/wireshark_de.ts | 4 ++ ui/qt/wireshark_en.ts | 4 ++ ui/qt/wireshark_es.ts | 4 ++ ui/qt/wireshark_fr.ts | 4 ++ ui/qt/wireshark_it.ts | 4 ++ ui/qt/wireshark_ja_JP.ts | 4 ++ ui/qt/wireshark_ko.ts | 4 ++ ui/qt/wireshark_main_window_slots.cpp | 2 +- ui/qt/wireshark_pl.ts | 24 +++++++----- ui/qt/wireshark_ru.ts | 4 ++ ui/qt/wireshark_sv.ts | 4 ++ ui/qt/wireshark_tr_TR.ts | 4 ++ ui/qt/wireshark_uk.ts | 4 ++ ui/qt/wireshark_zh_CN.ts | 4 ++ 25 files changed, 252 insertions(+), 48 deletions(-) (limited to 'ui/qt') diff --git a/ui/qt/export_dissection_dialog.cpp b/ui/qt/export_dissection_dialog.cpp index 7f2664e..5b09efc 100644 --- a/ui/qt/export_dissection_dialog.cpp +++ b/ui/qt/export_dissection_dialog.cpp @@ -172,6 +172,12 @@ void ExportDissectionDialog::show() void ExportDissectionDialog::dialogAccepted(const QStringList &selected) { if (selected.length() > 0) { + /* writing might take a while, so hide ourselves so the user + * can't click on anything here (this dialog will be closed + * and deleted once this function is done), but can access + * the ProgressDialog in the main window to cancel the export. + */ + hide(); cf_print_status_t status; QString file_name = selected[0]; diff --git a/ui/qt/models/column_list_model.cpp b/ui/qt/models/column_list_model.cpp index a0e5c8b..102ffc3 100644 --- a/ui/qt/models/column_list_model.cpp +++ b/ui/qt/models/column_list_model.cpp @@ -278,7 +278,7 @@ void ColumnListModel::populate() QVariant ColumnListModel::data(const QModelIndex &index, int role) const { - if (! index.isValid() || index.column() >= store_.count()) + if (! index.isValid() || index.row() >= store_.count()) return QVariant(); ListElement ne = store_.at(index.row()); diff --git a/ui/qt/models/packet_list_model.cpp b/ui/qt/models/packet_list_model.cpp index 0ed61d7..8cc0069 100644 --- a/ui/qt/models/packet_list_model.cpp +++ b/ui/qt/models/packet_list_model.cpp @@ -186,26 +186,74 @@ void PacketListModel::clear() { void PacketListModel::invalidateAllColumnStrings() { + // https://bugreports.qt.io/browse/QTBUG-58580 + // https://bugreports.qt.io/browse/QTBUG-124173 + // https://codereview.qt-project.org/c/qt/qtbase/+/285280 + // + // In Qt 6, QAbstractItemView::dataChanged determines how much of the + // viewport rectangle is covered by the changed indices and only updates + // that much. Unfortunately, if the number of indices is very large, + // computing the union of the intersecting rectangle takes much longer + // than unconditionally updating the entire viewport. It increases linearly + // with the total number of packets in the list, unlike updating the + // viewport, which scales with the size of the viewport but is unaffected + // by undisplayed packets. + // + // In particular, if the data for all of the model is invalidated, we + // know we want to update the entire viewport and very much do not + // want to waste time calculating the affected area. (This can take + // 1 s with 1.4 M packets, 9 s with 12 M packets.) + // + // Issuing layoutAboutToBeChanged() and layoutChanged() causes the + // QTreeView to clear all the information for each of the view items, + // but without clearing the current and selected items (unlike + // [begin|end]ResetModel.) + // + // Theoretically this is less efficient because dataChanged() has a list + // of what roles changed and the other signals do not; in practice, + // neither QTreeView::dataChanged nor QAbstractItemView::dataChanged + // actually use the roles parameter, and just reset everything. +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + emit layoutAboutToBeChanged(); +#endif PacketListRecord::invalidateAllRecords(); +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + emit layoutChanged(); +#else emit dataChanged(index(0, 0), index(rowCount() - 1, columnCount() - 1), QVector() << Qt::DisplayRole); +#endif } void PacketListModel::resetColumns() { +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + emit layoutAboutToBeChanged(); +#endif if (cap_file_) { PacketListRecord::resetColumns(&cap_file_->cinfo); } +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + emit layoutChanged(); +#else emit dataChanged(index(0, 0), index(rowCount() - 1, columnCount() - 1)); +#endif emit headerDataChanged(Qt::Horizontal, 0, columnCount() - 1); } void PacketListModel::resetColorized() { +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + emit layoutAboutToBeChanged(); +#endif PacketListRecord::resetColorization(); +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + emit layoutChanged(); +#else emit dataChanged(index(0, 0), index(rowCount() - 1, columnCount() - 1), QVector() << Qt::BackgroundRole << Qt::ForegroundRole); +#endif } void PacketListModel::toggleFrameMark(const QModelIndexList &indeces) @@ -239,6 +287,9 @@ void PacketListModel::toggleFrameMark(const QModelIndexList &indeces) void PacketListModel::setDisplayedFrameMark(gboolean set) { +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + emit layoutAboutToBeChanged(); +#endif foreach (PacketListRecord *record, visible_rows_) { if (set) { cf_mark_frame(cap_file_, record->frameData()); @@ -246,8 +297,12 @@ void PacketListModel::setDisplayedFrameMark(gboolean set) cf_unmark_frame(cap_file_, record->frameData()); } } +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + emit layoutChanged(); +#else emit dataChanged(index(0, 0), index(rowCount() - 1, columnCount() - 1), QVector() << Qt::BackgroundRole << Qt::ForegroundRole); +#endif } void PacketListModel::toggleFrameIgnore(const QModelIndexList &indeces) @@ -281,6 +336,9 @@ void PacketListModel::toggleFrameIgnore(const QModelIndexList &indeces) void PacketListModel::setDisplayedFrameIgnore(gboolean set) { +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + emit layoutAboutToBeChanged(); +#endif foreach (PacketListRecord *record, visible_rows_) { if (set) { cf_ignore_frame(cap_file_, record->frameData()); @@ -288,8 +346,12 @@ void PacketListModel::setDisplayedFrameIgnore(gboolean set) cf_unignore_frame(cap_file_, record->frameData()); } } +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + emit layoutChanged(); +#else emit dataChanged(index(0, 0), index(rowCount() - 1, columnCount() - 1), QVector() << Qt::BackgroundRole << Qt::ForegroundRole << Qt::DisplayRole); +#endif } void PacketListModel::toggleFrameRefTime(const QModelIndex &rt_index) @@ -302,6 +364,9 @@ void PacketListModel::toggleFrameRefTime(const QModelIndex &rt_index) frame_data *fdata = record->frameData(); if (!fdata) return; +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + emit layoutAboutToBeChanged(); +#endif if (fdata->ref_time) { fdata->ref_time=0; cap_file_->ref_time_count--; @@ -332,7 +397,11 @@ void PacketListModel::unsetAllFrameRefTime() cap_file_->ref_time_count = 0; cf_reftime_packets(cap_file_); PacketListRecord::resetColumns(&cap_file_->cinfo); +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + emit layoutChanged(); +#else emit dataChanged(index(0, 0), index(rowCount() - 1, columnCount() - 1)); +#endif } void PacketListModel::addFrameComment(const QModelIndexList &indices, const QByteArray &comment) diff --git a/ui/qt/packet_list.cpp b/ui/qt/packet_list.cpp index a065eac..ae6f0f5 100644 --- a/ui/qt/packet_list.cpp +++ b/ui/qt/packet_list.cpp @@ -1038,6 +1038,8 @@ void PacketList::setRecentColumnWidth(int col) void PacketList::drawCurrentPacket() { + // XXX - Update for multi-select? If more than one packet is Selected, + // this changes it so that only the Current packet is Selected. QModelIndex current_index = currentIndex(); if (selectionModel() && current_index.isValid()) { selectionModel()->clearSelection(); diff --git a/ui/qt/packet_range_group_box.cpp b/ui/qt/packet_range_group_box.cpp index 143da61..dab4433 100644 --- a/ui/qt/packet_range_group_box.cpp +++ b/ui/qt/packet_range_group_box.cpp @@ -113,12 +113,23 @@ void PacketRangeGroupBox::updateCounts() { pr_ui_->selectedDisplayedLabel->setEnabled(displayed_checked); if (range_->include_dependents) { - pr_ui_->selectedCapturedLabel->setText(QString::number(range_->selected_plus_depends_cnt)); - pr_ui_->selectedDisplayedLabel->setText(QString::number(range_->displayed_selected_plus_depends_cnt)); + label_count = range_->selected_plus_depends_cnt; } else { - pr_ui_->selectedCapturedLabel->setText(QString::number(range_->selection_range_cnt)); - pr_ui_->selectedDisplayedLabel->setText(QString::number(range_->displayed_selection_range_cnt)); + label_count = range_->selection_range_cnt; } + if (range_->remove_ignored) { + label_count -= range_->ignored_selection_range_cnt; + } + pr_ui_->selectedCapturedLabel->setText(QString::number(label_count)); + if (range_->include_dependents) { + label_count = range_->displayed_selected_plus_depends_cnt; + } else { + label_count = range_->displayed_selection_range_cnt; + } + if (range_->remove_ignored) { + label_count -= range_->displayed_ignored_selection_range_cnt; + } + pr_ui_->selectedDisplayedLabel->setText(QString::number(label_count)); } else { if (range_->process == range_process_selected) { pr_ui_->allButton->setChecked(true); diff --git a/ui/qt/rtp_player_dialog.cpp b/ui/qt/rtp_player_dialog.cpp index 7d0ad62..60418cc 100644 --- a/ui/qt/rtp_player_dialog.cpp +++ b/ui/qt/rtp_player_dialog.cpp @@ -393,13 +393,13 @@ RtpPlayerDialog::~RtpPlayerDialog() { std::lock_guard lock(init_mutex_); if (pinstance_ != nullptr) { - cleanupMarkerStream(); for (int row = 0; row < ui->streamTreeWidget->topLevelItemCount(); row++) { QTreeWidgetItem *ti = ui->streamTreeWidget->topLevelItem(row); RtpAudioStream *audio_stream = ti->data(stream_data_col_, Qt::UserRole).value(); if (audio_stream) delete audio_stream; } + cleanupMarkerStream(); delete ui; pinstance_ = nullptr; } @@ -1288,7 +1288,9 @@ void RtpPlayerDialog::playFinished(RtpAudioStream *stream, QAudio::Error error) } playing_streams_.removeOne(stream); if (playing_streams_.isEmpty()) { - marker_stream_->stop(); + if (marker_stream_) { + marker_stream_->stop(); + } updateWidgets(); } } diff --git a/ui/qt/sequence_dialog.cpp b/ui/qt/sequence_dialog.cpp index 2f5b5ed..e5fb7b8 100644 --- a/ui/qt/sequence_dialog.cpp +++ b/ui/qt/sequence_dialog.cpp @@ -66,14 +66,14 @@ typedef struct { SequenceInfo *info; } sequence_items_t; -SequenceDialog::SequenceDialog(QWidget &parent, CaptureFile &cf, SequenceInfo *info) : +SequenceDialog::SequenceDialog(QWidget &parent, CaptureFile &cf, SequenceInfo *info, bool voipFeatures) : WiresharkDialog(parent, cf), ui(new Ui::SequenceDialog), info_(info), num_items_(0), packet_num_(0), sequence_w_(1), - voipFeaturesEnabled(false) + voipFeaturesEnabled(voipFeatures) { QAction *action; @@ -189,6 +189,11 @@ SequenceDialog::SequenceDialog(QWidget &parent, CaptureFile &cf, SequenceInfo *i close_bt->setDefault(true); } + enableVoIPFeatures(); + + // Enable or disable VoIP features before adding the ProgressFrame, + // because the layout position depends on whether player_button_ is + // visible. ProgressFrame::addToButtonBox(ui->buttonBox, &parent); loadGeometry(parent.width(), parent.height() * 4 / 5); @@ -200,10 +205,7 @@ SequenceDialog::SequenceDialog(QWidget &parent, CaptureFile &cf, SequenceInfo *i connect(sp, SIGNAL(mousePress(QMouseEvent*)), this, SLOT(diagramClicked(QMouseEvent*))); connect(sp, SIGNAL(mouseMove(QMouseEvent*)), this, SLOT(mouseMoved(QMouseEvent*))); connect(sp, SIGNAL(mouseWheel(QWheelEvent*)), this, SLOT(mouseWheeled(QWheelEvent*))); - - // Button must be enabled by VoIP dialogs - player_button_->setVisible(false); - player_button_->setEnabled(false); + connect(sp, &QCustomPlot::afterLayout, this, &SequenceDialog::layoutAxisLabels); } SequenceDialog::~SequenceDialog() @@ -214,10 +216,10 @@ SequenceDialog::~SequenceDialog() void SequenceDialog::enableVoIPFeatures() { - voipFeaturesEnabled = true; - player_button_->setVisible(true); - ui->actionSelectRtpStreams->setVisible(true); - ui->actionDeselectRtpStreams->setVisible(true); + player_button_->setVisible(voipFeaturesEnabled); + ui->actionSelectRtpStreams->setVisible(voipFeaturesEnabled); + ui->actionDeselectRtpStreams->setVisible(voipFeaturesEnabled); + // Buttons and actions are enabled when valid call selected } void SequenceDialog::updateWidgets() @@ -535,12 +537,20 @@ void SequenceDialog::panAxes(int x_pixels, int y_pixels) double v_pan = 0.0; h_pan = sp->xAxis2->range().size() * x_pixels / sp->xAxis2->axisRect()->width(); + // The nodes are placed on integer x values from 0 to num_nodes - 1. + // We allow 0.5 of margin around a node (also reflected in the + // horizontalScrollBar range.) if (h_pan < 0) { h_pan = qMax(h_pan, min_left_ - sp->xAxis2->range().lower); } else { - h_pan = qMin(h_pan, info_->sainfo()->num_nodes - sp->xAxis2->range().upper); + h_pan = qMin(h_pan, info_->sainfo()->num_nodes - 0.5 - sp->xAxis2->range().upper); } + if (sp->yAxis->rangeReversed()) { + // For reversed axes, lower still references the mathemathetically + // smaller number than upper, so reverse the direction. + y_pixels = -y_pixels; + } v_pan = sp->yAxis->range().size() * y_pixels / sp->yAxis->axisRect()->height(); if (v_pan < 0) { v_pan = qMax(v_pan, min_top_ - sp->yAxis->range().lower); @@ -548,7 +558,7 @@ void SequenceDialog::panAxes(int x_pixels, int y_pixels) v_pan = qMin(v_pan, num_items_ - sp->yAxis->range().upper); } - if (h_pan && !(sp->xAxis2->range().contains(min_left_) && sp->xAxis2->range().contains(info_->sainfo()->num_nodes))) { + if (h_pan && !(sp->xAxis2->range().contains(min_left_) && sp->xAxis2->range().contains(info_->sainfo()->num_nodes - 0.5))) { sp->xAxis2->moveRange(h_pan); sp->replot(); } @@ -586,13 +596,21 @@ void SequenceDialog::resetAxes(bool keep_lower) ui->verticalScrollBar->setRange((rmin - 1.0) * 100, (num_items_ - 0.5 - rmin) * 100); yAxisChanged(sp->yAxis->range()); + sp->replot(QCustomPlot::rpQueuedReplot); +} + +void SequenceDialog::layoutAxisLabels() +{ // It would be exceedingly handy if we could do one or both of the // following: // - Position an axis label above its axis inline with the tick labels. // - Anchor a QCPItemText to one of the corners of a QCPAxis. - // Neither of those appear to be possible, so we first call replot in - // order to lay out our X axes, place our labels, the call replot again. - sp->replot(QCustomPlot::rpQueuedReplot); + // Neither of those appear to be possible, so we place our labels using + // absolute positioning immediately after the layout size and positions + // are set, and right before the replot (or print) draw step occurs, + // using the new QCustomPlot 2.1.0 QCustomPlot::afterLayout signal. + + QCustomPlot *sp = ui->sequencePlot; QRect axis_rect = sp->axisRect()->rect(); @@ -606,8 +624,6 @@ void SequenceDialog::resetAxes(bool keep_lower) + sp->yAxis2->tickLabelPadding() + sp->yAxis2->offset(), axis_rect.top() / 2); - - sp->replot(QCustomPlot::rpRefreshHint); } void SequenceDialog::resetView() diff --git a/ui/qt/sequence_dialog.h b/ui/qt/sequence_dialog.h index 8c32190..f9935d5 100644 --- a/ui/qt/sequence_dialog.h +++ b/ui/qt/sequence_dialog.h @@ -49,9 +49,8 @@ class SequenceDialog : public WiresharkDialog Q_OBJECT public: - explicit SequenceDialog(QWidget &parent, CaptureFile &cf, SequenceInfo *info = NULL); + explicit SequenceDialog(QWidget &parent, CaptureFile &cf, SequenceInfo *info = NULL, bool voipFeatures = false); ~SequenceDialog(); - void enableVoIPFeatures(); protected: void showEvent(QShowEvent *event); @@ -78,6 +77,7 @@ private slots: void fillDiagram(); void resetView(); void exportDiagram(); + void layoutAxisLabels(); void on_buttonBox_clicked(QAbstractButton *button); void on_actionGoToPacket_triggered(); @@ -123,6 +123,7 @@ private: QPointer rtp_stream_dialog_; // Singleton pattern used bool voipFeaturesEnabled; + void enableVoIPFeatures(); void zoomXAxis(bool in); void panAxes(int x_pixels, int y_pixels); void resetAxes(bool keep_lower = false); diff --git a/ui/qt/tcp_stream_dialog.cpp b/ui/qt/tcp_stream_dialog.cpp index 88f6b75..8d668f6 100644 --- a/ui/qt/tcp_stream_dialog.cpp +++ b/ui/qt/tcp_stream_dialog.cpp @@ -45,6 +45,8 @@ // - ACK & RWIN segment ticks in tcptrace graph // - Add missing elements (retrans, URG, SACK, etc) to tcptrace. It probably makes // sense to subclass QCPGraph for this. +// - Allow switching the tracer between graphs when there are two / selecting +// the other graph, at the very least if base_graph_ is disabled. // The GTK+ version computes a 20 (or 21!) segment moving average. Comment // out the line below to use that. By default we use a 1 second MA. @@ -73,6 +75,7 @@ const QString segment_length_label_ = QObject::tr("Segment Length (B)"); const QString sequence_number_label_ = QObject::tr("Sequence Number (B)"); const QString time_s_label_ = QObject::tr("Time (s)"); const QString window_size_label_ = QObject::tr("Window Size (B)"); +const QString cwnd_label_ = QObject::tr("Unacked (Outstanding) Bytes (B)"); QCPErrorBarsNotSelectable::QCPErrorBarsNotSelectable(QCPAxis *keyAxis, QCPAxis *valueAxis) : QCPErrorBars(keyAxis, valueAxis) @@ -292,7 +295,7 @@ TCPStreamDialog::TCPStreamDialog(QWidget *parent, capture_file *cf, tcp_graph_ty sack2_eb_->setDataPlottable(sack2_graph_); // RWin graph - displays upper extent of RWIN advertised on reverse packets - rwin_graph_ = sp->addGraph(); + rwin_graph_ = sp->addGraph(sp->xAxis, sp->yAxis2); rwin_graph_->setPen(QPen(QBrush(graph_color_3), pen_width)); rwin_graph_->setLineStyle(QCPGraph::lsStepLeft); @@ -1579,9 +1582,18 @@ void TCPStreamDialog::fillWindowScale() } } } + /* base_graph_ is the one that the tracer is on and allows selecting + * segments. XXX - Is the congestion window more interesting to see + * the exact value and select? + */ base_graph_->setData(cwnd_time, cwnd_size); rwin_graph_->setData(rel_time, win_size); - sp->yAxis->setLabel(window_size_label_); + sp->yAxis->setLabel(cwnd_label_); + + sp->yAxis2->setLabel(window_size_label_); + sp->yAxis2->setLabelColor(QColor(graph_color_3)); + sp->yAxis2->setTickLabelColor(QColor(graph_color_3)); + sp->yAxis2->setVisible(true); } QString TCPStreamDialog::streamDescription() diff --git a/ui/qt/utils/data_printer.cpp b/ui/qt/utils/data_printer.cpp index a96e1ed..3c3e910 100644 --- a/ui/qt/utils/data_printer.cpp +++ b/ui/qt/utils/data_printer.cpp @@ -38,13 +38,45 @@ void DataPrinter::toClipboard(DataPrinter::DumpType type, IDataPrintable * print // Beginning quote clipboard_text += QString("\""); for (int i = 0; i < printData.length(); i++) { - /* ASCII printable */ - int ch = printData[i]; - if (ch >= 32 && ch <= 126) { - clipboard_text += QChar(ch); - } - else { - clipboard_text += QString("\\x%1").arg((uint8_t) printData[i], 2, 16, QChar('0')); + // backslash and double quote are printable but + // must be escaped in a C string. + char ch = printData[i]; + switch (ch) { + case '\"': + clipboard_text += QString("\\\""); + break; + case '\\': + clipboard_text += QString("\\\\"); + break; + case '\a': + clipboard_text += QString("\\a"); + break; + case '\b': + clipboard_text += QString("\\b"); + break; + case '\f': + clipboard_text += QString("\\f"); + break; + case '\n': + clipboard_text += QString("\\n"); + break; + case '\r': + clipboard_text += QString("\\r"); + break; + case '\t': + clipboard_text += QString("\\t"); + break; + case '\v': + clipboard_text += QString("\\v"); + break; + default: + // ASCII printable + if (ch >= 32 && ch <= 126) { + clipboard_text += QChar(ch); + } + else { + clipboard_text += QString("\\%1").arg((uint8_t) printData[i], 3, 8, QChar('0')); + } } } // End quote @@ -57,6 +89,8 @@ void DataPrinter::toClipboard(DataPrinter::DumpType type, IDataPrintable * print case DP_PrintableText: for (int i = 0; i < printData.length(); i++) { QChar ch(printData[i]); + // This interprets ch as Latin-1. We might want to use ASCII + // printable only. if (ch.isSpace() || ch.isPrint()) { clipboard_text += ch; } diff --git a/ui/qt/voip_calls_dialog.cpp b/ui/qt/voip_calls_dialog.cpp index b8a54bd..dd5910f 100644 --- a/ui/qt/voip_calls_dialog.cpp +++ b/ui/qt/voip_calls_dialog.cpp @@ -603,7 +603,7 @@ void VoipCallsDialog::showSequence() cur_ga_item = gxx_list_next(cur_ga_item); } - SequenceDialog *sequence_dialog = new SequenceDialog(parent_, cap_file_, sequence_info_); + SequenceDialog *sequence_dialog = new SequenceDialog(parent_, cap_file_, sequence_info_, true); // Bypass this dialog and forward signals to parent connect(sequence_dialog, SIGNAL(rtpStreamsDialogSelectRtpStreams(QVector)), &parent_, SLOT(rtpStreamsDialogSelectRtpStreams(QVector))); connect(sequence_dialog, SIGNAL(rtpStreamsDialogDeselectRtpStreams(QVector)), &parent_, SLOT(rtpStreamsDialogDeselectRtpStreams(QVector))); @@ -612,7 +612,6 @@ void VoipCallsDialog::showSequence() connect(sequence_dialog, SIGNAL(rtpPlayerDialogRemoveRtpStreams(QVector)), &parent_, SLOT(rtpPlayerDialogRemoveRtpStreams(QVector))); sequence_dialog->setAttribute(Qt::WA_DeleteOnClose); - sequence_dialog->enableVoIPFeatures(); sequence_dialog->show(); } diff --git a/ui/qt/wireshark_de.ts b/ui/qt/wireshark_de.ts index 28d3c38..a42e3c3 100644 --- a/ui/qt/wireshark_de.ts +++ b/ui/qt/wireshark_de.ts @@ -8085,6 +8085,10 @@ Um zum Beispiel eine neue Datei zu jeder vollen Stunde zu haben, 1 Stunde angebe Window Size (B) Window Größe (B) + + Unacked (Outstanding) Bytes (B) + + [no capture file] [keine Mitschnittdatei] diff --git a/ui/qt/wireshark_en.ts b/ui/qt/wireshark_en.ts index 2dab6ca..4478363 100644 --- a/ui/qt/wireshark_en.ts +++ b/ui/qt/wireshark_en.ts @@ -8024,6 +8024,10 @@ For example, use 1 hour to have a new file created every hour on the hour.Window Size (B) + + Unacked (Outstanding) Bytes (B) + + [no capture file] diff --git a/ui/qt/wireshark_es.ts b/ui/qt/wireshark_es.ts index 3f5a016..dc08202 100644 --- a/ui/qt/wireshark_es.ts +++ b/ui/qt/wireshark_es.ts @@ -8005,6 +8005,10 @@ Por ejemplo, use 1 hora para tener creado un nuevo archivo cada hora en punto.Window Size (B) + + Unacked (Outstanding) Bytes (B) + + [no capture file] [no hay archivo de captura] diff --git a/ui/qt/wireshark_fr.ts b/ui/qt/wireshark_fr.ts index 29e8c5a..7c63477 100644 --- a/ui/qt/wireshark_fr.ts +++ b/ui/qt/wireshark_fr.ts @@ -8033,6 +8033,10 @@ Pas exemple, inquiquez 1 heure pour avoir un nouveau fichier créé toutes les h Window Size (B) Taille de fenetres (b) + + Unacked (Outstanding) Bytes (B) + + [no capture file] [pas de fichier de capture] diff --git a/ui/qt/wireshark_it.ts b/ui/qt/wireshark_it.ts index 772d32c..18daca0 100644 --- a/ui/qt/wireshark_it.ts +++ b/ui/qt/wireshark_it.ts @@ -8085,6 +8085,10 @@ Ad esempio, usa 1 ora per fare in modo che un nuovo file sia creato ogni ora.Window Size (B) Dimensione della finestra (B) + + Unacked (Outstanding) Bytes (B) + Byte senza ack (eccezionali) (B) + [no capture file] [nessun file di cattura] diff --git a/ui/qt/wireshark_ja_JP.ts b/ui/qt/wireshark_ja_JP.ts index 0d1e1f7..610d74d 100644 --- a/ui/qt/wireshark_ja_JP.ts +++ b/ui/qt/wireshark_ja_JP.ts @@ -8061,6 +8061,10 @@ For example, use 1 hour to have a new file created every hour on the hour.Window Size (B) ウインドウサイズ(バイト) + + Unacked (Outstanding) Bytes (B) + ACKされていない(未処理の)バイト(B) + [no capture file] [キャプチャファイルなし] diff --git a/ui/qt/wireshark_ko.ts b/ui/qt/wireshark_ko.ts index 94c1648..8a2f795 100644 --- a/ui/qt/wireshark_ko.ts +++ b/ui/qt/wireshark_ko.ts @@ -8058,6 +8058,10 @@ For example, use 1 hour to have a new file created every hour on the hour.Window Size (B) 윈도 크기(바이트) + + Unacked (Outstanding) Bytes (B) + + [no capture file] [캡처 파일 없음] diff --git a/ui/qt/wireshark_main_window_slots.cpp b/ui/qt/wireshark_main_window_slots.cpp index 74943ad..a348bd4 100644 --- a/ui/qt/wireshark_main_window_slots.cpp +++ b/ui/qt/wireshark_main_window_slots.cpp @@ -2235,7 +2235,7 @@ void WiresharkMainWindow::editTimeShift() connect(this, SIGNAL(setCaptureFile(capture_file*)), ts_dialog, SLOT(setCaptureFile(capture_file*))); - connect(ts_dialog, SIGNAL(timeShifted()), packet_list_, SLOT(applyTimeShift())); + connect(ts_dialog, &TimeShiftDialog::timeShifted, packet_list_, &PacketList::applyTimeShift, Qt::QueuedConnection); ts_dialog->setWindowModality(Qt::ApplicationModal); ts_dialog->setAttribute(Qt::WA_DeleteOnClose); diff --git a/ui/qt/wireshark_pl.ts b/ui/qt/wireshark_pl.ts index efd144d..65abbd7 100644 --- a/ui/qt/wireshark_pl.ts +++ b/ui/qt/wireshark_pl.ts @@ -1262,7 +1262,7 @@ Show and hide interfaces, add comments, and manage pipes and remote interfaces. - Pokaż lub ukryj interfejsy, dodaj komentarze i zarządzaj interfejsami pipe oraz zdalnymi. + Pokaż lub ukryj interfejsy, dodaj komentarze i zarządzaj potokami oraz zdalnymi interfejsami. Manage Interfaces… @@ -4885,7 +4885,7 @@ For example, use 1 hour to have a new file created every hour on the hour. Pipe - + Potok STDIN @@ -5013,7 +5013,7 @@ For example, use 1 hour to have a new file created every hour on the hour. Local Pipe Path - + Ścieżka lokalnego potoku Comment @@ -6676,19 +6676,19 @@ For example, use 1 hour to have a new file created every hour on the hour. <html><head/><body><p>Add a pipe to capture from or remove an existing pipe from the list.</p></body></html> - <html><head/><body><p>Dodaj lub usuń rurę z listy.</p></body></html> + <html><head/><body><p>Dodaj lub usuń potok z listy.</p></body></html> Pipes - Rury + Potoki <html><head/><body><p>Add a new pipe using default settings.</p></body></html> - <html><head/><body><p>Dodaj nową rurę używając domyślnych ustawień.</p></body></html> + <html><head/><body><p>Dodaj nowy potok używając domyślnych ustawień.</p></body></html> <html><head/><body><p>Remove the selected pipe from the list.</p></body></html> - <html><head/><body><p>Usuń wybraną rurę z listy.</p></body></html> + <html><head/><body><p>Usuń wybrany potok z listy.</p></body></html> Remote Interfaces @@ -6716,7 +6716,7 @@ For example, use 1 hour to have a new file created every hour on the hour. This version of Wireshark does not save pipe settings. - Ta wersja Wiresharka nie obsługuje ustawień rur. + Ta wersja programu Wireshark nie obsługuje ustawień potoków. This version of Wireshark does not save remote settings. @@ -6728,7 +6728,7 @@ For example, use 1 hour to have a new file created every hour on the hour. New Pipe - Nowa rura + Nowy potok @@ -7323,7 +7323,7 @@ For example, use 1 hour to have a new file created every hour on the hour.PathSelectionDelegate Open a pipe - + Otwórz potok @@ -8101,6 +8101,10 @@ For example, use 1 hour to have a new file created every hour on the hour.Window Size (B) Rozmiar okna (B) + + Unacked (Outstanding) Bytes (B) + + [no capture file] [nie załadowano pliku przechytywania] diff --git a/ui/qt/wireshark_ru.ts b/ui/qt/wireshark_ru.ts index 20dc0e3..870d0df 100644 --- a/ui/qt/wireshark_ru.ts +++ b/ui/qt/wireshark_ru.ts @@ -8054,6 +8054,10 @@ For example, use 1 hour to have a new file created every hour on the hour.Window Size (B) Размер окна (Б) + + Unacked (Outstanding) Bytes (B) + + [no capture file] [нет файла захвата] diff --git a/ui/qt/wireshark_sv.ts b/ui/qt/wireshark_sv.ts index abe7fef..d9936d0 100644 --- a/ui/qt/wireshark_sv.ts +++ b/ui/qt/wireshark_sv.ts @@ -8034,6 +8034,10 @@ Till exempel, använd 1 timma för att en ny fil skall skapas varje timma vid he Window Size (B) Fönsterstorlek (B) + + Unacked (Outstanding) Bytes (B) + + [no capture file] [ingen fångstfil] diff --git a/ui/qt/wireshark_tr_TR.ts b/ui/qt/wireshark_tr_TR.ts index 06f0caf..1328942 100644 --- a/ui/qt/wireshark_tr_TR.ts +++ b/ui/qt/wireshark_tr_TR.ts @@ -8014,6 +8014,10 @@ For example, use 1 hour to have a new file created every hour on the hour.Window Size (B) Pencere Boyutu (B) + + Unacked (Outstanding) Bytes (B) + + [no capture file] [yakalama dosyası yok] diff --git a/ui/qt/wireshark_uk.ts b/ui/qt/wireshark_uk.ts index 12517ff..4720152 100644 --- a/ui/qt/wireshark_uk.ts +++ b/ui/qt/wireshark_uk.ts @@ -7995,6 +7995,10 @@ For example, use 1 hour to have a new file created every hour on the hour.Window Size (B) Розмір Вікна (Б) + + Unacked (Outstanding) Bytes (B) + + [no capture file] diff --git a/ui/qt/wireshark_zh_CN.ts b/ui/qt/wireshark_zh_CN.ts index 38dfcbb..13b953b 100644 --- a/ui/qt/wireshark_zh_CN.ts +++ b/ui/qt/wireshark_zh_CN.ts @@ -8009,6 +8009,10 @@ For example, use 1 hour to have a new file created every hour on the hour.Window Size (B) 窗口大小 (B) + + Unacked (Outstanding) Bytes (B) + + [no capture file] [无捕获文件] -- cgit v1.2.3