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;
}