diff --git a/PowerEditor/src/Parameters.cpp b/PowerEditor/src/Parameters.cpp index 180ed37b9..6deac4634 100644 --- a/PowerEditor/src/Parameters.cpp +++ b/PowerEditor/src/Parameters.cpp @@ -5743,6 +5743,12 @@ void NppParameters::feedGUIParameters(TiXmlNode *node) lstrcpyn(_nppGUI._defaultDir, path, MAX_PATH); ::ExpandEnvironmentStrings(_nppGUI._defaultDir, _nppGUI._defaultDirExp, MAX_PATH); } + + const TCHAR* path2 = element->Attribute(TEXT("lastUsedDirPath")); + if (path2 && path2[0]) + { + lstrcpyn(_nppGUI._lastUsedDir, path2, MAX_PATH); + } } else if (!lstrcmp(nm, TEXT("titleBar"))) @@ -7171,6 +7177,7 @@ void NppParameters::createXmlTreeFromGUIParams() GUIConfigElement->SetAttribute(TEXT("name"), TEXT("openSaveDir")); GUIConfigElement->SetAttribute(TEXT("value"), _nppGUI._openSaveDir); GUIConfigElement->SetAttribute(TEXT("defaultDirPath"), _nppGUI._defaultDir); + GUIConfigElement->SetAttribute(TEXT("lastUsedDirPath"), _nppGUI._lastUsedDir); } // diff --git a/PowerEditor/src/Parameters.h b/PowerEditor/src/Parameters.h index e85252594..9964613a5 100644 --- a/PowerEditor/src/Parameters.h +++ b/PowerEditor/src/Parameters.h @@ -758,6 +758,7 @@ struct NppGUI final _defaultDir[0] = 0; _defaultDirExp[0] = 0; + _lastUsedDir[0] = 0; } toolBarStatusType _toolBarStatus = TB_STANDARD; @@ -887,6 +888,8 @@ struct NppGUI final TCHAR _defaultDir[MAX_PATH]; TCHAR _defaultDirExp[MAX_PATH]; //expanded environment variables + TCHAR _lastUsedDir[MAX_PATH]; + generic_string _themeName; MultiInstSetting _multiInstSetting = monoInst; bool _clipboardHistoryPanelKeepState = false; diff --git a/PowerEditor/src/WinControls/OpenSaveFileDialog/CustomFileDialog.cpp b/PowerEditor/src/WinControls/OpenSaveFileDialog/CustomFileDialog.cpp index efca3a650..3d142ed98 100644 --- a/PowerEditor/src/WinControls/OpenSaveFileDialog/CustomFileDialog.cpp +++ b/PowerEditor/src/WinControls/OpenSaveFileDialog/CustomFileDialog.cpp @@ -876,10 +876,12 @@ public: okPressed = SUCCEEDED(hr); NppParameters& params = NppParameters::getInstance(); - if (okPressed && params.getNppGUI()._openSaveDir == dir_last) + NppGUI& nppGUI = params.getNppGUI(); + if (okPressed && nppGUI._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. + lstrcpyn(nppGUI._lastUsedDir, _events->getLastUsedFolder().c_str(), MAX_PATH); params.setWorkingDir(_events->getLastUsedFolder().c_str()); } } @@ -986,7 +988,8 @@ CustomFileDialog::CustomFileDialog(HWND hwnd) : _impl{ std::make_unique() _impl->_hwndOwner = hwnd; NppParameters& params = NppParameters::getInstance(); - const TCHAR* workDir = params.getWorkingDir(); + NppGUI& nppGUI = params.getNppGUI(); + const TCHAR* workDir = nppGUI._openSaveDir == dir_last ? nppGUI._lastUsedDir : params.getWorkingDir(); if (workDir) _impl->_fallbackFolder = workDir; }