diff options
author | Steve Northover <steve> | 2005-08-09 22:32:01 +0000 |
---|---|---|
committer | Steve Northover <steve> | 2005-08-09 22:32:01 +0000 |
commit | 6fa64c0ca137224ae52d6423153f9854a4e2c074 (patch) | |
tree | 3d2177e4538b4c1d84dbfd29250d2623140ce037 /bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Menu.java | |
parent | d2b2731da124108eb5bccfe6363ec342d70dfbc1 (diff) | |
download | eclipse.platform.swt-6fa64c0ca137224ae52d6423153f9854a4e2c074.tar.gz eclipse.platform.swt-6fa64c0ca137224ae52d6423153f9854a4e2c074.tar.xz eclipse.platform.swt-6fa64c0ca137224ae52d6423153f9854a4e2c074.zip |
45708 & 4862 - Recursive dispose
Diffstat (limited to 'bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Menu.java')
-rwxr-xr-x | bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Menu.java | 50 |
1 files changed, 28 insertions, 22 deletions
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Menu.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Menu.java index 112e328ff9..b0b308414c 100755 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Menu.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Menu.java @@ -776,19 +776,21 @@ public MenuItem [] getItems () { } return result; } - int count = 0; + int index = 0, count = 0; int length = OS.IsWinCE ? 4 : OS.GetMenuItemCount (handle); MenuItem [] items = new MenuItem [length]; MENUITEMINFO info = new MENUITEMINFO (); info.cbSize = MENUITEMINFO.sizeof; info.fMask = OS.MIIM_DATA; - while (OS.GetMenuItemInfo (handle, count, true, info)) { + while (OS.GetMenuItemInfo (handle, index, true, info)) { if (count == items.length) { MenuItem [] newItems = new MenuItem [count + 4]; System.arraycopy (items, 0, newItems, 0, count); items = newItems; } - items [count++] = display.getMenuItem (info.dwItemData); + MenuItem item = display.getMenuItem (info.dwItemData); + if (item != null) items [count++] = item; + index++; } if (count == items.length) return items; MenuItem [] result = new MenuItem [count]; @@ -1040,38 +1042,43 @@ void redraw () { } } -void releaseChild () { - super.releaseChild (); - if (cascade != null) cascade.releaseMenu (); - if ((style & SWT.BAR) != 0) { - display.removeBar (this); - if (this == parent.menuBar) { - parent.setMenuBar (null); - } - } else { - if ((style & SWT.POP_UP) != 0) { - display.removePopup (this); - } - } -} - void releaseHandle () { super.releaseHandle (); handle = hwndCB = 0; } -void releaseWidget () { +void releaseChildren (boolean destroy) { MenuItem [] items = getItems (); for (int i=0; i<items.length; i++) { MenuItem item = items [i]; - if (!item.isDisposed ()) { + if (item != null && !item.isDisposed ()) { if (OS.IsPPC && hwndCB != 0) { item.dispose (); } else { - item.releaseResources (); + item.releaseChildren (false); } } } + super.releaseChildren (destroy); +} + +void releaseParent () { + super.releaseParent (); + if (cascade != null) cascade.releaseMenu (); + if ((style & SWT.BAR) != 0) { + display.removeBar (this); + if (this == parent.menuBar) { + parent.setMenuBar (null); + } + } else { + if ((style & SWT.POP_UP) != 0) { + display.removePopup (this); + } + } +} + +void releaseWidget () { + super.releaseWidget (); if (OS.IsPPC && hwndCB != 0) { if (imageList != null) { OS.SendMessage (hwndCB, OS.TB_SETIMAGELIST, 0, 0); @@ -1079,7 +1086,6 @@ void releaseWidget () { imageList = null; } } - super.releaseWidget (); if (parent != null) parent.removeMenu (this); parent = null; cascade = null; |