From 08e3630a23f530c63647ad929c2c3b2ea7c94997 Mon Sep 17 00:00:00 2001 From: "METANEOCORTEX\\Kotti" Date: Fri, 16 Dec 2022 11:22:16 +0100 Subject: [PATCH] +chg: replacing SCI_REPLACETARGET calls by SCI_REPLACETARGETMINIMAL calls where appropriate - should minimize change history markers on text formatting, especially on file reload --- src/Config/Config.cpp | 24 +++++++++---- src/Edit.c | 80 ++++++++++++++++++++----------------------- src/Edit.h | 4 +-- src/Notepad3.c | 48 ++++++-------------------- src/SciCall.h | 1 + src/TypeDefs.h | 4 +-- 6 files changed, 71 insertions(+), 90 deletions(-) diff --git a/src/Config/Config.cpp b/src/Config/Config.cpp index 456fe6dcf..d3b0ba5a0 100644 --- a/src/Config/Config.cpp +++ b/src/Config/Config.cpp @@ -2769,7 +2769,7 @@ bool MRU_MergeSave(LPMRULIST pmru, bool bAddFiles, bool bRelativePath, bool bUne // #if TRUE -static bool CreateNewDocument(const char* lpstrText, DocPosU lenText, int docOptions) +static bool CreateNewDocument(const char* lpstrText, DocPosU lenText, int docOptions, bool reload) { #define RELEASE_RETURN(ret) { pDocLoad->Release(); return(ret); } @@ -2785,7 +2785,11 @@ static bool CreateNewDocument(const char* lpstrText, DocPosU lenText, int docOpt SciCall_SetDocPointer(0); } SciCall_TargetWholeDocument(); - SciCall_ReplaceTarget(lenText, lpstrText); + if (reload) { + SciCall_ReplaceTargetMinimal(lenText, lpstrText); + } else { + SciCall_ReplaceTarget(lenText, lpstrText); + } } return true; } @@ -2797,14 +2801,18 @@ static bool CreateNewDocument(const char* lpstrText, DocPosU lenText, int docOpt SciCall_ClearAll(); } else { SciCall_TargetWholeDocument(); - SciCall_ReplaceTarget(lenText, lpstrText); + if (reload) { + SciCall_ReplaceTargetMinimal(lenText, lpstrText); + } else { + SciCall_ReplaceTarget(lenText, lpstrText); + } } return true; } #endif -extern "C" bool EditSetDocumentBuffer(const char* lpstrText, DocPosU lenText) +extern "C" bool EditSetDocumentBuffer(const char* lpstrText, DocPosU lenText, bool reload) { bool const bLargerThan2GB = (lenText >= ((DocPosU)INT32_MAX)); bool const bLargeFileLoaded = (lenText >= ((DocPosU)Settings2.FileLoadWarningMB << 20)); @@ -2813,13 +2821,17 @@ extern "C" bool EditSetDocumentBuffer(const char* lpstrText, DocPosU lenText) if (SciCall_GetDocumentOptions() != docOptions) { // we have to create a new document with changed options - return CreateNewDocument(lpstrText, lenText, docOptions); + return CreateNewDocument(lpstrText, lenText, docOptions, reload); } if (!lpstrText || (lenText == 0)) { SciCall_ClearAll(); } else { SciCall_TargetWholeDocument(); - SciCall_ReplaceTarget(lenText, lpstrText); + if (reload) { + SciCall_ReplaceTargetMinimal(lenText, lpstrText); + } else { + SciCall_ReplaceTarget(lenText, lpstrText); + } } return true; } diff --git a/src/Edit.c b/src/Edit.c index 1abb66855..1a38b1754 100644 --- a/src/Edit.c +++ b/src/Edit.c @@ -401,7 +401,7 @@ void EditInitWordDelimiter(HWND hwnd) // extern bool s_bFreezeAppTitle; -void EditSetNewText(HWND hwnd, const char* lpstrText, DocPosU lenText, bool bClearUndoHistory) +void EditSetNewText(HWND hwnd, const char* lpstrText, DocPosU lenText, bool bClearUndoHistory, bool bReload) { if (!lpstrText) { lenText = 0; @@ -420,9 +420,7 @@ void EditSetNewText(HWND hwnd, const char* lpstrText, DocPosU lenText, bool bCle UndoTransActionBegin(); SciCall_Cancel(); - if (SciCall_GetReadOnly()) { - SciCall_SetReadOnly(false); - } + SciCall_SetReadOnly(false); EditClearAllBookMarks(hwnd); EditClearAllOccurrenceMarkers(hwnd); SciCall_SetScrollWidth(1); @@ -430,7 +428,7 @@ void EditSetNewText(HWND hwnd, const char* lpstrText, DocPosU lenText, bool bCle FileVars_Apply(&Globals.fvCurFile); - EditSetDocumentBuffer(lpstrText, lenText); + EditSetDocumentBuffer(lpstrText, lenText, bReload); Sci_GotoPosChooseCaret(0); @@ -486,7 +484,7 @@ bool EditConvertText(HWND hwnd, cpi_enc_t encSource, cpi_enc_t encDest) DocPos const length = SciCall_GetTextLength(); if (length <= 0) { - EditSetNewText(hwnd, "", 0, false); + EditSetNewText(hwnd, "", 0, false, false); Encoding_Current(encDest); return true; } @@ -517,7 +515,7 @@ bool EditConvertText(HWND hwnd, cpi_enc_t encSource, cpi_enc_t encDest) if (pchText) { WideCharToMultiByteEx(Encoding_SciCP, 0, pwchText, -1, pchText, cbText, NULL, NULL); FreeMem(pwchText); - EditSetNewText(hwnd, pchText, (cbText - 1), true); + EditSetNewText(hwnd, pchText, (cbText - 1), true, false); Encoding_Current(encDest); FreeMem(pchText); return true; @@ -1151,6 +1149,8 @@ bool EditLoadFile( status->bEncryptedRaw = false; Flags.bHugeFileLoadState = false; + bool const bReloadFile = (fLoadFlags & FLF_Reload); + WCHAR wchFName[64]; Path_GetDisplayName(wchFName, COUNTOF(wchFName), hfile_pth, L"...", true); WCHAR wchMsg[128]; @@ -1278,7 +1278,7 @@ bool EditLoadFile( if (cbData == 0) { FileVars_GetFromData(NULL, 0, &Globals.fvCurFile); // init-reset status->iEOLMode = Settings.DefaultEOLMode; - EditSetNewText(hwnd, "", 0, false); + EditSetNewText(hwnd, "", 0, false, false); SciCall_SetEOLMode(Settings.DefaultEOLMode); Encoding_Forced(CPI_NONE); FreeMem(lpData); @@ -1295,9 +1295,9 @@ bool EditLoadFile( status->iEOLMode = Settings.DefaultEOLMode; if (bIsUTF8Sig) { - EditSetNewText(hwnd, UTF8StringStart(lpData), cbData - 3, bClearUndoHistory); + EditSetNewText(hwnd, UTF8StringStart(lpData), cbData - 3, bClearUndoHistory, bReloadFile); } else { - EditSetNewText(hwnd, lpData, cbData, bClearUndoHistory); + EditSetNewText(hwnd, lpData, cbData, bClearUndoHistory, bReloadFile); } SciCall_SetEOLMode(Settings.DefaultEOLMode); @@ -1365,7 +1365,7 @@ bool EditLoadFile( } FileVars_GetFromData(lpDataUTF8, convCnt - 1, &Globals.fvCurFile); - EditSetNewText(hwnd, lpDataUTF8, convCnt - 1, bClearUndoHistory); + EditSetNewText(hwnd, lpDataUTF8, convCnt - 1, bClearUndoHistory, bReloadFile); EditDetectEOLMode(lpDataUTF8, convCnt - 1, status); FreeMem(lpDataUTF8); @@ -1380,18 +1380,18 @@ bool EditLoadFile( if (bForcedUTF8 || (!bRejectUTF8 && (encDetection.bIsUTF8Sig || bAnalysisUTF8))) { if (encDetection.bIsUTF8Sig) { - EditSetNewText(hwnd, UTF8StringStart(lpData), cbData - 3, bClearUndoHistory); + EditSetNewText(hwnd, UTF8StringStart(lpData), cbData - 3, bClearUndoHistory, bReloadFile); status->iEncoding = CPI_UTF8SIGN; EditDetectEOLMode(UTF8StringStart(lpData), cbData - 3, status); } else { - EditSetNewText(hwnd, lpData, cbData, bClearUndoHistory); + EditSetNewText(hwnd, lpData, cbData, bClearUndoHistory, bReloadFile); status->iEncoding = CPI_UTF8; EditDetectEOLMode(lpData, cbData, status); } } else if (!IS_ENC_ENFORCED() && (encDetection.bPureASCII7Bit && !encDetection.bHasUnicodeNullBytes)) { // load ASCII(7-bit) as ANSI/UTF-8 - EditSetNewText(hwnd, lpData, cbData, bClearUndoHistory); + EditSetNewText(hwnd, lpData, cbData, bClearUndoHistory, bReloadFile); status->iEncoding = (Settings.LoadASCIIasUTF8 ? CPI_UTF8 : CPI_ANSI_DEFAULT); EditDetectEOLMode(lpData, cbData, status); } else { // === ALL OTHER NON UTF-8 === @@ -1409,7 +1409,7 @@ bool EditLoadFile( cbData = WideCharToMultiByteEx(Encoding_SciCP, 0, lpDataWide, cbDataWide, lpData, SizeOfMem(lpData), NULL, NULL); if (cbData != 0) { - EditSetNewText(hwnd, lpData, cbData, bClearUndoHistory); + EditSetNewText(hwnd, lpData, cbData, bClearUndoHistory, bReloadFile); EditDetectEOLMode(lpData, cbData, status); FreeMem(lpDataWide); } else { @@ -1427,7 +1427,7 @@ bool EditLoadFile( goto observe; } } else { - EditSetNewText(hwnd, lpData, cbData, bClearUndoHistory); + EditSetNewText(hwnd, lpData, cbData, bClearUndoHistory, bReloadFile); EditDetectEOLMode(lpData, cbData, status); } } @@ -1926,7 +1926,7 @@ void EditURLEncode(const bool isPathConvert) UndoTransActionBegin(); SciCall_TargetFromSelection(); - SciCall_ReplaceTarget(cchEscapedEnc, pszEscaped); + SciCall_ReplaceTargetMinimal(cchEscapedEnc, pszEscaped); EditSetAndScrollSelection(iSelStart, iSelStart + cchEscapedEnc, bStraightSel); @@ -2003,7 +2003,7 @@ void EditURLDecode(const bool isPathConvert) UndoTransActionBegin(); SciCall_TargetFromSelection(); - SciCall_ReplaceTarget(cchUnescapedDec, pszUnescaped); + SciCall_ReplaceTargetMinimal(cchUnescapedDec, pszUnescaped); EditSetAndScrollSelection(iSelStart, iSelStart + cchUnescapedDec, bStraightSel); @@ -2058,7 +2058,7 @@ void EditReplaceAllChr(const WCHAR chSearch, const WCHAR chReplace) { UndoTransActionBegin(); SciCall_TargetFromSelection(); - SciCall_ReplaceTarget(cchRepl, pchReplace); + SciCall_ReplaceTargetMinimal(cchRepl, pchReplace); EditSetAndScrollSelection(iSelStart, iSelEnd, bStraightSel); @@ -2131,7 +2131,6 @@ void EditBase64Code(HWND hwnd, const bool bEncode, cpi_enc_t cpi) { UndoTransActionBegin(); SciCall_TargetFromSelection(); - DocPos const len = (base64Size ? SciCall_ReplaceTarget(base64Size, pBase64CodedTxt) : SciCall_ReplaceTarget(0, "")); FreeMem(pBase64CodedTxt); @@ -2681,7 +2680,7 @@ void EditTabsToSpaces(int nTabWidth,bool bOnlyIndentingWS) UndoTransActionBegin(); SciCall_SetTargetRange(iSelStart, iSelEnd); - SciCall_ReplaceTarget(cchConvM, pszText2); + SciCall_ReplaceTargetMinimal(cchConvM, pszText2); EditSetSelectionEx(iAnchorPos, iCurPos, -1, -1); EndUndoTransAction(); FreeMem(pszText2); @@ -2793,7 +2792,7 @@ void EditSpacesToTabs(int nTabWidth,bool bOnlyIndentingWS) UndoTransActionBegin(); SciCall_SetTargetRange(iSelStart, iSelEnd); - SciCall_ReplaceTarget(cchConvM, pszText2); + SciCall_ReplaceTargetMinimal(cchConvM, pszText2); EditSetSelectionEx(iAnchorPos, iCurPos, -1, -1); EndUndoTransAction(); FreeMem(pszText2); @@ -3322,7 +3321,6 @@ void EditModifyLines(const PENCLOSESELDATA pEnclData) { } EndUndoTransAction(); - } @@ -3566,7 +3564,7 @@ void EditAlignText(int nMode) ptrdiff_t const cch = WideCharToMultiByteEx(Encoding_SciCP, 0, wchNewLineBuf, -1, chNewLineBuf, (int)iBufCount, NULL, NULL) - 1; SciCall_SetTargetRange(SciCall_PositionFromLine(iLine), SciCall_GetLineEndPosition(iLine)); - SciCall_ReplaceTarget(cch, chNewLineBuf); + SciCall_ReplaceTargetMinimal(cch, chNewLineBuf); SciCall_SetLineIndentation(iLine, iMinIndent); } else { chNewLineBuf[0] = '\0'; @@ -3612,7 +3610,7 @@ void EditAlignText(int nMode) iPos = SciCall_PositionFromLine(iLine); } SciCall_SetTargetRange(iPos, SciCall_GetLineEndPosition(iLine)); - SciCall_ReplaceTarget(cch, chNewLineBuf); + SciCall_ReplaceTargetMinimal(cch, chNewLineBuf); if (nMode == ALIGN_LEFT) { SciCall_SetLineIndentation(iLine, iMinIndent); @@ -3678,12 +3676,12 @@ void EditEncloseSelection(LPCWSTR pszOpen, LPCWSTR pszClose) { if (iLenOpen > 0) { SciCall_SetTargetRange(iSelStart, iSelStart); - SciCall_ReplaceTarget(-1, mszOpen); + SciCall_ReplaceTargetMinimal(-1, mszOpen); } if (iLenClose > 0) { SciCall_SetTargetRange(iSelEnd + iLenOpen, iSelEnd + iLenOpen); - SciCall_ReplaceTarget(-1, mszClose); + SciCall_ReplaceTargetMinimal(-1, mszClose); } // Move selection @@ -3790,7 +3788,7 @@ void EditToggleLineCommentsSimple(LPCWSTR pwszComment, bool bInsertAtStart, LnCm DocPos const cch = bHasLnCmnt ? cchComment : cchPrefix; DocPos const iSelPos = iIndentPos + cch; SciCall_SetTargetRange(iIndentPos, iSelPos); - SciCall_ReplaceTarget(-1, ""); + SciCall_ReplaceTarget(0, ""); if (iLine == iLineStart) { iSelStartOffset -= (iSelStart <= iIndentPos) ? 0 : (iSelStart < iSelPos) ? (iSelStart - iIndentPos) : cch; @@ -3898,7 +3896,7 @@ void EditToggleLineCommentsExtended(LPCWSTR pwszComment, bool bInsertAtStart) iAction = 2; case 2: SciCall_SetTargetRange(iIndentPos, iSelPos); - SciCall_ReplaceTarget(-1, ""); + SciCall_ReplaceTarget(0, ""); utarray_push_back(sel_positions, &iIndentPos); break; case 1: @@ -3976,7 +3974,7 @@ static DocPos _AppendSpaces(HWND hwnd, DocLn iLineStart, DocLn iLineEnd, DocPos pmszPadStr[iPadLen] = '\0'; // slice SciCall_SetTargetRange(iPos, iPos); - SciCall_ReplaceTarget(-1, pmszPadStr); // pad + SciCall_ReplaceTargetMinimal(-1, pmszPadStr); // pad pmszPadStr[iPadLen] = ' '; // reset spcCount += iPadLen; @@ -4138,7 +4136,7 @@ void EditStripFirstCharacter(HWND hwnd) if (len > 0) { StringCchCopyNA(lineBuffer, SizeOfMem(lineBuffer), SciCall_GetRangePointer(nextPos, len + 1), len); SciCall_SetTargetRange(selTargetStart, selTargetEnd); - SciCall_ReplaceTarget(len, lineBuffer); + SciCall_ReplaceTargetMinimal(len, lineBuffer); } remCount += (nextPos - selTargetStart); } // for() @@ -4233,7 +4231,7 @@ void EditStripLastCharacter(HWND hwnd, bool bIgnoreSelection, bool bTrailingBlan } diff = len - (++i); SciCall_SetTargetRange(selTargetStart, selTargetEnd); - SciCall_ReplaceTarget(-1, lineBuffer); + SciCall_ReplaceTargetMinimal(-1, lineBuffer); } } else { DocPos const prevPos = SciCall_PositionBefore(selTargetEnd); @@ -4242,7 +4240,7 @@ void EditStripLastCharacter(HWND hwnd, bool bIgnoreSelection, bool bTrailingBlan if (len > 0) { StringCchCopyNA(lineBuffer, iMaxLineLen, SciCall_GetRangePointer(selTargetStart, len + 1), len); SciCall_SetTargetRange(selTargetStart, selTargetEnd); - SciCall_ReplaceTarget(len, lineBuffer); + SciCall_ReplaceTargetMinimal(len, lineBuffer); } } remCount += diff; @@ -4351,7 +4349,7 @@ void EditCompressBlanks() lineBuffer[i] = '\0'; diff = len - i; SciCall_SetTargetRange(selTargetStart, selTargetEnd); - SciCall_ReplaceTarget(-1, lineBuffer); + SciCall_ReplaceTargetMinimal(-1, lineBuffer); } remCount += diff; } // for() @@ -4437,7 +4435,7 @@ void EditCompressBlanks() } else { SciCall_TargetWholeDocument(); } - SciCall_ReplaceTarget(-1, pszOut); + SciCall_ReplaceTargetMinimal(-1, pszOut); DocPos const iNewLen = (DocPos)StringCchLenA(pszOut, SizeOfMem(pszOut)); @@ -4856,7 +4854,7 @@ void EditWrapToColumn(DocPosU nColumn) UndoTransActionBegin(); SciCall_SetTargetRange(iSelStart, iSelEnd); - SciCall_ReplaceTarget(cchConvM, pszText); + SciCall_ReplaceTargetMinimal(cchConvM, pszText); EditSetSelectionEx(iAnchorPos, iCurPos, -1, -1); EndUndoTransAction(); @@ -4994,7 +4992,7 @@ void EditJoinLinesEx(bool bPreserveParagraphs, bool bCRLF2Space) UndoTransActionBegin(); SciCall_SetTargetRange(iSelStart, iSelEnd); - SciCall_ReplaceTarget(cchJoin, pszJoin); + SciCall_ReplaceTargetMinimal(cchJoin, pszJoin); EditSetSelectionEx(iAnchorPos, iCurPos, -1, -1); EndUndoTransAction(); @@ -5318,7 +5316,7 @@ void EditSortLines(HWND hwnd, int iSortFlags) //SciCall_SetTargetRange(SciCall_PositionFromLine(iLineStart), SciCall_PositionFromLine(iLineEnd + 1)); SciCall_SetTargetRange(SciCall_PositionFromLine(iLineStart), SciCall_GetLineEndPosition(iLineEnd)); - SciCall_ReplaceTarget(-1, pmszResult); + SciCall_ReplaceTargetMinimal(-1, pmszResult); FreeMem(pmszResult); if (bIsMultiSel) { EditSetSelectionEx(iAnchorPos, iCurPos, iAnchorPosVS, iCurPosVS); @@ -6012,11 +6010,7 @@ static RegExResult_t _FindHasMatch(HWND hwnd, const LPEDITFINDREPLACE lpefr, Doc // static void _DelayMarkAll(int delay) { - static CmdMessageQueue_t mqc = MQ_WM_CMD_INIT(IDT_TIMER_CALLBACK_MRKALL, 0LL); - if (mqc.hwnd != Globals.hwndDlgFindReplace) { - mqc.hwnd = Globals.hwndDlgFindReplace; - //mqc.lparam = 0LL; // start position always 0 - } + CmdMessageQueue_t mqc = MQ_WM_CMD_INIT(Globals.hwndDlgFindReplace, IDT_TIMER_CALLBACK_MRKALL, 0LL); _MQ_AppendCmd(&mqc, _MQ_ms2cycl(delay)); } diff --git a/src/Edit.h b/src/Edit.h index 6b5966d7b..f616d1910 100644 --- a/src/Edit.h +++ b/src/Edit.h @@ -27,7 +27,7 @@ void ReleaseEFR(LPEDITFINDREPLACE efr); void EditInitializeSciCtrl(HWND); void EditReplaceSelection(const char* text, bool bForceSel); void EditInitWordDelimiter(HWND hwnd); -void EditSetNewText(HWND hwnd, const char* lpstrText, DocPosU lenText, bool bClearUndoHistory); +void EditSetNewText(HWND hwnd, const char* lpstrText, DocPosU lenText, bool bClearUndoHistory, bool bReload); bool EditConvertText(HWND hwnd, cpi_enc_t encSource, cpi_enc_t encDest); bool EditSetNewEncoding(HWND hwnd, cpi_enc_t iNewEncoding,bool bSupressWarning); bool EditIsRecodingNeeded(WCHAR* pszText,int cchLen); @@ -115,7 +115,7 @@ bool EditAlignDlg(HWND hwnd,int* piAlignMode); bool EditPrint(HWND,LPCWSTR,LPCWSTR); void EditPrintSetup(HWND hwnd); void EditPrintInit(); -bool EditSetDocumentBuffer(const char* lpstrText, DocPosU lenText); +bool EditSetDocumentBuffer(const char* lpstrText, DocPosU lenText, bool reload); void EditMatchBrace(HWND hwnd); void EditClearAllOccurrenceMarkers(HWND hwnd); void EditClearAllBookMarks(HWND hwnd); diff --git a/src/Notepad3.c b/src/Notepad3.c index 5c216e050..5752d9ba1 100644 --- a/src/Notepad3.c +++ b/src/Notepad3.c @@ -1741,12 +1741,10 @@ HWND InitInstance(const HINSTANCE hInstance, LPCWSTR pszCmdLine, int nCmdShow) Globals.hwndMain = hwndMain; // make main window globaly available - // Current file information -- moved in front of ShowWindow() + // Initial FileLoad() moved in front of ShowWindow() HPATHL hfile_pth = Path_Allocate(L""); FileLoadFlags fLoadFlags = FLF_DontSave | FLF_New | FLF_SkipUnicodeDetect | FLF_SkipANSICPDetection; - if (Path_IsEmpty(s_pthArgFilePath)) { - FileLoad(hfile_pth, fLoadFlags); - } + FileLoad(hfile_pth, fLoadFlags); // int editor frame if (!s_flagStartAsTrayIcon) { ShowWindow(hwndMain,nCmdShow); @@ -8054,7 +8052,7 @@ void HandleColorDefClicked(HWND hwnd, const DocPos position) } SciCall_SetTargetRange(firstPos, lastPos); - SciCall_ReplaceTarget(length, wchColor); + SciCall_ReplaceTargetMinimal(length, wchColor); EditUpdateVisibleIndicators(); } @@ -9379,11 +9377,7 @@ void CheckAutoLoadMostRecent() // static void _DelayUpdateStatusbar(const int delay, const bool bForceRedraw) { - static CmdMessageQueue_t mqc = MQ_WM_CMD_INIT(IDT_TIMER_UPDATE_STATUSBAR, 0LL); - if (!mqc.hwnd) { - mqc.hwnd = Globals.hwndMain; - } - mqc.lparam = (LPARAM)bForceRedraw; + CmdMessageQueue_t mqc = MQ_WM_CMD_INIT(Globals.hwndMain, IDT_TIMER_UPDATE_STATUSBAR, bForceRedraw); _MQ_AppendCmd(&mqc, _MQ_ms2cycl(delay)); } @@ -9394,10 +9388,7 @@ static void _DelayUpdateStatusbar(const int delay, const bool bForceRedraw) // static void _DelayUpdateToolbar(const int delay) { - static CmdMessageQueue_t mqc = MQ_WM_CMD_INIT(IDT_TIMER_UPDATE_TOOLBAR, 0LL); - if (!mqc.hwnd) { - mqc.hwnd = Globals.hwndMain; - } + CmdMessageQueue_t mqc = MQ_WM_CMD_INIT(Globals.hwndMain, IDT_TIMER_UPDATE_TOOLBAR, 0LL); _MQ_AppendCmd(&mqc, _MQ_ms2cycl(delay)); } @@ -9408,11 +9399,7 @@ static void _DelayUpdateToolbar(const int delay) // static void _DelayUpdateTitlebar(const int delay, const HWND hwnd) { - static CmdMessageQueue_t mqc = MQ_WM_CMD_INIT(IDT_TIMER_UPDATE_TITLEBAR, 0LL); - if (!mqc.hwnd) { - mqc.hwnd = Globals.hwndMain; - } - mqc.lparam = (LPARAM)hwnd; + CmdMessageQueue_t mqc = MQ_WM_CMD_INIT(Globals.hwndMain, IDT_TIMER_UPDATE_TITLEBAR, (LPARAM)hwnd); _MQ_AppendCmd(&mqc, _MQ_ms2cycl(delay)); } @@ -9423,10 +9410,7 @@ static void _DelayUpdateTitlebar(const int delay, const HWND hwnd) // static void _DelayClearCallTip(const int delay) { - static CmdMessageQueue_t mqc = MQ_WM_CMD_INIT(IDT_TIMER_CLEAR_CALLTIP, 0LL); - if (!mqc.hwnd) { - mqc.hwnd = Globals.hwndMain; - } + CmdMessageQueue_t mqc = MQ_WM_CMD_INIT(Globals.hwndMain, IDT_TIMER_CLEAR_CALLTIP, 0LL); _MQ_AppendCmd(&mqc, _MQ_ms2cycl(delay)); } @@ -9437,10 +9421,7 @@ static void _DelayClearCallTip(const int delay) // static void _DelaySplitUndoTransaction(const int delay) { - static CmdMessageQueue_t mqc = MQ_WM_CMD_INIT(IDT_TIMER_UNDO_TRANSACTION, 0); - if (!mqc.hwnd) { - mqc.hwnd = Globals.hwndMain; - } + CmdMessageQueue_t mqc = MQ_WM_CMD_INIT(Globals.hwndMain, IDT_TIMER_UNDO_TRANSACTION, 0); _MQ_AppendCmd(&mqc, _MQ_ms2cycl(delay)); } @@ -9451,11 +9432,7 @@ static void _DelaySplitUndoTransaction(const int delay) // void MarkAllOccurrences(const int delay, const bool bForceClear) { - static CmdMessageQueue_t mqc = MQ_WM_CMD_INIT(IDT_TIMER_CALLBACK_MRKALL, 0); - if (!mqc.hwnd) { - mqc.hwnd = Globals.hwndMain; - } - mqc.lparam = (LPARAM)bForceClear; + CmdMessageQueue_t mqc = MQ_WM_CMD_INIT(Globals.hwndMain, IDT_TIMER_CALLBACK_MRKALL, bForceClear); int const timer = (delay < 0) ? Settings2.UpdateDelayMarkAllOccurrences : delay; _MQ_AppendCmd(&mqc, _MQ_ms2cycl(timer)); } @@ -10869,7 +10846,6 @@ bool FileIO(bool fLoad, const HPATHL hfile_pth, EditFileIOStatus* status, bool bSuccess = false; if (fLoad) { - SciCall_SetReadOnly(false); bSuccess = EditLoadFile(Globals.hwndEdit, hfile_pth, status, fLoadFlags, bSetSavePoint); SciCall_SetReadOnly(Settings.DocReadOnlyMode); } @@ -10984,7 +10960,7 @@ bool FileLoad(const HPATHL hfile_pth, const FileLoadFlags fLoadFlags) } FileVars_GetFromData(NULL, 0, &Globals.fvCurFile); // init-reset - EditSetNewText(Globals.hwndEdit, "", 0, false); + EditSetNewText(Globals.hwndEdit, "", 0, false, false); SciCall_SetEOLMode(Settings.DefaultEOLMode); Encoding_Current(Settings.DefaultEncoding); @@ -11065,7 +11041,7 @@ bool FileLoad(const HPATHL hfile_pth, const FileLoadFlags fLoadFlags) fSuccess = IS_VALID_HANDLE(hFile); if (fSuccess) { FileVars_GetFromData(NULL, 0, &Globals.fvCurFile); // init/reset - EditSetNewText(Globals.hwndEdit, "", 0, false); + EditSetNewText(Globals.hwndEdit, "", 0, false, false); Style_SetDefaultLexer(Globals.hwndEdit); SciCall_SetEOLMode(Settings.DefaultEOLMode); if (Encoding_IsValid(Encoding_Forced(CPI_GET))) { @@ -11099,9 +11075,7 @@ bool FileLoad(const HPATHL hfile_pth, const FileLoadFlags fLoadFlags) } if (bReloadFile && !FileWatching.MonitoringLog) { Sci_GotoPosChooseCaret(0); - UndoTransActionBegin(); fSuccess = FileIO(true, hopen_file, &fioStatus, fLoadFlags, FSF_None, !bReloadFile); - EndUndoTransAction(); } else { fSuccess = FileIO(true, hopen_file, &fioStatus, fLoadFlags, FSF_None, !s_IsThisAnElevatedRelaunch); diff --git a/src/SciCall.h b/src/SciCall.h index 6ba97dabf..8786e7bfe 100644 --- a/src/SciCall.h +++ b/src/SciCall.h @@ -367,6 +367,7 @@ DeclareSciCallV0(TargetFromSelection, TARGETFROMSELECTION); DeclareSciCallV0(TargetWholeDocument, TARGETWHOLEDOCUMENT); DeclareSciCallV2(SetTargetRange, SETTARGETRANGE, DocPos, start, DocPos, end); DeclareSciCallR2(ReplaceTarget, REPLACETARGET, DocPos, DocPos, length, const char*, text); +DeclareSciCallR2(ReplaceTargetMinimal, REPLACETARGETMINIMAL, DocPos, DocPos, length, const char*, text); DeclareSciCallR2(ReplaceTargetRe, REPLACETARGETRE, DocPos, DocPos, length, const char*, text); DeclareSciCallV2(AddText, ADDTEXT, DocPos, length, const char*, text); DeclareSciCallV1(SetSearchFlags, SETSEARCHFLAGS, int, flags); diff --git a/src/TypeDefs.h b/src/TypeDefs.h index 0f1b4de92..e89721564 100644 --- a/src/TypeDefs.h +++ b/src/TypeDefs.h @@ -330,8 +330,8 @@ typedef struct CmdMessageQueue_t { } CmdMessageQueue_t; -#define MESSAGE_QUEUE_INIT(cmd,wp,lp) { NULL, (cmd), MAKEWPARAM((wp), 1), ((LPARAM)(DWORD)(lp)), -1, NULL, NULL } -#define MQ_WM_CMD_INIT(wp,lp) MESSAGE_QUEUE_INIT(WM_COMMAND, (wp), (lp)) +#define MESSAGE_QUEUE_INIT(hwnd,cmd,wp,lp) { (hwnd), (cmd), MAKEWPARAM((wp), 1), ((LPARAM)(DWORD)(lp)), -1, NULL, NULL } +#define MQ_WM_CMD_INIT(hw,wp,lp) MESSAGE_QUEUE_INIT((hw), WM_COMMAND, (wp), (lp)) // --------------------------------------------------------------------------