diff --git a/src/widgets/DisassemblyWidget.cpp b/src/widgets/DisassemblyWidget.cpp index b5e042c5..26ddd9a5 100644 --- a/src/widgets/DisassemblyWidget.cpp +++ b/src/widgets/DisassemblyWidget.cpp @@ -614,35 +614,50 @@ void DisassemblyWidget::moveCursorRelative(bool up, bool page) } } +void DisassemblyWidget::jumpToOffsetUnderCursor(const QTextCursor &cursor) +{ + RVA offset = readDisassemblyOffset(cursor); + RVA jump = Core()->getOffsetJump(offset); + + if (jump == RVA_INVALID) { + bool ok; + RVA xref = Core()->cmdj("axfj@" + QString::number( + offset)).array().first().toObject().value("to").toVariant().toULongLong(&ok); + if (ok) { + jump = xref; + } + } + + if (jump != RVA_INVALID) { + seekable->seek(jump); + } +} + bool DisassemblyWidget::eventFilter(QObject *obj, QEvent *event) { if (event->type() == QEvent::MouseButtonDblClick && (obj == mDisasTextEdit || obj == mDisasTextEdit->viewport())) { QMouseEvent *mouseEvent = static_cast(event); - QTextCursor cursor = mDisasTextEdit->cursorForPosition(QPoint(mouseEvent->x(), mouseEvent->y())); - RVA offset = readDisassemblyOffset(cursor); - - RVA jump = Core()->getOffsetJump(offset); - - if (jump == RVA_INVALID) { - bool ok; - RVA xref = Core()->cmdj("axfj@" + QString::number( - offset)).array().first().toObject().value("to").toVariant().toULongLong(&ok); - if (ok) { - jump = xref; - } - } - - if (jump != RVA_INVALID) { - seekable->seek(jump); - } + const QTextCursor& cursor = mDisasTextEdit->cursorForPosition(QPoint(mouseEvent->x(), mouseEvent->y())); + jumpToOffsetUnderCursor(cursor); return true; } + 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 { return tr("Disassembly"); diff --git a/src/widgets/DisassemblyWidget.h b/src/widgets/DisassemblyWidget.h index 455a772c..fc4719f3 100644 --- a/src/widgets/DisassemblyWidget.h +++ b/src/widgets/DisassemblyWidget.h @@ -72,6 +72,7 @@ private: RVA readCurrentDisassemblyOffset(); RVA readDisassemblyOffset(QTextCursor tc); bool eventFilter(QObject *obj, QEvent *event) override; + void keyPressEvent(QKeyEvent *event) override; QString getWindowTitle() const override; QList breakpoints; @@ -84,6 +85,8 @@ private: void connectCursorPositionChanged(bool disconnect); void moveCursorRelative(bool up, bool page); + + void jumpToOffsetUnderCursor(const QTextCursor&); }; class DisassemblyScrollArea : public QAbstractScrollArea