From 7bb0743598e205a403a995bf178280a6cf618402 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Mon, 11 Apr 2022 03:14:12 -0500 Subject: [PATCH] GUI: fix file path corruption on sys file picker --- src/gui/fileDialog.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/gui/fileDialog.cpp b/src/gui/fileDialog.cpp index a0a10103..c66a27e6 100644 --- a/src/gui/fileDialog.cpp +++ b/src/gui/fileDialog.cpp @@ -8,6 +8,7 @@ bool FurnaceGUIFileDialog::openLoad(String header, std::vector filter, c if (opened) return false; saving=false; curPath=path; + logD("opening load file dialog with curPath %s",curPath); if (sysDialog) { dialogO=new pfd::open_file(header,path,filter); } else { @@ -22,6 +23,7 @@ bool FurnaceGUIFileDialog::openSave(String header, std::vector filter, c if (opened) return false; saving=true; curPath=path; + logD("opening save file dialog with curPath %s",curPath); if (sysDialog) { dialogS=new pfd::save_file(header,path,filter); } else { @@ -65,6 +67,8 @@ bool FurnaceGUIFileDialog::render(const ImVec2& min, const ImVec2& max) { if (dialogS!=NULL) { if (dialogS->ready(0)) { fileName=dialogS->result(); + size_t dsPos=fileName.rfind(DIR_SEPARATOR); + if (dsPos!=String::npos) curPath=fileName.substr(0,dsPos); logD("returning %s",fileName.c_str()); return true; } @@ -77,6 +81,8 @@ bool FurnaceGUIFileDialog::render(const ImVec2& min, const ImVec2& max) { logD("returning nothing"); } else { fileName=dialogO->result()[0]; + size_t dsPos=fileName.rfind(DIR_SEPARATOR); + if (dsPos!=String::npos) curPath=fileName.substr(0,dsPos); logD("returning %s",fileName.c_str()); } return true; @@ -91,8 +97,15 @@ bool FurnaceGUIFileDialog::render(const ImVec2& min, const ImVec2& max) { String FurnaceGUIFileDialog::getPath() { if (sysDialog) { + if (curPath.size()>0) { + if (curPath[curPath.size()-1]==DIR_SEPARATOR) { + curPath=curPath.substr(0,curPath.size()-1); + } + } + logD("curPath: %s",curPath); return curPath; } else { + logD("curPath: %s",ImGuiFileDialog::Instance()->GetCurrentPath()); return ImGuiFileDialog::Instance()->GetCurrentPath(); } }