diff --git a/source/main.dfm b/source/main.dfm index 92d4d5f3..223abf89 100644 --- a/source/main.dfm +++ b/source/main.dfm @@ -16,6 +16,7 @@ object MainForm: TMainForm OnDestroy = FormDestroy OnMouseWheel = FormMouseWheel OnResize = FormResize + OnShow = FormShow PixelsPerInch = 96 TextHeight = 13 object spltTopBottom: TSplitter @@ -401,7 +402,6 @@ object MainForm: TMainForm TabOrder = 1 TreeOptions.PaintOptions = [toHotTrack, toShowButtons, toShowDropmark, toShowRoot, toShowTreeLines, toThemeAware, toUseBlendedImages, toGhostedIfUnfocused, toUseExplorerTheme, toHideTreeLinesIfThemed] TreeOptions.SelectionOptions = [toFullRowSelect, toRightClickSelect] - OnAfterPaint = DBtreeAfterPaint OnBeforeCellPaint = DBtreeBeforeCellPaint OnChange = DBtreeChange OnDblClick = DBtreeDblClick diff --git a/source/main.pas b/source/main.pas index 5cd7c758..d41afab4 100644 --- a/source/main.pas +++ b/source/main.pas @@ -571,6 +571,7 @@ type procedure FormDestroy(Sender: TObject); procedure FormCreate(Sender: TObject); procedure AfterFormCreate; + procedure FormShow(Sender: TObject); procedure FormResize(Sender: TObject); procedure actUserManagerExecute(Sender: TObject); procedure actAboutBoxExecute(Sender: TObject); @@ -839,7 +840,6 @@ type procedure spltPreviewMoved(Sender: TObject); procedure actDataSaveBlobToFileExecute(Sender: TObject); procedure DataGridColumnResize(Sender: TVTHeader; Column: TColumnIndex); - procedure DBtreeAfterPaint(Sender: TBaseVirtualTree; TargetCanvas: TCanvas); procedure treeQueryHelpersGetText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; var CellText: string); procedure treeQueryHelpersInitNode(Sender: TBaseVirtualTree; ParentNode, Node: PVirtualNode; @@ -1941,6 +1941,14 @@ begin end; end; +procedure TMainForm.FormShow(Sender: TObject); +begin + // Manually set focus to tree - otherwise the database filter as the first + // control catches focus on startup, which is ugly. + if DBtree.CanFocus then + DBtree.SetFocus; +end; + procedure TMainForm.actUserManagerExecute(Sender: TObject); var Dialog: TUserManagerForm; @@ -7644,6 +7652,11 @@ begin finally FTreeRefreshInProgress := False; + // Tree node filtering needs a hit in special cases, e.g. after a db was dropped + if editDatabaseFilter.Text <> '' then + editDatabaseFilter.OnChange(editDatabaseFilter); + if editTableFilter.Text <> '' then + editTableFilter.OnChange(editTableFilter); end; end; @@ -9439,6 +9452,7 @@ begin VisibleCount := 0; FilterError := False; + DBtree.BeginUpdate; Node := DBtree.GetFirst; while Assigned(Node) do begin Obj := DBtree.GetNodeData(Node); @@ -9458,6 +9472,7 @@ begin end; Node := DBtree.GetNextInitialized(Node); end; + DBtree.EndUpdate; rx.Free; if VisibleCount = 0 then @@ -10200,14 +10215,6 @@ begin end; -procedure TMainForm.DBtreeAfterPaint(Sender: TBaseVirtualTree; TargetCanvas: TCanvas); -begin - // Tree node filtering needs a hit in special cases, e.g. after a db was dropped - editDatabaseFilter.OnChange(editDatabaseFilter); - editTableFilter.OnChange(editTableFilter); -end; - - procedure TMainForm.DBtreeBeforeCellPaint(Sender: TBaseVirtualTree; TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; CellPaintMode: TVTCellPaintMode; CellRect: TRect; var ContentRect: TRect);