From e331c9fb3512369107288c0358d1a19d98cd64ca Mon Sep 17 00:00:00 2001 From: Martin Date: Fri, 24 Jan 2025 20:51:09 +0100 Subject: [PATCH] SynEdit: Wrapped-view, fix leaks. Remove event-handler and view in Destroy --- components/synedit/synedit.pp | 1 + components/synedit/syneditwrappedview.pp | 13 +++++++++++++ 2 files changed, 14 insertions(+) diff --git a/components/synedit/synedit.pp b/components/synedit/synedit.pp index 180a28237c..2e1970398e 100644 --- a/components/synedit/synedit.pp +++ b/components/synedit/synedit.pp @@ -2682,6 +2682,7 @@ var i: integer; p: TList; begin + Destroying; {$IFDEF SynCheckPaintLock} if (FPaintLock > 0) then begin debugln(['TCustomSynEdit.Destroy: Paintlock=', FPaintLock, ' FInvalidateRect=', dbgs(FInvalidateRect)]); diff --git a/components/synedit/syneditwrappedview.pp b/components/synedit/syneditwrappedview.pp index 7e5cfc1e9d..22de687e8c 100644 --- a/components/synedit/syneditwrappedview.pp +++ b/components/synedit/syneditwrappedview.pp @@ -221,6 +221,7 @@ public function CalculateWrapForLine(ALineIdx: IntIdx; AMaxWidth: integer): Integer; inline; public constructor Create(AOwner: TComponent); override; + destructor Destroy; override; procedure WrapAll; experimental; procedure ValidateAll; experimental; @@ -1811,6 +1812,18 @@ begin WrapAll; end; +destructor TLazSynEditLineWrapPlugin.Destroy; +begin + if Editor <> nil then begin + TSynEdit(Editor).UnRegisterStatusChangedHandler(@DoWidthChanged); + if (FLineMapView <> nil) and not (csDestroying in Editor.Componentstate) then begin + TSynEdit(Editor).TextViewsManager.RemoveSynTextView(FLineMapView, True); + TSynEdit(Editor).Invalidate; + end; + end; + inherited Destroy; +end; + procedure TLazSynEditLineWrapPlugin.WrapAll; var c: Integer;