Пример #1
0
//export _go_glib_sourcefunc
func _go_glib_sourcefunc(sfi *C.sourcefunc_info) {
	context := sourcefunc_contexts[int(sfi.func_no)]
	t := context.f.Type()
	fargs := make([]reflect.Value, t.NumIn())
	if len(fargs) > 0 {
		fargs[0] = reflect.ValueOf(context.data)
	}
	ret := context.f.Call(fargs)
	if len(ret) > 0 {
		bret, _ := ret[0].Interface().(bool)
		sfi.ret = gbool(bret)
	}
}
Пример #2
0
//export _go_glib_sourcefunc
func _go_glib_sourcefunc(sfi *C.sourcefunc_info) {
	context := sourcefunc_contexts[int(sfi.func_no)]
	rf := reflect.ValueOf(context.f)
	t := rf.Type()
	fargs := make([]reflect.Value, t.NumIn())
	n := 0
	if len(fargs) > n && sfi.channel != nil {
		fargs[n] = reflect.ValueOf(int(sfi.condition))
		n++
	}
	if len(fargs) > n {
		fargs[n] = reflect.ValueOf(context.data)
		n++
	}
	ret := rf.Call(fargs)
	if len(ret) > 0 {
		bret, _ := ret[0].Interface().(bool)
		sfi.ret = bool2gboolean(bret)
	}
}
Пример #3
0
//export _go_glib_sourcefunc
func _go_glib_sourcefunc(sfi *C.sourcefunc_info) {
	id := int(sfi.func_no)
	value, found := sourcefunc_contexts.Get(id)
	if !found {
		return
	}
	context := value.(*SourcefuncContext)
	t := context.f.Type()
	fargs := make([]reflect.Value, t.NumIn())
	if len(fargs) > 0 {
		fargs[0] = reflect.ValueOf(context.data)
	}
	ret := context.f.Call(fargs)
	if len(ret) > 0 {
		bret, _ := ret[0].Interface().(bool)
		sfi.ret = gbool(bret)
	}
	if !gobool(sfi.ret) {
		sourcefunc_contexts.Remove(id)
	}
}