// ObjectByName returns the Object value of the descendant object that // was defined with the objectName property set to the provided value. // ObjectByName panics if the object is not found. func (obj *Common) ObjectByName(objectName string) Object { cname, cnamelen := unsafeStringData(objectName) var dvalue C.DataValue var object Object RunMain(func() { qname := C.newString(cname, cnamelen) defer C.delString(qname) C.objectFindChild(obj.addr, qname, &dvalue) // unpackDataValue will also initialize the Go type, if necessary. value := unpackDataValue(&dvalue, obj.engine) if dvalue.dataType == C.DTGoAddr { datap := unsafe.Pointer(&dvalue.data) fold := (*(**valueFold)(datap)) if fold.init.IsValid() { panic("internal error: custom Go type not initialized") } object = &Common{fold.cvalue, fold.engine, newConnections()} } else { object, _ = value.(Object) } }) // if object == nil { // panic(fmt.Sprintf("cannot find descendant with objectName == %q", objectName)) // } return object }
// ObjectByName returns the Object value of the descendant object that // was defined with the objectName property set to the provided value. // ObjectByName panics if the object is not found. func (obj *Common) ObjectByName(objectName string) Object { cname, cnamelen := unsafeStringData(objectName) var dvalue C.DataValue gui(func() { qname := C.newString(cname, cnamelen) defer C.delString(qname) C.objectFindChild(obj.addr, qname, &dvalue) }) object, ok := unpackDataValue(&dvalue, obj.engine).(Object) if !ok { panic(fmt.Sprintf("cannot find descendant with objectName == %q", objectName)) } return object }