mirror of
https://github.com/notepad-plus-plus/notepad-plus-plus.git
synced 2025-07-23 13:54:54 +02:00
Retain read only flag state in session
Close #4987, Fix #4409, Fix #4872, Fix #2970, Fix #2548
This commit is contained in:
parent
54d2bc5528
commit
cfa702a8a8
@ -4989,7 +4989,9 @@ void Notepad_plus::getCurrentOpenedFiles(Session & session, bool includUntitledD
|
|||||||
|
|
||||||
generic_string languageName = getLangFromMenu(buf);
|
generic_string languageName = getLangFromMenu(buf);
|
||||||
const TCHAR *langName = languageName.c_str();
|
const TCHAR *langName = languageName.c_str();
|
||||||
sessionFileInfo sfi(buf->getFullPathName(), langName, buf->getEncoding(), buf->getPosition(editView), buf->getBackupFileName().c_str(), buf->getLastModifiedTimestamp(), buf->getMapPosition());
|
sessionFileInfo sfi(buf->getFullPathName(), langName, buf->getEncoding(), buf->getUserReadOnly(), buf->getPosition(editView), buf->getBackupFileName().c_str(), buf->getLastModifiedTimestamp(), buf->getMapPosition());
|
||||||
|
|
||||||
|
sfi._isMonitoring = buf->isMonitoringOn();
|
||||||
|
|
||||||
_invisibleEditView.execute(SCI_SETDOCPOINTER, 0, buf->getDocument());
|
_invisibleEditView.execute(SCI_SETDOCPOINTER, 0, buf->getDocument());
|
||||||
size_t maxLine = static_cast<size_t>(_invisibleEditView.execute(SCI_GETLINECOUNT));
|
size_t maxLine = static_cast<size_t>(_invisibleEditView.execute(SCI_GETLINECOUNT));
|
||||||
|
@ -1718,6 +1718,8 @@ bool Notepad_plus::loadSession(Session & session, bool isSnapshotMode)
|
|||||||
if (session._mainViewFiles[i]._encoding != -1)
|
if (session._mainViewFiles[i]._encoding != -1)
|
||||||
buf->setEncoding(session._mainViewFiles[i]._encoding);
|
buf->setEncoding(session._mainViewFiles[i]._encoding);
|
||||||
|
|
||||||
|
buf->setUserReadOnly(session._mainViewFiles[i]._isUserReadOnly);
|
||||||
|
|
||||||
if (isSnapshotMode && session._mainViewFiles[i]._backupFilePath != TEXT("") && PathFileExists(session._mainViewFiles[i]._backupFilePath.c_str()))
|
if (isSnapshotMode && session._mainViewFiles[i]._backupFilePath != TEXT("") && PathFileExists(session._mainViewFiles[i]._backupFilePath.c_str()))
|
||||||
buf->setDirty(true);
|
buf->setDirty(true);
|
||||||
|
|
||||||
@ -1831,6 +1833,7 @@ bool Notepad_plus::loadSession(Session & session, bool isSnapshotMode)
|
|||||||
}
|
}
|
||||||
buf->setLangType(typeToSet, pLn);
|
buf->setLangType(typeToSet, pLn);
|
||||||
buf->setEncoding(session._subViewFiles[k]._encoding);
|
buf->setEncoding(session._subViewFiles[k]._encoding);
|
||||||
|
buf->setUserReadOnly(session._mainViewFiles[k]._isUserReadOnly);
|
||||||
|
|
||||||
if (isSnapshotMode && session._subViewFiles[k]._backupFilePath != TEXT("") && PathFileExists(session._subViewFiles[k]._backupFilePath.c_str()))
|
if (isSnapshotMode && session._subViewFiles[k]._backupFilePath != TEXT("") && PathFileExists(session._subViewFiles[k]._backupFilePath.c_str()))
|
||||||
buf->setDirty(true);
|
buf->setDirty(true);
|
||||||
|
@ -2122,7 +2122,12 @@ bool NppParameters::getSessionFromXmlTree(TiXmlDocument *pSessionDoc, Session *p
|
|||||||
(childNode->ToElement())->Attribute(TEXT("originalFileLastModifTimestamp"), reinterpret_cast<int32_t*>(&fileModifiedTimestamp.dwLowDateTime));
|
(childNode->ToElement())->Attribute(TEXT("originalFileLastModifTimestamp"), reinterpret_cast<int32_t*>(&fileModifiedTimestamp.dwLowDateTime));
|
||||||
(childNode->ToElement())->Attribute(TEXT("originalFileLastModifTimestampHigh"), reinterpret_cast<int32_t*>(&fileModifiedTimestamp.dwHighDateTime));
|
(childNode->ToElement())->Attribute(TEXT("originalFileLastModifTimestampHigh"), reinterpret_cast<int32_t*>(&fileModifiedTimestamp.dwHighDateTime));
|
||||||
|
|
||||||
sessionFileInfo sfi(fileName, langName, encStr?encoding:-1, position, backupFilePath, fileModifiedTimestamp, mapPosition);
|
bool isUserReadOnly = false;
|
||||||
|
const TCHAR *boolStrReadOnly = (childNode->ToElement())->Attribute(TEXT("userReadOnly"));
|
||||||
|
if (boolStrReadOnly)
|
||||||
|
isUserReadOnly = _wcsicmp(TEXT("yes"), boolStrReadOnly) == 0;
|
||||||
|
|
||||||
|
sessionFileInfo sfi(fileName, langName, encStr ? encoding : -1, isUserReadOnly, position, backupFilePath, fileModifiedTimestamp, mapPosition);
|
||||||
|
|
||||||
for (TiXmlNode *markNode = childNode->FirstChildElement(TEXT("Mark"));
|
for (TiXmlNode *markNode = childNode->FirstChildElement(TEXT("Mark"));
|
||||||
markNode ;
|
markNode ;
|
||||||
@ -3137,6 +3142,7 @@ void NppParameters::writeSession(const Session & session, const TCHAR *fileName)
|
|||||||
(fileNameNode->ToElement())->SetAttribute(TEXT("selMode"), viewSessionFiles[i]._selMode);
|
(fileNameNode->ToElement())->SetAttribute(TEXT("selMode"), viewSessionFiles[i]._selMode);
|
||||||
(fileNameNode->ToElement())->SetAttribute(TEXT("lang"), viewSessionFiles[i]._langName.c_str());
|
(fileNameNode->ToElement())->SetAttribute(TEXT("lang"), viewSessionFiles[i]._langName.c_str());
|
||||||
(fileNameNode->ToElement())->SetAttribute(TEXT("encoding"), viewSessionFiles[i]._encoding);
|
(fileNameNode->ToElement())->SetAttribute(TEXT("encoding"), viewSessionFiles[i]._encoding);
|
||||||
|
(fileNameNode->ToElement())->SetAttribute(TEXT("userReadOnly"), (viewSessionFiles[i]._isUserReadOnly && !viewSessionFiles[i]._isMonitoring) ? TEXT("yes") : TEXT("no"));
|
||||||
(fileNameNode->ToElement())->SetAttribute(TEXT("filename"), viewSessionFiles[i]._fileName.c_str());
|
(fileNameNode->ToElement())->SetAttribute(TEXT("filename"), viewSessionFiles[i]._fileName.c_str());
|
||||||
(fileNameNode->ToElement())->SetAttribute(TEXT("backupFilePath"), viewSessionFiles[i]._backupFilePath.c_str());
|
(fileNameNode->ToElement())->SetAttribute(TEXT("backupFilePath"), viewSessionFiles[i]._backupFilePath.c_str());
|
||||||
(fileNameNode->ToElement())->SetAttribute(TEXT("originalFileLastModifTimestamp"), static_cast<int32_t>(viewSessionFiles[i]._originalFileLastModifTimestamp.dwLowDateTime));
|
(fileNameNode->ToElement())->SetAttribute(TEXT("originalFileLastModifTimestamp"), static_cast<int32_t>(viewSessionFiles[i]._originalFileLastModifTimestamp.dwLowDateTime));
|
||||||
|
@ -162,8 +162,8 @@ private:
|
|||||||
|
|
||||||
struct sessionFileInfo : public Position
|
struct sessionFileInfo : public Position
|
||||||
{
|
{
|
||||||
sessionFileInfo(const TCHAR *fn, const TCHAR *ln, int encoding, const Position& pos, const TCHAR *backupFilePath, FILETIME originalFileLastModifTimestamp, const MapPosition & mapPos) :
|
sessionFileInfo(const TCHAR *fn, const TCHAR *ln, int encoding, bool userReadOnly, const Position& pos, const TCHAR *backupFilePath, FILETIME originalFileLastModifTimestamp, const MapPosition & mapPos) :
|
||||||
_encoding(encoding), Position(pos), _originalFileLastModifTimestamp(originalFileLastModifTimestamp), _mapPos(mapPos)
|
_isUserReadOnly(userReadOnly), _encoding(encoding), Position(pos), _originalFileLastModifTimestamp(originalFileLastModifTimestamp), _mapPos(mapPos)
|
||||||
{
|
{
|
||||||
if (fn) _fileName = fn;
|
if (fn) _fileName = fn;
|
||||||
if (ln) _langName = ln;
|
if (ln) _langName = ln;
|
||||||
@ -177,6 +177,8 @@ struct sessionFileInfo : public Position
|
|||||||
std::vector<size_t> _marks;
|
std::vector<size_t> _marks;
|
||||||
std::vector<size_t> _foldStates;
|
std::vector<size_t> _foldStates;
|
||||||
int _encoding = -1;
|
int _encoding = -1;
|
||||||
|
bool _isUserReadOnly = false;
|
||||||
|
bool _isMonitoring = false;
|
||||||
|
|
||||||
generic_string _backupFilePath;
|
generic_string _backupFilePath;
|
||||||
FILETIME _originalFileLastModifTimestamp = {};
|
FILETIME _originalFileLastModifTimestamp = {};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user