mirror of
https://github.com/notepad-plus-plus/notepad-plus-plus.git
synced 2025-07-28 16:24:27 +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)
|
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();
|
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
|
else
|
||||||
{
|
{
|
||||||
_pEditView->getCurrentBuffer()->setLangType(langType);
|
_pEditView->setLanguage(langType);
|
||||||
}
|
|
||||||
|
|
||||||
if (reset)
|
|
||||||
{
|
|
||||||
_subEditView.execute(SCI_SETMODEVENTMASK, MODEVENTMASK_OFF);
|
|
||||||
_subEditView.execute(SCI_SETDOCPOINTER, 0, prev);
|
|
||||||
_subEditView.execute(SCI_SETMODEVENTMASK, MODEVENTMASK_ON);
|
|
||||||
_subEditView.restoreCurrentPosPreStep();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1707,6 +1707,34 @@ void ScintillaEditView::setNpcAndCcUniEOL(long color)
|
|||||||
redraw();
|
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)
|
void ScintillaEditView::defineDocType(LangType typeDoc)
|
||||||
{
|
{
|
||||||
StyleArray & stylers = NppParameters::getInstance().getMiscStylerArray();
|
StyleArray & stylers = NppParameters::getInstance().getMiscStylerArray();
|
||||||
|
@ -845,6 +845,7 @@ public:
|
|||||||
typeDoc == L_ASN1 || typeDoc == L_GDSCRIPT);
|
typeDoc == L_ASN1 || typeDoc == L_GDSCRIPT);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void setLanguage(LangType langType);
|
||||||
void defineDocType(LangType typeDoc); //setup stylers for active document
|
void defineDocType(LangType typeDoc); //setup stylers for active document
|
||||||
|
|
||||||
void addCustomWordChars();
|
void addCustomWordChars();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user