aboutsummaryrefslogtreecommitdiffstats
path: root/ui
diff options
context:
space:
mode:
authorGerald Combs <gerald@wireshark.org>2015-05-15 13:36:04 -0700
committerGerald Combs <gerald@wireshark.org>2015-05-15 21:48:03 +0000
commita04a894731e6a1bd728484367c597f0bbd437514 (patch)
treece860c2ce9c33114ad5298f3371aa4287c1bdfdd /ui
parenta1eb0aaeb3f8f5448fcd2678a1fc707fc15a1ca6 (diff)
Qt: Stop tapping when the I/O Graph dialog closes.
Add a setCaptureStopFlag function to ProgressBar. Add a stopTapping function and setCaptureStopFlag signal to CaptureFile. Use the new plubming to stop tapping when the IO Graph dialog closes. Bug: 10116 Change-Id: Ic46814eed18933f511d9d1ff37e2e7918741f353 Reviewed-on: https://code.wireshark.org/review/8480 Petri-Dish: Gerald Combs <gerald@wireshark.org> Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org> Reviewed-by: Gerald Combs <gerald@wireshark.org>
Diffstat (limited to 'ui')
-rw-r--r--ui/qt/capture_file.cpp7
-rw-r--r--ui/qt/capture_file.h7
-rw-r--r--ui/qt/io_graph_dialog.cpp5
-rw-r--r--ui/qt/main_window.cpp3
-rw-r--r--ui/qt/main_window.h1
-rw-r--r--ui/qt/main_window_slots.cpp9
-rw-r--r--ui/qt/progress_bar.cpp5
-rw-r--r--ui/qt/progress_bar.h1
8 files changed, 37 insertions, 1 deletions
diff --git a/ui/qt/capture_file.cpp b/ui/qt/capture_file.cpp
index 524e7145d3..8b2aacb20d 100644
--- a/ui/qt/capture_file.cpp
+++ b/ui/qt/capture_file.cpp
@@ -41,6 +41,8 @@ capture_file cfile;
// - Add getters and (if needed) setters:
// - Full filename
// - Capture state (stopped, prepared, running).
+// - Call common_create_progress_dlg. This would let us manage the stop
+// flag here as well as emit progress signals.
QString CaptureFile::no_capture_file_ = QObject::tr("[no capture file]");
@@ -83,6 +85,11 @@ void CaptureFile::retapPackets()
}
}
+void CaptureFile::stopTapping()
+{
+ emit setCaptureStopFlag(true);
+}
+
capture_file *CaptureFile::globalCapFile()
{
return &cfile;
diff --git a/ui/qt/capture_file.h b/ui/qt/capture_file.h
index 0bf87b5bb0..ea38d102c3 100644
--- a/ui/qt/capture_file.h
+++ b/ui/qt/capture_file.h
@@ -65,6 +65,11 @@ public:
*/
void retapPackets();
+ /** Cancel any tapping that might be in progress.
+ */
+ void stopTapping();
+
+
// XXX This shouldn't be needed.
static capture_file *globalCapFile();
@@ -87,6 +92,8 @@ signals:
void captureCaptureStopping(capture_session *cap_session);
void captureCaptureFailed(capture_session *cap_session);
+ void setCaptureStopFlag(bool);
+
public slots:
private:
diff --git a/ui/qt/io_graph_dialog.cpp b/ui/qt/io_graph_dialog.cpp
index 06096ec840..fb7c65a16b 100644
--- a/ui/qt/io_graph_dialog.cpp
+++ b/ui/qt/io_graph_dialog.cpp
@@ -314,11 +314,13 @@ IOGraphDialog::IOGraphDialog(QWidget &parent, CaptureFile &cf) :
IOGraphDialog::~IOGraphDialog()
{
+ cap_file_.stopTapping();
for (int i = 0; i < ui->graphTreeWidget->topLevelItemCount(); i++) {
IOGraph *iog = qvariant_cast<IOGraph *>(ui->graphTreeWidget->topLevelItem(i)->data(name_col_, Qt::UserRole));
delete iog;
}
delete ui;
+ ui = NULL;
}
void IOGraphDialog::addGraph(bool checked, QString name, QString dfilter, int color_idx, IOGraph::PlotStyles style, io_graph_item_unit_t value_units, QString yfield, int moving_average)
@@ -953,7 +955,8 @@ void IOGraphDialog::updateStatistics()
if (need_retap_ && !file_closed_) {
need_retap_ = false;
cap_file_.retapPackets();
- ui->ioPlot->setFocus();
+ // The user might have closed the window while tapping, which means
+ // we might no longer exist.
} else {
if (need_recalc_ && !file_closed_) {
need_recalc_ = false;
diff --git a/ui/qt/main_window.cpp b/ui/qt/main_window.cpp
index 9f32f410bb..3d4702f67a 100644
--- a/ui/qt/main_window.cpp
+++ b/ui/qt/main_window.cpp
@@ -321,6 +321,9 @@ MainWindow::MainWindow(QWidget *parent) :
connect(&capture_file_, SIGNAL(captureFileClosed()),
this, SLOT(captureFileClosed()));
+ connect(&capture_file_, SIGNAL(setCaptureStopFlag(bool)),
+ this, SLOT(setCaptureStopFlag(bool)));
+
connect(&capture_file_, SIGNAL(captureFileReadStarted()),
wsApp, SLOT(captureFileReadStarted()));
connect(&capture_file_, SIGNAL(captureFileReadFinished()),
diff --git a/ui/qt/main_window.h b/ui/qt/main_window.h
index 1d379079ce..eab44a4e57 100644
--- a/ui/qt/main_window.h
+++ b/ui/qt/main_window.h
@@ -193,6 +193,7 @@ public slots:
// in main_window_slots.cpp
void openCaptureFile(QString& cf_path = *new QString(), QString& display_filter = *new QString(), unsigned int type = WTAP_TYPE_AUTO);
void filterPackets(QString& new_filter = *new QString(), bool force = false);
+ void setCaptureStopFlag(bool stop_flag = true);
void updateForUnsavedChanges();
void layoutPanes();
void applyRecentPaneGeometry();
diff --git a/ui/qt/main_window_slots.cpp b/ui/qt/main_window_slots.cpp
index 354f0b8dce..22a94563ee 100644
--- a/ui/qt/main_window_slots.cpp
+++ b/ui/qt/main_window_slots.cpp
@@ -255,6 +255,15 @@ void MainWindow::filterPackets(QString& new_filter, bool force)
}
}
+// XXX We should probably call common_create_progress_dlg in CaptureFile and
+// have it handle emitting progress signals and the stop flag.
+void MainWindow::setCaptureStopFlag(bool stop_flag)
+{
+ ProgressBar *progress_bar = main_ui_->statusBar->findChild<ProgressBar *>();
+
+ if (progress_bar) progress_bar->setStopFlag(stop_flag);
+}
+
// A new layout should be applied when it differs from the old layout AND
// at the following times:
// - At startup
diff --git a/ui/qt/progress_bar.cpp b/ui/qt/progress_bar.cpp
index 7c36c1977e..b0c237ab54 100644
--- a/ui/qt/progress_bar.cpp
+++ b/ui/qt/progress_bar.cpp
@@ -184,6 +184,11 @@ progdlg_t * ProgressBar::show(bool animate, bool terminate_is_stop, gboolean *st
return &progress_dialog_;
}
+void ProgressBar::setStopFlag(bool stop_flag)
+{
+ if (stop_flag_) *stop_flag_ = stop_flag;
+}
+
#ifdef QWINTASKBARPROGRESS_H
void ProgressBar::hide()
{
diff --git a/ui/qt/progress_bar.h b/ui/qt/progress_bar.h
index aed68bd904..2f83c39718 100644
--- a/ui/qt/progress_bar.h
+++ b/ui/qt/progress_bar.h
@@ -51,6 +51,7 @@ public:
#ifdef QWINTASKBARPROGRESS_H
void hide();
#endif
+ void setStopFlag(bool stop_flag);
private:
progdlg_t progress_dialog_;