idm->g_fxo

This commit is contained in:
trigger 2025-04-30 15:11:38 -07:00
parent ded9d73ce4
commit ede12f65c5
2 changed files with 34 additions and 13 deletions

View file

@ -9,6 +9,7 @@
#include "Emu/RSX/RSXThread.h"
#include "Emu/RSX/rsx_utils.h"
#include "Emu/IdManager.h"
#include "Emu/System.h"
#include <QVBoxLayout>
#include <QPushButton>
#include <QSpinBox>
@ -589,6 +590,14 @@ memory_viewer_panel::memory_viewer_panel(QWidget* parent, std::shared_ptr<CPUDis
idm::remove_verify<memory_viewer_handle>(id, handle_ptr);
});
if (!g_fxo->try_get<memory_viewer_fxo>())
{
g_fxo->init<memory_viewer_fxo>();
}
auto& fxo = g_fxo->get<memory_viewer_fxo>();
fxo.last_opened = this;
}
memory_viewer_panel::~memory_viewer_panel()
@ -1247,20 +1256,23 @@ void memory_viewer_panel::ShowImage(QWidget* parent, u32 addr, color_format form
void memory_viewer_panel::ShowAtPC(u32 pc)
{
const u32 id = idm::last_id();
auto handle_ptr = idm::get_unlocked<memory_viewer_handle>(id);
if (!handle_ptr)
{
idm::make<memory_viewer_handle>(nullptr, nullptr, pc);
if (Emu.IsStopped())
return;
if (const auto* fxo = g_fxo->try_get<memory_viewer_fxo>())
{
if (auto* panel = fxo->last_opened)
{
panel->SetPC(pc);
panel->raise();
panel->scroll(0);
if (!panel->isVisible())
{
panel->show();
}
return;
}
}
handle_ptr->m_mvp->SetPC(pc);
handle_ptr->m_mvp->raise();
handle_ptr->m_mvp->scroll(0);
if (!handle_ptr->m_mvp->isVisible())
{
handle_ptr->m_mvp->show();
}
idm::make<memory_viewer_handle>(nullptr, nullptr, pc);
}

View file

@ -139,3 +139,12 @@ struct memory_viewer_handle
public:
const std::add_pointer_t<memory_viewer_panel> m_mvp;
};
struct memory_viewer_fxo
{
memory_viewer_panel* last_opened = nullptr;
memory_viewer_fxo() = default;
memory_viewer_fxo(const memory_viewer_fxo&) = delete;
memory_viewer_fxo& operator=(const memory_viewer_fxo&) = delete;
};