summaryrefslogtreecommitdiffstats
path: root/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt
diff options
context:
space:
mode:
authorSteve Northover <steve>2007-10-25 19:07:54 +0000
committerSteve Northover <steve>2007-10-25 19:07:54 +0000
commitac1cb622bd117559fce6fef13f61cee1624cd94b (patch)
tree38e8afbb7be18fcfc294e7bc0aa51e9447ebba9d /bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt
parentf4bf784633a3133897e45a4c20e9dd0f60a6f50f (diff)
downloadeclipse.platform.swt-ac1cb622bd117559fce6fef13f61cee1624cd94b.tar.gz
eclipse.platform.swt-ac1cb622bd117559fce6fef13f61cee1624cd94b.tar.xz
eclipse.platform.swt-ac1cb622bd117559fce6fef13f61cee1624cd94b.zip
207263 - NPE in org.eclipse.swt.widgets.Control.WM_MENUSELECT
Diffstat (limited to 'bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt')
-rwxr-xr-xbundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Menu.java9
-rwxr-xr-xbundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/MenuItem.java14
2 files changed, 18 insertions, 5 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 bd757dc484..2cd3dc7b86 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
@@ -568,12 +568,17 @@ void destroyItem (MenuItem item) {
}
void destroyWidget () {
+ MenuItem parentItem = cascade;
int /*long*/ hMenu = handle, hCB = hwndCB;
releaseHandle ();
if (OS.IsWinCE && hCB != 0) {
OS.CommandBar_Destroy (hCB);
} else {
- if (hMenu != 0) OS.DestroyMenu (hMenu);
+ if (parentItem != null) {
+ if (!OS.IsSP) parentItem.setMenu (null, true);
+ } else {
+ if (hMenu != 0) OS.DestroyMenu (hMenu);
+ }
}
}
@@ -1098,6 +1103,7 @@ void redraw () {
void releaseHandle () {
super.releaseHandle ();
handle = hwndCB = 0;
+ cascade = null;
}
void releaseChildren (boolean destroy) {
@@ -1144,7 +1150,6 @@ void releaseWidget () {
}
if (parent != null) parent.removeMenu (this);
parent = null;
- cascade = null;
}
/**
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/MenuItem.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/MenuItem.java
index 1cd4494101..01a0e11789 100755
--- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/MenuItem.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/MenuItem.java
@@ -500,7 +500,6 @@ void releaseHandle () {
}
void releaseMenu () {
- if (!OS.IsSP) setMenu (null);
menu = null;
}
@@ -781,6 +780,10 @@ public void setMenu (Menu menu) {
error (SWT.ERROR_INVALID_PARENT);
}
}
+ setMenu (menu, false);
+}
+
+void setMenu (Menu menu, boolean dispose) {
/* Assign the new menu */
Menu oldMenu = this.menu;
@@ -848,8 +851,8 @@ public void setMenu (Menu menu) {
info.fMask |= OS.MIIM_SUBMENU;
info.hSubMenu = menu.handle;
}
- OS.RemoveMenu (hMenu, index, OS.MF_BYPOSITION);
if (OS.IsWinCE) {
+ OS.RemoveMenu (hMenu, index, OS.MF_BYPOSITION);
/*
* On WinCE, InsertMenuItem() is not available. The fix is to
* use SetMenuItemInfo() but this call does not set the menu item
@@ -876,7 +879,12 @@ public void setMenu (Menu menu) {
}
}
} else {
- success = OS.InsertMenuItem (hMenu, index, true, info);
+ if (dispose || oldMenu == null) {
+ success = OS.SetMenuItemInfo (hMenu, index, true, info);
+ } else {
+ OS.RemoveMenu (hMenu, index, OS.MF_BYPOSITION);
+ success = OS.InsertMenuItem (hMenu, index, true, info);
+ }
/*
* Restore the bitmap that was removed to work around a problem
* in GetMenuItemInfo() and menu items that have bitmaps set with