MG: fixed mem some leaks in ide and gtk

git-svn-id: trunk@746 -
This commit is contained in:
lazarus 2002-02-09 01:46:13 +00:00
parent 1178bab300
commit 2cdaebdae9

View File

@ -2443,22 +2443,10 @@ end;
procedure TGTKObject.RemoveCallbacks(Sender : TObject); procedure TGTKObject.RemoveCallbacks(Sender : TObject);
var var
gObject : gtk_Object; gObject : gtk_Object;
Info: PWinWidgetInfo;
Widget: pointer;
begin begin
gObject := ObjectToGTKObject(Sender); gObject := ObjectToGTKObject(Sender);
if gObject = nil then Exit; if gObject = nil then Exit;
if (Sender is TWinControl) and (TWinControl(Sender).HandleAllocated) then
begin
Widget:=Pointer(TWinControl(Sender).Handle);
if GtkWidgetIsA(Widget,gtk_object_get_type) then
Begin
Info := GetWidgetInfo(Widget, False);
if Info <> nil then Dispose(Info);
gtk_object_set_data(Widget, 'widgetinfo', nil);
end;
end;
if not (Sender is TMenuItem) then if not (Sender is TMenuItem) then
gtk_signal_handlers_destroy(gObject); gtk_signal_handlers_destroy(gObject);
end; end;
@ -2477,10 +2465,11 @@ var
Widget: PGtkWidget; Widget: PGtkWidget;
FixWidget: PGtkWidget; FixWidget: PGtkWidget;
begin begin
RemoveCallbacks(Sender);
Handle := hwnd(ObjectToGtkObject(Sender)); Handle := hwnd(ObjectToGtkObject(Sender));
if Handle=0 then exit; if Handle=0 then exit;
RemoveCallbacks(Sender);
Widget:=PGtkWidget(Handle); Widget:=PGtkWidget(Handle);
FixWidget:=GetFixedWidget(Widget); FixWidget:=GetFixedWidget(Widget);
@ -2516,8 +2505,9 @@ begin
if Sender is TCommonDialog then if Sender is TCommonDialog then
DestroyCommonDialogAddOns(TCommonDialog(Sender)); DestroyCommonDialogAddOns(TCommonDialog(Sender));
// destroy the widget // destroy the widget
gtk_widget_destroy(Widget); DestroyWidget(Widget);
//writeln('>>> LM_DESTROY END ',Sender.Classname,' Sender=',HexStr(Cardinal(Sender),8),' Handle=',HexStr(Cardinal(Handle),8)); //writeln('>>> LM_DESTROY END ',Sender.Classname,' Sender=',HexStr(Cardinal(Sender),8),' Handle=',HexStr(Cardinal(Handle),8));
// remove all remaining messages to this component // remove all remaining messages to this component
@ -3968,14 +3958,14 @@ var
if TabPixmapWidget<>nil then begin if TabPixmapWidget<>nil then begin
// there is a pixmap for an old image in the tab // there is a pixmap for an old image in the tab
// -> remove the pixmap widget // -> remove the pixmap widget
gtk_widget_destroy(TabPixmapWidget); DestroyWidget(TabPixmapWidget);
gtk_object_set_data(PGtkObject(TabWidget), 'TabPixmap', nil); gtk_object_set_data(PGtkObject(TabWidget), 'TabPixmap', nil);
TabPixmapWidget:=nil; TabPixmapWidget:=nil;
end; end;
if MenuPixmapWidget<>nil then begin if MenuPixmapWidget<>nil then begin
// there is a pixmap for an old image in the menu // there is a pixmap for an old image in the menu
// -> remove the pixmap widget // -> remove the pixmap widget
gtk_widget_destroy(MenuPixmapWidget); DestroyWidget(MenuPixmapWidget);
gtk_object_set_data(PGtkObject(MenuWidget), 'TabPixmap', nil); gtk_object_set_data(PGtkObject(MenuWidget), 'TabPixmap', nil);
MenuPixmapWidget:=nil; MenuPixmapWidget:=nil;
end; end;
@ -4031,7 +4021,7 @@ var
// -> remove it // -> remove it
gtk_object_set_data(PGtkObject(TabWidget), 'TabCloseBtn', gtk_object_set_data(PGtkObject(TabWidget), 'TabCloseBtn',
nil); nil);
gtk_widget_destroy(TabCloseBtnWidget); DestroyWidget(TabCloseBtnWidget);
TabCloseBtnWidget:=nil; TabCloseBtnWidget:=nil;
end; end;
end; end;
@ -5293,6 +5283,9 @@ end;
{ ============================================================================= { =============================================================================
$Log$ $Log$
Revision 1.168 2002/08/21 11:29:35 lazarus
MG: fixed mem some leaks in ide and gtk
Revision 1.167 2002/08/21 08:13:37 lazarus Revision 1.167 2002/08/21 08:13:37 lazarus
MG: accelerated new/dispose of gdiobjects MG: accelerated new/dispose of gdiobjects