mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-18 17:39:22 +02:00
LCL: TListView.OwnerData: fixed behaviour of ItemIndex when multiselection is enabled. issue #19825
git-svn-id: trunk@35597 -
This commit is contained in:
parent
9f7ab89220
commit
e222b242b6
@ -354,7 +354,11 @@ begin
|
|||||||
begin
|
begin
|
||||||
FSelected := Item;
|
FSelected := Item;
|
||||||
Include(FFlags,lffSelectedValid);
|
Include(FFlags,lffSelectedValid);
|
||||||
if OwnerData then FSelectedIdx:=nm^.iItem;
|
if OwnerData then
|
||||||
|
begin
|
||||||
|
if (MultiSelect and (FSelectedIdx = -1)) or not MultiSelect then
|
||||||
|
FSelectedIdx:=nm^.iItem;
|
||||||
|
end;
|
||||||
//DebugLn('TCustomListView.CNNotify FSelected=',dbgs(FSelected));
|
//DebugLn('TCustomListView.CNNotify FSelected=',dbgs(FSelected));
|
||||||
DoSelectItem(Item, True);
|
DoSelectItem(Item, True);
|
||||||
end;
|
end;
|
||||||
@ -1351,17 +1355,19 @@ begin
|
|||||||
if (AValue < -1) or (AValue >= Items.Count) then
|
if (AValue < -1) or (AValue >= Items.Count) then
|
||||||
raise Exception.CreateFmt(rsListIndexExceedsBounds,[AValue]);
|
raise Exception.CreateFmt(rsListIndexExceedsBounds,[AValue]);
|
||||||
|
|
||||||
if OwnerData then
|
|
||||||
FSelectedIdx := AValue;
|
|
||||||
if AValue = -1 then
|
if AValue = -1 then
|
||||||
begin
|
Selected := nil
|
||||||
Selected := nil;
|
else
|
||||||
end else
|
|
||||||
begin
|
begin
|
||||||
// trigger ws selection update, it'll update Selected too
|
// trigger ws selection update, it'll update Selected too
|
||||||
if OwnerData then
|
if OwnerData then
|
||||||
Items.Item[AValue].Selected := True
|
begin
|
||||||
else
|
// clean selection when itemindex is changed. issue #19825
|
||||||
|
if MultiSelect then
|
||||||
|
Selected := nil;
|
||||||
|
FSelectedIdx := AValue;
|
||||||
|
Items.Item[AValue].Selected := True;
|
||||||
|
end else
|
||||||
Selected := Items.Item[AValue];
|
Selected := Items.Item[AValue];
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
@ -1377,8 +1383,10 @@ begin
|
|||||||
raise Exception.Create('Item does not belong to this listview');
|
raise Exception.Create('Item does not belong to this listview');
|
||||||
if FSelected = AValue then Exit;
|
if FSelected = AValue then Exit;
|
||||||
//DebugLn('TCustomListView.SetSelection FSelected=',dbgs(FSelected));
|
//DebugLn('TCustomListView.SetSelection FSelected=',dbgs(FSelected));
|
||||||
if AValue = nil then begin
|
if AValue = nil then
|
||||||
if MultiSelect then begin
|
begin
|
||||||
|
if MultiSelect then
|
||||||
|
begin
|
||||||
BeginUpdate;
|
BeginUpdate;
|
||||||
try
|
try
|
||||||
for i:=0 to Items.Count-1 do
|
for i:=0 to Items.Count-1 do
|
||||||
@ -1388,17 +1396,16 @@ begin
|
|||||||
finally
|
finally
|
||||||
EndUpdate;
|
EndUpdate;
|
||||||
end;
|
end;
|
||||||
end
|
end else
|
||||||
else
|
|
||||||
FSelected.Selected := False;
|
FSelected.Selected := False;
|
||||||
FSelected := nil;
|
FSelected := nil;
|
||||||
Include(FFlags,lffSelectedValid);
|
Include(FFlags,lffSelectedValid);
|
||||||
end
|
end else
|
||||||
else begin
|
begin
|
||||||
FSelected := AValue;
|
FSelected := AValue;
|
||||||
if HandleAllocated then
|
if HandleAllocated then
|
||||||
TWSCustomListViewClass(WidgetSetClass).ItemSetState(Self, FSelected.Index,
|
TWSCustomListViewClass(WidgetSetClass).ItemSetState(Self, FSelected.Index,
|
||||||
FSelected, lisSelected, True);
|
FSelected, lisSelected, True);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
@ -727,9 +727,10 @@ begin
|
|||||||
|
|
||||||
if (AState in FStates) = AIsSet then Exit;
|
if (AState in FStates) = AIsSet then Exit;
|
||||||
|
|
||||||
if AIsSet
|
if AIsSet then
|
||||||
then Include(FStates, AState)
|
Include(FStates, AState)
|
||||||
else Exclude(FStates, AState);
|
else
|
||||||
|
Exclude(FStates, AState);
|
||||||
|
|
||||||
if not WSUpdateAllowed and not IsOwnerData then Exit;
|
if not WSUpdateAllowed and not IsOwnerData then Exit;
|
||||||
LV := FOwner.FOwner;
|
LV := FOwner.FOwner;
|
||||||
|
Loading…
Reference in New Issue
Block a user