From 33ed35c41725e4a8232a7776d19452a392bee9d5 Mon Sep 17 00:00:00 2001 From: juha Date: Mon, 9 Mar 2020 21:29:06 +0000 Subject: [PATCH] LCL,IDE: Turn TMenuItem.Delete into a function returning the TMenuItem. Delete+Free unused MenuItems correctly in IDE's code. Issue #36776. git-svn-id: trunk@62728 - --- ide/frames/modematrixctrl.pas | 2 +- ide/mainbase.pas | 4 ++-- lcl/include/menuitem.inc | 21 ++++++--------------- lcl/menus.pp | 2 +- 4 files changed, 10 insertions(+), 19 deletions(-) diff --git a/ide/frames/modematrixctrl.pas b/ide/frames/modematrixctrl.pas index eb9e401994..3341306629 100644 --- a/ide/frames/modematrixctrl.pas +++ b/ide/frames/modematrixctrl.pas @@ -1042,7 +1042,7 @@ begin end; // delete not needed items while fTypePopupMenu.Items.Count>TypeColumn.PickList.Count do - fTypePopupMenu.Items[fTypePopupMenu.Items.Count-1].Free; + fTypePopupMenu.Items.Delete(fTypePopupMenu.Items.Count-1).Free; XY:=Point(0,0); i:=TypeColumn.PickList.Count-1; diff --git a/ide/mainbase.pas b/ide/mainbase.pas index d326fcc08f..a9956208c8 100644 --- a/ide/mainbase.pas +++ b/ide/mainbase.pas @@ -365,7 +365,7 @@ begin AddMode(i, Project1.BuildModes[i]); // remove unused menuitems while Items.Count > CurIndex do - Items[Items.Count - 1].Free; + Items.Delete(Items.Count-1).Free; inherited DoPopup(Sender); end; @@ -448,7 +448,7 @@ begin end; // remove unneeded items while SetDefaultMenuItem.Count>TheIndex do - SetDefaultMenuItem.Items[SetDefaultMenuItem.Count-1].Free; + SetDefaultMenuItem.Items.Delete(SetDefaultMenuItem.Count-1).Free; end; class procedure TNewFormUnitToolButton.UpdateHints; diff --git a/lcl/include/menuitem.inc b/lcl/include/menuitem.inc index c10850f8b8..20da0f5fce 100644 --- a/lcl/include/menuitem.inc +++ b/lcl/include/menuitem.inc @@ -152,26 +152,17 @@ begin //DebugLn('TMenuItem.CreateHandle END ',Name,':',ClassName); end; -{------------------------------------------------------------------------------ - Method: TMenuItem.Delete - Params: Index: - Returns: Nothing - - Description of the procedure for the class. - ------------------------------------------------------------------------------} -procedure TMenuItem.Delete(Index: Integer); -var - Cur: TMenuItem; +function TMenuItem.Delete(Index: Integer): TMenuItem; begin if (Index < 0) or (FItems = nil) or (Index >= GetCount) then raise EMenuError.Create(SMenuIndexError); - Cur := TMenuItem(FItems[Index]); - if Cur = nil then + Result := TMenuItem(FItems[Index]); + if Result = nil then raise EMenuError.Create(SMenuItemIsNil); - Cur.DestroyHandle; + Result.DestroyHandle; FItems.Delete(Index); - Cur.FParent := nil; - Cur.FOnChange := nil; + Result.FParent := nil; + Result.FOnChange := nil; InvalidateMergedItems; MenuChanged(Count = 0); end; diff --git a/lcl/menus.pp b/lcl/menus.pp index 6b73aaf753..16499316f2 100644 --- a/lcl/menus.pp +++ b/lcl/menus.pp @@ -265,7 +265,7 @@ type procedure Add(const AItems: array of TMenuItem); procedure AddSeparator; procedure Click; virtual; - procedure Delete(Index: Integer); + function Delete(Index: Integer): TMenuItem; procedure HandleNeeded; virtual; procedure Insert(Index: Integer; Item: TMenuItem); procedure RecreateHandle; virtual;