fix #39 - dont autoscroll to display new messages when the view is not at the bottom

This commit is contained in:
Basile Burg 2020-05-12 22:05:16 +02:00
parent 0c17a4d187
commit d646b8c296
1 changed files with 12 additions and 1 deletions

View File

@ -114,6 +114,7 @@ type
fOptionsBackup: TMessagesOptions; fOptionsBackup: TMessagesOptions;
fBtns: array[TAppMessageCtxt] of TToolButton; fBtns: array[TAppMessageCtxt] of TToolButton;
fFiltering: boolean; fFiltering: boolean;
fMustScrollToBack: boolean;
function itemShouldBeVisible(item: TTreeNode; aCtxt: TAppMessageCtxt): boolean; function itemShouldBeVisible(item: TTreeNode; aCtxt: TAppMessageCtxt): boolean;
procedure filterMessages(aCtxt: TAppMessageCtxt); procedure filterMessages(aCtxt: TAppMessageCtxt);
procedure clearOutOfRangeMessg; procedure clearOutOfRangeMessg;
@ -165,6 +166,7 @@ type
procedure clearbyContext(aCtxt: TAppMessageCtxt); procedure clearbyContext(aCtxt: TAppMessageCtxt);
procedure clearbyData(data: Pointer); procedure clearbyData(data: Pointer);
procedure scrollToBack; procedure scrollToBack;
procedure checkIfMustScrollToBack();
protected protected
procedure setToolBarFlat(value: boolean); override; procedure setToolBarFlat(value: boolean); override;
procedure updateLoop; override; procedure updateLoop; override;
@ -977,6 +979,7 @@ begin
fBtns[aCtxt].Click; fBtns[aCtxt].Click;
if fastDisplay then if fastDisplay then
IncLoopUpdate; IncLoopUpdate;
checkIfMustScrollToBack();
item := List.Items.AddObject(nil, msg, dt); item := List.Items.AddObject(nil, msg, dt);
item.ImageIndex := iconIndex(aKind); item.ImageIndex := iconIndex(aKind);
item.SelectedIndex := item.ImageIndex; item.SelectedIndex := item.ImageIndex;
@ -1070,9 +1073,17 @@ begin
list.EndUpdate; list.EndUpdate;
end; end;
procedure TMessagesWidget.checkIfMustScrollToBack();
var
i: TTreeNode;
begin
i := List.BottomItem;
fMustScrollToBack := i.isNotNil and i.IsVisible;
end;
procedure TMessagesWidget.scrollToBack; procedure TMessagesWidget.scrollToBack;
begin begin
if not Visible then if not Visible or not fMustScrollToBack then
exit; exit;
if List.BottomItem.isNotNil then if List.BottomItem.isNotNil then
List.BottomItem.MakeVisible; List.BottomItem.MakeVisible;