mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-15 01:19:29 +02:00
LCL: Improved TListView selection handling. Issue #34877, patch from Yuriy Sydorov.
git-svn-id: trunk@60703 -
This commit is contained in:
parent
3b6eb99826
commit
a8026f0983
@ -301,7 +301,10 @@ begin
|
|||||||
end;
|
end;
|
||||||
LVN_ITEMCHANGED:
|
LVN_ITEMCHANGED:
|
||||||
begin
|
begin
|
||||||
Item := Items[nm^.iItem];
|
if nm^.iItem < 0 then
|
||||||
|
Item := nil
|
||||||
|
else
|
||||||
|
Item := Items[nm^.iItem];
|
||||||
//DebugLn('TCustomListView.CNNotify Count=',dbgs(Items.Count),' nm^.iItem=',dbgs(nm^.iItem),' destroying=',dbgs(lifDestroying in Item.FFlags));
|
//DebugLn('TCustomListView.CNNotify Count=',dbgs(Items.Count),' nm^.iItem=',dbgs(nm^.iItem),' destroying=',dbgs(lifDestroying in Item.FFlags));
|
||||||
if (Item <> nil) and (not OwnerData) and (lifDestroying in Item.FFlags) then
|
if (Item <> nil) and (not OwnerData) and (lifDestroying in Item.FFlags) then
|
||||||
begin
|
begin
|
||||||
@ -311,8 +314,6 @@ begin
|
|||||||
InvalidateSelected;
|
InvalidateSelected;
|
||||||
end else
|
end else
|
||||||
begin
|
begin
|
||||||
// owner data
|
|
||||||
Change(Item, nm^.uChanged);
|
|
||||||
if (nm^.uChanged = LVIF_STATE) then
|
if (nm^.uChanged = LVIF_STATE) then
|
||||||
begin
|
begin
|
||||||
// checkbox
|
// checkbox
|
||||||
@ -340,12 +341,13 @@ begin
|
|||||||
// select state changed
|
// select state changed
|
||||||
if (nm^.uNewState and LVIS_SELECTED) = 0 then
|
if (nm^.uNewState and LVIS_SELECTED) = 0 then
|
||||||
begin
|
begin
|
||||||
if not OwnerData and (FSelected = Item) then
|
if not OwnerData then
|
||||||
InvalidateSelected
|
begin
|
||||||
else if OwnerData and (nm^.iItem=FSelectedIdx) then
|
if FSelected = Item then
|
||||||
InvalidateSelected;
|
InvalidateSelected
|
||||||
if nm^.iItem > -1 then
|
end else
|
||||||
DoSelectItem(Item, False);
|
if (nm^.iItem < 0) or (nm^.iItem = FSelectedIdx) then
|
||||||
|
InvalidateSelected;
|
||||||
end else
|
end else
|
||||||
begin
|
begin
|
||||||
FSelected := Item;
|
FSelected := Item;
|
||||||
@ -355,11 +357,13 @@ begin
|
|||||||
FSelectedIdx:=nm^.iItem;
|
FSelectedIdx:=nm^.iItem;
|
||||||
end;
|
end;
|
||||||
//DebugLn('TCustomListView.CNNotify FSelected=',dbgs(FSelected));
|
//DebugLn('TCustomListView.CNNotify FSelected=',dbgs(FSelected));
|
||||||
if nm^.iItem > -1 then
|
|
||||||
DoSelectItem(Item, True);
|
|
||||||
end;
|
end;
|
||||||
|
Change(Item, nm^.uChanged);
|
||||||
|
DoSelectItem(Item, (nm^.uNewState and LVIS_SELECTED) <> 0);
|
||||||
end;
|
end;
|
||||||
end;
|
end
|
||||||
|
else
|
||||||
|
Change(Item, nm^.uChanged);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
// LVN_GETINFOTIP:
|
// LVN_GETINFOTIP:
|
||||||
@ -606,7 +610,8 @@ end;
|
|||||||
{------------------------------------------------------------------------------}
|
{------------------------------------------------------------------------------}
|
||||||
procedure TCustomListView.DoSelectItem(AItem: TListItem; ASelected: Boolean);
|
procedure TCustomListView.DoSelectItem(AItem: TListItem; ASelected: Boolean);
|
||||||
begin
|
begin
|
||||||
AItem.Selected:=ASelected;
|
if Assigned(AItem) then
|
||||||
|
AItem.Selected:=ASelected;
|
||||||
if Assigned(FOnSelectItem) and
|
if Assigned(FOnSelectItem) and
|
||||||
([lffItemsMoving, lffItemsSorting] * FFlags = []) then
|
([lffItemsMoving, lffItemsSorting] * FFlags = []) then
|
||||||
FOnSelectItem(Self, AItem, ASelected);
|
FOnSelectItem(Self, AItem, ASelected);
|
||||||
|
Loading…
Reference in New Issue
Block a user