From 8447e43e7807e2ca954c42a21d78391548d1c456 Mon Sep 17 00:00:00 2001 From: baldurk Date: Tue, 23 Oct 2018 15:15:39 +0100 Subject: [PATCH] Fix panel menus --- qrenderdoc/Code/CaptureContext.cpp | 16 ++++++---------- qrenderdoc/Code/CaptureContext.h | 2 +- qrenderdoc/Code/Interface/QRDInterface.h | 2 +- qrenderdoc/Windows/BufferViewer.cpp | 5 ++++- qrenderdoc/Windows/EventBrowser.cpp | 5 ++++- .../PipelineState/D3D11PipelineStateViewer.cpp | 6 +++++- .../PipelineState/D3D12PipelineStateViewer.cpp | 6 +++++- .../PipelineState/GLPipelineStateViewer.cpp | 6 +++++- .../PipelineState/VulkanPipelineStateViewer.cpp | 6 +++++- qrenderdoc/Windows/TextureViewer.cpp | 5 ++++- 10 files changed, 40 insertions(+), 19 deletions(-) diff --git a/qrenderdoc/Code/CaptureContext.cpp b/qrenderdoc/Code/CaptureContext.cpp index ea2946447..9bfba02d8 100644 --- a/qrenderdoc/Code/CaptureContext.cpp +++ b/qrenderdoc/Code/CaptureContext.cpp @@ -470,16 +470,14 @@ void CaptureContext::MenuDisplaying(ContextMenu contextMenu, QMenu *menu, } } -void CaptureContext::MenuDisplaying(PanelMenu panelMenu, QWidget *extensionButton, +void CaptureContext::MenuDisplaying(PanelMenu panelMenu, QMenu *menu, QWidget *extensionButton, const ExtensionCallbackData &data) { - QMenu contextMenu(m_MainWindow); - for(RegisteredMenuItem *item : m_RegisteredMenuItems) { if(item->panel == panelMenu) { - AddSortedMenuItem(&contextMenu, false, item->submenus, [this, item, data]() { + AddSortedMenuItem(menu, false, item->submenus, [this, item, data]() { rdcarray> args; PythonContext::ConvertPyArgs(data, args); @@ -491,16 +489,14 @@ void CaptureContext::MenuDisplaying(PanelMenu panelMenu, QWidget *extensionButto } } - QAction emptyAction(tr("No extension commands configured"), m_MainWindow); + QAction *emptyAction = new QAction(tr("No extension commands configured"), menu); - if(contextMenu.isEmpty()) + if(menu->isEmpty()) { - contextMenu.addAction(&emptyAction); - QObject::connect(&emptyAction, &QAction::triggered, + menu->addAction(emptyAction); + QObject::connect(emptyAction, &QAction::triggered, [this]() { m_MainWindow->showExtensionManager(); }); } - - RDDialog::show(&contextMenu, extensionButton->mapToGlobal(extensionButton->rect().bottomLeft())); } void CaptureContext::AddSortedMenuItem(QMenu *menu, bool rootMenu, const rdcarray &items, diff --git a/qrenderdoc/Code/CaptureContext.h b/qrenderdoc/Code/CaptureContext.h index 3754409c3..daf8a27cc 100644 --- a/qrenderdoc/Code/CaptureContext.h +++ b/qrenderdoc/Code/CaptureContext.h @@ -80,7 +80,7 @@ public: ExtensionCallback callback) override; void MenuDisplaying(ContextMenu contextMenu, QMenu *menu, const ExtensionCallbackData &data) override; - void MenuDisplaying(PanelMenu panelMenu, QWidget *extensionButton, + void MenuDisplaying(PanelMenu panelMenu, QMenu *menu, QWidget *extensionButton, const ExtensionCallbackData &data) override; ////////////////////////////////////////////////////////////////////////////// diff --git a/qrenderdoc/Code/Interface/QRDInterface.h b/qrenderdoc/Code/Interface/QRDInterface.h index 8c520aa89..d47f6c7c0 100644 --- a/qrenderdoc/Code/Interface/QRDInterface.h +++ b/qrenderdoc/Code/Interface/QRDInterface.h @@ -1291,7 +1291,7 @@ struct IExtensionManager // style avoids complex retained state that has to be refreshed each time a panel is created. virtual void MenuDisplaying(ContextMenu contextMenu, QMenu *menu, const ExtensionCallbackData &data) = 0; - virtual void MenuDisplaying(PanelMenu panelMenu, QWidget *extensionButton, + virtual void MenuDisplaying(PanelMenu panelMenu, QMenu *menu, QWidget *extensionButton, const ExtensionCallbackData &data) = 0; #endif diff --git a/qrenderdoc/Windows/BufferViewer.cpp b/qrenderdoc/Windows/BufferViewer.cpp index 2f910349f..a4dda856c 100644 --- a/qrenderdoc/Windows/BufferViewer.cpp +++ b/qrenderdoc/Windows/BufferViewer.cpp @@ -1135,9 +1135,12 @@ BufferViewer::BufferViewer(ICaptureContext &ctx, bool meshview, QWidget *parent) { QMenu *extensionsMenu = new QMenu(this); + ui->extensions->setMenu(extensionsMenu); + ui->extensions->setPopupMode(QToolButton::InstantPopup); + QObject::connect(extensionsMenu, &QMenu::aboutToShow, [this, extensionsMenu]() { extensionsMenu->clear(); - m_Ctx.Extensions().MenuDisplaying(PanelMenu::MeshPreview, ui->extensions, {}); + m_Ctx.Extensions().MenuDisplaying(PanelMenu::MeshPreview, extensionsMenu, ui->extensions, {}); }); } diff --git a/qrenderdoc/Windows/EventBrowser.cpp b/qrenderdoc/Windows/EventBrowser.cpp index 2fc0ce19d..d7de76539 100644 --- a/qrenderdoc/Windows/EventBrowser.cpp +++ b/qrenderdoc/Windows/EventBrowser.cpp @@ -192,9 +192,12 @@ EventBrowser::EventBrowser(ICaptureContext &ctx, QWidget *parent) { QMenu *extensionsMenu = new QMenu(this); + ui->extensions->setMenu(extensionsMenu); + ui->extensions->setPopupMode(QToolButton::InstantPopup); + QObject::connect(extensionsMenu, &QMenu::aboutToShow, [this, extensionsMenu]() { extensionsMenu->clear(); - m_Ctx.Extensions().MenuDisplaying(PanelMenu::EventBrowser, ui->extensions, {}); + m_Ctx.Extensions().MenuDisplaying(PanelMenu::EventBrowser, extensionsMenu, ui->extensions, {}); }); } diff --git a/qrenderdoc/Windows/PipelineState/D3D11PipelineStateViewer.cpp b/qrenderdoc/Windows/PipelineState/D3D11PipelineStateViewer.cpp index 9b0ce92c2..b685de211 100644 --- a/qrenderdoc/Windows/PipelineState/D3D11PipelineStateViewer.cpp +++ b/qrenderdoc/Windows/PipelineState/D3D11PipelineStateViewer.cpp @@ -175,9 +175,13 @@ D3D11PipelineStateViewer::D3D11PipelineStateViewer(ICaptureContext &ctx, { QMenu *extensionsMenu = new QMenu(this); + ui->extensions->setMenu(extensionsMenu); + ui->extensions->setPopupMode(QToolButton::InstantPopup); + QObject::connect(extensionsMenu, &QMenu::aboutToShow, [this, extensionsMenu]() { extensionsMenu->clear(); - m_Ctx.Extensions().MenuDisplaying(PanelMenu::PipelineStateViewer, ui->extensions, {}); + m_Ctx.Extensions().MenuDisplaying(PanelMenu::PipelineStateViewer, extensionsMenu, + ui->extensions, {}); }); } diff --git a/qrenderdoc/Windows/PipelineState/D3D12PipelineStateViewer.cpp b/qrenderdoc/Windows/PipelineState/D3D12PipelineStateViewer.cpp index c04227dc4..f5ea12fa2 100644 --- a/qrenderdoc/Windows/PipelineState/D3D12PipelineStateViewer.cpp +++ b/qrenderdoc/Windows/PipelineState/D3D12PipelineStateViewer.cpp @@ -215,9 +215,13 @@ D3D12PipelineStateViewer::D3D12PipelineStateViewer(ICaptureContext &ctx, { QMenu *extensionsMenu = new QMenu(this); + ui->extensions->setMenu(extensionsMenu); + ui->extensions->setPopupMode(QToolButton::InstantPopup); + QObject::connect(extensionsMenu, &QMenu::aboutToShow, [this, extensionsMenu]() { extensionsMenu->clear(); - m_Ctx.Extensions().MenuDisplaying(PanelMenu::PipelineStateViewer, ui->extensions, {}); + m_Ctx.Extensions().MenuDisplaying(PanelMenu::PipelineStateViewer, extensionsMenu, + ui->extensions, {}); }); } diff --git a/qrenderdoc/Windows/PipelineState/GLPipelineStateViewer.cpp b/qrenderdoc/Windows/PipelineState/GLPipelineStateViewer.cpp index bf86a66e5..163651e70 100644 --- a/qrenderdoc/Windows/PipelineState/GLPipelineStateViewer.cpp +++ b/qrenderdoc/Windows/PipelineState/GLPipelineStateViewer.cpp @@ -172,9 +172,13 @@ GLPipelineStateViewer::GLPipelineStateViewer(ICaptureContext &ctx, PipelineState { QMenu *extensionsMenu = new QMenu(this); + ui->extensions->setMenu(extensionsMenu); + ui->extensions->setPopupMode(QToolButton::InstantPopup); + QObject::connect(extensionsMenu, &QMenu::aboutToShow, [this, extensionsMenu]() { extensionsMenu->clear(); - m_Ctx.Extensions().MenuDisplaying(PanelMenu::PipelineStateViewer, ui->extensions, {}); + m_Ctx.Extensions().MenuDisplaying(PanelMenu::PipelineStateViewer, extensionsMenu, + ui->extensions, {}); }); } diff --git a/qrenderdoc/Windows/PipelineState/VulkanPipelineStateViewer.cpp b/qrenderdoc/Windows/PipelineState/VulkanPipelineStateViewer.cpp index ede954de4..4605e911e 100644 --- a/qrenderdoc/Windows/PipelineState/VulkanPipelineStateViewer.cpp +++ b/qrenderdoc/Windows/PipelineState/VulkanPipelineStateViewer.cpp @@ -167,9 +167,13 @@ VulkanPipelineStateViewer::VulkanPipelineStateViewer(ICaptureContext &ctx, { QMenu *extensionsMenu = new QMenu(this); + ui->extensions->setMenu(extensionsMenu); + ui->extensions->setPopupMode(QToolButton::InstantPopup); + QObject::connect(extensionsMenu, &QMenu::aboutToShow, [this, extensionsMenu]() { extensionsMenu->clear(); - m_Ctx.Extensions().MenuDisplaying(PanelMenu::PipelineStateViewer, ui->extensions, {}); + m_Ctx.Extensions().MenuDisplaying(PanelMenu::PipelineStateViewer, extensionsMenu, + ui->extensions, {}); }); } diff --git a/qrenderdoc/Windows/TextureViewer.cpp b/qrenderdoc/Windows/TextureViewer.cpp index fe70e40c8..06ad51a6a 100644 --- a/qrenderdoc/Windows/TextureViewer.cpp +++ b/qrenderdoc/Windows/TextureViewer.cpp @@ -543,9 +543,12 @@ TextureViewer::TextureViewer(ICaptureContext &ctx, QWidget *parent) { QMenu *extensionsMenu = new QMenu(this); + ui->extensions->setMenu(extensionsMenu); + ui->extensions->setPopupMode(QToolButton::InstantPopup); + QObject::connect(extensionsMenu, &QMenu::aboutToShow, [this, extensionsMenu]() { extensionsMenu->clear(); - m_Ctx.Extensions().MenuDisplaying(PanelMenu::TextureViewer, ui->extensions, {}); + m_Ctx.Extensions().MenuDisplaying(PanelMenu::TextureViewer, extensionsMenu, ui->extensions, {}); }); }