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 <gerald@wireshark.org>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Gerald Combs <gerald@wireshark.org>
This commit is contained in:
Gerald Combs 2015-07-23 12:53:45 -07:00
parent dc6d376f67
commit da5eba636a
2 changed files with 32 additions and 37 deletions

View File

@ -74,6 +74,8 @@
#include <QTreeWidget>
// 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<QAction *>("actionViewEditResolvedName"));
ctx_menu_.addSeparator();
action = window()->findChild<QAction *>("actionFollow");
submenu = new QMenu();
action->setMenu(submenu);
ctx_menu_.addAction(action);
main_menu_item = window()->findChild<QMenu *>("menuFollow");
submenu = new QMenu(main_menu_item->title());
ctx_menu_.addMenu(submenu);
submenu->addAction(window()->findChild<QAction *>("actionAnalyzeFollowTCPStream"));
submenu->addAction(window()->findChild<QAction *>("actionAnalyzeFollowUDPStream"));
submenu->addAction(window()->findChild<QAction *>("actionAnalyzeFollowSSLStream"));
action = window()->findChild<QAction *>("actionSCTP");
submenu = new QMenu();
action->setMenu(submenu);
ctx_menu_.addAction(action);
main_menu_item = window()->findChild<QMenu *>("menuSCTP");
submenu = new QMenu(main_menu_item->title());
ctx_menu_.addMenu(submenu);
submenu->addAction(window()->findChild<QAction *>("actionSCTPAnalyseThisAssociation"));
submenu->addAction(window()->findChild<QAction *>("actionSCTPShowAllAssociations"));
@ -290,9 +289,8 @@ PacketList::PacketList(QWidget *parent) :
ctx_menu_.addSeparator();
action = window()->findChild<QAction *>("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<QAction *>("actionAnalyzeAAFSelected"));
submenu->addAction(window()->findChild<QAction *>("actionAnalyzeAAFNotSelected"));
submenu->addAction(window()->findChild<QAction *>("actionAnalyzeAAFAndSelected"));
@ -301,9 +299,8 @@ PacketList::PacketList(QWidget *parent) :
submenu->addAction(window()->findChild<QAction *>("actionAnalyzeAAFOrNotSelected"));
action = window()->findChild<QAction *>("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<QAction *>("actionAnalyzePAFSelected"));
submenu->addAction(window()->findChild<QAction *>("actionAnalyzePAFNotSelected"));
submenu->addAction(window()->findChild<QAction *>("actionAnalyzePAFAndSelected"));
@ -392,18 +389,17 @@ PacketList::PacketList(QWidget *parent) :
ctx_menu_.addSeparator();
action = window()->findChild<QAction *>("actionCopy");
submenu = new QMenu();
action->setMenu(submenu);
ctx_menu_.addAction(action);
submenu = new QMenu(action->text());
ctx_menu_.addMenu(submenu);
// " <menuitem name='SummaryTxt' action='/Copy/SummaryTxt'/>\n"
// " <menuitem name='SummaryCSV' action='/Copy/SummaryCSV'/>\n"
submenu->addAction(window()->findChild<QAction *>("actionEditCopyAsFilter"));
submenu->addSeparator();
action = window()->findChild<QAction *>("actionBytes");
subsubmenu = new QMenu();
action->setMenu(subsubmenu);
submenu->addAction(action);
subsubmenu = new QMenu(action->text());
submenu->addMenu(subsubmenu);
// " <menuitem name='OffsetHexText' action='/Copy/Bytes/OffsetHexText'/>\n"
// " <menuitem name='OffsetHex' action='/Copy/Bytes/OffsetHex'/>\n"
// " <menuitem name='PrintableTextOnly' action='/Copy/Bytes/PrintableTextOnly'/>\n"

View File

@ -35,6 +35,10 @@
#include <QTreeWidgetItemIterator>
#include <QUrl>
// 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<QAction *>("actionViewExpandSubtrees"));
ctx_menu_.addAction(window()->findChild<QAction *>("actionViewExpandAll"));
ctx_menu_.addAction(window()->findChild<QAction *>("actionViewCollapseAll"));
@ -173,10 +177,8 @@ ProtoTree::ProtoTree(QWidget *parent) :
ctx_menu_.addSeparator();
action = window()->findChild<QAction *>("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<QAction *>("actionAnalyzeAAFSelected"));
submenu->addAction(window()->findChild<QAction *>("actionAnalyzeAAFNotSelected"));
submenu->addAction(window()->findChild<QAction *>("actionAnalyzeAAFAndSelected"));
@ -185,9 +187,8 @@ ProtoTree::ProtoTree(QWidget *parent) :
submenu->addAction(window()->findChild<QAction *>("actionAnalyzeAAFOrNotSelected"));
action = window()->findChild<QAction *>("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<QAction *>("actionAnalyzePAFSelected"));
submenu->addAction(window()->findChild<QAction *>("actionAnalyzePAFNotSelected"));
submenu->addAction(window()->findChild<QAction *>("actionAnalyzePAFAndSelected"));
@ -221,9 +222,8 @@ ProtoTree::ProtoTree(QWidget *parent) :
ctx_menu_.addSeparator();
action = window()->findChild<QAction *>("actionCopy");
submenu = new QMenu();
action->setMenu(submenu);
ctx_menu_.addAction(action);
subsubmenu = new QMenu(action->text());
submenu->addMenu(subsubmenu);
submenu->addAction(window()->findChild<QAction *>("actionCopyAllVisibleItems"));
submenu->addAction(window()->findChild<QAction *>("actionCopyAllVisibleSelectedTreeItems"));
submenu->addAction(window()->findChild<QAction *>("actionEditCopyDescription"));
@ -233,9 +233,8 @@ ProtoTree::ProtoTree(QWidget *parent) :
submenu->addAction(window()->findChild<QAction *>("actionEditCopyAsFilter"));
action = window()->findChild<QAction *>("actionBytes");
subsubmenu = new QMenu();
action->setMenu(subsubmenu);
submenu->addAction(action);
subsubmenu = new QMenu(action->text());
submenu->addMenu(subsubmenu);
subsubmenu->addSeparator();
// " <menu name= 'Bytes' action='/Copy/Bytes'>\n"
// " <menuitem name='OffsetHexText' action='/Copy/Bytes/OffsetHexText'/>\n"