summaryrefslogtreecommitdiffstats
path: root/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Menu.java
diff options
context:
space:
mode:
authorSteve Northover <steve>2005-08-09 22:32:01 +0000
committerSteve Northover <steve>2005-08-09 22:32:01 +0000
commit6fa64c0ca137224ae52d6423153f9854a4e2c074 (patch)
tree3d2177e4538b4c1d84dbfd29250d2623140ce037 /bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Menu.java
parentd2b2731da124108eb5bccfe6363ec342d70dfbc1 (diff)
downloadeclipse.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-xbundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Menu.java50
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;