Pressing Enter in disassembly will jump to the desired location (#1910)

* Implemented processing of 'Return' key in the disassembly widget
* renamed method in the DisasmWidget
This commit is contained in:
Properrr 2019-12-12 01:52:42 -08:00 committed by Itay Cohen
parent 53452726ac
commit 3700bc63f5
2 changed files with 35 additions and 17 deletions

View File

@ -614,15 +614,9 @@ void DisassemblyWidget::moveCursorRelative(bool up, bool page)
} }
} }
bool DisassemblyWidget::eventFilter(QObject *obj, QEvent *event) void DisassemblyWidget::jumpToOffsetUnderCursor(const QTextCursor &cursor)
{ {
if (event->type() == QEvent::MouseButtonDblClick
&& (obj == mDisasTextEdit || obj == mDisasTextEdit->viewport())) {
QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(event);
QTextCursor cursor = mDisasTextEdit->cursorForPosition(QPoint(mouseEvent->x(), mouseEvent->y()));
RVA offset = readDisassemblyOffset(cursor); RVA offset = readDisassemblyOffset(cursor);
RVA jump = Core()->getOffsetJump(offset); RVA jump = Core()->getOffsetJump(offset);
if (jump == RVA_INVALID) { if (jump == RVA_INVALID) {
@ -637,12 +631,33 @@ bool DisassemblyWidget::eventFilter(QObject *obj, QEvent *event)
if (jump != RVA_INVALID) { if (jump != RVA_INVALID) {
seekable->seek(jump); seekable->seek(jump);
} }
}
bool DisassemblyWidget::eventFilter(QObject *obj, QEvent *event)
{
if (event->type() == QEvent::MouseButtonDblClick
&& (obj == mDisasTextEdit || obj == mDisasTextEdit->viewport())) {
QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(event);
const QTextCursor& cursor = mDisasTextEdit->cursorForPosition(QPoint(mouseEvent->x(), mouseEvent->y()));
jumpToOffsetUnderCursor(cursor);
return true; return true;
} }
return MemoryDockWidget::eventFilter(obj, event); return MemoryDockWidget::eventFilter(obj, event);
} }
void DisassemblyWidget::keyPressEvent(QKeyEvent *event)
{
if(event->key() == Qt::Key_Return) {
const QTextCursor cursor = mDisasTextEdit->textCursor();
jumpToOffsetUnderCursor(cursor);
}
MemoryDockWidget::keyPressEvent(event);
}
QString DisassemblyWidget::getWindowTitle() const QString DisassemblyWidget::getWindowTitle() const
{ {
return tr("Disassembly"); return tr("Disassembly");

View File

@ -72,6 +72,7 @@ private:
RVA readCurrentDisassemblyOffset(); RVA readCurrentDisassemblyOffset();
RVA readDisassemblyOffset(QTextCursor tc); RVA readDisassemblyOffset(QTextCursor tc);
bool eventFilter(QObject *obj, QEvent *event) override; bool eventFilter(QObject *obj, QEvent *event) override;
void keyPressEvent(QKeyEvent *event) override;
QString getWindowTitle() const override; QString getWindowTitle() const override;
QList<RVA> breakpoints; QList<RVA> breakpoints;
@ -84,6 +85,8 @@ private:
void connectCursorPositionChanged(bool disconnect); void connectCursorPositionChanged(bool disconnect);
void moveCursorRelative(bool up, bool page); void moveCursorRelative(bool up, bool page);
void jumpToOffsetUnderCursor(const QTextCursor&);
}; };
class DisassemblyScrollArea : public QAbstractScrollArea class DisassemblyScrollArea : public QAbstractScrollArea