Fix dragging and dropping savestates in the render window
This commit is contained in:
parent
91da031220
commit
3df00cd3f5
|
@ -15,6 +15,7 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <cstddef>
|
#include <cstddef>
|
||||||
|
#include <fstream>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <utility>
|
#include <utility>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
@ -152,6 +153,7 @@ void CRenderFrame::OnDropFiles(wxDropFilesEvent& event)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
wxFileName file = event.GetFiles()[0];
|
wxFileName file = event.GetFiles()[0];
|
||||||
|
const std::string filepath = WxStrToStr(file.GetFullPath());
|
||||||
|
|
||||||
if (file.GetExt() == "dtm")
|
if (file.GetExt() == "dtm")
|
||||||
{
|
{
|
||||||
|
@ -165,19 +167,37 @@ void CRenderFrame::OnDropFiles(wxDropFilesEvent& event)
|
||||||
main_frame->GetMenuBar()->FindItem(IDM_RECORDREADONLY)->Check(true);
|
main_frame->GetMenuBar()->FindItem(IDM_RECORDREADONLY)->Check(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Movie::PlayInput(WxStrToStr(file.GetFullPath())))
|
if (Movie::PlayInput(filepath))
|
||||||
main_frame->BootGame("");
|
main_frame->BootGame("");
|
||||||
}
|
}
|
||||||
else if (!Core::IsRunning())
|
else if (!Core::IsRunning())
|
||||||
{
|
{
|
||||||
main_frame->BootGame(WxStrToStr(file.GetFullPath()));
|
main_frame->BootGame(filepath);
|
||||||
|
}
|
||||||
|
else if (IsValidSavestateDropped(filepath) && Core::IsRunning())
|
||||||
|
{
|
||||||
|
State::LoadAs(filepath);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
DVDInterface::ChangeDisc(WxStrToStr(file.GetFullPath()));
|
DVDInterface::ChangeDisc(filepath);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool CRenderFrame::IsValidSavestateDropped(const std::string& filepath)
|
||||||
|
{
|
||||||
|
const int game_id_length = 6;
|
||||||
|
std::ifstream file(filepath, std::ios::in | std::ios::binary);
|
||||||
|
|
||||||
|
if (!file)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
std::string internal_game_id(game_id_length, ' ');
|
||||||
|
file.read(&internal_game_id[0], game_id_length);
|
||||||
|
|
||||||
|
return internal_game_id == SConfig::GetInstance().m_LocalCoreStartupParameter.GetUniqueID();
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
WXLRESULT CRenderFrame::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam)
|
WXLRESULT CRenderFrame::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam)
|
||||||
{
|
{
|
||||||
|
|
|
@ -80,6 +80,7 @@ class CRenderFrame : public wxFrame
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void OnDropFiles(wxDropFilesEvent& event);
|
void OnDropFiles(wxDropFilesEvent& event);
|
||||||
|
static bool IsValidSavestateDropped(const std::string& filepath);
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
// Receive WndProc messages
|
// Receive WndProc messages
|
||||||
WXLRESULT MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam);
|
WXLRESULT MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam);
|
||||||
|
|
Loading…
Reference in New Issue