Remember the directory of "Remember last used directory" through sessions

Fix #11326, fix #10901, fix #4961, fix #4119, close #13887
This commit is contained in:
molsonkiko 2023-07-11 20:08:45 -07:00 committed by Don Ho
parent eef91b0214
commit ff2179aeca
3 changed files with 15 additions and 2 deletions

View File

@ -5743,6 +5743,12 @@ void NppParameters::feedGUIParameters(TiXmlNode *node)
lstrcpyn(_nppGUI._defaultDir, path, MAX_PATH); lstrcpyn(_nppGUI._defaultDir, path, MAX_PATH);
::ExpandEnvironmentStrings(_nppGUI._defaultDir, _nppGUI._defaultDirExp, 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"))) else if (!lstrcmp(nm, TEXT("titleBar")))
@ -7171,6 +7177,7 @@ void NppParameters::createXmlTreeFromGUIParams()
GUIConfigElement->SetAttribute(TEXT("name"), TEXT("openSaveDir")); GUIConfigElement->SetAttribute(TEXT("name"), TEXT("openSaveDir"));
GUIConfigElement->SetAttribute(TEXT("value"), _nppGUI._openSaveDir); GUIConfigElement->SetAttribute(TEXT("value"), _nppGUI._openSaveDir);
GUIConfigElement->SetAttribute(TEXT("defaultDirPath"), _nppGUI._defaultDir); GUIConfigElement->SetAttribute(TEXT("defaultDirPath"), _nppGUI._defaultDir);
GUIConfigElement->SetAttribute(TEXT("lastUsedDirPath"), _nppGUI._lastUsedDir);
} }
// <GUIConfig name="titleBar" short="no" /> // <GUIConfig name="titleBar" short="no" />

View File

@ -758,6 +758,7 @@ struct NppGUI final
_defaultDir[0] = 0; _defaultDir[0] = 0;
_defaultDirExp[0] = 0; _defaultDirExp[0] = 0;
_lastUsedDir[0] = 0;
} }
toolBarStatusType _toolBarStatus = TB_STANDARD; toolBarStatusType _toolBarStatus = TB_STANDARD;
@ -887,6 +888,8 @@ struct NppGUI final
TCHAR _defaultDir[MAX_PATH]; TCHAR _defaultDir[MAX_PATH];
TCHAR _defaultDirExp[MAX_PATH]; //expanded environment variables TCHAR _defaultDirExp[MAX_PATH]; //expanded environment variables
TCHAR _lastUsedDir[MAX_PATH];
generic_string _themeName; generic_string _themeName;
MultiInstSetting _multiInstSetting = monoInst; MultiInstSetting _multiInstSetting = monoInst;
bool _clipboardHistoryPanelKeepState = false; bool _clipboardHistoryPanelKeepState = false;

View File

@ -876,10 +876,12 @@ public:
okPressed = SUCCEEDED(hr); okPressed = SUCCEEDED(hr);
NppParameters& params = NppParameters::getInstance(); 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. // 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. // 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()); params.setWorkingDir(_events->getLastUsedFolder().c_str());
} }
} }
@ -986,7 +988,8 @@ CustomFileDialog::CustomFileDialog(HWND hwnd) : _impl{ std::make_unique<Impl>()
_impl->_hwndOwner = hwnd; _impl->_hwndOwner = hwnd;
NppParameters& params = NppParameters::getInstance(); 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) if (workDir)
_impl->_fallbackFolder = workDir; _impl->_fallbackFolder = workDir;
} }