changeset 11:43904fec5dca

Readded the use of Vector to omit tango.core.Array dependency.
author Frank Benoit <benoit@tionex.de>
date Fri, 13 Mar 2009 17:44:24 +0100
parents eb8ff453285d
children bc29606a740c
files org.eclipse.swt.win32.win32.x86/src/org/eclipse/swt/accessibility/Accessible.d org.eclipse.swt.win32.win32.x86/src/org/eclipse/swt/graphics/ImageLoader.d org.eclipse.swt.win32.win32.x86/src/org/eclipse/swt/internal/LONG.d org.eclipse.swt.win32.win32.x86/src/org/eclipse/swt/ole/win32/OleFrame.d
diffstat 4 files changed, 115 insertions(+), 69 deletions(-) [+]
line wrap: on
line diff
--- a/org.eclipse.swt.win32.win32.x86/src/org/eclipse/swt/accessibility/Accessible.d	Fri Mar 13 16:57:07 2009 +0100
+++ b/org.eclipse.swt.win32.win32.x86/src/org/eclipse/swt/accessibility/Accessible.d	Fri Mar 13 17:44:24 2009 +0100
@@ -37,6 +37,7 @@
 import org.eclipse.swt.accessibility.AccessibleEvent;
 
 import java.lang.all;
+import java.util.Vector;
 import tango.core.Thread;
 
 /**
@@ -67,13 +68,16 @@
     _IAccessibleImpl objIAccessible;
     _IEnumVARIANTImpl objIEnumVARIANT;
     IAccessible iaccessible;
-    SWTEventListener[] accessibleListeners;
-    SWTEventListener[] accessibleControlListeners;
-    SWTEventListener[] textListeners;
+    Vector accessibleListeners;
+    Vector accessibleControlListeners;
+    Vector textListeners;
     Object[] variants;
     Control control;
 
     this(Control control) {
+        accessibleListeners = new Vector();
+        accessibleControlListeners = new Vector();
+        textListeners = new Vector ();
         this.control = control;
         int /*long*/[] ppvObject = new int /*long*/[1];
         /* CreateStdAccessibleObject([in] hwnd, [in] idObject, [in] riidInterface, [out] ppvObject).
@@ -159,7 +163,7 @@
     public void addAccessibleListener(AccessibleListener listener) {
         checkWidget();
         if (listener is null) SWT.error(__FILE__, __LINE__, SWT.ERROR_NULL_ARGUMENT);
-        accessibleListeners ~= listener;
+        accessibleListeners.addElement(cast(Object)listener);
     }
 
     /**
@@ -186,7 +190,7 @@
     public void addAccessibleControlListener(AccessibleControlListener listener) {
         checkWidget();
         if (listener is null) SWT.error(__FILE__, __LINE__, SWT.ERROR_NULL_ARGUMENT);
-        accessibleControlListeners ~= listener;
+        accessibleControlListeners.addElement(cast(Object)listener);
     }
 
     /**
@@ -215,7 +219,7 @@
     public void addAccessibleTextListener (AccessibleTextListener listener) {
         checkWidget ();
         if (listener is null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
-        textListeners ~= listener;
+        textListeners.addElement(cast(Object)listener);
     }
 
     /**
@@ -290,7 +294,7 @@
     public void removeAccessibleListener(AccessibleListener listener) {
         checkWidget();
         if (listener is null) SWT.error(__FILE__, __LINE__, SWT.ERROR_NULL_ARGUMENT);
-        accessibleListeners.length = accessibleListeners.remove(listener);
+        accessibleListeners.removeElement(cast(Object)listener);
     }
 
     /**
@@ -315,7 +319,7 @@
     public void removeAccessibleControlListener(AccessibleControlListener listener) {
         checkWidget();
         if (listener is null) SWT.error(__FILE__, __LINE__, SWT.ERROR_NULL_ARGUMENT);
-        accessibleControlListeners.length = accessibleControlListeners.remove(listener);
+        accessibleControlListeners.removeElement(cast(Object)listener);
     }
 
     /**
@@ -342,7 +346,7 @@
     public void removeAccessibleTextListener (AccessibleTextListener listener) {
         checkWidget ();
         if (listener is null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
-        textListeners.length = textListeners.remove (listener);
+        textListeners.removeElement (cast(Object)listener);
     }
 
     /**
@@ -496,7 +500,7 @@
 
     HRESULT accHitTest(LONG xLeft, LONG yTop, VARIANT* pvarChild) {
         if (iaccessible is null) return COM.CO_E_OBJNOTCONNECTED;
-        if (accessibleControlListeners.length is 0) {
+        if (accessibleControlListeners.size() is 0) {
             return iaccessible.accHitTest(xLeft, yTop, pvarChild);
         }
 
@@ -504,8 +508,8 @@
         event.childID = ACC.CHILDID_NONE;
         event.x = xLeft;
         event.y = yTop;
-        for (int i = 0; i < accessibleControlListeners.length; i++) {
-            AccessibleControlListener listener = cast(AccessibleControlListener) accessibleControlListeners[i];
+        for (int i = 0; i < accessibleControlListeners.size(); i++) {
+            AccessibleControlListener listener = cast(AccessibleControlListener) accessibleControlListeners.elementAt(i);
             listener.getChildAtPoint(event);
         }
         int childID = event.childID;
@@ -528,7 +532,7 @@
         int osLeft = 0, osTop = 0, osWidth = 0, osHeight = 0;
         int code = iaccessible.accLocation(pxLeft, pyTop, pcxWidth, pcyHeight, variant);
         if (code is COM.E_INVALIDARG) code = COM.S_FALSE; // proxy doesn't know about app childID
-        if (accessibleControlListeners.length is 0) return code;
+        if (accessibleControlListeners.size() is 0) return code;
         if (code is COM.S_OK) {
             int[1] pLeft, pTop, pWidth, pHeight;
             COM.MoveMemory(pLeft.ptr, pxLeft, 4);
@@ -544,8 +548,8 @@
         event.y = osTop;
         event.width = osWidth;
         event.height = osHeight;
-        for (int i = 0; i < accessibleControlListeners.length; i++) {
-            AccessibleControlListener listener = cast(AccessibleControlListener) accessibleControlListeners[i];
+        for (int i = 0; i < accessibleControlListeners.size(); i++) {
+            AccessibleControlListener listener = cast(AccessibleControlListener) accessibleControlListeners.elementAt(i);
             listener.getLocation(event);
         }
         OS.MoveMemory(pxLeft, &event.x, 4);
@@ -580,7 +584,7 @@
         VARIANT* v = &variant;
         //COM.MoveMemory(v, variant, VARIANT.sizeof);
         if ((v.vt & 0xFFFF) !is COM.VT_I4) return COM.E_INVALIDARG;
-        if (accessibleControlListeners.length is 0) {
+        if (accessibleControlListeners.size() is 0) {
             int code = iaccessible.get_accChild(variant, ppdispChild);
             if (code is COM.E_INVALIDARG) code = COM.S_FALSE; // proxy doesn't know about app childID
             return code;
@@ -588,8 +592,8 @@
 
         AccessibleControlEvent event = new AccessibleControlEvent(this);
         event.childID = osToChildID(v.lVal);
-        for (int i = 0; i < accessibleControlListeners.length; i++) {
-            AccessibleControlListener listener = cast(AccessibleControlListener) accessibleControlListeners[i];
+        for (int i = 0; i < accessibleControlListeners.size(); i++) {
+            AccessibleControlListener listener = cast(AccessibleControlListener) accessibleControlListeners.elementAt(i);
             listener.getChild(event);
         }
         Accessible accessible = event.accessible;
@@ -607,7 +611,7 @@
         /* Get the default child count from the OS. */
         int osChildCount = 0;
         int code = iaccessible.get_accChildCount(pcountChildren);
