mirror of
https://github.com/notepad-plus-plus/notepad-plus-plus.git
synced 2025-07-28 08:14:18 +02:00
Optimize switching programming language performance for large files
Fix #16106, close #16109
This commit is contained in:
parent
706d7ae6de
commit
b2152d983e
@ -3872,39 +3872,31 @@ BOOL Notepad_plus::processTabSwitchAccel(MSG* msg) const
|
||||
|
||||
void Notepad_plus::setLanguage(LangType langType)
|
||||
{
|
||||
//Add logic to prevent changing a language when a document is shared between two views
|
||||
//If so, release one document
|
||||
bool reset = false;
|
||||
Document prev = 0;
|
||||
unsigned long MODEVENTMASK_ON = NppParameters::getInstance().getScintillaModEventMask();
|
||||
if (bothActive())
|
||||
{
|
||||
if (_mainEditView.getCurrentBufferID() == _subEditView.getCurrentBufferID())
|
||||
{
|
||||
reset = true;
|
||||
_subEditView.saveCurrentPos();
|
||||
prev = _subEditView.execute(SCI_GETDOCPOINTER);
|
||||
_subEditView.execute(SCI_SETMODEVENTMASK, MODEVENTMASK_OFF);
|
||||
_subEditView.execute(SCI_SETDOCPOINTER, 0, 0);
|
||||
_subEditView.execute(SCI_SETMODEVENTMASK, MODEVENTMASK_ON);
|
||||
}
|
||||
}
|
||||
|
||||
if (reset)
|
||||
if (bothActive() && (_mainEditView.getCurrentBufferID() == _subEditView.getCurrentBufferID()))
|
||||
{
|
||||
_mainEditView.getCurrentBuffer()->setLangType(langType);
|
||||
// Add logic to prevent changing a language when a document is shared between two views
|
||||
// If so, release one document
|
||||
|
||||
_subEditView.saveCurrentPos();
|
||||
Document subPrev = _subEditView.execute(SCI_GETDOCPOINTER);
|
||||
_subEditView.execute(SCI_SETMODEVENTMASK, MODEVENTMASK_OFF);
|
||||
_subEditView.execute(SCI_SETDOCPOINTER, 0, 0);
|
||||
_subEditView.execute(SCI_SETMODEVENTMASK, MODEVENTMASK_ON);
|
||||
|
||||
_mainEditView.setLanguage(langType);
|
||||
|
||||
_subEditView.execute(SCI_SETMODEVENTMASK, MODEVENTMASK_OFF);
|
||||
_subEditView.execute(SCI_SETDOCPOINTER, 0, subPrev);
|
||||
_subEditView.execute(SCI_SETMODEVENTMASK, MODEVENTMASK_ON);
|
||||
_subEditView.maintainStateForNpc();
|
||||
_subEditView.setCRLF();
|
||||
_subEditView.restoreCurrentPosPreStep();
|
||||
}
|
||||
else
|
||||
{
|
||||
_pEditView->getCurrentBuffer()->setLangType(langType);
|
||||
}
|
||||
|
||||
if (reset)
|
||||
{
|
||||
_subEditView.execute(SCI_SETMODEVENTMASK, MODEVENTMASK_OFF);
|
||||
_subEditView.execute(SCI_SETDOCPOINTER, 0, prev);
|
||||
_subEditView.execute(SCI_SETMODEVENTMASK, MODEVENTMASK_ON);
|
||||
_subEditView.restoreCurrentPosPreStep();
|
||||
_pEditView->setLanguage(langType);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1707,6 +1707,34 @@ void ScintillaEditView::setNpcAndCcUniEOL(long color)
|
||||
redraw();
|
||||
}
|
||||
|
||||
void ScintillaEditView::setLanguage(LangType langType)
|
||||
{
|
||||
unsigned long MODEVENTMASK_ON = NppParameters::getInstance().getScintillaModEventMask();
|
||||
|
||||
if (_currentBuffer->getLastLangType() != -1)
|
||||
{
|
||||
saveCurrentPos();
|
||||
Document prev = execute(SCI_GETDOCPOINTER);
|
||||
execute(SCI_SETMODEVENTMASK, MODEVENTMASK_OFF);
|
||||
execute(SCI_SETDOCPOINTER, 0, getBlankDocument());
|
||||
execute(SCI_SETMODEVENTMASK, MODEVENTMASK_ON);
|
||||
|
||||
_currentBuffer->setLangType(langType);
|
||||
|
||||
execute(SCI_SETMODEVENTMASK, MODEVENTMASK_OFF);
|
||||
execute(SCI_SETDOCPOINTER, 0, prev);
|
||||
execute(SCI_SETMODEVENTMASK, MODEVENTMASK_ON);
|
||||
|
||||
maintainStateForNpc();
|
||||
setCRLF();
|
||||
restoreCurrentPosPreStep();
|
||||
}
|
||||
else
|
||||
{
|
||||
_currentBuffer->setLangType(langType);
|
||||
}
|
||||
}
|
||||
|
||||
void ScintillaEditView::defineDocType(LangType typeDoc)
|
||||
{
|
||||
StyleArray & stylers = NppParameters::getInstance().getMiscStylerArray();
|
||||
|
@ -845,6 +845,7 @@ public:
|
||||
typeDoc == L_ASN1 || typeDoc == L_GDSCRIPT);
|
||||
};
|
||||
|
||||
void setLanguage(LangType langType);
|
||||
void defineDocType(LangType typeDoc); //setup stylers for active document
|
||||
|
||||
void addCustomWordChars();
|
||||
|
Loading…
x
Reference in New Issue
Block a user