From 6d84d67bba3b5c7730eb390d6c266e452a7a0f86 Mon Sep 17 00:00:00 2001 From: juha Date: Wed, 17 Dec 2014 23:27:14 +0000 Subject: [PATCH] IDE: Fix crash in Component List when selecting a component from an uninitialized page. Issue #27174. git-svn-id: trunk@47215 - --- ide/componentpalette.pas | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/ide/componentpalette.pas b/ide/componentpalette.pas index 44361d03ff..aee81d8fda 100644 --- a/ide/componentpalette.pas +++ b/ide/componentpalette.pas @@ -118,7 +118,7 @@ type // Lists have page names. Object holds another StringList for component names. fOrigComponentPageCache: TStringList; // Original fUserComponentPageCache: TStringList; // User ordered - // + // Visual container for tabs FPageControl: TPageControl; fNoteBookNeedsUpdate: boolean; FOnOpenPackage: TNotifyEvent; @@ -803,16 +803,20 @@ begin end; if FPageControl=nil then exit; UnselectAllButtons; - // select button - if (FSelected<>nil) and (FPageControl<>nil) then begin - TSpeedButton(FSelected.Button).Down:=true; - Assert(Assigned(FSelected.RealPage), 'TComponentPalette.SetSelected: FSelected.RealPage = Nil.'); - {$IFDEF VerboseComponentPalette} - DebugLn(['TComponentPalette.SetSelected: Setting FPageControl.ActivePage=', - FSelected.RealPage.PageComponent, ', Index ', FSelected.RealPage.PageComponent.PageIndex]); - {$ENDIF} - FPageControl.ActivePage:=TTabSheet(FSelected.RealPage.PageComponent); - end; + if FSelected=nil then exit; + Assert(Assigned(FSelected.RealPage), 'TComponentPalette.SetSelected: FSelected.RealPage = Nil.'); + {$IFDEF VerboseComponentPalette} + DebugLn(['TComponentPalette.SetSelected: Setting FPageControl.ActivePage=', + FSelected.RealPage.PageComponent, ', Index ', FSelected.RealPage.PageComponent.PageIndex]); + {$ENDIF} + // Switch to the new page + FPageControl.ActivePage:=TTabSheet(FSelected.RealPage.PageComponent); + // Build the GUI layout for this page if not done yet. + if FSelected.Button=nil then + ReAlignButtons(FPageControl.ActivePage); + // Select button + Assert(Assigned(FSelected.Button), 'TComponentPalette.SetSelected: FSelected.Button = Nil'); + TSpeedButton(FSelected.Button).Down:=true; end; function TComponentPalette.GetSelected: TRegisteredComponent; @@ -1213,7 +1217,7 @@ begin 'UpdateNoteBookButtons: Page names do not match.'); Pg := TComponentPage(Pages[i]); Pg.InsertVisiblePage(TStringList(fUserOrder.ComponentPages.Objects[i])); - // Initially do not create GUI for all pages but only for active page. + // Initially create GUI only for the active page. if ((fOldActivePage=Nil) and (i=0)) or (Pg.PageComponent=fOldActivePage) then Pg.ReAlignButtons; end;