From da5eba636a1bb4de2a5e09a1ec7e4191fbe77976 Mon Sep 17 00:00:00 2001 From: Gerald Combs Date: Thu, 23 Jul 2015 12:53:45 -0700 Subject: [PATCH] Fix QCocoaMenu errors. In PacketList and ProtoTree, create our own QMenus instead of stealing actions from the main window. This only fixes the errors listed in bug 10890. Add "to do" items for other bugs. Bug: 10890 Change-Id: I1c7ce8e4b863de95b2836e0cdcfb25824fe21edd Reviewed-on: https://code.wireshark.org/review/9760 Petri-Dish: Gerald Combs Tested-by: Petri Dish Buildbot Reviewed-by: Gerald Combs --- ui/qt/packet_list.cpp | 38 +++++++++++++++++--------------------- ui/qt/proto_tree.cpp | 31 +++++++++++++++---------------- 2 files changed, 32 insertions(+), 37 deletions(-) diff --git a/ui/qt/packet_list.cpp b/ui/qt/packet_list.cpp index b012c3e7bc..999b18ec8d 100644 --- a/ui/qt/packet_list.cpp +++ b/ui/qt/packet_list.cpp @@ -74,6 +74,8 @@ #include // To do: +// - Fix "apply as filter" behavior. +// - Add colorize conversation. // - Use a timer to trigger automatic scrolling. // If we ever add the ability to open multiple capture files we might be @@ -240,7 +242,7 @@ PacketList::PacketList(QWidget *parent) : tail_timer_id_(0), rows_inserted_(false) { - QMenu *submenu, *subsubmenu; + QMenu *main_menu_item, *submenu, *subsubmenu; QAction *action; setItemsExpandable(false); @@ -270,18 +272,15 @@ PacketList::PacketList(QWidget *parent) : ctx_menu_.addAction(window()->findChild("actionViewEditResolvedName")); ctx_menu_.addSeparator(); - action = window()->findChild("actionFollow"); - submenu = new QMenu(); - action->setMenu(submenu); - ctx_menu_.addAction(action); + main_menu_item = window()->findChild("menuFollow"); + submenu = new QMenu(main_menu_item->title()); + ctx_menu_.addMenu(submenu); submenu->addAction(window()->findChild("actionAnalyzeFollowTCPStream")); submenu->addAction(window()->findChild("actionAnalyzeFollowUDPStream")); submenu->addAction(window()->findChild("actionAnalyzeFollowSSLStream")); - action = window()->findChild("actionSCTP"); - submenu = new QMenu(); - action->setMenu(submenu); - ctx_menu_.addAction(action); + main_menu_item = window()->findChild("menuSCTP"); + submenu = new QMenu(main_menu_item->title()); ctx_menu_.addMenu(submenu); submenu->addAction(window()->findChild("actionSCTPAnalyseThisAssociation")); submenu->addAction(window()->findChild("actionSCTPShowAllAssociations")); @@ -290,9 +289,8 @@ PacketList::PacketList(QWidget *parent) : ctx_menu_.addSeparator(); action = window()->findChild("actionApply_as_Filter"); - submenu = new QMenu(); - action->setMenu(submenu); - ctx_menu_.addAction(action); + submenu = new QMenu(action->text()); + ctx_menu_.addMenu(submenu); submenu->addAction(window()->findChild("actionAnalyzeAAFSelected")); submenu->addAction(window()->findChild("actionAnalyzeAAFNotSelected")); submenu->addAction(window()->findChild("actionAnalyzeAAFAndSelected")); @@ -301,9 +299,8 @@ PacketList::PacketList(QWidget *parent) : submenu->addAction(window()->findChild("actionAnalyzeAAFOrNotSelected")); action = window()->findChild("actionPrepare_a_Filter"); - submenu = new QMenu(); - action->setMenu(submenu); - ctx_menu_.addAction(action); + submenu = new QMenu(action->text()); + ctx_menu_.addMenu(submenu); submenu->addAction(window()->findChild("actionAnalyzePAFSelected")); submenu->addAction(window()->findChild("actionAnalyzePAFNotSelected")); submenu->addAction(window()->findChild("actionAnalyzePAFAndSelected")); @@ -392,18 +389,17 @@ PacketList::PacketList(QWidget *parent) : ctx_menu_.addSeparator(); action = window()->findChild("actionCopy"); - submenu = new QMenu(); - action->setMenu(submenu); - ctx_menu_.addAction(action); + submenu = new QMenu(action->text()); + ctx_menu_.addMenu(submenu); // " \n" // " \n" submenu->addAction(window()->findChild("actionEditCopyAsFilter")); submenu->addSeparator(); action = window()->findChild("actionBytes"); - subsubmenu = new QMenu(); - action->setMenu(subsubmenu); - submenu->addAction(action); + subsubmenu = new QMenu(action->text()); + submenu->addMenu(subsubmenu); + // " \n" // " \n" // " \n" diff --git a/ui/qt/proto_tree.cpp b/ui/qt/proto_tree.cpp index 0bee28656b..2a9a86ccc7 100644 --- a/ui/qt/proto_tree.cpp +++ b/ui/qt/proto_tree.cpp @@ -35,6 +35,10 @@ #include #include +// To do: +// - Fix "apply as filter" behavior. +// - Add colorize conversation. + /* Fill a single protocol tree item with its string value and set its color. */ static void proto_tree_draw_node(proto_node *node, gpointer data) @@ -149,9 +153,6 @@ ProtoTree::ProtoTree(QWidget *parent) : QTreeWidget(parent), decode_as_(NULL) { - QMenu *submenu, *subsubmenu; - QAction *action; - setAccessibleName(tr("Packet details")); // Leave the uniformRowHeights property as-is (false) since items might // have multiple lines (e.g. packet comments). If this slows things down @@ -163,6 +164,9 @@ ProtoTree::ProtoTree(QWidget *parent) : // Assume we're a child of the main window. // XXX We might want to reimplement setParent() and fill in the context // menu there. + QMenu *submenu, *subsubmenu; + QAction *action; + ctx_menu_.addAction(window()->findChild("actionViewExpandSubtrees")); ctx_menu_.addAction(window()->findChild("actionViewExpandAll")); ctx_menu_.addAction(window()->findChild("actionViewCollapseAll")); @@ -173,10 +177,8 @@ ProtoTree::ProtoTree(QWidget *parent) : ctx_menu_.addSeparator(); action = window()->findChild("actionApply_as_Filter"); - - submenu = new QMenu(); - action->setMenu(submenu); - ctx_menu_.addAction(action); + submenu = new QMenu(action->text()); + ctx_menu_.addMenu(submenu); submenu->addAction(window()->findChild("actionAnalyzeAAFSelected")); submenu->addAction(window()->findChild("actionAnalyzeAAFNotSelected")); submenu->addAction(window()->findChild("actionAnalyzeAAFAndSelected")); @@ -185,9 +187,8 @@ ProtoTree::ProtoTree(QWidget *parent) : submenu->addAction(window()->findChild("actionAnalyzeAAFOrNotSelected")); action = window()->findChild("actionPrepare_a_Filter"); - submenu = new QMenu(); - action->setMenu(submenu); - ctx_menu_.addAction(action); + submenu = new QMenu(action->text()); + ctx_menu_.addMenu(submenu); submenu->addAction(window()->findChild("actionAnalyzePAFSelected")); submenu->addAction(window()->findChild("actionAnalyzePAFNotSelected")); submenu->addAction(window()->findChild("actionAnalyzePAFAndSelected")); @@ -221,9 +222,8 @@ ProtoTree::ProtoTree(QWidget *parent) : ctx_menu_.addSeparator(); action = window()->findChild("actionCopy"); - submenu = new QMenu(); - action->setMenu(submenu); - ctx_menu_.addAction(action); + subsubmenu = new QMenu(action->text()); + submenu->addMenu(subsubmenu); submenu->addAction(window()->findChild("actionCopyAllVisibleItems")); submenu->addAction(window()->findChild("actionCopyAllVisibleSelectedTreeItems")); submenu->addAction(window()->findChild("actionEditCopyDescription")); @@ -233,9 +233,8 @@ ProtoTree::ProtoTree(QWidget *parent) : submenu->addAction(window()->findChild("actionEditCopyAsFilter")); action = window()->findChild("actionBytes"); - subsubmenu = new QMenu(); - action->setMenu(subsubmenu); - submenu->addAction(action); + subsubmenu = new QMenu(action->text()); + submenu->addMenu(subsubmenu); subsubmenu->addSeparator(); // " \n" // " \n"