FIX: Bug [0001982] File Search with Brief View Navigation style Causes Issues with Selecting Files

This commit is contained in:
cordylus 2019-06-29 01:14:54 +00:00
commit 4555b89e88
3 changed files with 37 additions and 6 deletions

View file

@ -517,6 +517,9 @@ procedure TBriefFileView.CreateDefault(AOwner: TWinControl);
begin
inherited CreateDefault(AOwner);
tmMouseScroll.Interval := 350;
// Changing height of a FileView with horizontal scrolling when hiding quick search causes file jumps under mouse
quickSearch.LimitedAutoHide := True;
end;
function TBriefFileView.GetFileViewGridClass: TFileViewGridClass;

View file

@ -134,7 +134,7 @@ const
procedure TOrderedFileView.AfterChangePath;
begin
if Filtered then
if Filtered or quickSearch.Visible then
begin
FFileFilter:= EmptyStr;
quickSearch.Finalize;
@ -159,7 +159,6 @@ begin
lblFilter.Caption := Self.lblFilter.Caption;
lblFilter.Visible := Self.lblFilter.Visible;
Self.quickSearch.CloneTo(quickSearch);
quickSearch.Visible := Self.quickSearch.Visible;
FFocusQuickSearch := Self.quickSearch.edtSearch.Focused;
end;
end;
@ -286,6 +285,11 @@ begin
case Key of
VK_ESCAPE:
begin
if quickSearch.Visible and not Filtered then
begin
quickSearch.Finalize;
Key := 0;
end;
if Filtered and (GetCurrentWorkType <> fvwtNone) then
begin
pmOperationsCancel.Items.Clear;

View file

@ -65,6 +65,7 @@ type
Finalizing: Boolean;
FUpdateCount: Integer;
FNeedsChangeSearch: Boolean;
FIntendedLeave: Boolean;
procedure BeginUpdate;
procedure CheckFilesOrDirectoriesDown;
procedure EndUpdate;
@ -80,6 +81,7 @@ type
procedure CancelFilter;
procedure ProcessParams(const SearchMode: TQuickSearchMode; const Params: array of String);
public
LimitedAutoHide: Boolean;
OnChangeSearch: TOnChangeSearch;
OnChangeFilter: TOnChangeFilter;
OnExecute: TOnExecute;
@ -88,6 +90,7 @@ type
destructor Destroy; override;
procedure CloneTo(AQuickSearch: TfrmQuickSearch);
procedure Execute(SearchMode: TQuickSearchMode; const Params: array of String; Char: TUTF8Char = #0);
procedure Reset;
procedure Finalize;
function CheckSearchOrFilter(var Key: Word): Boolean; overload;
function CheckSearchOrFilter(var UTF8Key: TUTF8Char): Boolean; overload;
@ -217,6 +220,11 @@ begin
AQuickSearch.tglFilter.OnChange := nil;
AQuickSearch.tglFilter.Checked := Self.tglFilter.Checked;
AQuickSearch.tglFilter.OnChange := TempEvent;
AQuickSearch.Visible := Self.Visible;
// Do not clone LimitedAutoHide but honor it instead, because it depends on the parent fileview
if Self.Visible and not Self.edtSearch.Focused and Self.LimitedAutoHide and not AQuickSearch.LimitedAutoHide then
AQuickSearch.FrameExit(nil); // do autohide if needed
end;
procedure TfrmQuickSearch.DoOnChangeSearch;
@ -257,16 +265,21 @@ begin
ProcessParams(SearchMode, Params);
end;
procedure TfrmQuickSearch.Finalize;
procedure TfrmQuickSearch.Reset;
begin
PopFilter;
Self.Visible := False;
Options.LastSearchMode := qsNone;
Options.Direction := qsdNone;
Options.CancelSearchMode:=qscmNode;
end;
procedure TfrmQuickSearch.Finalize;
begin
Reset;
Hide;
end;
{ TfrmQuickSearch.ProcessParams }
procedure TfrmQuickSearch.ProcessParams(const SearchMode: TQuickSearchMode; const Params: array of String);
var
@ -659,6 +672,7 @@ begin
begin
Key := 0;
FIntendedLeave := True;
DoHide;
end;
@ -688,6 +702,8 @@ begin
end;
procedure TfrmQuickSearch.FrameExit(Sender: TObject);
var
DontHide: Boolean;
begin
{$IF DEFINED(LCLQT) or DEFINED(LCLQT5)}
// Workaround: QuickSearch frame lose focus on SpeedButton click
@ -701,10 +717,18 @@ begin
Self.Active := False;
if (Mode = qsFilter) and (edtSearch.Text <> EmptyStr) then
Self.Visible := not gQuickFilterAutoHide
if FIntendedLeave then
begin
FIntendedLeave := False;
DontHide := False;
end
else
Finalize;
DontHide := LimitedAutoHide;
if (Mode = qsFilter) and (edtSearch.Text <> EmptyStr) then
Self.Visible := DontHide or not gQuickFilterAutoHide
else
if DontHide then Reset else Finalize;
Finalizing := False;
end;