From d04641ee436b4922bd49eb0d9f4e41d2df82f312 Mon Sep 17 00:00:00 2001 From: Mirek Fidler Date: Wed, 14 Sep 2022 17:35:42 +0200 Subject: [PATCH] Fixed problem with FileSelNative Set --- uppsrc/CtrlLib/Win32.cpp | 37 +++++++------------ .../FileSelNativeMultiPre.upp | 9 +++++ upptst/FileSelNativeMultiPre/main.cpp | 17 +++++++++ 3 files changed, 40 insertions(+), 23 deletions(-) create mode 100644 upptst/FileSelNativeMultiPre/FileSelNativeMultiPre.upp create mode 100644 upptst/FileSelNativeMultiPre/main.cpp diff --git a/uppsrc/CtrlLib/Win32.cpp b/uppsrc/CtrlLib/Win32.cpp index 6db0c35f2..462b717c2 100644 --- a/uppsrc/CtrlLib/Win32.cpp +++ b/uppsrc/CtrlLib/Win32.cpp @@ -191,31 +191,22 @@ bool FileSelNative::Execute(bool open, const char *dlgtitle) { ofn.lpstrInitialDir = W32(activedir); ofn.lpfnHook = sCenterHook; int bufsize = ofn.nMaxFile = (multi ? 32000 : _MAX_PATH); - Buffer buffer(bufsize); - *(ofn.lpstrFile = buffer) = 0; - if(!filename.IsEmpty()) - { - String out; - for(int i = 0; i < filename.GetCount(); i++) - { - if(*ofn.lpstrInitialDir == 0 && FindFile().Search(AppendFileName(GetFileDirectory(filename[i]), "*"))) - ofn.lpstrInitialDir = W32(GetFileDirectory(filename[i])); - if(!open || FileExists(filename[i])) - { - String fn = GetFileName(filename[i]); - if(!IsNull(fn)) - { - if(multi && fn.Find(' ') >= 0) - out << W32(String() << '\"' << fn << '\"'); - else - out << W32(fn); - out.Cat(0); - } - } + Buffer buffer(bufsize, 0); + if(filename.GetCount()) { + if(*ofn.lpstrInitialDir == 0 && FindFile().Search(AppendFileName(GetFileDirectory(filename[0]), "*"))) + ofn.lpstrInitialDir = W32(GetFileDirectory(filename[0])); + if(!open || FileExists(filename[0])) { + String out; + String fn = GetFileName(filename[0]); + if(multi && fn.Find(' ') >= 0) + out << String() << '\"' << fn << '\"'; + else + out << fn; + Vector w32 = ToSystemCharsetW(out); + memcpy(buffer, w32, min(bufsize - 1, int(w32.GetCount() * sizeof(wchar)))); } - int l = min(out.GetLength(), bufsize - 1); - memcpy(buffer, out, l + 1); } + ofn.lpstrFile = buffer; if(dlgtitle) ofn.lpstrTitle = W32(dlgtitle); diff --git a/upptst/FileSelNativeMultiPre/FileSelNativeMultiPre.upp b/upptst/FileSelNativeMultiPre/FileSelNativeMultiPre.upp new file mode 100644 index 000000000..5872304d3 --- /dev/null +++ b/upptst/FileSelNativeMultiPre/FileSelNativeMultiPre.upp @@ -0,0 +1,9 @@ +uses + CtrlLib; + +file + main.cpp; + +mainconfig + "" = "GUI"; + diff --git a/upptst/FileSelNativeMultiPre/main.cpp b/upptst/FileSelNativeMultiPre/main.cpp new file mode 100644 index 000000000..99b272230 --- /dev/null +++ b/upptst/FileSelNativeMultiPre/main.cpp @@ -0,0 +1,17 @@ +#include + +using namespace Upp; + +GUI_APP_MAIN +{ + FileSelNative sel; + + sel.AllFilesType(); + sel.Type("All", "*.*"); + sel.Multi(); + sel.NoAsking(); + sel = GetDataFile("main.cpp"); + + if(sel.ExecuteSaveAs("save as")) + PromptOK("\1" + ~sel); +}