mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-17 22:41:42 +02:00
IDE: Fix crash in Component List when selecting a component from an uninitialized page. Issue #27174.
git-svn-id: trunk@47215 -
This commit is contained in:
parent
5969afd322
commit
6d84d67bba
@ -118,7 +118,7 @@ type
|
|||||||
// Lists have page names. Object holds another StringList for component names.
|
// Lists have page names. Object holds another StringList for component names.
|
||||||
fOrigComponentPageCache: TStringList; // Original
|
fOrigComponentPageCache: TStringList; // Original
|
||||||
fUserComponentPageCache: TStringList; // User ordered
|
fUserComponentPageCache: TStringList; // User ordered
|
||||||
//
|
// Visual container for tabs
|
||||||
FPageControl: TPageControl;
|
FPageControl: TPageControl;
|
||||||
fNoteBookNeedsUpdate: boolean;
|
fNoteBookNeedsUpdate: boolean;
|
||||||
FOnOpenPackage: TNotifyEvent;
|
FOnOpenPackage: TNotifyEvent;
|
||||||
@ -803,16 +803,20 @@ begin
|
|||||||
end;
|
end;
|
||||||
if FPageControl=nil then exit;
|
if FPageControl=nil then exit;
|
||||||
UnselectAllButtons;
|
UnselectAllButtons;
|
||||||
// select button
|
if FSelected=nil then exit;
|
||||||
if (FSelected<>nil) and (FPageControl<>nil) then begin
|
|
||||||
TSpeedButton(FSelected.Button).Down:=true;
|
|
||||||
Assert(Assigned(FSelected.RealPage), 'TComponentPalette.SetSelected: FSelected.RealPage = Nil.');
|
Assert(Assigned(FSelected.RealPage), 'TComponentPalette.SetSelected: FSelected.RealPage = Nil.');
|
||||||
{$IFDEF VerboseComponentPalette}
|
{$IFDEF VerboseComponentPalette}
|
||||||
DebugLn(['TComponentPalette.SetSelected: Setting FPageControl.ActivePage=',
|
DebugLn(['TComponentPalette.SetSelected: Setting FPageControl.ActivePage=',
|
||||||
FSelected.RealPage.PageComponent, ', Index ', FSelected.RealPage.PageComponent.PageIndex]);
|
FSelected.RealPage.PageComponent, ', Index ', FSelected.RealPage.PageComponent.PageIndex]);
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
|
// Switch to the new page
|
||||||
FPageControl.ActivePage:=TTabSheet(FSelected.RealPage.PageComponent);
|
FPageControl.ActivePage:=TTabSheet(FSelected.RealPage.PageComponent);
|
||||||
end;
|
// 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;
|
end;
|
||||||
|
|
||||||
function TComponentPalette.GetSelected: TRegisteredComponent;
|
function TComponentPalette.GetSelected: TRegisteredComponent;
|
||||||
@ -1213,7 +1217,7 @@ begin
|
|||||||
'UpdateNoteBookButtons: Page names do not match.');
|
'UpdateNoteBookButtons: Page names do not match.');
|
||||||
Pg := TComponentPage(Pages[i]);
|
Pg := TComponentPage(Pages[i]);
|
||||||
Pg.InsertVisiblePage(TStringList(fUserOrder.ComponentPages.Objects[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
|
if ((fOldActivePage=Nil) and (i=0)) or (Pg.PageComponent=fOldActivePage) then
|
||||||
Pg.ReAlignButtons;
|
Pg.ReAlignButtons;
|
||||||
end;
|
end;
|
||||||
|
Loading…
Reference in New Issue
Block a user