diff --git a/ide/componentlist.lfm b/ide/componentlist.lfm index 1396acf35e..f8bc216438 100644 --- a/ide/componentlist.lfm +++ b/ide/componentlist.lfm @@ -8,6 +8,7 @@ object ComponentListForm: TComponentListForm ClientHeight = 556 ClientWidth = 338 KeyPreview = True + OnClose = FormClose OnKeyDown = FormKeyDown Position = poScreenCenter LCLVersion = '0.9.31' diff --git a/ide/componentlist.pas b/ide/componentlist.pas index bc564d425a..17e2ae5a5a 100644 --- a/ide/componentlist.pas +++ b/ide/componentlist.pas @@ -62,6 +62,7 @@ type procedure ComponentsListboxDblClick(Sender: TObject); procedure ComponentsListboxDrawItem(Control: TWinControl; Index: Integer; ARect: TRect; State: TOwnerDrawState); + procedure FormClose(Sender: TObject; var CloseAction: TCloseAction); procedure TreeCustomDrawItem(Sender: TCustomTreeView; Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean); procedure ComponentsListboxKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); @@ -360,6 +361,25 @@ begin end; end; +procedure TComponentListForm.FormClose(Sender: TObject; + var CloseAction: TCloseAction); +begin + // Using a dock manager... + if Parent<>nil then + begin + CloseAction := caNone; + //todo: helper function in DockManager or IDEDockMaster for closing forms. + // Only close the window if it's floating. + // AnchorDocking doesn't seem to initialize 'FloatingDockSiteClass' so we can't just check 'Floating'. + // Also, AnchorDocking use nested forms, so the check for HostDockSite.Parent. + if Assigned(HostDockSite) and (HostDockSite.DockClientCount <= 1) + and (HostDockSite is TCustomForm) and (HostDockSite.Parent = nil) then + begin + TCustomForm(HostDockSite).Close; + end; + end; +end; + procedure TComponentListForm.TreeCustomDrawItem(Sender: TCustomTreeView; Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean); var