Qt: Manually connect our "Edit" menu actions.

Use manual, new-style connections for each of our "Edit" menu actions.
KDE's clazy project recommends them over auto-connnections:

https://github.com/KDE/clazy/blob/1.11/docs/checks/README-connect-by-name.md

Use queued connections for the mark, ignore, and other actions that might
run a nested event loop.
Fixes #18344.
This commit is contained in:
Gerald Combs 2022-09-18 16:38:01 -07:00
parent ebf42e3bbc
commit ce44047584
6 changed files with 236 additions and 281 deletions

View File

@ -598,6 +598,8 @@ main_ui_->goToLineEdit->setValidator(goToLineQiv);
connect(mainApp, SIGNAL(zoomMonospaceFont(QFont)),
proto_tree_, SLOT(setMonospaceFont(QFont)));
connectEditMenuActions();
connect(main_ui_->actionGoNextPacket, SIGNAL(triggered()),
packet_list_, SLOT(goNextPacket()));
connect(main_ui_->actionGoPreviousPacket, SIGNAL(triggered()),

View File

@ -427,34 +427,18 @@ private slots:
void on_actionCopyListAsText_triggered();
void on_actionCopyListAsCSV_triggered();
void on_actionCopyListAsYAML_triggered();
void on_actionEditCopyDescription_triggered();
void on_actionEditCopyFieldName_triggered();
void on_actionEditCopyValue_triggered();
void on_actionEditCopyAsFilter_triggered();
void on_actionEditFindPacket_triggered();
void on_actionEditFindNext_triggered();
void on_actionEditFindPrevious_triggered();
void on_actionEditMarkPacket_triggered();
void on_actionEditMarkAllDisplayed_triggered();
void on_actionEditUnmarkAllDisplayed_triggered();
void on_actionEditNextMark_triggered();
void on_actionEditPreviousMark_triggered();
void on_actionEditIgnorePacket_triggered();
void on_actionEditIgnoreAllDisplayed_triggered();
void on_actionEditUnignoreAllDisplayed_triggered();
void on_actionEditSetTimeReference_triggered();
void on_actionEditUnsetAllTimeReferences_triggered();
void on_actionEditNextTimeReference_triggered();
void on_actionEditPreviousTimeReference_triggered();
void on_actionEditTimeShift_triggered();
void connectEditMenuActions();
void findPacket();
void editTimeShift();
void editConfigurationProfiles();
void editTimeShiftFinished(int);
void addPacketCommentFinished(PacketCommentDialog* pc_dialog, int result);
void editPacketCommentFinished(PacketCommentDialog* pc_dialog, int result, guint nComment);
void on_actionDeleteAllPacketComments_triggered();
void deleteAllPacketCommentsFinished(int result);
void on_actionEditConfigurationProfiles_triggered();
void showPreferencesDialog(QString module_name);
void on_actionEditPreferences_triggered();
void showHideMainWidgets(QAction *action);
void setTimestampFormat(QAction *action);

View File

@ -1944,27 +1944,118 @@ void LograyMainWindow::on_actionCopyAllVisibleSelectedTreeItems_triggered()
actionEditCopyTriggered(CopyAllVisibleSelectedTreeItems);
}
void LograyMainWindow::on_actionEditCopyDescription_triggered()
void LograyMainWindow::connectEditMenuActions()
{
actionEditCopyTriggered(CopySelectedDescription);
connect(main_ui_->actionEditCopyDescription, &QAction::triggered, this,
[this]() { actionEditCopyTriggered(CopySelectedDescription); });
connect(main_ui_->actionEditCopyFieldName, &QAction::triggered, this,
[this]() { actionEditCopyTriggered(CopySelectedFieldName); });
connect(main_ui_->actionEditCopyValue, &QAction::triggered, this,
[this]() { actionEditCopyTriggered(CopySelectedValue); });
connect(main_ui_->actionEditCopyAsFilter, &QAction::triggered, this,
[this]() { matchFieldFilter(FilterAction::ActionCopy, FilterAction::ActionTypePlain); });
connect(main_ui_->actionEditFindPacket, &QAction::triggered, this,
[this]() { findPacket(); });
connect(main_ui_->actionEditFindNext, &QAction::triggered, this,
[this]() { main_ui_->searchFrame->findNext(); });
connect(main_ui_->actionEditFindPrevious, &QAction::triggered, this,
[this]() { main_ui_->searchFrame->findPrevious(); });
// The items below are used in the packet list and detail context menus.
// Use QueuedConnections so that the context menus aren't destroyed
// prematurely.
connect(main_ui_->actionEditMarkPacket, &QAction::triggered, this, [this]() {
freeze();
packet_list_->markFrame();
thaw();
setMenusForSelectedPacket();
}, Qt::QueuedConnection);
connect(main_ui_->actionEditMarkAllDisplayed, &QAction::triggered, this, [this]() {
freeze();
packet_list_->markAllDisplayedFrames(true);
thaw();
setMenusForSelectedPacket();
}, Qt::QueuedConnection);
connect(main_ui_->actionEditUnmarkAllDisplayed, &QAction::triggered, this, [this]() {
freeze();
packet_list_->markAllDisplayedFrames(false);
thaw();
setMenusForSelectedPacket();
}, Qt::QueuedConnection);
connect(main_ui_->actionEditNextMark, &QAction::triggered, this, [this]() {
if (capture_file_.capFile()) {
cf_find_packet_marked(capture_file_.capFile(), SD_FORWARD);
}
}, Qt::QueuedConnection);
connect(main_ui_->actionEditPreviousMark, &QAction::triggered, this, [this]() {
if (capture_file_.capFile()) {
cf_find_packet_marked(capture_file_.capFile(), SD_BACKWARD);
}
}, Qt::QueuedConnection);
connect(main_ui_->actionEditIgnorePacket, &QAction::triggered, this, [this]() {
freeze();
packet_list_->ignoreFrame();
thaw();
setMenusForSelectedPacket();
}, Qt::QueuedConnection);
connect(main_ui_->actionEditIgnoreAllDisplayed, &QAction::triggered, this, [this]() {
freeze();
packet_list_->ignoreAllDisplayedFrames(true);
thaw();
setMenusForSelectedPacket();
}, Qt::QueuedConnection);
connect(main_ui_->actionEditUnignoreAllDisplayed, &QAction::triggered, this, [this]() {
freeze();
packet_list_->ignoreAllDisplayedFrames(false);
thaw();
setMenusForSelectedPacket();
}, Qt::QueuedConnection);
connect(main_ui_->actionEditSetTimeReference, &QAction::triggered, this, [this]() {
packet_list_->setTimeReference();
setMenusForSelectedPacket();
}, Qt::QueuedConnection);
connect(main_ui_->actionEditUnsetAllTimeReferences, &QAction::triggered, this, [this]() {
packet_list_->unsetAllTimeReferences();
setMenusForSelectedPacket();
}, Qt::QueuedConnection);
connect(main_ui_->actionEditNextTimeReference, &QAction::triggered, this, [this]() {
if (!capture_file_.capFile()) return;
cf_find_packet_time_reference(capture_file_.capFile(), SD_FORWARD);
}, Qt::QueuedConnection);
connect(main_ui_->actionEditPreviousTimeReference, &QAction::triggered, this, [this]() {
if (!capture_file_.capFile()) return;
cf_find_packet_time_reference(capture_file_.capFile(), SD_BACKWARD);
}, Qt::QueuedConnection);
connect(main_ui_->actionEditTimeShift, &QAction::triggered, this,
[this]() { editTimeShift(); }, Qt::QueuedConnection);
connect(main_ui_->actionEditConfigurationProfiles, &QAction::triggered, this,
[this]() { editConfigurationProfiles(); }, Qt::QueuedConnection);
connect(main_ui_->actionEditPreferences, &QAction::triggered, this,
[this]() { showPreferencesDialog(PrefsModel::typeToString(PrefsModel::Appearance)); }, Qt::QueuedConnection);
}
void LograyMainWindow::on_actionEditCopyFieldName_triggered()
{
actionEditCopyTriggered(CopySelectedFieldName);
}
void LograyMainWindow::on_actionEditCopyValue_triggered()
{
actionEditCopyTriggered(CopySelectedValue);
}
void LograyMainWindow::on_actionEditCopyAsFilter_triggered()
{
matchFieldFilter(FilterAction::ActionCopy, FilterAction::ActionTypePlain);
}
void LograyMainWindow::on_actionEditFindPacket_triggered()
void LograyMainWindow::findPacket()
{
if (! packet_list_->model() || packet_list_->model()->rowCount() < 1) {
return;
@ -1979,101 +2070,7 @@ void LograyMainWindow::on_actionEditFindPacket_triggered()
main_ui_->searchFrame->setFocus();
}
void LograyMainWindow::on_actionEditFindNext_triggered()
{
main_ui_->searchFrame->findNext();
}
void LograyMainWindow::on_actionEditFindPrevious_triggered()
{
main_ui_->searchFrame->findPrevious();
}
void LograyMainWindow::on_actionEditMarkPacket_triggered()
{
freeze();
packet_list_->markFrame();
thaw();
setMenusForSelectedPacket();
}
void LograyMainWindow::on_actionEditMarkAllDisplayed_triggered()
{
freeze();
packet_list_->markAllDisplayedFrames(true);
thaw();
setMenusForSelectedPacket();
}
void LograyMainWindow::on_actionEditUnmarkAllDisplayed_triggered()
{
freeze();
packet_list_->markAllDisplayedFrames(false);
thaw();
setMenusForSelectedPacket();
}
void LograyMainWindow::on_actionEditNextMark_triggered()
{
if (capture_file_.capFile())
cf_find_packet_marked(capture_file_.capFile(), SD_FORWARD);
}
void LograyMainWindow::on_actionEditPreviousMark_triggered()
{
if (capture_file_.capFile())
cf_find_packet_marked(capture_file_.capFile(), SD_BACKWARD);
}
void LograyMainWindow::on_actionEditIgnorePacket_triggered()
{
freeze();
packet_list_->ignoreFrame();
thaw();
setMenusForSelectedPacket();
}
void LograyMainWindow::on_actionEditIgnoreAllDisplayed_triggered()
{
freeze();
packet_list_->ignoreAllDisplayedFrames(true);
thaw();
setMenusForSelectedPacket();
}
void LograyMainWindow::on_actionEditUnignoreAllDisplayed_triggered()
{
freeze();
packet_list_->ignoreAllDisplayedFrames(false);
thaw();
setMenusForSelectedPacket();
}
void LograyMainWindow::on_actionEditSetTimeReference_triggered()
{
packet_list_->setTimeReference();
setMenusForSelectedPacket();
}
void LograyMainWindow::on_actionEditUnsetAllTimeReferences_triggered()
{
packet_list_->unsetAllTimeReferences();
setMenusForSelectedPacket();
}
void LograyMainWindow::on_actionEditNextTimeReference_triggered()
{
if (!capture_file_.capFile()) return;
cf_find_packet_time_reference(capture_file_.capFile(), SD_FORWARD);
}
void LograyMainWindow::on_actionEditPreviousTimeReference_triggered()
{
if (!capture_file_.capFile()) return;
cf_find_packet_time_reference(capture_file_.capFile(), SD_BACKWARD);
}
void LograyMainWindow::on_actionEditTimeShift_triggered()
void LograyMainWindow::editTimeShift()
{
TimeShiftDialog *ts_dialog = new TimeShiftDialog(this, capture_file_.capFile());
connect(ts_dialog, SIGNAL(finished(int)), this, SLOT(editTimeShiftFinished(int)));
@ -2183,7 +2180,7 @@ void LograyMainWindow::deleteAllPacketCommentsFinished(int result)
}
}
void LograyMainWindow::on_actionEditConfigurationProfiles_triggered()
void LograyMainWindow::editConfigurationProfiles()
{
ProfileDialog *cp_dialog = new ProfileDialog();
cp_dialog->setWindowModality(Qt::ApplicationModal);
@ -2203,11 +2200,6 @@ void LograyMainWindow::showPreferencesDialog(QString module_name)
pref_dialog->show();
}
void LograyMainWindow::on_actionEditPreferences_triggered()
{
showPreferencesDialog(PrefsModel::typeToString(PrefsModel::Appearance));
}
// View Menu
void LograyMainWindow::showHideMainWidgets(QAction *action)

