mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-12 02:18:44 +02:00
Cocoa/ListView: fix and improve memory management
This commit is contained in:
parent
87735b5f81
commit
400b5fb630
@ -19,6 +19,8 @@ type
|
||||
TCocoaCollectionItem = objcclass(NSCollectionViewItem)
|
||||
public
|
||||
procedure loadView; override;
|
||||
procedure prepareForReuse; message 'prepareForReuse';
|
||||
procedure dealloc; override;
|
||||
end;
|
||||
|
||||
{ TCocoaCollectionItemView }
|
||||
@ -145,7 +147,7 @@ var
|
||||
item: NSCollectionViewItem;
|
||||
items: NSMutableArray Absolute Result;
|
||||
begin
|
||||
Result:= NSMutableArray.new;
|
||||
Result:= NSMutableArray.new.autorelease;
|
||||
visibleRect:= cv.visibleRect;
|
||||
for item in cv.visibleItems do begin
|
||||
if NSIntersectsRect( item.view.frame, visibleRect ) then
|
||||
@ -181,6 +183,22 @@ begin
|
||||
self.setView( itemView );
|
||||
end;
|
||||
|
||||
procedure TCocoaCollectionItem.prepareForReuse;
|
||||
begin
|
||||
self.view.removeFromSuperview;
|
||||
end;
|
||||
|
||||
procedure TCocoaCollectionItem.dealloc;
|
||||
begin
|
||||
self.imageView.removeFromSuperview;
|
||||
self.textField.removeFromSuperview;
|
||||
self.view.removeFromSuperview;
|
||||
self.imageView.release;
|
||||
self.textField.release;
|
||||
self.view.release;
|
||||
inherited dealloc;
|
||||
end;
|
||||
|
||||
{ TCocoaCollectionItemView }
|
||||
|
||||
procedure TCocoaCollectionItemView.drawRect(dirtyRect: NSRect);
|
||||
|
@ -219,6 +219,8 @@ type
|
||||
function lclGetCallback: ICommonCallback; override;
|
||||
procedure lclClearCallback; override;
|
||||
function lclContentView: NSView; override;
|
||||
public
|
||||
procedure dealloc; override;
|
||||
public
|
||||
procedure setLclListView( lclListView: TCustomListView ); message 'setLclListView:';
|
||||
procedure setViewStyle( viewStyle: TViewStyle ); message 'setViewStyle:';
|
||||
@ -2090,6 +2092,7 @@ procedure TCocoaListView.releaseControls;
|
||||
begin
|
||||
if not Assigned(_backendControl) then
|
||||
Exit;
|
||||
FreeAndNil( _WSHandler );
|
||||
_scrollView.removeFromSuperview;
|
||||
_scrollView.setDocumentView( nil );
|
||||
_scrollView.release;
|
||||
@ -2128,6 +2131,12 @@ begin
|
||||
Result:= documentView;
|
||||
end;
|
||||
|
||||
procedure TCocoaListView.dealloc;
|
||||
begin
|
||||
self.releaseControls;
|
||||
inherited dealloc;
|
||||
end;
|
||||
|
||||
procedure TCocoaListView.setLclListView(lclListView: TCustomListView);
|
||||
begin
|
||||
_lclListView:= lclListView;
|
||||
|
Loading…
Reference in New Issue
Block a user