Fix a single undo reverting many changes issue

Fix mismatched SCI_BEGINUNDOACTION:
When there is a SCI_BEGINUNDOACTION without the corresponding SCI_ENDUNDOACTION, it then causes that a single undo reverts many changes in at once.

Fix #9426, close #15577
This commit is contained in:
xomx 2024-08-24 23:20:22 +02:00 committed by Don Ho
parent fb11abc5c0
commit d2bb7a2af6

View File

@ -1251,7 +1251,6 @@ void Notepad_plus::setCodePageForInvisibleView(Buffer const *pBuffer)
bool Notepad_plus::replaceInOpenedFiles() bool Notepad_plus::replaceInOpenedFiles()
{ {
ScintillaEditView *pOldView = _pEditView; ScintillaEditView *pOldView = _pEditView;
_pEditView = &_invisibleEditView; _pEditView = &_invisibleEditView;
Document oldDoc = _invisibleEditView.execute(SCI_GETDOCPOINTER); Document oldDoc = _invisibleEditView.execute(SCI_GETDOCPOINTER);
@ -1263,10 +1262,10 @@ bool Notepad_plus::replaceInOpenedFiles()
const bool isEntireDoc = true; const bool isEntireDoc = true;
bool hasInvalidRegExpr = false; bool hasInvalidRegExpr = false;
if (_mainWindowStatus & WindowMainActive) if (_mainWindowStatus & WindowMainActive)
{ {
for (size_t i = 0, len = _mainDocTab.nbItem(); i < len ; ++i) for (size_t i = 0, len = _mainDocTab.nbItem(); i < len ; ++i)
{ {
pBuf = MainFileManager.getBufferByID(_mainDocTab.getBufferByIndex(i)); pBuf = MainFileManager.getBufferByID(_mainDocTab.getBufferByIndex(i));
if (pBuf->isReadOnly()) if (pBuf->isReadOnly())
continue; continue;
@ -1278,6 +1277,7 @@ bool Notepad_plus::replaceInOpenedFiles()
_invisibleEditView.execute(SCI_BEGINUNDOACTION); _invisibleEditView.execute(SCI_BEGINUNDOACTION);
int nb = _findReplaceDlg.processAll(ProcessReplaceAll, FindReplaceDlg::_env, isEntireDoc); int nb = _findReplaceDlg.processAll(ProcessReplaceAll, FindReplaceDlg::_env, isEntireDoc);
_invisibleEditView.execute(SCI_ENDUNDOACTION);
if (nb == FIND_INVALID_REGULAR_EXPRESSION) if (nb == FIND_INVALID_REGULAR_EXPRESSION)
{ {
hasInvalidRegExpr = true; hasInvalidRegExpr = true;
@ -1287,7 +1287,6 @@ bool Notepad_plus::replaceInOpenedFiles()
{ {
nbTotal += nb; nbTotal += nb;
} }
_invisibleEditView.execute(SCI_ENDUNDOACTION);
} }
} }
@ -1314,6 +1313,7 @@ bool Notepad_plus::replaceInOpenedFiles()
_invisibleEditView.execute(SCI_BEGINUNDOACTION); _invisibleEditView.execute(SCI_BEGINUNDOACTION);
int nb = _findReplaceDlg.processAll(ProcessReplaceAll, FindReplaceDlg::_env, isEntireDoc); int nb = _findReplaceDlg.processAll(ProcessReplaceAll, FindReplaceDlg::_env, isEntireDoc);
_invisibleEditView.execute(SCI_ENDUNDOACTION);
if (nb == FIND_INVALID_REGULAR_EXPRESSION) if (nb == FIND_INVALID_REGULAR_EXPRESSION)
{ {
hasInvalidRegExpr = true; hasInvalidRegExpr = true;
@ -1323,7 +1323,6 @@ bool Notepad_plus::replaceInOpenedFiles()
{ {
nbTotal += nb; nbTotal += nb;
} }
_invisibleEditView.execute(SCI_ENDUNDOACTION);
} }
} }
@ -1352,6 +1351,7 @@ bool Notepad_plus::replaceInOpenedFiles()
} }
_findReplaceDlg.setStatusbarMessage(result, FSMessage); _findReplaceDlg.setStatusbarMessage(result, FSMessage);
} }
return true; return true;
} }