View File

@ -626,6 +626,8 @@ main_ui_->goToLineEdit->setValidator(goToLineQiv);
connect(mainApp, SIGNAL(zoomMonospaceFont(QFont)),
proto_tree_, SLOT(setMonospaceFont(QFont)));
connectEditMenuActions();
connect(main_ui_->actionAnalyzeFollowTCPStream, &QAction::triggered, this,
[this]() { this->openFollowStreamDialogForType(FOLLOW_TCP); },
Qt::QueuedConnection);

View File

@ -452,34 +452,18 @@ private slots:
void on_actionCopyListAsText_triggered();
void on_actionCopyListAsCSV_triggered();
void on_actionCopyListAsYAML_triggered();
void on_actionEditCopyDescription_triggered();
void on_actionEditCopyFieldName_triggered();
void on_actionEditCopyValue_triggered();
void on_actionEditCopyAsFilter_triggered();
void on_actionEditFindPacket_triggered();
void on_actionEditFindNext_triggered();
void on_actionEditFindPrevious_triggered();
void on_actionEditMarkPacket_triggered();
void on_actionEditMarkAllDisplayed_triggered();
void on_actionEditUnmarkAllDisplayed_triggered();
void on_actionEditNextMark_triggered();
void on_actionEditPreviousMark_triggered();
void on_actionEditIgnorePacket_triggered();
void on_actionEditIgnoreAllDisplayed_triggered();
void on_actionEditUnignoreAllDisplayed_triggered();
void on_actionEditSetTimeReference_triggered();
void on_actionEditUnsetAllTimeReferences_triggered();
void on_actionEditNextTimeReference_triggered();
void on_actionEditPreviousTimeReference_triggered();
void on_actionEditTimeShift_triggered();
void connectEditMenuActions();
void findPacket();
void editTimeShift();
void editConfigurationProfiles();
void editTimeShiftFinished(int);
void addPacketCommentFinished(PacketCommentDialog* pc_dialog, int result);
void editPacketCommentFinished(PacketCommentDialog* pc_dialog, int result, guint nComment);
void on_actionDeleteAllPacketComments_triggered();
void deleteAllPacketCommentsFinished(int result);
void on_actionEditConfigurationProfiles_triggered();
void showPreferencesDialog(QString module_name);
void on_actionEditPreferences_triggered();
void showHideMainWidgets(QAction *action);
void setTimestampFormat(QAction *action);