-        if (accessibleControlListeners.length is 0) return code;
+        if (accessibleControlListeners.size() is 0) return code;
         if (code is COM.S_OK) {
             int[1] pChildCount;
             COM.MoveMemory(pChildCount.ptr, pcountChildren, 4);
@@ -617,8 +621,8 @@
         AccessibleControlEvent event = new AccessibleControlEvent(this);
         event.childID = ACC.CHILDID_SELF;
         event.detail = osChildCount;
-        for (int i = 0; i < accessibleControlListeners.length; i++) {
-            AccessibleControlListener listener = cast(AccessibleControlListener) accessibleControlListeners[i];
+        for (int i = 0; i < accessibleControlListeners.size(); i++) {
+            AccessibleControlListener listener = cast(AccessibleControlListener) accessibleControlListeners.elementAt(i);
             listener.getChildCount(event);
         }
 
@@ -636,7 +640,7 @@
         String osDefaultAction = null;
         int code = iaccessible.get_accDefaultAction(variant, pszDefaultAction);
         if (code is COM.E_INVALIDARG) code = COM.S_FALSE; // proxy doesn't know about app childID
-        if (accessibleControlListeners.length is 0) return code;
+        if (accessibleControlListeners.size() is 0) return code;
         if (code is COM.S_OK) {
             osDefaultAction = BSTRToStr( *pszDefaultAction, true );
         }
@@ -644,8 +648,8 @@
         AccessibleControlEvent event = new AccessibleControlEvent(this);
         event.childID = osToChildID(v.lVal);
         event.result = osDefaultAction;
-        for (int i = 0; i < accessibleControlListeners.length; i++) {
-            AccessibleControlListener listener = cast(AccessibleControlListener) accessibleControlListeners[i];
+        for (int i = 0; i < accessibleControlListeners.size(); i++) {
+            AccessibleControlListener listener = cast(AccessibleControlListener) accessibleControlListeners.elementAt(i);
             listener.getDefaultAction(event);
         }
         if (event.result is null) return code;
@@ -665,7 +669,7 @@
         int code = iaccessible.get_accDescription(variant, pszDescription);
         if (code is COM.E_INVALIDARG) code = COM.S_FALSE; // proxy doesn't know about app childID
         // TEMPORARY CODE - process tree even if there are no apps listening
-        if (accessibleListeners.length is 0 && !( null is cast(Tree)control )) return code;
+        if (accessibleListeners.size() is 0 && !( null is cast(Tree)control )) return code;
         if (code is COM.S_OK) {
             int size = COM.SysStringByteLen(*pszDescription);
             if (size > 0) {
@@ -704,8 +708,8 @@
                 }
             }
         }
-        for (int i = 0; i < accessibleListeners.length; i++) {
-            AccessibleListener listener = cast(AccessibleListener) accessibleListeners[i];
+        for (int i = 0; i < accessibleListeners.size(); i++) {
+            AccessibleListener listener = cast(AccessibleListener) accessibleListeners.elementAt(i);
             listener.getDescription(event);
         }
         if (event.result is null) return code;
@@ -724,7 +728,7 @@
         /* Get the default focus child from the OS. */
         int osChild = ACC.CHILDID_NONE;
         int code = iaccessible.get_accFocus(pvarChild);
-        if (accessibleControlListeners.length is 0) return code;
+        if (accessibleControlListeners.size() is 0) return code;
         if (code is COM.S_OK) {
             //TODO - use VARIANT structure
             short[1] pvt;
@@ -738,8 +742,8 @@
 
         AccessibleControlEvent event = new AccessibleControlEvent(this);
         event.childID = osChild;
-        for (int i = 0; i < accessibleControlListeners.length; i++) {
-            AccessibleControlListener listener = cast(AccessibleControlListener) accessibleControlListeners[i];
+        for (int i = 0; i < accessibleControlListeners.size(); i++) {
+            AccessibleControlListener listener = cast(AccessibleControlListener) accessibleControlListeners.elementAt(i);
             listener.getFocus(event);
         }
         Accessible accessible = event.accessible;
@@ -775,7 +779,7 @@
         String osHelp = null;
         int code = iaccessible.get_accHelp(variant, pszHelp);
         if (code is COM.E_INVALIDARG) code = COM.S_FALSE; // proxy doesn't know about app childID
-        if (accessibleListeners.length is 0) return code;
+        if (accessibleListeners.size() is 0) return code;
         if (code is COM.S_OK) {
             // the original SysString is clearuped and bstr set to null
             osHelp = BSTRToStr(*pszHelp, true);
@@ -784,8 +788,8 @@
         AccessibleEvent event = new AccessibleEvent(this);
         event.childID = osToChildID(v.lVal);
         event.result = osHelp;
-        for (int i = 0; i < accessibleListeners.length; i++) {
-            AccessibleListener listener = cast(AccessibleListener) accessibleListeners[i];
+        for (int i = 0; i < accessibleListeners.size(); i++) {
+            AccessibleListener listener = cast(AccessibleListener) accessibleListeners.elementAt(i);
             listener.getHelp(event);
         }
         if (event.result is null) return code;
@@ -812,7 +816,7 @@
         String osKeyboardShortcut = null;
         int code = iaccessible.get_accKeyboardShortcut(variant, pszKeyboardShortcut);
         if (code is COM.E_INVALIDARG) code = COM.S_FALSE; // proxy doesn't know about app childID
-        if (accessibleListeners.length is 0) return code;
+        if (accessibleListeners.size() is 0) return code;
         if (code is COM.S_OK) {
             // the original SysString is clearuped and bstr set to null
             osKeyboardShortcut = BSTRToStr(*pszKeyboardShortcut, true);
@@ -821,8 +825,8 @@
         AccessibleEvent event = new AccessibleEvent(this);
         event.childID = osToChildID(v.lVal);
         event.result = osKeyboardShortcut;
-        for (int i = 0; i < accessibleListeners.length; i++) {
-            AccessibleListener listener = cast(AccessibleListener) accessibleListeners[i];
+        for (int i = 0; i < accessibleListeners.size(); i++) {
+            AccessibleListener listener = cast(AccessibleListener) accessibleListeners.elementAt(i);
             listener.getKeyboardShortcut(event);
         }
         if (event.result is null) return code;
@@ -841,7 +845,7 @@
         String osName = null;
         int code = iaccessible.get_accName(variant, pszName);
         if (code is COM.E_INVALIDARG) code = COM.S_FALSE; // proxy doesn't know about app childID
-        if (accessibleListeners.length is 0) return code;
+        if (accessibleListeners.size() is 0) return code;
         if (code is COM.S_OK) {
             // the original SysString is clearuped and bstr set to null
             osName = BSTRToStr(*pszName, true);
@@ -850,8 +854,8 @@
         AccessibleEvent event = new AccessibleEvent(this);
         event.childID = osToChildID(v.lVal);
         event.result = osName;
-        for (int i = 0; i < accessibleListeners.length; i++) {
-            AccessibleListener listener = cast(AccessibleListener) accessibleListeners[i];
+        for (int i = 0; i < accessibleListeners.size(); i++) {
+            AccessibleListener listener = cast(AccessibleListener) accessibleListeners.elementAt(i);
             listener.getName(event);
         }
         if (event.result is null) return code;
@@ -881,7 +885,7 @@
         int code = iaccessible.get_accRole(variant, pvarRole);
         if (code is COM.E_INVALIDARG) code = COM.S_FALSE; // proxy doesn't know about app childID
         // TEMPORARY CODE - process tree and table even if there are no apps listening
-        if (accessibleControlListeners.length is 0 && !( null !is cast(Tree)control || null !is cast(Table)control )) return code;
+        if (accessibleControlListeners.size() is 0 && !( null !is cast(Tree)control || null !is cast(Table)control )) return code;
         if (code is COM.S_OK) {
             //TODO - use VARIANT structure
             short[1] pvt;
@@ -904,8 +908,8 @@
                 if ((control.getStyle() & SWT.CHECK) !is 0) event.detail = ACC.ROLE_CHECKBUTTON;
             }
         }
-        for (int i = 0; i < accessibleControlListeners.length; i++) {
-            AccessibleControlListener listener = cast(AccessibleControlListener) accessibleControlListeners[i];
+        for (int i = 0; i < accessibleControlListeners.size(); i++) {
+            AccessibleControlListener listener = cast(AccessibleControlListener) accessibleControlListeners.elementAt(i);
             listener.getRole(event);
         }
         int role = roleToOs(event.detail);
@@ -924,7 +928,7 @@
         /* Get the default selection from the OS. */
         int osChild = ACC.CHILDID_NONE;
         int code = iaccessible.get_accSelection(pvarChildren);
-        if (accessibleControlListeners.length is 0) return code;
+        if (accessibleControlListeners.size() is 0) return code;
         if (code is COM.S_OK) {
             //TODO - use VARIANT structure
             short[1] pvt;
@@ -941,8 +945,8 @@
 
         AccessibleControlEvent event = new AccessibleControlEvent(this);
         event.childID = osChild;
-        for (int i = 0; i < accessibleControlListeners.length; i++) {
-            AccessibleControlListener listener = cast(AccessibleControlListener) accessibleControlListeners[i];
+        for (int i = 0; i < accessibleControlListeners.size(); i++) {
+            AccessibleControlListener listener = cast(AccessibleControlListener) accessibleControlListeners.elementAt(i);
             listener.getSelection(event);
         }
         Accessible accessible = event.accessible;
@@ -985,7 +989,7 @@
         int code = iaccessible.get_accState(variant, pvarState);
         if (code is COM.E_INVALIDARG) code = COM.S_FALSE; // proxy doesn't know about app childID
         // TEMPORARY CODE - process tree and table even if there are no apps listening
-        if (accessibleControlListeners.length is 0 && !( null !is cast(Tree)control || null !is cast(Table)control )) return code;
+        if (accessibleControlListeners.size() is 0 && !( null !is cast(Tree)control || null !is cast(Table)control )) return code;
         if (code is COM.S_OK) {
             //TODO - use VARIANT structure
             short[1] pvt;
@@ -1028,8 +1032,8 @@
                 }
             }
         }
-        for (int i = 0; i < accessibleControlListeners.length; i++) {
-            AccessibleControlListener listener = cast(AccessibleControlListener) accessibleControlListeners[i];
+        for (int i = 0; i < accessibleControlListeners.size(); i++) {
+            AccessibleControlListener listener = cast(AccessibleControlListener) accessibleControlListeners.elementAt(i);
             listener.getState(event);
         }
         int state = stateToOs(event.detail);
@@ -1052,7 +1056,7 @@
         String osValue = null;
         int code = iaccessible.get_accValue(variant, pszValue);
         if (code is COM.E_INVALIDARG) code = COM.S_FALSE; // proxy doesn't know about app childID
-        if (accessibleControlListeners.length is 0) return code;
+        if (accessibleControlListeners.size() is 0) return code;
         if (code is COM.S_OK) {
             int size = COM.SysStringByteLen(*pszValue);
             if (size > 0) {
@@ -1063,8 +1067,8 @@
         AccessibleControlEvent event = new AccessibleControlEvent(this);
         event.childID = osToChildID(v.lVal);
         event.result = osValue;
-        for (int i = 0; i < accessibleControlListeners.length; i++) {
-            AccessibleControlListener listener = cast(AccessibleControlListener) accessibleControlListeners[i];
+        for (int i = 0; i < accessibleControlListeners.size(); i++) {
+            AccessibleControlListener listener = cast(AccessibleControlListener) accessibleControlListeners.elementAt(i);
             listener.getValue(event);
         }
         if (event.result is null) return code;
@@ -1107,7 +1111,7 @@
         /* If there are no listeners, query the proxy for
          * its IEnumVariant, and get the Next items from it.
          */
-        if (accessibleControlListeners.length is 0) {
+        if (accessibleControlListeners.size() is 0) {
             IEnumVARIANT ienumvariant;
             int code = iaccessible.QueryInterface(&COM.IIDIEnumVARIANT, cast(void**)&ienumvariant);
             if (code !is COM.S_OK) return code;
@@ -1123,8 +1127,8 @@
         if (enumIndex is 0) {
             AccessibleControlEvent event = new AccessibleControlEvent(this);
             event.childID = ACC.CHILDID_SELF;
-            for (int i = 0; i < accessibleControlListeners.length; i++) {
-                AccessibleControlListener listener = cast(AccessibleControlListener) accessibleControlListeners[i];
+            for (int i = 0; i < accessibleControlListeners.size(); i++) {
+                AccessibleControlListener listener = cast(AccessibleControlListener) accessibleControlListeners.elementAt(i);
                 listener.getChildren(event);
             }
             variants = event.children;
@@ -1178,7 +1182,7 @@
         /* If there are no listeners, query the proxy
          * for its IEnumVariant, and tell it to Skip.
          */
-        if (accessibleControlListeners.length is 0) {
+        if (accessibleControlListeners.size() is 0) {
             IEnumVARIANT ienumvariant;
             int code = iaccessible.QueryInterface(&COM.IIDIEnumVARIANT, cast(void**)&ienumvariant);
             if (code !is COM.S_OK) return code;
@@ -1201,7 +1205,7 @@
         /* If there are no listeners, query the proxy
          * for its IEnumVariant, and tell it to Reset.
          */
-        if (accessibleControlListeners.length is 0) {
+        if (accessibleControlListeners.size() is 0) {
             IEnumVARIANT ienumvariant;
             int code = iaccessible.QueryInterface(&COM.IIDIEnumVARIANT, cast(void**)&ienumvariant);
             if (code !is COM.S_OK) return code;
@@ -1222,7 +1226,7 @@
         /* If there are no listeners, query the proxy for
          * its IEnumVariant, and get the Clone from it.
          */
-        if (accessibleControlListeners.length is 0) {
+        if (accessibleControlListeners.size() is 0) {
             IEnumVARIANT ienumvariant;
             int code = iaccessible.QueryInterface(&COM.IIDIEnumVARIANT, cast(void**)&ienumvariant);
             if (code !is COM.S_OK) return code;
--- a/org.eclipse.swt.win32.win32.x86/src/org/eclipse/swt/graphics/ImageLoader.d	Fri Mar 13 16:57:07 2009 +0100
+++ b/org.eclipse.swt.win32.win32.x86/src/org/eclipse/swt/graphics/ImageLoader.d	Fri Mar 13 17:44:24 2009 +0100
@@ -22,6 +22,7 @@
 import org.eclipse.swt.internal.image.FileFormat;
 
 import tango.core.Array;
+import java.util.Vector;
 import java.lang.all;
 
 
@@ -93,7 +94,7 @@
     /*
      * the set of ImageLoader event listeners, created on demand
      */
-    ImageLoaderListener[] imageLoaderListeners;
+    Vector imageLoaderListeners;
 
 /**
  * Construct a new empty ImageLoader.
@@ -279,7 +280,10 @@
  */
 public void addImageLoaderListener(ImageLoaderListener listener) {
     if (listener is null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
-    imageLoaderListeners ~= listener;
+    if (imageLoaderListeners is null) {
+        imageLoaderListeners = new Vector();
+    }
+    imageLoaderListeners.addElement(cast(Object)listener);
 }
 
 /**
@@ -296,8 +300,8 @@
  */
 public void removeImageLoaderListener(ImageLoaderListener listener) {
     if (listener is null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
-    if (imageLoaderListeners.length == 0 ) return;
-    imageLoaderListeners.length = tango.core.Array.remove( imageLoaderListeners, listener, delegate bool(ImageLoaderListener l1, ImageLoaderListener l2 ){ return l1 is l2; });
+    if (imageLoaderListeners is null) return;
+    imageLoaderListeners.removeElement(cast(Object)listener);
 }
 
 /**
@@ -310,7 +314,7 @@
  * @see #removeImageLoaderListener(ImageLoaderListener)
  */
 public bool hasListeners() {
-    return imageLoaderListeners.length > 0;
+    return imageLoaderListeners !is null && imageLoaderListeners.size() > 0;
 }
 
 /**
@@ -321,7 +325,9 @@
  */
 public void notifyListeners(ImageLoaderEvent event) {
     if (!hasListeners()) return;
-    foreach( listener; imageLoaderListeners ){
+    int size = imageLoaderListeners.size();
+    for (int i = 0; i < size; i++) {
+        ImageLoaderListener listener = cast(ImageLoaderListener) imageLoaderListeners.elementAt(i);
         listener.imageDataLoaded(event);
     }
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.eclipse.swt.win32.win32.x86/src/org/eclipse/swt/internal/LONG.d	Fri Mar 13 17:44:24 2009 +0100
@@ -0,0 +1,33 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+module org.eclipse.swt.internal.LONG;
+
+import java.lang.all;
+
+public class LONG {
+    public int /*long*/ value;
+    
+    public this (int /*long*/ value) {
+        this.value = value;
+    }
+
+    public equals_t opEquals (Object object) {
+        if (object is this) return true;
+        if( auto obj = cast(LONG)object ){
+            return obj.value is this.value;
+        }
+        return false;
+    }
+
+    public int hashCode () {
+        return cast(int)/*64*/value;
+    }
+}
--- a/org.eclipse.swt.win32.win32.x86/src/org/eclipse/swt/ole/win32/OleFrame.d	Fri Mar 13 16:57:07 2009 +0100
+++ b/org.eclipse.swt.win32.win32.x86/src/org/eclipse/swt/ole/win32/OleFrame.d	Fri Mar 13 17:44:24 2009 +0100
@@ -12,6 +12,8 @@
  *******************************************************************************/
 module org.eclipse.swt.ole.win32.OleFrame;
 
+import java.util.Vector;
+
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.SWTException;
 import org.eclipse.swt.internal.ole.win32.COM;
@@ -31,9 +33,10 @@
 import org.eclipse.swt.ole.win32.OleClientSite;
 import org.eclipse.swt.ole.win32.OLE;
 
+import org.eclipse.swt.internal.LONG;
+
 import java.lang.all;
 import java.lang.Runnable;
-import tango.core.Array;
 
 /**
  *
@@ -611,7 +614,7 @@
 
     auto hMenu = menubar.handle;
 
-    int[] ids;
+    Vector ids = new Vector();
     if (this.fileMenuItems !is null) {
         for (int i = 0; i < this.fileMenuItems.length; i++) {
             MenuItem item = this.fileMenuItems[i];
@@ -619,7 +622,7 @@
                 int index = item.getParent().indexOf(item);
                 // get Id from original menubar
                 int id = getMenuItemID(hMenu, index);
-                ids ~= id;
+                ids.addElement(new org.eclipse.swt.internal.LONG.LONG(id));
             }
         }
     }
@@ -629,7 +632,7 @@
             if (item !is null && !item.isDisposed()) {
                 int index = item.getParent().indexOf(item);
                 int id = getMenuItemID(hMenu, index);
-                ids ~= id;
+                ids.addElement(new org.eclipse.swt.internal.LONG.LONG(id));
             }
         }
     }
@@ -639,14 +642,14 @@
             if (item !is null && !item.isDisposed()) {
                 int index = item.getParent().indexOf(item);
                 int id = getMenuItemID(hMenu, index);
-                ids ~= id;
+                ids.addElement(new org.eclipse.swt.internal.LONG.LONG(id));
             }
         }
     }
     int index = OS.GetMenuItemCount(hmenuShared) - 1;
     for (int i = index; i >= 0; i--) {
         int id = getMenuItemID(hmenuShared, i);
-        if ( ids.contains(id)){
+        if (ids.contains(new org.eclipse.swt.internal.LONG.LONG(id))){
             OS.RemoveMenu(hmenuShared, i, OS.MF_BYPOSITION);
         }
     }