mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-06 20:26:13 +02:00
* Fixed callback removal in items
git-svn-id: trunk@7706 -
This commit is contained in:
parent
fa8807c13c
commit
e1b1eceef0
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user