View File

@ -2110,27 +2110,117 @@ void WiresharkMainWindow::on_actionCopyAllVisibleSelectedTreeItems_triggered()
actionEditCopyTriggered(CopyAllVisibleSelectedTreeItems);
}
void WiresharkMainWindow::on_actionEditCopyDescription_triggered()
void WiresharkMainWindow::connectEditMenuActions()
{
actionEditCopyTriggered(CopySelectedDescription);
connect(main_ui_->actionEditCopyDescription, &QAction::triggered, this,
[this]() { actionEditCopyTriggered(CopySelectedDescription); });
connect(main_ui_->actionEditCopyFieldName, &QAction::triggered, this,
[this]() { actionEditCopyTriggered(CopySelectedFieldName); });
connect(main_ui_->actionEditCopyValue, &QAction::triggered, this,
[this]() { actionEditCopyTriggered(CopySelectedValue); });
connect(main_ui_->actionEditCopyAsFilter, &QAction::triggered, this,
[this]() { matchFieldFilter(FilterAction::ActionCopy, FilterAction::ActionTypePlain); });
connect(main_ui_->actionEditFindPacket, &QAction::triggered, this,
[this]() { findPacket(); });
connect(main_ui_->actionEditFindNext, &QAction::triggered, this,
[this]() { main_ui_->searchFrame->findNext(); });
connect(main_ui_->actionEditFindPrevious, &QAction::triggered, this,
[this]() { main_ui_->searchFrame->findPrevious(); });
// The items below are used in the packet list and detail context menus.
// Use QueuedConnections so that the context menus aren't destroyed
// prematurely.
connect(main_ui_->actionEditMarkPacket, &QAction::triggered, this, [this]() {
freeze();
packet_list_->markFrame();
thaw();
setMenusForSelectedPacket();
}, Qt::QueuedConnection);
connect(main_ui_->actionEditMarkAllDisplayed, &QAction::triggered, this, [this]() {
freeze();
packet_list_->markAllDisplayedFrames(true);
thaw();
setMenusForSelectedPacket();
}, Qt::QueuedConnection);
connect(main_ui_->actionEditUnmarkAllDisplayed, &QAction::triggered, this, [this]() {
freeze();
packet_list_->markAllDisplayedFrames(false);
thaw();
setMenusForSelectedPacket();
}, Qt::QueuedConnection);
connect(main_ui_->actionEditNextMark, &QAction::triggered, this, [this]() {
if (capture_file_.capFile()) {
cf_find_packet_marked(capture_file_.capFile(), SD_FORWARD);
}
}, Qt::QueuedConnection);
connect(main_ui_->actionEditPreviousMark, &QAction::triggered, this, [this]() {
if (capture_file_.capFile()) {
cf_find_packet_marked(capture_file_.capFile(), SD_BACKWARD);
}
}, Qt::QueuedConnection);
connect(main_ui_->actionEditIgnorePacket, &QAction::triggered, this, [this]() {
freeze();
packet_list_->ignoreFrame();
thaw();
setMenusForSelectedPacket();
}, Qt::QueuedConnection);
connect(main_ui_->actionEditIgnoreAllDisplayed, &QAction::triggered, this, [this]() {
freeze();
packet_list_->ignoreAllDisplayedFrames(true);
thaw();
setMenusForSelectedPacket();
}, Qt::QueuedConnection);
connect(main_ui_->actionEditUnignoreAllDisplayed, &QAction::triggered, this, [this]() {
freeze();
packet_list_->ignoreAllDisplayedFrames(false);
thaw();
setMenusForSelectedPacket();
}, Qt::QueuedConnection);
connect(main_ui_->actionEditSetTimeReference, &QAction::triggered, this, [this]() {
packet_list_->setTimeReference();
setMenusForSelectedPacket();
}, Qt::QueuedConnection);
connect(main_ui_->actionEditUnsetAllTimeReferences, &QAction::triggered, this, [this]() {
packet_list_->unsetAllTimeReferences();
setMenusForSelectedPacket();
}, Qt::QueuedConnection);
connect(main_ui_->actionEditNextTimeReference, &QAction::triggered, this, [this]() {
if (!capture_file_.capFile()) return;
cf_find_packet_time_reference(capture_file_.capFile(), SD_FORWARD);
}, Qt::QueuedConnection);
connect(main_ui_->actionEditPreviousTimeReference, &QAction::triggered, this, [this]() {
if (!capture_file_.capFile()) return;
cf_find_packet_time_reference(capture_file_.capFile(), SD_BACKWARD);
}, Qt::QueuedConnection);
connect(main_ui_->actionEditTimeShift, &QAction::triggered, this,
[this]() { editTimeShift(); }, Qt::QueuedConnection);
connect(main_ui_->actionEditConfigurationProfiles, &QAction::triggered, this,
[this]() { editConfigurationProfiles(); }, Qt::QueuedConnection);
connect(main_ui_->actionEditPreferences, &QAction::triggered, this,
[this]() { showPreferencesDialog(PrefsModel::typeToString(PrefsModel::Appearance)); }, Qt::QueuedConnection);
}
void WiresharkMainWindow::on_actionEditCopyFieldName_triggered()
{
actionEditCopyTriggered(CopySelectedFieldName);
}
void WiresharkMainWindow::on_actionEditCopyValue_triggered()
{
actionEditCopyTriggered(CopySelectedValue);
}
void WiresharkMainWindow::on_actionEditCopyAsFilter_triggered()
{
matchFieldFilter(FilterAction::ActionCopy, FilterAction::ActionTypePlain);
}
void WiresharkMainWindow::on_actionEditFindPacket_triggered()
void WiresharkMainWindow::findPacket()
{
if (! packet_list_->model() || packet_list_->model()->rowCount() < 1) {
return;
@ -2145,101 +2235,7 @@ void WiresharkMainWindow::on_actionEditFindPacket_triggered()
main_ui_->searchFrame->setFocus();
}
void WiresharkMainWindow::on_actionEditFindNext_triggered()
{
main_ui_->searchFrame->findNext();
}
void WiresharkMainWindow::on_actionEditFindPrevious_triggered()
{
main_ui_->searchFrame->findPrevious();
}
void WiresharkMainWindow::on_actionEditMarkPacket_triggered()
{
freeze();
packet_list_->markFrame();
thaw();
setMenusForSelectedPacket();
}
void WiresharkMainWindow::on_actionEditMarkAllDisplayed_triggered()
{
freeze();
packet_list_->markAllDisplayedFrames(true);
thaw();
setMenusForSelectedPacket();
}
void WiresharkMainWindow::on_actionEditUnmarkAllDisplayed_triggered()
{
freeze();
packet_list_->markAllDisplayedFrames(false);
thaw();
setMenusForSelectedPacket();
}
void WiresharkMainWindow::on_actionEditNextMark_triggered()
{
if (capture_file_.capFile())
cf_find_packet_marked(capture_file_.capFile(), SD_FORWARD);
}
void WiresharkMainWindow::on_actionEditPreviousMark_triggered()
{
if (capture_file_.capFile())
cf_find_packet_marked(capture_file_.capFile(), SD_BACKWARD);
}
void WiresharkMainWindow::on_actionEditIgnorePacket_triggered()
{
freeze();
packet_list_->ignoreFrame();
thaw();
setMenusForSelectedPacket();
}
void WiresharkMainWindow::on_actionEditIgnoreAllDisplayed_triggered()
{
freeze();
packet_list_->ignoreAllDisplayedFrames(true);
thaw();
setMenusForSelectedPacket();
}
void WiresharkMainWindow::on_actionEditUnignoreAllDisplayed_triggered()
{
freeze();
packet_list_->ignoreAllDisplayedFrames(false);
thaw();
setMenusForSelectedPacket();
}
void WiresharkMainWindow::on_actionEditSetTimeReference_triggered()
{
packet_list_->setTimeReference();
setMenusForSelectedPacket();
}
void WiresharkMainWindow::on_actionEditUnsetAllTimeReferences_triggered()
{
packet_list_->unsetAllTimeReferences();
setMenusForSelectedPacket();
}
void WiresharkMainWindow::on_actionEditNextTimeReference_triggered()
{
if (!capture_file_.capFile()) return;
cf_find_packet_time_reference(capture_file_.capFile(), SD_FORWARD);
}
void WiresharkMainWindow::on_actionEditPreviousTimeReference_triggered()
{
if (!capture_file_.capFile()) return;
cf_find_packet_time_reference(capture_file_.capFile(), SD_BACKWARD);
}
void WiresharkMainWindow::on_actionEditTimeShift_triggered()
void WiresharkMainWindow::editTimeShift()
{
TimeShiftDialog *ts_dialog = new TimeShiftDialog(this, capture_file_.capFile());
connect(ts_dialog, SIGNAL(finished(int)), this, SLOT(editTimeShiftFinished(int)));
@ -2349,7 +2345,7 @@ void WiresharkMainWindow::deleteAllPacketCommentsFinished(int result)
}
}
void WiresharkMainWindow::on_actionEditConfigurationProfiles_triggered()
void WiresharkMainWindow::editConfigurationProfiles()
{
ProfileDialog *cp_dialog = new ProfileDialog();
cp_dialog->setWindowModality(Qt::ApplicationModal);
@ -2369,11 +2365,6 @@ void WiresharkMainWindow::showPreferencesDialog(QString module_name)
pref_dialog->show();
}
void WiresharkMainWindow::on_actionEditPreferences_triggered()
{
showPreferencesDialog(PrefsModel::typeToString(PrefsModel::Appearance));
}
// View Menu
void WiresharkMainWindow::showHideMainWidgets(QAction *action)