event.childID = (varChild_lVal == COM.CHILDID_SELF) ? ACC.CHILDID_SELF : varChild_lVal - 1;
if (varChild_lVal == COM.CHILDID_SELF) event.childID = ACC.CHILDID_SELF; else if (control instanceof Tree) event.childID = varChild_lVal; else event.childID = varChild_lVal - 1;
	int get_accDefaultAction(int varChild_vt, int varChild_reserved1, int varChild_lVal, int varChild_reserved2, int pszDefaultAction) {		if (iaccessible == null) return COM.CO_E_OBJNOTCONNECTED;		if ((varChild_vt & 0xFFFF) != COM.VT_I4) return COM.E_INVALIDARG;				/* Get the default defaultAction from the OS. */		String osDefaultAction = null;		int code = iaccessible.get_accDefaultAction(varChild_vt, varChild_reserved1, varChild_lVal, varChild_reserved2, pszDefaultAction);		if (code == COM.E_INVALIDARG) code = COM.S_FALSE; // proxy doesn't know about app childID		if (accessibleControlListeners.size() == 0) return code;		if (code == COM.S_OK) {			int[] pDefaultAction = new int[1];			COM.MoveMemory(pDefaultAction, pszDefaultAction, 4);			int size = COM.SysStringByteLen(pDefaultAction[0]);			if (size > 0) {				char[] buffer = new char[(size + 1) /2];				COM.MoveMemory(buffer, pDefaultAction[0], size);				osDefaultAction = new String(buffer);			}		}		AccessibleControlEvent event = new AccessibleControlEvent(this);		event.childID = (varChild_lVal == COM.CHILDID_SELF) ? ACC.CHILDID_SELF : varChild_lVal - 1;		event.result = osDefaultAction;		for (int i = 0; i < accessibleControlListeners.size(); i++) {			AccessibleControlListener listener = (AccessibleControlListener) accessibleControlListeners.elementAt(i);			listener.getDefaultAction(event);		}		if (event.result == null) return code;		char[] data = (event.result + "\0").toCharArray();		int ptr = COM.SysAllocString(data);		COM.MoveMemory(pszDefaultAction, new int[] { ptr }, 4);		return COM.S_OK;	}