From a0472fd7f2aa16f9b295a007739860acdbdf2d23 Mon Sep 17 00:00:00 2001 From: mere-human <9664141+mere-human@users.noreply.github.com> Date: Sat, 3 Jul 2021 20:17:52 +0300 Subject: [PATCH] Use current file directory in File Rename dialog and fix "Remember last used directory" unexpected behaviour. Fix #10095, fix #10115, close #10100 --- PowerEditor/installer/nativeLang/english.xml | 1 + PowerEditor/src/NppIO.cpp | 8 +++++-- .../OpenSaveFileDialog/CustomFileDialog.cpp | 22 ++++++++++++------- 3 files changed, 21 insertions(+), 10 deletions(-) diff --git a/PowerEditor/installer/nativeLang/english.xml b/PowerEditor/installer/nativeLang/english.xml index a5e813139..4d898e5dc 100644 --- a/PowerEditor/installer/nativeLang/english.xml +++ b/PowerEditor/installer/nativeLang/english.xml @@ -1348,6 +1348,7 @@ You can re-activate this dialog in Preferences dialog later." /> + getFullPathName()); fDlg.setDefFileName(buf->getFileName()); + + generic_string title = _nativeLangSpeaker.getLocalizedStrFromID("file-rename-title", TEXT("Rename")); + fDlg.setTitle(title.c_str()); + generic_string fn = fDlg.doSaveDlg(); if (!fn.empty()) @@ -1769,10 +1773,10 @@ bool Notepad_plus::fileRename(BufferID id) // Reserved characters: < > : " / \ | ? * std::wstring reservedChars = TEXT("<>:\"/\\|\?*"); - generic_string title = _nativeLangSpeaker.getLocalizedStrFromID("tabrename-title", TEXT("Rename Current Tab")); generic_string staticName = _nativeLangSpeaker.getLocalizedStrFromID("tabrename-newname", TEXT("New Name: ")); StringDlg strDlg; + generic_string title = _nativeLangSpeaker.getLocalizedStrFromID("tabrename-title", TEXT("Rename Current Tab")); strDlg.init(_pPublicInterface->getHinst(), _pPublicInterface->getHSelf(), title.c_str(), staticName.c_str(), buf->getFileName(), 0, reservedChars.c_str(), true); TCHAR *tabNewName = reinterpret_cast(strDlg.doDialog()); diff --git a/PowerEditor/src/WinControls/OpenSaveFileDialog/CustomFileDialog.cpp b/PowerEditor/src/WinControls/OpenSaveFileDialog/CustomFileDialog.cpp index c809dbc1d..20c5c4fbd 100644 --- a/PowerEditor/src/WinControls/OpenSaveFileDialog/CustomFileDialog.cpp +++ b/PowerEditor/src/WinControls/OpenSaveFileDialog/CustomFileDialog.cpp @@ -137,15 +137,21 @@ namespace // anonymous return result; } - bool setDialogFolder(IFileDialog* dialog, const TCHAR* folder) + bool setDialogFolder(IFileDialog* dialog, const TCHAR* path) { - IShellItem* psi = nullptr; - HRESULT hr = SHCreateItemFromParsingName(folder, - 0, - IID_IShellItem, - reinterpret_cast(&psi)); + com_ptr shellItem; + HRESULT hr = SHCreateItemFromParsingName(path, + nullptr, + IID_PPV_ARGS(&shellItem)); + if (SUCCEEDED(hr) && shellItem && !::PathIsDirectory(path)) + { + com_ptr parentItem; + hr = shellItem->GetParent(&parentItem); + if (SUCCEEDED(hr)) + shellItem = parentItem; + } if (SUCCEEDED(hr)) - hr = dialog->SetFolder(psi); + hr = dialog->SetFolder(shellItem); return SUCCEEDED(hr); } @@ -738,7 +744,7 @@ public: okPressed = SUCCEEDED(hr); NppParameters& params = NppParameters::getInstance(); - if (params.getNppGUI()._openSaveDir == dir_last) + if (okPressed && params.getNppGUI()._openSaveDir == dir_last) { // Note: IFileDialog doesn't modify the current directory. // At least, after it is hidden, the current directory is the same as before it was shown.