* Fixed callback removal in items

git-svn-id: trunk@7706 -
This commit is contained in:
marc 2005-09-14 23:16:51 +00:00
parent fa8807c13c
commit e1b1eceef0
2 changed files with 39 additions and 14 deletions

View File

@ -317,12 +317,16 @@ end;
------------------------------------------------------------------------------}
procedure TGtkListStringList.ConnectAllCallbacks;
var
i, Cnt: integer;
i: Integer;
begin
BeginUpdate;
Cnt:=Count-1;
for i:=0 to Cnt-1 do
ConnectItemCallbacks(i);
UpdateItemCache;
i := FCachedCount - 1;
while i >= 0 do
begin
ConnectItemCallbacks(FCachedItems[i]);
Dec(i);
end;
EndUpdate;
end;
@ -331,20 +335,35 @@ end;
------------------------------------------------------------------------------}
procedure TGtkListStringList.RemoveItemCallbacks(Index: integer);
var
ListItem: PGtkListItem;
begin
UpdateItemCache;
ListItem:=FCachedItems[Index];
gtk_object_set_data(PGtkObject(ListItem),GtkListItemLCLListTag,nil);
gtk_object_set_data(PGtkObject(ListItem),GtkListItemGtkListTag,nil);
RemoveItemCallbacks(FCachedItems[Index]);
end;
procedure TGtkListStringList.RemoveItemCallbacks(AItem: PGtkListItem);
var
ChildWidget: Pointer;
begin
gtk_object_set_data(PGtkObject(AItem), GtkListItemLCLListTag, nil);
gtk_object_set_data(PGtkObject(AItem), GtkListItemGtkListTag, nil);
{$ifdef GTK2}
g_signal_handlers_disconnect_by_func(
G_OBJECT(ListItem),G_CALLBACK(@gtkListItemExposeEvent),ListItem);
G_OBJECT(AItem), G_CALLBACK(@gtkListItemExposeEvent), AItem);
{$else}
gtk_signal_disconnect_by_func(
PGtkObject(ListItem),TGTKSignalFunc(@gtkListItemDrawAfterCB),ListItem);
PGtkObject(AItem), TGTKSignalFunc(@gtkListItemDrawAfterCB), AItem);
{$endif}
if FWithCheckBox
then begin
ChildWidget := PPointer(PGTKBox(PGtkBin(AItem)^.child)^.Children^.Data)^;
gtk_signal_disconnect_by_func(
PGtkObject(ChildWidget), TGTKSignalFunc(@gtkListItemToggledCB), AItem);
end;
if FOwner is TCustomComboBox
then begin
gtk_signal_disconnect_by_func(
PGtkObject(AItem), TGTKSignalFunc(@gtkListItemSelectAfterCB), AItem);
end;
end;
{------------------------------------------------------------------------------
@ -356,8 +375,13 @@ var
i: integer;
begin
BeginUpdate;
for i:=0 to Count-1 do
RemoveItemCallbacks(i);
UpdateItemCache;
i := FCachedCount - 1;
while i >= 0 do
begin
RemoveItemCallbacks(FCachedItems[i]);
Dec(i);
end;
EndUpdate;
end;

View File

@ -50,7 +50,8 @@ type
procedure ConnectItemCallbacks(Index: integer);
procedure ConnectItemCallbacks(Li: PGtkListItem); virtual;
procedure ConnectAllCallbacks; virtual;
procedure RemoveItemCallbacks(Index: integer); virtual;
procedure RemoveItemCallbacks(Index: integer);
procedure RemoveItemCallbacks(AItem: PGtkListItem); virtual;
procedure RemoveAllCallbacks; virtual;
procedure UpdateItemCache;
function CacheValid: boolean;