diff options
author | Felipe Heidrich | 2010-03-04 22:46:11 +0000 |
---|---|---|
committer | Felipe Heidrich | 2010-03-04 22:46:11 +0000 |
commit | 233384070d65d990e7a811caac5ba3509a11381e (patch) | |
tree | 0a1cf257b412f7bb6e466feaee3e04f57b135249 /bundles/org.eclipse.swt/Eclipse SWT/win32/org | |
parent | 0544ffbaf949c05028b91361d0bf926a7e149162 (diff) | |
download | eclipse.platform.swt-233384070d65d990e7a811caac5ba3509a11381e.tar.gz eclipse.platform.swt-233384070d65d990e7a811caac5ba3509a11381e.tar.xz eclipse.platform.swt-233384070d65d990e7a811caac5ba3509a11381e.zip |
Bug 304750 - IAE when setting menu on TaskItem with only a SWT.Cascade MenuItem
Diffstat (limited to 'bundles/org.eclipse.swt/Eclipse SWT/win32/org')
-rw-r--r-- | bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/TaskBar.java | 29 |
1 files changed, 19 insertions, 10 deletions
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/TaskBar.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/TaskBar.java index 7b3cf2a588..70103268a5 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/TaskBar.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/TaskBar.java @@ -503,9 +503,14 @@ void setMenu (Menu menu) { if (hr != OS.S_OK) error (SWT.ERROR_INVALID_ARGUMENT); int /*long*/ pRemovedItems = ppv [0]; - /*ICustomDestinationList::AddUserTasks*/ - hr = OS.VtblCall (7, pDestList, poa); - if (hr != OS.S_OK) error (SWT.ERROR_INVALID_ARGUMENT); + int [] count = new int [1]; + /*IObjectArray::GetCount*/ + OS.VtblCall (3, poa, count); + if (count [0] != 0) { + /*ICustomDestinationList::AddUserTasks*/ + hr = OS.VtblCall (7, pDestList, poa); + if (hr != OS.S_OK) error (SWT.ERROR_INVALID_ARGUMENT); + } for (int i = 0; i < items.length; i++) { MenuItem item = items [i]; @@ -514,13 +519,17 @@ void setMenu (Menu menu) { if (subMenu != null) { int /*long*/ poa2 = createShellLinkArray (subMenu.getItems (), directory); if (poa2 != 0) { - String text = item.getText (); - int length = text.length (); - buffer = new char [length + 1]; - text.getChars (0, length, buffer, 0); - /*ICustomDestinationList::AppendCategory*/ - hr = OS.VtblCall (5, pDestList, buffer, poa2); - if (hr != OS.S_OK) error (SWT.ERROR_INVALID_ARGUMENT); + /*IObjectArray::GetCount*/ + OS.VtblCall (3, poa2, count); + if (count [0] != 0) { + String text = item.getText (); + int length = text.length (); + buffer = new char [length + 1]; + text.getChars (0, length, buffer, 0); + /*ICustomDestinationList::AppendCategory*/ + hr = OS.VtblCall (5, pDestList, buffer, poa2); + if (hr != OS.S_OK) error (SWT.ERROR_INVALID_ARGUMENT); + } /*IUnknown::Release*/ OS.VtblCall (2, poa2); } |