mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-07-18 13:37:11 +00:00
Fix shaderviewer shortcuts using QShortcut which doesn't work well
This commit is contained in:
@@ -33,6 +33,7 @@
|
||||
#include <QPixmapCache>
|
||||
#include <QProgressBar>
|
||||
#include <QProgressDialog>
|
||||
#include <QShortcut>
|
||||
#include <QToolButton>
|
||||
#include <QToolTip>
|
||||
#include "Code/QRDUtils.h"
|
||||
@@ -2032,6 +2033,12 @@ void MainWindow::RegisterShortcut(const rdcstr &shortcut, QWidget *widget, Short
|
||||
|
||||
if(widget)
|
||||
{
|
||||
// we need to create a Qt shortcut for this widget. Even though we don't actually use the
|
||||
// callback, unless a shortcut exists Qt might not properly send the ShortcutOverride event to
|
||||
// our eventFilter - an example is on windows where Shift-F10 might go straight to a
|
||||
// ContextEvent. So we create a shortcut on this widget & key-sequence to force Qt to process it
|
||||
m_QtShortcuts.push_back(new QShortcut(ks, widget));
|
||||
|
||||
m_WidgetShortcutCallbacks[ks][widget] = callback;
|
||||
}
|
||||
else
|
||||
@@ -2050,6 +2057,20 @@ void MainWindow::UnregisterShortcut(const rdcstr &shortcut, QWidget *widget)
|
||||
{
|
||||
if(widget)
|
||||
{
|
||||
// delete any Qt shortcuts we created for this widget
|
||||
for(auto it = m_QtShortcuts.begin(); it != m_QtShortcuts.end();)
|
||||
{
|
||||
if((*it)->parent() == widget)
|
||||
{
|
||||
delete *it;
|
||||
it = m_QtShortcuts.erase(it);
|
||||
}
|
||||
else
|
||||
{
|
||||
++it;
|
||||
}
|
||||
}
|
||||
|
||||
if(shortcut.isEmpty())
|
||||
{
|
||||
// if no shortcut is specified, remove all shortcuts for this widget
|
||||
|
||||
@@ -41,6 +41,7 @@ class RDLabel;
|
||||
class LambdaThread;
|
||||
class QMimeData;
|
||||
class QProgressBar;
|
||||
class QShortcut;
|
||||
class QToolButton;
|
||||
class CaptureDialog;
|
||||
class LiveCapture;
|
||||
@@ -194,6 +195,7 @@ private:
|
||||
|
||||
QMap<QKeySequence, ShortcutCallback> m_GlobalShortcutCallbacks;
|
||||
QMap<QKeySequence, QMap<QWidget *, ShortcutCallback>> m_WidgetShortcutCallbacks;
|
||||
QList<QShortcut *> m_QtShortcuts;
|
||||
|
||||
RDLabel *statusIcon;
|
||||
RDLabel *statusText;
|
||||
|
||||
@@ -584,20 +584,21 @@ void ShaderViewer::debugShader(const ShaderBindpointMapping *bind, const ShaderR
|
||||
QObject::connect(edit, &ScintillaEdit::dwellEnd, this, &ShaderViewer::disasm_tooltipHide);
|
||||
}
|
||||
|
||||
// register the shortcuts globally for this shader viewer so it works regardless of the active
|
||||
// scintilla
|
||||
QObject::connect(new QShortcut(QKeySequence(Qt::Key_F10), this), &QShortcut::activated, this,
|
||||
&ShaderViewer::stepNext);
|
||||
QObject::connect(new QShortcut(QKeySequence(Qt::Key_F10 | Qt::ShiftModifier), this),
|
||||
&QShortcut::activated, this, &ShaderViewer::stepBack);
|
||||
QObject::connect(new QShortcut(QKeySequence(Qt::Key_F10 | Qt::ControlModifier), this),
|
||||
&QShortcut::activated, this, &ShaderViewer::runToCursor);
|
||||
QObject::connect(new QShortcut(QKeySequence(Qt::Key_F5), this), &QShortcut::activated, this,
|
||||
&ShaderViewer::run);
|
||||
QObject::connect(new QShortcut(QKeySequence(Qt::Key_F5 | Qt::ShiftModifier), this),
|
||||
&QShortcut::activated, this, &ShaderViewer::runBack);
|
||||
QObject::connect(new QShortcut(QKeySequence(Qt::Key_F9), this), &QShortcut::activated,
|
||||
[this]() { ToggleBreakpoint(); });
|
||||
// register the shortcuts via MainWindow so that it works regardless of the active scintilla but
|
||||
// still handles multiple shader viewers being present (the one with focus will get the input)
|
||||
m_Ctx.GetMainWindow()->RegisterShortcut(QKeySequence(Qt::Key_F10).toString(), this,
|
||||
[this](QWidget *) { stepNext(); });
|
||||
m_Ctx.GetMainWindow()->RegisterShortcut(QKeySequence(Qt::Key_F10 | Qt::ShiftModifier).toString(),
|
||||
this, [this](QWidget *) { stepBack(); });
|
||||
m_Ctx.GetMainWindow()->RegisterShortcut(
|
||||
QKeySequence(Qt::Key_F10 | Qt::ControlModifier).toString(), this,
|
||||
[this](QWidget *) { runToCursor(); });
|
||||
m_Ctx.GetMainWindow()->RegisterShortcut(QKeySequence(Qt::Key_F5).toString(), this,
|
||||
[this](QWidget *) { run(); });
|
||||
m_Ctx.GetMainWindow()->RegisterShortcut(QKeySequence(Qt::Key_F5 | Qt::ShiftModifier).toString(),
|
||||
this, [this](QWidget *) { runBack(); });
|
||||
m_Ctx.GetMainWindow()->RegisterShortcut(QKeySequence(Qt::Key_F9).toString(), this,
|
||||
[this](QWidget *) { ToggleBreakpoint(); });
|
||||
|
||||
// event filter to pick up tooltip events
|
||||
ui->constants->installEventFilter(this);
|
||||
|
||||
Reference in New Issue
Block a user