Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFelipe Heidrich2010-03-04 22:46:11 +0000
committerFelipe Heidrich2010-03-04 22:46:11 +0000
commit233384070d65d990e7a811caac5ba3509a11381e (patch)
tree0a1cf257b412f7bb6e466feaee3e04f57b135249 /bundles/org.eclipse.swt/Eclipse SWT/win32/org
parent0544ffbaf949c05028b91361d0bf926a7e149162 (diff)
downloadeclipse.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.java29
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);
}

Back to the top