diff --git a/src/plugins/debugger/watchwindow.cpp b/src/plugins/debugger/watchwindow.cpp index e8d48d0f4d6c0dac3aa3eac007317b2f281b7945..65035c338a6078246b145e9142b4933b655074aa 100644 --- a/src/plugins/debugger/watchwindow.cpp +++ b/src/plugins/debugger/watchwindow.cpp @@ -337,24 +337,9 @@ void WatchWindow::contextMenuEvent(QContextMenuEvent *ev) QAction *actSelectWidgetToWatch = menu.addAction(tr("Select Widget to Watch")); actSelectWidgetToWatch->setEnabled(canHandleWatches); - QAction *actOpenMemoryEditAtVariableAddress = 0; - QAction *actOpenMemoryEditAtPointerValue = 0; - QAction *actOpenMemoryEditor = - new QAction(tr("Open Memory Editor..."), &menu); - const bool canShowMemory = engineCapabilities & ShowMemoryCapability; - actOpenMemoryEditor->setEnabled(actionsEnabled && canShowMemory); - // Offer to open address pointed to or variable address. const bool createPointerActions = pointerValue && pointerValue != address; - if (canShowMemory && address) - actOpenMemoryEditAtVariableAddress = - new QAction(tr("Open Memory Editor at Object's Address (0x%1)") - .arg(address, 0, 16), &menu); - if (createPointerActions) - actOpenMemoryEditAtPointerValue = - new QAction(tr("Open Memory Editor at Referenced Address (0x%1)") - .arg(pointerValue, 0, 16), &menu); menu.addSeparator(); QAction *actSetWatchpointAtVariableAddress = 0; @@ -396,14 +381,42 @@ void WatchWindow::contextMenuEvent(QContextMenuEvent *ev) else menu.addAction(actRemoveWatchExpression); + QMenu memoryMenu; + memoryMenu.setTitle(tr("Open Memory Editor...")); + QAction *actOpenMemoryEditAtVariableAddress = new QAction(&memoryMenu); + QAction *actOpenMemoryEditAtPointerValue = new QAction(&memoryMenu); + QAction *actOpenMemoryEditor = new QAction(&memoryMenu); + if (engineCapabilities & ShowMemoryCapability) { + actOpenMemoryEditor->setText(tr("Open Memory Editor...")); + if (address) { + actOpenMemoryEditAtVariableAddress->setText( + tr("Open Memory Editor at Object's Address (0x%1)") + .arg(address, 0, 16)); + } else { + actOpenMemoryEditAtVariableAddress->setText( + tr("Open Memory Editor at Object's Address")); + actOpenMemoryEditAtVariableAddress->setEnabled(false); + } + if (createPointerActions) { + actOpenMemoryEditAtPointerValue->setText( + tr("Open Memory Editor at Referenced Address (0x%1)") + .arg(pointerValue, 0, 16)); + } else { + actOpenMemoryEditAtPointerValue->setText( + tr("Open Memory Editor at Referenced Address")); + actOpenMemoryEditAtPointerValue->setEnabled(false); + } + memoryMenu.addAction(actOpenMemoryEditAtVariableAddress); + memoryMenu.addAction(actOpenMemoryEditAtPointerValue); + memoryMenu.addAction(actOpenMemoryEditor); + } else { + memoryMenu.setEnabled(false); + } + menu.addAction(actInsertNewWatchItem); menu.addAction(actSelectWidgetToWatch); menu.addMenu(&formatMenu); - if (actOpenMemoryEditAtVariableAddress) - menu.addAction(actOpenMemoryEditAtVariableAddress); - if (actOpenMemoryEditAtPointerValue) - menu.addAction(actOpenMemoryEditAtPointerValue); - menu.addAction(actOpenMemoryEditor); + menu.addMenu(&memoryMenu); menu.addAction(actSetWatchpointAtVariableAddress); if (actSetWatchpointAtPointerValue) menu.addAction(actSetWatchpointAtPointerValue);