diff options
author | Gerald Combs <gerald@wireshark.org> | 2020-01-12 11:31:47 -0800 |
---|---|---|
committer | Gerald Combs <gerald@wireshark.org> | 2020-01-13 18:58:28 +0000 |
commit | 48024b102de18305c860aa558229fa08ac2709b2 (patch) | |
tree | 13574c98e4648d57e4e27aeacedb2f47c6d3fb26 /ui | |
parent | 9e135f87482d1aaa8b3cd00acd868d831d017935 (diff) |
Qt: Make sure shortcuts are visible in context menus.
As of Qt 5.10, context menu shortcuts can be hidden:
https://bugreports.qt.io/browse/QTBUG-61181
Add set_action_shortcuts_visible_in_context_menu to qt_ui_utils and call
it for our context menus as needed. For Qt 5.{10,11,12} it calls
QAction::setShortcutVisibleInContextMenu(true).
For Qt 5.13 and later, call
QStyleHints::setShowShortcutsInContextMenus(true) in
WiresharkApplication.
Change-Id: Ie8941951c3a9801b4642f4ce15ac217e37d1300f
Reviewed-on: https://code.wireshark.org/review/35761
Petri-Dish: Gerald Combs <gerald@wireshark.org>
Tested-by: Petri Dish Buildbot
Reviewed-by: Gerald Combs <gerald@wireshark.org>
Diffstat (limited to 'ui')
-rw-r--r-- | ui/qt/iax2_analysis_dialog.cpp | 2 | ||||
-rw-r--r-- | ui/qt/io_graph_dialog.cpp | 1 | ||||
-rw-r--r-- | ui/qt/lte_rlc_graph_dialog.cpp | 1 | ||||
-rw-r--r-- | ui/qt/rtp_analysis_dialog.cpp | 2 | ||||
-rw-r--r-- | ui/qt/rtp_player_dialog.cpp | 1 | ||||
-rw-r--r-- | ui/qt/rtp_stream_dialog.cpp | 2 | ||||
-rw-r--r-- | ui/qt/sequence_dialog.cpp | 1 | ||||
-rw-r--r-- | ui/qt/tcp_stream_dialog.cpp | 1 | ||||
-rw-r--r-- | ui/qt/utils/qt_ui_utils.cpp | 13 | ||||
-rw-r--r-- | ui/qt/utils/qt_ui_utils.h | 8 | ||||
-rw-r--r-- | ui/qt/wireshark_application.cpp | 9 |
11 files changed, 41 insertions, 0 deletions
diff --git a/ui/qt/iax2_analysis_dialog.cpp b/ui/qt/iax2_analysis_dialog.cpp index 64ab80697a..52101f0720 100644 --- a/ui/qt/iax2_analysis_dialog.cpp +++ b/ui/qt/iax2_analysis_dialog.cpp @@ -214,6 +214,8 @@ Iax2AnalysisDialog::Iax2AnalysisDialog(QWidget &parent, CaptureFile &cf) : stream_ctx_menu_.addAction(ui->actionSaveReverseCsv); stream_ctx_menu_.addSeparator(); stream_ctx_menu_.addAction(ui->actionSaveGraph); + set_action_shortcuts_visible_in_context_menu(stream_ctx_menu_.actions()); + ui->forwardTreeWidget->installEventFilter(this); ui->forwardTreeWidget->setContextMenuPolicy(Qt::CustomContextMenu); connect(ui->forwardTreeWidget, SIGNAL(customContextMenuRequested(QPoint)), diff --git a/ui/qt/io_graph_dialog.cpp b/ui/qt/io_graph_dialog.cpp index 08df37fef0..2a03504f78 100644 --- a/ui/qt/io_graph_dialog.cpp +++ b/ui/qt/io_graph_dialog.cpp @@ -385,6 +385,7 @@ IOGraphDialog::IOGraphDialog(QWidget &parent, CaptureFile &cf, QString displayFi ctx_menu_.addAction(ui->actionDragZoom); ctx_menu_.addAction(ui->actionToggleTimeOrigin); ctx_menu_.addAction(ui->actionCrosshairs); + set_action_shortcuts_visible_in_context_menu(ctx_menu_.actions()); iop->xAxis->setLabel(tr("Time (s)")); diff --git a/ui/qt/lte_rlc_graph_dialog.cpp b/ui/qt/lte_rlc_graph_dialog.cpp index a54483fd12..b93bb4e1f6 100644 --- a/ui/qt/lte_rlc_graph_dialog.cpp +++ b/ui/qt/lte_rlc_graph_dialog.cpp @@ -93,6 +93,7 @@ LteRlcGraphDialog::LteRlcGraphDialog(QWidget &parent, CaptureFile &cf, bool chan ctx_menu_->addAction(ui->actionCrosshairs); ctx_menu_->addSeparator(); ctx_menu_->addAction(ui->actionSwitchDirection); + set_action_shortcuts_visible_in_context_menu(ctx_menu_->actions()); // Zero out this struct. memset(&graph_, 0, sizeof(graph_)); diff --git a/ui/qt/rtp_analysis_dialog.cpp b/ui/qt/rtp_analysis_dialog.cpp index f14e7e809e..ad71572dd3 100644 --- a/ui/qt/rtp_analysis_dialog.cpp +++ b/ui/qt/rtp_analysis_dialog.cpp @@ -267,6 +267,8 @@ RtpAnalysisDialog::RtpAnalysisDialog(QWidget &parent, CaptureFile &cf, rtpstream stream_ctx_menu_.addAction(ui->actionSaveReverseCsv); stream_ctx_menu_.addSeparator(); stream_ctx_menu_.addAction(ui->actionSaveGraph); + set_action_shortcuts_visible_in_context_menu(stream_ctx_menu_.actions()); + ui->forwardTreeWidget->installEventFilter(this); ui->forwardTreeWidget->setContextMenuPolicy(Qt::CustomContextMenu); ui->forwardTreeWidget->header()->setSortIndicator(0, Qt::AscendingOrder); diff --git a/ui/qt/rtp_player_dialog.cpp b/ui/qt/rtp_player_dialog.cpp index 18026df063..5fec4cb563 100644 --- a/ui/qt/rtp_player_dialog.cpp +++ b/ui/qt/rtp_player_dialog.cpp @@ -127,6 +127,7 @@ RtpPlayerDialog::RtpPlayerDialog(QWidget &parent, CaptureFile &cf) : ctx_menu_->addAction(ui->actionDragZoom); ctx_menu_->addAction(ui->actionToggleTimeOrigin); // ctx_menu_->addAction(ui->actionCrosshairs); + set_action_shortcuts_visible_in_context_menu(ctx_menu_->actions()); connect(ui->audioPlot, SIGNAL(mouseMove(QMouseEvent*)), this, SLOT(updateHintLabel())); diff --git a/ui/qt/rtp_stream_dialog.cpp b/ui/qt/rtp_stream_dialog.cpp index 82df5debdd..85a5ef408f 100644 --- a/ui/qt/rtp_stream_dialog.cpp +++ b/ui/qt/rtp_stream_dialog.cpp @@ -219,6 +219,8 @@ RtpStreamDialog::RtpStreamDialog(QWidget &parent, CaptureFile &cf) : ctx_menu_.addAction(ui->actionCopyAsCsv); ctx_menu_.addAction(ui->actionCopyAsYaml); ctx_menu_.addAction(ui->actionAnalyze); + set_action_shortcuts_visible_in_context_menu(ctx_menu_.actions()); + ui->streamTreeWidget->setContextMenuPolicy(Qt::CustomContextMenu); ui->streamTreeWidget->header()->setSortIndicator(0, Qt::AscendingOrder); connect(ui->streamTreeWidget, SIGNAL(customContextMenuRequested(QPoint)), diff --git a/ui/qt/sequence_dialog.cpp b/ui/qt/sequence_dialog.cpp index 39c90b5193..73699917d3 100644 --- a/ui/qt/sequence_dialog.cpp +++ b/ui/qt/sequence_dialog.cpp @@ -145,6 +145,7 @@ SequenceDialog::SequenceDialog(QWidget &parent, CaptureFile &cf, SequenceInfo *i ctx_menu_.addAction(ui->actionGoToPacket); ctx_menu_.addAction(ui->actionGoToNextPacket); ctx_menu_.addAction(ui->actionGoToPreviousPacket); + set_action_shortcuts_visible_in_context_menu(ctx_menu_.actions()); ui->addressComboBox->setCurrentIndex(0); diff --git a/ui/qt/tcp_stream_dialog.cpp b/ui/qt/tcp_stream_dialog.cpp index 102c387046..9c761158c8 100644 --- a/ui/qt/tcp_stream_dialog.cpp +++ b/ui/qt/tcp_stream_dialog.cpp @@ -175,6 +175,7 @@ TCPStreamDialog::TCPStreamDialog(QWidget *parent, capture_file *cf, tcp_graph_ty ctx_menu_.addAction(ui->actionStevens); ctx_menu_.addAction(ui->actionTcptrace); ctx_menu_.addAction(ui->actionWindowScaling); + set_action_shortcuts_visible_in_context_menu(ctx_menu_.actions()); memset (&graph_, 0, sizeof(graph_)); graph_.type = graph_type; diff --git a/ui/qt/utils/qt_ui_utils.cpp b/ui/qt/utils/qt_ui_utils.cpp index bb4151b0e6..aa539b50a3 100644 --- a/ui/qt/utils/qt_ui_utils.cpp +++ b/ui/qt/utils/qt_ui_utils.cpp @@ -238,6 +238,19 @@ bool rect_on_screen(const QRect &rect) return false; } +void set_action_shortcuts_visible_in_context_menu(QList<QAction *> actions) +{ +#if QT_VERSION >= QT_VERSION_CHECK(5, 10, 0) && QT_VERSION < QT_VERSION_CHECK(5, 13, 0) + // For QT_VERSION >= 5.13.0 we call styleHints()->setShowShortcutsInContextMenus(true) + // in WiresharkApplication. + // QTBUG-71471 + // QTBUG-61181 + foreach (QAction *action, actions) { + action->setShortcutVisibleInContextMenu(true); + } +#endif +} + /* * Editor modelines * diff --git a/ui/qt/utils/qt_ui_utils.h b/ui/qt/utils/qt_ui_utils.h index 23cc547b3c..4eaedef86b 100644 --- a/ui/qt/utils/qt_ui_utils.h +++ b/ui/qt/utils/qt_ui_utils.h @@ -223,6 +223,14 @@ void desktop_show_in_folder(const QString file_path); */ bool rect_on_screen(const QRect &rect); +/** + * Set the "shortcutVisibleInContextMenu" property to true for + * a list of qactions. + * + * @param actions The actions to make visible. + */ +void set_action_shortcuts_visible_in_context_menu(QList<QAction *> actions); + #endif /* __QT_UI_UTILS__H__ */ // XXX Add a routine to fetch the HWND corresponding to a widget using QPlatformIntegration diff --git a/ui/qt/wireshark_application.cpp b/ui/qt/wireshark_application.cpp index bbf2b9c25d..95f81ee409 100644 --- a/ui/qt/wireshark_application.cpp +++ b/ui/qt/wireshark_application.cpp @@ -93,6 +93,10 @@ #include <QFontDatabase> #include <QMimeDatabase> +#if QT_VERSION >= QT_VERSION_CHECK(5, 13, 0) +#include <QStyleHints> +#endif + #ifdef _MSC_VER #pragma warning(pop) #endif @@ -748,6 +752,11 @@ WiresharkApplication::WiresharkApplication(int &argc, char **argv) : #endif // Q_OS_WIN setAttribute(Qt::AA_UseHighDpiPixmaps); + +#if QT_VERSION >= QT_VERSION_CHECK(5, 13, 0) + styleHints()->setShowShortcutsInContextMenus(true); +#endif + // // XXX - this means we try to check for the existence of all files // in the recent list every 2 seconds; that causes noticeable network |