From ba59a28eba8bd22e6bf74d1af81237591ece901c Mon Sep 17 00:00:00 2001 From: baldurk Date: Wed, 3 May 2017 14:25:29 +0100 Subject: [PATCH] Fix shader label click handler - lambdas have QObject::sender() == NULL --- .../Windows/PipelineState/D3D11PipelineStateViewer.cpp | 9 ++++++++- .../Windows/PipelineState/D3D11PipelineStateViewer.h | 1 + .../Windows/PipelineState/D3D12PipelineStateViewer.cpp | 9 ++++++++- .../Windows/PipelineState/D3D12PipelineStateViewer.h | 1 + .../Windows/PipelineState/GLPipelineStateViewer.cpp | 9 ++++++++- qrenderdoc/Windows/PipelineState/GLPipelineStateViewer.h | 1 + .../Windows/PipelineState/VulkanPipelineStateViewer.cpp | 9 ++++++++- .../Windows/PipelineState/VulkanPipelineStateViewer.h | 1 + 8 files changed, 36 insertions(+), 4 deletions(-) diff --git a/qrenderdoc/Windows/PipelineState/D3D11PipelineStateViewer.cpp b/qrenderdoc/Windows/PipelineState/D3D11PipelineStateViewer.cpp index b9cbecf3c..e4a6a184c 100644 --- a/qrenderdoc/Windows/PipelineState/D3D11PipelineStateViewer.cpp +++ b/qrenderdoc/Windows/PipelineState/D3D11PipelineStateViewer.cpp @@ -120,7 +120,7 @@ D3D11PipelineStateViewer::D3D11PipelineStateViewer(ICaptureContext &ctx, QObject::connect(b, &QToolButton::clicked, this, &D3D11PipelineStateViewer::shaderView_clicked); for(RDLabel *b : shaderLabels) - QObject::connect(b, &RDLabel::clicked, [this](QMouseEvent *) { shaderView_clicked(); }); + QObject::connect(b, &RDLabel::clicked, this, &D3D11PipelineStateViewer::shaderLabel_clicked); for(QToolButton *b : editButtons) QObject::connect(b, &QToolButton::clicked, this, &D3D11PipelineStateViewer::shaderEdit_clicked); @@ -2187,6 +2187,13 @@ void D3D11PipelineStateViewer::shaderView_clicked() m_Ctx.AddDockWindow(shad->Widget(), DockReference::AddTo, this); } +void D3D11PipelineStateViewer::shaderLabel_clicked(QMouseEvent *event) +{ + // forward to shaderView_clicked, we only need this to handle the different parameter, and we + // can't use a lambda because then QObject::sender() is NULL + shaderView_clicked(); +} + void D3D11PipelineStateViewer::shaderEdit_clicked() { QWidget *sender = qobject_cast(QObject::sender()); diff --git a/qrenderdoc/Windows/PipelineState/D3D11PipelineStateViewer.h b/qrenderdoc/Windows/PipelineState/D3D11PipelineStateViewer.h index 4c8de2910..d4be67316 100644 --- a/qrenderdoc/Windows/PipelineState/D3D11PipelineStateViewer.h +++ b/qrenderdoc/Windows/PipelineState/D3D11PipelineStateViewer.h @@ -66,6 +66,7 @@ private slots: // manual slots void shaderView_clicked(); + void shaderLabel_clicked(QMouseEvent *event); void shaderEdit_clicked(); void shaderSave_clicked(); diff --git a/qrenderdoc/Windows/PipelineState/D3D12PipelineStateViewer.cpp b/qrenderdoc/Windows/PipelineState/D3D12PipelineStateViewer.cpp index a306adeb2..576fc629c 100644 --- a/qrenderdoc/Windows/PipelineState/D3D12PipelineStateViewer.cpp +++ b/qrenderdoc/Windows/PipelineState/D3D12PipelineStateViewer.cpp @@ -146,7 +146,7 @@ D3D12PipelineStateViewer::D3D12PipelineStateViewer(ICaptureContext &ctx, QObject::connect(b, &QToolButton::clicked, this, &D3D12PipelineStateViewer::shaderView_clicked); for(RDLabel *b : shaderLabels) - QObject::connect(b, &RDLabel::clicked, [this](QMouseEvent *) { shaderView_clicked(); }); + QObject::connect(b, &RDLabel::clicked, this, &D3D12PipelineStateViewer::shaderLabel_clicked); for(QToolButton *b : editButtons) QObject::connect(b, &QToolButton::clicked, this, &D3D12PipelineStateViewer::shaderEdit_clicked); @@ -2078,6 +2078,13 @@ void D3D12PipelineStateViewer::shaderView_clicked() m_Ctx.AddDockWindow(shad->Widget(), DockReference::AddTo, this); } +void D3D12PipelineStateViewer::shaderLabel_clicked(QMouseEvent *event) +{ + // forward to shaderView_clicked, we only need this to handle the different parameter, and we + // can't use a lambda because then QObject::sender() is NULL + shaderView_clicked(); +} + void D3D12PipelineStateViewer::shaderEdit_clicked() { QWidget *sender = qobject_cast(QObject::sender()); diff --git a/qrenderdoc/Windows/PipelineState/D3D12PipelineStateViewer.h b/qrenderdoc/Windows/PipelineState/D3D12PipelineStateViewer.h index 65917ca99..4f3c961d4 100644 --- a/qrenderdoc/Windows/PipelineState/D3D12PipelineStateViewer.h +++ b/qrenderdoc/Windows/PipelineState/D3D12PipelineStateViewer.h @@ -66,6 +66,7 @@ private slots: // manual slots void shaderView_clicked(); + void shaderLabel_clicked(QMouseEvent *event); void shaderEdit_clicked(); void shaderSave_clicked(); void resource_itemActivated(RDTreeWidgetItem *item, int column); diff --git a/qrenderdoc/Windows/PipelineState/GLPipelineStateViewer.cpp b/qrenderdoc/Windows/PipelineState/GLPipelineStateViewer.cpp index 9e708819e..14320f5c3 100644 --- a/qrenderdoc/Windows/PipelineState/GLPipelineStateViewer.cpp +++ b/qrenderdoc/Windows/PipelineState/GLPipelineStateViewer.cpp @@ -126,7 +126,7 @@ GLPipelineStateViewer::GLPipelineStateViewer(ICaptureContext &ctx, PipelineState QObject::connect(b, &QToolButton::clicked, this, &GLPipelineStateViewer::shaderView_clicked); for(RDLabel *b : shaderLabels) - QObject::connect(b, &RDLabel::clicked, [this](QMouseEvent *) { shaderView_clicked(); }); + QObject::connect(b, &RDLabel::clicked, this, &GLPipelineStateViewer::shaderLabel_clicked); for(QToolButton *b : editButtons) QObject::connect(b, &QToolButton::clicked, this, &GLPipelineStateViewer::shaderEdit_clicked); @@ -2201,6 +2201,13 @@ void GLPipelineStateViewer::shaderView_clicked() m_Ctx.AddDockWindow(shad->Widget(), DockReference::AddTo, this); } +void GLPipelineStateViewer::shaderLabel_clicked(QMouseEvent *event) +{ + // forward to shaderView_clicked, we only need this to handle the different parameter, and we + // can't use a lambda because then QObject::sender() is NULL + shaderView_clicked(); +} + void GLPipelineStateViewer::shaderEdit_clicked() { QWidget *sender = qobject_cast(QObject::sender()); diff --git a/qrenderdoc/Windows/PipelineState/GLPipelineStateViewer.h b/qrenderdoc/Windows/PipelineState/GLPipelineStateViewer.h index d68ec5ca2..841237571 100644 --- a/qrenderdoc/Windows/PipelineState/GLPipelineStateViewer.h +++ b/qrenderdoc/Windows/PipelineState/GLPipelineStateViewer.h @@ -65,6 +65,7 @@ private slots: // manual slots void shaderView_clicked(); + void shaderLabel_clicked(QMouseEvent *event); void shaderEdit_clicked(); void shaderSave_clicked(); void resource_itemActivated(RDTreeWidgetItem *item, int column); diff --git a/qrenderdoc/Windows/PipelineState/VulkanPipelineStateViewer.cpp b/qrenderdoc/Windows/PipelineState/VulkanPipelineStateViewer.cpp index 75d77c32a..b49fd9e8b 100644 --- a/qrenderdoc/Windows/PipelineState/VulkanPipelineStateViewer.cpp +++ b/qrenderdoc/Windows/PipelineState/VulkanPipelineStateViewer.cpp @@ -129,7 +129,7 @@ VulkanPipelineStateViewer::VulkanPipelineStateViewer(ICaptureContext &ctx, QObject::connect(b, &QToolButton::clicked, this, &VulkanPipelineStateViewer::shaderView_clicked); for(RDLabel *b : shaderLabels) - QObject::connect(b, &RDLabel::clicked, [this](QMouseEvent *) { shaderView_clicked(); }); + QObject::connect(b, &RDLabel::clicked, this, &VulkanPipelineStateViewer::shaderLabel_clicked); for(QToolButton *b : editButtons) QObject::connect(b, &QToolButton::clicked, this, &VulkanPipelineStateViewer::shaderEdit_clicked); @@ -2242,6 +2242,13 @@ void VulkanPipelineStateViewer::shaderView_clicked() m_Ctx.AddDockWindow(shad->Widget(), DockReference::AddTo, this); } +void VulkanPipelineStateViewer::shaderLabel_clicked(QMouseEvent *event) +{ + // forward to shaderView_clicked, we only need this to handle the different parameter, and we + // can't use a lambda because then QObject::sender() is NULL + shaderView_clicked(); +} + void VulkanPipelineStateViewer::shaderEdit_clicked() { QWidget *sender = qobject_cast(QObject::sender()); diff --git a/qrenderdoc/Windows/PipelineState/VulkanPipelineStateViewer.h b/qrenderdoc/Windows/PipelineState/VulkanPipelineStateViewer.h index 675d2d23d..707b7532c 100644 --- a/qrenderdoc/Windows/PipelineState/VulkanPipelineStateViewer.h +++ b/qrenderdoc/Windows/PipelineState/VulkanPipelineStateViewer.h @@ -71,6 +71,7 @@ private slots: // manual slots void shaderView_clicked(); + void shaderLabel_clicked(QMouseEvent *event); void shaderEdit_clicked(); void shaderSave_clicked();