diff --git a/components/codetools/ide/codyidentifiersdlg.pas b/components/codetools/ide/codyidentifiersdlg.pas index 07b64fd6be..f47da09ebe 100644 --- a/components/codetools/ide/codyidentifiersdlg.pas +++ b/components/codetools/ide/codyidentifiersdlg.pas @@ -1353,7 +1353,7 @@ begin exit; end; - CurSrcEdit.BeginUndoBlock; + CurSrcEdit.BeginUndoBlock{$IFDEF SynUndoDebugBeginEnd}('TCodyIdentifiersDlg.UseIdentifier'){$ENDIF}; try // insert or replace identifier if (not CurSrcEdit.SelectionAvailable) @@ -1380,7 +1380,7 @@ begin if not SameUnitName then AddToUsesSection; finally - CurSrcEdit.EndUndoBlock; + CurSrcEdit.EndUndoBlock{$IFDEF SynUndoDebugBeginEnd}('TCodyIdentifiersDlg.UseIdentifier'){$ENDIF}; end; end; diff --git a/components/codetools/ide/codyutils.pas b/components/codetools/ide/codyutils.pas index 141eedb2e9..f00d500d41 100644 --- a/components/codetools/ide/codyutils.pas +++ b/components/codetools/ide/codyutils.pas @@ -292,7 +292,7 @@ begin debugln(['InsertCallInherited CodeToolBoss.SourceChangeCache.Replace failed']); exit; end; - SrcEdit.BeginUndoBlock; + SrcEdit.BeginUndoBlock{$IFDEF SynUndoDebugBeginEnd}('InsertCallInherited'){$ENDIF}; try SrcEdit.CursorTextXY:=NewXY; if not CodeToolBoss.SourceChangeCache.Apply then begin @@ -300,7 +300,7 @@ begin exit; end; finally - SrcEdit.EndUndoBlock; + SrcEdit.EndUndoBlock{$IFDEF SynUndoDebugBeginEnd}('InsertCallInherited'){$ENDIF}; end; except on e: Exception do CodeToolBoss.HandleException(e); diff --git a/components/synedit/syncompletion.pas b/components/synedit/syncompletion.pas index 359679ba6e..0ceb4d625d 100644 --- a/components/synedit/syncompletion.pas +++ b/components/synedit/syncompletion.pas @@ -1591,7 +1591,7 @@ begin // Note: Form.Visible can be false, for example when completion only contains one item if F.CurrentEditor is TCustomSynEdit then with TCustomSynEdit(F.CurrentEditor) do begin - BeginUndoBlock; + BeginUndoBlock{$IFDEF SynUndoDebugBeginEnd}('TSynCompletion.Validate'){$ENDIF}; BeginUpdate; try LogCaret := LogicalCaretXY; @@ -1634,7 +1634,7 @@ begin Cancel(Sender); finally EndUpdate; - EndUndoBlock; + EndUndoBlock{$IFDEF SynUndoDebugBeginEnd}('TSynCompletion.Validate'){$ENDIF}; end; end; end; diff --git a/components/synedit/synedit.pp b/components/synedit/synedit.pp index 0ffa026ea5..4069895826 100644 --- a/components/synedit/synedit.pp +++ b/components/synedit/synedit.pp @@ -792,9 +792,9 @@ type destructor Destroy; override; procedure AfterLoadFromFile; - procedure BeginUndoBlock; + procedure BeginUndoBlock{$IFDEF SynUndoDebugBeginEnd}(ACaller: String = ''){$ENDIF}; procedure BeginUpdate(WithUndoBlock: Boolean = True); - procedure EndUndoBlock; + procedure EndUndoBlock{$IFDEF SynUndoDebugBeginEnd}(ACaller: String = ''){$ENDIF}; procedure EndUpdate; public @@ -2097,7 +2097,7 @@ begin if (FUndoBlockAtPaintLock > FPaintLock) then debugln(['***** SYNEDIT: Fixing auto-undo-block FUndoBlockAtPaintLock=',FUndoBlockAtPaintLock,' FPaintLock=',FPaintLock]); FUndoBlockAtPaintLock := 0; - EndUndoBlock; + EndUndoBlock{$IFDEF SynUndoDebugBeginEnd}('TCustomSynEdit.DoDecPaintLock'){$ENDIF}; end; if (FPaintLock=1) and HandleAllocated then begin ScanRanges(FLastTextChangeStamp <> TSynEditStringList(FLines).TextChangeStamp); @@ -3298,6 +3298,9 @@ begin If FPaintLock > 0 then begin debugln(['Warning: SynEdit.Paint called during PaintLock']); + {$IFDEF SynCheckPaintLock} + DumpStack; + {$ENDIF} // Ensure this will be repainted after PaintLock if FInvalidateRect.Top < 0 then FInvalidateRect := rcClip @@ -5621,6 +5624,12 @@ begin end; finally InternalEndUndoBlock; + {$IFDEF SynCheckPaintLock} + if (FPaintLock > 0) and (FInvalidateRect.Bottom > FInvalidateRect.Top) then begin + debugln(['TCustomSynEdit.CommandProcessor: Paint called while locked InitialCmd=', InitialCmd, ' Command=', Command]); + DumpStack; + end; + {$ENDIF} end; end; end; @@ -6245,6 +6254,9 @@ end; procedure TCustomSynEdit.InternalBeginUndoBlock(aList: TSynEditUndoList); begin if aList = nil then aList := fUndoList; + {$IFDEF SynUndoDebugBeginEnd} + DebugLnEnter(['>> TCustomSynEdit.InternalBeginUndoBlock', DbgSName(self), ' ', dbgs(Self), ' aList=', aList, ' FPaintLock=', FPaintLock, ' InGroupCount=',aList.InGroupCount]); + {$ENDIF} aList.OnNeedCaretUndo := {$IFDEF FPC}@{$ENDIF}GetCaretUndo; aList.BeginBlock; IncPaintLock; @@ -6261,10 +6273,17 @@ begin // after unfold DecPaintLock; aList.EndBlock; // Todo: Doing this after DecPaintLock, can cause duplicate calls to StatusChanged(scModified) + {$IFDEF SynUndoDebugBeginEnd} + DebugLnEnter(['<< TCustomSynEdit.InternalEndUndoBlock', DbgSName(self), ' ', dbgs(Self), ' aList=', aList, ' FPaintLock=', FPaintLock, ' InGroupCount=',aList.InGroupCount]); + {$ENDIF} end; -procedure TCustomSynEdit.BeginUndoBlock; +procedure TCustomSynEdit.BeginUndoBlock{$IFDEF SynUndoDebugBeginEnd}(ACaller: String = ''){$ENDIF}; begin + {$IFDEF SynUndoDebugBeginEnd} + DebugLnEnter(['>> TCustomSynEdit.BeginUndoBlock ', DbgSName(self), ' ', dbgs(Self), ' Caller=', ACaller, ' FPaintLock=', FPaintLock, ' InGroupCount=',fUndoList.InGroupCount]); + if ACaller = '' then DumpStack; + {$ENDIF} fUndoList.OnNeedCaretUndo := {$IFDEF FPC}@{$ENDIF}GetCaretUndo; fUndoList.BeginBlock; ////FFoldedLinesView.Lock; @@ -6276,17 +6295,21 @@ begin IncPaintLock; if WithUndoBlock and (FUndoBlockAtPaintLock = 0) then begin FUndoBlockAtPaintLock := FPaintLock; - BeginUndoBlock; + BeginUndoBlock{$IFDEF SynUndoDebugBeginEnd}('SynEdit.BeginUpdate'){$ENDIF}; end; end; -procedure TCustomSynEdit.EndUndoBlock; +procedure TCustomSynEdit.EndUndoBlock{$IFDEF SynUndoDebugBeginEnd}(ACaller: String = ''){$ENDIF}; begin // Write all trimming info to the end of the undo block, // so it will be undone first, and other UndoItems do see the expected spaces //FTrimmedLinesView.UnLock; ////FFoldedLinesView.UnLock; fUndoList.EndBlock; + {$IFDEF SynUndoDebugBeginEnd} + DebugLnEnter(['<< TCustomSynEdit.EndUndoBlock', DbgSName(self), ' ', dbgs(Self), ' Caller=', ACaller, ' FPaintLock=', FPaintLock, ' InGroupCount=',fUndoList.InGroupCount]); + //if ACaller = '' then DumpStack; + {$ENDIF} end; procedure TCustomSynEdit.EndUpdate; diff --git a/components/synedit/synedittextbase.pas b/components/synedit/synedittextbase.pas index 11e44cb3bd..1f0832de66 100644 --- a/components/synedit/synedittextbase.pas +++ b/components/synedit/synedittextbase.pas @@ -208,6 +208,9 @@ type function RealCount: Integer; function IsTopMarkedAsUnmodified: boolean; function UnModifiedMarkerExists: boolean; + {$IFDEF SynUndoDebugBeginEnd} + property InGroupCount: integer read FInGroupCount; + {$ENDIF} public property CanUndo: boolean read GetCanUndo; property FullUndoImpossible: boolean read fFullUndoImposible; @@ -372,7 +375,7 @@ begin FForceGroupEnd := False; end; {$IFDEF SynUndoDebugCalls} - DebugLnExit(['>> TSynEditUndoList.EndBlock ', DebugName, ' ', DbgSName(self), ' ', dbgs(Self), ' fLockCount=', fLockCount, ' Cnt=', fItems.Count, ' FInGroupCount=', FInGroupCount, ' fUnModifiedItem=', fUnModifiedItem]); + DebugLnExit(['<< TSynEditUndoList.EndBlock ', DebugName, ' ', DbgSName(self), ' ', dbgs(Self), ' fLockCount=', fLockCount, ' Cnt=', fItems.Count, ' FInGroupCount=', FInGroupCount, ' fUnModifiedItem=', fUnModifiedItem]); end else begin DebugLn(['** EXTRA TSynEditUndoList.EndBlock ', DebugName, ' ', DbgSName(self), ' ', dbgs(Self), ' fLockCount=', fLockCount, ' Cnt=', fItems.Count, ' FInGroupCount=', FInGroupCount, ' fUnModifiedItem=', fUnModifiedItem]); {$ENDIF} diff --git a/components/synedit/test/testbase.pas b/components/synedit/test/testbase.pas index 4dd2e61cea..068a849524 100644 --- a/components/synedit/test/testbase.pas +++ b/components/synedit/test/testbase.pas @@ -169,7 +169,7 @@ procedure TTestSynEdit.TestSetSelText(Value: String; PasteMode: TSynSelectionMod AFlags: TTestSetSelFlags); begin if not(tssSkipUndoBlock in AFlags) then - BeginUndoBlock; + BeginUndoBlock{$IFDEF SynUndoDebugBeginEnd}('test'){$ENDIF}; if (tssUpdateBlock in AFlags) then BeginUpdate(False); @@ -180,7 +180,7 @@ begin if (tssUpdateBlock in AFlags) then EndUpdate; if not(tssSkipUndoBlock in AFlags) then - EndUndoBlock; + EndUndoBlock{$IFDEF SynUndoDebugBeginEnd}('test'){$ENDIF}; end; procedure TTestSynEdit.SimulatePaintText; diff --git a/components/synedit/test/testsynselection.pas b/components/synedit/test/testsynselection.pas index bee8814ea9..77c11bd260 100644 --- a/components/synedit/test/testsynselection.pas +++ b/components/synedit/test/testsynselection.pas @@ -1071,11 +1071,11 @@ procedure TTestSynSelection.ReplaceSelText; SetLines(TheText); SetCaretAndSel(X1,Y1, X2,Y2); TestIsBlock ('Sanity, selection at begin of test (3)', X1,Y1, X2,Y2, Before); - SynEdit.BeginUndoBlock; + SynEdit.BeginUndoBlock{$IFDEF SynUndoDebugBeginEnd}('test sel'){$ENDIF}; SynEdit.BeginUpdate(False); SynEdit.SelText := ''; SynEdit.TestSetSelText(LinesToText(Replace), SelInsertMode); - SynEdit.EndUndoBlock; + SynEdit.EndUndoBlock{$IFDEF SynUndoDebugBeginEnd}('test sel'){$ENDIF}; SynEdit.EndUpdate; TestIsCaretPhys('After Replace (2 step, locked)', ExpCaretX, ExpCaretY); TestIsNoBlock ('After Replace (2 step, locked)'); diff --git a/components/synedit/test/testtrimspace.pas b/components/synedit/test/testtrimspace.pas index a60dacc3a5..a83c61a195 100644 --- a/components/synedit/test/testtrimspace.pas +++ b/components/synedit/test/testtrimspace.pas @@ -534,14 +534,14 @@ var UpdateMode: TUpdateMode; procedure BeginUndoBlock; begin if UpdateMode = umOuter then SynEdit.BeginUpdate; - SynEdit.BeginUndoBlock; + SynEdit.BeginUndoBlock{$IFDEF SynUndoDebugBeginEnd}('test'){$ENDIF}; if UpdateMode = umInner then SynEdit.BeginUpdate; end; procedure EndUndoBlock; begin if UpdateMode = umInner then SynEdit.EndUpdate; - SynEdit.EndUndoBlock; + SynEdit.EndUndoBlock{$IFDEF SynUndoDebugBeginEnd}('test'){$ENDIF}; if UpdateMode = umOuter then SynEdit.EndUpdate; end; @@ -554,10 +554,10 @@ var UpdateMode: TUpdateMode; SetCaret(1,1); // need to add space later, so it is regocnized as trailing - BeginUndoBlock; + BeginUndoBlock{$IFDEF SynUndoDebugBeginEnd}('test'){$ENDIF}; SynEdit.TextBetweenPointsEx[point(5,1), point(6,1), scamEnd] := ''; // delete d SynEdit.TextBetweenPointsEx[point(4,2), point(4,2), scamEnd] := ' '; // add space - EndUndoBlock; + EndUndoBlock{$IFDEF SynUndoDebugBeginEnd}('test'){$ENDIF}; TestIsFullText ('modified after block', ['abc', 'mno ', 'xyz', '']); TestIsCaret('modified after block', 5,2); diff --git a/ide/codecontextform.pas b/ide/codecontextform.pas index d1b91221cd..57a5fc4bac 100644 --- a/ide/codecontextform.pas +++ b/ide/codecontextform.pas @@ -978,7 +978,7 @@ procedure TCodeContextFrm.CompleteParameters(DeclCode: string); exit; end; // insert - ASynEdit.BeginUndoBlock; + ASynEdit.BeginUndoBlock{$IFDEF SynUndoDebugBeginEnd}('TCodeContextFrm.CompleteParameters'){$ENDIF}; try XY:=Point(X,Y); ASynEdit.BlockBegin:=XY; @@ -986,7 +986,7 @@ procedure TCodeContextFrm.CompleteParameters(DeclCode: string); ASynEdit.LogicalCaretXY:=XY; ASynEdit.SelText:=NewCode; finally - ASynEdit.EndUndoBlock; + ASynEdit.EndUndoBlock{$IFDEF SynUndoDebugBeginEnd}('TCodeContextFrm.CompleteParameters'){$ENDIF}; end; end; diff --git a/ide/frames/compiler_buildmacro_options.pas b/ide/frames/compiler_buildmacro_options.pas index 8143d21b18..4fc0713b3b 100644 --- a/ide/frames/compiler_buildmacro_options.pas +++ b/ide/frames/compiler_buildmacro_options.pas @@ -324,13 +324,13 @@ begin if p>0 then s:=copy(s,1,p-1); TxtXY:=CondSynEdit.LogicalCaretXY; CondSynEdit.GetWordBoundsAtRowCol(TxtXY,TxtStartX,TxtEndX); - CondSynEdit.BeginUndoBlock(); + CondSynEdit.BeginUndoBlock{$IFDEF SynUndoDebugBeginEnd}('TCompOptBuildMacrosFrame.fSynCompletionValidate'){$ENDIF}; try CondSynEdit.BlockBegin:=Point(TxtStartX,TxtXY.Y); CondSynEdit.BlockEnd:=Point(TxtEndX,TxtXY.Y); CondSynEdit.SelText:=s; finally - CondSynEdit.EndUndoBlock(); + CondSynEdit.EndUndoBlock{$IFDEF SynUndoDebugBeginEnd}('TCompOptBuildMacrosFrame.fSynCompletionValidate'){$ENDIF}; end; FCompletionHistory.Insert(0,s); if FCompletionHistory.Count>100 then diff --git a/ide/sourceeditor.pp b/ide/sourceeditor.pp index 11157fcb2f..711d6aa543 100644 --- a/ide/sourceeditor.pp +++ b/ide/sourceeditor.pp @@ -346,8 +346,8 @@ type function Close: Boolean; // codebuffer - procedure BeginUndoBlock; override; - procedure EndUndoBlock; override; + procedure BeginUndoBlock{$IFDEF SynUndoDebugBeginEnd}(ACaller: String = ''){$ENDIF}; override; + procedure EndUndoBlock{$IFDEF SynUndoDebugBeginEnd}(ACaller: String = ''){$ENDIF}; override; procedure BeginUpdate; override; procedure EndUpdate; override; procedure BeginGlobalUpdate; @@ -2211,7 +2211,7 @@ begin try CodeToolsInSync:=not NeedsUpdateCodeBuffer; if SrcLogEntry<>nil then begin - SynEditor.BeginUndoBlock; + SynEditor.BeginUndoBlock{$IFDEF SynUndoDebugBeginEnd}('TSourceEditorSharedValues.OnCodeBufferChanged'){$ENDIF}; SynEditor.BeginUpdate; SynEditor.TemplateEdit.IncExternalEditLock; SynEditor.SyncroEdit.IncExternalEditLock; @@ -2246,7 +2246,7 @@ begin SynEditor.SyncroEdit.DecExternalEditLock; SynEditor.TemplateEdit.DecExternalEditLock; SynEditor.EndUpdate; - SynEditor.EndUndoBlock; + SynEditor.EndUndoBlock{$IFDEF SynUndoDebugBeginEnd}('TSourceEditorSharedValues.OnCodeBufferChanged'){$ENDIF}; end; end else begin {$IFDEF VerboseSrcEditBufClean} @@ -2282,14 +2282,14 @@ begin inc(FInGlobalUpdate); if FInGlobalUpdate > 1 then exit; SynEditor.BeginUpdate; // locks all shared SynEdits too - SynEditor.BeginUndoBlock; + SynEditor.BeginUndoBlock{$IFDEF SynUndoDebugBeginEnd}('TSourceEditorSharedValues.BeginGlobalUpdate'){$ENDIF}; end; procedure TSourceEditorSharedValues.EndGlobalUpdate; begin dec(FInGlobalUpdate); if FInGlobalUpdate > 0 then exit; - SynEditor.EndUndoBlock; + SynEditor.EndUndoBlock{$IFDEF SynUndoDebugBeginEnd}('TSourceEditorSharedValues.EndGlobalUpdate'){$ENDIF}; SynEditor.EndUpdate; end; @@ -3363,7 +3363,7 @@ begin end; BeginUpdate; - BeginUndoBlock; + BeginUndoBlock{$IFDEF SynUndoDebugBeginEnd}('TSourceEditor.UpdateCommentSelection'){$ENDIF}; FEditor.SelectionMode := smNormal; if CommentOn then begin @@ -3391,7 +3391,7 @@ begin end; end; - EndUndoBlock; + EndUndoBlock{$IFDEF SynUndoDebugBeginEnd}('TSourceEditor.UpdateCommentSelection'){$ENDIF}; EndUpdate; FEditor.CaretXY := OldCaretPos; @@ -3407,7 +3407,7 @@ var P: TPoint; begin if ReadOnly then exit; - FEditor.BeginUndoBlock; + FEditor.BeginUndoBlock{$IFDEF SynUndoDebugBeginEnd}('TSourceEditor.ConditionalSelection'){$ENDIF}; try if not EditorComponent.SelAvail then begin P.Y := FEditor.CaretY; @@ -3424,7 +3424,7 @@ begin // will show modal dialog - must not be in Editor.BeginUpdate block, or painting will not work FEditor.SelText:=AddConditional(EditorComponent.SelText,IsPascal); finally - FEditor.EndUndoBlock; + FEditor.EndUndoBlock{$IFDEF SynUndoDebugBeginEnd}('TSourceEditor.ConditionalSelection'){$ENDIF}; end; end; @@ -3448,13 +3448,13 @@ begin if ReadOnly then exit; if not EditorComponent.SelAvail then exit; FEditor.BeginUpdate; - FEditor.BeginUndoBlock; + FEditor.BeginUndoBlock{$IFDEF SynUndoDebugBeginEnd}('TSourceEditor.BreakLinesInSelection'){$ENDIF}; // ToDo: replace step by step to keep bookmarks and breakpoints try OldSelection:=EditorComponent.SelText; FEditor.SelText:=BreakLinesInText(OldSelection,FEditor.RightEdge); finally - FEditor.EndUndoBlock; + FEditor.EndUndoBlock{$IFDEF SynUndoDebugBeginEnd}('TSourceEditor.BreakLinesInSelection'){$ENDIF}; FEditor.EndUpdate; end; end; @@ -3464,12 +3464,12 @@ begin if ReadOnly then exit; if not EditorComponent.SelAvail then exit; FEditor.BeginUpdate; - FEditor.BeginUndoBlock; + FEditor.BeginUndoBlock{$IFDEF SynUndoDebugBeginEnd}('TSourceEditor.InvertAssignment'){$ENDIF}; try // ToDo: replace step by step to keep bookmarks and breakpoints FEditor.SelText := InvertAssignTool.InvertAssignment(FEditor.SelText); finally - FEditor.EndUndoBlock; + FEditor.EndUndoBlock{$IFDEF SynUndoDebugBeginEnd}('TSourceEditor.InvertAssignment'){$ENDIF}; FEditor.EndUpdate; end; end; @@ -3894,12 +3894,12 @@ begin s:=' '+CodeToolBoss.SourceChangeCache.BeautifyCodeOptions.BeautifyKeyWord(s); if not (Line[x2] in [' ',#9]) then s:=s+' '; - FEditor.BeginUndoBlock; + FEditor.BeginUndoBlock{$IFDEF SynUndoDebugBeginEnd}('TSourceEditor.AutoBlockCompleteChar'){$ENDIF}; try FEditor.InsertTextAtCaret(s); FEditor.LogicalCaretXY:=aTextPos; finally - FEditor.EndUndoBlock; + FEditor.EndUndoBlock{$IFDEF SynUndoDebugBeginEnd}('TSourceEditor.AutoBlockCompleteChar'){$ENDIF}; end; end; end; @@ -3926,13 +3926,13 @@ begin debugln(['TSourceEditor.AutoBlockCompleteChar ']); // user typed 'begin' if not LazarusIDE.SaveSourceEditorChangesToCodeCache(self) then exit; - FEditor.BeginUndoBlock; + FEditor.BeginUndoBlock{$IFDEF SynUndoDebugBeginEnd}('TSourceEditor.AutoBlockCompleteChar (2)'){$ENDIF}; FEditor.BeginUpdate; try if not CodeToolBoss.CompleteBlock(CodeBuffer,p.X,p.Y,true) then exit; finally FEditor.EndUpdate; - FEditor.EndUndoBlock; + FEditor.EndUndoBlock{$IFDEF SynUndoDebugBeginEnd}('TSourceEditor.AutoBlockCompleteChar (2)'){$ENDIF}; end; end; end; @@ -3945,7 +3945,7 @@ var begin if not LazarusIDE.SaveSourceEditorChangesToCodeCache(self) then exit; XY:=FEditor.LogicalCaretXY; - FEditor.BeginUndoBlock; + FEditor.BeginUndoBlock{$IFDEF SynUndoDebugBeginEnd}('TSourceEditor.AutoCompleteBlock'){$ENDIF}; FEditor.BeginUpdate; try if not CodeToolBoss.CompleteBlock(CodeBuffer,XY.X,XY.Y,false, @@ -3960,7 +3960,7 @@ begin end; finally FEditor.EndUpdate; - FEditor.EndUndoBlock; + FEditor.EndUndoBlock{$IFDEF SynUndoDebugBeginEnd}('TSourceEditor.AutoCompleteBlock'){$ENDIF}; end; end; @@ -4283,14 +4283,14 @@ Begin CodeBuffer := nil; end; -procedure TSourceEditor.BeginUndoBlock; +procedure TSourceEditor.BeginUndoBlock{$IFDEF SynUndoDebugBeginEnd}(ACaller: String = ''){$ENDIF}; begin - FEditor.BeginUndoBlock; + FEditor.BeginUndoBlock{$IFDEF SynUndoDebugBeginEnd}('TSourceEditor.BeginUndoBlock ' + ACaller){$ENDIF}; end; -procedure TSourceEditor.EndUndoBlock; +procedure TSourceEditor.EndUndoBlock{$IFDEF SynUndoDebugBeginEnd}(ACaller: String = ''){$ENDIF}; begin - FEditor.EndUndoBlock; + FEditor.EndUndoBlock{$IFDEF SynUndoDebugBeginEnd}('TSourceEditor.EndUndoBlock ' + ACaller){$ENDIF}; end; procedure TSourceEditor.BeginUpdate; diff --git a/ide/unusedunitsdlg.pas b/ide/unusedunitsdlg.pas index 67a19dd613..8ea13ae42e 100644 --- a/ide/unusedunitsdlg.pas +++ b/ide/unusedunitsdlg.pas @@ -114,7 +114,7 @@ begin else RemoveUnits:=nil; if (RemoveUnits<>nil) and (RemoveUnits.Count>0) then begin - SrcEdit.BeginUndoBlock; + SrcEdit.BeginUndoBlock{$IFDEF SynUndoDebugBeginEnd}('ShowUnusedUnitsDialog'){$ENDIF}; try for i:=0 to RemoveUnits.Count-1 do begin if not CodeToolBoss.RemoveUnitFromAllUsesSections(Code,RemoveUnits[i]) @@ -124,7 +124,7 @@ begin end; end; finally - SrcEdit.EndUndoBlock; + SrcEdit.EndUndoBlock{$IFDEF SynUndoDebugBeginEnd}('ShowUnusedUnitsDialog'){$ENDIF}; end; end; finally diff --git a/ideintf/srceditorintf.pas b/ideintf/srceditorintf.pas index 25e0f13ac2..0a6a150c9f 100644 --- a/ideintf/srceditorintf.pas +++ b/ideintf/srceditorintf.pas @@ -140,8 +140,8 @@ type // DesktopXY:=EditorControl.ClientToScreen(ScreenToPixelPosition(ScreenXY)); // update - procedure BeginUndoBlock; virtual; abstract; - procedure EndUndoBlock; virtual; abstract; + procedure BeginUndoBlock{$IFDEF SynUndoDebugBeginEnd}(ACaller: String = ''){$ENDIF}; virtual; abstract; + procedure EndUndoBlock{$IFDEF SynUndoDebugBeginEnd}(ACaller: String = ''){$ENDIF}; virtual; abstract; procedure BeginUpdate; virtual; abstract; // block painting procedure EndUpdate; virtual; abstract; procedure IncreaseIgnoreCodeBufferLock; virtual; abstract; @@ -533,13 +533,13 @@ procedure TSourceEditorInterface.ReplaceText(const StartPos, EndPos: TPoint; const NewText: string); begin BeginUpdate; - BeginUndoBlock; + BeginUndoBlock{$IFDEF SynUndoDebugBeginEnd}('TSourceEditorInterface.ReplaceText'){$ENDIF}; try SelectText(StartPos,EndPos); CursorTextXY:=StartPos; Selection:=NewText; finally - EndUndoBlock; + EndUndoBlock{$IFDEF SynUndoDebugBeginEnd}('TSourceEditorInterface.ReplaceText'){$ENDIF}; EndUpdate; end; end;