Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 14 additions & 12 deletions source/column_selection.pas
Original file line number Diff line number Diff line change
Expand Up @@ -150,20 +150,20 @@ procedure TfrmColumnSelection.editFilterButtonClick(Sender: TObject);
}
procedure TfrmColumnSelection.chklistColumnsClickCheck(Sender: TObject);
var
i : Integer;
i, CheckedIndex : Integer;
AllSelected, NoneSelected : Boolean;
FocusedItem: String;
FocusedItemIndex: Integer;
begin
// Add or remove clicked item from list
if chklistColumns.ItemIndex > -1 then begin
FocusedItem := chklistColumns.Items[chklistColumns.ItemIndex];
if chklistColumns.Checked[chklistColumns.ItemIndex] then begin
FCheckedColumns.Add(FocusedItem)
// Sync check states of all displayed items into FCheckedColumns. Using
// ItemIndex to detect the clicked item would be wrong on macOS, where the
// check event fires before the list selection is updated. See issue 2554.
for i:=0 to chklistColumns.Items.Count-1 do begin
CheckedIndex := FCheckedColumns.IndexOf(chklistColumns.Items[i]);
if chklistColumns.Checked[i] then begin
if CheckedIndex = -1 then
FCheckedColumns.Add(chklistColumns.Items[i]);
end else begin
FocusedItemIndex := FCheckedColumns.IndexOf(FocusedItem);
if FocusedItemIndex > -1 then
FCheckedColumns.Delete(FocusedItemIndex);
if CheckedIndex > -1 then
FCheckedColumns.Delete(CheckedIndex);
end;
end;

Expand Down Expand Up @@ -225,6 +225,7 @@ procedure TfrmColumnSelection.FormDestroy(Sender: TObject);
begin
AppSettings.WriteInt(asColumnSelectorWidth, ScaleFormToDesign(Width));
AppSettings.WriteInt(asColumnSelectorHeight, ScaleFormToDesign(Height));
FCheckedColumns.Free;
end;


Expand All @@ -243,8 +244,9 @@ procedure TfrmColumnSelection.FormDeactivate(Sender: TObject);
procedure TfrmColumnSelection.FormClose(Sender: TObject; var Action:
TCloseAction);
begin
// FormClose can run twice when the form is closed by OK and afterwards
// deactivated - free FCheckedColumns in FormDestroy only. See issue 2554.
Action := caFree;
FCheckedColumns.Free;
end;


Expand Down
Loading