From d0352dc2c21bf96444319617f8845e42a143e129 Mon Sep 17 00:00:00 2001 From: paul Date: Tue, 23 Mar 2010 08:12:12 +0000 Subject: [PATCH] lcl: recreate menu item if it is owned by another menu before showing (issue #0014144) git-svn-id: trunk@24179 - --- lcl/include/menuitem.inc | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/lcl/include/menuitem.inc b/lcl/include/menuitem.inc index 5d211e28d2..386cd832c2 100644 --- a/lcl/include/menuitem.inc +++ b/lcl/include/menuitem.inc @@ -274,15 +274,30 @@ begin end; procedure TMenuItem.CheckChildrenHandles; + + function GetMenu(Item: TMenuItem): TMenu; + begin + repeat + Result := Item.Menu; + Item := Item.Parent; + until (Result <> nil) or (Item = nil); + end; + var i: Integer; + AMenu: TMenu; begin if FItems <> nil then begin + AMenu := GetMenu(Self); for i := 0 to Count - 1 do begin if Items[i].Visible then + begin + if Items[i].HandleAllocated and (GetMenu(Items[i]) <> AMenu) then + Items[i].DestroyHandle; Items[i].HandleNeeded; + end; end; end; end;