Skip to content

Commit

Permalink
memory viewer: Close all instances after emulation exit
Browse files Browse the repository at this point in the history
  • Loading branch information
elad335 authored and Nekotekina committed Jan 12, 2021
1 parent 923fcc3 commit e05f1c3
Show file tree
Hide file tree
Showing 4 changed files with 31 additions and 5 deletions.
3 changes: 1 addition & 2 deletions rpcs3/rpcs3qt/debugger_frame.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -320,8 +320,7 @@ void debugger_frame::keyPressEvent(QKeyEvent* event)
case Qt::Key_M:
{
// Memory viewer
auto mvp = new memory_viewer_panel(this, pc, cpu);
mvp->show();
idm::make<memory_viewer_handle>(this, pc, cpu);
return;
}
case Qt::Key_F10:
Expand Down
4 changes: 2 additions & 2 deletions rpcs3/rpcs3qt/main_window.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1839,8 +1839,8 @@ void main_window::CreateConnects()

connect(ui->toolsmemory_viewerAct, &QAction::triggered, [this]
{
memory_viewer_panel* mvp = new memory_viewer_panel(this);
mvp->show();
if (!Emu.IsStopped())
idm::make<memory_viewer_handle>(this);
});

connect(ui->toolsRsxDebuggerAct, &QAction::triggered, [this]
Expand Down
10 changes: 9 additions & 1 deletion rpcs3/rpcs3qt/memory_viewer_panel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@ memory_viewer_panel::memory_viewer_panel(QWidget* parent, u32 addr, const std::s
setWindowTitle(m_type != thread_type::spu ? tr("Memory Viewer") : tr("Memory Viewer Of %0").arg(qstr(cpu->get_name())));

setObjectName("memory_viewer");
setAttribute(Qt::WA_DeleteOnClose);
m_colcount = 4;
m_rowcount = 16;
int pSize = 10;
Expand Down Expand Up @@ -260,6 +259,15 @@ memory_viewer_panel::memory_viewer_panel(QWidget* parent, u32 addr, const std::s
});

setFixedWidth(sizeHint().width());

// Show by default
show();

// Expected to be created by IDM, emulation stop will close it
connect(this, &memory_viewer_panel::finished, [id = idm::last_id()](int)
{
idm::remove<memory_viewer_handle>(id);
});
}

memory_viewer_panel::~memory_viewer_panel()
Expand Down
19 changes: 19 additions & 0 deletions rpcs3/rpcs3qt/memory_viewer_panel.h
Original file line number Diff line number Diff line change
Expand Up @@ -70,3 +70,22 @@ class memory_viewer_panel : public QDialog

void ShowImage(QWidget* parent, u32 addr, color_format format, u32 sizex, u32 sizey, bool flipv);
};

// Lifetime management with IDM
struct memory_viewer_handle
{
static constexpr u32 id_base = 1;
static constexpr u32 id_step = 1;
static constexpr u32 id_count = 2048;

template <typename... Args>
memory_viewer_handle(Args&&... args)
: m_mvp(new memory_viewer_panel(std::forward<Args>(args)...))
{
}

~memory_viewer_handle() { m_mvp->deleteLater(); }

private:
const std::add_pointer_t<memory_viewer_panel> m_mvp;
};

0 comments on commit e05f1c3

Please sign in to comment.