detached eb0e2e4

Gen: Re-run script

commit
eb0e2e412155fee7cbb42007bd2383e6c8339c86
author
brice · · 2025-12-12 06:19 UTC
parent
98b19e9
signature
unsigned
84 files · +2860 -2340
M v4/adw/adw-animation-target.go +22 -18
@@ -92,30 +92,34 @@ var xNewCallbackAnimationTarget func(uintptr, uintptr, uintptr) uintptr
92 func NewCallbackAnimationTarget(CallbackVar *AnimationTargetFunc, UserDataVar uintptr, DestroyVar *glib.DestroyNotify) *CallbackAnimationTarget {92 func NewCallbackAnimationTarget(CallbackVar *AnimationTargetFunc, UserDataVar uintptr, DestroyVar *glib.DestroyNotify) *CallbackAnimationTarget {
93 var cls *CallbackAnimationTarget93 var cls *CallbackAnimationTarget
94 94
95- CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
96 var CallbackVarRef uintptr95 var CallbackVarRef uintptr
97- if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {96+ if CallbackVar != nil {
98- CallbackVarRef = cbRefPtr97+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
99- } else {98+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
100- fcb := func(arg0 float64, arg1 uintptr) {99+ CallbackVarRef = cbRefPtr
101- cbFn := *CallbackVar100+ } else {
102- cbFn(arg0, arg1)101+ fcb := func(arg0 float64, arg1 uintptr) {
102+ cbFn := *CallbackVar
103+ cbFn(arg0, arg1)
104+ }
105+ CallbackVarRef = purego.NewCallback(fcb)
106+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
103 }107 }
104- CallbackVarRef = purego.NewCallback(fcb)
105- glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
106 }108 }
107 109
108- DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
109 var DestroyVarRef uintptr110 var DestroyVarRef uintptr
110- if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok {111+ if DestroyVar != nil {
111- DestroyVarRef = cbRefPtr112+ DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
112- } else {113+ if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok {
113- fcb := func(arg0 uintptr) {114+ DestroyVarRef = cbRefPtr
114- cbFn := *DestroyVar115+ } else {
115- cbFn(arg0)116+ fcb := func(arg0 uintptr) {
117+ cbFn := *DestroyVar
118+ cbFn(arg0)
119+ }
120+ DestroyVarRef = purego.NewCallback(fcb)
121+ glib.SaveCallback(DestroyVarPtr, DestroyVarRef)
116 }122 }
117- DestroyVarRef = purego.NewCallback(fcb)
118- glib.SaveCallback(DestroyVarPtr, DestroyVarRef)
119 }123 }
120 124
121 cret := xNewCallbackAnimationTarget(CallbackVarRef, UserDataVar, DestroyVarRef)125 cret := xNewCallbackAnimationTarget(CallbackVarRef, UserDataVar, DestroyVarRef)
M v4/adw/adw-preferences-group.go +11 -9
@@ -128,17 +128,19 @@ func (x *PreferencesGroup) BindModel(ModelVar gio.ListModel, CreateRowFuncVar *g
128 }128 }
129 }129 }
130 130
131- UserDataFreeFuncVarPtr := uintptr(unsafe.Pointer(UserDataFreeFuncVar))
132 var UserDataFreeFuncVarRef uintptr131 var UserDataFreeFuncVarRef uintptr
133- if cbRefPtr, ok := glib.GetCallback(UserDataFreeFuncVarPtr); ok {132+ if UserDataFreeFuncVar != nil {
134- UserDataFreeFuncVarRef = cbRefPtr133+ UserDataFreeFuncVarPtr := uintptr(unsafe.Pointer(UserDataFreeFuncVar))
135- } else {134+ if cbRefPtr, ok := glib.GetCallback(UserDataFreeFuncVarPtr); ok {
136- fcb := func(arg0 uintptr) {135+ UserDataFreeFuncVarRef = cbRefPtr
137- cbFn := *UserDataFreeFuncVar136+ } else {
138- cbFn(arg0)137+ fcb := func(arg0 uintptr) {
138+ cbFn := *UserDataFreeFuncVar
139+ cbFn(arg0)
140+ }
141+ UserDataFreeFuncVarRef = purego.NewCallback(fcb)
142+ glib.SaveCallback(UserDataFreeFuncVarPtr, UserDataFreeFuncVarRef)
139 }143 }
140- UserDataFreeFuncVarRef = purego.NewCallback(fcb)
141- glib.SaveCallback(UserDataFreeFuncVarPtr, UserDataFreeFuncVarRef)
142 }144 }
143 145
144 xPreferencesGroupBindModel(x.GoPointer(), ModelVar.GoPointer(), CreateRowFuncVarRef, UserDataVar, UserDataFreeFuncVarRef)146 xPreferencesGroupBindModel(x.GoPointer(), ModelVar.GoPointer(), CreateRowFuncVarRef, UserDataVar, UserDataFreeFuncVarRef)
M v4/gdk/gdkcontentdeserializer.go +33 -27
@@ -69,30 +69,34 @@ var xContentRegisterDeserializer func(string, types.GType, uintptr, uintptr, uin
69 // so applications can override the built-in deserializers.69 // so applications can override the built-in deserializers.
70 func ContentRegisterDeserializer(MimeTypeVar string, TypeVar types.GType, DeserializeVar *ContentDeserializeFunc, DataVar uintptr, NotifyVar *glib.DestroyNotify) {70 func ContentRegisterDeserializer(MimeTypeVar string, TypeVar types.GType, DeserializeVar *ContentDeserializeFunc, DataVar uintptr, NotifyVar *glib.DestroyNotify) {
71 71
72- DeserializeVarPtr := uintptr(unsafe.Pointer(DeserializeVar))
73 var DeserializeVarRef uintptr72 var DeserializeVarRef uintptr
74- if cbRefPtr, ok := glib.GetCallback(DeserializeVarPtr); ok {73+ if DeserializeVar != nil {
75- DeserializeVarRef = cbRefPtr74+ DeserializeVarPtr := uintptr(unsafe.Pointer(DeserializeVar))
76- } else {75+ if cbRefPtr, ok := glib.GetCallback(DeserializeVarPtr); ok {
77- fcb := func(arg0 uintptr) {76+ DeserializeVarRef = cbRefPtr
78- cbFn := *DeserializeVar77+ } else {
79- cbFn(arg0)78+ fcb := func(arg0 uintptr) {
79+ cbFn := *DeserializeVar
80+ cbFn(arg0)
81+ }
82+ DeserializeVarRef = purego.NewCallback(fcb)
83+ glib.SaveCallback(DeserializeVarPtr, DeserializeVarRef)
80 }84 }
81- DeserializeVarRef = purego.NewCallback(fcb)
82- glib.SaveCallback(DeserializeVarPtr, DeserializeVarRef)
83 }85 }
84 86
85- NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
86 var NotifyVarRef uintptr87 var NotifyVarRef uintptr
87- if cbRefPtr, ok := glib.GetCallback(NotifyVarPtr); ok {88+ if NotifyVar != nil {
88- NotifyVarRef = cbRefPtr89+ NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
89- } else {90+ if cbRefPtr, ok := glib.GetCallback(NotifyVarPtr); ok {
90- fcb := func(arg0 uintptr) {91+ NotifyVarRef = cbRefPtr
91- cbFn := *NotifyVar92+ } else {
92- cbFn(arg0)93+ fcb := func(arg0 uintptr) {
94+ cbFn := *NotifyVar
95+ cbFn(arg0)
96+ }
97+ NotifyVarRef = purego.NewCallback(fcb)
98+ glib.SaveCallback(NotifyVarPtr, NotifyVarRef)
93 }99 }
94- NotifyVarRef = purego.NewCallback(fcb)
95- glib.SaveCallback(NotifyVarPtr, NotifyVarRef)
96 }100 }
97 101
98 xContentRegisterDeserializer(MimeTypeVar, TypeVar, DeserializeVarRef, DataVar, NotifyVarRef)102 xContentRegisterDeserializer(MimeTypeVar, TypeVar, DeserializeVarRef, DataVar, NotifyVarRef)
@@ -246,17 +250,19 @@ var xContentDeserializerSetTaskData func(uintptr, uintptr, uintptr)
246 // Associate data with the current deserialization operation.250 // Associate data with the current deserialization operation.
247 func (x *ContentDeserializer) SetTaskData(DataVar uintptr, NotifyVar *glib.DestroyNotify) {251 func (x *ContentDeserializer) SetTaskData(DataVar uintptr, NotifyVar *glib.DestroyNotify) {
248 252
249- NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
250 var NotifyVarRef uintptr253 var NotifyVarRef uintptr
251- if cbRefPtr, ok := glib.GetCallback(NotifyVarPtr); ok {254+ if NotifyVar != nil {
252- NotifyVarRef = cbRefPtr255+ NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
253- } else {256+ if cbRefPtr, ok := glib.GetCallback(NotifyVarPtr); ok {
254- fcb := func(arg0 uintptr) {257+ NotifyVarRef = cbRefPtr
255- cbFn := *NotifyVar258+ } else {
256- cbFn(arg0)259+ fcb := func(arg0 uintptr) {
260+ cbFn := *NotifyVar
261+ cbFn(arg0)
262+ }
263+ NotifyVarRef = purego.NewCallback(fcb)
264+ glib.SaveCallback(NotifyVarPtr, NotifyVarRef)
257 }265 }
258- NotifyVarRef = purego.NewCallback(fcb)
259- glib.SaveCallback(NotifyVarPtr, NotifyVarRef)
260 }266 }
261 267
262 xContentDeserializerSetTaskData(x.GoPointer(), DataVar, NotifyVarRef)268 xContentDeserializerSetTaskData(x.GoPointer(), DataVar, NotifyVarRef)
M v4/gdk/gdkcontentserializer.go +33 -27
@@ -28,30 +28,34 @@ var xContentRegisterSerializer func(types.GType, string, uintptr, uintptr, uintp
28 // so applications can override the built-in serializers.28 // so applications can override the built-in serializers.
29 func ContentRegisterSerializer(TypeVar types.GType, MimeTypeVar string, SerializeVar *ContentSerializeFunc, DataVar uintptr, NotifyVar *glib.DestroyNotify) {29 func ContentRegisterSerializer(TypeVar types.GType, MimeTypeVar string, SerializeVar *ContentSerializeFunc, DataVar uintptr, NotifyVar *glib.DestroyNotify) {
30 30
31- SerializeVarPtr := uintptr(unsafe.Pointer(SerializeVar))
32 var SerializeVarRef uintptr31 var SerializeVarRef uintptr
33- if cbRefPtr, ok := glib.GetCallback(SerializeVarPtr); ok {32+ if SerializeVar != nil {
34- SerializeVarRef = cbRefPtr33+ SerializeVarPtr := uintptr(unsafe.Pointer(SerializeVar))
35- } else {34+ if cbRefPtr, ok := glib.GetCallback(SerializeVarPtr); ok {
36- fcb := func(arg0 uintptr) {35+ SerializeVarRef = cbRefPtr
37- cbFn := *SerializeVar36+ } else {
38- cbFn(arg0)37+ fcb := func(arg0 uintptr) {
38+ cbFn := *SerializeVar
39+ cbFn(arg0)
40+ }
41+ SerializeVarRef = purego.NewCallback(fcb)
42+ glib.SaveCallback(SerializeVarPtr, SerializeVarRef)
39 }43 }
40- SerializeVarRef = purego.NewCallback(fcb)
41- glib.SaveCallback(SerializeVarPtr, SerializeVarRef)
42 }44 }
43 45
44- NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
45 var NotifyVarRef uintptr46 var NotifyVarRef uintptr
46- if cbRefPtr, ok := glib.GetCallback(NotifyVarPtr); ok {47+ if NotifyVar != nil {
47- NotifyVarRef = cbRefPtr48+ NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
48- } else {49+ if cbRefPtr, ok := glib.GetCallback(NotifyVarPtr); ok {
49- fcb := func(arg0 uintptr) {50+ NotifyVarRef = cbRefPtr
50- cbFn := *NotifyVar51+ } else {
51- cbFn(arg0)52+ fcb := func(arg0 uintptr) {
53+ cbFn := *NotifyVar
54+ cbFn(arg0)
55+ }
56+ NotifyVarRef = purego.NewCallback(fcb)
57+ glib.SaveCallback(NotifyVarPtr, NotifyVarRef)
52 }58 }
53- NotifyVarRef = purego.NewCallback(fcb)
54- glib.SaveCallback(NotifyVarPtr, NotifyVarRef)
55 }59 }
56 60
57 xContentRegisterSerializer(TypeVar, MimeTypeVar, SerializeVarRef, DataVar, NotifyVarRef)61 xContentRegisterSerializer(TypeVar, MimeTypeVar, SerializeVarRef, DataVar, NotifyVarRef)
@@ -247,17 +251,19 @@ var xContentSerializerSetTaskData func(uintptr, uintptr, uintptr)
247 // Associate data with the current serialization operation.251 // Associate data with the current serialization operation.
248 func (x *ContentSerializer) SetTaskData(DataVar uintptr, NotifyVar *glib.DestroyNotify) {252 func (x *ContentSerializer) SetTaskData(DataVar uintptr, NotifyVar *glib.DestroyNotify) {
249 253
250- NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
251 var NotifyVarRef uintptr254 var NotifyVarRef uintptr
252- if cbRefPtr, ok := glib.GetCallback(NotifyVarPtr); ok {255+ if NotifyVar != nil {
253- NotifyVarRef = cbRefPtr256+ NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
254- } else {257+ if cbRefPtr, ok := glib.GetCallback(NotifyVarPtr); ok {
255- fcb := func(arg0 uintptr) {258+ NotifyVarRef = cbRefPtr
256- cbFn := *NotifyVar259+ } else {
257- cbFn(arg0)260+ fcb := func(arg0 uintptr) {
261+ cbFn := *NotifyVar
262+ cbFn(arg0)
263+ }
264+ NotifyVarRef = purego.NewCallback(fcb)
265+ glib.SaveCallback(NotifyVarPtr, NotifyVarRef)
258 }266 }
259- NotifyVarRef = purego.NewCallback(fcb)
260- glib.SaveCallback(NotifyVarPtr, NotifyVarRef)
261 }267 }
262 268
263 xContentSerializerSetTaskData(x.GoPointer(), DataVar, NotifyVarRef)269 xContentSerializerSetTaskData(x.GoPointer(), DataVar, NotifyVarRef)
M v4/gdk/gdkcursor.go +22 -18
@@ -84,30 +84,34 @@ var xNewCursorFromCallback func(uintptr, uintptr, uintptr, uintptr) uintptr
84 func NewCursorFromCallback(CallbackVar *CursorGetTextureCallback, DataVar uintptr, DestroyVar *glib.DestroyNotify, FallbackVar *Cursor) *Cursor {84 func NewCursorFromCallback(CallbackVar *CursorGetTextureCallback, DataVar uintptr, DestroyVar *glib.DestroyNotify, FallbackVar *Cursor) *Cursor {
85 var cls *Cursor85 var cls *Cursor
86 86
87- CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
88 var CallbackVarRef uintptr87 var CallbackVarRef uintptr
89- if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {88+ if CallbackVar != nil {
90- CallbackVarRef = cbRefPtr89+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
91- } else {90+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
92- fcb := func(arg0 uintptr, arg1 int, arg2 float64, arg3 *int, arg4 *int, arg5 *int, arg6 *int, arg7 uintptr) uintptr {91+ CallbackVarRef = cbRefPtr
93- cbFn := *CallbackVar92+ } else {
94- return cbFn(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7)93+ fcb := func(arg0 uintptr, arg1 int, arg2 float64, arg3 *int, arg4 *int, arg5 *int, arg6 *int, arg7 uintptr) uintptr {
94+ cbFn := *CallbackVar
95+ return cbFn(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7)
96+ }
97+ CallbackVarRef = purego.NewCallback(fcb)
98+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
95 }99 }
96- CallbackVarRef = purego.NewCallback(fcb)
97- glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
98 }100 }
99 101
100- DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
101 var DestroyVarRef uintptr102 var DestroyVarRef uintptr
102- if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok {103+ if DestroyVar != nil {
103- DestroyVarRef = cbRefPtr104+ DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
104- } else {105+ if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok {
105- fcb := func(arg0 uintptr) {106+ DestroyVarRef = cbRefPtr
106- cbFn := *DestroyVar107+ } else {
107- cbFn(arg0)108+ fcb := func(arg0 uintptr) {
109+ cbFn := *DestroyVar
110+ cbFn(arg0)
111+ }
112+ DestroyVarRef = purego.NewCallback(fcb)
113+ glib.SaveCallback(DestroyVarPtr, DestroyVarRef)
108 }114 }
109- DestroyVarRef = purego.NewCallback(fcb)
110- glib.SaveCallback(DestroyVarPtr, DestroyVarRef)
111 }115 }
112 116
113 cret := xNewCursorFromCallback(CallbackVarRef, DataVar, DestroyVarRef, FallbackVar.GoPointer())117 cret := xNewCursorFromCallback(CallbackVarRef, DataVar, DestroyVarRef, FallbackVar.GoPointer())
M v4/gdk/gdkgltexture.go +11 -9
@@ -47,17 +47,19 @@ var xNewGLTexture func(uintptr, uint, int, int, uintptr, uintptr) uintptr
47 func NewGLTexture(ContextVar *GLContext, IdVar uint, WidthVar int, HeightVar int, DestroyVar *glib.DestroyNotify, DataVar uintptr) *GLTexture {47 func NewGLTexture(ContextVar *GLContext, IdVar uint, WidthVar int, HeightVar int, DestroyVar *glib.DestroyNotify, DataVar uintptr) *GLTexture {
48 var cls *GLTexture48 var cls *GLTexture
49 49
50- DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
51 var DestroyVarRef uintptr50 var DestroyVarRef uintptr
52- if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok {51+ if DestroyVar != nil {
53- DestroyVarRef = cbRefPtr52+ DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
54- } else {53+ if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok {
55- fcb := func(arg0 uintptr) {54+ DestroyVarRef = cbRefPtr
56- cbFn := *DestroyVar55+ } else {
57- cbFn(arg0)56+ fcb := func(arg0 uintptr) {
57+ cbFn := *DestroyVar
58+ cbFn(arg0)
59+ }
60+ DestroyVarRef = purego.NewCallback(fcb)
61+ glib.SaveCallback(DestroyVarPtr, DestroyVarRef)
58 }62 }
59- DestroyVarRef = purego.NewCallback(fcb)
60- glib.SaveCallback(DestroyVarPtr, DestroyVarRef)
61 }63 }
62 64
63 cret := xNewGLTexture(ContextVar.GoPointer(), IdVar, WidthVar, HeightVar, DestroyVarRef, DataVar)65 cret := xNewGLTexture(ContextVar.GoPointer(), IdVar, WidthVar, HeightVar, DestroyVarRef, DataVar)
M v4/gdkpixbuf/gdk-pixbuf.go +22 -18
@@ -1161,17 +1161,19 @@ var xPixbufSaveToCallback func(uintptr, uintptr, uintptr, string, **glib.Error,
1161 // See [method@GdkPixbuf.Pixbuf.save] for more details.1161 // See [method@GdkPixbuf.Pixbuf.save] for more details.
1162 func (x *Pixbuf) SaveToCallback(SaveFuncVar *PixbufSaveFunc, UserDataVar uintptr, TypeVar string, ErrorVar **glib.Error, varArgs ...interface{}) bool {1162 func (x *Pixbuf) SaveToCallback(SaveFuncVar *PixbufSaveFunc, UserDataVar uintptr, TypeVar string, ErrorVar **glib.Error, varArgs ...interface{}) bool {
1163 1163
1164- SaveFuncVarPtr := uintptr(unsafe.Pointer(SaveFuncVar))
1165 var SaveFuncVarRef uintptr1164 var SaveFuncVarRef uintptr
1166- if cbRefPtr, ok := glib.GetCallback(SaveFuncVarPtr); ok {1165+ if SaveFuncVar != nil {
1167- SaveFuncVarRef = cbRefPtr1166+ SaveFuncVarPtr := uintptr(unsafe.Pointer(SaveFuncVar))
1168- } else {1167+ if cbRefPtr, ok := glib.GetCallback(SaveFuncVarPtr); ok {
1169- fcb := func(arg0 []byte, arg1 uint, arg2 **glib.Error, arg3 uintptr) bool {1168+ SaveFuncVarRef = cbRefPtr
1170- cbFn := *SaveFuncVar1169+ } else {
1171- return cbFn(arg0, arg1, arg2, arg3)1170+ fcb := func(arg0 []byte, arg1 uint, arg2 **glib.Error, arg3 uintptr) bool {
1171+ cbFn := *SaveFuncVar
1172+ return cbFn(arg0, arg1, arg2, arg3)
1173+ }
1174+ SaveFuncVarRef = purego.NewCallback(fcb)
1175+ glib.SaveCallback(SaveFuncVarPtr, SaveFuncVarRef)
1172 }1176 }
1173- SaveFuncVarRef = purego.NewCallback(fcb)
1174- glib.SaveCallback(SaveFuncVarPtr, SaveFuncVarRef)
1175 }1177 }
1176 1178
1177 cret := xPixbufSaveToCallback(x.GoPointer(), SaveFuncVarRef, UserDataVar, TypeVar, ErrorVar, varArgs...)1179 cret := xPixbufSaveToCallback(x.GoPointer(), SaveFuncVarRef, UserDataVar, TypeVar, ErrorVar, varArgs...)
@@ -1191,17 +1193,19 @@ var xPixbufSaveToCallbackv func(uintptr, uintptr, uintptr, string, []string, []s
1191 func (x *Pixbuf) SaveToCallbackv(SaveFuncVar *PixbufSaveFunc, UserDataVar uintptr, TypeVar string, OptionKeysVar []string, OptionValuesVar []string) (bool, error) {1193 func (x *Pixbuf) SaveToCallbackv(SaveFuncVar *PixbufSaveFunc, UserDataVar uintptr, TypeVar string, OptionKeysVar []string, OptionValuesVar []string) (bool, error) {
1192 var cerr *glib.Error1194 var cerr *glib.Error
1193 1195
1194- SaveFuncVarPtr := uintptr(unsafe.Pointer(SaveFuncVar))
1195 var SaveFuncVarRef uintptr1196 var SaveFuncVarRef uintptr
1196- if cbRefPtr, ok := glib.GetCallback(SaveFuncVarPtr); ok {1197+ if SaveFuncVar != nil {
1197- SaveFuncVarRef = cbRefPtr1198+ SaveFuncVarPtr := uintptr(unsafe.Pointer(SaveFuncVar))
1198- } else {1199+ if cbRefPtr, ok := glib.GetCallback(SaveFuncVarPtr); ok {
1199- fcb := func(arg0 []byte, arg1 uint, arg2 **glib.Error, arg3 uintptr) bool {1200+ SaveFuncVarRef = cbRefPtr
1200- cbFn := *SaveFuncVar1201+ } else {
1201- return cbFn(arg0, arg1, arg2, arg3)1202+ fcb := func(arg0 []byte, arg1 uint, arg2 **glib.Error, arg3 uintptr) bool {
1203+ cbFn := *SaveFuncVar
1204+ return cbFn(arg0, arg1, arg2, arg3)
1205+ }
1206+ SaveFuncVarRef = purego.NewCallback(fcb)
1207+ glib.SaveCallback(SaveFuncVarPtr, SaveFuncVarRef)
1202 }1208 }
1203- SaveFuncVarRef = purego.NewCallback(fcb)
1204- glib.SaveCallback(SaveFuncVarPtr, SaveFuncVarRef)
1205 }1209 }
1206 1210
1207 cret := xPixbufSaveToCallbackv(x.GoPointer(), SaveFuncVarRef, UserDataVar, TypeVar, OptionKeysVar, OptionValuesVar, &cerr)1211 cret := xPixbufSaveToCallbackv(x.GoPointer(), SaveFuncVarRef, UserDataVar, TypeVar, OptionKeysVar, OptionValuesVar, &cerr)
M v4/gio/gcancellable.go +11 -9
@@ -290,17 +290,19 @@ var xCancellableConnect func(uintptr, uintptr, uintptr, uintptr) uint32
290 // - [method@Gio.Cancellable.release_fd]290 // - [method@Gio.Cancellable.release_fd]
291 func (x *Cancellable) Connect(CallbackVar *gobject.Callback, DataVar uintptr, DataDestroyFuncVar *glib.DestroyNotify) uint32 {291 func (x *Cancellable) Connect(CallbackVar *gobject.Callback, DataVar uintptr, DataDestroyFuncVar *glib.DestroyNotify) uint32 {
292 292
293- CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
294 var CallbackVarRef uintptr293 var CallbackVarRef uintptr
295- if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {294+ if CallbackVar != nil {
296- CallbackVarRef = cbRefPtr295+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
297- } else {296+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
298- fcb := func() {297+ CallbackVarRef = cbRefPtr
299- cbFn := *CallbackVar298+ } else {
300- cbFn()299+ fcb := func() {
300+ cbFn := *CallbackVar
301+ cbFn()
302+ }
303+ CallbackVarRef = purego.NewCallback(fcb)
304+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
301 }305 }
302- CallbackVarRef = purego.NewCallback(fcb)
303- glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
304 }306 }
305 307
306 var DataDestroyFuncVarRef uintptr308 var DataDestroyFuncVarRef uintptr
M v4/gio/gdbusconnection.go +55 -45
@@ -527,30 +527,34 @@ var xDBusConnectionAddFilter func(uintptr, uintptr, uintptr, uintptr) uint
527 // destroyed.)527 // destroyed.)
528 func (x *DBusConnection) AddFilter(FilterFunctionVar *DBusMessageFilterFunction, UserDataVar uintptr, UserDataFreeFuncVar *glib.DestroyNotify) uint {528 func (x *DBusConnection) AddFilter(FilterFunctionVar *DBusMessageFilterFunction, UserDataVar uintptr, UserDataFreeFuncVar *glib.DestroyNotify) uint {
529 529
530- FilterFunctionVarPtr := uintptr(unsafe.Pointer(FilterFunctionVar))
531 var FilterFunctionVarRef uintptr530 var FilterFunctionVarRef uintptr
532- if cbRefPtr, ok := glib.GetCallback(FilterFunctionVarPtr); ok {531+ if FilterFunctionVar != nil {
533- FilterFunctionVarRef = cbRefPtr532+ FilterFunctionVarPtr := uintptr(unsafe.Pointer(FilterFunctionVar))
534- } else {533+ if cbRefPtr, ok := glib.GetCallback(FilterFunctionVarPtr); ok {
535- fcb := func(arg0 uintptr, arg1 uintptr, arg2 bool, arg3 uintptr) uintptr {534+ FilterFunctionVarRef = cbRefPtr
536- cbFn := *FilterFunctionVar535+ } else {
537- return cbFn(arg0, arg1, arg2, arg3)536+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 bool, arg3 uintptr) uintptr {
537+ cbFn := *FilterFunctionVar
538+ return cbFn(arg0, arg1, arg2, arg3)
539+ }
540+ FilterFunctionVarRef = purego.NewCallback(fcb)
541+ glib.SaveCallback(FilterFunctionVarPtr, FilterFunctionVarRef)
538 }542 }
539- FilterFunctionVarRef = purego.NewCallback(fcb)
540- glib.SaveCallback(FilterFunctionVarPtr, FilterFunctionVarRef)
541 }543 }
542 544
543- UserDataFreeFuncVarPtr := uintptr(unsafe.Pointer(UserDataFreeFuncVar))
544 var UserDataFreeFuncVarRef uintptr545 var UserDataFreeFuncVarRef uintptr
545- if cbRefPtr, ok := glib.GetCallback(UserDataFreeFuncVarPtr); ok {546+ if UserDataFreeFuncVar != nil {
546- UserDataFreeFuncVarRef = cbRefPtr547+ UserDataFreeFuncVarPtr := uintptr(unsafe.Pointer(UserDataFreeFuncVar))
547- } else {548+ if cbRefPtr, ok := glib.GetCallback(UserDataFreeFuncVarPtr); ok {
548- fcb := func(arg0 uintptr) {549+ UserDataFreeFuncVarRef = cbRefPtr
549- cbFn := *UserDataFreeFuncVar550+ } else {
550- cbFn(arg0)551+ fcb := func(arg0 uintptr) {
552+ cbFn := *UserDataFreeFuncVar
553+ cbFn(arg0)
554+ }
555+ UserDataFreeFuncVarRef = purego.NewCallback(fcb)
556+ glib.SaveCallback(UserDataFreeFuncVarPtr, UserDataFreeFuncVarRef)
551 }557 }
552- UserDataFreeFuncVarRef = purego.NewCallback(fcb)
553- glib.SaveCallback(UserDataFreeFuncVarPtr, UserDataFreeFuncVarRef)
554 }558 }
555 559
556 cret := xDBusConnectionAddFilter(x.GoPointer(), FilterFunctionVarRef, UserDataVar, UserDataFreeFuncVarRef)560 cret := xDBusConnectionAddFilter(x.GoPointer(), FilterFunctionVarRef, UserDataVar, UserDataFreeFuncVarRef)
@@ -1164,17 +1168,19 @@ var xDBusConnectionRegisterObject func(uintptr, string, *DBusInterfaceInfo, *DBu
1164 func (x *DBusConnection) RegisterObject(ObjectPathVar string, InterfaceInfoVar *DBusInterfaceInfo, VtableVar *DBusInterfaceVTable, UserDataVar uintptr, UserDataFreeFuncVar *glib.DestroyNotify) (uint, error) {1168 func (x *DBusConnection) RegisterObject(ObjectPathVar string, InterfaceInfoVar *DBusInterfaceInfo, VtableVar *DBusInterfaceVTable, UserDataVar uintptr, UserDataFreeFuncVar *glib.DestroyNotify) (uint, error) {
1165 var cerr *glib.Error1169 var cerr *glib.Error
1166 1170
1167- UserDataFreeFuncVarPtr := uintptr(unsafe.Pointer(UserDataFreeFuncVar))
1168 var UserDataFreeFuncVarRef uintptr1171 var UserDataFreeFuncVarRef uintptr
1169- if cbRefPtr, ok := glib.GetCallback(UserDataFreeFuncVarPtr); ok {1172+ if UserDataFreeFuncVar != nil {
1170- UserDataFreeFuncVarRef = cbRefPtr1173+ UserDataFreeFuncVarPtr := uintptr(unsafe.Pointer(UserDataFreeFuncVar))
1171- } else {1174+ if cbRefPtr, ok := glib.GetCallback(UserDataFreeFuncVarPtr); ok {
1172- fcb := func(arg0 uintptr) {1175+ UserDataFreeFuncVarRef = cbRefPtr
1173- cbFn := *UserDataFreeFuncVar1176+ } else {
1174- cbFn(arg0)1177+ fcb := func(arg0 uintptr) {
1178+ cbFn := *UserDataFreeFuncVar
1179+ cbFn(arg0)
1180+ }
1181+ UserDataFreeFuncVarRef = purego.NewCallback(fcb)
1182+ glib.SaveCallback(UserDataFreeFuncVarPtr, UserDataFreeFuncVarRef)
1175 }1183 }
1176- UserDataFreeFuncVarRef = purego.NewCallback(fcb)
1177- glib.SaveCallback(UserDataFreeFuncVarPtr, UserDataFreeFuncVarRef)
1178 }1184 }
1179 1185
1180 cret := xDBusConnectionRegisterObject(x.GoPointer(), ObjectPathVar, InterfaceInfoVar, VtableVar, UserDataVar, UserDataFreeFuncVarRef, &cerr)1186 cret := xDBusConnectionRegisterObject(x.GoPointer(), ObjectPathVar, InterfaceInfoVar, VtableVar, UserDataVar, UserDataFreeFuncVarRef, &cerr)
@@ -1269,17 +1275,19 @@ var xDBusConnectionRegisterSubtree func(uintptr, string, *DBusSubtreeVTable, DBu
1269 func (x *DBusConnection) RegisterSubtree(ObjectPathVar string, VtableVar *DBusSubtreeVTable, FlagsVar DBusSubtreeFlags, UserDataVar uintptr, UserDataFreeFuncVar *glib.DestroyNotify) (uint, error) {1275 func (x *DBusConnection) RegisterSubtree(ObjectPathVar string, VtableVar *DBusSubtreeVTable, FlagsVar DBusSubtreeFlags, UserDataVar uintptr, UserDataFreeFuncVar *glib.DestroyNotify) (uint, error) {
1270 var cerr *glib.Error1276 var cerr *glib.Error
1271 1277
1272- UserDataFreeFuncVarPtr := uintptr(unsafe.Pointer(UserDataFreeFuncVar))
1273 var UserDataFreeFuncVarRef uintptr1278 var UserDataFreeFuncVarRef uintptr
1274- if cbRefPtr, ok := glib.GetCallback(UserDataFreeFuncVarPtr); ok {1279+ if UserDataFreeFuncVar != nil {
1275- UserDataFreeFuncVarRef = cbRefPtr1280+ UserDataFreeFuncVarPtr := uintptr(unsafe.Pointer(UserDataFreeFuncVar))
1276- } else {1281+ if cbRefPtr, ok := glib.GetCallback(UserDataFreeFuncVarPtr); ok {
1277- fcb := func(arg0 uintptr) {1282+ UserDataFreeFuncVarRef = cbRefPtr
1278- cbFn := *UserDataFreeFuncVar1283+ } else {
1279- cbFn(arg0)1284+ fcb := func(arg0 uintptr) {
1285+ cbFn := *UserDataFreeFuncVar
1286+ cbFn(arg0)
1287+ }
1288+ UserDataFreeFuncVarRef = purego.NewCallback(fcb)
1289+ glib.SaveCallback(UserDataFreeFuncVarPtr, UserDataFreeFuncVarRef)
1280 }1290 }
1281- UserDataFreeFuncVarRef = purego.NewCallback(fcb)
1282- glib.SaveCallback(UserDataFreeFuncVarPtr, UserDataFreeFuncVarRef)
1283 }1291 }
1284 1292
1285 cret := xDBusConnectionRegisterSubtree(x.GoPointer(), ObjectPathVar, VtableVar, FlagsVar, UserDataVar, UserDataFreeFuncVarRef, &cerr)1293 cret := xDBusConnectionRegisterSubtree(x.GoPointer(), ObjectPathVar, VtableVar, FlagsVar, UserDataVar, UserDataFreeFuncVarRef, &cerr)
@@ -1547,17 +1555,19 @@ var xDBusConnectionSignalSubscribe func(uintptr, string, string, string, string,
1547 // This function can never fail.1555 // This function can never fail.
1548 func (x *DBusConnection) SignalSubscribe(SenderVar string, InterfaceNameVar string, MemberVar string, ObjectPathVar string, Arg0Var string, FlagsVar DBusSignalFlags, CallbackVar *DBusSignalCallback, UserDataVar uintptr, UserDataFreeFuncVar *glib.DestroyNotify) uint {1556 func (x *DBusConnection) SignalSubscribe(SenderVar string, InterfaceNameVar string, MemberVar string, ObjectPathVar string, Arg0Var string, FlagsVar DBusSignalFlags, CallbackVar *DBusSignalCallback, UserDataVar uintptr, UserDataFreeFuncVar *glib.DestroyNotify) uint {
1549 1557
1550- CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
1551 var CallbackVarRef uintptr1558 var CallbackVarRef uintptr
1552- if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {1559+ if CallbackVar != nil {
1553- CallbackVarRef = cbRefPtr1560+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
1554- } else {1561+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
1555- fcb := func(arg0 uintptr, arg1 string, arg2 string, arg3 string, arg4 string, arg5 *glib.Variant, arg6 uintptr) {1562+ CallbackVarRef = cbRefPtr
1556- cbFn := *CallbackVar1563+ } else {
1557- cbFn(arg0, arg1, arg2, arg3, arg4, arg5, arg6)1564+ fcb := func(arg0 uintptr, arg1 string, arg2 string, arg3 string, arg4 string, arg5 *glib.Variant, arg6 uintptr) {
1565+ cbFn := *CallbackVar
1566+ cbFn(arg0, arg1, arg2, arg3, arg4, arg5, arg6)
1567+ }
1568+ CallbackVarRef = purego.NewCallback(fcb)
1569+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
1558 }1570 }
1559- CallbackVarRef = purego.NewCallback(fcb)
1560- glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
1561 }1571 }
1562 1572
1563 var UserDataFreeFuncVarRef uintptr1573 var UserDataFreeFuncVarRef uintptr
M v4/gio/gioscheduler.go +11 -9
@@ -33,17 +33,19 @@ var xIoSchedulerPushJob func(uintptr, uintptr, uintptr, int, uintptr)
33 // g_io_scheduler_cancel_all_jobs().33 // g_io_scheduler_cancel_all_jobs().
34 func IoSchedulerPushJob(JobFuncVar *IOSchedulerJobFunc, UserDataVar uintptr, NotifyVar *glib.DestroyNotify, IoPriorityVar int, CancellableVar *Cancellable) {34 func IoSchedulerPushJob(JobFuncVar *IOSchedulerJobFunc, UserDataVar uintptr, NotifyVar *glib.DestroyNotify, IoPriorityVar int, CancellableVar *Cancellable) {
35 35
36- JobFuncVarPtr := uintptr(unsafe.Pointer(JobFuncVar))
37 var JobFuncVarRef uintptr36 var JobFuncVarRef uintptr
38- if cbRefPtr, ok := glib.GetCallback(JobFuncVarPtr); ok {37+ if JobFuncVar != nil {
39- JobFuncVarRef = cbRefPtr38+ JobFuncVarPtr := uintptr(unsafe.Pointer(JobFuncVar))
40- } else {39+ if cbRefPtr, ok := glib.GetCallback(JobFuncVarPtr); ok {
41- fcb := func(arg0 *IOSchedulerJob, arg1 uintptr, arg2 uintptr) bool {40+ JobFuncVarRef = cbRefPtr
42- cbFn := *JobFuncVar41+ } else {
43- return cbFn(arg0, arg1, arg2)42+ fcb := func(arg0 *IOSchedulerJob, arg1 uintptr, arg2 uintptr) bool {
43+ cbFn := *JobFuncVar
44+ return cbFn(arg0, arg1, arg2)
45+ }
46+ JobFuncVarRef = purego.NewCallback(fcb)
47+ glib.SaveCallback(JobFuncVarPtr, JobFuncVarRef)
44 }48 }
45- JobFuncVarRef = purego.NewCallback(fcb)
46- glib.SaveCallback(JobFuncVarPtr, JobFuncVarRef)
47 }49 }
48 50
49 var NotifyVarRef uintptr51 var NotifyVarRef uintptr
M v4/gio/giotypes.go +22 -18
@@ -400,17 +400,19 @@ var xIOSchedulerJobSendToMainloop func(uintptr, uintptr, uintptr, uintptr) bool
400 // blocking the I/O job).400 // blocking the I/O job).
401 func (x *IOSchedulerJob) SendToMainloop(FuncVar *glib.SourceFunc, UserDataVar uintptr, NotifyVar *glib.DestroyNotify) bool {401 func (x *IOSchedulerJob) SendToMainloop(FuncVar *glib.SourceFunc, UserDataVar uintptr, NotifyVar *glib.DestroyNotify) bool {
402 402
403- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
404 var FuncVarRef uintptr403 var FuncVarRef uintptr
405- if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok {404+ if FuncVar != nil {
406- FuncVarRef = cbRefPtr405+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
407- } else {406+ if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok {
408- fcb := func(arg0 uintptr) bool {407+ FuncVarRef = cbRefPtr
409- cbFn := *FuncVar408+ } else {
410- return cbFn(arg0)409+ fcb := func(arg0 uintptr) bool {
410+ cbFn := *FuncVar
411+ return cbFn(arg0)
412+ }
413+ FuncVarRef = purego.NewCallback(fcb)
414+ glib.SaveCallback(FuncVarPtr, FuncVarRef)
411 }415 }
412- FuncVarRef = purego.NewCallback(fcb)
413- glib.SaveCallback(FuncVarPtr, FuncVarRef)
414 }416 }
415 417
416 var NotifyVarRef uintptr418 var NotifyVarRef uintptr
@@ -445,17 +447,19 @@ var xIOSchedulerJobSendToMainloopAsync func(uintptr, uintptr, uintptr, uintptr)
445 // g_io_scheduler_push_job() or by using refcounting for @user_data.447 // g_io_scheduler_push_job() or by using refcounting for @user_data.
446 func (x *IOSchedulerJob) SendToMainloopAsync(FuncVar *glib.SourceFunc, UserDataVar uintptr, NotifyVar *glib.DestroyNotify) {448 func (x *IOSchedulerJob) SendToMainloopAsync(FuncVar *glib.SourceFunc, UserDataVar uintptr, NotifyVar *glib.DestroyNotify) {
447 449
448- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
449 var FuncVarRef uintptr450 var FuncVarRef uintptr
450- if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok {451+ if FuncVar != nil {
451- FuncVarRef = cbRefPtr452+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
452- } else {453+ if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok {
453- fcb := func(arg0 uintptr) bool {454+ FuncVarRef = cbRefPtr
454- cbFn := *FuncVar455+ } else {
455- return cbFn(arg0)456+ fcb := func(arg0 uintptr) bool {
457+ cbFn := *FuncVar
458+ return cbFn(arg0)
459+ }
460+ FuncVarRef = purego.NewCallback(fcb)
461+ glib.SaveCallback(FuncVarPtr, FuncVarRef)
456 }462 }
457- FuncVarRef = purego.NewCallback(fcb)
458- glib.SaveCallback(FuncVarPtr, FuncVarRef)
459 }463 }
460 464
461 var NotifyVarRef uintptr465 var NotifyVarRef uintptr
M v4/gio/gliststore.go +44 -36
@@ -100,17 +100,19 @@ var xListStoreFindWithEqualFunc func(uintptr, uintptr, uintptr, *uint) bool
100 // Since GLib 2.76 it is possible to pass `NULL` for @item.100 // Since GLib 2.76 it is possible to pass `NULL` for @item.
101 func (x *ListStore) FindWithEqualFunc(ItemVar *gobject.Object, EqualFuncVar *glib.EqualFunc, PositionVar *uint) bool {101 func (x *ListStore) FindWithEqualFunc(ItemVar *gobject.Object, EqualFuncVar *glib.EqualFunc, PositionVar *uint) bool {
102 102
103- EqualFuncVarPtr := uintptr(unsafe.Pointer(EqualFuncVar))
104 var EqualFuncVarRef uintptr103 var EqualFuncVarRef uintptr
105- if cbRefPtr, ok := glib.GetCallback(EqualFuncVarPtr); ok {104+ if EqualFuncVar != nil {
106- EqualFuncVarRef = cbRefPtr105+ EqualFuncVarPtr := uintptr(unsafe.Pointer(EqualFuncVar))
107- } else {106+ if cbRefPtr, ok := glib.GetCallback(EqualFuncVarPtr); ok {
108- fcb := func(arg0 uintptr, arg1 uintptr) bool {107+ EqualFuncVarRef = cbRefPtr
109- cbFn := *EqualFuncVar108+ } else {
110- return cbFn(arg0, arg1)109+ fcb := func(arg0 uintptr, arg1 uintptr) bool {
110+ cbFn := *EqualFuncVar
111+ return cbFn(arg0, arg1)
112+ }
113+ EqualFuncVarRef = purego.NewCallback(fcb)
114+ glib.SaveCallback(EqualFuncVarPtr, EqualFuncVarRef)
111 }115 }
112- EqualFuncVarRef = purego.NewCallback(fcb)
113- glib.SaveCallback(EqualFuncVarPtr, EqualFuncVarRef)
114 }116 }
115 117
116 cret := xListStoreFindWithEqualFunc(x.GoPointer(), ItemVar.GoPointer(), EqualFuncVarRef, PositionVar)118 cret := xListStoreFindWithEqualFunc(x.GoPointer(), ItemVar.GoPointer(), EqualFuncVarRef, PositionVar)
@@ -127,17 +129,19 @@ var xListStoreFindWithEqualFuncFull func(uintptr, uintptr, uintptr, uintptr, *ui
127 // Since GLib 2.76 it is possible to pass `NULL` for @item.129 // Since GLib 2.76 it is possible to pass `NULL` for @item.
128 func (x *ListStore) FindWithEqualFuncFull(ItemVar *gobject.Object, EqualFuncVar *glib.EqualFuncFull, UserDataVar uintptr, PositionVar *uint) bool {130 func (x *ListStore) FindWithEqualFuncFull(ItemVar *gobject.Object, EqualFuncVar *glib.EqualFuncFull, UserDataVar uintptr, PositionVar *uint) bool {
129 131
130- EqualFuncVarPtr := uintptr(unsafe.Pointer(EqualFuncVar))
131 var EqualFuncVarRef uintptr132 var EqualFuncVarRef uintptr
132- if cbRefPtr, ok := glib.GetCallback(EqualFuncVarPtr); ok {133+ if EqualFuncVar != nil {
133- EqualFuncVarRef = cbRefPtr134+ EqualFuncVarPtr := uintptr(unsafe.Pointer(EqualFuncVar))
134- } else {135+ if cbRefPtr, ok := glib.GetCallback(EqualFuncVarPtr); ok {
135- fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) bool {136+ EqualFuncVarRef = cbRefPtr
136- cbFn := *EqualFuncVar137+ } else {
137- return cbFn(arg0, arg1, arg2)138+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) bool {
139+ cbFn := *EqualFuncVar
140+ return cbFn(arg0, arg1, arg2)
141+ }
142+ EqualFuncVarRef = purego.NewCallback(fcb)
143+ glib.SaveCallback(EqualFuncVarPtr, EqualFuncVarRef)
138 }144 }
139- EqualFuncVarRef = purego.NewCallback(fcb)
140- glib.SaveCallback(EqualFuncVarPtr, EqualFuncVarRef)
141 }145 }
142 146
143 cret := xListStoreFindWithEqualFuncFull(x.GoPointer(), ItemVar.GoPointer(), EqualFuncVarRef, UserDataVar, PositionVar)147 cret := xListStoreFindWithEqualFuncFull(x.GoPointer(), ItemVar.GoPointer(), EqualFuncVarRef, UserDataVar, PositionVar)
@@ -172,17 +176,19 @@ var xListStoreInsertSorted func(uintptr, uintptr, uintptr, uintptr) uint
172 // This function takes a ref on @item.176 // This function takes a ref on @item.
173 func (x *ListStore) InsertSorted(ItemVar *gobject.Object, CompareFuncVar *glib.CompareDataFunc, UserDataVar uintptr) uint {177 func (x *ListStore) InsertSorted(ItemVar *gobject.Object, CompareFuncVar *glib.CompareDataFunc, UserDataVar uintptr) uint {
174 178
175- CompareFuncVarPtr := uintptr(unsafe.Pointer(CompareFuncVar))
176 var CompareFuncVarRef uintptr179 var CompareFuncVarRef uintptr
177- if cbRefPtr, ok := glib.GetCallback(CompareFuncVarPtr); ok {180+ if CompareFuncVar != nil {
178- CompareFuncVarRef = cbRefPtr181+ CompareFuncVarPtr := uintptr(unsafe.Pointer(CompareFuncVar))
179- } else {182+ if cbRefPtr, ok := glib.GetCallback(CompareFuncVarPtr); ok {
180- fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int {183+ CompareFuncVarRef = cbRefPtr
181- cbFn := *CompareFuncVar184+ } else {
182- return cbFn(arg0, arg1, arg2)185+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int {
186+ cbFn := *CompareFuncVar
187+ return cbFn(arg0, arg1, arg2)
188+ }
189+ CompareFuncVarRef = purego.NewCallback(fcb)
190+ glib.SaveCallback(CompareFuncVarPtr, CompareFuncVarRef)
183 }191 }
184- CompareFuncVarRef = purego.NewCallback(fcb)
185- glib.SaveCallback(CompareFuncVarPtr, CompareFuncVarRef)
186 }192 }
187 193
188 cret := xListStoreInsertSorted(x.GoPointer(), ItemVar.GoPointer(), CompareFuncVarRef, UserDataVar)194 cret := xListStoreInsertSorted(x.GoPointer(), ItemVar.GoPointer(), CompareFuncVarRef, UserDataVar)
@@ -216,17 +222,19 @@ var xListStoreSort func(uintptr, uintptr, uintptr)
216 // Sort the items in @store according to @compare_func.222 // Sort the items in @store according to @compare_func.
217 func (x *ListStore) Sort(CompareFuncVar *glib.CompareDataFunc, UserDataVar uintptr) {223 func (x *ListStore) Sort(CompareFuncVar *glib.CompareDataFunc, UserDataVar uintptr) {
218 224
219- CompareFuncVarPtr := uintptr(unsafe.Pointer(CompareFuncVar))
220 var CompareFuncVarRef uintptr225 var CompareFuncVarRef uintptr
221- if cbRefPtr, ok := glib.GetCallback(CompareFuncVarPtr); ok {226+ if CompareFuncVar != nil {
222- CompareFuncVarRef = cbRefPtr227+ CompareFuncVarPtr := uintptr(unsafe.Pointer(CompareFuncVar))
223- } else {228+ if cbRefPtr, ok := glib.GetCallback(CompareFuncVarPtr); ok {
224- fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int {229+ CompareFuncVarRef = cbRefPtr
225- cbFn := *CompareFuncVar230+ } else {
226- return cbFn(arg0, arg1, arg2)231+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int {
232+ cbFn := *CompareFuncVar
233+ return cbFn(arg0, arg1, arg2)
234+ }
235+ CompareFuncVarRef = purego.NewCallback(fcb)
236+ glib.SaveCallback(CompareFuncVarPtr, CompareFuncVarRef)
227 }237 }
228- CompareFuncVarRef = purego.NewCallback(fcb)
229- glib.SaveCallback(CompareFuncVarPtr, CompareFuncVarRef)
230 }238 }
231 239
232 xListStoreSort(x.GoPointer(), CompareFuncVarRef, UserDataVar)240 xListStoreSort(x.GoPointer(), CompareFuncVarRef, UserDataVar)
M v4/gio/gsettings.go +22 -18
@@ -823,17 +823,19 @@ func (x *Settings) BindWithMapping(KeyVar string, ObjectVar *gobject.Object, Pro
823 }823 }
824 }824 }
825 825
826- DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
827 var DestroyVarRef uintptr826 var DestroyVarRef uintptr
828- if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok {827+ if DestroyVar != nil {
829- DestroyVarRef = cbRefPtr828+ DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
830- } else {829+ if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok {
831- fcb := func(arg0 uintptr) {830+ DestroyVarRef = cbRefPtr
832- cbFn := *DestroyVar831+ } else {
833- cbFn(arg0)832+ fcb := func(arg0 uintptr) {
833+ cbFn := *DestroyVar
834+ cbFn(arg0)
835+ }
836+ DestroyVarRef = purego.NewCallback(fcb)
837+ glib.SaveCallback(DestroyVarPtr, DestroyVarRef)
834 }838 }
835- DestroyVarRef = purego.NewCallback(fcb)
836- glib.SaveCallback(DestroyVarPtr, DestroyVarRef)
837 }839 }
838 840
839 xSettingsBindWithMapping(x.GoPointer(), KeyVar, ObjectVar.GoPointer(), PropertyVar, FlagsVar, GetMappingVarRef, SetMappingVarRef, UserDataVar, DestroyVarRef)841 xSettingsBindWithMapping(x.GoPointer(), KeyVar, ObjectVar.GoPointer(), PropertyVar, FlagsVar, GetMappingVarRef, SetMappingVarRef, UserDataVar, DestroyVarRef)
@@ -1128,17 +1130,19 @@ var xSettingsGetMapped func(uintptr, string, uintptr, uintptr) uintptr
1128 // just as any other value would be.1130 // just as any other value would be.
1129 func (x *Settings) GetMapped(KeyVar string, MappingVar *SettingsGetMapping, UserDataVar uintptr) uintptr {1131 func (x *Settings) GetMapped(KeyVar string, MappingVar *SettingsGetMapping, UserDataVar uintptr) uintptr {
1130 1132
1131- MappingVarPtr := uintptr(unsafe.Pointer(MappingVar))
1132 var MappingVarRef uintptr1133 var MappingVarRef uintptr
1133- if cbRefPtr, ok := glib.GetCallback(MappingVarPtr); ok {1134+ if MappingVar != nil {
1134- MappingVarRef = cbRefPtr1135+ MappingVarPtr := uintptr(unsafe.Pointer(MappingVar))
1135- } else {1136+ if cbRefPtr, ok := glib.GetCallback(MappingVarPtr); ok {
1136- fcb := func(arg0 *glib.Variant, arg1 *uintptr, arg2 uintptr) bool {1137+ MappingVarRef = cbRefPtr
1137- cbFn := *MappingVar1138+ } else {
1138- return cbFn(arg0, arg1, arg2)1139+ fcb := func(arg0 *glib.Variant, arg1 *uintptr, arg2 uintptr) bool {
1140+ cbFn := *MappingVar
1141+ return cbFn(arg0, arg1, arg2)
1142+ }
1143+ MappingVarRef = purego.NewCallback(fcb)
1144+ glib.SaveCallback(MappingVarPtr, MappingVarRef)
1139 }1145 }
1140- MappingVarRef = purego.NewCallback(fcb)
1141- glib.SaveCallback(MappingVarPtr, MappingVarRef)
1142 }1146 }
1143 1147
1144 cret := xSettingsGetMapped(x.GoPointer(), KeyVar, MappingVarRef, UserDataVar)1148 cret := xSettingsGetMapped(x.GoPointer(), KeyVar, MappingVarRef, UserDataVar)
M v4/gio/gsimpleasyncresult.go +22 -18
@@ -516,17 +516,19 @@ var xSimpleAsyncResultRunInThread func(uintptr, uintptr, int, uintptr)
516 // is needed to run the job and report its completion.516 // is needed to run the job and report its completion.
517 func (x *SimpleAsyncResult) RunInThread(FuncVar *SimpleAsyncThreadFunc, IoPriorityVar int, CancellableVar *Cancellable) {517 func (x *SimpleAsyncResult) RunInThread(FuncVar *SimpleAsyncThreadFunc, IoPriorityVar int, CancellableVar *Cancellable) {
518 518
519- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
520 var FuncVarRef uintptr519 var FuncVarRef uintptr
521- if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok {520+ if FuncVar != nil {
522- FuncVarRef = cbRefPtr521+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
523- } else {522+ if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok {
524- fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {523+ FuncVarRef = cbRefPtr
525- cbFn := *FuncVar524+ } else {
526- cbFn(arg0, arg1, arg2)525+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
526+ cbFn := *FuncVar
527+ cbFn(arg0, arg1, arg2)
528+ }
529+ FuncVarRef = purego.NewCallback(fcb)
530+ glib.SaveCallback(FuncVarPtr, FuncVarRef)
527 }531 }
528- FuncVarRef = purego.NewCallback(fcb)
529- glib.SaveCallback(FuncVarPtr, FuncVarRef)
530 }532 }
531 533
532 xSimpleAsyncResultRunInThread(x.GoPointer(), FuncVarRef, IoPriorityVar, CancellableVar.GoPointer())534 xSimpleAsyncResultRunInThread(x.GoPointer(), FuncVarRef, IoPriorityVar, CancellableVar.GoPointer())
@@ -611,17 +613,19 @@ var xSimpleAsyncResultSetOpResGpointer func(uintptr, uintptr, uintptr)
611 // Sets the operation result within the asynchronous result to a pointer.613 // Sets the operation result within the asynchronous result to a pointer.
612 func (x *SimpleAsyncResult) SetOpResGpointer(OpResVar uintptr, DestroyOpResVar *glib.DestroyNotify) {614 func (x *SimpleAsyncResult) SetOpResGpointer(OpResVar uintptr, DestroyOpResVar *glib.DestroyNotify) {
613 615
614- DestroyOpResVarPtr := uintptr(unsafe.Pointer(DestroyOpResVar))
615 var DestroyOpResVarRef uintptr616 var DestroyOpResVarRef uintptr
616- if cbRefPtr, ok := glib.GetCallback(DestroyOpResVarPtr); ok {617+ if DestroyOpResVar != nil {
617- DestroyOpResVarRef = cbRefPtr618+ DestroyOpResVarPtr := uintptr(unsafe.Pointer(DestroyOpResVar))
618- } else {619+ if cbRefPtr, ok := glib.GetCallback(DestroyOpResVarPtr); ok {
619- fcb := func(arg0 uintptr) {620+ DestroyOpResVarRef = cbRefPtr
620- cbFn := *DestroyOpResVar621+ } else {
621- cbFn(arg0)622+ fcb := func(arg0 uintptr) {
623+ cbFn := *DestroyOpResVar
624+ cbFn(arg0)
625+ }
626+ DestroyOpResVarRef = purego.NewCallback(fcb)
627+ glib.SaveCallback(DestroyOpResVarPtr, DestroyOpResVarRef)
622 }628 }
623- DestroyOpResVarRef = purego.NewCallback(fcb)
624- glib.SaveCallback(DestroyOpResVarPtr, DestroyOpResVarRef)
625 }629 }
626 630
627 xSimpleAsyncResultSetOpResGpointer(x.GoPointer(), OpResVar, DestroyOpResVarRef)631 xSimpleAsyncResultSetOpResGpointer(x.GoPointer(), OpResVar, DestroyOpResVarRef)
M v4/gio/gsubprocesslauncher.go +22 -18
@@ -103,30 +103,34 @@ var xSubprocessLauncherSetChildSetup func(uintptr, uintptr, uintptr, uintptr)
103 // Child setup functions are only available on UNIX.103 // Child setup functions are only available on UNIX.
104 func (x *SubprocessLauncher) SetChildSetup(ChildSetupVar *glib.SpawnChildSetupFunc, UserDataVar uintptr, DestroyNotifyVar *glib.DestroyNotify) {104 func (x *SubprocessLauncher) SetChildSetup(ChildSetupVar *glib.SpawnChildSetupFunc, UserDataVar uintptr, DestroyNotifyVar *glib.DestroyNotify) {
105 105
106- ChildSetupVarPtr := uintptr(unsafe.Pointer(ChildSetupVar))
107 var ChildSetupVarRef uintptr106 var ChildSetupVarRef uintptr
108- if cbRefPtr, ok := glib.GetCallback(ChildSetupVarPtr); ok {107+ if ChildSetupVar != nil {
109- ChildSetupVarRef = cbRefPtr108+ ChildSetupVarPtr := uintptr(unsafe.Pointer(ChildSetupVar))
110- } else {109+ if cbRefPtr, ok := glib.GetCallback(ChildSetupVarPtr); ok {
111- fcb := func(arg0 uintptr) {110+ ChildSetupVarRef = cbRefPtr
112- cbFn := *ChildSetupVar111+ } else {
113- cbFn(arg0)112+ fcb := func(arg0 uintptr) {
113+ cbFn := *ChildSetupVar
114+ cbFn(arg0)
115+ }
116+ ChildSetupVarRef = purego.NewCallback(fcb)
117+ glib.SaveCallback(ChildSetupVarPtr, ChildSetupVarRef)
114 }118 }
115- ChildSetupVarRef = purego.NewCallback(fcb)
116- glib.SaveCallback(ChildSetupVarPtr, ChildSetupVarRef)
117 }119 }
118 120
119- DestroyNotifyVarPtr := uintptr(unsafe.Pointer(DestroyNotifyVar))
120 var DestroyNotifyVarRef uintptr121 var DestroyNotifyVarRef uintptr
121- if cbRefPtr, ok := glib.GetCallback(DestroyNotifyVarPtr); ok {122+ if DestroyNotifyVar != nil {
122- DestroyNotifyVarRef = cbRefPtr123+ DestroyNotifyVarPtr := uintptr(unsafe.Pointer(DestroyNotifyVar))
123- } else {124+ if cbRefPtr, ok := glib.GetCallback(DestroyNotifyVarPtr); ok {
124- fcb := func(arg0 uintptr) {125+ DestroyNotifyVarRef = cbRefPtr
125- cbFn := *DestroyNotifyVar126+ } else {
126- cbFn(arg0)127+ fcb := func(arg0 uintptr) {
128+ cbFn := *DestroyNotifyVar
129+ cbFn(arg0)
130+ }
131+ DestroyNotifyVarRef = purego.NewCallback(fcb)
132+ glib.SaveCallback(DestroyNotifyVarPtr, DestroyNotifyVarRef)
127 }133 }
128- DestroyNotifyVarRef = purego.NewCallback(fcb)
129- glib.SaveCallback(DestroyNotifyVarPtr, DestroyNotifyVarRef)
130 }134 }
131 135
132 xSubprocessLauncherSetChildSetup(x.GoPointer(), ChildSetupVarRef, UserDataVar, DestroyNotifyVarRef)136 xSubprocessLauncherSetChildSetup(x.GoPointer(), ChildSetupVarRef, UserDataVar, DestroyNotifyVarRef)
M v4/gio/gtask.go +33 -27
@@ -673,17 +673,19 @@ var xTaskAttachSource func(uintptr, *glib.Source, uintptr)
673 // This takes a reference on @task until @source is destroyed.673 // This takes a reference on @task until @source is destroyed.
674 func (x *Task) AttachSource(SourceVar *glib.Source, CallbackVar *glib.SourceFunc) {674 func (x *Task) AttachSource(SourceVar *glib.Source, CallbackVar *glib.SourceFunc) {
675 675
676- CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
677 var CallbackVarRef uintptr676 var CallbackVarRef uintptr
678- if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {677+ if CallbackVar != nil {
679- CallbackVarRef = cbRefPtr678+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
680- } else {679+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
681- fcb := func(arg0 uintptr) bool {680+ CallbackVarRef = cbRefPtr
682- cbFn := *CallbackVar681+ } else {
683- return cbFn(arg0)682+ fcb := func(arg0 uintptr) bool {
683+ cbFn := *CallbackVar
684+ return cbFn(arg0)
685+ }
686+ CallbackVarRef = purego.NewCallback(fcb)
687+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
684 }688 }
685- CallbackVarRef = purego.NewCallback(fcb)
686- glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
687 }689 }
688 690
689 xTaskAttachSource(x.GoPointer(), SourceVar, CallbackVarRef)691 xTaskAttachSource(x.GoPointer(), SourceVar, CallbackVarRef)
@@ -1083,17 +1085,19 @@ var xTaskRunInThread func(uintptr, uintptr)
1083 // g_task_run_in_thread().1085 // g_task_run_in_thread().
1084 func (x *Task) RunInThread(TaskFuncVar *TaskThreadFunc) {1086 func (x *Task) RunInThread(TaskFuncVar *TaskThreadFunc) {
1085 1087
1086- TaskFuncVarPtr := uintptr(unsafe.Pointer(TaskFuncVar))
1087 var TaskFuncVarRef uintptr1088 var TaskFuncVarRef uintptr
1088- if cbRefPtr, ok := glib.GetCallback(TaskFuncVarPtr); ok {1089+ if TaskFuncVar != nil {
1089- TaskFuncVarRef = cbRefPtr1090+ TaskFuncVarPtr := uintptr(unsafe.Pointer(TaskFuncVar))
1090- } else {1091+ if cbRefPtr, ok := glib.GetCallback(TaskFuncVarPtr); ok {
1091- fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr, arg3 uintptr) {1092+ TaskFuncVarRef = cbRefPtr
1092- cbFn := *TaskFuncVar1093+ } else {
1093- cbFn(arg0, arg1, arg2, arg3)1094+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr, arg3 uintptr) {
1095+ cbFn := *TaskFuncVar
1096+ cbFn(arg0, arg1, arg2, arg3)
1097+ }
1098+ TaskFuncVarRef = purego.NewCallback(fcb)
1099+ glib.SaveCallback(TaskFuncVarPtr, TaskFuncVarRef)
1094 }1100 }
1095- TaskFuncVarRef = purego.NewCallback(fcb)
1096- glib.SaveCallback(TaskFuncVarPtr, TaskFuncVarRef)
1097 }1101 }
1098 1102
1099 xTaskRunInThread(x.GoPointer(), TaskFuncVarRef)1103 xTaskRunInThread(x.GoPointer(), TaskFuncVarRef)
@@ -1120,17 +1124,19 @@ var xTaskRunInThreadSync func(uintptr, uintptr)
1120 // limited number of them at a time.1124 // limited number of them at a time.
1121 func (x *Task) RunInThreadSync(TaskFuncVar *TaskThreadFunc) {1125 func (x *Task) RunInThreadSync(TaskFuncVar *TaskThreadFunc) {
1122 1126
1123- TaskFuncVarPtr := uintptr(unsafe.Pointer(TaskFuncVar))
1124 var TaskFuncVarRef uintptr1127 var TaskFuncVarRef uintptr
1125- if cbRefPtr, ok := glib.GetCallback(TaskFuncVarPtr); ok {1128+ if TaskFuncVar != nil {
1126- TaskFuncVarRef = cbRefPtr1129+ TaskFuncVarPtr := uintptr(unsafe.Pointer(TaskFuncVar))
1127- } else {1130+ if cbRefPtr, ok := glib.GetCallback(TaskFuncVarPtr); ok {
1128- fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr, arg3 uintptr) {1131+ TaskFuncVarRef = cbRefPtr
1129- cbFn := *TaskFuncVar1132+ } else {
1130- cbFn(arg0, arg1, arg2, arg3)1133+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr, arg3 uintptr) {
1134+ cbFn := *TaskFuncVar
1135+ cbFn(arg0, arg1, arg2, arg3)
1136+ }
1137+ TaskFuncVarRef = purego.NewCallback(fcb)
1138+ glib.SaveCallback(TaskFuncVarPtr, TaskFuncVarRef)
1131 }1139 }
1132- TaskFuncVarRef = purego.NewCallback(fcb)
1133- glib.SaveCallback(TaskFuncVarPtr, TaskFuncVarRef)
1134 }1140 }
1135 1141
1136 xTaskRunInThreadSync(x.GoPointer(), TaskFuncVarRef)1142 xTaskRunInThreadSync(x.GoPointer(), TaskFuncVarRef)
M v4/glib/garray.go +33 -27
@@ -147,17 +147,19 @@ var xNewBytesWithFreeFunc func([]byte, uint, uintptr, uintptr) *Bytes
147 // @data may be `NULL` if @size is 0.147 // @data may be `NULL` if @size is 0.
148 func NewBytesWithFreeFunc(DataVar []byte, SizeVar uint, FreeFuncVar *DestroyNotify, UserDataVar uintptr) *Bytes {148 func NewBytesWithFreeFunc(DataVar []byte, SizeVar uint, FreeFuncVar *DestroyNotify, UserDataVar uintptr) *Bytes {
149 149
150- FreeFuncVarPtr := uintptr(unsafe.Pointer(FreeFuncVar))
151 var FreeFuncVarRef uintptr150 var FreeFuncVarRef uintptr
152- if cbRefPtr, ok := GetCallback(FreeFuncVarPtr); ok {151+ if FreeFuncVar != nil {
153- FreeFuncVarRef = cbRefPtr152+ FreeFuncVarPtr := uintptr(unsafe.Pointer(FreeFuncVar))
154- } else {153+ if cbRefPtr, ok := GetCallback(FreeFuncVarPtr); ok {
155- fcb := func(arg0 uintptr) {154+ FreeFuncVarRef = cbRefPtr
156- cbFn := *FreeFuncVar155+ } else {
157- cbFn(arg0)156+ fcb := func(arg0 uintptr) {
157+ cbFn := *FreeFuncVar
158+ cbFn(arg0)
159+ }
160+ FreeFuncVarRef = purego.NewCallback(fcb)
161+ SaveCallback(FreeFuncVarPtr, FreeFuncVarRef)
158 }162 }
159- FreeFuncVarRef = purego.NewCallback(fcb)
160- SaveCallback(FreeFuncVarPtr, FreeFuncVarRef)
161 }163 }
162 164
163 cret := xNewBytesWithFreeFunc(DataVar, SizeVar, FreeFuncVarRef, UserDataVar)165 cret := xNewBytesWithFreeFunc(DataVar, SizeVar, FreeFuncVarRef, UserDataVar)
@@ -566,17 +568,19 @@ var xByteArraySort func([]byte, uintptr)
566 // their addresses.568 // their addresses.
567 func ByteArraySort(ArrayVar []byte, CompareFuncVar *CompareFunc) {569 func ByteArraySort(ArrayVar []byte, CompareFuncVar *CompareFunc) {
568 570
569- CompareFuncVarPtr := uintptr(unsafe.Pointer(CompareFuncVar))
570 var CompareFuncVarRef uintptr571 var CompareFuncVarRef uintptr
571- if cbRefPtr, ok := GetCallback(CompareFuncVarPtr); ok {572+ if CompareFuncVar != nil {
572- CompareFuncVarRef = cbRefPtr573+ CompareFuncVarPtr := uintptr(unsafe.Pointer(CompareFuncVar))
573- } else {574+ if cbRefPtr, ok := GetCallback(CompareFuncVarPtr); ok {
574- fcb := func(arg0 uintptr, arg1 uintptr) int {575+ CompareFuncVarRef = cbRefPtr
575- cbFn := *CompareFuncVar576+ } else {
576- return cbFn(arg0, arg1)577+ fcb := func(arg0 uintptr, arg1 uintptr) int {
578+ cbFn := *CompareFuncVar
579+ return cbFn(arg0, arg1)
580+ }
581+ CompareFuncVarRef = purego.NewCallback(fcb)
582+ SaveCallback(CompareFuncVarPtr, CompareFuncVarRef)
577 }583 }
578- CompareFuncVarRef = purego.NewCallback(fcb)
579- SaveCallback(CompareFuncVarPtr, CompareFuncVarRef)
580 }584 }
581 585
582 xByteArraySort(ArrayVar, CompareFuncVarRef)586 xByteArraySort(ArrayVar, CompareFuncVarRef)
@@ -589,17 +593,19 @@ var xByteArraySortWithData func([]byte, uintptr, uintptr)
589 // user data argument.593 // user data argument.
590 func ByteArraySortWithData(ArrayVar []byte, CompareFuncVar *CompareDataFunc, UserDataVar uintptr) {594 func ByteArraySortWithData(ArrayVar []byte, CompareFuncVar *CompareDataFunc, UserDataVar uintptr) {
591 595
592- CompareFuncVarPtr := uintptr(unsafe.Pointer(CompareFuncVar))
593 var CompareFuncVarRef uintptr596 var CompareFuncVarRef uintptr
594- if cbRefPtr, ok := GetCallback(CompareFuncVarPtr); ok {597+ if CompareFuncVar != nil {
595- CompareFuncVarRef = cbRefPtr598+ CompareFuncVarPtr := uintptr(unsafe.Pointer(CompareFuncVar))
596- } else {599+ if cbRefPtr, ok := GetCallback(CompareFuncVarPtr); ok {
597- fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int {600+ CompareFuncVarRef = cbRefPtr
598- cbFn := *CompareFuncVar601+ } else {
599- return cbFn(arg0, arg1, arg2)602+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int {
603+ cbFn := *CompareFuncVar
604+ return cbFn(arg0, arg1, arg2)
605+ }
606+ CompareFuncVarRef = purego.NewCallback(fcb)
607+ SaveCallback(CompareFuncVarPtr, CompareFuncVarRef)
600 }608 }
601- CompareFuncVarRef = purego.NewCallback(fcb)
602- SaveCallback(CompareFuncVarPtr, CompareFuncVarRef)
603 }609 }
604 610
605 xByteArraySortWithData(ArrayVar, CompareFuncVarRef, UserDataVar)611 xByteArraySortWithData(ArrayVar, CompareFuncVarRef, UserDataVar)
M v4/glib/gasyncqueue.go +44 -36
@@ -144,17 +144,19 @@ var xAsyncQueuePushSorted func(uintptr, uintptr, uintptr, uintptr)
144 // For an example of @func see g_async_queue_sort().144 // For an example of @func see g_async_queue_sort().
145 func (x *AsyncQueue) PushSorted(DataVar uintptr, FuncVar *CompareDataFunc, UserDataVar uintptr) {145 func (x *AsyncQueue) PushSorted(DataVar uintptr, FuncVar *CompareDataFunc, UserDataVar uintptr) {
146 146
147- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
148 var FuncVarRef uintptr147 var FuncVarRef uintptr
149- if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {148+ if FuncVar != nil {
150- FuncVarRef = cbRefPtr149+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
151- } else {150+ if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
152- fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int {151+ FuncVarRef = cbRefPtr
153- cbFn := *FuncVar152+ } else {
154- return cbFn(arg0, arg1, arg2)153+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int {
154+ cbFn := *FuncVar
155+ return cbFn(arg0, arg1, arg2)
156+ }
157+ FuncVarRef = purego.NewCallback(fcb)
158+ SaveCallback(FuncVarPtr, FuncVarRef)
155 }159 }
156- FuncVarRef = purego.NewCallback(fcb)
157- SaveCallback(FuncVarPtr, FuncVarRef)
158 }160 }
159 161
160 xAsyncQueuePushSorted(x.GoPointer(), DataVar, FuncVarRef, UserDataVar)162 xAsyncQueuePushSorted(x.GoPointer(), DataVar, FuncVarRef, UserDataVar)
@@ -180,17 +182,19 @@ var xAsyncQueuePushSortedUnlocked func(uintptr, uintptr, uintptr, uintptr)
180 // For an example of @func see g_async_queue_sort().182 // For an example of @func see g_async_queue_sort().
181 func (x *AsyncQueue) PushSortedUnlocked(DataVar uintptr, FuncVar *CompareDataFunc, UserDataVar uintptr) {183 func (x *AsyncQueue) PushSortedUnlocked(DataVar uintptr, FuncVar *CompareDataFunc, UserDataVar uintptr) {
182 184
183- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
184 var FuncVarRef uintptr185 var FuncVarRef uintptr
185- if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {186+ if FuncVar != nil {
186- FuncVarRef = cbRefPtr187+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
187- } else {188+ if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
188- fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int {189+ FuncVarRef = cbRefPtr
189- cbFn := *FuncVar190+ } else {
190- return cbFn(arg0, arg1, arg2)191+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int {
192+ cbFn := *FuncVar
193+ return cbFn(arg0, arg1, arg2)
194+ }
195+ FuncVarRef = purego.NewCallback(fcb)
196+ SaveCallback(FuncVarPtr, FuncVarRef)
191 }197 }
192- FuncVarRef = purego.NewCallback(fcb)
193- SaveCallback(FuncVarPtr, FuncVarRef)
194 }198 }
195 199
196 xAsyncQueuePushSortedUnlocked(x.GoPointer(), DataVar, FuncVarRef, UserDataVar)200 xAsyncQueuePushSortedUnlocked(x.GoPointer(), DataVar, FuncVarRef, UserDataVar)
@@ -277,17 +281,19 @@ var xAsyncQueueSort func(uintptr, uintptr, uintptr)
277 // ]|281 // ]|
278 func (x *AsyncQueue) Sort(FuncVar *CompareDataFunc, UserDataVar uintptr) {282 func (x *AsyncQueue) Sort(FuncVar *CompareDataFunc, UserDataVar uintptr) {
279 283
280- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
281 var FuncVarRef uintptr284 var FuncVarRef uintptr
282- if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {285+ if FuncVar != nil {
283- FuncVarRef = cbRefPtr286+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
284- } else {287+ if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
285- fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int {288+ FuncVarRef = cbRefPtr
286- cbFn := *FuncVar289+ } else {
287- return cbFn(arg0, arg1, arg2)290+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int {
291+ cbFn := *FuncVar
292+ return cbFn(arg0, arg1, arg2)
293+ }
294+ FuncVarRef = purego.NewCallback(fcb)
295+ SaveCallback(FuncVarPtr, FuncVarRef)
288 }296 }
289- FuncVarRef = purego.NewCallback(fcb)
290- SaveCallback(FuncVarPtr, FuncVarRef)
291 }297 }
292 298
293 xAsyncQueueSort(x.GoPointer(), FuncVarRef, UserDataVar)299 xAsyncQueueSort(x.GoPointer(), FuncVarRef, UserDataVar)
@@ -307,17 +313,19 @@ var xAsyncQueueSortUnlocked func(uintptr, uintptr, uintptr)
307 // This function must be called while holding the @queue's lock.313 // This function must be called while holding the @queue's lock.
308 func (x *AsyncQueue) SortUnlocked(FuncVar *CompareDataFunc, UserDataVar uintptr) {314 func (x *AsyncQueue) SortUnlocked(FuncVar *CompareDataFunc, UserDataVar uintptr) {
309 315
310- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
311 var FuncVarRef uintptr316 var FuncVarRef uintptr
312- if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {317+ if FuncVar != nil {
313- FuncVarRef = cbRefPtr318+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
314- } else {319+ if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
315- fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int {320+ FuncVarRef = cbRefPtr
316- cbFn := *FuncVar321+ } else {
317- return cbFn(arg0, arg1, arg2)322+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int {
323+ cbFn := *FuncVar
324+ return cbFn(arg0, arg1, arg2)
325+ }
326+ FuncVarRef = purego.NewCallback(fcb)
327+ SaveCallback(FuncVarPtr, FuncVarRef)
318 }328 }
319- FuncVarRef = purego.NewCallback(fcb)
320- SaveCallback(FuncVarPtr, FuncVarRef)
321 }329 }
322 330
323 xAsyncQueueSortUnlocked(x.GoPointer(), FuncVarRef, UserDataVar)331 xAsyncQueueSortUnlocked(x.GoPointer(), FuncVarRef, UserDataVar)
M v4/glib/gcache.go +22 -18
@@ -80,17 +80,19 @@ var xCacheKeyForeach func(uintptr, uintptr, uintptr)
80 // pairs to its callback function !80 // pairs to its callback function !
81 func (x *Cache) KeyForeach(FuncVar *HFunc, UserDataVar uintptr) {81 func (x *Cache) KeyForeach(FuncVar *HFunc, UserDataVar uintptr) {
82 82
83- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
84 var FuncVarRef uintptr83 var FuncVarRef uintptr
85- if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {84+ if FuncVar != nil {
86- FuncVarRef = cbRefPtr85+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
87- } else {86+ if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
88- fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {87+ FuncVarRef = cbRefPtr
89- cbFn := *FuncVar88+ } else {
90- cbFn(arg0, arg1, arg2)89+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
90+ cbFn := *FuncVar
91+ cbFn(arg0, arg1, arg2)
92+ }
93+ FuncVarRef = purego.NewCallback(fcb)
94+ SaveCallback(FuncVarPtr, FuncVarRef)
91 }95 }
92- FuncVarRef = purego.NewCallback(fcb)
93- SaveCallback(FuncVarPtr, FuncVarRef)
94 }96 }
95 97
96 xCacheKeyForeach(x.GoPointer(), FuncVarRef, UserDataVar)98 xCacheKeyForeach(x.GoPointer(), FuncVarRef, UserDataVar)
@@ -113,17 +115,19 @@ var xCacheValueForeach func(uintptr, uintptr, uintptr)
113 // Calls the given function for each of the values in the #GCache.115 // Calls the given function for each of the values in the #GCache.
114 func (x *Cache) ValueForeach(FuncVar *HFunc, UserDataVar uintptr) {116 func (x *Cache) ValueForeach(FuncVar *HFunc, UserDataVar uintptr) {
115 117
116- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
117 var FuncVarRef uintptr118 var FuncVarRef uintptr
118- if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {119+ if FuncVar != nil {
119- FuncVarRef = cbRefPtr120+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
120- } else {121+ if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
121- fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {122+ FuncVarRef = cbRefPtr
122- cbFn := *FuncVar123+ } else {
123- cbFn(arg0, arg1, arg2)124+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
125+ cbFn := *FuncVar
126+ cbFn(arg0, arg1, arg2)
127+ }
128+ FuncVarRef = purego.NewCallback(fcb)
129+ SaveCallback(FuncVarPtr, FuncVarRef)
124 }130 }
125- FuncVarRef = purego.NewCallback(fcb)
126- SaveCallback(FuncVarPtr, FuncVarRef)
127 }131 }
128 132
129 xCacheValueForeach(x.GoPointer(), FuncVarRef, UserDataVar)133 xCacheValueForeach(x.GoPointer(), FuncVarRef, UserDataVar)
M v4/glib/gcompletion.go +11 -9
@@ -131,17 +131,19 @@ var xCompletionSetCompare func(uintptr, uintptr)
131 // comparison function is strncmp().131 // comparison function is strncmp().
132 func (x *Completion) SetCompare(StrncmpFuncVar *CompletionStrncmpFunc) {132 func (x *Completion) SetCompare(StrncmpFuncVar *CompletionStrncmpFunc) {
133 133
134- StrncmpFuncVarPtr := uintptr(unsafe.Pointer(StrncmpFuncVar))
135 var StrncmpFuncVarRef uintptr134 var StrncmpFuncVarRef uintptr
136- if cbRefPtr, ok := GetCallback(StrncmpFuncVarPtr); ok {135+ if StrncmpFuncVar != nil {
137- StrncmpFuncVarRef = cbRefPtr136+ StrncmpFuncVarPtr := uintptr(unsafe.Pointer(StrncmpFuncVar))
138- } else {137+ if cbRefPtr, ok := GetCallback(StrncmpFuncVarPtr); ok {
139- fcb := func(arg0 string, arg1 string, arg2 uint) int {138+ StrncmpFuncVarRef = cbRefPtr
140- cbFn := *StrncmpFuncVar139+ } else {
141- return cbFn(arg0, arg1, arg2)140+ fcb := func(arg0 string, arg1 string, arg2 uint) int {
141+ cbFn := *StrncmpFuncVar
142+ return cbFn(arg0, arg1, arg2)
143+ }
144+ StrncmpFuncVarRef = purego.NewCallback(fcb)
145+ SaveCallback(StrncmpFuncVarPtr, StrncmpFuncVarRef)
142 }146 }
143- StrncmpFuncVarRef = purego.NewCallback(fcb)
144- SaveCallback(StrncmpFuncVarPtr, StrncmpFuncVarRef)
145 }147 }
146 148
147 xCompletionSetCompare(x.GoPointer(), StrncmpFuncVarRef)149 xCompletionSetCompare(x.GoPointer(), StrncmpFuncVarRef)
M v4/glib/gdataset.go +33 -27
@@ -63,17 +63,19 @@ var xDatalistForeach func(**Data, uintptr, uintptr)
63 // than skipping over elements that are removed.63 // than skipping over elements that are removed.
64 func DatalistForeach(DatalistVar **Data, FuncVar *DataForeachFunc, UserDataVar uintptr) {64 func DatalistForeach(DatalistVar **Data, FuncVar *DataForeachFunc, UserDataVar uintptr) {
65 65
66- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
67 var FuncVarRef uintptr66 var FuncVarRef uintptr
68- if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {67+ if FuncVar != nil {
69- FuncVarRef = cbRefPtr68+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
70- } else {69+ if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
71- fcb := func(arg0 Quark, arg1 uintptr, arg2 uintptr) {70+ FuncVarRef = cbRefPtr
72- cbFn := *FuncVar71+ } else {
73- cbFn(arg0, arg1, arg2)72+ fcb := func(arg0 Quark, arg1 uintptr, arg2 uintptr) {
73+ cbFn := *FuncVar
74+ cbFn(arg0, arg1, arg2)
75+ }
76+ FuncVarRef = purego.NewCallback(fcb)
77+ SaveCallback(FuncVarPtr, FuncVarRef)
74 }78 }
75- FuncVarRef = purego.NewCallback(fcb)
76- SaveCallback(FuncVarPtr, FuncVarRef)
77 }79 }
78 80
79 xDatalistForeach(DatalistVar, FuncVarRef, UserDataVar)81 xDatalistForeach(DatalistVar, FuncVarRef, UserDataVar)
@@ -288,17 +290,19 @@ var xDatasetForeach func(uintptr, uintptr, uintptr)
288 // than skipping over elements that are removed.290 // than skipping over elements that are removed.
289 func DatasetForeach(DatasetLocationVar uintptr, FuncVar *DataForeachFunc, UserDataVar uintptr) {291 func DatasetForeach(DatasetLocationVar uintptr, FuncVar *DataForeachFunc, UserDataVar uintptr) {
290 292
291- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
292 var FuncVarRef uintptr293 var FuncVarRef uintptr
293- if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {294+ if FuncVar != nil {
294- FuncVarRef = cbRefPtr295+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
295- } else {296+ if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
296- fcb := func(arg0 Quark, arg1 uintptr, arg2 uintptr) {297+ FuncVarRef = cbRefPtr
297- cbFn := *FuncVar298+ } else {
298- cbFn(arg0, arg1, arg2)299+ fcb := func(arg0 Quark, arg1 uintptr, arg2 uintptr) {
300+ cbFn := *FuncVar
301+ cbFn(arg0, arg1, arg2)
302+ }
303+ FuncVarRef = purego.NewCallback(fcb)
304+ SaveCallback(FuncVarPtr, FuncVarRef)
299 }305 }
300- FuncVarRef = purego.NewCallback(fcb)
301- SaveCallback(FuncVarPtr, FuncVarRef)
302 }306 }
303 307
304 xDatasetForeach(DatasetLocationVar, FuncVarRef, UserDataVar)308 xDatasetForeach(DatasetLocationVar, FuncVarRef, UserDataVar)
@@ -332,17 +336,19 @@ var xDatasetIdSetDataFull func(uintptr, Quark, uintptr, uintptr)
332 // is called.336 // is called.
333 func DatasetIdSetDataFull(DatasetLocationVar uintptr, KeyIdVar Quark, DataVar uintptr, DestroyFuncVar *DestroyNotify) {337 func DatasetIdSetDataFull(DatasetLocationVar uintptr, KeyIdVar Quark, DataVar uintptr, DestroyFuncVar *DestroyNotify) {
334 338
335- DestroyFuncVarPtr := uintptr(unsafe.Pointer(DestroyFuncVar))
336 var DestroyFuncVarRef uintptr339 var DestroyFuncVarRef uintptr
337- if cbRefPtr, ok := GetCallback(DestroyFuncVarPtr); ok {340+ if DestroyFuncVar != nil {
338- DestroyFuncVarRef = cbRefPtr341+ DestroyFuncVarPtr := uintptr(unsafe.Pointer(DestroyFuncVar))
339- } else {342+ if cbRefPtr, ok := GetCallback(DestroyFuncVarPtr); ok {
340- fcb := func(arg0 uintptr) {343+ DestroyFuncVarRef = cbRefPtr
341- cbFn := *DestroyFuncVar344+ } else {
342- cbFn(arg0)345+ fcb := func(arg0 uintptr) {
346+ cbFn := *DestroyFuncVar
347+ cbFn(arg0)
348+ }
349+ DestroyFuncVarRef = purego.NewCallback(fcb)
350+ SaveCallback(DestroyFuncVarPtr, DestroyFuncVarRef)
343 }351 }
344- DestroyFuncVarRef = purego.NewCallback(fcb)
345- SaveCallback(DestroyFuncVarPtr, DestroyFuncVarRef)
346 }352 }
347 353
348 xDatasetIdSetDataFull(DatasetLocationVar, KeyIdVar, DataVar, DestroyFuncVarRef)354 xDatasetIdSetDataFull(DatasetLocationVar, KeyIdVar, DataVar, DestroyFuncVarRef)
M v4/glib/gerror.go +66 -54
@@ -149,43 +149,49 @@ var xErrorDomainRegister func(string, uint, uintptr, uintptr, uintptr) Quark
149 // g_error_domain_register_static().149 // g_error_domain_register_static().
150 func ErrorDomainRegister(ErrorTypeNameVar string, ErrorTypePrivateSizeVar uint, ErrorTypeInitVar *ErrorInitFunc, ErrorTypeCopyVar *ErrorCopyFunc, ErrorTypeClearVar *ErrorClearFunc) Quark {150 func ErrorDomainRegister(ErrorTypeNameVar string, ErrorTypePrivateSizeVar uint, ErrorTypeInitVar *ErrorInitFunc, ErrorTypeCopyVar *ErrorCopyFunc, ErrorTypeClearVar *ErrorClearFunc) Quark {
151 151
152- ErrorTypeInitVarPtr := uintptr(unsafe.Pointer(ErrorTypeInitVar))
153 var ErrorTypeInitVarRef uintptr152 var ErrorTypeInitVarRef uintptr
154- if cbRefPtr, ok := GetCallback(ErrorTypeInitVarPtr); ok {153+ if ErrorTypeInitVar != nil {
155- ErrorTypeInitVarRef = cbRefPtr154+ ErrorTypeInitVarPtr := uintptr(unsafe.Pointer(ErrorTypeInitVar))
156- } else {155+ if cbRefPtr, ok := GetCallback(ErrorTypeInitVarPtr); ok {
157- fcb := func(arg0 *Error) {156+ ErrorTypeInitVarRef = cbRefPtr
158- cbFn := *ErrorTypeInitVar157+ } else {
159- cbFn(arg0)158+ fcb := func(arg0 *Error) {
159+ cbFn := *ErrorTypeInitVar
160+ cbFn(arg0)
161+ }
162+ ErrorTypeInitVarRef = purego.NewCallback(fcb)
163+ SaveCallback(ErrorTypeInitVarPtr, ErrorTypeInitVarRef)
160 }164 }
161- ErrorTypeInitVarRef = purego.NewCallback(fcb)
162- SaveCallback(ErrorTypeInitVarPtr, ErrorTypeInitVarRef)
163 }165 }
164 166
165- ErrorTypeCopyVarPtr := uintptr(unsafe.Pointer(ErrorTypeCopyVar))
166 var ErrorTypeCopyVarRef uintptr167 var ErrorTypeCopyVarRef uintptr
167- if cbRefPtr, ok := GetCallback(ErrorTypeCopyVarPtr); ok {168+ if ErrorTypeCopyVar != nil {
168- ErrorTypeCopyVarRef = cbRefPtr169+ ErrorTypeCopyVarPtr := uintptr(unsafe.Pointer(ErrorTypeCopyVar))
169- } else {170+ if cbRefPtr, ok := GetCallback(ErrorTypeCopyVarPtr); ok {
170- fcb := func(arg0 *Error, arg1 *Error) {171+ ErrorTypeCopyVarRef = cbRefPtr
171- cbFn := *ErrorTypeCopyVar172+ } else {
172- cbFn(arg0, arg1)173+ fcb := func(arg0 *Error, arg1 *Error) {
174+ cbFn := *ErrorTypeCopyVar
175+ cbFn(arg0, arg1)
176+ }
177+ ErrorTypeCopyVarRef = purego.NewCallback(fcb)
178+ SaveCallback(ErrorTypeCopyVarPtr, ErrorTypeCopyVarRef)
173 }179 }
174- ErrorTypeCopyVarRef = purego.NewCallback(fcb)
175- SaveCallback(ErrorTypeCopyVarPtr, ErrorTypeCopyVarRef)
176 }180 }
177 181
178- ErrorTypeClearVarPtr := uintptr(unsafe.Pointer(ErrorTypeClearVar))
179 var ErrorTypeClearVarRef uintptr182 var ErrorTypeClearVarRef uintptr
180- if cbRefPtr, ok := GetCallback(ErrorTypeClearVarPtr); ok {183+ if ErrorTypeClearVar != nil {
181- ErrorTypeClearVarRef = cbRefPtr184+ ErrorTypeClearVarPtr := uintptr(unsafe.Pointer(ErrorTypeClearVar))
182- } else {185+ if cbRefPtr, ok := GetCallback(ErrorTypeClearVarPtr); ok {
183- fcb := func(arg0 *Error) {186+ ErrorTypeClearVarRef = cbRefPtr
184- cbFn := *ErrorTypeClearVar187+ } else {
185- cbFn(arg0)188+ fcb := func(arg0 *Error) {
189+ cbFn := *ErrorTypeClearVar
190+ cbFn(arg0)
191+ }
192+ ErrorTypeClearVarRef = purego.NewCallback(fcb)
193+ SaveCallback(ErrorTypeClearVarPtr, ErrorTypeClearVarRef)
186 }194 }
187- ErrorTypeClearVarRef = purego.NewCallback(fcb)
188- SaveCallback(ErrorTypeClearVarPtr, ErrorTypeClearVarRef)
189 }195 }
190 196
191 cret := xErrorDomainRegister(ErrorTypeNameVar, ErrorTypePrivateSizeVar, ErrorTypeInitVarRef, ErrorTypeCopyVarRef, ErrorTypeClearVarRef)197 cret := xErrorDomainRegister(ErrorTypeNameVar, ErrorTypePrivateSizeVar, ErrorTypeInitVarRef, ErrorTypeCopyVarRef, ErrorTypeClearVarRef)
@@ -213,43 +219,49 @@ var xErrorDomainRegisterStatic func(string, uint, uintptr, uintptr, uintptr) Qua
213 // already takes care of passing valid information to this function.219 // already takes care of passing valid information to this function.
214 func ErrorDomainRegisterStatic(ErrorTypeNameVar string, ErrorTypePrivateSizeVar uint, ErrorTypeInitVar *ErrorInitFunc, ErrorTypeCopyVar *ErrorCopyFunc, ErrorTypeClearVar *ErrorClearFunc) Quark {220 func ErrorDomainRegisterStatic(ErrorTypeNameVar string, ErrorTypePrivateSizeVar uint, ErrorTypeInitVar *ErrorInitFunc, ErrorTypeCopyVar *ErrorCopyFunc, ErrorTypeClearVar *ErrorClearFunc) Quark {
215 221
216- ErrorTypeInitVarPtr := uintptr(unsafe.Pointer(ErrorTypeInitVar))
217 var ErrorTypeInitVarRef uintptr222 var ErrorTypeInitVarRef uintptr
218- if cbRefPtr, ok := GetCallback(ErrorTypeInitVarPtr); ok {223+ if ErrorTypeInitVar != nil {
219- ErrorTypeInitVarRef = cbRefPtr224+ ErrorTypeInitVarPtr := uintptr(unsafe.Pointer(ErrorTypeInitVar))
220- } else {225+ if cbRefPtr, ok := GetCallback(ErrorTypeInitVarPtr); ok {
221- fcb := func(arg0 *Error) {226+ ErrorTypeInitVarRef = cbRefPtr
222- cbFn := *ErrorTypeInitVar227+ } else {
223- cbFn(arg0)228+ fcb := func(arg0 *Error) {
229+ cbFn := *ErrorTypeInitVar
230+ cbFn(arg0)
231+ }
232+ ErrorTypeInitVarRef = purego.NewCallback(fcb)
233+ SaveCallback(ErrorTypeInitVarPtr, ErrorTypeInitVarRef)
224 }234 }
225- ErrorTypeInitVarRef = purego.NewCallback(fcb)
226- SaveCallback(ErrorTypeInitVarPtr, ErrorTypeInitVarRef)
227 }235 }
228 236
229- ErrorTypeCopyVarPtr := uintptr(unsafe.Pointer(ErrorTypeCopyVar))
230 var ErrorTypeCopyVarRef uintptr237 var ErrorTypeCopyVarRef uintptr
231- if cbRefPtr, ok := GetCallback(ErrorTypeCopyVarPtr); ok {238+ if ErrorTypeCopyVar != nil {
232- ErrorTypeCopyVarRef = cbRefPtr239+ ErrorTypeCopyVarPtr := uintptr(unsafe.Pointer(ErrorTypeCopyVar))
233- } else {240+ if cbRefPtr, ok := GetCallback(ErrorTypeCopyVarPtr); ok {
234- fcb := func(arg0 *Error, arg1 *Error) {241+ ErrorTypeCopyVarRef = cbRefPtr
235- cbFn := *ErrorTypeCopyVar242+ } else {
236- cbFn(arg0, arg1)243+ fcb := func(arg0 *Error, arg1 *Error) {
244+ cbFn := *ErrorTypeCopyVar
245+ cbFn(arg0, arg1)
246+ }
247+ ErrorTypeCopyVarRef = purego.NewCallback(fcb)
248+ SaveCallback(ErrorTypeCopyVarPtr, ErrorTypeCopyVarRef)
237 }249 }
238- ErrorTypeCopyVarRef = purego.NewCallback(fcb)
239- SaveCallback(ErrorTypeCopyVarPtr, ErrorTypeCopyVarRef)
240 }250 }
241 251
242- ErrorTypeClearVarPtr := uintptr(unsafe.Pointer(ErrorTypeClearVar))
243 var ErrorTypeClearVarRef uintptr252 var ErrorTypeClearVarRef uintptr
244- if cbRefPtr, ok := GetCallback(ErrorTypeClearVarPtr); ok {253+ if ErrorTypeClearVar != nil {
245- ErrorTypeClearVarRef = cbRefPtr254+ ErrorTypeClearVarPtr := uintptr(unsafe.Pointer(ErrorTypeClearVar))
246- } else {255+ if cbRefPtr, ok := GetCallback(ErrorTypeClearVarPtr); ok {
247- fcb := func(arg0 *Error) {256+ ErrorTypeClearVarRef = cbRefPtr
248- cbFn := *ErrorTypeClearVar257+ } else {
249- cbFn(arg0)258+ fcb := func(arg0 *Error) {
259+ cbFn := *ErrorTypeClearVar
260+ cbFn(arg0)
261+ }
262+ ErrorTypeClearVarRef = purego.NewCallback(fcb)
263+ SaveCallback(ErrorTypeClearVarPtr, ErrorTypeClearVarRef)
250 }264 }
251- ErrorTypeClearVarRef = purego.NewCallback(fcb)
252- SaveCallback(ErrorTypeClearVarPtr, ErrorTypeClearVarRef)
253 }265 }
254 266
255 cret := xErrorDomainRegisterStatic(ErrorTypeNameVar, ErrorTypePrivateSizeVar, ErrorTypeInitVarRef, ErrorTypeCopyVarRef, ErrorTypeClearVarRef)267 cret := xErrorDomainRegisterStatic(ErrorTypeNameVar, ErrorTypePrivateSizeVar, ErrorTypeInitVarRef, ErrorTypeCopyVarRef, ErrorTypeClearVarRef)
M v4/glib/ghash.go +44 -36
@@ -286,17 +286,19 @@ var xHashTableFind func(*HashTable, uintptr, uintptr) uintptr
286 // values in a hash table ends up needing O(n*n) operations).286 // values in a hash table ends up needing O(n*n) operations).
287 func HashTableFind(HashTableVar *HashTable, PredicateVar *HRFunc, UserDataVar uintptr) uintptr {287 func HashTableFind(HashTableVar *HashTable, PredicateVar *HRFunc, UserDataVar uintptr) uintptr {
288 288
289- PredicateVarPtr := uintptr(unsafe.Pointer(PredicateVar))
290 var PredicateVarRef uintptr289 var PredicateVarRef uintptr
291- if cbRefPtr, ok := GetCallback(PredicateVarPtr); ok {290+ if PredicateVar != nil {
292- PredicateVarRef = cbRefPtr291+ PredicateVarPtr := uintptr(unsafe.Pointer(PredicateVar))
293- } else {292+ if cbRefPtr, ok := GetCallback(PredicateVarPtr); ok {
294- fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) bool {293+ PredicateVarRef = cbRefPtr
295- cbFn := *PredicateVar294+ } else {
296- return cbFn(arg0, arg1, arg2)295+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) bool {
296+ cbFn := *PredicateVar
297+ return cbFn(arg0, arg1, arg2)
298+ }
299+ PredicateVarRef = purego.NewCallback(fcb)
300+ SaveCallback(PredicateVarPtr, PredicateVarRef)
297 }301 }
298- PredicateVarRef = purego.NewCallback(fcb)
299- SaveCallback(PredicateVarPtr, PredicateVarRef)
300 }302 }
301 303
302 cret := xHashTableFind(HashTableVar, PredicateVarRef, UserDataVar)304 cret := xHashTableFind(HashTableVar, PredicateVarRef, UserDataVar)
@@ -319,17 +321,19 @@ var xHashTableForeach func(*HashTable, uintptr, uintptr)
319 // order searches in contrast to g_hash_table_lookup().321 // order searches in contrast to g_hash_table_lookup().
320 func HashTableForeach(HashTableVar *HashTable, FuncVar *HFunc, UserDataVar uintptr) {322 func HashTableForeach(HashTableVar *HashTable, FuncVar *HFunc, UserDataVar uintptr) {
321 323
322- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
323 var FuncVarRef uintptr324 var FuncVarRef uintptr
324- if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {325+ if FuncVar != nil {
325- FuncVarRef = cbRefPtr326+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
326- } else {327+ if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
327- fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {328+ FuncVarRef = cbRefPtr
328- cbFn := *FuncVar329+ } else {
329- cbFn(arg0, arg1, arg2)330+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
331+ cbFn := *FuncVar
332+ cbFn(arg0, arg1, arg2)
333+ }
334+ FuncVarRef = purego.NewCallback(fcb)
335+ SaveCallback(FuncVarPtr, FuncVarRef)
330 }336 }
331- FuncVarRef = purego.NewCallback(fcb)
332- SaveCallback(FuncVarPtr, FuncVarRef)
333 }337 }
334 338
335 xHashTableForeach(HashTableVar, FuncVarRef, UserDataVar)339 xHashTableForeach(HashTableVar, FuncVarRef, UserDataVar)
@@ -348,17 +352,19 @@ var xHashTableForeachRemove func(*HashTable, uintptr, uintptr) uint
348 // key/value pairs in the hash table.352 // key/value pairs in the hash table.
349 func HashTableForeachRemove(HashTableVar *HashTable, FuncVar *HRFunc, UserDataVar uintptr) uint {353 func HashTableForeachRemove(HashTableVar *HashTable, FuncVar *HRFunc, UserDataVar uintptr) uint {
350 354
351- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
352 var FuncVarRef uintptr355 var FuncVarRef uintptr
353- if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {356+ if FuncVar != nil {
354- FuncVarRef = cbRefPtr357+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
355- } else {358+ if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
356- fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) bool {359+ FuncVarRef = cbRefPtr
357- cbFn := *FuncVar360+ } else {
358- return cbFn(arg0, arg1, arg2)361+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) bool {
362+ cbFn := *FuncVar
363+ return cbFn(arg0, arg1, arg2)
364+ }
365+ FuncVarRef = purego.NewCallback(fcb)
366+ SaveCallback(FuncVarPtr, FuncVarRef)
359 }367 }
360- FuncVarRef = purego.NewCallback(fcb)
361- SaveCallback(FuncVarPtr, FuncVarRef)
362 }368 }
363 369
364 cret := xHashTableForeachRemove(HashTableVar, FuncVarRef, UserDataVar)370 cret := xHashTableForeachRemove(HashTableVar, FuncVarRef, UserDataVar)
@@ -376,17 +382,19 @@ var xHashTableForeachSteal func(*HashTable, uintptr, uintptr) uint
376 // key/value pairs in the hash table.382 // key/value pairs in the hash table.
377 func HashTableForeachSteal(HashTableVar *HashTable, FuncVar *HRFunc, UserDataVar uintptr) uint {383 func HashTableForeachSteal(HashTableVar *HashTable, FuncVar *HRFunc, UserDataVar uintptr) uint {
378 384
379- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
380 var FuncVarRef uintptr385 var FuncVarRef uintptr
381- if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {386+ if FuncVar != nil {
382- FuncVarRef = cbRefPtr387+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
383- } else {388+ if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
384- fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) bool {389+ FuncVarRef = cbRefPtr
385- cbFn := *FuncVar390+ } else {
386- return cbFn(arg0, arg1, arg2)391+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) bool {
392+ cbFn := *FuncVar
393+ return cbFn(arg0, arg1, arg2)
394+ }
395+ FuncVarRef = purego.NewCallback(fcb)
396+ SaveCallback(FuncVarPtr, FuncVarRef)
387 }397 }
388- FuncVarRef = purego.NewCallback(fcb)
389- SaveCallback(FuncVarPtr, FuncVarRef)
390 }398 }
391 399
392 cret := xHashTableForeachSteal(HashTableVar, FuncVarRef, UserDataVar)400 cret := xHashTableForeachSteal(HashTableVar, FuncVarRef, UserDataVar)
M v4/glib/ghook.go +33 -27
@@ -135,17 +135,19 @@ var xHookListMarshal func(uintptr, bool, uintptr, uintptr)
135 // Calls a function on each valid #GHook.135 // Calls a function on each valid #GHook.
136 func (x *HookList) Marshal(MayRecurseVar bool, MarshallerVar *HookMarshaller, MarshalDataVar uintptr) {136 func (x *HookList) Marshal(MayRecurseVar bool, MarshallerVar *HookMarshaller, MarshalDataVar uintptr) {
137 137
138- MarshallerVarPtr := uintptr(unsafe.Pointer(MarshallerVar))
139 var MarshallerVarRef uintptr138 var MarshallerVarRef uintptr
140- if cbRefPtr, ok := GetCallback(MarshallerVarPtr); ok {139+ if MarshallerVar != nil {
141- MarshallerVarRef = cbRefPtr140+ MarshallerVarPtr := uintptr(unsafe.Pointer(MarshallerVar))
142- } else {141+ if cbRefPtr, ok := GetCallback(MarshallerVarPtr); ok {
143- fcb := func(arg0 *Hook, arg1 uintptr) {142+ MarshallerVarRef = cbRefPtr
144- cbFn := *MarshallerVar143+ } else {
145- cbFn(arg0, arg1)144+ fcb := func(arg0 *Hook, arg1 uintptr) {
145+ cbFn := *MarshallerVar
146+ cbFn(arg0, arg1)
147+ }
148+ MarshallerVarRef = purego.NewCallback(fcb)
149+ SaveCallback(MarshallerVarPtr, MarshallerVarRef)
146 }150 }
147- MarshallerVarRef = purego.NewCallback(fcb)
148- SaveCallback(MarshallerVarPtr, MarshallerVarRef)
149 }151 }
150 152
151 xHookListMarshal(x.GoPointer(), MayRecurseVar, MarshallerVarRef, MarshalDataVar)153 xHookListMarshal(x.GoPointer(), MayRecurseVar, MarshallerVarRef, MarshalDataVar)
@@ -158,17 +160,19 @@ var xHookListMarshalCheck func(uintptr, bool, uintptr, uintptr)
158 // function returns %FALSE.160 // function returns %FALSE.
159 func (x *HookList) MarshalCheck(MayRecurseVar bool, MarshallerVar *HookCheckMarshaller, MarshalDataVar uintptr) {161 func (x *HookList) MarshalCheck(MayRecurseVar bool, MarshallerVar *HookCheckMarshaller, MarshalDataVar uintptr) {
160 162
161- MarshallerVarPtr := uintptr(unsafe.Pointer(MarshallerVar))
162 var MarshallerVarRef uintptr163 var MarshallerVarRef uintptr
163- if cbRefPtr, ok := GetCallback(MarshallerVarPtr); ok {164+ if MarshallerVar != nil {
164- MarshallerVarRef = cbRefPtr165+ MarshallerVarPtr := uintptr(unsafe.Pointer(MarshallerVar))
165- } else {166+ if cbRefPtr, ok := GetCallback(MarshallerVarPtr); ok {
166- fcb := func(arg0 *Hook, arg1 uintptr) bool {167+ MarshallerVarRef = cbRefPtr
167- cbFn := *MarshallerVar168+ } else {
168- return cbFn(arg0, arg1)169+ fcb := func(arg0 *Hook, arg1 uintptr) bool {
170+ cbFn := *MarshallerVar
171+ return cbFn(arg0, arg1)
172+ }
173+ MarshallerVarRef = purego.NewCallback(fcb)
174+ SaveCallback(MarshallerVarPtr, MarshallerVarRef)
169 }175 }
170- MarshallerVarRef = purego.NewCallback(fcb)
171- SaveCallback(MarshallerVarPtr, MarshallerVarRef)
172 }176 }
173 177
174 xHookListMarshalCheck(x.GoPointer(), MayRecurseVar, MarshallerVarRef, MarshalDataVar)178 xHookListMarshalCheck(x.GoPointer(), MayRecurseVar, MarshallerVarRef, MarshalDataVar)
@@ -240,17 +244,19 @@ var xHookInsertSorted func(*HookList, *Hook, uintptr)
240 // Inserts a #GHook into a #GHookList, sorted by the given function.244 // Inserts a #GHook into a #GHookList, sorted by the given function.
241 func HookInsertSorted(HookListVar *HookList, HookVar *Hook, FuncVar *HookCompareFunc) {245 func HookInsertSorted(HookListVar *HookList, HookVar *Hook, FuncVar *HookCompareFunc) {
242 246
243- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
244 var FuncVarRef uintptr247 var FuncVarRef uintptr
245- if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {248+ if FuncVar != nil {
246- FuncVarRef = cbRefPtr249+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
247- } else {250+ if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
248- fcb := func(arg0 *Hook, arg1 *Hook) int {251+ FuncVarRef = cbRefPtr
249- cbFn := *FuncVar252+ } else {
250- return cbFn(arg0, arg1)253+ fcb := func(arg0 *Hook, arg1 *Hook) int {
254+ cbFn := *FuncVar
255+ return cbFn(arg0, arg1)
256+ }
257+ FuncVarRef = purego.NewCallback(fcb)
258+ SaveCallback(FuncVarPtr, FuncVarRef)
251 }259 }
252- FuncVarRef = purego.NewCallback(fcb)
253- SaveCallback(FuncVarPtr, FuncVarRef)
254 }260 }
255 261
256 xHookInsertSorted(HookListVar, HookVar, FuncVarRef)262 xHookInsertSorted(HookListVar, HookVar, FuncVarRef)
M v4/glib/giochannel.go +33 -27
@@ -1018,17 +1018,19 @@ var xIoAddWatch func(*IOChannel, IOCondition, uintptr, uintptr) uint
1018 // with the default priority.1018 // with the default priority.
1019 func IoAddWatch(ChannelVar *IOChannel, ConditionVar IOCondition, FuncVar *IOFunc, UserDataVar uintptr) uint {1019 func IoAddWatch(ChannelVar *IOChannel, ConditionVar IOCondition, FuncVar *IOFunc, UserDataVar uintptr) uint {
1020 1020
1021- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
1022 var FuncVarRef uintptr1021 var FuncVarRef uintptr
1023- if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {1022+ if FuncVar != nil {
1024- FuncVarRef = cbRefPtr1023+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
1025- } else {1024+ if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
1026- fcb := func(arg0 *IOChannel, arg1 IOCondition, arg2 uintptr) bool {1025+ FuncVarRef = cbRefPtr
1027- cbFn := *FuncVar1026+ } else {
1028- return cbFn(arg0, arg1, arg2)1027+ fcb := func(arg0 *IOChannel, arg1 IOCondition, arg2 uintptr) bool {
1028+ cbFn := *FuncVar
1029+ return cbFn(arg0, arg1, arg2)
1030+ }
1031+ FuncVarRef = purego.NewCallback(fcb)
1032+ SaveCallback(FuncVarPtr, FuncVarRef)
1029 }1033 }
1030- FuncVarRef = purego.NewCallback(fcb)
1031- SaveCallback(FuncVarPtr, FuncVarRef)
1032 }1034 }
1033 1035
1034 cret := xIoAddWatch(ChannelVar, ConditionVar, FuncVarRef, UserDataVar)1036 cret := xIoAddWatch(ChannelVar, ConditionVar, FuncVarRef, UserDataVar)
@@ -1045,30 +1047,34 @@ var xIoAddWatchFull func(*IOChannel, int, IOCondition, uintptr, uintptr, uintptr
1045 // You can do these steps manually if you need greater control.1047 // You can do these steps manually if you need greater control.
1046 func IoAddWatchFull(ChannelVar *IOChannel, PriorityVar int, ConditionVar IOCondition, FuncVar *IOFunc, UserDataVar uintptr, NotifyVar *DestroyNotify) uint {1048 func IoAddWatchFull(ChannelVar *IOChannel, PriorityVar int, ConditionVar IOCondition, FuncVar *IOFunc, UserDataVar uintptr, NotifyVar *DestroyNotify) uint {
1047 1049
1048- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
1049 var FuncVarRef uintptr1050 var FuncVarRef uintptr
1050- if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {1051+ if FuncVar != nil {
1051- FuncVarRef = cbRefPtr1052+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
1052- } else {1053+ if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
1053- fcb := func(arg0 *IOChannel, arg1 IOCondition, arg2 uintptr) bool {1054+ FuncVarRef = cbRefPtr
1054- cbFn := *FuncVar1055+ } else {
1055- return cbFn(arg0, arg1, arg2)1056+ fcb := func(arg0 *IOChannel, arg1 IOCondition, arg2 uintptr) bool {
1057+ cbFn := *FuncVar
1058+ return cbFn(arg0, arg1, arg2)
1059+ }
1060+ FuncVarRef = purego.NewCallback(fcb)
1061+ SaveCallback(FuncVarPtr, FuncVarRef)
1056 }1062 }
1057- FuncVarRef = purego.NewCallback(fcb)
1058- SaveCallback(FuncVarPtr, FuncVarRef)
1059 }1063 }
1060 1064
1061- NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
1062 var NotifyVarRef uintptr1065 var NotifyVarRef uintptr
1063- if cbRefPtr, ok := GetCallback(NotifyVarPtr); ok {1066+ if NotifyVar != nil {
1064- NotifyVarRef = cbRefPtr1067+ NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
1065- } else {1068+ if cbRefPtr, ok := GetCallback(NotifyVarPtr); ok {
1066- fcb := func(arg0 uintptr) {1069+ NotifyVarRef = cbRefPtr
1067- cbFn := *NotifyVar1070+ } else {
1068- cbFn(arg0)1071+ fcb := func(arg0 uintptr) {
1072+ cbFn := *NotifyVar
1073+ cbFn(arg0)
1074+ }
1075+ NotifyVarRef = purego.NewCallback(fcb)
1076+ SaveCallback(NotifyVarPtr, NotifyVarRef)
1069 }1077 }
1070- NotifyVarRef = purego.NewCallback(fcb)
1071- SaveCallback(NotifyVarPtr, NotifyVarRef)
1072 }1078 }
1073 1079
1074 cret := xIoAddWatchFull(ChannelVar, PriorityVar, ConditionVar, FuncVarRef, UserDataVar, NotifyVarRef)1080 cret := xIoAddWatchFull(ChannelVar, PriorityVar, ConditionVar, FuncVarRef, UserDataVar, NotifyVarRef)
M v4/glib/glib-unix.go +66 -54
@@ -99,17 +99,19 @@ var xUnixFdAdd func(int, IOCondition, uintptr, uintptr) uint
99 // The source will never close the fd -- you must do it yourself.99 // The source will never close the fd -- you must do it yourself.
100 func UnixFdAdd(FdVar int, ConditionVar IOCondition, FunctionVar *UnixFDSourceFunc, UserDataVar uintptr) uint {100 func UnixFdAdd(FdVar int, ConditionVar IOCondition, FunctionVar *UnixFDSourceFunc, UserDataVar uintptr) uint {
101 101
102- FunctionVarPtr := uintptr(unsafe.Pointer(FunctionVar))
103 var FunctionVarRef uintptr102 var FunctionVarRef uintptr
104- if cbRefPtr, ok := GetCallback(FunctionVarPtr); ok {103+ if FunctionVar != nil {
105- FunctionVarRef = cbRefPtr104+ FunctionVarPtr := uintptr(unsafe.Pointer(FunctionVar))
106- } else {105+ if cbRefPtr, ok := GetCallback(FunctionVarPtr); ok {
107- fcb := func(arg0 int, arg1 IOCondition, arg2 uintptr) bool {106+ FunctionVarRef = cbRefPtr
108- cbFn := *FunctionVar107+ } else {
109- return cbFn(arg0, arg1, arg2)108+ fcb := func(arg0 int, arg1 IOCondition, arg2 uintptr) bool {
109+ cbFn := *FunctionVar
110+ return cbFn(arg0, arg1, arg2)
111+ }
112+ FunctionVarRef = purego.NewCallback(fcb)
113+ SaveCallback(FunctionVarPtr, FunctionVarRef)
110 }114 }
111- FunctionVarRef = purego.NewCallback(fcb)
112- SaveCallback(FunctionVarPtr, FunctionVarRef)
113 }115 }
114 116
115 cret := xUnixFdAdd(FdVar, ConditionVar, FunctionVarRef, UserDataVar)117 cret := xUnixFdAdd(FdVar, ConditionVar, FunctionVarRef, UserDataVar)
@@ -126,30 +128,34 @@ var xUnixFdAddFull func(int, int, IOCondition, uintptr, uintptr, uintptr) uint
126 // @user_data.128 // @user_data.
127 func UnixFdAddFull(PriorityVar int, FdVar int, ConditionVar IOCondition, FunctionVar *UnixFDSourceFunc, UserDataVar uintptr, NotifyVar *DestroyNotify) uint {129 func UnixFdAddFull(PriorityVar int, FdVar int, ConditionVar IOCondition, FunctionVar *UnixFDSourceFunc, UserDataVar uintptr, NotifyVar *DestroyNotify) uint {
128 130
129- FunctionVarPtr := uintptr(unsafe.Pointer(FunctionVar))
130 var FunctionVarRef uintptr131 var FunctionVarRef uintptr
131- if cbRefPtr, ok := GetCallback(FunctionVarPtr); ok {132+ if FunctionVar != nil {
132- FunctionVarRef = cbRefPtr133+ FunctionVarPtr := uintptr(unsafe.Pointer(FunctionVar))
133- } else {134+ if cbRefPtr, ok := GetCallback(FunctionVarPtr); ok {
134- fcb := func(arg0 int, arg1 IOCondition, arg2 uintptr) bool {135+ FunctionVarRef = cbRefPtr
135- cbFn := *FunctionVar136+ } else {
136- return cbFn(arg0, arg1, arg2)137+ fcb := func(arg0 int, arg1 IOCondition, arg2 uintptr) bool {
138+ cbFn := *FunctionVar
139+ return cbFn(arg0, arg1, arg2)
140+ }
141+ FunctionVarRef = purego.NewCallback(fcb)
142+ SaveCallback(FunctionVarPtr, FunctionVarRef)
137 }143 }
138- FunctionVarRef = purego.NewCallback(fcb)
139- SaveCallback(FunctionVarPtr, FunctionVarRef)
140 }144 }
141 145
142- NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
143 var NotifyVarRef uintptr146 var NotifyVarRef uintptr
144- if cbRefPtr, ok := GetCallback(NotifyVarPtr); ok {147+ if NotifyVar != nil {
145- NotifyVarRef = cbRefPtr148+ NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
146- } else {149+ if cbRefPtr, ok := GetCallback(NotifyVarPtr); ok {
147- fcb := func(arg0 uintptr) {150+ NotifyVarRef = cbRefPtr
148- cbFn := *NotifyVar151+ } else {
149- cbFn(arg0)152+ fcb := func(arg0 uintptr) {
153+ cbFn := *NotifyVar
154+ cbFn(arg0)
155+ }
156+ NotifyVarRef = purego.NewCallback(fcb)
157+ SaveCallback(NotifyVarPtr, NotifyVarRef)
150 }158 }
151- NotifyVarRef = purego.NewCallback(fcb)
152- SaveCallback(NotifyVarPtr, NotifyVarRef)
153 }159 }
154 160
155 cret := xUnixFdAddFull(PriorityVar, FdVar, ConditionVar, FunctionVarRef, UserDataVar, NotifyVarRef)161 cret := xUnixFdAddFull(PriorityVar, FdVar, ConditionVar, FunctionVarRef, UserDataVar, NotifyVarRef)
@@ -250,17 +256,19 @@ var xUnixSignalAdd func(int, uintptr, uintptr) uint
250 // using g_source_remove().256 // using g_source_remove().
251 func UnixSignalAdd(SignumVar int, HandlerVar *SourceFunc, UserDataVar uintptr) uint {257 func UnixSignalAdd(SignumVar int, HandlerVar *SourceFunc, UserDataVar uintptr) uint {
252 258
253- HandlerVarPtr := uintptr(unsafe.Pointer(HandlerVar))
254 var HandlerVarRef uintptr259 var HandlerVarRef uintptr
255- if cbRefPtr, ok := GetCallback(HandlerVarPtr); ok {260+ if HandlerVar != nil {
256- HandlerVarRef = cbRefPtr261+ HandlerVarPtr := uintptr(unsafe.Pointer(HandlerVar))
257- } else {262+ if cbRefPtr, ok := GetCallback(HandlerVarPtr); ok {
258- fcb := func(arg0 uintptr) bool {263+ HandlerVarRef = cbRefPtr
259- cbFn := *HandlerVar264+ } else {
260- return cbFn(arg0)265+ fcb := func(arg0 uintptr) bool {
266+ cbFn := *HandlerVar
267+ return cbFn(arg0)
268+ }
269+ HandlerVarRef = purego.NewCallback(fcb)
270+ SaveCallback(HandlerVarPtr, HandlerVarRef)
261 }271 }
262- HandlerVarRef = purego.NewCallback(fcb)
263- SaveCallback(HandlerVarPtr, HandlerVarRef)
264 }272 }
265 273
266 cret := xUnixSignalAdd(SignumVar, HandlerVarRef, UserDataVar)274 cret := xUnixSignalAdd(SignumVar, HandlerVarRef, UserDataVar)
@@ -274,30 +282,34 @@ var xUnixSignalAddFull func(int, int, uintptr, uintptr, uintptr) uint
274 // using g_source_remove().282 // using g_source_remove().
275 func UnixSignalAddFull(PriorityVar int, SignumVar int, HandlerVar *SourceFunc, UserDataVar uintptr, NotifyVar *DestroyNotify) uint {283 func UnixSignalAddFull(PriorityVar int, SignumVar int, HandlerVar *SourceFunc, UserDataVar uintptr, NotifyVar *DestroyNotify) uint {
276 284
277- HandlerVarPtr := uintptr(unsafe.Pointer(HandlerVar))
278 var HandlerVarRef uintptr285 var HandlerVarRef uintptr
279- if cbRefPtr, ok := GetCallback(HandlerVarPtr); ok {286+ if HandlerVar != nil {
280- HandlerVarRef = cbRefPtr287+ HandlerVarPtr := uintptr(unsafe.Pointer(HandlerVar))
281- } else {288+ if cbRefPtr, ok := GetCallback(HandlerVarPtr); ok {
282- fcb := func(arg0 uintptr) bool {289+ HandlerVarRef = cbRefPtr
283- cbFn := *HandlerVar290+ } else {
284- return cbFn(arg0)291+ fcb := func(arg0 uintptr) bool {
292+ cbFn := *HandlerVar
293+ return cbFn(arg0)
294+ }
295+ HandlerVarRef = purego.NewCallback(fcb)
296+ SaveCallback(HandlerVarPtr, HandlerVarRef)
285 }297 }
286- HandlerVarRef = purego.NewCallback(fcb)
287- SaveCallback(HandlerVarPtr, HandlerVarRef)
288 }298 }
289 299
290- NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
291 var NotifyVarRef uintptr300 var NotifyVarRef uintptr
292- if cbRefPtr, ok := GetCallback(NotifyVarPtr); ok {301+ if NotifyVar != nil {
293- NotifyVarRef = cbRefPtr302+ NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
294- } else {303+ if cbRefPtr, ok := GetCallback(NotifyVarPtr); ok {
295- fcb := func(arg0 uintptr) {304+ NotifyVarRef = cbRefPtr
296- cbFn := *NotifyVar305+ } else {
297- cbFn(arg0)306+ fcb := func(arg0 uintptr) {
307+ cbFn := *NotifyVar
308+ cbFn(arg0)
309+ }
310+ NotifyVarRef = purego.NewCallback(fcb)
311+ SaveCallback(NotifyVarPtr, NotifyVarRef)
298 }312 }
299- NotifyVarRef = purego.NewCallback(fcb)
300- SaveCallback(NotifyVarPtr, NotifyVarRef)
301 }313 }
302 314
303 cret := xUnixSignalAddFull(PriorityVar, SignumVar, HandlerVarRef, UserDataVar, NotifyVarRef)315 cret := xUnixSignalAddFull(PriorityVar, SignumVar, HandlerVarRef, UserDataVar, NotifyVarRef)
M v4/glib/gmain.go +187 -153
@@ -279,17 +279,19 @@ var xMainContextInvoke func(uintptr, uintptr, uintptr)
279 // will be continuously run in a loop (and may prevent this call from returning).279 // will be continuously run in a loop (and may prevent this call from returning).
280 func (x *MainContext) Invoke(FunctionVar *SourceFunc, DataVar uintptr) {280 func (x *MainContext) Invoke(FunctionVar *SourceFunc, DataVar uintptr) {
281 281
282- FunctionVarPtr := uintptr(unsafe.Pointer(FunctionVar))
283 var FunctionVarRef uintptr282 var FunctionVarRef uintptr
284- if cbRefPtr, ok := GetCallback(FunctionVarPtr); ok {283+ if FunctionVar != nil {
285- FunctionVarRef = cbRefPtr284+ FunctionVarPtr := uintptr(unsafe.Pointer(FunctionVar))
286- } else {285+ if cbRefPtr, ok := GetCallback(FunctionVarPtr); ok {
287- fcb := func(arg0 uintptr) bool {286+ FunctionVarRef = cbRefPtr
288- cbFn := *FunctionVar287+ } else {
289- return cbFn(arg0)288+ fcb := func(arg0 uintptr) bool {
289+ cbFn := *FunctionVar
290+ return cbFn(arg0)
291+ }
292+ FunctionVarRef = purego.NewCallback(fcb)
293+ SaveCallback(FunctionVarPtr, FunctionVarRef)
290 }294 }
291- FunctionVarRef = purego.NewCallback(fcb)
292- SaveCallback(FunctionVarPtr, FunctionVarRef)
293 }295 }
294 296
295 xMainContextInvoke(x.GoPointer(), FunctionVarRef, DataVar)297 xMainContextInvoke(x.GoPointer(), FunctionVarRef, DataVar)
@@ -310,17 +312,19 @@ var xMainContextInvokeFull func(uintptr, int, uintptr, uintptr, uintptr)
310 // thread or with any particular context acquired.312 // thread or with any particular context acquired.
311 func (x *MainContext) InvokeFull(PriorityVar int, FunctionVar *SourceFunc, DataVar uintptr, NotifyVar *DestroyNotify) {313 func (x *MainContext) InvokeFull(PriorityVar int, FunctionVar *SourceFunc, DataVar uintptr, NotifyVar *DestroyNotify) {
312 314
313- FunctionVarPtr := uintptr(unsafe.Pointer(FunctionVar))
314 var FunctionVarRef uintptr315 var FunctionVarRef uintptr
315- if cbRefPtr, ok := GetCallback(FunctionVarPtr); ok {316+ if FunctionVar != nil {
316- FunctionVarRef = cbRefPtr317+ FunctionVarPtr := uintptr(unsafe.Pointer(FunctionVar))
317- } else {318+ if cbRefPtr, ok := GetCallback(FunctionVarPtr); ok {
318- fcb := func(arg0 uintptr) bool {319+ FunctionVarRef = cbRefPtr
319- cbFn := *FunctionVar320+ } else {
320- return cbFn(arg0)321+ fcb := func(arg0 uintptr) bool {
322+ cbFn := *FunctionVar
323+ return cbFn(arg0)
324+ }
325+ FunctionVarRef = purego.NewCallback(fcb)
326+ SaveCallback(FunctionVarPtr, FunctionVarRef)
321 }327 }
322- FunctionVarRef = purego.NewCallback(fcb)
323- SaveCallback(FunctionVarPtr, FunctionVarRef)
324 }328 }
325 329
326 var NotifyVarRef uintptr330 var NotifyVarRef uintptr
@@ -571,17 +575,19 @@ var xMainContextSetPollFunc func(uintptr, uintptr)
571 // loop with an external event loop.575 // loop with an external event loop.
572 func (x *MainContext) SetPollFunc(FuncVar *PollFunc) {576 func (x *MainContext) SetPollFunc(FuncVar *PollFunc) {
573 577
574- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
575 var FuncVarRef uintptr578 var FuncVarRef uintptr
576- if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {579+ if FuncVar != nil {
577- FuncVarRef = cbRefPtr580+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
578- } else {581+ if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
579- fcb := func(arg0 *PollFD, arg1 uint, arg2 int) int {582+ FuncVarRef = cbRefPtr
580- cbFn := *FuncVar583+ } else {
581- return cbFn(arg0, arg1, arg2)584+ fcb := func(arg0 *PollFD, arg1 uint, arg2 int) int {
585+ cbFn := *FuncVar
586+ return cbFn(arg0, arg1, arg2)
587+ }
588+ FuncVarRef = purego.NewCallback(fcb)
589+ SaveCallback(FuncVarPtr, FuncVarRef)
582 }590 }
583- FuncVarRef = purego.NewCallback(fcb)
584- SaveCallback(FuncVarPtr, FuncVarRef)
585 }591 }
586 592
587 xMainContextSetPollFunc(x.GoPointer(), FuncVarRef)593 xMainContextSetPollFunc(x.GoPointer(), FuncVarRef)
@@ -1250,17 +1256,19 @@ var xSourceSetCallback func(uintptr, uintptr, uintptr, uintptr)
1250 // of also unsetting the callback.1256 // of also unsetting the callback.
1251 func (x *Source) SetCallback(FuncVar *SourceFunc, DataVar uintptr, NotifyVar *DestroyNotify) {1257 func (x *Source) SetCallback(FuncVar *SourceFunc, DataVar uintptr, NotifyVar *DestroyNotify) {
1252 1258
1253- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
1254 var FuncVarRef uintptr1259 var FuncVarRef uintptr
1255- if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {1260+ if FuncVar != nil {
1256- FuncVarRef = cbRefPtr1261+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
1257- } else {1262+ if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
1258- fcb := func(arg0 uintptr) bool {1263+ FuncVarRef = cbRefPtr
1259- cbFn := *FuncVar1264+ } else {
1260- return cbFn(arg0)1265+ fcb := func(arg0 uintptr) bool {
1266+ cbFn := *FuncVar
1267+ return cbFn(arg0)
1268+ }
1269+ FuncVarRef = purego.NewCallback(fcb)
1270+ SaveCallback(FuncVarPtr, FuncVarRef)
1261 }1271 }
1262- FuncVarRef = purego.NewCallback(fcb)
1263- SaveCallback(FuncVarPtr, FuncVarRef)
1264 }1272 }
1265 1273
1266 var NotifyVarRef uintptr1274 var NotifyVarRef uintptr
@@ -1339,17 +1347,19 @@ var xSourceSetDisposeFunction func(uintptr, uintptr)
1339 // This should only ever be called from [struct@GLib.Source] implementations.1347 // This should only ever be called from [struct@GLib.Source] implementations.
1340 func (x *Source) SetDisposeFunction(DisposeVar *SourceDisposeFunc) {1348 func (x *Source) SetDisposeFunction(DisposeVar *SourceDisposeFunc) {
1341 1349
1342- DisposeVarPtr := uintptr(unsafe.Pointer(DisposeVar))
1343 var DisposeVarRef uintptr1350 var DisposeVarRef uintptr
1344- if cbRefPtr, ok := GetCallback(DisposeVarPtr); ok {1351+ if DisposeVar != nil {
1345- DisposeVarRef = cbRefPtr1352+ DisposeVarPtr := uintptr(unsafe.Pointer(DisposeVar))
1346- } else {1353+ if cbRefPtr, ok := GetCallback(DisposeVarPtr); ok {
1347- fcb := func(arg0 *Source) {1354+ DisposeVarRef = cbRefPtr
1348- cbFn := *DisposeVar1355+ } else {
1349- cbFn(arg0)1356+ fcb := func(arg0 *Source) {
1357+ cbFn := *DisposeVar
1358+ cbFn(arg0)
1359+ }
1360+ DisposeVarRef = purego.NewCallback(fcb)
1361+ SaveCallback(DisposeVarPtr, DisposeVarRef)
1350 }1362 }
1351- DisposeVarRef = purego.NewCallback(fcb)
1352- SaveCallback(DisposeVarPtr, DisposeVarRef)
1353 }1363 }
1354 1364
1355 xSourceSetDisposeFunction(x.GoPointer(), DisposeVarRef)1365 xSourceSetDisposeFunction(x.GoPointer(), DisposeVarRef)
@@ -1690,17 +1700,19 @@ var xChildWatchAdd func(Pid, uintptr, uintptr) uint
1690 // need greater control.1700 // need greater control.
1691 func ChildWatchAdd(PidVar Pid, FunctionVar *ChildWatchFunc, DataVar uintptr) uint {1701 func ChildWatchAdd(PidVar Pid, FunctionVar *ChildWatchFunc, DataVar uintptr) uint {
1692 1702
1693- FunctionVarPtr := uintptr(unsafe.Pointer(FunctionVar))
1694 var FunctionVarRef uintptr1703 var FunctionVarRef uintptr
1695- if cbRefPtr, ok := GetCallback(FunctionVarPtr); ok {1704+ if FunctionVar != nil {
1696- FunctionVarRef = cbRefPtr1705+ FunctionVarPtr := uintptr(unsafe.Pointer(FunctionVar))
1697- } else {1706+ if cbRefPtr, ok := GetCallback(FunctionVarPtr); ok {
1698- fcb := func(arg0 Pid, arg1 int, arg2 uintptr) {1707+ FunctionVarRef = cbRefPtr
1699- cbFn := *FunctionVar1708+ } else {
1700- cbFn(arg0, arg1, arg2)1709+ fcb := func(arg0 Pid, arg1 int, arg2 uintptr) {
1710+ cbFn := *FunctionVar
1711+ cbFn(arg0, arg1, arg2)
1712+ }
1713+ FunctionVarRef = purego.NewCallback(fcb)
1714+ SaveCallback(FunctionVarPtr, FunctionVarRef)
1701 }1715 }
1702- FunctionVarRef = purego.NewCallback(fcb)
1703- SaveCallback(FunctionVarPtr, FunctionVarRef)
1704 }1716 }
1705 1717
1706 cret := xChildWatchAdd(PidVar, FunctionVarRef, DataVar)1718 cret := xChildWatchAdd(PidVar, FunctionVarRef, DataVar)
@@ -1736,17 +1748,19 @@ var xChildWatchAddFull func(int, Pid, uintptr, uintptr, uintptr) uint
1736 // need greater control.1748 // need greater control.
1737 func ChildWatchAddFull(PriorityVar int, PidVar Pid, FunctionVar *ChildWatchFunc, DataVar uintptr, NotifyVar *DestroyNotify) uint {1749 func ChildWatchAddFull(PriorityVar int, PidVar Pid, FunctionVar *ChildWatchFunc, DataVar uintptr, NotifyVar *DestroyNotify) uint {
1738 1750
1739- FunctionVarPtr := uintptr(unsafe.Pointer(FunctionVar))
1740 var FunctionVarRef uintptr1751 var FunctionVarRef uintptr
1741- if cbRefPtr, ok := GetCallback(FunctionVarPtr); ok {1752+ if FunctionVar != nil {
1742- FunctionVarRef = cbRefPtr1753+ FunctionVarPtr := uintptr(unsafe.Pointer(FunctionVar))
1743- } else {1754+ if cbRefPtr, ok := GetCallback(FunctionVarPtr); ok {
1744- fcb := func(arg0 Pid, arg1 int, arg2 uintptr) {1755+ FunctionVarRef = cbRefPtr
1745- cbFn := *FunctionVar1756+ } else {
1746- cbFn(arg0, arg1, arg2)1757+ fcb := func(arg0 Pid, arg1 int, arg2 uintptr) {
1758+ cbFn := *FunctionVar
1759+ cbFn(arg0, arg1, arg2)
1760+ }
1761+ FunctionVarRef = purego.NewCallback(fcb)
1762+ SaveCallback(FunctionVarPtr, FunctionVarRef)
1747 }1763 }
1748- FunctionVarRef = purego.NewCallback(fcb)
1749- SaveCallback(FunctionVarPtr, FunctionVarRef)
1750 }1764 }
1751 1765
1752 var NotifyVarRef uintptr1766 var NotifyVarRef uintptr
@@ -1830,17 +1844,19 @@ var xClearHandleId func(uint, uintptr)
1830 // pointer casts.1844 // pointer casts.
1831 func ClearHandleId(TagPtrVar uint, ClearFuncVar *ClearHandleFunc) {1845 func ClearHandleId(TagPtrVar uint, ClearFuncVar *ClearHandleFunc) {
1832 1846
1833- ClearFuncVarPtr := uintptr(unsafe.Pointer(ClearFuncVar))
1834 var ClearFuncVarRef uintptr1847 var ClearFuncVarRef uintptr
1835- if cbRefPtr, ok := GetCallback(ClearFuncVarPtr); ok {1848+ if ClearFuncVar != nil {
1836- ClearFuncVarRef = cbRefPtr1849+ ClearFuncVarPtr := uintptr(unsafe.Pointer(ClearFuncVar))
1837- } else {1850+ if cbRefPtr, ok := GetCallback(ClearFuncVarPtr); ok {
1838- fcb := func(arg0 uint) {1851+ ClearFuncVarRef = cbRefPtr
1839- cbFn := *ClearFuncVar1852+ } else {
1840- cbFn(arg0)1853+ fcb := func(arg0 uint) {
1854+ cbFn := *ClearFuncVar
1855+ cbFn(arg0)
1856+ }
1857+ ClearFuncVarRef = purego.NewCallback(fcb)
1858+ SaveCallback(ClearFuncVarPtr, ClearFuncVarRef)
1841 }1859 }
1842- ClearFuncVarRef = purego.NewCallback(fcb)
1843- SaveCallback(ClearFuncVarPtr, ClearFuncVarRef)
1844 }1860 }
1845 1861
1846 xClearHandleId(TagPtrVar, ClearFuncVarRef)1862 xClearHandleId(TagPtrVar, ClearFuncVarRef)
@@ -1916,17 +1932,19 @@ var xIdleAdd func(uintptr, uintptr) uint
1916 // need greater control or to use a custom main context.1932 // need greater control or to use a custom main context.
1917 func IdleAdd(FunctionVar *SourceFunc, DataVar uintptr) uint {1933 func IdleAdd(FunctionVar *SourceFunc, DataVar uintptr) uint {
1918 1934
1919- FunctionVarPtr := uintptr(unsafe.Pointer(FunctionVar))
1920 var FunctionVarRef uintptr1935 var FunctionVarRef uintptr
1921- if cbRefPtr, ok := GetCallback(FunctionVarPtr); ok {1936+ if FunctionVar != nil {
1922- FunctionVarRef = cbRefPtr1937+ FunctionVarPtr := uintptr(unsafe.Pointer(FunctionVar))
1923- } else {1938+ if cbRefPtr, ok := GetCallback(FunctionVarPtr); ok {
1924- fcb := func(arg0 uintptr) bool {1939+ FunctionVarRef = cbRefPtr
1925- cbFn := *FunctionVar1940+ } else {
1926- return cbFn(arg0)1941+ fcb := func(arg0 uintptr) bool {
1942+ cbFn := *FunctionVar
1943+ return cbFn(arg0)
1944+ }
1945+ FunctionVarRef = purego.NewCallback(fcb)
1946+ SaveCallback(FunctionVarPtr, FunctionVarRef)
1927 }1947 }
1928- FunctionVarRef = purego.NewCallback(fcb)
1929- SaveCallback(FunctionVarPtr, FunctionVarRef)
1930 }1948 }
1931 1949
1932 cret := xIdleAdd(FunctionVarRef, DataVar)1950 cret := xIdleAdd(FunctionVarRef, DataVar)
@@ -1951,17 +1969,19 @@ var xIdleAddFull func(int, uintptr, uintptr, uintptr) uint
1951 // need greater control or to use a custom main context.1969 // need greater control or to use a custom main context.
1952 func IdleAddFull(PriorityVar int, FunctionVar *SourceFunc, DataVar uintptr, NotifyVar *DestroyNotify) uint {1970 func IdleAddFull(PriorityVar int, FunctionVar *SourceFunc, DataVar uintptr, NotifyVar *DestroyNotify) uint {
1953 1971
1954- FunctionVarPtr := uintptr(unsafe.Pointer(FunctionVar))
1955 var FunctionVarRef uintptr1972 var FunctionVarRef uintptr
1956- if cbRefPtr, ok := GetCallback(FunctionVarPtr); ok {1973+ if FunctionVar != nil {
1957- FunctionVarRef = cbRefPtr1974+ FunctionVarPtr := uintptr(unsafe.Pointer(FunctionVar))
1958- } else {1975+ if cbRefPtr, ok := GetCallback(FunctionVarPtr); ok {
1959- fcb := func(arg0 uintptr) bool {1976+ FunctionVarRef = cbRefPtr
1960- cbFn := *FunctionVar1977+ } else {
1961- return cbFn(arg0)1978+ fcb := func(arg0 uintptr) bool {
1979+ cbFn := *FunctionVar
1980+ return cbFn(arg0)
1981+ }
1982+ FunctionVarRef = purego.NewCallback(fcb)
1983+ SaveCallback(FunctionVarPtr, FunctionVarRef)
1962 }1984 }
1963- FunctionVarRef = purego.NewCallback(fcb)
1964- SaveCallback(FunctionVarPtr, FunctionVarRef)
1965 }1985 }
1966 1986
1967 var NotifyVarRef uintptr1987 var NotifyVarRef uintptr
@@ -1997,17 +2017,19 @@ var xIdleAddOnce func(uintptr, uintptr) uint
1997 // This function otherwise behaves like [func@GLib.idle_add].2017 // This function otherwise behaves like [func@GLib.idle_add].
1998 func IdleAddOnce(FunctionVar *SourceOnceFunc, DataVar uintptr) uint {2018 func IdleAddOnce(FunctionVar *SourceOnceFunc, DataVar uintptr) uint {
1999 2019
2000- FunctionVarPtr := uintptr(unsafe.Pointer(FunctionVar))
2001 var FunctionVarRef uintptr2020 var FunctionVarRef uintptr
2002- if cbRefPtr, ok := GetCallback(FunctionVarPtr); ok {2021+ if FunctionVar != nil {
2003- FunctionVarRef = cbRefPtr2022+ FunctionVarPtr := uintptr(unsafe.Pointer(FunctionVar))
2004- } else {2023+ if cbRefPtr, ok := GetCallback(FunctionVarPtr); ok {
2005- fcb := func(arg0 uintptr) {2024+ FunctionVarRef = cbRefPtr
2006- cbFn := *FunctionVar2025+ } else {
2007- cbFn(arg0)2026+ fcb := func(arg0 uintptr) {
2027+ cbFn := *FunctionVar
2028+ cbFn(arg0)
2029+ }
2030+ FunctionVarRef = purego.NewCallback(fcb)
2031+ SaveCallback(FunctionVarPtr, FunctionVarRef)
2008 }2032 }
2009- FunctionVarRef = purego.NewCallback(fcb)
2010- SaveCallback(FunctionVarPtr, FunctionVarRef)
2011 }2033 }
2012 2034
2013 cret := xIdleAddOnce(FunctionVarRef, DataVar)2035 cret := xIdleAddOnce(FunctionVarRef, DataVar)
@@ -2333,17 +2355,19 @@ var xTimeoutAdd func(uint, uintptr, uintptr) uint
2333 // time. See [func@GLib.get_monotonic_time].2355 // time. See [func@GLib.get_monotonic_time].
2334 func TimeoutAdd(IntervalVar uint, FunctionVar *SourceFunc, DataVar uintptr) uint {2356 func TimeoutAdd(IntervalVar uint, FunctionVar *SourceFunc, DataVar uintptr) uint {
2335 2357
2336- FunctionVarPtr := uintptr(unsafe.Pointer(FunctionVar))
2337 var FunctionVarRef uintptr2358 var FunctionVarRef uintptr
2338- if cbRefPtr, ok := GetCallback(FunctionVarPtr); ok {2359+ if FunctionVar != nil {
2339- FunctionVarRef = cbRefPtr2360+ FunctionVarPtr := uintptr(unsafe.Pointer(FunctionVar))
2340- } else {2361+ if cbRefPtr, ok := GetCallback(FunctionVarPtr); ok {
2341- fcb := func(arg0 uintptr) bool {2362+ FunctionVarRef = cbRefPtr
2342- cbFn := *FunctionVar2363+ } else {
2343- return cbFn(arg0)2364+ fcb := func(arg0 uintptr) bool {
2365+ cbFn := *FunctionVar
2366+ return cbFn(arg0)
2367+ }
2368+ FunctionVarRef = purego.NewCallback(fcb)
2369+ SaveCallback(FunctionVarPtr, FunctionVarRef)
2344 }2370 }
2345- FunctionVarRef = purego.NewCallback(fcb)
2346- SaveCallback(FunctionVarPtr, FunctionVarRef)
2347 }2371 }
2348 2372
2349 cret := xTimeoutAdd(IntervalVar, FunctionVarRef, DataVar)2373 cret := xTimeoutAdd(IntervalVar, FunctionVarRef, DataVar)
@@ -2382,17 +2406,19 @@ var xTimeoutAddFull func(int, uint, uintptr, uintptr, uintptr) uint
2382 // See [func@GLib.get_monotonic_time].2406 // See [func@GLib.get_monotonic_time].
2383 func TimeoutAddFull(PriorityVar int, IntervalVar uint, FunctionVar *SourceFunc, DataVar uintptr, NotifyVar *DestroyNotify) uint {2407 func TimeoutAddFull(PriorityVar int, IntervalVar uint, FunctionVar *SourceFunc, DataVar uintptr, NotifyVar *DestroyNotify) uint {
2384 2408
2385- FunctionVarPtr := uintptr(unsafe.Pointer(FunctionVar))
2386 var FunctionVarRef uintptr2409 var FunctionVarRef uintptr
2387- if cbRefPtr, ok := GetCallback(FunctionVarPtr); ok {2410+ if FunctionVar != nil {
2388- FunctionVarRef = cbRefPtr2411+ FunctionVarPtr := uintptr(unsafe.Pointer(FunctionVar))
2389- } else {2412+ if cbRefPtr, ok := GetCallback(FunctionVarPtr); ok {
2390- fcb := func(arg0 uintptr) bool {2413+ FunctionVarRef = cbRefPtr
2391- cbFn := *FunctionVar2414+ } else {
2392- return cbFn(arg0)2415+ fcb := func(arg0 uintptr) bool {
2416+ cbFn := *FunctionVar
2417+ return cbFn(arg0)
2418+ }
2419+ FunctionVarRef = purego.NewCallback(fcb)
2420+ SaveCallback(FunctionVarPtr, FunctionVarRef)
2393 }2421 }
2394- FunctionVarRef = purego.NewCallback(fcb)
2395- SaveCallback(FunctionVarPtr, FunctionVarRef)
2396 }2422 }
2397 2423
2398 var NotifyVarRef uintptr2424 var NotifyVarRef uintptr
@@ -2425,17 +2451,19 @@ var xTimeoutAddOnce func(uint, uintptr, uintptr) uint
2425 // This function otherwise behaves like [func@GLib.timeout_add].2451 // This function otherwise behaves like [func@GLib.timeout_add].
2426 func TimeoutAddOnce(IntervalVar uint, FunctionVar *SourceOnceFunc, DataVar uintptr) uint {2452 func TimeoutAddOnce(IntervalVar uint, FunctionVar *SourceOnceFunc, DataVar uintptr) uint {
2427 2453
2428- FunctionVarPtr := uintptr(unsafe.Pointer(FunctionVar))
2429 var FunctionVarRef uintptr2454 var FunctionVarRef uintptr
2430- if cbRefPtr, ok := GetCallback(FunctionVarPtr); ok {2455+ if FunctionVar != nil {
2431- FunctionVarRef = cbRefPtr2456+ FunctionVarPtr := uintptr(unsafe.Pointer(FunctionVar))
2432- } else {2457+ if cbRefPtr, ok := GetCallback(FunctionVarPtr); ok {
2433- fcb := func(arg0 uintptr) {2458+ FunctionVarRef = cbRefPtr
2434- cbFn := *FunctionVar2459+ } else {
2435- cbFn(arg0)2460+ fcb := func(arg0 uintptr) {
2461+ cbFn := *FunctionVar
2462+ cbFn(arg0)
2463+ }
2464+ FunctionVarRef = purego.NewCallback(fcb)
2465+ SaveCallback(FunctionVarPtr, FunctionVarRef)
2436 }2466 }
2437- FunctionVarRef = purego.NewCallback(fcb)
2438- SaveCallback(FunctionVarPtr, FunctionVarRef)
2439 }2467 }
2440 2468
2441 cret := xTimeoutAddOnce(IntervalVar, FunctionVarRef, DataVar)2469 cret := xTimeoutAddOnce(IntervalVar, FunctionVarRef, DataVar)
@@ -2469,17 +2497,19 @@ var xTimeoutAddSeconds func(uint, uintptr, uintptr) uint
2469 // time. See [func@GLib.get_monotonic_time].2497 // time. See [func@GLib.get_monotonic_time].
2470 func TimeoutAddSeconds(IntervalVar uint, FunctionVar *SourceFunc, DataVar uintptr) uint {2498 func TimeoutAddSeconds(IntervalVar uint, FunctionVar *SourceFunc, DataVar uintptr) uint {
2471 2499
2472- FunctionVarPtr := uintptr(unsafe.Pointer(FunctionVar))
2473 var FunctionVarRef uintptr2500 var FunctionVarRef uintptr
2474- if cbRefPtr, ok := GetCallback(FunctionVarPtr); ok {2501+ if FunctionVar != nil {
2475- FunctionVarRef = cbRefPtr2502+ FunctionVarPtr := uintptr(unsafe.Pointer(FunctionVar))
2476- } else {2503+ if cbRefPtr, ok := GetCallback(FunctionVarPtr); ok {
2477- fcb := func(arg0 uintptr) bool {2504+ FunctionVarRef = cbRefPtr
2478- cbFn := *FunctionVar2505+ } else {
2479- return cbFn(arg0)2506+ fcb := func(arg0 uintptr) bool {
2507+ cbFn := *FunctionVar
2508+ return cbFn(arg0)
2509+ }
2510+ FunctionVarRef = purego.NewCallback(fcb)
2511+ SaveCallback(FunctionVarPtr, FunctionVarRef)
2480 }2512 }
2481- FunctionVarRef = purego.NewCallback(fcb)
2482- SaveCallback(FunctionVarPtr, FunctionVarRef)
2483 }2513 }
2484 2514
2485 cret := xTimeoutAddSeconds(IntervalVar, FunctionVarRef, DataVar)2515 cret := xTimeoutAddSeconds(IntervalVar, FunctionVarRef, DataVar)
@@ -2530,17 +2560,19 @@ var xTimeoutAddSecondsFull func(int, uint, uintptr, uintptr, uintptr) uint
2530 // time. See [func@GLib.get_monotonic_time].2560 // time. See [func@GLib.get_monotonic_time].
2531 func TimeoutAddSecondsFull(PriorityVar int, IntervalVar uint, FunctionVar *SourceFunc, DataVar uintptr, NotifyVar *DestroyNotify) uint {2561 func TimeoutAddSecondsFull(PriorityVar int, IntervalVar uint, FunctionVar *SourceFunc, DataVar uintptr, NotifyVar *DestroyNotify) uint {
2532 2562
2533- FunctionVarPtr := uintptr(unsafe.Pointer(FunctionVar))
2534 var FunctionVarRef uintptr2563 var FunctionVarRef uintptr
2535- if cbRefPtr, ok := GetCallback(FunctionVarPtr); ok {2564+ if FunctionVar != nil {
2536- FunctionVarRef = cbRefPtr2565+ FunctionVarPtr := uintptr(unsafe.Pointer(FunctionVar))
2537- } else {2566+ if cbRefPtr, ok := GetCallback(FunctionVarPtr); ok {
2538- fcb := func(arg0 uintptr) bool {2567+ FunctionVarRef = cbRefPtr
2539- cbFn := *FunctionVar2568+ } else {
2540- return cbFn(arg0)2569+ fcb := func(arg0 uintptr) bool {
2570+ cbFn := *FunctionVar
2571+ return cbFn(arg0)
2572+ }
2573+ FunctionVarRef = purego.NewCallback(fcb)
2574+ SaveCallback(FunctionVarPtr, FunctionVarRef)
2541 }2575 }
2542- FunctionVarRef = purego.NewCallback(fcb)
2543- SaveCallback(FunctionVarPtr, FunctionVarRef)
2544 }2576 }
2545 2577
2546 var NotifyVarRef uintptr2578 var NotifyVarRef uintptr
@@ -2568,17 +2600,19 @@ var xTimeoutAddSecondsOnce func(uint, uintptr, uintptr) uint
2568 // seconds.2600 // seconds.
2569 func TimeoutAddSecondsOnce(IntervalVar uint, FunctionVar *SourceOnceFunc, DataVar uintptr) uint {2601 func TimeoutAddSecondsOnce(IntervalVar uint, FunctionVar *SourceOnceFunc, DataVar uintptr) uint {
2570 2602
2571- FunctionVarPtr := uintptr(unsafe.Pointer(FunctionVar))
2572 var FunctionVarRef uintptr2603 var FunctionVarRef uintptr
2573- if cbRefPtr, ok := GetCallback(FunctionVarPtr); ok {2604+ if FunctionVar != nil {
2574- FunctionVarRef = cbRefPtr2605+ FunctionVarPtr := uintptr(unsafe.Pointer(FunctionVar))
2575- } else {2606+ if cbRefPtr, ok := GetCallback(FunctionVarPtr); ok {
2576- fcb := func(arg0 uintptr) {2607+ FunctionVarRef = cbRefPtr
2577- cbFn := *FunctionVar2608+ } else {
2578- cbFn(arg0)2609+ fcb := func(arg0 uintptr) {
2610+ cbFn := *FunctionVar
2611+ cbFn(arg0)
2612+ }
2613+ FunctionVarRef = purego.NewCallback(fcb)
2614+ SaveCallback(FunctionVarPtr, FunctionVarRef)
2579 }2615 }
2580- FunctionVarRef = purego.NewCallback(fcb)
2581- SaveCallback(FunctionVarPtr, FunctionVarRef)
2582 }2616 }
2583 2617
2584 cret := xTimeoutAddSecondsOnce(IntervalVar, FunctionVarRef, DataVar)2618 cret := xTimeoutAddSecondsOnce(IntervalVar, FunctionVarRef, DataVar)
M v4/glib/gmarkup.go +11 -9
@@ -38,17 +38,19 @@ var xNewMarkupParseContext func(*MarkupParser, MarkupParseFlags, uintptr, uintpt
38 // free it and create a new parse context).38 // free it and create a new parse context).
39 func NewMarkupParseContext(ParserVar *MarkupParser, FlagsVar MarkupParseFlags, UserDataVar uintptr, UserDataDnotifyVar *DestroyNotify) *MarkupParseContext {39 func NewMarkupParseContext(ParserVar *MarkupParser, FlagsVar MarkupParseFlags, UserDataVar uintptr, UserDataDnotifyVar *DestroyNotify) *MarkupParseContext {
40 40
41- UserDataDnotifyVarPtr := uintptr(unsafe.Pointer(UserDataDnotifyVar))
42 var UserDataDnotifyVarRef uintptr41 var UserDataDnotifyVarRef uintptr
43- if cbRefPtr, ok := GetCallback(UserDataDnotifyVarPtr); ok {42+ if UserDataDnotifyVar != nil {
44- UserDataDnotifyVarRef = cbRefPtr43+ UserDataDnotifyVarPtr := uintptr(unsafe.Pointer(UserDataDnotifyVar))
45- } else {44+ if cbRefPtr, ok := GetCallback(UserDataDnotifyVarPtr); ok {
46- fcb := func(arg0 uintptr) {45+ UserDataDnotifyVarRef = cbRefPtr
47- cbFn := *UserDataDnotifyVar46+ } else {
48- cbFn(arg0)47+ fcb := func(arg0 uintptr) {
48+ cbFn := *UserDataDnotifyVar
49+ cbFn(arg0)
50+ }
51+ UserDataDnotifyVarRef = purego.NewCallback(fcb)
52+ SaveCallback(UserDataDnotifyVarPtr, UserDataDnotifyVarRef)
49 }53 }
50- UserDataDnotifyVarRef = purego.NewCallback(fcb)
51- SaveCallback(UserDataDnotifyVarPtr, UserDataDnotifyVarRef)
52 }54 }
53 55
54 cret := xNewMarkupParseContext(ParserVar, FlagsVar, UserDataVar, UserDataDnotifyVarRef)56 cret := xNewMarkupParseContext(ParserVar, FlagsVar, UserDataVar, UserDataDnotifyVarRef)
M v4/glib/gmem.go +11 -9
@@ -279,17 +279,19 @@ var xClearPointer func(uintptr, uintptr)
279 // ```279 // ```
280 func ClearPointer(PpVar uintptr, DestroyVar *DestroyNotify) {280 func ClearPointer(PpVar uintptr, DestroyVar *DestroyNotify) {
281 281
282- DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
283 var DestroyVarRef uintptr282 var DestroyVarRef uintptr
284- if cbRefPtr, ok := GetCallback(DestroyVarPtr); ok {283+ if DestroyVar != nil {
285- DestroyVarRef = cbRefPtr284+ DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
286- } else {285+ if cbRefPtr, ok := GetCallback(DestroyVarPtr); ok {
287- fcb := func(arg0 uintptr) {286+ DestroyVarRef = cbRefPtr
288- cbFn := *DestroyVar287+ } else {
289- cbFn(arg0)288+ fcb := func(arg0 uintptr) {
289+ cbFn := *DestroyVar
290+ cbFn(arg0)
291+ }
292+ DestroyVarRef = purego.NewCallback(fcb)
293+ SaveCallback(DestroyVarPtr, DestroyVarRef)
290 }294 }
291- DestroyVarRef = purego.NewCallback(fcb)
292- SaveCallback(DestroyVarPtr, DestroyVarRef)
293 }295 }
294 296
295 xClearPointer(PpVar, DestroyVarRef)297 xClearPointer(PpVar, DestroyVarRef)
M v4/glib/gmessages.go +66 -54
@@ -339,17 +339,19 @@ var xLogSetDefaultHandler func(uintptr, uintptr) uintptr
339 // [Using Structured Logging](logging.html#using-structured-logging).339 // [Using Structured Logging](logging.html#using-structured-logging).
340 func LogSetDefaultHandler(LogFuncVar *LogFunc, UserDataVar uintptr) uintptr {340 func LogSetDefaultHandler(LogFuncVar *LogFunc, UserDataVar uintptr) uintptr {
341 341
342- LogFuncVarPtr := uintptr(unsafe.Pointer(LogFuncVar))
343 var LogFuncVarRef uintptr342 var LogFuncVarRef uintptr
344- if cbRefPtr, ok := GetCallback(LogFuncVarPtr); ok {343+ if LogFuncVar != nil {
345- LogFuncVarRef = cbRefPtr344+ LogFuncVarPtr := uintptr(unsafe.Pointer(LogFuncVar))
346- } else {345+ if cbRefPtr, ok := GetCallback(LogFuncVarPtr); ok {
347- fcb := func(arg0 string, arg1 LogLevelFlags, arg2 string, arg3 uintptr) {346+ LogFuncVarRef = cbRefPtr
348- cbFn := *LogFuncVar347+ } else {
349- cbFn(arg0, arg1, arg2, arg3)348+ fcb := func(arg0 string, arg1 LogLevelFlags, arg2 string, arg3 uintptr) {
349+ cbFn := *LogFuncVar
350+ cbFn(arg0, arg1, arg2, arg3)
351+ }
352+ LogFuncVarRef = purego.NewCallback(fcb)
353+ SaveCallback(LogFuncVarPtr, LogFuncVarRef)
350 }354 }
351- LogFuncVarRef = purego.NewCallback(fcb)
352- SaveCallback(LogFuncVarPtr, LogFuncVarRef)
353 }355 }
354 356
355 cret := xLogSetDefaultHandler(LogFuncVarRef, UserDataVar)357 cret := xLogSetDefaultHandler(LogFuncVarRef, UserDataVar)
@@ -425,17 +427,19 @@ var xLogSetHandler func(string, LogLevelFlags, uintptr, uintptr) uint
425 // ```427 // ```
426 func LogSetHandler(LogDomainVar string, LogLevelsVar LogLevelFlags, LogFuncVar *LogFunc, UserDataVar uintptr) uint {428 func LogSetHandler(LogDomainVar string, LogLevelsVar LogLevelFlags, LogFuncVar *LogFunc, UserDataVar uintptr) uint {
427 429
428- LogFuncVarPtr := uintptr(unsafe.Pointer(LogFuncVar))
429 var LogFuncVarRef uintptr430 var LogFuncVarRef uintptr
430- if cbRefPtr, ok := GetCallback(LogFuncVarPtr); ok {431+ if LogFuncVar != nil {
431- LogFuncVarRef = cbRefPtr432+ LogFuncVarPtr := uintptr(unsafe.Pointer(LogFuncVar))
432- } else {433+ if cbRefPtr, ok := GetCallback(LogFuncVarPtr); ok {
433- fcb := func(arg0 string, arg1 LogLevelFlags, arg2 string, arg3 uintptr) {434+ LogFuncVarRef = cbRefPtr
434- cbFn := *LogFuncVar435+ } else {
435- cbFn(arg0, arg1, arg2, arg3)436+ fcb := func(arg0 string, arg1 LogLevelFlags, arg2 string, arg3 uintptr) {
437+ cbFn := *LogFuncVar
438+ cbFn(arg0, arg1, arg2, arg3)
439+ }
440+ LogFuncVarRef = purego.NewCallback(fcb)
441+ SaveCallback(LogFuncVarPtr, LogFuncVarRef)
436 }442 }
437- LogFuncVarRef = purego.NewCallback(fcb)
438- SaveCallback(LogFuncVarPtr, LogFuncVarRef)
439 }443 }
440 444
441 cret := xLogSetHandler(LogDomainVar, LogLevelsVar, LogFuncVarRef, UserDataVar)445 cret := xLogSetHandler(LogDomainVar, LogLevelsVar, LogFuncVarRef, UserDataVar)
@@ -453,30 +457,34 @@ var xLogSetHandlerFull func(string, LogLevelFlags, uintptr, uintptr, uintptr) ui
453 // application domain.457 // application domain.
454 func LogSetHandlerFull(LogDomainVar string, LogLevelsVar LogLevelFlags, LogFuncVar *LogFunc, UserDataVar uintptr, DestroyVar *DestroyNotify) uint {458 func LogSetHandlerFull(LogDomainVar string, LogLevelsVar LogLevelFlags, LogFuncVar *LogFunc, UserDataVar uintptr, DestroyVar *DestroyNotify) uint {
455 459
456- LogFuncVarPtr := uintptr(unsafe.Pointer(LogFuncVar))
457 var LogFuncVarRef uintptr460 var LogFuncVarRef uintptr
458- if cbRefPtr, ok := GetCallback(LogFuncVarPtr); ok {461+ if LogFuncVar != nil {
459- LogFuncVarRef = cbRefPtr462+ LogFuncVarPtr := uintptr(unsafe.Pointer(LogFuncVar))
460- } else {463+ if cbRefPtr, ok := GetCallback(LogFuncVarPtr); ok {
461- fcb := func(arg0 string, arg1 LogLevelFlags, arg2 string, arg3 uintptr) {464+ LogFuncVarRef = cbRefPtr
462- cbFn := *LogFuncVar465+ } else {
463- cbFn(arg0, arg1, arg2, arg3)466+ fcb := func(arg0 string, arg1 LogLevelFlags, arg2 string, arg3 uintptr) {
467+ cbFn := *LogFuncVar
468+ cbFn(arg0, arg1, arg2, arg3)
469+ }
470+ LogFuncVarRef = purego.NewCallback(fcb)
471+ SaveCallback(LogFuncVarPtr, LogFuncVarRef)
464 }472 }
465- LogFuncVarRef = purego.NewCallback(fcb)
466- SaveCallback(LogFuncVarPtr, LogFuncVarRef)
467 }473 }
468 474
469- DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
470 var DestroyVarRef uintptr475 var DestroyVarRef uintptr
471- if cbRefPtr, ok := GetCallback(DestroyVarPtr); ok {476+ if DestroyVar != nil {
472- DestroyVarRef = cbRefPtr477+ DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
473- } else {478+ if cbRefPtr, ok := GetCallback(DestroyVarPtr); ok {
474- fcb := func(arg0 uintptr) {479+ DestroyVarRef = cbRefPtr
475- cbFn := *DestroyVar480+ } else {
476- cbFn(arg0)481+ fcb := func(arg0 uintptr) {
482+ cbFn := *DestroyVar
483+ cbFn(arg0)
484+ }
485+ DestroyVarRef = purego.NewCallback(fcb)
486+ SaveCallback(DestroyVarPtr, DestroyVarRef)
477 }487 }
478- DestroyVarRef = purego.NewCallback(fcb)
479- SaveCallback(DestroyVarPtr, DestroyVarRef)
480 }488 }
481 489
482 cret := xLogSetHandlerFull(LogDomainVar, LogLevelsVar, LogFuncVarRef, UserDataVar, DestroyVarRef)490 cret := xLogSetHandlerFull(LogDomainVar, LogLevelsVar, LogFuncVarRef, UserDataVar, DestroyVarRef)
@@ -498,30 +506,34 @@ var xLogSetWriterFunc func(uintptr, uintptr, uintptr)
498 // There can only be one writer function. It is an error to set more than one.506 // There can only be one writer function. It is an error to set more than one.
499 func LogSetWriterFunc(FuncVar *LogWriterFunc, UserDataVar uintptr, UserDataFreeVar *DestroyNotify) {507 func LogSetWriterFunc(FuncVar *LogWriterFunc, UserDataVar uintptr, UserDataFreeVar *DestroyNotify) {
500 508
501- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
502 var FuncVarRef uintptr509 var FuncVarRef uintptr
503- if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {510+ if FuncVar != nil {
504- FuncVarRef = cbRefPtr511+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
505- } else {512+ if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
506- fcb := func(arg0 LogLevelFlags, arg1 []LogField, arg2 uint, arg3 uintptr) LogWriterOutput {513+ FuncVarRef = cbRefPtr
507- cbFn := *FuncVar514+ } else {
508- return cbFn(arg0, arg1, arg2, arg3)515+ fcb := func(arg0 LogLevelFlags, arg1 []LogField, arg2 uint, arg3 uintptr) LogWriterOutput {
516+ cbFn := *FuncVar
517+ return cbFn(arg0, arg1, arg2, arg3)
518+ }
519+ FuncVarRef = purego.NewCallback(fcb)
520+ SaveCallback(FuncVarPtr, FuncVarRef)
509 }521 }
510- FuncVarRef = purego.NewCallback(fcb)
511- SaveCallback(FuncVarPtr, FuncVarRef)
512 }522 }
513 523
514- UserDataFreeVarPtr := uintptr(unsafe.Pointer(UserDataFreeVar))
515 var UserDataFreeVarRef uintptr524 var UserDataFreeVarRef uintptr
516- if cbRefPtr, ok := GetCallback(UserDataFreeVarPtr); ok {525+ if UserDataFreeVar != nil {
517- UserDataFreeVarRef = cbRefPtr526+ UserDataFreeVarPtr := uintptr(unsafe.Pointer(UserDataFreeVar))
518- } else {527+ if cbRefPtr, ok := GetCallback(UserDataFreeVarPtr); ok {
519- fcb := func(arg0 uintptr) {528+ UserDataFreeVarRef = cbRefPtr
520- cbFn := *UserDataFreeVar529+ } else {
521- cbFn(arg0)530+ fcb := func(arg0 uintptr) {
531+ cbFn := *UserDataFreeVar
532+ cbFn(arg0)
533+ }
534+ UserDataFreeVarRef = purego.NewCallback(fcb)
535+ SaveCallback(UserDataFreeVarPtr, UserDataFreeVarRef)
522 }536 }
523- UserDataFreeVarRef = purego.NewCallback(fcb)
524- SaveCallback(UserDataFreeVarPtr, UserDataFreeVarRef)
525 }537 }
526 538
527 xLogSetWriterFunc(FuncVarRef, UserDataVar, UserDataFreeVarRef)539 xLogSetWriterFunc(FuncVarRef, UserDataVar, UserDataFreeVarRef)
M v4/glib/gnode.go +33 -27
@@ -67,17 +67,19 @@ var xNodeChildrenForeach func(uintptr, TraverseFlags, uintptr, uintptr)
67 // that would modify the structure of the tree.67 // that would modify the structure of the tree.
68 func (x *Node) ChildrenForeach(FlagsVar TraverseFlags, FuncVar *NodeForeachFunc, DataVar uintptr) {68 func (x *Node) ChildrenForeach(FlagsVar TraverseFlags, FuncVar *NodeForeachFunc, DataVar uintptr) {
69 69
70- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
71 var FuncVarRef uintptr70 var FuncVarRef uintptr
72- if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {71+ if FuncVar != nil {
73- FuncVarRef = cbRefPtr72+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
74- } else {73+ if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
75- fcb := func(arg0 *Node, arg1 uintptr) {74+ FuncVarRef = cbRefPtr
76- cbFn := *FuncVar75+ } else {
77- cbFn(arg0, arg1)76+ fcb := func(arg0 *Node, arg1 uintptr) {
77+ cbFn := *FuncVar
78+ cbFn(arg0, arg1)
79+ }
80+ FuncVarRef = purego.NewCallback(fcb)
81+ SaveCallback(FuncVarPtr, FuncVarRef)
78 }82 }
79- FuncVarRef = purego.NewCallback(fcb)
80- SaveCallback(FuncVarPtr, FuncVarRef)
81 }83 }
82 84
83 xNodeChildrenForeach(x.GoPointer(), FlagsVar, FuncVarRef, DataVar)85 xNodeChildrenForeach(x.GoPointer(), FlagsVar, FuncVarRef, DataVar)
@@ -99,17 +101,19 @@ var xNodeCopyDeep func(uintptr, uintptr, uintptr) *Node
99 // Recursively copies a #GNode and its data.101 // Recursively copies a #GNode and its data.
100 func (x *Node) CopyDeep(CopyFuncVar *CopyFunc, DataVar uintptr) *Node {102 func (x *Node) CopyDeep(CopyFuncVar *CopyFunc, DataVar uintptr) *Node {
101 103
102- CopyFuncVarPtr := uintptr(unsafe.Pointer(CopyFuncVar))
103 var CopyFuncVarRef uintptr104 var CopyFuncVarRef uintptr
104- if cbRefPtr, ok := GetCallback(CopyFuncVarPtr); ok {105+ if CopyFuncVar != nil {
105- CopyFuncVarRef = cbRefPtr106+ CopyFuncVarPtr := uintptr(unsafe.Pointer(CopyFuncVar))
106- } else {107+ if cbRefPtr, ok := GetCallback(CopyFuncVarPtr); ok {
107- fcb := func(arg0 uintptr, arg1 uintptr) uintptr {108+ CopyFuncVarRef = cbRefPtr
108- cbFn := *CopyFuncVar109+ } else {
109- return cbFn(arg0, arg1)110+ fcb := func(arg0 uintptr, arg1 uintptr) uintptr {
111+ cbFn := *CopyFuncVar
112+ return cbFn(arg0, arg1)
113+ }
114+ CopyFuncVarRef = purego.NewCallback(fcb)
115+ SaveCallback(CopyFuncVarPtr, CopyFuncVarRef)
110 }116 }
111- CopyFuncVarRef = purego.NewCallback(fcb)
112- SaveCallback(CopyFuncVarPtr, CopyFuncVarRef)
113 }117 }
114 118
115 cret := xNodeCopyDeep(x.GoPointer(), CopyFuncVarRef, DataVar)119 cret := xNodeCopyDeep(x.GoPointer(), CopyFuncVarRef, DataVar)
@@ -301,17 +305,19 @@ var xNodeTraverse func(uintptr, TraverseType, TraverseFlags, int, uintptr, uintp
301 // @func must not do anything that would modify the structure of the tree.305 // @func must not do anything that would modify the structure of the tree.
302 func (x *Node) Traverse(OrderVar TraverseType, FlagsVar TraverseFlags, MaxDepthVar int, FuncVar *NodeTraverseFunc, DataVar uintptr) {306 func (x *Node) Traverse(OrderVar TraverseType, FlagsVar TraverseFlags, MaxDepthVar int, FuncVar *NodeTraverseFunc, DataVar uintptr) {
303 307
304- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
305 var FuncVarRef uintptr308 var FuncVarRef uintptr
306- if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {309+ if FuncVar != nil {
307- FuncVarRef = cbRefPtr310+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
308- } else {311+ if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
309- fcb := func(arg0 *Node, arg1 uintptr) bool {312+ FuncVarRef = cbRefPtr
310- cbFn := *FuncVar313+ } else {
311- return cbFn(arg0, arg1)314+ fcb := func(arg0 *Node, arg1 uintptr) bool {
315+ cbFn := *FuncVar
316+ return cbFn(arg0, arg1)
317+ }
318+ FuncVarRef = purego.NewCallback(fcb)
319+ SaveCallback(FuncVarPtr, FuncVarRef)
312 }320 }
313- FuncVarRef = purego.NewCallback(fcb)
314- SaveCallback(FuncVarPtr, FuncVarRef)
315 }321 }
316 322
317 xNodeTraverse(x.GoPointer(), OrderVar, FlagsVar, MaxDepthVar, FuncVarRef, DataVar)323 xNodeTraverse(x.GoPointer(), OrderVar, FlagsVar, MaxDepthVar, FuncVarRef, DataVar)
M v4/glib/goption.go +11 -9
@@ -490,17 +490,19 @@ var xOptionGroupSetErrorHook func(uintptr, uintptr)
490 // specified when constructing the group with g_option_group_new().490 // specified when constructing the group with g_option_group_new().
491 func (x *OptionGroup) SetErrorHook(ErrorFuncVar *OptionErrorFunc) {491 func (x *OptionGroup) SetErrorHook(ErrorFuncVar *OptionErrorFunc) {
492 492
493- ErrorFuncVarPtr := uintptr(unsafe.Pointer(ErrorFuncVar))
494 var ErrorFuncVarRef uintptr493 var ErrorFuncVarRef uintptr
495- if cbRefPtr, ok := GetCallback(ErrorFuncVarPtr); ok {494+ if ErrorFuncVar != nil {
496- ErrorFuncVarRef = cbRefPtr495+ ErrorFuncVarPtr := uintptr(unsafe.Pointer(ErrorFuncVar))
497- } else {496+ if cbRefPtr, ok := GetCallback(ErrorFuncVarPtr); ok {
498- fcb := func(arg0 *OptionContext, arg1 *OptionGroup, arg2 uintptr, arg3 **Error) {497+ ErrorFuncVarRef = cbRefPtr
499- cbFn := *ErrorFuncVar498+ } else {
500- cbFn(arg0, arg1, arg2, arg3)499+ fcb := func(arg0 *OptionContext, arg1 *OptionGroup, arg2 uintptr, arg3 **Error) {
500+ cbFn := *ErrorFuncVar
501+ cbFn(arg0, arg1, arg2, arg3)
502+ }
503+ ErrorFuncVarRef = purego.NewCallback(fcb)
504+ SaveCallback(ErrorFuncVarPtr, ErrorFuncVarRef)
501 }505 }
502- ErrorFuncVarRef = purego.NewCallback(fcb)
503- SaveCallback(ErrorFuncVarPtr, ErrorFuncVarRef)
504 }506 }
505 507
506 xOptionGroupSetErrorHook(x.GoPointer(), ErrorFuncVarRef)508 xOptionGroupSetErrorHook(x.GoPointer(), ErrorFuncVarRef)
M v4/glib/gqsort.go +22 -18
@@ -17,17 +17,19 @@ var xQsortWithData func(uintptr, int, uint, uintptr, uintptr)
17 // Unlike `qsort()`, this is guaranteed to be a stable sort (since GLib 2.32).17 // Unlike `qsort()`, this is guaranteed to be a stable sort (since GLib 2.32).
18 func QsortWithData(PbaseVar uintptr, TotalElemsVar int, SizeVar uint, CompareFuncVar *CompareDataFunc, UserDataVar uintptr) {18 func QsortWithData(PbaseVar uintptr, TotalElemsVar int, SizeVar uint, CompareFuncVar *CompareDataFunc, UserDataVar uintptr) {
19 19
20- CompareFuncVarPtr := uintptr(unsafe.Pointer(CompareFuncVar))
21 var CompareFuncVarRef uintptr20 var CompareFuncVarRef uintptr
22- if cbRefPtr, ok := GetCallback(CompareFuncVarPtr); ok {21+ if CompareFuncVar != nil {
23- CompareFuncVarRef = cbRefPtr22+ CompareFuncVarPtr := uintptr(unsafe.Pointer(CompareFuncVar))
24- } else {23+ if cbRefPtr, ok := GetCallback(CompareFuncVarPtr); ok {
25- fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int {24+ CompareFuncVarRef = cbRefPtr
26- cbFn := *CompareFuncVar25+ } else {
27- return cbFn(arg0, arg1, arg2)26+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int {
27+ cbFn := *CompareFuncVar
28+ return cbFn(arg0, arg1, arg2)
29+ }
30+ CompareFuncVarRef = purego.NewCallback(fcb)
31+ SaveCallback(CompareFuncVarPtr, CompareFuncVarRef)
28 }32 }
29- CompareFuncVarRef = purego.NewCallback(fcb)
30- SaveCallback(CompareFuncVarPtr, CompareFuncVarRef)
31 }33 }
32 34
33 xQsortWithData(PbaseVar, TotalElemsVar, SizeVar, CompareFuncVarRef, UserDataVar)35 xQsortWithData(PbaseVar, TotalElemsVar, SizeVar, CompareFuncVarRef, UserDataVar)
@@ -43,17 +45,19 @@ var xSortArray func([]uintptr, uint, uint, uintptr, uintptr)
43 // Unlike `qsort()`, this is guaranteed to be a stable sort.45 // Unlike `qsort()`, this is guaranteed to be a stable sort.
44 func SortArray(ArrayVar []uintptr, NElementsVar uint, ElementSizeVar uint, CompareFuncVar *CompareDataFunc, UserDataVar uintptr) {46 func SortArray(ArrayVar []uintptr, NElementsVar uint, ElementSizeVar uint, CompareFuncVar *CompareDataFunc, UserDataVar uintptr) {
45 47
46- CompareFuncVarPtr := uintptr(unsafe.Pointer(CompareFuncVar))
47 var CompareFuncVarRef uintptr48 var CompareFuncVarRef uintptr
48- if cbRefPtr, ok := GetCallback(CompareFuncVarPtr); ok {49+ if CompareFuncVar != nil {
49- CompareFuncVarRef = cbRefPtr50+ CompareFuncVarPtr := uintptr(unsafe.Pointer(CompareFuncVar))
50- } else {51+ if cbRefPtr, ok := GetCallback(CompareFuncVarPtr); ok {
51- fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int {52+ CompareFuncVarRef = cbRefPtr
52- cbFn := *CompareFuncVar53+ } else {
53- return cbFn(arg0, arg1, arg2)54+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int {
55+ cbFn := *CompareFuncVar
56+ return cbFn(arg0, arg1, arg2)
57+ }
58+ CompareFuncVarRef = purego.NewCallback(fcb)
59+ SaveCallback(CompareFuncVarPtr, CompareFuncVarRef)
54 }60 }
55- CompareFuncVarRef = purego.NewCallback(fcb)
56- SaveCallback(CompareFuncVarPtr, CompareFuncVarRef)
57 }61 }
58 62
59 xSortArray(ArrayVar, NElementsVar, ElementSizeVar, CompareFuncVarRef, UserDataVar)63 xSortArray(ArrayVar, NElementsVar, ElementSizeVar, CompareFuncVarRef, UserDataVar)
M v4/glib/gqueue.go +55 -45
@@ -100,17 +100,19 @@ var xQueueFindCustom func(uintptr, uintptr, uintptr) *List
100 // first argument and the given user data as the second argument.100 // first argument and the given user data as the second argument.
101 func (x *Queue) FindCustom(DataVar uintptr, FuncVar *CompareFunc) *List {101 func (x *Queue) FindCustom(DataVar uintptr, FuncVar *CompareFunc) *List {
102 102
103- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
104 var FuncVarRef uintptr103 var FuncVarRef uintptr
105- if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {104+ if FuncVar != nil {
106- FuncVarRef = cbRefPtr105+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
107- } else {106+ if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
108- fcb := func(arg0 uintptr, arg1 uintptr) int {107+ FuncVarRef = cbRefPtr
109- cbFn := *FuncVar108+ } else {
110- return cbFn(arg0, arg1)109+ fcb := func(arg0 uintptr, arg1 uintptr) int {
110+ cbFn := *FuncVar
111+ return cbFn(arg0, arg1)
112+ }
113+ FuncVarRef = purego.NewCallback(fcb)
114+ SaveCallback(FuncVarPtr, FuncVarRef)
111 }115 }
112- FuncVarRef = purego.NewCallback(fcb)
113- SaveCallback(FuncVarPtr, FuncVarRef)
114 }116 }
115 117
116 cret := xQueueFindCustom(x.GoPointer(), DataVar, FuncVarRef)118 cret := xQueueFindCustom(x.GoPointer(), DataVar, FuncVarRef)
@@ -126,17 +128,19 @@ var xQueueForeach func(uintptr, uintptr, uintptr)
126 // not modify any part of the queue after that element.128 // not modify any part of the queue after that element.
127 func (x *Queue) Foreach(FuncVar *Func, UserDataVar uintptr) {129 func (x *Queue) Foreach(FuncVar *Func, UserDataVar uintptr) {
128 130
129- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
130 var FuncVarRef uintptr131 var FuncVarRef uintptr
131- if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {132+ if FuncVar != nil {
132- FuncVarRef = cbRefPtr133+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
133- } else {134+ if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
134- fcb := func(arg0 uintptr, arg1 uintptr) {135+ FuncVarRef = cbRefPtr
135- cbFn := *FuncVar136+ } else {
136- cbFn(arg0, arg1)137+ fcb := func(arg0 uintptr, arg1 uintptr) {
138+ cbFn := *FuncVar
139+ cbFn(arg0, arg1)
140+ }
141+ FuncVarRef = purego.NewCallback(fcb)
142+ SaveCallback(FuncVarPtr, FuncVarRef)
137 }143 }
138- FuncVarRef = purego.NewCallback(fcb)
139- SaveCallback(FuncVarPtr, FuncVarRef)
140 }144 }
141 145
142 xQueueForeach(x.GoPointer(), FuncVarRef, UserDataVar)146 xQueueForeach(x.GoPointer(), FuncVarRef, UserDataVar)
@@ -166,17 +170,19 @@ var xQueueFreeFull func(uintptr, uintptr)
166 // element from it).170 // element from it).
167 func (x *Queue) FreeFull(FreeFuncVar *DestroyNotify) {171 func (x *Queue) FreeFull(FreeFuncVar *DestroyNotify) {
168 172
169- FreeFuncVarPtr := uintptr(unsafe.Pointer(FreeFuncVar))
170 var FreeFuncVarRef uintptr173 var FreeFuncVarRef uintptr
171- if cbRefPtr, ok := GetCallback(FreeFuncVarPtr); ok {174+ if FreeFuncVar != nil {
172- FreeFuncVarRef = cbRefPtr175+ FreeFuncVarPtr := uintptr(unsafe.Pointer(FreeFuncVar))
173- } else {176+ if cbRefPtr, ok := GetCallback(FreeFuncVarPtr); ok {
174- fcb := func(arg0 uintptr) {177+ FreeFuncVarRef = cbRefPtr
175- cbFn := *FreeFuncVar178+ } else {
176- cbFn(arg0)179+ fcb := func(arg0 uintptr) {
180+ cbFn := *FreeFuncVar
181+ cbFn(arg0)
182+ }
183+ FreeFuncVarRef = purego.NewCallback(fcb)
184+ SaveCallback(FreeFuncVarPtr, FreeFuncVarRef)
177 }185 }
178- FreeFuncVarRef = purego.NewCallback(fcb)
179- SaveCallback(FreeFuncVarPtr, FreeFuncVarRef)
180 }186 }
181 187
182 xQueueFreeFull(x.GoPointer(), FreeFuncVarRef)188 xQueueFreeFull(x.GoPointer(), FreeFuncVarRef)
@@ -264,17 +270,19 @@ var xQueueInsertSorted func(uintptr, uintptr, uintptr, uintptr)
264 // Inserts @data into @queue using @func to determine the new position.270 // Inserts @data into @queue using @func to determine the new position.
265 func (x *Queue) InsertSorted(DataVar uintptr, FuncVar *CompareDataFunc, UserDataVar uintptr) {271 func (x *Queue) InsertSorted(DataVar uintptr, FuncVar *CompareDataFunc, UserDataVar uintptr) {
266 272
267- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
268 var FuncVarRef uintptr273 var FuncVarRef uintptr
269- if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {274+ if FuncVar != nil {
270- FuncVarRef = cbRefPtr275+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
271- } else {276+ if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
272- fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int {277+ FuncVarRef = cbRefPtr
273- cbFn := *FuncVar278+ } else {
274- return cbFn(arg0, arg1, arg2)279+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int {
280+ cbFn := *FuncVar
281+ return cbFn(arg0, arg1, arg2)
282+ }
283+ FuncVarRef = purego.NewCallback(fcb)
284+ SaveCallback(FuncVarPtr, FuncVarRef)
275 }285 }
276- FuncVarRef = purego.NewCallback(fcb)
277- SaveCallback(FuncVarPtr, FuncVarRef)
278 }286 }
279 287
280 xQueueInsertSorted(x.GoPointer(), DataVar, FuncVarRef, UserDataVar)288 xQueueInsertSorted(x.GoPointer(), DataVar, FuncVarRef, UserDataVar)
@@ -493,17 +501,19 @@ var xQueueSort func(uintptr, uintptr, uintptr)
493 // Sorts @queue using @compare_func.501 // Sorts @queue using @compare_func.
494 func (x *Queue) Sort(CompareFuncVar *CompareDataFunc, UserDataVar uintptr) {502 func (x *Queue) Sort(CompareFuncVar *CompareDataFunc, UserDataVar uintptr) {
495 503
496- CompareFuncVarPtr := uintptr(unsafe.Pointer(CompareFuncVar))
497 var CompareFuncVarRef uintptr504 var CompareFuncVarRef uintptr
498- if cbRefPtr, ok := GetCallback(CompareFuncVarPtr); ok {505+ if CompareFuncVar != nil {
499- CompareFuncVarRef = cbRefPtr506+ CompareFuncVarPtr := uintptr(unsafe.Pointer(CompareFuncVar))
500- } else {507+ if cbRefPtr, ok := GetCallback(CompareFuncVarPtr); ok {
501- fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int {508+ CompareFuncVarRef = cbRefPtr
502- cbFn := *CompareFuncVar509+ } else {
503- return cbFn(arg0, arg1, arg2)510+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int {
511+ cbFn := *CompareFuncVar
512+ return cbFn(arg0, arg1, arg2)
513+ }
514+ CompareFuncVarRef = purego.NewCallback(fcb)
515+ SaveCallback(CompareFuncVarPtr, CompareFuncVarRef)
504 }516 }
505- CompareFuncVarRef = purego.NewCallback(fcb)
506- SaveCallback(CompareFuncVarPtr, CompareFuncVarRef)
507 }517 }
508 518
509 xQueueSort(x.GoPointer(), CompareFuncVarRef, UserDataVar)519 xQueueSort(x.GoPointer(), CompareFuncVarRef, UserDataVar)
M v4/glib/grcbox.go +22 -18
@@ -97,17 +97,19 @@ var xAtomicRcBoxReleaseFull func(uintptr, uintptr)
97 // when the callback is called and will be freed.97 // when the callback is called and will be freed.
98 func AtomicRcBoxReleaseFull(MemBlockVar uintptr, ClearFuncVar *DestroyNotify) {98 func AtomicRcBoxReleaseFull(MemBlockVar uintptr, ClearFuncVar *DestroyNotify) {
99 99
100- ClearFuncVarPtr := uintptr(unsafe.Pointer(ClearFuncVar))
101 var ClearFuncVarRef uintptr100 var ClearFuncVarRef uintptr
102- if cbRefPtr, ok := GetCallback(ClearFuncVarPtr); ok {101+ if ClearFuncVar != nil {
103- ClearFuncVarRef = cbRefPtr102+ ClearFuncVarPtr := uintptr(unsafe.Pointer(ClearFuncVar))
104- } else {103+ if cbRefPtr, ok := GetCallback(ClearFuncVarPtr); ok {
105- fcb := func(arg0 uintptr) {104+ ClearFuncVarRef = cbRefPtr
106- cbFn := *ClearFuncVar105+ } else {
107- cbFn(arg0)106+ fcb := func(arg0 uintptr) {
107+ cbFn := *ClearFuncVar
108+ cbFn(arg0)
109+ }
110+ ClearFuncVarRef = purego.NewCallback(fcb)
111+ SaveCallback(ClearFuncVarPtr, ClearFuncVarRef)
108 }112 }
109- ClearFuncVarRef = purego.NewCallback(fcb)
110- SaveCallback(ClearFuncVarPtr, ClearFuncVarRef)
111 }113 }
112 114
113 xAtomicRcBoxReleaseFull(MemBlockVar, ClearFuncVarRef)115 xAtomicRcBoxReleaseFull(MemBlockVar, ClearFuncVarRef)
@@ -198,17 +200,19 @@ var xRcBoxReleaseFull func(uintptr, uintptr)
198 // resources allocated for @mem_block.200 // resources allocated for @mem_block.
199 func RcBoxReleaseFull(MemBlockVar uintptr, ClearFuncVar *DestroyNotify) {201 func RcBoxReleaseFull(MemBlockVar uintptr, ClearFuncVar *DestroyNotify) {
200 202
201- ClearFuncVarPtr := uintptr(unsafe.Pointer(ClearFuncVar))
202 var ClearFuncVarRef uintptr203 var ClearFuncVarRef uintptr
203- if cbRefPtr, ok := GetCallback(ClearFuncVarPtr); ok {204+ if ClearFuncVar != nil {
204- ClearFuncVarRef = cbRefPtr205+ ClearFuncVarPtr := uintptr(unsafe.Pointer(ClearFuncVar))
205- } else {206+ if cbRefPtr, ok := GetCallback(ClearFuncVarPtr); ok {
206- fcb := func(arg0 uintptr) {207+ ClearFuncVarRef = cbRefPtr
207- cbFn := *ClearFuncVar208+ } else {
208- cbFn(arg0)209+ fcb := func(arg0 uintptr) {
210+ cbFn := *ClearFuncVar
211+ cbFn(arg0)
212+ }
213+ ClearFuncVarRef = purego.NewCallback(fcb)
214+ SaveCallback(ClearFuncVarPtr, ClearFuncVarRef)
209 }215 }
210- ClearFuncVarRef = purego.NewCallback(fcb)
211- SaveCallback(ClearFuncVarPtr, ClearFuncVarRef)
212 }216 }
213 217
214 xRcBoxReleaseFull(MemBlockVar, ClearFuncVarRef)218 xRcBoxReleaseFull(MemBlockVar, ClearFuncVarRef)
M v4/glib/gregex.go +11 -9
@@ -1028,17 +1028,19 @@ var xRegexReplaceEval func(uintptr, []string, int, int, RegexMatchFlags, uintptr
1028 func (x *Regex) ReplaceEval(StringVar []string, StringLenVar int, StartPositionVar int, MatchOptionsVar RegexMatchFlags, EvalVar *RegexEvalCallback, UserDataVar uintptr) (string, error) {1028 func (x *Regex) ReplaceEval(StringVar []string, StringLenVar int, StartPositionVar int, MatchOptionsVar RegexMatchFlags, EvalVar *RegexEvalCallback, UserDataVar uintptr) (string, error) {
1029 var cerr *Error1029 var cerr *Error
1030 1030
1031- EvalVarPtr := uintptr(unsafe.Pointer(EvalVar))
1032 var EvalVarRef uintptr1031 var EvalVarRef uintptr
1033- if cbRefPtr, ok := GetCallback(EvalVarPtr); ok {1032+ if EvalVar != nil {
1034- EvalVarRef = cbRefPtr1033+ EvalVarPtr := uintptr(unsafe.Pointer(EvalVar))
1035- } else {1034+ if cbRefPtr, ok := GetCallback(EvalVarPtr); ok {
1036- fcb := func(arg0 *MatchInfo, arg1 *String, arg2 uintptr) bool {1035+ EvalVarRef = cbRefPtr
1037- cbFn := *EvalVar1036+ } else {
1038- return cbFn(arg0, arg1, arg2)1037+ fcb := func(arg0 *MatchInfo, arg1 *String, arg2 uintptr) bool {
1038+ cbFn := *EvalVar
1039+ return cbFn(arg0, arg1, arg2)
1040+ }
1041+ EvalVarRef = purego.NewCallback(fcb)
1042+ SaveCallback(EvalVarPtr, EvalVarRef)
1039 }1043 }
1040- EvalVarRef = purego.NewCallback(fcb)
1041- SaveCallback(EvalVarPtr, EvalVarRef)
1042 }1044 }
1043 1045
1044 cret := xRegexReplaceEval(x.GoPointer(), StringVar, StringLenVar, StartPositionVar, MatchOptionsVar, EvalVarRef, UserDataVar, &cerr)1046 cret := xRegexReplaceEval(x.GoPointer(), StringVar, StringLenVar, StartPositionVar, MatchOptionsVar, EvalVarRef, UserDataVar, &cerr)
M v4/glib/grel.go +22 -18
@@ -104,30 +104,34 @@ var xRelationIndex func(uintptr, int, uintptr, uintptr)
104 // before any records are added to the #GRelation.104 // before any records are added to the #GRelation.
105 func (x *Relation) Index(FieldVar int, HashFuncVar *HashFunc, KeyEqualFuncVar *EqualFunc) {105 func (x *Relation) Index(FieldVar int, HashFuncVar *HashFunc, KeyEqualFuncVar *EqualFunc) {
106 106
107- HashFuncVarPtr := uintptr(unsafe.Pointer(HashFuncVar))
108 var HashFuncVarRef uintptr107 var HashFuncVarRef uintptr
109- if cbRefPtr, ok := GetCallback(HashFuncVarPtr); ok {108+ if HashFuncVar != nil {
110- HashFuncVarRef = cbRefPtr109+ HashFuncVarPtr := uintptr(unsafe.Pointer(HashFuncVar))
111- } else {110+ if cbRefPtr, ok := GetCallback(HashFuncVarPtr); ok {
112- fcb := func(arg0 uintptr) uint {111+ HashFuncVarRef = cbRefPtr
113- cbFn := *HashFuncVar112+ } else {
114- return cbFn(arg0)113+ fcb := func(arg0 uintptr) uint {
114+ cbFn := *HashFuncVar
115+ return cbFn(arg0)
116+ }
117+ HashFuncVarRef = purego.NewCallback(fcb)
118+ SaveCallback(HashFuncVarPtr, HashFuncVarRef)
115 }119 }
116- HashFuncVarRef = purego.NewCallback(fcb)
117- SaveCallback(HashFuncVarPtr, HashFuncVarRef)
118 }120 }
119 121
120- KeyEqualFuncVarPtr := uintptr(unsafe.Pointer(KeyEqualFuncVar))
121 var KeyEqualFuncVarRef uintptr122 var KeyEqualFuncVarRef uintptr
122- if cbRefPtr, ok := GetCallback(KeyEqualFuncVarPtr); ok {123+ if KeyEqualFuncVar != nil {
123- KeyEqualFuncVarRef = cbRefPtr124+ KeyEqualFuncVarPtr := uintptr(unsafe.Pointer(KeyEqualFuncVar))
124- } else {125+ if cbRefPtr, ok := GetCallback(KeyEqualFuncVarPtr); ok {
125- fcb := func(arg0 uintptr, arg1 uintptr) bool {126+ KeyEqualFuncVarRef = cbRefPtr
126- cbFn := *KeyEqualFuncVar127+ } else {
127- return cbFn(arg0, arg1)128+ fcb := func(arg0 uintptr, arg1 uintptr) bool {
129+ cbFn := *KeyEqualFuncVar
130+ return cbFn(arg0, arg1)
131+ }
132+ KeyEqualFuncVarRef = purego.NewCallback(fcb)
133+ SaveCallback(KeyEqualFuncVarPtr, KeyEqualFuncVarRef)
128 }134 }
129- KeyEqualFuncVarRef = purego.NewCallback(fcb)
130- SaveCallback(KeyEqualFuncVarPtr, KeyEqualFuncVarRef)
131 }135 }
132 136
133 xRelationIndex(x.GoPointer(), FieldVar, HashFuncVarRef, KeyEqualFuncVarRef)137 xRelationIndex(x.GoPointer(), FieldVar, HashFuncVarRef, KeyEqualFuncVarRef)
M v4/glib/gscanner.go +11 -9
@@ -223,17 +223,19 @@ var xScannerScopeForeachSymbol func(uintptr, uint, uintptr, uintptr)
223 // parameter.223 // parameter.
224 func (x *Scanner) ScopeForeachSymbol(ScopeIdVar uint, FuncVar *HFunc, UserDataVar uintptr) {224 func (x *Scanner) ScopeForeachSymbol(ScopeIdVar uint, FuncVar *HFunc, UserDataVar uintptr) {
225 225
226- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
227 var FuncVarRef uintptr226 var FuncVarRef uintptr
228- if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {227+ if FuncVar != nil {
229- FuncVarRef = cbRefPtr228+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
230- } else {229+ if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
231- fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {230+ FuncVarRef = cbRefPtr
232- cbFn := *FuncVar231+ } else {
233- cbFn(arg0, arg1, arg2)232+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
233+ cbFn := *FuncVar
234+ cbFn(arg0, arg1, arg2)
235+ }
236+ FuncVarRef = purego.NewCallback(fcb)
237+ SaveCallback(FuncVarPtr, FuncVarRef)
234 }238 }
235- FuncVarRef = purego.NewCallback(fcb)
236- SaveCallback(FuncVarPtr, FuncVarRef)
237 }239 }
238 240
239 xScannerScopeForeachSymbol(x.GoPointer(), ScopeIdVar, FuncVarRef, UserDataVar)241 xScannerScopeForeachSymbol(x.GoPointer(), ScopeIdVar, FuncVarRef, UserDataVar)
M v4/glib/gsequence.go +132 -108
@@ -39,17 +39,19 @@ var xSequenceForeach func(uintptr, uintptr, uintptr)
39 // to the function. @func must not modify the sequence itself.39 // to the function. @func must not modify the sequence itself.
40 func (x *Sequence) Foreach(FuncVar *Func, UserDataVar uintptr) {40 func (x *Sequence) Foreach(FuncVar *Func, UserDataVar uintptr) {
41 41
42- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
43 var FuncVarRef uintptr42 var FuncVarRef uintptr
44- if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {43+ if FuncVar != nil {
45- FuncVarRef = cbRefPtr44+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
46- } else {45+ if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
47- fcb := func(arg0 uintptr, arg1 uintptr) {46+ FuncVarRef = cbRefPtr
48- cbFn := *FuncVar47+ } else {
49- cbFn(arg0, arg1)48+ fcb := func(arg0 uintptr, arg1 uintptr) {
49+ cbFn := *FuncVar
50+ cbFn(arg0, arg1)
51+ }
52+ FuncVarRef = purego.NewCallback(fcb)
53+ SaveCallback(FuncVarPtr, FuncVarRef)
50 }54 }
51- FuncVarRef = purego.NewCallback(fcb)
52- SaveCallback(FuncVarPtr, FuncVarRef)
53 }55 }
54 56
55 xSequenceForeach(x.GoPointer(), FuncVarRef, UserDataVar)57 xSequenceForeach(x.GoPointer(), FuncVarRef, UserDataVar)
@@ -122,17 +124,19 @@ var xSequenceInsertSorted func(uintptr, uintptr, uintptr, uintptr) *SequenceIter
122 // g_sequence_sort() or g_sequence_sort_iter().124 // g_sequence_sort() or g_sequence_sort_iter().
123 func (x *Sequence) InsertSorted(DataVar uintptr, CmpFuncVar *CompareDataFunc, CmpDataVar uintptr) *SequenceIter {125 func (x *Sequence) InsertSorted(DataVar uintptr, CmpFuncVar *CompareDataFunc, CmpDataVar uintptr) *SequenceIter {
124 126
125- CmpFuncVarPtr := uintptr(unsafe.Pointer(CmpFuncVar))
126 var CmpFuncVarRef uintptr127 var CmpFuncVarRef uintptr
127- if cbRefPtr, ok := GetCallback(CmpFuncVarPtr); ok {128+ if CmpFuncVar != nil {
128- CmpFuncVarRef = cbRefPtr129+ CmpFuncVarPtr := uintptr(unsafe.Pointer(CmpFuncVar))
129- } else {130+ if cbRefPtr, ok := GetCallback(CmpFuncVarPtr); ok {
130- fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int {131+ CmpFuncVarRef = cbRefPtr
131- cbFn := *CmpFuncVar132+ } else {
132- return cbFn(arg0, arg1, arg2)133+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int {
134+ cbFn := *CmpFuncVar
135+ return cbFn(arg0, arg1, arg2)
136+ }
137+ CmpFuncVarRef = purego.NewCallback(fcb)
138+ SaveCallback(CmpFuncVarPtr, CmpFuncVarRef)
133 }139 }
134- CmpFuncVarRef = purego.NewCallback(fcb)
135- SaveCallback(CmpFuncVarPtr, CmpFuncVarRef)
136 }140 }
137 141
138 cret := xSequenceInsertSorted(x.GoPointer(), DataVar, CmpFuncVarRef, CmpDataVar)142 cret := xSequenceInsertSorted(x.GoPointer(), DataVar, CmpFuncVarRef, CmpDataVar)
@@ -155,17 +159,19 @@ var xSequenceInsertSortedIter func(uintptr, uintptr, uintptr, uintptr) *Sequence
155 // g_sequence_sort() or g_sequence_sort_iter().159 // g_sequence_sort() or g_sequence_sort_iter().
156 func (x *Sequence) InsertSortedIter(DataVar uintptr, IterCmpVar *SequenceIterCompareFunc, CmpDataVar uintptr) *SequenceIter {160 func (x *Sequence) InsertSortedIter(DataVar uintptr, IterCmpVar *SequenceIterCompareFunc, CmpDataVar uintptr) *SequenceIter {
157 161
158- IterCmpVarPtr := uintptr(unsafe.Pointer(IterCmpVar))
159 var IterCmpVarRef uintptr162 var IterCmpVarRef uintptr
160- if cbRefPtr, ok := GetCallback(IterCmpVarPtr); ok {163+ if IterCmpVar != nil {
161- IterCmpVarRef = cbRefPtr164+ IterCmpVarPtr := uintptr(unsafe.Pointer(IterCmpVar))
162- } else {165+ if cbRefPtr, ok := GetCallback(IterCmpVarPtr); ok {
163- fcb := func(arg0 *SequenceIter, arg1 *SequenceIter, arg2 uintptr) int {166+ IterCmpVarRef = cbRefPtr
164- cbFn := *IterCmpVar167+ } else {
165- return cbFn(arg0, arg1, arg2)168+ fcb := func(arg0 *SequenceIter, arg1 *SequenceIter, arg2 uintptr) int {
169+ cbFn := *IterCmpVar
170+ return cbFn(arg0, arg1, arg2)
171+ }
172+ IterCmpVarRef = purego.NewCallback(fcb)
173+ SaveCallback(IterCmpVarPtr, IterCmpVarRef)
166 }174 }
167- IterCmpVarRef = purego.NewCallback(fcb)
168- SaveCallback(IterCmpVarPtr, IterCmpVarRef)
169 }175 }
170 176
171 cret := xSequenceInsertSortedIter(x.GoPointer(), DataVar, IterCmpVarRef, CmpDataVar)177 cret := xSequenceInsertSortedIter(x.GoPointer(), DataVar, IterCmpVarRef, CmpDataVar)
@@ -202,17 +208,19 @@ var xSequenceLookup func(uintptr, uintptr, uintptr, uintptr) *SequenceIter
202 // unsorted.208 // unsorted.
203 func (x *Sequence) Lookup(DataVar uintptr, CmpFuncVar *CompareDataFunc, CmpDataVar uintptr) *SequenceIter {209 func (x *Sequence) Lookup(DataVar uintptr, CmpFuncVar *CompareDataFunc, CmpDataVar uintptr) *SequenceIter {
204 210
205- CmpFuncVarPtr := uintptr(unsafe.Pointer(CmpFuncVar))
206 var CmpFuncVarRef uintptr211 var CmpFuncVarRef uintptr
207- if cbRefPtr, ok := GetCallback(CmpFuncVarPtr); ok {212+ if CmpFuncVar != nil {
208- CmpFuncVarRef = cbRefPtr213+ CmpFuncVarPtr := uintptr(unsafe.Pointer(CmpFuncVar))
209- } else {214+ if cbRefPtr, ok := GetCallback(CmpFuncVarPtr); ok {
210- fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int {215+ CmpFuncVarRef = cbRefPtr
211- cbFn := *CmpFuncVar216+ } else {
212- return cbFn(arg0, arg1, arg2)217+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int {
218+ cbFn := *CmpFuncVar
219+ return cbFn(arg0, arg1, arg2)
220+ }
221+ CmpFuncVarRef = purego.NewCallback(fcb)
222+ SaveCallback(CmpFuncVarPtr, CmpFuncVarRef)
213 }223 }
214- CmpFuncVarRef = purego.NewCallback(fcb)
215- SaveCallback(CmpFuncVarPtr, CmpFuncVarRef)
216 }224 }
217 225
218 cret := xSequenceLookup(x.GoPointer(), DataVar, CmpFuncVarRef, CmpDataVar)226 cret := xSequenceLookup(x.GoPointer(), DataVar, CmpFuncVarRef, CmpDataVar)
@@ -233,17 +241,19 @@ var xSequenceLookupIter func(uintptr, uintptr, uintptr, uintptr) *SequenceIter
233 // unsorted.241 // unsorted.
234 func (x *Sequence) LookupIter(DataVar uintptr, IterCmpVar *SequenceIterCompareFunc, CmpDataVar uintptr) *SequenceIter {242 func (x *Sequence) LookupIter(DataVar uintptr, IterCmpVar *SequenceIterCompareFunc, CmpDataVar uintptr) *SequenceIter {
235 243
236- IterCmpVarPtr := uintptr(unsafe.Pointer(IterCmpVar))
237 var IterCmpVarRef uintptr244 var IterCmpVarRef uintptr
238- if cbRefPtr, ok := GetCallback(IterCmpVarPtr); ok {245+ if IterCmpVar != nil {
239- IterCmpVarRef = cbRefPtr246+ IterCmpVarPtr := uintptr(unsafe.Pointer(IterCmpVar))
240- } else {247+ if cbRefPtr, ok := GetCallback(IterCmpVarPtr); ok {
241- fcb := func(arg0 *SequenceIter, arg1 *SequenceIter, arg2 uintptr) int {248+ IterCmpVarRef = cbRefPtr
242- cbFn := *IterCmpVar249+ } else {
243- return cbFn(arg0, arg1, arg2)250+ fcb := func(arg0 *SequenceIter, arg1 *SequenceIter, arg2 uintptr) int {
251+ cbFn := *IterCmpVar
252+ return cbFn(arg0, arg1, arg2)
253+ }
254+ IterCmpVarRef = purego.NewCallback(fcb)
255+ SaveCallback(IterCmpVarPtr, IterCmpVarRef)
244 }256 }
245- IterCmpVarRef = purego.NewCallback(fcb)
246- SaveCallback(IterCmpVarPtr, IterCmpVarRef)
247 }257 }
248 258
249 cret := xSequenceLookupIter(x.GoPointer(), DataVar, IterCmpVarRef, CmpDataVar)259 cret := xSequenceLookupIter(x.GoPointer(), DataVar, IterCmpVarRef, CmpDataVar)
@@ -276,17 +286,19 @@ var xSequenceSearch func(uintptr, uintptr, uintptr, uintptr) *SequenceIter
276 // unsorted.286 // unsorted.
277 func (x *Sequence) Search(DataVar uintptr, CmpFuncVar *CompareDataFunc, CmpDataVar uintptr) *SequenceIter {287 func (x *Sequence) Search(DataVar uintptr, CmpFuncVar *CompareDataFunc, CmpDataVar uintptr) *SequenceIter {
278 288
279- CmpFuncVarPtr := uintptr(unsafe.Pointer(CmpFuncVar))
280 var CmpFuncVarRef uintptr289 var CmpFuncVarRef uintptr
281- if cbRefPtr, ok := GetCallback(CmpFuncVarPtr); ok {290+ if CmpFuncVar != nil {
282- CmpFuncVarRef = cbRefPtr291+ CmpFuncVarPtr := uintptr(unsafe.Pointer(CmpFuncVar))
283- } else {292+ if cbRefPtr, ok := GetCallback(CmpFuncVarPtr); ok {
284- fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int {293+ CmpFuncVarRef = cbRefPtr
285- cbFn := *CmpFuncVar294+ } else {
286- return cbFn(arg0, arg1, arg2)295+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int {
296+ cbFn := *CmpFuncVar
297+ return cbFn(arg0, arg1, arg2)
298+ }
299+ CmpFuncVarRef = purego.NewCallback(fcb)
300+ SaveCallback(CmpFuncVarPtr, CmpFuncVarRef)
287 }301 }
288- CmpFuncVarRef = purego.NewCallback(fcb)
289- SaveCallback(CmpFuncVarPtr, CmpFuncVarRef)
290 }302 }
291 303
292 cret := xSequenceSearch(x.GoPointer(), DataVar, CmpFuncVarRef, CmpDataVar)304 cret := xSequenceSearch(x.GoPointer(), DataVar, CmpFuncVarRef, CmpDataVar)
@@ -310,17 +322,19 @@ var xSequenceSearchIter func(uintptr, uintptr, uintptr, uintptr) *SequenceIter
310 // unsorted.322 // unsorted.
311 func (x *Sequence) SearchIter(DataVar uintptr, IterCmpVar *SequenceIterCompareFunc, CmpDataVar uintptr) *SequenceIter {323 func (x *Sequence) SearchIter(DataVar uintptr, IterCmpVar *SequenceIterCompareFunc, CmpDataVar uintptr) *SequenceIter {
312 324
313- IterCmpVarPtr := uintptr(unsafe.Pointer(IterCmpVar))
314 var IterCmpVarRef uintptr325 var IterCmpVarRef uintptr
315- if cbRefPtr, ok := GetCallback(IterCmpVarPtr); ok {326+ if IterCmpVar != nil {
316- IterCmpVarRef = cbRefPtr327+ IterCmpVarPtr := uintptr(unsafe.Pointer(IterCmpVar))
317- } else {328+ if cbRefPtr, ok := GetCallback(IterCmpVarPtr); ok {
318- fcb := func(arg0 *SequenceIter, arg1 *SequenceIter, arg2 uintptr) int {329+ IterCmpVarRef = cbRefPtr
319- cbFn := *IterCmpVar330+ } else {
320- return cbFn(arg0, arg1, arg2)331+ fcb := func(arg0 *SequenceIter, arg1 *SequenceIter, arg2 uintptr) int {
332+ cbFn := *IterCmpVar
333+ return cbFn(arg0, arg1, arg2)
334+ }
335+ IterCmpVarRef = purego.NewCallback(fcb)
336+ SaveCallback(IterCmpVarPtr, IterCmpVarRef)
321 }337 }
322- IterCmpVarRef = purego.NewCallback(fcb)
323- SaveCallback(IterCmpVarPtr, IterCmpVarRef)
324 }338 }
325 339
326 cret := xSequenceSearchIter(x.GoPointer(), DataVar, IterCmpVarRef, CmpDataVar)340 cret := xSequenceSearchIter(x.GoPointer(), DataVar, IterCmpVarRef, CmpDataVar)
@@ -337,17 +351,19 @@ var xSequenceSort func(uintptr, uintptr, uintptr)
337 // if the second comes before the first.351 // if the second comes before the first.
338 func (x *Sequence) Sort(CmpFuncVar *CompareDataFunc, CmpDataVar uintptr) {352 func (x *Sequence) Sort(CmpFuncVar *CompareDataFunc, CmpDataVar uintptr) {
339 353
340- CmpFuncVarPtr := uintptr(unsafe.Pointer(CmpFuncVar))
341 var CmpFuncVarRef uintptr354 var CmpFuncVarRef uintptr
342- if cbRefPtr, ok := GetCallback(CmpFuncVarPtr); ok {355+ if CmpFuncVar != nil {
343- CmpFuncVarRef = cbRefPtr356+ CmpFuncVarPtr := uintptr(unsafe.Pointer(CmpFuncVar))
344- } else {357+ if cbRefPtr, ok := GetCallback(CmpFuncVarPtr); ok {
345- fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int {358+ CmpFuncVarRef = cbRefPtr
346- cbFn := *CmpFuncVar359+ } else {
347- return cbFn(arg0, arg1, arg2)360+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int {
361+ cbFn := *CmpFuncVar
362+ return cbFn(arg0, arg1, arg2)
363+ }
364+ CmpFuncVarRef = purego.NewCallback(fcb)
365+ SaveCallback(CmpFuncVarPtr, CmpFuncVarRef)
348 }366 }
349- CmpFuncVarRef = purego.NewCallback(fcb)
350- SaveCallback(CmpFuncVarPtr, CmpFuncVarRef)
351 }367 }
352 368
353 xSequenceSort(x.GoPointer(), CmpFuncVarRef, CmpDataVar)369 xSequenceSort(x.GoPointer(), CmpFuncVarRef, CmpDataVar)
@@ -365,17 +381,19 @@ var xSequenceSortIter func(uintptr, uintptr, uintptr)
365 // iterator comes before the first.381 // iterator comes before the first.
366 func (x *Sequence) SortIter(CmpFuncVar *SequenceIterCompareFunc, CmpDataVar uintptr) {382 func (x *Sequence) SortIter(CmpFuncVar *SequenceIterCompareFunc, CmpDataVar uintptr) {
367 383
368- CmpFuncVarPtr := uintptr(unsafe.Pointer(CmpFuncVar))
369 var CmpFuncVarRef uintptr384 var CmpFuncVarRef uintptr
370- if cbRefPtr, ok := GetCallback(CmpFuncVarPtr); ok {385+ if CmpFuncVar != nil {
371- CmpFuncVarRef = cbRefPtr386+ CmpFuncVarPtr := uintptr(unsafe.Pointer(CmpFuncVar))
372- } else {387+ if cbRefPtr, ok := GetCallback(CmpFuncVarPtr); ok {
373- fcb := func(arg0 *SequenceIter, arg1 *SequenceIter, arg2 uintptr) int {388+ CmpFuncVarRef = cbRefPtr
374- cbFn := *CmpFuncVar389+ } else {
375- return cbFn(arg0, arg1, arg2)390+ fcb := func(arg0 *SequenceIter, arg1 *SequenceIter, arg2 uintptr) int {
391+ cbFn := *CmpFuncVar
392+ return cbFn(arg0, arg1, arg2)
393+ }
394+ CmpFuncVarRef = purego.NewCallback(fcb)
395+ SaveCallback(CmpFuncVarPtr, CmpFuncVarRef)
376 }396 }
377- CmpFuncVarRef = purego.NewCallback(fcb)
378- SaveCallback(CmpFuncVarPtr, CmpFuncVarRef)
379 }397 }
380 398
381 xSequenceSortIter(x.GoPointer(), CmpFuncVarRef, CmpDataVar)399 xSequenceSortIter(x.GoPointer(), CmpFuncVarRef, CmpDataVar)
@@ -479,17 +497,19 @@ var xSequenceForeachRange func(*SequenceIter, *SequenceIter, uintptr, uintptr)
479 // itself.497 // itself.
480 func SequenceForeachRange(BeginVar *SequenceIter, EndVar *SequenceIter, FuncVar *Func, UserDataVar uintptr) {498 func SequenceForeachRange(BeginVar *SequenceIter, EndVar *SequenceIter, FuncVar *Func, UserDataVar uintptr) {
481 499
482- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
483 var FuncVarRef uintptr500 var FuncVarRef uintptr
484- if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {501+ if FuncVar != nil {
485- FuncVarRef = cbRefPtr502+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
486- } else {503+ if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
487- fcb := func(arg0 uintptr, arg1 uintptr) {504+ FuncVarRef = cbRefPtr
488- cbFn := *FuncVar505+ } else {
489- cbFn(arg0, arg1)506+ fcb := func(arg0 uintptr, arg1 uintptr) {
507+ cbFn := *FuncVar
508+ cbFn(arg0, arg1)
509+ }
510+ FuncVarRef = purego.NewCallback(fcb)
511+ SaveCallback(FuncVarPtr, FuncVarRef)
490 }512 }
491- FuncVarRef = purego.NewCallback(fcb)
492- SaveCallback(FuncVarPtr, FuncVarRef)
493 }513 }
494 514
495 xSequenceForeachRange(BeginVar, EndVar, FuncVarRef, UserDataVar)515 xSequenceForeachRange(BeginVar, EndVar, FuncVarRef, UserDataVar)
@@ -606,17 +626,19 @@ var xSequenceSortChanged func(*SequenceIter, uintptr, uintptr)
606 // the second item comes before the first.626 // the second item comes before the first.
607 func SequenceSortChanged(IterVar *SequenceIter, CmpFuncVar *CompareDataFunc, CmpDataVar uintptr) {627 func SequenceSortChanged(IterVar *SequenceIter, CmpFuncVar *CompareDataFunc, CmpDataVar uintptr) {
608 628
609- CmpFuncVarPtr := uintptr(unsafe.Pointer(CmpFuncVar))
610 var CmpFuncVarRef uintptr629 var CmpFuncVarRef uintptr
611- if cbRefPtr, ok := GetCallback(CmpFuncVarPtr); ok {630+ if CmpFuncVar != nil {
612- CmpFuncVarRef = cbRefPtr631+ CmpFuncVarPtr := uintptr(unsafe.Pointer(CmpFuncVar))
613- } else {632+ if cbRefPtr, ok := GetCallback(CmpFuncVarPtr); ok {
614- fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int {633+ CmpFuncVarRef = cbRefPtr
615- cbFn := *CmpFuncVar634+ } else {
616- return cbFn(arg0, arg1, arg2)635+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int {
636+ cbFn := *CmpFuncVar
637+ return cbFn(arg0, arg1, arg2)
638+ }
639+ CmpFuncVarRef = purego.NewCallback(fcb)
640+ SaveCallback(CmpFuncVarPtr, CmpFuncVarRef)
617 }641 }
618- CmpFuncVarRef = purego.NewCallback(fcb)
619- SaveCallback(CmpFuncVarPtr, CmpFuncVarRef)
620 }642 }
621 643
622 xSequenceSortChanged(IterVar, CmpFuncVarRef, CmpDataVar)644 xSequenceSortChanged(IterVar, CmpFuncVarRef, CmpDataVar)
@@ -636,17 +658,19 @@ var xSequenceSortChangedIter func(*SequenceIter, uintptr, uintptr)
636 // iterator comes before the first.658 // iterator comes before the first.
637 func SequenceSortChangedIter(IterVar *SequenceIter, IterCmpVar *SequenceIterCompareFunc, CmpDataVar uintptr) {659 func SequenceSortChangedIter(IterVar *SequenceIter, IterCmpVar *SequenceIterCompareFunc, CmpDataVar uintptr) {
638 660
639- IterCmpVarPtr := uintptr(unsafe.Pointer(IterCmpVar))
640 var IterCmpVarRef uintptr661 var IterCmpVarRef uintptr
641- if cbRefPtr, ok := GetCallback(IterCmpVarPtr); ok {662+ if IterCmpVar != nil {
642- IterCmpVarRef = cbRefPtr663+ IterCmpVarPtr := uintptr(unsafe.Pointer(IterCmpVar))
643- } else {664+ if cbRefPtr, ok := GetCallback(IterCmpVarPtr); ok {
644- fcb := func(arg0 *SequenceIter, arg1 *SequenceIter, arg2 uintptr) int {665+ IterCmpVarRef = cbRefPtr
645- cbFn := *IterCmpVar666+ } else {
646- return cbFn(arg0, arg1, arg2)667+ fcb := func(arg0 *SequenceIter, arg1 *SequenceIter, arg2 uintptr) int {
668+ cbFn := *IterCmpVar
669+ return cbFn(arg0, arg1, arg2)
670+ }
671+ IterCmpVarRef = purego.NewCallback(fcb)
672+ SaveCallback(IterCmpVarPtr, IterCmpVarRef)
647 }673 }
648- IterCmpVarRef = purego.NewCallback(fcb)
649- SaveCallback(IterCmpVarPtr, IterCmpVarRef)
650 }674 }
651 675
652 xSequenceSortChangedIter(IterVar, IterCmpVarRef, CmpDataVar)676 xSequenceSortChangedIter(IterVar, IterCmpVarRef, CmpDataVar)
M v4/glib/gtestutils.go +132 -108
@@ -420,17 +420,19 @@ var xTestAddDataFunc func(string, uintptr, uintptr)
420 // and it is recommended to do so even if it isn’t.420 // and it is recommended to do so even if it isn’t.
421 func TestAddDataFunc(TestpathVar string, TestDataVar uintptr, TestFuncVar *TestDataFunc) {421 func TestAddDataFunc(TestpathVar string, TestDataVar uintptr, TestFuncVar *TestDataFunc) {
422 422
423- TestFuncVarPtr := uintptr(unsafe.Pointer(TestFuncVar))
424 var TestFuncVarRef uintptr423 var TestFuncVarRef uintptr
425- if cbRefPtr, ok := GetCallback(TestFuncVarPtr); ok {424+ if TestFuncVar != nil {
426- TestFuncVarRef = cbRefPtr425+ TestFuncVarPtr := uintptr(unsafe.Pointer(TestFuncVar))
427- } else {426+ if cbRefPtr, ok := GetCallback(TestFuncVarPtr); ok {
428- fcb := func(arg0 uintptr) {427+ TestFuncVarRef = cbRefPtr
429- cbFn := *TestFuncVar428+ } else {
430- cbFn(arg0)429+ fcb := func(arg0 uintptr) {
430+ cbFn := *TestFuncVar
431+ cbFn(arg0)
432+ }
433+ TestFuncVarRef = purego.NewCallback(fcb)
434+ SaveCallback(TestFuncVarPtr, TestFuncVarRef)
431 }435 }
432- TestFuncVarRef = purego.NewCallback(fcb)
433- SaveCallback(TestFuncVarPtr, TestFuncVarRef)
434 }436 }
435 437
436 xTestAddDataFunc(TestpathVar, TestDataVar, TestFuncVarRef)438 xTestAddDataFunc(TestpathVar, TestDataVar, TestFuncVarRef)
@@ -445,30 +447,34 @@ var xTestAddDataFuncFull func(string, uintptr, uintptr, uintptr)
445 // is freeing @test_data after the test run is complete.447 // is freeing @test_data after the test run is complete.
446 func TestAddDataFuncFull(TestpathVar string, TestDataVar uintptr, TestFuncVar *TestDataFunc, DataFreeFuncVar *DestroyNotify) {448 func TestAddDataFuncFull(TestpathVar string, TestDataVar uintptr, TestFuncVar *TestDataFunc, DataFreeFuncVar *DestroyNotify) {
447 449
448- TestFuncVarPtr := uintptr(unsafe.Pointer(TestFuncVar))
449 var TestFuncVarRef uintptr450 var TestFuncVarRef uintptr
450- if cbRefPtr, ok := GetCallback(TestFuncVarPtr); ok {451+ if TestFuncVar != nil {
451- TestFuncVarRef = cbRefPtr452+ TestFuncVarPtr := uintptr(unsafe.Pointer(TestFuncVar))
452- } else {453+ if cbRefPtr, ok := GetCallback(TestFuncVarPtr); ok {
453- fcb := func(arg0 uintptr) {454+ TestFuncVarRef = cbRefPtr
454- cbFn := *TestFuncVar455+ } else {
455- cbFn(arg0)456+ fcb := func(arg0 uintptr) {
457+ cbFn := *TestFuncVar
458+ cbFn(arg0)
459+ }
460+ TestFuncVarRef = purego.NewCallback(fcb)
461+ SaveCallback(TestFuncVarPtr, TestFuncVarRef)
456 }462 }
457- TestFuncVarRef = purego.NewCallback(fcb)
458- SaveCallback(TestFuncVarPtr, TestFuncVarRef)
459 }463 }
460 464
461- DataFreeFuncVarPtr := uintptr(unsafe.Pointer(DataFreeFuncVar))
462 var DataFreeFuncVarRef uintptr465 var DataFreeFuncVarRef uintptr
463- if cbRefPtr, ok := GetCallback(DataFreeFuncVarPtr); ok {466+ if DataFreeFuncVar != nil {
464- DataFreeFuncVarRef = cbRefPtr467+ DataFreeFuncVarPtr := uintptr(unsafe.Pointer(DataFreeFuncVar))
465- } else {468+ if cbRefPtr, ok := GetCallback(DataFreeFuncVarPtr); ok {
466- fcb := func(arg0 uintptr) {469+ DataFreeFuncVarRef = cbRefPtr
467- cbFn := *DataFreeFuncVar470+ } else {
468- cbFn(arg0)471+ fcb := func(arg0 uintptr) {
472+ cbFn := *DataFreeFuncVar
473+ cbFn(arg0)
474+ }
475+ DataFreeFuncVarRef = purego.NewCallback(fcb)
476+ SaveCallback(DataFreeFuncVarPtr, DataFreeFuncVarRef)
469 }477 }
470- DataFreeFuncVarRef = purego.NewCallback(fcb)
471- SaveCallback(DataFreeFuncVarPtr, DataFreeFuncVarRef)
472 }478 }
473 479
474 xTestAddDataFuncFull(TestpathVar, TestDataVar, TestFuncVarRef, DataFreeFuncVarRef)480 xTestAddDataFuncFull(TestpathVar, TestDataVar, TestFuncVarRef, DataFreeFuncVarRef)
@@ -493,17 +499,19 @@ var xTestAddFunc func(string, uintptr)
493 // it is recommended to do so even if it isn’t.499 // it is recommended to do so even if it isn’t.
494 func TestAddFunc(TestpathVar string, TestFuncVar *TestFunc) {500 func TestAddFunc(TestpathVar string, TestFuncVar *TestFunc) {
495 501
496- TestFuncVarPtr := uintptr(unsafe.Pointer(TestFuncVar))
497 var TestFuncVarRef uintptr502 var TestFuncVarRef uintptr
498- if cbRefPtr, ok := GetCallback(TestFuncVarPtr); ok {503+ if TestFuncVar != nil {
499- TestFuncVarRef = cbRefPtr504+ TestFuncVarPtr := uintptr(unsafe.Pointer(TestFuncVar))
500- } else {505+ if cbRefPtr, ok := GetCallback(TestFuncVarPtr); ok {
501- fcb := func() {506+ TestFuncVarRef = cbRefPtr
502- cbFn := *TestFuncVar507+ } else {
503- cbFn()508+ fcb := func() {
509+ cbFn := *TestFuncVar
510+ cbFn()
511+ }
512+ TestFuncVarRef = purego.NewCallback(fcb)
513+ SaveCallback(TestFuncVarPtr, TestFuncVarRef)
504 }514 }
505- TestFuncVarRef = purego.NewCallback(fcb)
506- SaveCallback(TestFuncVarPtr, TestFuncVarRef)
507 }515 }
508 516
509 xTestAddFunc(TestpathVar, TestFuncVarRef)517 xTestAddFunc(TestpathVar, TestFuncVarRef)
@@ -514,43 +522,49 @@ var xTestAddVtable func(string, uint, uintptr, uintptr, uintptr, uintptr)
514 522
515 func TestAddVtable(TestpathVar string, DataSizeVar uint, TestDataVar uintptr, DataSetupVar *TestFixtureFunc, DataTestVar *TestFixtureFunc, DataTeardownVar *TestFixtureFunc) {523 func TestAddVtable(TestpathVar string, DataSizeVar uint, TestDataVar uintptr, DataSetupVar *TestFixtureFunc, DataTestVar *TestFixtureFunc, DataTeardownVar *TestFixtureFunc) {
516 524
517- DataSetupVarPtr := uintptr(unsafe.Pointer(DataSetupVar))
518 var DataSetupVarRef uintptr525 var DataSetupVarRef uintptr
519- if cbRefPtr, ok := GetCallback(DataSetupVarPtr); ok {526+ if DataSetupVar != nil {
520- DataSetupVarRef = cbRefPtr527+ DataSetupVarPtr := uintptr(unsafe.Pointer(DataSetupVar))
521- } else {528+ if cbRefPtr, ok := GetCallback(DataSetupVarPtr); ok {
522- fcb := func(arg0 uintptr, arg1 uintptr) {529+ DataSetupVarRef = cbRefPtr
523- cbFn := *DataSetupVar530+ } else {
524- cbFn(arg0, arg1)531+ fcb := func(arg0 uintptr, arg1 uintptr) {
532+ cbFn := *DataSetupVar
533+ cbFn(arg0, arg1)
534+ }
535+ DataSetupVarRef = purego.NewCallback(fcb)
536+ SaveCallback(DataSetupVarPtr, DataSetupVarRef)
525 }537 }
526- DataSetupVarRef = purego.NewCallback(fcb)
527- SaveCallback(DataSetupVarPtr, DataSetupVarRef)
528 }538 }
529 539
530- DataTestVarPtr := uintptr(unsafe.Pointer(DataTestVar))
531 var DataTestVarRef uintptr540 var DataTestVarRef uintptr
532- if cbRefPtr, ok := GetCallback(DataTestVarPtr); ok {541+ if DataTestVar != nil {
533- DataTestVarRef = cbRefPtr542+ DataTestVarPtr := uintptr(unsafe.Pointer(DataTestVar))
534- } else {543+ if cbRefPtr, ok := GetCallback(DataTestVarPtr); ok {
535- fcb := func(arg0 uintptr, arg1 uintptr) {544+ DataTestVarRef = cbRefPtr
536- cbFn := *DataTestVar545+ } else {
537- cbFn(arg0, arg1)546+ fcb := func(arg0 uintptr, arg1 uintptr) {
547+ cbFn := *DataTestVar
548+ cbFn(arg0, arg1)
549+ }
550+ DataTestVarRef = purego.NewCallback(fcb)
551+ SaveCallback(DataTestVarPtr, DataTestVarRef)
538 }552 }
539- DataTestVarRef = purego.NewCallback(fcb)
540- SaveCallback(DataTestVarPtr, DataTestVarRef)
541 }553 }
542 554
543- DataTeardownVarPtr := uintptr(unsafe.Pointer(DataTeardownVar))
544 var DataTeardownVarRef uintptr555 var DataTeardownVarRef uintptr
545- if cbRefPtr, ok := GetCallback(DataTeardownVarPtr); ok {556+ if DataTeardownVar != nil {
546- DataTeardownVarRef = cbRefPtr557+ DataTeardownVarPtr := uintptr(unsafe.Pointer(DataTeardownVar))
547- } else {558+ if cbRefPtr, ok := GetCallback(DataTeardownVarPtr); ok {
548- fcb := func(arg0 uintptr, arg1 uintptr) {559+ DataTeardownVarRef = cbRefPtr
549- cbFn := *DataTeardownVar560+ } else {
550- cbFn(arg0, arg1)561+ fcb := func(arg0 uintptr, arg1 uintptr) {
562+ cbFn := *DataTeardownVar
563+ cbFn(arg0, arg1)
564+ }
565+ DataTeardownVarRef = purego.NewCallback(fcb)
566+ SaveCallback(DataTeardownVarPtr, DataTeardownVarRef)
551 }567 }
552- DataTeardownVarRef = purego.NewCallback(fcb)
553- SaveCallback(DataTeardownVarPtr, DataTeardownVarRef)
554 }568 }
555 569
556 xTestAddVtable(TestpathVar, DataSizeVar, TestDataVar, DataSetupVarRef, DataTestVarRef, DataTeardownVarRef)570 xTestAddVtable(TestpathVar, DataSizeVar, TestDataVar, DataSetupVarRef, DataTestVarRef, DataTeardownVarRef)
@@ -657,43 +671,49 @@ var xTestCreateCase func(string, uint, uintptr, uintptr, uintptr, uintptr) *Test
657 // varying @test_name and @data_test arguments.671 // varying @test_name and @data_test arguments.
658 func TestCreateCase(TestNameVar string, DataSizeVar uint, TestDataVar uintptr, DataSetupVar *TestFixtureFunc, DataTestVar *TestFixtureFunc, DataTeardownVar *TestFixtureFunc) *TestCase {672 func TestCreateCase(TestNameVar string, DataSizeVar uint, TestDataVar uintptr, DataSetupVar *TestFixtureFunc, DataTestVar *TestFixtureFunc, DataTeardownVar *TestFixtureFunc) *TestCase {
659 673
660- DataSetupVarPtr := uintptr(unsafe.Pointer(DataSetupVar))
661 var DataSetupVarRef uintptr674 var DataSetupVarRef uintptr
662- if cbRefPtr, ok := GetCallback(DataSetupVarPtr); ok {675+ if DataSetupVar != nil {
663- DataSetupVarRef = cbRefPtr676+ DataSetupVarPtr := uintptr(unsafe.Pointer(DataSetupVar))
664- } else {677+ if cbRefPtr, ok := GetCallback(DataSetupVarPtr); ok {
665- fcb := func(arg0 uintptr, arg1 uintptr) {678+ DataSetupVarRef = cbRefPtr
666- cbFn := *DataSetupVar679+ } else {
667- cbFn(arg0, arg1)680+ fcb := func(arg0 uintptr, arg1 uintptr) {
681+ cbFn := *DataSetupVar
682+ cbFn(arg0, arg1)
683+ }
684+ DataSetupVarRef = purego.NewCallback(fcb)
685+ SaveCallback(DataSetupVarPtr, DataSetupVarRef)
668 }686 }
669- DataSetupVarRef = purego.NewCallback(fcb)
670- SaveCallback(DataSetupVarPtr, DataSetupVarRef)
671 }687 }
672 688
673- DataTestVarPtr := uintptr(unsafe.Pointer(DataTestVar))
674 var DataTestVarRef uintptr689 var DataTestVarRef uintptr
675- if cbRefPtr, ok := GetCallback(DataTestVarPtr); ok {690+ if DataTestVar != nil {
676- DataTestVarRef = cbRefPtr691+ DataTestVarPtr := uintptr(unsafe.Pointer(DataTestVar))
677- } else {692+ if cbRefPtr, ok := GetCallback(DataTestVarPtr); ok {
678- fcb := func(arg0 uintptr, arg1 uintptr) {693+ DataTestVarRef = cbRefPtr
679- cbFn := *DataTestVar694+ } else {
680- cbFn(arg0, arg1)695+ fcb := func(arg0 uintptr, arg1 uintptr) {
696+ cbFn := *DataTestVar
697+ cbFn(arg0, arg1)
698+ }
699+ DataTestVarRef = purego.NewCallback(fcb)
700+ SaveCallback(DataTestVarPtr, DataTestVarRef)
681 }701 }
682- DataTestVarRef = purego.NewCallback(fcb)
683- SaveCallback(DataTestVarPtr, DataTestVarRef)
684 }702 }
685 703
686- DataTeardownVarPtr := uintptr(unsafe.Pointer(DataTeardownVar))
687 var DataTeardownVarRef uintptr704 var DataTeardownVarRef uintptr
688- if cbRefPtr, ok := GetCallback(DataTeardownVarPtr); ok {705+ if DataTeardownVar != nil {
689- DataTeardownVarRef = cbRefPtr706+ DataTeardownVarPtr := uintptr(unsafe.Pointer(DataTeardownVar))
690- } else {707+ if cbRefPtr, ok := GetCallback(DataTeardownVarPtr); ok {
691- fcb := func(arg0 uintptr, arg1 uintptr) {708+ DataTeardownVarRef = cbRefPtr
692- cbFn := *DataTeardownVar709+ } else {
693- cbFn(arg0, arg1)710+ fcb := func(arg0 uintptr, arg1 uintptr) {
711+ cbFn := *DataTeardownVar
712+ cbFn(arg0, arg1)
713+ }
714+ DataTeardownVarRef = purego.NewCallback(fcb)
715+ SaveCallback(DataTeardownVarPtr, DataTeardownVarRef)
694 }716 }
695- DataTeardownVarRef = purego.NewCallback(fcb)
696- SaveCallback(DataTeardownVarPtr, DataTeardownVarRef)
697 }717 }
698 718
699 cret := xTestCreateCase(TestNameVar, DataSizeVar, TestDataVar, DataSetupVarRef, DataTestVarRef, DataTeardownVarRef)719 cret := xTestCreateCase(TestNameVar, DataSizeVar, TestDataVar, DataSetupVarRef, DataTestVarRef, DataTeardownVarRef)
@@ -1009,17 +1029,19 @@ var xTestLogSetFatalHandler func(uintptr, uintptr)
1009 // [Using Structured Logging](logging.html#using-structured-logging).1029 // [Using Structured Logging](logging.html#using-structured-logging).
1010 func TestLogSetFatalHandler(LogFuncVar *TestLogFatalFunc, UserDataVar uintptr) {1030 func TestLogSetFatalHandler(LogFuncVar *TestLogFatalFunc, UserDataVar uintptr) {
1011 1031
1012- LogFuncVarPtr := uintptr(unsafe.Pointer(LogFuncVar))
1013 var LogFuncVarRef uintptr1032 var LogFuncVarRef uintptr
1014- if cbRefPtr, ok := GetCallback(LogFuncVarPtr); ok {1033+ if LogFuncVar != nil {
1015- LogFuncVarRef = cbRefPtr1034+ LogFuncVarPtr := uintptr(unsafe.Pointer(LogFuncVar))
1016- } else {1035+ if cbRefPtr, ok := GetCallback(LogFuncVarPtr); ok {
1017- fcb := func(arg0 string, arg1 LogLevelFlags, arg2 string, arg3 uintptr) bool {1036+ LogFuncVarRef = cbRefPtr
1018- cbFn := *LogFuncVar1037+ } else {
1019- return cbFn(arg0, arg1, arg2, arg3)1038+ fcb := func(arg0 string, arg1 LogLevelFlags, arg2 string, arg3 uintptr) bool {
1039+ cbFn := *LogFuncVar
1040+ return cbFn(arg0, arg1, arg2, arg3)
1041+ }
1042+ LogFuncVarRef = purego.NewCallback(fcb)
1043+ SaveCallback(LogFuncVarPtr, LogFuncVarRef)
1020 }1044 }
1021- LogFuncVarRef = purego.NewCallback(fcb)
1022- SaveCallback(LogFuncVarPtr, LogFuncVarRef)
1023 }1045 }
1024 1046
1025 xTestLogSetFatalHandler(LogFuncVarRef, UserDataVar)1047 xTestLogSetFatalHandler(LogFuncVarRef, UserDataVar)
@@ -1082,17 +1104,19 @@ var xTestQueueDestroy func(uintptr, uintptr)
1082 // before `A()` during teardown.1104 // before `A()` during teardown.
1083 func TestQueueDestroy(DestroyFuncVar *DestroyNotify, DestroyDataVar uintptr) {1105 func TestQueueDestroy(DestroyFuncVar *DestroyNotify, DestroyDataVar uintptr) {
1084 1106
1085- DestroyFuncVarPtr := uintptr(unsafe.Pointer(DestroyFuncVar))
1086 var DestroyFuncVarRef uintptr1107 var DestroyFuncVarRef uintptr
1087- if cbRefPtr, ok := GetCallback(DestroyFuncVarPtr); ok {1108+ if DestroyFuncVar != nil {
1088- DestroyFuncVarRef = cbRefPtr1109+ DestroyFuncVarPtr := uintptr(unsafe.Pointer(DestroyFuncVar))
1089- } else {1110+ if cbRefPtr, ok := GetCallback(DestroyFuncVarPtr); ok {
1090- fcb := func(arg0 uintptr) {1111+ DestroyFuncVarRef = cbRefPtr
1091- cbFn := *DestroyFuncVar1112+ } else {
1092- cbFn(arg0)1113+ fcb := func(arg0 uintptr) {
1114+ cbFn := *DestroyFuncVar
1115+ cbFn(arg0)
1116+ }
1117+ DestroyFuncVarRef = purego.NewCallback(fcb)
1118+ SaveCallback(DestroyFuncVarPtr, DestroyFuncVarRef)
1093 }1119 }
1094- DestroyFuncVarRef = purego.NewCallback(fcb)
1095- SaveCallback(DestroyFuncVarPtr, DestroyFuncVarRef)
1096 }1120 }
1097 1121
1098 xTestQueueDestroy(DestroyFuncVarRef, DestroyDataVar)1122 xTestQueueDestroy(DestroyFuncVarRef, DestroyDataVar)
M v4/glib/gthread.go +88 -72
@@ -281,17 +281,19 @@ var xOnceImpl func(uintptr, uintptr, uintptr) uintptr
281 281
282 func (x *Once) Impl(FuncVar *ThreadFunc, ArgVar uintptr) uintptr {282 func (x *Once) Impl(FuncVar *ThreadFunc, ArgVar uintptr) uintptr {
283 283
284- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
285 var FuncVarRef uintptr284 var FuncVarRef uintptr
286- if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {285+ if FuncVar != nil {
287- FuncVarRef = cbRefPtr286+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
288- } else {287+ if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
289- fcb := func(arg0 uintptr) uintptr {288+ FuncVarRef = cbRefPtr
290- cbFn := *FuncVar289+ } else {
291- return cbFn(arg0)290+ fcb := func(arg0 uintptr) uintptr {
291+ cbFn := *FuncVar
292+ return cbFn(arg0)
293+ }
294+ FuncVarRef = purego.NewCallback(fcb)
295+ SaveCallback(FuncVarPtr, FuncVarRef)
292 }296 }
293- FuncVarRef = purego.NewCallback(fcb)
294- SaveCallback(FuncVarPtr, FuncVarRef)
295 }297 }
296 298
297 cret := xOnceImpl(x.GoPointer(), FuncVarRef, ArgVar)299 cret := xOnceImpl(x.GoPointer(), FuncVarRef, ArgVar)
@@ -872,17 +874,19 @@ var xStaticPrivateSet func(uintptr, uintptr, uintptr)
872 // @notify is used quite differently from @destructor in g_private_new().874 // @notify is used quite differently from @destructor in g_private_new().
873 func (x *StaticPrivate) Set(DataVar uintptr, NotifyVar *DestroyNotify) {875 func (x *StaticPrivate) Set(DataVar uintptr, NotifyVar *DestroyNotify) {
874 876
875- NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
876 var NotifyVarRef uintptr877 var NotifyVarRef uintptr
877- if cbRefPtr, ok := GetCallback(NotifyVarPtr); ok {878+ if NotifyVar != nil {
878- NotifyVarRef = cbRefPtr879+ NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
879- } else {880+ if cbRefPtr, ok := GetCallback(NotifyVarPtr); ok {
880- fcb := func(arg0 uintptr) {881+ NotifyVarRef = cbRefPtr
881- cbFn := *NotifyVar882+ } else {
882- cbFn(arg0)883+ fcb := func(arg0 uintptr) {
884+ cbFn := *NotifyVar
885+ cbFn(arg0)
886+ }
887+ NotifyVarRef = purego.NewCallback(fcb)
888+ SaveCallback(NotifyVarPtr, NotifyVarRef)
883 }889 }
884- NotifyVarRef = purego.NewCallback(fcb)
885- SaveCallback(NotifyVarPtr, NotifyVarRef)
886 }890 }
887 891
888 xStaticPrivateSet(x.GoPointer(), DataVar, NotifyVarRef)892 xStaticPrivateSet(x.GoPointer(), DataVar, NotifyVarRef)
@@ -1276,17 +1280,19 @@ var xNewThread func(string, uintptr, uintptr) *Thread
1276 // POSIX and all threads inherit their parent thread's priority.1280 // POSIX and all threads inherit their parent thread's priority.
1277 func NewThread(NameVar string, FuncVar *ThreadFunc, DataVar uintptr) *Thread {1281 func NewThread(NameVar string, FuncVar *ThreadFunc, DataVar uintptr) *Thread {
1278 1282
1279- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
1280 var FuncVarRef uintptr1283 var FuncVarRef uintptr
1281- if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {1284+ if FuncVar != nil {
1282- FuncVarRef = cbRefPtr1285+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
1283- } else {1286+ if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
1284- fcb := func(arg0 uintptr) uintptr {1287+ FuncVarRef = cbRefPtr
1285- cbFn := *FuncVar1288+ } else {
1286- return cbFn(arg0)1289+ fcb := func(arg0 uintptr) uintptr {
1290+ cbFn := *FuncVar
1291+ return cbFn(arg0)
1292+ }
1293+ FuncVarRef = purego.NewCallback(fcb)
1294+ SaveCallback(FuncVarPtr, FuncVarRef)
1287 }1295 }
1288- FuncVarRef = purego.NewCallback(fcb)
1289- SaveCallback(FuncVarPtr, FuncVarRef)
1290 }1296 }
1291 1297
1292 cret := xNewThread(NameVar, FuncVarRef, DataVar)1298 cret := xNewThread(NameVar, FuncVarRef, DataVar)
@@ -1303,17 +1309,19 @@ var xThreadTryNew func(string, uintptr, uintptr, **Error) *Thread
1303 func ThreadTryNew(NameVar string, FuncVar *ThreadFunc, DataVar uintptr) (*Thread, error) {1309 func ThreadTryNew(NameVar string, FuncVar *ThreadFunc, DataVar uintptr) (*Thread, error) {
1304 var cerr *Error1310 var cerr *Error
1305 1311
1306- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
1307 var FuncVarRef uintptr1312 var FuncVarRef uintptr
1308- if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {1313+ if FuncVar != nil {
1309- FuncVarRef = cbRefPtr1314+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
1310- } else {1315+ if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
1311- fcb := func(arg0 uintptr) uintptr {1316+ FuncVarRef = cbRefPtr
1312- cbFn := *FuncVar1317+ } else {
1313- return cbFn(arg0)1318+ fcb := func(arg0 uintptr) uintptr {
1319+ cbFn := *FuncVar
1320+ return cbFn(arg0)
1321+ }
1322+ FuncVarRef = purego.NewCallback(fcb)
1323+ SaveCallback(FuncVarPtr, FuncVarRef)
1314 }1324 }
1315- FuncVarRef = purego.NewCallback(fcb)
1316- SaveCallback(FuncVarPtr, FuncVarRef)
1317 }1325 }
1318 1326
1319 cret := xThreadTryNew(NameVar, FuncVarRef, DataVar, &cerr)1327 cret := xThreadTryNew(NameVar, FuncVarRef, DataVar, &cerr)
@@ -2212,17 +2220,19 @@ var xPrivateNew func(uintptr) *Private
2212 // Creates a new #GPrivate.2220 // Creates a new #GPrivate.
2213 func PrivateNew(NotifyVar *DestroyNotify) *Private {2221 func PrivateNew(NotifyVar *DestroyNotify) *Private {
2214 2222
2215- NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
2216 var NotifyVarRef uintptr2223 var NotifyVarRef uintptr
2217- if cbRefPtr, ok := GetCallback(NotifyVarPtr); ok {2224+ if NotifyVar != nil {
2218- NotifyVarRef = cbRefPtr2225+ NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
2219- } else {2226+ if cbRefPtr, ok := GetCallback(NotifyVarPtr); ok {
2220- fcb := func(arg0 uintptr) {2227+ NotifyVarRef = cbRefPtr
2221- cbFn := *NotifyVar2228+ } else {
2222- cbFn(arg0)2229+ fcb := func(arg0 uintptr) {
2230+ cbFn := *NotifyVar
2231+ cbFn(arg0)
2232+ }
2233+ NotifyVarRef = purego.NewCallback(fcb)
2234+ SaveCallback(NotifyVarPtr, NotifyVarRef)
2223 }2235 }
2224- NotifyVarRef = purego.NewCallback(fcb)
2225- SaveCallback(NotifyVarPtr, NotifyVarRef)
2226 }2236 }
2227 2237
2228 cret := xPrivateNew(NotifyVarRef)2238 cret := xPrivateNew(NotifyVarRef)
@@ -2246,17 +2256,19 @@ var xThreadCreate func(uintptr, uintptr, bool, **Error) *Thread
2246 func ThreadCreate(FuncVar *ThreadFunc, DataVar uintptr, JoinableVar bool) (*Thread, error) {2256 func ThreadCreate(FuncVar *ThreadFunc, DataVar uintptr, JoinableVar bool) (*Thread, error) {
2247 var cerr *Error2257 var cerr *Error
2248 2258
2249- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
2250 var FuncVarRef uintptr2259 var FuncVarRef uintptr
2251- if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {2260+ if FuncVar != nil {
2252- FuncVarRef = cbRefPtr2261+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
2253- } else {2262+ if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
2254- fcb := func(arg0 uintptr) uintptr {2263+ FuncVarRef = cbRefPtr
2255- cbFn := *FuncVar2264+ } else {
2256- return cbFn(arg0)2265+ fcb := func(arg0 uintptr) uintptr {
2266+ cbFn := *FuncVar
2267+ return cbFn(arg0)
2268+ }
2269+ FuncVarRef = purego.NewCallback(fcb)
2270+ SaveCallback(FuncVarPtr, FuncVarRef)
2257 }2271 }
2258- FuncVarRef = purego.NewCallback(fcb)
2259- SaveCallback(FuncVarPtr, FuncVarRef)
2260 }2272 }
2261 2273
2262 cret := xThreadCreate(FuncVarRef, DataVar, JoinableVar, &cerr)2274 cret := xThreadCreate(FuncVarRef, DataVar, JoinableVar, &cerr)
@@ -2273,17 +2285,19 @@ var xThreadCreateFull func(uintptr, uintptr, uint32, bool, bool, ThreadPriority,
2273 func ThreadCreateFull(FuncVar *ThreadFunc, DataVar uintptr, StackSizeVar uint32, JoinableVar bool, BoundVar bool, PriorityVar ThreadPriority) (*Thread, error) {2285 func ThreadCreateFull(FuncVar *ThreadFunc, DataVar uintptr, StackSizeVar uint32, JoinableVar bool, BoundVar bool, PriorityVar ThreadPriority) (*Thread, error) {
2274 var cerr *Error2286 var cerr *Error
2275 2287
2276- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
2277 var FuncVarRef uintptr2288 var FuncVarRef uintptr
2278- if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {2289+ if FuncVar != nil {
2279- FuncVarRef = cbRefPtr2290+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
2280- } else {2291+ if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
2281- fcb := func(arg0 uintptr) uintptr {2292+ FuncVarRef = cbRefPtr
2282- cbFn := *FuncVar2293+ } else {
2283- return cbFn(arg0)2294+ fcb := func(arg0 uintptr) uintptr {
2295+ cbFn := *FuncVar
2296+ return cbFn(arg0)
2297+ }
2298+ FuncVarRef = purego.NewCallback(fcb)
2299+ SaveCallback(FuncVarPtr, FuncVarRef)
2284 }2300 }
2285- FuncVarRef = purego.NewCallback(fcb)
2286- SaveCallback(FuncVarPtr, FuncVarRef)
2287 }2301 }
2288 2302
2289 cret := xThreadCreateFull(FuncVarRef, DataVar, StackSizeVar, JoinableVar, BoundVar, PriorityVar, &cerr)2303 cret := xThreadCreateFull(FuncVarRef, DataVar, StackSizeVar, JoinableVar, BoundVar, PriorityVar, &cerr)
@@ -2330,17 +2344,19 @@ var xThreadForeach func(uintptr, uintptr)
2330 // which is quadratic in the number of existing threads.2344 // which is quadratic in the number of existing threads.
2331 func ThreadForeach(ThreadFuncVar *Func, UserDataVar uintptr) {2345 func ThreadForeach(ThreadFuncVar *Func, UserDataVar uintptr) {
2332 2346
2333- ThreadFuncVarPtr := uintptr(unsafe.Pointer(ThreadFuncVar))
2334 var ThreadFuncVarRef uintptr2347 var ThreadFuncVarRef uintptr
2335- if cbRefPtr, ok := GetCallback(ThreadFuncVarPtr); ok {2348+ if ThreadFuncVar != nil {
2336- ThreadFuncVarRef = cbRefPtr2349+ ThreadFuncVarPtr := uintptr(unsafe.Pointer(ThreadFuncVar))
2337- } else {2350+ if cbRefPtr, ok := GetCallback(ThreadFuncVarPtr); ok {
2338- fcb := func(arg0 uintptr, arg1 uintptr) {2351+ ThreadFuncVarRef = cbRefPtr
2339- cbFn := *ThreadFuncVar2352+ } else {
2340- cbFn(arg0, arg1)2353+ fcb := func(arg0 uintptr, arg1 uintptr) {
2354+ cbFn := *ThreadFuncVar
2355+ cbFn(arg0, arg1)
2356+ }
2357+ ThreadFuncVarRef = purego.NewCallback(fcb)
2358+ SaveCallback(ThreadFuncVarPtr, ThreadFuncVarRef)
2341 }2359 }
2342- ThreadFuncVarRef = purego.NewCallback(fcb)
2343- SaveCallback(ThreadFuncVarPtr, ThreadFuncVarRef)
2344 }2360 }
2345 2361
2346 xThreadForeach(ThreadFuncVarRef, UserDataVar)2362 xThreadForeach(ThreadFuncVarRef, UserDataVar)
M v4/glib/gthreadpool.go +11 -9
@@ -172,17 +172,19 @@ var xThreadPoolSetSortFunction func(uintptr, uintptr, uintptr)
172 // created.172 // created.
173 func (x *ThreadPool) SetSortFunction(FuncVar *CompareDataFunc, UserDataVar uintptr) {173 func (x *ThreadPool) SetSortFunction(FuncVar *CompareDataFunc, UserDataVar uintptr) {
174 174
175- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
176 var FuncVarRef uintptr175 var FuncVarRef uintptr
177- if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {176+ if FuncVar != nil {
178- FuncVarRef = cbRefPtr177+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
179- } else {178+ if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
180- fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int {179+ FuncVarRef = cbRefPtr
181- cbFn := *FuncVar180+ } else {
182- return cbFn(arg0, arg1, arg2)181+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int {
182+ cbFn := *FuncVar
183+ return cbFn(arg0, arg1, arg2)
184+ }
185+ FuncVarRef = purego.NewCallback(fcb)
186+ SaveCallback(FuncVarPtr, FuncVarRef)
183 }187 }
184- FuncVarRef = purego.NewCallback(fcb)
185- SaveCallback(FuncVarPtr, FuncVarRef)
186 }188 }
187 189
188 xThreadPoolSetSortFunction(x.GoPointer(), FuncVarRef, UserDataVar)190 xThreadPoolSetSortFunction(x.GoPointer(), FuncVarRef, UserDataVar)
M v4/glib/gtree.go +110 -90
@@ -44,17 +44,19 @@ var xNewTree func(uintptr) *Tree
44 // Creates a new #GTree.44 // Creates a new #GTree.
45 func NewTree(KeyCompareFuncVar *CompareFunc) *Tree {45 func NewTree(KeyCompareFuncVar *CompareFunc) *Tree {
46 46
47- KeyCompareFuncVarPtr := uintptr(unsafe.Pointer(KeyCompareFuncVar))
48 var KeyCompareFuncVarRef uintptr47 var KeyCompareFuncVarRef uintptr
49- if cbRefPtr, ok := GetCallback(KeyCompareFuncVarPtr); ok {48+ if KeyCompareFuncVar != nil {
50- KeyCompareFuncVarRef = cbRefPtr49+ KeyCompareFuncVarPtr := uintptr(unsafe.Pointer(KeyCompareFuncVar))
51- } else {50+ if cbRefPtr, ok := GetCallback(KeyCompareFuncVarPtr); ok {
52- fcb := func(arg0 uintptr, arg1 uintptr) int {51+ KeyCompareFuncVarRef = cbRefPtr
53- cbFn := *KeyCompareFuncVar52+ } else {
54- return cbFn(arg0, arg1)53+ fcb := func(arg0 uintptr, arg1 uintptr) int {
54+ cbFn := *KeyCompareFuncVar
55+ return cbFn(arg0, arg1)
56+ }
57+ KeyCompareFuncVarRef = purego.NewCallback(fcb)
58+ SaveCallback(KeyCompareFuncVarPtr, KeyCompareFuncVarRef)
55 }59 }
56- KeyCompareFuncVarRef = purego.NewCallback(fcb)
57- SaveCallback(KeyCompareFuncVarPtr, KeyCompareFuncVarRef)
58 }60 }
59 61
60 cret := xNewTree(KeyCompareFuncVarRef)62 cret := xNewTree(KeyCompareFuncVarRef)
@@ -68,43 +70,49 @@ var xNewTreeFull func(uintptr, uintptr, uintptr, uintptr) *Tree
68 // removing the entry from the #GTree.70 // removing the entry from the #GTree.
69 func NewTreeFull(KeyCompareFuncVar *CompareDataFunc, KeyCompareDataVar uintptr, KeyDestroyFuncVar *DestroyNotify, ValueDestroyFuncVar *DestroyNotify) *Tree {71 func NewTreeFull(KeyCompareFuncVar *CompareDataFunc, KeyCompareDataVar uintptr, KeyDestroyFuncVar *DestroyNotify, ValueDestroyFuncVar *DestroyNotify) *Tree {
70 72
71- KeyCompareFuncVarPtr := uintptr(unsafe.Pointer(KeyCompareFuncVar))
72 var KeyCompareFuncVarRef uintptr73 var KeyCompareFuncVarRef uintptr
73- if cbRefPtr, ok := GetCallback(KeyCompareFuncVarPtr); ok {74+ if KeyCompareFuncVar != nil {
74- KeyCompareFuncVarRef = cbRefPtr75+ KeyCompareFuncVarPtr := uintptr(unsafe.Pointer(KeyCompareFuncVar))
75- } else {76+ if cbRefPtr, ok := GetCallback(KeyCompareFuncVarPtr); ok {
76- fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int {77+ KeyCompareFuncVarRef = cbRefPtr
77- cbFn := *KeyCompareFuncVar78+ } else {
78- return cbFn(arg0, arg1, arg2)79+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int {
80+ cbFn := *KeyCompareFuncVar
81+ return cbFn(arg0, arg1, arg2)
82+ }
83+ KeyCompareFuncVarRef = purego.NewCallback(fcb)
84+ SaveCallback(KeyCompareFuncVarPtr, KeyCompareFuncVarRef)
79 }85 }
80- KeyCompareFuncVarRef = purego.NewCallback(fcb)
81- SaveCallback(KeyCompareFuncVarPtr, KeyCompareFuncVarRef)
82 }86 }
83 87
84- KeyDestroyFuncVarPtr := uintptr(unsafe.Pointer(KeyDestroyFuncVar))
85 var KeyDestroyFuncVarRef uintptr88 var KeyDestroyFuncVarRef uintptr
86- if cbRefPtr, ok := GetCallback(KeyDestroyFuncVarPtr); ok {89+ if KeyDestroyFuncVar != nil {
87- KeyDestroyFuncVarRef = cbRefPtr90+ KeyDestroyFuncVarPtr := uintptr(unsafe.Pointer(KeyDestroyFuncVar))
88- } else {91+ if cbRefPtr, ok := GetCallback(KeyDestroyFuncVarPtr); ok {
89- fcb := func(arg0 uintptr) {92+ KeyDestroyFuncVarRef = cbRefPtr
90- cbFn := *KeyDestroyFuncVar93+ } else {
91- cbFn(arg0)94+ fcb := func(arg0 uintptr) {
95+ cbFn := *KeyDestroyFuncVar
96+ cbFn(arg0)
97+ }
98+ KeyDestroyFuncVarRef = purego.NewCallback(fcb)
99+ SaveCallback(KeyDestroyFuncVarPtr, KeyDestroyFuncVarRef)
92 }100 }
93- KeyDestroyFuncVarRef = purego.NewCallback(fcb)
94- SaveCallback(KeyDestroyFuncVarPtr, KeyDestroyFuncVarRef)
95 }101 }
96 102
97- ValueDestroyFuncVarPtr := uintptr(unsafe.Pointer(ValueDestroyFuncVar))
98 var ValueDestroyFuncVarRef uintptr103 var ValueDestroyFuncVarRef uintptr
99- if cbRefPtr, ok := GetCallback(ValueDestroyFuncVarPtr); ok {104+ if ValueDestroyFuncVar != nil {
100- ValueDestroyFuncVarRef = cbRefPtr105+ ValueDestroyFuncVarPtr := uintptr(unsafe.Pointer(ValueDestroyFuncVar))
101- } else {106+ if cbRefPtr, ok := GetCallback(ValueDestroyFuncVarPtr); ok {
102- fcb := func(arg0 uintptr) {107+ ValueDestroyFuncVarRef = cbRefPtr
103- cbFn := *ValueDestroyFuncVar108+ } else {
104- cbFn(arg0)109+ fcb := func(arg0 uintptr) {
110+ cbFn := *ValueDestroyFuncVar
111+ cbFn(arg0)
112+ }
113+ ValueDestroyFuncVarRef = purego.NewCallback(fcb)
114+ SaveCallback(ValueDestroyFuncVarPtr, ValueDestroyFuncVarRef)
105 }115 }
106- ValueDestroyFuncVarRef = purego.NewCallback(fcb)
107- SaveCallback(ValueDestroyFuncVarPtr, ValueDestroyFuncVarRef)
108 }116 }
109 117
110 cret := xNewTreeFull(KeyCompareFuncVarRef, KeyCompareDataVar, KeyDestroyFuncVarRef, ValueDestroyFuncVarRef)118 cret := xNewTreeFull(KeyCompareFuncVarRef, KeyCompareDataVar, KeyDestroyFuncVarRef, ValueDestroyFuncVarRef)
@@ -117,17 +125,19 @@ var xNewTreeWithData func(uintptr, uintptr) *Tree
117 // See g_tree_new() for more details.125 // See g_tree_new() for more details.
118 func NewTreeWithData(KeyCompareFuncVar *CompareDataFunc, KeyCompareDataVar uintptr) *Tree {126 func NewTreeWithData(KeyCompareFuncVar *CompareDataFunc, KeyCompareDataVar uintptr) *Tree {
119 127
120- KeyCompareFuncVarPtr := uintptr(unsafe.Pointer(KeyCompareFuncVar))
121 var KeyCompareFuncVarRef uintptr128 var KeyCompareFuncVarRef uintptr
122- if cbRefPtr, ok := GetCallback(KeyCompareFuncVarPtr); ok {129+ if KeyCompareFuncVar != nil {
123- KeyCompareFuncVarRef = cbRefPtr130+ KeyCompareFuncVarPtr := uintptr(unsafe.Pointer(KeyCompareFuncVar))
124- } else {131+ if cbRefPtr, ok := GetCallback(KeyCompareFuncVarPtr); ok {
125- fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int {132+ KeyCompareFuncVarRef = cbRefPtr
126- cbFn := *KeyCompareFuncVar133+ } else {
127- return cbFn(arg0, arg1, arg2)134+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int {
135+ cbFn := *KeyCompareFuncVar
136+ return cbFn(arg0, arg1, arg2)
137+ }
138+ KeyCompareFuncVarRef = purego.NewCallback(fcb)
139+ SaveCallback(KeyCompareFuncVarPtr, KeyCompareFuncVarRef)
128 }140 }
129- KeyCompareFuncVarRef = purego.NewCallback(fcb)
130- SaveCallback(KeyCompareFuncVarPtr, KeyCompareFuncVarRef)
131 }141 }
132 142
133 cret := xNewTreeWithData(KeyCompareFuncVarRef, KeyCompareDataVar)143 cret := xNewTreeWithData(KeyCompareFuncVarRef, KeyCompareDataVar)
@@ -160,17 +170,19 @@ var xTreeForeach func(uintptr, uintptr, uintptr)
160 // the tree, then walk the list and remove each item.170 // the tree, then walk the list and remove each item.
161 func (x *Tree) Foreach(FuncVar *TraverseFunc, UserDataVar uintptr) {171 func (x *Tree) Foreach(FuncVar *TraverseFunc, UserDataVar uintptr) {
162 172
163- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
164 var FuncVarRef uintptr173 var FuncVarRef uintptr
165- if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {174+ if FuncVar != nil {
166- FuncVarRef = cbRefPtr175+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
167- } else {176+ if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
168- fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) bool {177+ FuncVarRef = cbRefPtr
169- cbFn := *FuncVar178+ } else {
170- return cbFn(arg0, arg1, arg2)179+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) bool {
180+ cbFn := *FuncVar
181+ return cbFn(arg0, arg1, arg2)
182+ }
183+ FuncVarRef = purego.NewCallback(fcb)
184+ SaveCallback(FuncVarPtr, FuncVarRef)
171 }185 }
172- FuncVarRef = purego.NewCallback(fcb)
173- SaveCallback(FuncVarPtr, FuncVarRef)
174 }186 }
175 187
176 xTreeForeach(x.GoPointer(), FuncVarRef, UserDataVar)188 xTreeForeach(x.GoPointer(), FuncVarRef, UserDataVar)
@@ -189,17 +201,19 @@ var xTreeForeachNode func(uintptr, uintptr, uintptr)
189 // the tree, then walk the list and remove each item.201 // the tree, then walk the list and remove each item.
190 func (x *Tree) ForeachNode(FuncVar *TraverseNodeFunc, UserDataVar uintptr) {202 func (x *Tree) ForeachNode(FuncVar *TraverseNodeFunc, UserDataVar uintptr) {
191 203
192- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
193 var FuncVarRef uintptr204 var FuncVarRef uintptr
194- if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {205+ if FuncVar != nil {
195- FuncVarRef = cbRefPtr206+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
196- } else {207+ if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
197- fcb := func(arg0 *TreeNode, arg1 uintptr) bool {208+ FuncVarRef = cbRefPtr
198- cbFn := *FuncVar209+ } else {
199- return cbFn(arg0, arg1)210+ fcb := func(arg0 *TreeNode, arg1 uintptr) bool {
211+ cbFn := *FuncVar
212+ return cbFn(arg0, arg1)
213+ }
214+ FuncVarRef = purego.NewCallback(fcb)
215+ SaveCallback(FuncVarPtr, FuncVarRef)
200 }216 }
201- FuncVarRef = purego.NewCallback(fcb)
202- SaveCallback(FuncVarPtr, FuncVarRef)
203 }217 }
204 218
205 xTreeForeachNode(x.GoPointer(), FuncVarRef, UserDataVar)219 xTreeForeachNode(x.GoPointer(), FuncVarRef, UserDataVar)
@@ -408,17 +422,19 @@ var xTreeSearch func(uintptr, uintptr, uintptr) uintptr
408 // pairs that have a larger key.422 // pairs that have a larger key.
409 func (x *Tree) Search(SearchFuncVar *CompareFunc, UserDataVar uintptr) uintptr {423 func (x *Tree) Search(SearchFuncVar *CompareFunc, UserDataVar uintptr) uintptr {
410 424
411- SearchFuncVarPtr := uintptr(unsafe.Pointer(SearchFuncVar))
412 var SearchFuncVarRef uintptr425 var SearchFuncVarRef uintptr
413- if cbRefPtr, ok := GetCallback(SearchFuncVarPtr); ok {426+ if SearchFuncVar != nil {
414- SearchFuncVarRef = cbRefPtr427+ SearchFuncVarPtr := uintptr(unsafe.Pointer(SearchFuncVar))
415- } else {428+ if cbRefPtr, ok := GetCallback(SearchFuncVarPtr); ok {
416- fcb := func(arg0 uintptr, arg1 uintptr) int {429+ SearchFuncVarRef = cbRefPtr
417- cbFn := *SearchFuncVar430+ } else {
418- return cbFn(arg0, arg1)431+ fcb := func(arg0 uintptr, arg1 uintptr) int {
432+ cbFn := *SearchFuncVar
433+ return cbFn(arg0, arg1)
434+ }
435+ SearchFuncVarRef = purego.NewCallback(fcb)
436+ SaveCallback(SearchFuncVarPtr, SearchFuncVarRef)
419 }437 }
420- SearchFuncVarRef = purego.NewCallback(fcb)
421- SaveCallback(SearchFuncVarPtr, SearchFuncVarRef)
422 }438 }
423 439
424 cret := xTreeSearch(x.GoPointer(), SearchFuncVarRef, UserDataVar)440 cret := xTreeSearch(x.GoPointer(), SearchFuncVarRef, UserDataVar)
@@ -438,17 +454,19 @@ var xTreeSearchNode func(uintptr, uintptr, uintptr) *TreeNode
438 // pairs that have a larger key.454 // pairs that have a larger key.
439 func (x *Tree) SearchNode(SearchFuncVar *CompareFunc, UserDataVar uintptr) *TreeNode {455 func (x *Tree) SearchNode(SearchFuncVar *CompareFunc, UserDataVar uintptr) *TreeNode {
440 456
441- SearchFuncVarPtr := uintptr(unsafe.Pointer(SearchFuncVar))
442 var SearchFuncVarRef uintptr457 var SearchFuncVarRef uintptr
443- if cbRefPtr, ok := GetCallback(SearchFuncVarPtr); ok {458+ if SearchFuncVar != nil {
444- SearchFuncVarRef = cbRefPtr459+ SearchFuncVarPtr := uintptr(unsafe.Pointer(SearchFuncVar))
445- } else {460+ if cbRefPtr, ok := GetCallback(SearchFuncVarPtr); ok {
446- fcb := func(arg0 uintptr, arg1 uintptr) int {461+ SearchFuncVarRef = cbRefPtr
447- cbFn := *SearchFuncVar462+ } else {
448- return cbFn(arg0, arg1)463+ fcb := func(arg0 uintptr, arg1 uintptr) int {
464+ cbFn := *SearchFuncVar
465+ return cbFn(arg0, arg1)
466+ }
467+ SearchFuncVarRef = purego.NewCallback(fcb)
468+ SaveCallback(SearchFuncVarPtr, SearchFuncVarRef)
449 }469 }
450- SearchFuncVarRef = purego.NewCallback(fcb)
451- SaveCallback(SearchFuncVarPtr, SearchFuncVarRef)
452 }470 }
453 471
454 cret := xTreeSearchNode(x.GoPointer(), SearchFuncVarRef, UserDataVar)472 cret := xTreeSearchNode(x.GoPointer(), SearchFuncVarRef, UserDataVar)
@@ -472,17 +490,19 @@ var xTreeTraverse func(uintptr, uintptr, TraverseType, uintptr)
472 // Calls the given function for each node in the #GTree.490 // Calls the given function for each node in the #GTree.
473 func (x *Tree) Traverse(TraverseFuncVar *TraverseFunc, TraverseTypeVar TraverseType, UserDataVar uintptr) {491 func (x *Tree) Traverse(TraverseFuncVar *TraverseFunc, TraverseTypeVar TraverseType, UserDataVar uintptr) {
474 492
475- TraverseFuncVarPtr := uintptr(unsafe.Pointer(TraverseFuncVar))
476 var TraverseFuncVarRef uintptr493 var TraverseFuncVarRef uintptr
477- if cbRefPtr, ok := GetCallback(TraverseFuncVarPtr); ok {494+ if TraverseFuncVar != nil {
478- TraverseFuncVarRef = cbRefPtr495+ TraverseFuncVarPtr := uintptr(unsafe.Pointer(TraverseFuncVar))
479- } else {496+ if cbRefPtr, ok := GetCallback(TraverseFuncVarPtr); ok {
480- fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) bool {497+ TraverseFuncVarRef = cbRefPtr
481- cbFn := *TraverseFuncVar498+ } else {
482- return cbFn(arg0, arg1, arg2)499+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) bool {
500+ cbFn := *TraverseFuncVar
501+ return cbFn(arg0, arg1, arg2)
502+ }
503+ TraverseFuncVarRef = purego.NewCallback(fcb)
504+ SaveCallback(TraverseFuncVarPtr, TraverseFuncVarRef)
483 }505 }
484- TraverseFuncVarRef = purego.NewCallback(fcb)
485- SaveCallback(TraverseFuncVarPtr, TraverseFuncVarRef)
486 }506 }
487 507
488 xTreeTraverse(x.GoPointer(), TraverseFuncVarRef, TraverseTypeVar, UserDataVar)508 xTreeTraverse(x.GoPointer(), TraverseFuncVarRef, TraverseTypeVar, UserDataVar)
M v4/glib/gutils.go +11 -9
@@ -121,17 +121,19 @@ var xAtexit func(uintptr)
121 // program.121 // program.
122 func Atexit(FuncVar *VoidFunc) {122 func Atexit(FuncVar *VoidFunc) {
123 123
124- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
125 var FuncVarRef uintptr124 var FuncVarRef uintptr
126- if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {125+ if FuncVar != nil {
127- FuncVarRef = cbRefPtr126+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
128- } else {127+ if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
129- fcb := func() {128+ FuncVarRef = cbRefPtr
130- cbFn := *FuncVar129+ } else {
131- cbFn()130+ fcb := func() {
131+ cbFn := *FuncVar
132+ cbFn()
133+ }
134+ FuncVarRef = purego.NewCallback(fcb)
135+ SaveCallback(FuncVarPtr, FuncVarRef)
132 }136 }
133- FuncVarRef = purego.NewCallback(fcb)
134- SaveCallback(FuncVarPtr, FuncVarRef)
135 }137 }
136 138
137 xAtexit(FuncVarRef)139 xAtexit(FuncVarRef)
M v4/glib/gvariant.go +11 -9
@@ -466,17 +466,19 @@ var xNewVariantFromData func(*VariantType, []byte, uint, bool, uintptr, uintptr)
466 // process.466 // process.
467 func NewVariantFromData(TypeVar *VariantType, DataVar []byte, SizeVar uint, TrustedVar bool, NotifyVar *DestroyNotify, UserDataVar uintptr) *Variant {467 func NewVariantFromData(TypeVar *VariantType, DataVar []byte, SizeVar uint, TrustedVar bool, NotifyVar *DestroyNotify, UserDataVar uintptr) *Variant {
468 468
469- NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
470 var NotifyVarRef uintptr469 var NotifyVarRef uintptr
471- if cbRefPtr, ok := GetCallback(NotifyVarPtr); ok {470+ if NotifyVar != nil {
472- NotifyVarRef = cbRefPtr471+ NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
473- } else {472+ if cbRefPtr, ok := GetCallback(NotifyVarPtr); ok {
474- fcb := func(arg0 uintptr) {473+ NotifyVarRef = cbRefPtr
475- cbFn := *NotifyVar474+ } else {
476- cbFn(arg0)475+ fcb := func(arg0 uintptr) {
476+ cbFn := *NotifyVar
477+ cbFn(arg0)
478+ }
479+ NotifyVarRef = purego.NewCallback(fcb)
480+ SaveCallback(NotifyVarPtr, NotifyVarRef)
477 }481 }
478- NotifyVarRef = purego.NewCallback(fcb)
479- SaveCallback(NotifyVarPtr, NotifyVarRef)
480 }482 }
481 483
482 cret := xNewVariantFromData(TypeVar, DataVar, SizeVar, TrustedVar, NotifyVarRef, UserDataVar)484 cret := xNewVariantFromData(TypeVar, DataVar, SizeVar, TrustedVar, NotifyVarRef, UserDataVar)
M v4/gobject/gbindinggroup.go +11 -9
@@ -103,17 +103,19 @@ func (x *BindingGroup) BindFull(SourcePropertyVar string, TargetVar *Object, Tar
103 }103 }
104 }104 }
105 105
106- UserDataDestroyVarPtr := uintptr(unsafe.Pointer(UserDataDestroyVar))
107 var UserDataDestroyVarRef uintptr106 var UserDataDestroyVarRef uintptr
108- if cbRefPtr, ok := glib.GetCallback(UserDataDestroyVarPtr); ok {107+ if UserDataDestroyVar != nil {
109- UserDataDestroyVarRef = cbRefPtr108+ UserDataDestroyVarPtr := uintptr(unsafe.Pointer(UserDataDestroyVar))
110- } else {109+ if cbRefPtr, ok := glib.GetCallback(UserDataDestroyVarPtr); ok {
111- fcb := func(arg0 uintptr) {110+ UserDataDestroyVarRef = cbRefPtr
112- cbFn := *UserDataDestroyVar111+ } else {
113- cbFn(arg0)112+ fcb := func(arg0 uintptr) {
113+ cbFn := *UserDataDestroyVar
114+ cbFn(arg0)
115+ }
116+ UserDataDestroyVarRef = purego.NewCallback(fcb)
117+ glib.SaveCallback(UserDataDestroyVarPtr, UserDataDestroyVarRef)
114 }118 }
115- UserDataDestroyVarRef = purego.NewCallback(fcb)
116- glib.SaveCallback(UserDataDestroyVarPtr, UserDataDestroyVarRef)
117 }119 }
118 120
119 xBindingGroupBindFull(x.GoPointer(), SourcePropertyVar, TargetVar.GoPointer(), TargetPropertyVar, FlagsVar, TransformToVarRef, TransformFromVarRef, UserDataVar, UserDataDestroyVarRef)121 xBindingGroupBindFull(x.GoPointer(), SourcePropertyVar, TargetVar.GoPointer(), TargetPropertyVar, FlagsVar, TransformToVarRef, TransformFromVarRef, UserDataVar, UserDataDestroyVarRef)
M v4/gobject/gboxed.go +22 -18
@@ -49,30 +49,34 @@ var xBoxedTypeRegisterStatic func(string, uintptr, uintptr) types.GType
49 // will create the appropriate `*_get_type()` function for the boxed type.49 // will create the appropriate `*_get_type()` function for the boxed type.
50 func BoxedTypeRegisterStatic(NameVar string, BoxedCopyVar *BoxedCopyFunc, BoxedFreeVar *BoxedFreeFunc) types.GType {50 func BoxedTypeRegisterStatic(NameVar string, BoxedCopyVar *BoxedCopyFunc, BoxedFreeVar *BoxedFreeFunc) types.GType {
51 51
52- BoxedCopyVarPtr := uintptr(unsafe.Pointer(BoxedCopyVar))
53 var BoxedCopyVarRef uintptr52 var BoxedCopyVarRef uintptr
54- if cbRefPtr, ok := glib.GetCallback(BoxedCopyVarPtr); ok {53+ if BoxedCopyVar != nil {
55- BoxedCopyVarRef = cbRefPtr54+ BoxedCopyVarPtr := uintptr(unsafe.Pointer(BoxedCopyVar))
56- } else {55+ if cbRefPtr, ok := glib.GetCallback(BoxedCopyVarPtr); ok {
57- fcb := func(arg0 uintptr) uintptr {56+ BoxedCopyVarRef = cbRefPtr
58- cbFn := *BoxedCopyVar57+ } else {
59- return cbFn(arg0)58+ fcb := func(arg0 uintptr) uintptr {
59+ cbFn := *BoxedCopyVar
60+ return cbFn(arg0)
61+ }
62+ BoxedCopyVarRef = purego.NewCallback(fcb)
63+ glib.SaveCallback(BoxedCopyVarPtr, BoxedCopyVarRef)
60 }64 }
61- BoxedCopyVarRef = purego.NewCallback(fcb)
62- glib.SaveCallback(BoxedCopyVarPtr, BoxedCopyVarRef)
63 }65 }
64 66
65- BoxedFreeVarPtr := uintptr(unsafe.Pointer(BoxedFreeVar))
66 var BoxedFreeVarRef uintptr67 var BoxedFreeVarRef uintptr
67- if cbRefPtr, ok := glib.GetCallback(BoxedFreeVarPtr); ok {68+ if BoxedFreeVar != nil {
68- BoxedFreeVarRef = cbRefPtr69+ BoxedFreeVarPtr := uintptr(unsafe.Pointer(BoxedFreeVar))
69- } else {70+ if cbRefPtr, ok := glib.GetCallback(BoxedFreeVarPtr); ok {
70- fcb := func(arg0 uintptr) {71+ BoxedFreeVarRef = cbRefPtr
71- cbFn := *BoxedFreeVar72+ } else {
72- cbFn(arg0)73+ fcb := func(arg0 uintptr) {
74+ cbFn := *BoxedFreeVar
75+ cbFn(arg0)
76+ }
77+ BoxedFreeVarRef = purego.NewCallback(fcb)
78+ glib.SaveCallback(BoxedFreeVarPtr, BoxedFreeVarRef)
73 }79 }
74- BoxedFreeVarRef = purego.NewCallback(fcb)
75- glib.SaveCallback(BoxedFreeVarPtr, BoxedFreeVarRef)
76 }80 }
77 81
78 cret := xBoxedTypeRegisterStatic(NameVar, BoxedCopyVarRef, BoxedFreeVarRef)82 cret := xBoxedTypeRegisterStatic(NameVar, BoxedCopyVarRef, BoxedFreeVarRef)
M v4/gobject/gclosure.go +132 -108
@@ -203,17 +203,19 @@ var xClosureAddFinalizeNotifier func(uintptr, uintptr, uintptr)
203 // notifiers will be run before the finalize notifiers.203 // notifiers will be run before the finalize notifiers.
204 func (x *Closure) AddFinalizeNotifier(NotifyDataVar uintptr, NotifyFuncVar *ClosureNotify) {204 func (x *Closure) AddFinalizeNotifier(NotifyDataVar uintptr, NotifyFuncVar *ClosureNotify) {
205 205
206- NotifyFuncVarPtr := uintptr(unsafe.Pointer(NotifyFuncVar))
207 var NotifyFuncVarRef uintptr206 var NotifyFuncVarRef uintptr
208- if cbRefPtr, ok := glib.GetCallback(NotifyFuncVarPtr); ok {207+ if NotifyFuncVar != nil {
209- NotifyFuncVarRef = cbRefPtr208+ NotifyFuncVarPtr := uintptr(unsafe.Pointer(NotifyFuncVar))
210- } else {209+ if cbRefPtr, ok := glib.GetCallback(NotifyFuncVarPtr); ok {
211- fcb := func(arg0 uintptr, arg1 *Closure) {210+ NotifyFuncVarRef = cbRefPtr
212- cbFn := *NotifyFuncVar211+ } else {
213- cbFn(arg0, arg1)212+ fcb := func(arg0 uintptr, arg1 *Closure) {
213+ cbFn := *NotifyFuncVar
214+ cbFn(arg0, arg1)
215+ }
216+ NotifyFuncVarRef = purego.NewCallback(fcb)
217+ glib.SaveCallback(NotifyFuncVarPtr, NotifyFuncVarRef)
214 }218 }
215- NotifyFuncVarRef = purego.NewCallback(fcb)
216- glib.SaveCallback(NotifyFuncVarPtr, NotifyFuncVarRef)
217 }219 }
218 220
219 xClosureAddFinalizeNotifier(x.GoPointer(), NotifyDataVar, NotifyFuncVarRef)221 xClosureAddFinalizeNotifier(x.GoPointer(), NotifyDataVar, NotifyFuncVarRef)
@@ -229,17 +231,19 @@ var xClosureAddInvalidateNotifier func(uintptr, uintptr, uintptr)
229 // in an unspecified order.231 // in an unspecified order.
230 func (x *Closure) AddInvalidateNotifier(NotifyDataVar uintptr, NotifyFuncVar *ClosureNotify) {232 func (x *Closure) AddInvalidateNotifier(NotifyDataVar uintptr, NotifyFuncVar *ClosureNotify) {
231 233
232- NotifyFuncVarPtr := uintptr(unsafe.Pointer(NotifyFuncVar))
233 var NotifyFuncVarRef uintptr234 var NotifyFuncVarRef uintptr
234- if cbRefPtr, ok := glib.GetCallback(NotifyFuncVarPtr); ok {235+ if NotifyFuncVar != nil {
235- NotifyFuncVarRef = cbRefPtr236+ NotifyFuncVarPtr := uintptr(unsafe.Pointer(NotifyFuncVar))
236- } else {237+ if cbRefPtr, ok := glib.GetCallback(NotifyFuncVarPtr); ok {
237- fcb := func(arg0 uintptr, arg1 *Closure) {238+ NotifyFuncVarRef = cbRefPtr
238- cbFn := *NotifyFuncVar239+ } else {
239- cbFn(arg0, arg1)240+ fcb := func(arg0 uintptr, arg1 *Closure) {
241+ cbFn := *NotifyFuncVar
242+ cbFn(arg0, arg1)
243+ }
244+ NotifyFuncVarRef = purego.NewCallback(fcb)
245+ glib.SaveCallback(NotifyFuncVarPtr, NotifyFuncVarRef)
240 }246 }
241- NotifyFuncVarRef = purego.NewCallback(fcb)
242- glib.SaveCallback(NotifyFuncVarPtr, NotifyFuncVarRef)
243 }247 }
244 248
245 xClosureAddInvalidateNotifier(x.GoPointer(), NotifyDataVar, NotifyFuncVarRef)249 xClosureAddInvalidateNotifier(x.GoPointer(), NotifyDataVar, NotifyFuncVarRef)
@@ -256,30 +260,34 @@ var xClosureAddMarshalGuards func(uintptr, uintptr, uintptr, uintptr, uintptr)
256 // example of marshal guards.260 // example of marshal guards.
257 func (x *Closure) AddMarshalGuards(PreMarshalDataVar uintptr, PreMarshalNotifyVar *ClosureNotify, PostMarshalDataVar uintptr, PostMarshalNotifyVar *ClosureNotify) {261 func (x *Closure) AddMarshalGuards(PreMarshalDataVar uintptr, PreMarshalNotifyVar *ClosureNotify, PostMarshalDataVar uintptr, PostMarshalNotifyVar *ClosureNotify) {
258 262
259- PreMarshalNotifyVarPtr := uintptr(unsafe.Pointer(PreMarshalNotifyVar))
260 var PreMarshalNotifyVarRef uintptr263 var PreMarshalNotifyVarRef uintptr
261- if cbRefPtr, ok := glib.GetCallback(PreMarshalNotifyVarPtr); ok {264+ if PreMarshalNotifyVar != nil {
262- PreMarshalNotifyVarRef = cbRefPtr265+ PreMarshalNotifyVarPtr := uintptr(unsafe.Pointer(PreMarshalNotifyVar))
263- } else {266+ if cbRefPtr, ok := glib.GetCallback(PreMarshalNotifyVarPtr); ok {
264- fcb := func(arg0 uintptr, arg1 *Closure) {267+ PreMarshalNotifyVarRef = cbRefPtr
265- cbFn := *PreMarshalNotifyVar268+ } else {
266- cbFn(arg0, arg1)269+ fcb := func(arg0 uintptr, arg1 *Closure) {
270+ cbFn := *PreMarshalNotifyVar
271+ cbFn(arg0, arg1)
272+ }
273+ PreMarshalNotifyVarRef = purego.NewCallback(fcb)
274+ glib.SaveCallback(PreMarshalNotifyVarPtr, PreMarshalNotifyVarRef)
267 }275 }
268- PreMarshalNotifyVarRef = purego.NewCallback(fcb)
269- glib.SaveCallback(PreMarshalNotifyVarPtr, PreMarshalNotifyVarRef)
270 }276 }
271 277
272- PostMarshalNotifyVarPtr := uintptr(unsafe.Pointer(PostMarshalNotifyVar))
273 var PostMarshalNotifyVarRef uintptr278 var PostMarshalNotifyVarRef uintptr
274- if cbRefPtr, ok := glib.GetCallback(PostMarshalNotifyVarPtr); ok {279+ if PostMarshalNotifyVar != nil {
275- PostMarshalNotifyVarRef = cbRefPtr280+ PostMarshalNotifyVarPtr := uintptr(unsafe.Pointer(PostMarshalNotifyVar))
276- } else {281+ if cbRefPtr, ok := glib.GetCallback(PostMarshalNotifyVarPtr); ok {
277- fcb := func(arg0 uintptr, arg1 *Closure) {282+ PostMarshalNotifyVarRef = cbRefPtr
278- cbFn := *PostMarshalNotifyVar283+ } else {
279- cbFn(arg0, arg1)284+ fcb := func(arg0 uintptr, arg1 *Closure) {
285+ cbFn := *PostMarshalNotifyVar
286+ cbFn(arg0, arg1)
287+ }
288+ PostMarshalNotifyVarRef = purego.NewCallback(fcb)
289+ glib.SaveCallback(PostMarshalNotifyVarPtr, PostMarshalNotifyVarRef)
280 }290 }
281- PostMarshalNotifyVarRef = purego.NewCallback(fcb)
282- glib.SaveCallback(PostMarshalNotifyVarPtr, PostMarshalNotifyVarRef)
283 }291 }
284 292
285 xClosureAddMarshalGuards(x.GoPointer(), PreMarshalDataVar, PreMarshalNotifyVarRef, PostMarshalDataVar, PostMarshalNotifyVarRef)293 xClosureAddMarshalGuards(x.GoPointer(), PreMarshalDataVar, PreMarshalNotifyVarRef, PostMarshalDataVar, PostMarshalNotifyVarRef)
@@ -335,17 +343,19 @@ var xClosureRemoveFinalizeNotifier func(uintptr, uintptr, uintptr)
335 // Notice that notifiers are automatically removed after they are run.343 // Notice that notifiers are automatically removed after they are run.
336 func (x *Closure) RemoveFinalizeNotifier(NotifyDataVar uintptr, NotifyFuncVar *ClosureNotify) {344 func (x *Closure) RemoveFinalizeNotifier(NotifyDataVar uintptr, NotifyFuncVar *ClosureNotify) {
337 345
338- NotifyFuncVarPtr := uintptr(unsafe.Pointer(NotifyFuncVar))
339 var NotifyFuncVarRef uintptr346 var NotifyFuncVarRef uintptr
340- if cbRefPtr, ok := glib.GetCallback(NotifyFuncVarPtr); ok {347+ if NotifyFuncVar != nil {
341- NotifyFuncVarRef = cbRefPtr348+ NotifyFuncVarPtr := uintptr(unsafe.Pointer(NotifyFuncVar))
342- } else {349+ if cbRefPtr, ok := glib.GetCallback(NotifyFuncVarPtr); ok {
343- fcb := func(arg0 uintptr, arg1 *Closure) {350+ NotifyFuncVarRef = cbRefPtr
344- cbFn := *NotifyFuncVar351+ } else {
345- cbFn(arg0, arg1)352+ fcb := func(arg0 uintptr, arg1 *Closure) {
353+ cbFn := *NotifyFuncVar
354+ cbFn(arg0, arg1)
355+ }
356+ NotifyFuncVarRef = purego.NewCallback(fcb)
357+ glib.SaveCallback(NotifyFuncVarPtr, NotifyFuncVarRef)
346 }358 }
347- NotifyFuncVarRef = purego.NewCallback(fcb)
348- glib.SaveCallback(NotifyFuncVarPtr, NotifyFuncVarRef)
349 }359 }
350 360
351 xClosureRemoveFinalizeNotifier(x.GoPointer(), NotifyDataVar, NotifyFuncVarRef)361 xClosureRemoveFinalizeNotifier(x.GoPointer(), NotifyDataVar, NotifyFuncVarRef)
@@ -359,17 +369,19 @@ var xClosureRemoveInvalidateNotifier func(uintptr, uintptr, uintptr)
359 // Notice that notifiers are automatically removed after they are run.369 // Notice that notifiers are automatically removed after they are run.
360 func (x *Closure) RemoveInvalidateNotifier(NotifyDataVar uintptr, NotifyFuncVar *ClosureNotify) {370 func (x *Closure) RemoveInvalidateNotifier(NotifyDataVar uintptr, NotifyFuncVar *ClosureNotify) {
361 371
362- NotifyFuncVarPtr := uintptr(unsafe.Pointer(NotifyFuncVar))
363 var NotifyFuncVarRef uintptr372 var NotifyFuncVarRef uintptr
364- if cbRefPtr, ok := glib.GetCallback(NotifyFuncVarPtr); ok {373+ if NotifyFuncVar != nil {
365- NotifyFuncVarRef = cbRefPtr374+ NotifyFuncVarPtr := uintptr(unsafe.Pointer(NotifyFuncVar))
366- } else {375+ if cbRefPtr, ok := glib.GetCallback(NotifyFuncVarPtr); ok {
367- fcb := func(arg0 uintptr, arg1 *Closure) {376+ NotifyFuncVarRef = cbRefPtr
368- cbFn := *NotifyFuncVar377+ } else {
369- cbFn(arg0, arg1)378+ fcb := func(arg0 uintptr, arg1 *Closure) {
379+ cbFn := *NotifyFuncVar
380+ cbFn(arg0, arg1)
381+ }
382+ NotifyFuncVarRef = purego.NewCallback(fcb)
383+ glib.SaveCallback(NotifyFuncVarPtr, NotifyFuncVarRef)
370 }384 }
371- NotifyFuncVarRef = purego.NewCallback(fcb)
372- glib.SaveCallback(NotifyFuncVarPtr, NotifyFuncVarRef)
373 }385 }
374 386
375 xClosureRemoveInvalidateNotifier(x.GoPointer(), NotifyDataVar, NotifyFuncVarRef)387 xClosureRemoveInvalidateNotifier(x.GoPointer(), NotifyDataVar, NotifyFuncVarRef)
@@ -390,17 +402,19 @@ var xClosureSetMarshal func(uintptr, uintptr)
390 // See also: g_closure_set_meta_marshal()402 // See also: g_closure_set_meta_marshal()
391 func (x *Closure) SetMarshal(MarshalVar *ClosureMarshal) {403 func (x *Closure) SetMarshal(MarshalVar *ClosureMarshal) {
392 404
393- MarshalVarPtr := uintptr(unsafe.Pointer(MarshalVar))
394 var MarshalVarRef uintptr405 var MarshalVarRef uintptr
395- if cbRefPtr, ok := glib.GetCallback(MarshalVarPtr); ok {406+ if MarshalVar != nil {
396- MarshalVarRef = cbRefPtr407+ MarshalVarPtr := uintptr(unsafe.Pointer(MarshalVar))
397- } else {408+ if cbRefPtr, ok := glib.GetCallback(MarshalVarPtr); ok {
398- fcb := func(arg0 *Closure, arg1 *Value, arg2 uint, arg3 []Value, arg4 uintptr, arg5 uintptr) {409+ MarshalVarRef = cbRefPtr
399- cbFn := *MarshalVar410+ } else {
400- cbFn(arg0, arg1, arg2, arg3, arg4, arg5)411+ fcb := func(arg0 *Closure, arg1 *Value, arg2 uint, arg3 []Value, arg4 uintptr, arg5 uintptr) {
412+ cbFn := *MarshalVar
413+ cbFn(arg0, arg1, arg2, arg3, arg4, arg5)
414+ }
415+ MarshalVarRef = purego.NewCallback(fcb)
416+ glib.SaveCallback(MarshalVarPtr, MarshalVarRef)
401 }417 }
402- MarshalVarRef = purego.NewCallback(fcb)
403- glib.SaveCallback(MarshalVarPtr, MarshalVarRef)
404 }418 }
405 419
406 xClosureSetMarshal(x.GoPointer(), MarshalVarRef)420 xClosureSetMarshal(x.GoPointer(), MarshalVarRef)
@@ -428,17 +442,19 @@ var xClosureSetMetaMarshal func(uintptr, uintptr, uintptr)
428 // @marshal_data argument.442 // @marshal_data argument.
429 func (x *Closure) SetMetaMarshal(MarshalDataVar uintptr, MetaMarshalVar *ClosureMarshal) {443 func (x *Closure) SetMetaMarshal(MarshalDataVar uintptr, MetaMarshalVar *ClosureMarshal) {
430 444
431- MetaMarshalVarPtr := uintptr(unsafe.Pointer(MetaMarshalVar))
432 var MetaMarshalVarRef uintptr445 var MetaMarshalVarRef uintptr
433- if cbRefPtr, ok := glib.GetCallback(MetaMarshalVarPtr); ok {446+ if MetaMarshalVar != nil {
434- MetaMarshalVarRef = cbRefPtr447+ MetaMarshalVarPtr := uintptr(unsafe.Pointer(MetaMarshalVar))
435- } else {448+ if cbRefPtr, ok := glib.GetCallback(MetaMarshalVarPtr); ok {
436- fcb := func(arg0 *Closure, arg1 *Value, arg2 uint, arg3 []Value, arg4 uintptr, arg5 uintptr) {449+ MetaMarshalVarRef = cbRefPtr
437- cbFn := *MetaMarshalVar450+ } else {
438- cbFn(arg0, arg1, arg2, arg3, arg4, arg5)451+ fcb := func(arg0 *Closure, arg1 *Value, arg2 uint, arg3 []Value, arg4 uintptr, arg5 uintptr) {
452+ cbFn := *MetaMarshalVar
453+ cbFn(arg0, arg1, arg2, arg3, arg4, arg5)
454+ }
455+ MetaMarshalVarRef = purego.NewCallback(fcb)
456+ glib.SaveCallback(MetaMarshalVarPtr, MetaMarshalVarRef)
439 }457 }
440- MetaMarshalVarRef = purego.NewCallback(fcb)
441- glib.SaveCallback(MetaMarshalVarPtr, MetaMarshalVarRef)
442 }458 }
443 459
444 xClosureSetMetaMarshal(x.GoPointer(), MarshalDataVar, MetaMarshalVarRef)460 xClosureSetMetaMarshal(x.GoPointer(), MarshalDataVar, MetaMarshalVarRef)
@@ -571,30 +587,34 @@ var xCclosureNew func(uintptr, uintptr, uintptr) *Closure
571 // @destroy_data will be called as a finalize notifier on the #GClosure.587 // @destroy_data will be called as a finalize notifier on the #GClosure.
572 func CclosureNew(CallbackFuncVar *Callback, UserDataVar uintptr, DestroyDataVar *ClosureNotify) *Closure {588 func CclosureNew(CallbackFuncVar *Callback, UserDataVar uintptr, DestroyDataVar *ClosureNotify) *Closure {
573 589
574- CallbackFuncVarPtr := uintptr(unsafe.Pointer(CallbackFuncVar))
575 var CallbackFuncVarRef uintptr590 var CallbackFuncVarRef uintptr
576- if cbRefPtr, ok := glib.GetCallback(CallbackFuncVarPtr); ok {591+ if CallbackFuncVar != nil {
577- CallbackFuncVarRef = cbRefPtr592+ CallbackFuncVarPtr := uintptr(unsafe.Pointer(CallbackFuncVar))
578- } else {593+ if cbRefPtr, ok := glib.GetCallback(CallbackFuncVarPtr); ok {
579- fcb := func() {594+ CallbackFuncVarRef = cbRefPtr
580- cbFn := *CallbackFuncVar595+ } else {
581- cbFn()596+ fcb := func() {
597+ cbFn := *CallbackFuncVar
598+ cbFn()
599+ }
600+ CallbackFuncVarRef = purego.NewCallback(fcb)
601+ glib.SaveCallback(CallbackFuncVarPtr, CallbackFuncVarRef)
582 }602 }
583- CallbackFuncVarRef = purego.NewCallback(fcb)
584- glib.SaveCallback(CallbackFuncVarPtr, CallbackFuncVarRef)
585 }603 }
586 604
587- DestroyDataVarPtr := uintptr(unsafe.Pointer(DestroyDataVar))
588 var DestroyDataVarRef uintptr605 var DestroyDataVarRef uintptr
589- if cbRefPtr, ok := glib.GetCallback(DestroyDataVarPtr); ok {606+ if DestroyDataVar != nil {
590- DestroyDataVarRef = cbRefPtr607+ DestroyDataVarPtr := uintptr(unsafe.Pointer(DestroyDataVar))
591- } else {608+ if cbRefPtr, ok := glib.GetCallback(DestroyDataVarPtr); ok {
592- fcb := func(arg0 uintptr, arg1 *Closure) {609+ DestroyDataVarRef = cbRefPtr
593- cbFn := *DestroyDataVar610+ } else {
594- cbFn(arg0, arg1)611+ fcb := func(arg0 uintptr, arg1 *Closure) {
612+ cbFn := *DestroyDataVar
613+ cbFn(arg0, arg1)
614+ }
615+ DestroyDataVarRef = purego.NewCallback(fcb)
616+ glib.SaveCallback(DestroyDataVarPtr, DestroyDataVarRef)
595 }617 }
596- DestroyDataVarRef = purego.NewCallback(fcb)
597- glib.SaveCallback(DestroyDataVarPtr, DestroyDataVarRef)
598 }618 }
599 619
600 cret := xCclosureNew(CallbackFuncVarRef, UserDataVar, DestroyDataVarRef)620 cret := xCclosureNew(CallbackFuncVarRef, UserDataVar, DestroyDataVarRef)
@@ -609,30 +629,34 @@ var xCclosureNewSwap func(uintptr, uintptr, uintptr) *Closure
609 // @destroy_data will be called as a finalize notifier on the #GClosure.629 // @destroy_data will be called as a finalize notifier on the #GClosure.
610 func CclosureNewSwap(CallbackFuncVar *Callback, UserDataVar uintptr, DestroyDataVar *ClosureNotify) *Closure {630 func CclosureNewSwap(CallbackFuncVar *Callback, UserDataVar uintptr, DestroyDataVar *ClosureNotify) *Closure {
611 631
612- CallbackFuncVarPtr := uintptr(unsafe.Pointer(CallbackFuncVar))
613 var CallbackFuncVarRef uintptr632 var CallbackFuncVarRef uintptr
614- if cbRefPtr, ok := glib.GetCallback(CallbackFuncVarPtr); ok {633+ if CallbackFuncVar != nil {
615- CallbackFuncVarRef = cbRefPtr634+ CallbackFuncVarPtr := uintptr(unsafe.Pointer(CallbackFuncVar))
616- } else {635+ if cbRefPtr, ok := glib.GetCallback(CallbackFuncVarPtr); ok {
617- fcb := func() {636+ CallbackFuncVarRef = cbRefPtr
618- cbFn := *CallbackFuncVar637+ } else {
619- cbFn()638+ fcb := func() {
639+ cbFn := *CallbackFuncVar
640+ cbFn()
641+ }
642+ CallbackFuncVarRef = purego.NewCallback(fcb)
643+ glib.SaveCallback(CallbackFuncVarPtr, CallbackFuncVarRef)
620 }644 }
621- CallbackFuncVarRef = purego.NewCallback(fcb)
622- glib.SaveCallback(CallbackFuncVarPtr, CallbackFuncVarRef)
623 }645 }
624 646
625- DestroyDataVarPtr := uintptr(unsafe.Pointer(DestroyDataVar))
626 var DestroyDataVarRef uintptr647 var DestroyDataVarRef uintptr
627- if cbRefPtr, ok := glib.GetCallback(DestroyDataVarPtr); ok {648+ if DestroyDataVar != nil {
628- DestroyDataVarRef = cbRefPtr649+ DestroyDataVarPtr := uintptr(unsafe.Pointer(DestroyDataVar))
629- } else {650+ if cbRefPtr, ok := glib.GetCallback(DestroyDataVarPtr); ok {
630- fcb := func(arg0 uintptr, arg1 *Closure) {651+ DestroyDataVarRef = cbRefPtr
631- cbFn := *DestroyDataVar652+ } else {
632- cbFn(arg0, arg1)653+ fcb := func(arg0 uintptr, arg1 *Closure) {
654+ cbFn := *DestroyDataVar
655+ cbFn(arg0, arg1)
656+ }
657+ DestroyDataVarRef = purego.NewCallback(fcb)
658+ glib.SaveCallback(DestroyDataVarPtr, DestroyDataVarRef)
633 }659 }
634- DestroyDataVarRef = purego.NewCallback(fcb)
635- glib.SaveCallback(DestroyDataVarPtr, DestroyDataVarRef)
636 }660 }
637 661
638 cret := xCclosureNewSwap(CallbackFuncVarRef, UserDataVar, DestroyDataVarRef)662 cret := xCclosureNewSwap(CallbackFuncVarRef, UserDataVar, DestroyDataVarRef)
M v4/gobject/gobject.go +77 -63
@@ -931,17 +931,19 @@ var xCclosureNewObject func(uintptr, uintptr) *Closure
931 // after the object is is freed.931 // after the object is is freed.
932 func CclosureNewObject(CallbackFuncVar *Callback, ObjectVar *Object) *Closure {932 func CclosureNewObject(CallbackFuncVar *Callback, ObjectVar *Object) *Closure {
933 933
934- CallbackFuncVarPtr := uintptr(unsafe.Pointer(CallbackFuncVar))
935 var CallbackFuncVarRef uintptr934 var CallbackFuncVarRef uintptr
936- if cbRefPtr, ok := glib.GetCallback(CallbackFuncVarPtr); ok {935+ if CallbackFuncVar != nil {
937- CallbackFuncVarRef = cbRefPtr936+ CallbackFuncVarPtr := uintptr(unsafe.Pointer(CallbackFuncVar))
938- } else {937+ if cbRefPtr, ok := glib.GetCallback(CallbackFuncVarPtr); ok {
939- fcb := func() {938+ CallbackFuncVarRef = cbRefPtr
940- cbFn := *CallbackFuncVar939+ } else {
941- cbFn()940+ fcb := func() {
941+ cbFn := *CallbackFuncVar
942+ cbFn()
943+ }
944+ CallbackFuncVarRef = purego.NewCallback(fcb)
945+ glib.SaveCallback(CallbackFuncVarPtr, CallbackFuncVarRef)
942 }946 }
943- CallbackFuncVarRef = purego.NewCallback(fcb)
944- glib.SaveCallback(CallbackFuncVarPtr, CallbackFuncVarRef)
945 }947 }
946 948
947 cret := xCclosureNewObject(CallbackFuncVarRef, ObjectVar.GoPointer())949 cret := xCclosureNewObject(CallbackFuncVarRef, ObjectVar.GoPointer())
@@ -957,17 +959,19 @@ var xCclosureNewObjectSwap func(uintptr, uintptr) *Closure
957 // after the object is is freed.959 // after the object is is freed.
958 func CclosureNewObjectSwap(CallbackFuncVar *Callback, ObjectVar *Object) *Closure {960 func CclosureNewObjectSwap(CallbackFuncVar *Callback, ObjectVar *Object) *Closure {
959 961
960- CallbackFuncVarPtr := uintptr(unsafe.Pointer(CallbackFuncVar))
961 var CallbackFuncVarRef uintptr962 var CallbackFuncVarRef uintptr
962- if cbRefPtr, ok := glib.GetCallback(CallbackFuncVarPtr); ok {963+ if CallbackFuncVar != nil {
963- CallbackFuncVarRef = cbRefPtr964+ CallbackFuncVarPtr := uintptr(unsafe.Pointer(CallbackFuncVar))
964- } else {965+ if cbRefPtr, ok := glib.GetCallback(CallbackFuncVarPtr); ok {
965- fcb := func() {966+ CallbackFuncVarRef = cbRefPtr
966- cbFn := *CallbackFuncVar967+ } else {
967- cbFn()968+ fcb := func() {
969+ cbFn := *CallbackFuncVar
970+ cbFn()
971+ }
972+ CallbackFuncVarRef = purego.NewCallback(fcb)
973+ glib.SaveCallback(CallbackFuncVarPtr, CallbackFuncVarRef)
968 }974 }
969- CallbackFuncVarRef = purego.NewCallback(fcb)
970- glib.SaveCallback(CallbackFuncVarPtr, CallbackFuncVarRef)
971 }975 }
972 976
973 cret := xCclosureNewObjectSwap(CallbackFuncVarRef, ObjectVar.GoPointer())977 cret := xCclosureNewObjectSwap(CallbackFuncVarRef, ObjectVar.GoPointer())
@@ -1012,17 +1016,19 @@ var xSignalConnectObject func(*TypeInstance, string, uintptr, uintptr, ConnectFl
1012 // details.1016 // details.
1013 func SignalConnectObject(InstanceVar *TypeInstance, DetailedSignalVar string, CHandlerVar *Callback, GobjectVar *Object, ConnectFlagsVar ConnectFlags) uint32 {1017 func SignalConnectObject(InstanceVar *TypeInstance, DetailedSignalVar string, CHandlerVar *Callback, GobjectVar *Object, ConnectFlagsVar ConnectFlags) uint32 {
1014 1018
1015- CHandlerVarPtr := uintptr(unsafe.Pointer(CHandlerVar))
1016 var CHandlerVarRef uintptr1019 var CHandlerVarRef uintptr
1017- if cbRefPtr, ok := glib.GetCallback(CHandlerVarPtr); ok {1020+ if CHandlerVar != nil {
1018- CHandlerVarRef = cbRefPtr1021+ CHandlerVarPtr := uintptr(unsafe.Pointer(CHandlerVar))
1019- } else {1022+ if cbRefPtr, ok := glib.GetCallback(CHandlerVarPtr); ok {
1020- fcb := func() {1023+ CHandlerVarRef = cbRefPtr
1021- cbFn := *CHandlerVar1024+ } else {
1022- cbFn()1025+ fcb := func() {
1026+ cbFn := *CHandlerVar
1027+ cbFn()
1028+ }
1029+ CHandlerVarRef = purego.NewCallback(fcb)
1030+ glib.SaveCallback(CHandlerVarPtr, CHandlerVarRef)
1023 }1031 }
1024- CHandlerVarRef = purego.NewCallback(fcb)
1025- glib.SaveCallback(CHandlerVarPtr, CHandlerVarRef)
1026 }1032 }
1027 1033
1028 cret := xSignalConnectObject(InstanceVar, DetailedSignalVar, CHandlerVarRef, GobjectVar.GoPointer(), ConnectFlagsVar)1034 cret := xSignalConnectObject(InstanceVar, DetailedSignalVar, CHandlerVarRef, GobjectVar.GoPointer(), ConnectFlagsVar)
@@ -1237,17 +1243,19 @@ var xObjectAddToggleRef func(uintptr, uintptr, uintptr)
1237 // A g_object_add_toggle_ref() must be released with g_object_remove_toggle_ref().1243 // A g_object_add_toggle_ref() must be released with g_object_remove_toggle_ref().
1238 func (x *Object) AddToggleRef(NotifyVar *ToggleNotify, DataVar uintptr) {1244 func (x *Object) AddToggleRef(NotifyVar *ToggleNotify, DataVar uintptr) {
1239 1245
1240- NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
1241 var NotifyVarRef uintptr1246 var NotifyVarRef uintptr
1242- if cbRefPtr, ok := glib.GetCallback(NotifyVarPtr); ok {1247+ if NotifyVar != nil {
1243- NotifyVarRef = cbRefPtr1248+ NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
1244- } else {1249+ if cbRefPtr, ok := glib.GetCallback(NotifyVarPtr); ok {
1245- fcb := func(arg0 uintptr, arg1 uintptr, arg2 bool) {1250+ NotifyVarRef = cbRefPtr
1246- cbFn := *NotifyVar1251+ } else {
1247- cbFn(arg0, arg1, arg2)1252+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 bool) {
1253+ cbFn := *NotifyVar
1254+ cbFn(arg0, arg1, arg2)
1255+ }
1256+ NotifyVarRef = purego.NewCallback(fcb)
1257+ glib.SaveCallback(NotifyVarPtr, NotifyVarRef)
1248 }1258 }
1249- NotifyVarRef = purego.NewCallback(fcb)
1250- glib.SaveCallback(NotifyVarPtr, NotifyVarRef)
1251 }1259 }
1252 1260
1253 xObjectAddToggleRef(x.GoPointer(), NotifyVarRef, DataVar)1261 xObjectAddToggleRef(x.GoPointer(), NotifyVarRef, DataVar)
@@ -1830,17 +1838,19 @@ var xObjectRemoveToggleRef func(uintptr, uintptr, uintptr)
1830 // you must take care of that yourself.1838 // you must take care of that yourself.
1831 func (x *Object) RemoveToggleRef(NotifyVar *ToggleNotify, DataVar uintptr) {1839 func (x *Object) RemoveToggleRef(NotifyVar *ToggleNotify, DataVar uintptr) {
1832 1840
1833- NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
1834 var NotifyVarRef uintptr1841 var NotifyVarRef uintptr
1835- if cbRefPtr, ok := glib.GetCallback(NotifyVarPtr); ok {1842+ if NotifyVar != nil {
1836- NotifyVarRef = cbRefPtr1843+ NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
1837- } else {1844+ if cbRefPtr, ok := glib.GetCallback(NotifyVarPtr); ok {
1838- fcb := func(arg0 uintptr, arg1 uintptr, arg2 bool) {1845+ NotifyVarRef = cbRefPtr
1839- cbFn := *NotifyVar1846+ } else {
1840- cbFn(arg0, arg1, arg2)1847+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 bool) {
1848+ cbFn := *NotifyVar
1849+ cbFn(arg0, arg1, arg2)
1850+ }
1851+ NotifyVarRef = purego.NewCallback(fcb)
1852+ glib.SaveCallback(NotifyVarPtr, NotifyVarRef)
1841 }1853 }
1842- NotifyVarRef = purego.NewCallback(fcb)
1843- glib.SaveCallback(NotifyVarPtr, NotifyVarRef)
1844 }1854 }
1845 1855
1846 xObjectRemoveToggleRef(x.GoPointer(), NotifyVarRef, DataVar)1856 xObjectRemoveToggleRef(x.GoPointer(), NotifyVarRef, DataVar)
@@ -2254,17 +2264,19 @@ var xObjectWeakRef func(uintptr, uintptr, uintptr)
2254 // Use #GWeakRef if thread-safety is required.2264 // Use #GWeakRef if thread-safety is required.
2255 func (x *Object) WeakRef(NotifyVar *WeakNotify, DataVar uintptr) {2265 func (x *Object) WeakRef(NotifyVar *WeakNotify, DataVar uintptr) {
2256 2266
2257- NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
2258 var NotifyVarRef uintptr2267 var NotifyVarRef uintptr
2259- if cbRefPtr, ok := glib.GetCallback(NotifyVarPtr); ok {2268+ if NotifyVar != nil {
2260- NotifyVarRef = cbRefPtr2269+ NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
2261- } else {2270+ if cbRefPtr, ok := glib.GetCallback(NotifyVarPtr); ok {
2262- fcb := func(arg0 uintptr, arg1 uintptr) {2271+ NotifyVarRef = cbRefPtr
2263- cbFn := *NotifyVar2272+ } else {
2264- cbFn(arg0, arg1)2273+ fcb := func(arg0 uintptr, arg1 uintptr) {
2274+ cbFn := *NotifyVar
2275+ cbFn(arg0, arg1)
2276+ }
2277+ NotifyVarRef = purego.NewCallback(fcb)
2278+ glib.SaveCallback(NotifyVarPtr, NotifyVarRef)
2265 }2279 }
2266- NotifyVarRef = purego.NewCallback(fcb)
2267- glib.SaveCallback(NotifyVarPtr, NotifyVarRef)
2268 }2280 }
2269 2281
2270 xObjectWeakRef(x.GoPointer(), NotifyVarRef, DataVar)2282 xObjectWeakRef(x.GoPointer(), NotifyVarRef, DataVar)
@@ -2276,17 +2288,19 @@ var xObjectWeakUnref func(uintptr, uintptr, uintptr)
2276 // Removes a weak reference callback to an object.2288 // Removes a weak reference callback to an object.
2277 func (x *Object) WeakUnref(NotifyVar *WeakNotify, DataVar uintptr) {2289 func (x *Object) WeakUnref(NotifyVar *WeakNotify, DataVar uintptr) {
2278 2290
2279- NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
2280 var NotifyVarRef uintptr2291 var NotifyVarRef uintptr
2281- if cbRefPtr, ok := glib.GetCallback(NotifyVarPtr); ok {2292+ if NotifyVar != nil {
2282- NotifyVarRef = cbRefPtr2293+ NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
2283- } else {2294+ if cbRefPtr, ok := glib.GetCallback(NotifyVarPtr); ok {
2284- fcb := func(arg0 uintptr, arg1 uintptr) {2295+ NotifyVarRef = cbRefPtr
2285- cbFn := *NotifyVar2296+ } else {
2286- cbFn(arg0, arg1)2297+ fcb := func(arg0 uintptr, arg1 uintptr) {
2298+ cbFn := *NotifyVar
2299+ cbFn(arg0, arg1)
2300+ }
2301+ NotifyVarRef = purego.NewCallback(fcb)
2302+ glib.SaveCallback(NotifyVarPtr, NotifyVarRef)
2287 }2303 }
2288- NotifyVarRef = purego.NewCallback(fcb)
2289- glib.SaveCallback(NotifyVarPtr, NotifyVarRef)
2290 }2304 }
2291 2305
2292 xObjectWeakUnref(x.GoPointer(), NotifyVarRef, DataVar)2306 xObjectWeakUnref(x.GoPointer(), NotifyVarRef, DataVar)
M v4/gobject/gsignal.go +33 -27
@@ -228,17 +228,19 @@ var xSignalAddEmissionHook func(uint, glib.Quark, uintptr, uintptr, uintptr) uin
228 // for signals which don't have %G_SIGNAL_NO_HOOKS flag set.228 // for signals which don't have %G_SIGNAL_NO_HOOKS flag set.
229 func SignalAddEmissionHook(SignalIdVar uint, DetailVar glib.Quark, HookFuncVar *SignalEmissionHook, HookDataVar uintptr, DataDestroyVar *glib.DestroyNotify) uint32 {229 func SignalAddEmissionHook(SignalIdVar uint, DetailVar glib.Quark, HookFuncVar *SignalEmissionHook, HookDataVar uintptr, DataDestroyVar *glib.DestroyNotify) uint32 {
230 230
231- HookFuncVarPtr := uintptr(unsafe.Pointer(HookFuncVar))
232 var HookFuncVarRef uintptr231 var HookFuncVarRef uintptr
233- if cbRefPtr, ok := glib.GetCallback(HookFuncVarPtr); ok {232+ if HookFuncVar != nil {
234- HookFuncVarRef = cbRefPtr233+ HookFuncVarPtr := uintptr(unsafe.Pointer(HookFuncVar))
235- } else {234+ if cbRefPtr, ok := glib.GetCallback(HookFuncVarPtr); ok {
236- fcb := func(arg0 *SignalInvocationHint, arg1 uint, arg2 []Value, arg3 uintptr) bool {235+ HookFuncVarRef = cbRefPtr
237- cbFn := *HookFuncVar236+ } else {
238- return cbFn(arg0, arg1, arg2, arg3)237+ fcb := func(arg0 *SignalInvocationHint, arg1 uint, arg2 []Value, arg3 uintptr) bool {
238+ cbFn := *HookFuncVar
239+ return cbFn(arg0, arg1, arg2, arg3)
240+ }
241+ HookFuncVarRef = purego.NewCallback(fcb)
242+ glib.SaveCallback(HookFuncVarPtr, HookFuncVarRef)
239 }243 }
240- HookFuncVarRef = purego.NewCallback(fcb)
241- glib.SaveCallback(HookFuncVarPtr, HookFuncVarRef)
242 }244 }
243 245
244 var DataDestroyVarRef uintptr246 var DataDestroyVarRef uintptr
@@ -341,17 +343,19 @@ var xSignalConnectData func(uintptr, string, uintptr, uintptr, uintptr, ConnectF
341 // details.343 // details.
342 func SignalConnectData(InstanceVar *Object, DetailedSignalVar string, CHandlerVar *Callback, DataVar uintptr, DestroyDataVar *ClosureNotify, ConnectFlagsVar ConnectFlags) uint32 {344 func SignalConnectData(InstanceVar *Object, DetailedSignalVar string, CHandlerVar *Callback, DataVar uintptr, DestroyDataVar *ClosureNotify, ConnectFlagsVar ConnectFlags) uint32 {
343 345
344- CHandlerVarPtr := uintptr(unsafe.Pointer(CHandlerVar))
345 var CHandlerVarRef uintptr346 var CHandlerVarRef uintptr
346- if cbRefPtr, ok := glib.GetCallback(CHandlerVarPtr); ok {347+ if CHandlerVar != nil {
347- CHandlerVarRef = cbRefPtr348+ CHandlerVarPtr := uintptr(unsafe.Pointer(CHandlerVar))
348- } else {349+ if cbRefPtr, ok := glib.GetCallback(CHandlerVarPtr); ok {
349- fcb := func() {350+ CHandlerVarRef = cbRefPtr
350- cbFn := *CHandlerVar351+ } else {
351- cbFn()352+ fcb := func() {
353+ cbFn := *CHandlerVar
354+ cbFn()
355+ }
356+ CHandlerVarRef = purego.NewCallback(fcb)
357+ glib.SaveCallback(CHandlerVarPtr, CHandlerVarRef)
352 }358 }
353- CHandlerVarRef = purego.NewCallback(fcb)
354- glib.SaveCallback(CHandlerVarPtr, CHandlerVarRef)
355 }359 }
356 360
357 var DestroyDataVarRef uintptr361 var DestroyDataVarRef uintptr
@@ -848,17 +852,19 @@ var xSignalOverrideClassHandler func(string, types.GType, uintptr)
848 // parent class closure from inside the overridden one.852 // parent class closure from inside the overridden one.
849 func SignalOverrideClassHandler(SignalNameVar string, InstanceTypeVar types.GType, ClassHandlerVar *Callback) {853 func SignalOverrideClassHandler(SignalNameVar string, InstanceTypeVar types.GType, ClassHandlerVar *Callback) {
850 854
851- ClassHandlerVarPtr := uintptr(unsafe.Pointer(ClassHandlerVar))
852 var ClassHandlerVarRef uintptr855 var ClassHandlerVarRef uintptr
853- if cbRefPtr, ok := glib.GetCallback(ClassHandlerVarPtr); ok {856+ if ClassHandlerVar != nil {
854- ClassHandlerVarRef = cbRefPtr857+ ClassHandlerVarPtr := uintptr(unsafe.Pointer(ClassHandlerVar))
855- } else {858+ if cbRefPtr, ok := glib.GetCallback(ClassHandlerVarPtr); ok {
856- fcb := func() {859+ ClassHandlerVarRef = cbRefPtr
857- cbFn := *ClassHandlerVar860+ } else {
858- cbFn()861+ fcb := func() {
862+ cbFn := *ClassHandlerVar
863+ cbFn()
864+ }
865+ ClassHandlerVarRef = purego.NewCallback(fcb)
866+ glib.SaveCallback(ClassHandlerVarPtr, ClassHandlerVarRef)
859 }867 }
860- ClassHandlerVarRef = purego.NewCallback(fcb)
861- glib.SaveCallback(ClassHandlerVarPtr, ClassHandlerVarRef)
862 }868 }
863 869
864 xSignalOverrideClassHandler(SignalNameVar, InstanceTypeVar, ClassHandlerVarRef)870 xSignalOverrideClassHandler(SignalNameVar, InstanceTypeVar, ClassHandlerVarRef)
M v4/gobject/gsignalgroup.go +66 -54
@@ -82,17 +82,19 @@ var xSignalGroupConnect func(uintptr, string, uintptr, uintptr)
82 // You cannot connect a signal handler after #GSignalGroup:target has been set.82 // You cannot connect a signal handler after #GSignalGroup:target has been set.
83 func (x *SignalGroup) Connect(DetailedSignalVar string, CHandlerVar *Callback, DataVar uintptr) {83 func (x *SignalGroup) Connect(DetailedSignalVar string, CHandlerVar *Callback, DataVar uintptr) {
84 84
85- CHandlerVarPtr := uintptr(unsafe.Pointer(CHandlerVar))
86 var CHandlerVarRef uintptr85 var CHandlerVarRef uintptr
87- if cbRefPtr, ok := glib.GetCallback(CHandlerVarPtr); ok {86+ if CHandlerVar != nil {
88- CHandlerVarRef = cbRefPtr87+ CHandlerVarPtr := uintptr(unsafe.Pointer(CHandlerVar))
89- } else {88+ if cbRefPtr, ok := glib.GetCallback(CHandlerVarPtr); ok {
90- fcb := func() {89+ CHandlerVarRef = cbRefPtr
91- cbFn := *CHandlerVar90+ } else {
92- cbFn()91+ fcb := func() {
92+ cbFn := *CHandlerVar
93+ cbFn()
94+ }
95+ CHandlerVarRef = purego.NewCallback(fcb)
96+ glib.SaveCallback(CHandlerVarPtr, CHandlerVarRef)
93 }97 }
94- CHandlerVarRef = purego.NewCallback(fcb)
95- glib.SaveCallback(CHandlerVarPtr, CHandlerVarRef)
96 }98 }
97 99
98 xSignalGroupConnect(x.GoPointer(), DetailedSignalVar, CHandlerVarRef, DataVar)100 xSignalGroupConnect(x.GoPointer(), DetailedSignalVar, CHandlerVarRef, DataVar)
@@ -109,17 +111,19 @@ var xSignalGroupConnectAfter func(uintptr, string, uintptr, uintptr)
109 // You cannot connect a signal handler after #GSignalGroup:target has been set.111 // You cannot connect a signal handler after #GSignalGroup:target has been set.
110 func (x *SignalGroup) ConnectAfter(DetailedSignalVar string, CHandlerVar *Callback, DataVar uintptr) {112 func (x *SignalGroup) ConnectAfter(DetailedSignalVar string, CHandlerVar *Callback, DataVar uintptr) {
111 113
112- CHandlerVarPtr := uintptr(unsafe.Pointer(CHandlerVar))
113 var CHandlerVarRef uintptr114 var CHandlerVarRef uintptr
114- if cbRefPtr, ok := glib.GetCallback(CHandlerVarPtr); ok {115+ if CHandlerVar != nil {
115- CHandlerVarRef = cbRefPtr116+ CHandlerVarPtr := uintptr(unsafe.Pointer(CHandlerVar))
116- } else {117+ if cbRefPtr, ok := glib.GetCallback(CHandlerVarPtr); ok {
117- fcb := func() {118+ CHandlerVarRef = cbRefPtr
118- cbFn := *CHandlerVar119+ } else {
119- cbFn()120+ fcb := func() {
121+ cbFn := *CHandlerVar
122+ cbFn()
123+ }
124+ CHandlerVarRef = purego.NewCallback(fcb)
125+ glib.SaveCallback(CHandlerVarPtr, CHandlerVarRef)
120 }126 }
121- CHandlerVarRef = purego.NewCallback(fcb)
122- glib.SaveCallback(CHandlerVarPtr, CHandlerVarRef)
123 }127 }
124 128
125 xSignalGroupConnectAfter(x.GoPointer(), DetailedSignalVar, CHandlerVarRef, DataVar)129 xSignalGroupConnectAfter(x.GoPointer(), DetailedSignalVar, CHandlerVarRef, DataVar)
@@ -145,30 +149,34 @@ var xSignalGroupConnectData func(uintptr, string, uintptr, uintptr, uintptr, Con
145 // You cannot connect a signal handler after #GSignalGroup:target has been set.149 // You cannot connect a signal handler after #GSignalGroup:target has been set.
146 func (x *SignalGroup) ConnectData(DetailedSignalVar string, CHandlerVar *Callback, DataVar uintptr, NotifyVar *ClosureNotify, FlagsVar ConnectFlags) {150 func (x *SignalGroup) ConnectData(DetailedSignalVar string, CHandlerVar *Callback, DataVar uintptr, NotifyVar *ClosureNotify, FlagsVar ConnectFlags) {
147 151
148- CHandlerVarPtr := uintptr(unsafe.Pointer(CHandlerVar))
149 var CHandlerVarRef uintptr152 var CHandlerVarRef uintptr
150- if cbRefPtr, ok := glib.GetCallback(CHandlerVarPtr); ok {153+ if CHandlerVar != nil {
151- CHandlerVarRef = cbRefPtr154+ CHandlerVarPtr := uintptr(unsafe.Pointer(CHandlerVar))
152- } else {155+ if cbRefPtr, ok := glib.GetCallback(CHandlerVarPtr); ok {
153- fcb := func() {156+ CHandlerVarRef = cbRefPtr
154- cbFn := *CHandlerVar157+ } else {
155- cbFn()158+ fcb := func() {
159+ cbFn := *CHandlerVar
160+ cbFn()
161+ }
162+ CHandlerVarRef = purego.NewCallback(fcb)
163+ glib.SaveCallback(CHandlerVarPtr, CHandlerVarRef)
156 }164 }
157- CHandlerVarRef = purego.NewCallback(fcb)
158- glib.SaveCallback(CHandlerVarPtr, CHandlerVarRef)
159 }165 }
160 166
161- NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
162 var NotifyVarRef uintptr167 var NotifyVarRef uintptr
163- if cbRefPtr, ok := glib.GetCallback(NotifyVarPtr); ok {168+ if NotifyVar != nil {
164- NotifyVarRef = cbRefPtr169+ NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
165- } else {170+ if cbRefPtr, ok := glib.GetCallback(NotifyVarPtr); ok {
166- fcb := func(arg0 uintptr, arg1 *Closure) {171+ NotifyVarRef = cbRefPtr
167- cbFn := *NotifyVar172+ } else {
168- cbFn(arg0, arg1)173+ fcb := func(arg0 uintptr, arg1 *Closure) {
174+ cbFn := *NotifyVar
175+ cbFn(arg0, arg1)
176+ }
177+ NotifyVarRef = purego.NewCallback(fcb)
178+ glib.SaveCallback(NotifyVarPtr, NotifyVarRef)
169 }179 }
170- NotifyVarRef = purego.NewCallback(fcb)
171- glib.SaveCallback(NotifyVarPtr, NotifyVarRef)
172 }180 }
173 181
174 xSignalGroupConnectData(x.GoPointer(), DetailedSignalVar, CHandlerVarRef, DataVar, NotifyVarRef, FlagsVar)182 xSignalGroupConnectData(x.GoPointer(), DetailedSignalVar, CHandlerVarRef, DataVar, NotifyVarRef, FlagsVar)
@@ -186,17 +194,19 @@ var xSignalGroupConnectObject func(uintptr, string, uintptr, uintptr, ConnectFla
186 // You cannot connect a signal handler after #GSignalGroup:target has been set.194 // You cannot connect a signal handler after #GSignalGroup:target has been set.
187 func (x *SignalGroup) ConnectObject(DetailedSignalVar string, CHandlerVar *Callback, ObjectVar uintptr, FlagsVar ConnectFlags) {195 func (x *SignalGroup) ConnectObject(DetailedSignalVar string, CHandlerVar *Callback, ObjectVar uintptr, FlagsVar ConnectFlags) {
188 196
189- CHandlerVarPtr := uintptr(unsafe.Pointer(CHandlerVar))
190 var CHandlerVarRef uintptr197 var CHandlerVarRef uintptr
191- if cbRefPtr, ok := glib.GetCallback(CHandlerVarPtr); ok {198+ if CHandlerVar != nil {
192- CHandlerVarRef = cbRefPtr199+ CHandlerVarPtr := uintptr(unsafe.Pointer(CHandlerVar))
193- } else {200+ if cbRefPtr, ok := glib.GetCallback(CHandlerVarPtr); ok {
194- fcb := func() {201+ CHandlerVarRef = cbRefPtr
195- cbFn := *CHandlerVar202+ } else {
196- cbFn()203+ fcb := func() {
204+ cbFn := *CHandlerVar
205+ cbFn()
206+ }
207+ CHandlerVarRef = purego.NewCallback(fcb)
208+ glib.SaveCallback(CHandlerVarPtr, CHandlerVarRef)
197 }209 }
198- CHandlerVarRef = purego.NewCallback(fcb)
199- glib.SaveCallback(CHandlerVarPtr, CHandlerVarRef)
200 }210 }
201 211
202 xSignalGroupConnectObject(x.GoPointer(), DetailedSignalVar, CHandlerVarRef, ObjectVar, FlagsVar)212 xSignalGroupConnectObject(x.GoPointer(), DetailedSignalVar, CHandlerVarRef, ObjectVar, FlagsVar)
@@ -214,17 +224,19 @@ var xSignalGroupConnectSwapped func(uintptr, string, uintptr, uintptr)
214 // You cannot connect a signal handler after #GSignalGroup:target has been set.224 // You cannot connect a signal handler after #GSignalGroup:target has been set.
215 func (x *SignalGroup) ConnectSwapped(DetailedSignalVar string, CHandlerVar *Callback, DataVar uintptr) {225 func (x *SignalGroup) ConnectSwapped(DetailedSignalVar string, CHandlerVar *Callback, DataVar uintptr) {
216 226
217- CHandlerVarPtr := uintptr(unsafe.Pointer(CHandlerVar))
218 var CHandlerVarRef uintptr227 var CHandlerVarRef uintptr
219- if cbRefPtr, ok := glib.GetCallback(CHandlerVarPtr); ok {228+ if CHandlerVar != nil {
220- CHandlerVarRef = cbRefPtr229+ CHandlerVarPtr := uintptr(unsafe.Pointer(CHandlerVar))
221- } else {230+ if cbRefPtr, ok := glib.GetCallback(CHandlerVarPtr); ok {
222- fcb := func() {231+ CHandlerVarRef = cbRefPtr
223- cbFn := *CHandlerVar232+ } else {
224- cbFn()233+ fcb := func() {
234+ cbFn := *CHandlerVar
235+ cbFn()
236+ }
237+ CHandlerVarRef = purego.NewCallback(fcb)
238+ glib.SaveCallback(CHandlerVarPtr, CHandlerVarRef)
225 }239 }
226- CHandlerVarRef = purego.NewCallback(fcb)
227- glib.SaveCallback(CHandlerVarPtr, CHandlerVarRef)
228 }240 }
229 241
230 xSignalGroupConnectSwapped(x.GoPointer(), DetailedSignalVar, CHandlerVarRef, DataVar)242 xSignalGroupConnectSwapped(x.GoPointer(), DetailedSignalVar, CHandlerVarRef, DataVar)
M v4/gobject/gtype.go +66 -54
@@ -810,17 +810,19 @@ var xTypeAddClassCacheFunc func(uintptr, uintptr)
810 // chain.810 // chain.
811 func TypeAddClassCacheFunc(CacheDataVar uintptr, CacheFuncVar *TypeClassCacheFunc) {811 func TypeAddClassCacheFunc(CacheDataVar uintptr, CacheFuncVar *TypeClassCacheFunc) {
812 812
813- CacheFuncVarPtr := uintptr(unsafe.Pointer(CacheFuncVar))
814 var CacheFuncVarRef uintptr813 var CacheFuncVarRef uintptr
815- if cbRefPtr, ok := glib.GetCallback(CacheFuncVarPtr); ok {814+ if CacheFuncVar != nil {
816- CacheFuncVarRef = cbRefPtr815+ CacheFuncVarPtr := uintptr(unsafe.Pointer(CacheFuncVar))
817- } else {816+ if cbRefPtr, ok := glib.GetCallback(CacheFuncVarPtr); ok {
818- fcb := func(arg0 uintptr, arg1 *TypeClass) bool {817+ CacheFuncVarRef = cbRefPtr
819- cbFn := *CacheFuncVar818+ } else {
820- return cbFn(arg0, arg1)819+ fcb := func(arg0 uintptr, arg1 *TypeClass) bool {
820+ cbFn := *CacheFuncVar
821+ return cbFn(arg0, arg1)
822+ }
823+ CacheFuncVarRef = purego.NewCallback(fcb)
824+ glib.SaveCallback(CacheFuncVarPtr, CacheFuncVarRef)
821 }825 }
822- CacheFuncVarRef = purego.NewCallback(fcb)
823- glib.SaveCallback(CacheFuncVarPtr, CacheFuncVarRef)
824 }826 }
825 827
826 xTypeAddClassCacheFunc(CacheDataVar, CacheFuncVarRef)828 xTypeAddClassCacheFunc(CacheDataVar, CacheFuncVarRef)
@@ -866,17 +868,19 @@ var xTypeAddInterfaceCheck func(uintptr, uintptr)
866 // interfaces.868 // interfaces.
867 func TypeAddInterfaceCheck(CheckDataVar uintptr, CheckFuncVar *TypeInterfaceCheckFunc) {869 func TypeAddInterfaceCheck(CheckDataVar uintptr, CheckFuncVar *TypeInterfaceCheckFunc) {
868 870
869- CheckFuncVarPtr := uintptr(unsafe.Pointer(CheckFuncVar))
870 var CheckFuncVarRef uintptr871 var CheckFuncVarRef uintptr
871- if cbRefPtr, ok := glib.GetCallback(CheckFuncVarPtr); ok {872+ if CheckFuncVar != nil {
872- CheckFuncVarRef = cbRefPtr873+ CheckFuncVarPtr := uintptr(unsafe.Pointer(CheckFuncVar))
873- } else {874+ if cbRefPtr, ok := glib.GetCallback(CheckFuncVarPtr); ok {
874- fcb := func(arg0 uintptr, arg1 *TypeInterface) {875+ CheckFuncVarRef = cbRefPtr
875- cbFn := *CheckFuncVar876+ } else {
876- cbFn(arg0, arg1)877+ fcb := func(arg0 uintptr, arg1 *TypeInterface) {
878+ cbFn := *CheckFuncVar
879+ cbFn(arg0, arg1)
880+ }
881+ CheckFuncVarRef = purego.NewCallback(fcb)
882+ glib.SaveCallback(CheckFuncVarPtr, CheckFuncVarRef)
877 }883 }
878- CheckFuncVarRef = purego.NewCallback(fcb)
879- glib.SaveCallback(CheckFuncVarPtr, CheckFuncVarRef)
880 }884 }
881 885
882 xTypeAddInterfaceCheck(CheckDataVar, CheckFuncVarRef)886 xTypeAddInterfaceCheck(CheckDataVar, CheckFuncVarRef)
@@ -1500,30 +1504,34 @@ var xTypeRegisterStaticSimple func(types.GType, string, uint, uintptr, uint, uin
1500 // struct and calling g_type_register_static().1504 // struct and calling g_type_register_static().
1501 func TypeRegisterStaticSimple(ParentTypeVar types.GType, TypeNameVar string, ClassSizeVar uint, ClassInitVar *ClassInitFunc, InstanceSizeVar uint, InstanceInitVar *InstanceInitFunc, FlagsVar TypeFlags) types.GType {1505 func TypeRegisterStaticSimple(ParentTypeVar types.GType, TypeNameVar string, ClassSizeVar uint, ClassInitVar *ClassInitFunc, InstanceSizeVar uint, InstanceInitVar *InstanceInitFunc, FlagsVar TypeFlags) types.GType {
1502 1506
1503- ClassInitVarPtr := uintptr(unsafe.Pointer(ClassInitVar))
1504 var ClassInitVarRef uintptr1507 var ClassInitVarRef uintptr
1505- if cbRefPtr, ok := glib.GetCallback(ClassInitVarPtr); ok {1508+ if ClassInitVar != nil {
1506- ClassInitVarRef = cbRefPtr1509+ ClassInitVarPtr := uintptr(unsafe.Pointer(ClassInitVar))
1507- } else {1510+ if cbRefPtr, ok := glib.GetCallback(ClassInitVarPtr); ok {
1508- fcb := func(arg0 *TypeClass, arg1 uintptr) {1511+ ClassInitVarRef = cbRefPtr
1509- cbFn := *ClassInitVar1512+ } else {
1510- cbFn(arg0, arg1)1513+ fcb := func(arg0 *TypeClass, arg1 uintptr) {
1514+ cbFn := *ClassInitVar
1515+ cbFn(arg0, arg1)
1516+ }
1517+ ClassInitVarRef = purego.NewCallback(fcb)
1518+ glib.SaveCallback(ClassInitVarPtr, ClassInitVarRef)
1511 }1519 }
1512- ClassInitVarRef = purego.NewCallback(fcb)
1513- glib.SaveCallback(ClassInitVarPtr, ClassInitVarRef)
1514 }1520 }
1515 1521
1516- InstanceInitVarPtr := uintptr(unsafe.Pointer(InstanceInitVar))
1517 var InstanceInitVarRef uintptr1522 var InstanceInitVarRef uintptr
1518- if cbRefPtr, ok := glib.GetCallback(InstanceInitVarPtr); ok {1523+ if InstanceInitVar != nil {
1519- InstanceInitVarRef = cbRefPtr1524+ InstanceInitVarPtr := uintptr(unsafe.Pointer(InstanceInitVar))
1520- } else {1525+ if cbRefPtr, ok := glib.GetCallback(InstanceInitVarPtr); ok {
1521- fcb := func(arg0 *TypeInstance, arg1 *TypeClass) {1526+ InstanceInitVarRef = cbRefPtr
1522- cbFn := *InstanceInitVar1527+ } else {
1523- cbFn(arg0, arg1)1528+ fcb := func(arg0 *TypeInstance, arg1 *TypeClass) {
1529+ cbFn := *InstanceInitVar
1530+ cbFn(arg0, arg1)
1531+ }
1532+ InstanceInitVarRef = purego.NewCallback(fcb)
1533+ glib.SaveCallback(InstanceInitVarPtr, InstanceInitVarRef)
1524 }1534 }
1525- InstanceInitVarRef = purego.NewCallback(fcb)
1526- glib.SaveCallback(InstanceInitVarPtr, InstanceInitVarRef)
1527 }1535 }
1528 1536
1529 cret := xTypeRegisterStaticSimple(ParentTypeVar, TypeNameVar, ClassSizeVar, ClassInitVarRef, InstanceSizeVar, InstanceInitVarRef, FlagsVar)1537 cret := xTypeRegisterStaticSimple(ParentTypeVar, TypeNameVar, ClassSizeVar, ClassInitVarRef, InstanceSizeVar, InstanceInitVarRef, FlagsVar)
@@ -1537,17 +1545,19 @@ var xTypeRemoveClassCacheFunc func(uintptr, uintptr)
1537 // g_type_remove_class_cache_func() to avoid leaks.1545 // g_type_remove_class_cache_func() to avoid leaks.
1538 func TypeRemoveClassCacheFunc(CacheDataVar uintptr, CacheFuncVar *TypeClassCacheFunc) {1546 func TypeRemoveClassCacheFunc(CacheDataVar uintptr, CacheFuncVar *TypeClassCacheFunc) {
1539 1547
1540- CacheFuncVarPtr := uintptr(unsafe.Pointer(CacheFuncVar))
1541 var CacheFuncVarRef uintptr1548 var CacheFuncVarRef uintptr
1542- if cbRefPtr, ok := glib.GetCallback(CacheFuncVarPtr); ok {1549+ if CacheFuncVar != nil {
1543- CacheFuncVarRef = cbRefPtr1550+ CacheFuncVarPtr := uintptr(unsafe.Pointer(CacheFuncVar))
1544- } else {1551+ if cbRefPtr, ok := glib.GetCallback(CacheFuncVarPtr); ok {
1545- fcb := func(arg0 uintptr, arg1 *TypeClass) bool {1552+ CacheFuncVarRef = cbRefPtr
1546- cbFn := *CacheFuncVar1553+ } else {
1547- return cbFn(arg0, arg1)1554+ fcb := func(arg0 uintptr, arg1 *TypeClass) bool {
1555+ cbFn := *CacheFuncVar
1556+ return cbFn(arg0, arg1)
1557+ }
1558+ CacheFuncVarRef = purego.NewCallback(fcb)
1559+ glib.SaveCallback(CacheFuncVarPtr, CacheFuncVarRef)
1548 }1560 }
1549- CacheFuncVarRef = purego.NewCallback(fcb)
1550- glib.SaveCallback(CacheFuncVarPtr, CacheFuncVarRef)
1551 }1561 }
1552 1562
1553 xTypeRemoveClassCacheFunc(CacheDataVar, CacheFuncVarRef)1563 xTypeRemoveClassCacheFunc(CacheDataVar, CacheFuncVarRef)
@@ -1560,17 +1570,19 @@ var xTypeRemoveInterfaceCheck func(uintptr, uintptr)
1560 // g_type_add_interface_check().1570 // g_type_add_interface_check().
1561 func TypeRemoveInterfaceCheck(CheckDataVar uintptr, CheckFuncVar *TypeInterfaceCheckFunc) {1571 func TypeRemoveInterfaceCheck(CheckDataVar uintptr, CheckFuncVar *TypeInterfaceCheckFunc) {
1562 1572
1563- CheckFuncVarPtr := uintptr(unsafe.Pointer(CheckFuncVar))
1564 var CheckFuncVarRef uintptr1573 var CheckFuncVarRef uintptr
1565- if cbRefPtr, ok := glib.GetCallback(CheckFuncVarPtr); ok {1574+ if CheckFuncVar != nil {
1566- CheckFuncVarRef = cbRefPtr1575+ CheckFuncVarPtr := uintptr(unsafe.Pointer(CheckFuncVar))
1567- } else {1576+ if cbRefPtr, ok := glib.GetCallback(CheckFuncVarPtr); ok {
1568- fcb := func(arg0 uintptr, arg1 *TypeInterface) {1577+ CheckFuncVarRef = cbRefPtr
1569- cbFn := *CheckFuncVar1578+ } else {
1570- cbFn(arg0, arg1)1579+ fcb := func(arg0 uintptr, arg1 *TypeInterface) {
1580+ cbFn := *CheckFuncVar
1581+ cbFn(arg0, arg1)
1582+ }
1583+ CheckFuncVarRef = purego.NewCallback(fcb)
1584+ glib.SaveCallback(CheckFuncVarPtr, CheckFuncVarRef)
1571 }1585 }
1572- CheckFuncVarRef = purego.NewCallback(fcb)
1573- glib.SaveCallback(CheckFuncVarPtr, CheckFuncVarRef)
1574 }1586 }
1575 1587
1576 xTypeRemoveInterfaceCheck(CheckDataVar, CheckFuncVarRef)1588 xTypeRemoveInterfaceCheck(CheckDataVar, CheckFuncVarRef)
M v4/gobject/gvalue.go +11 -9
@@ -848,17 +848,19 @@ var xValueRegisterTransformFunc func(types.GType, types.GType, uintptr)
848 // @dest_type will be replaced.848 // @dest_type will be replaced.
849 func ValueRegisterTransformFunc(SrcTypeVar types.GType, DestTypeVar types.GType, TransformFuncVar *ValueTransform) {849 func ValueRegisterTransformFunc(SrcTypeVar types.GType, DestTypeVar types.GType, TransformFuncVar *ValueTransform) {
850 850
851- TransformFuncVarPtr := uintptr(unsafe.Pointer(TransformFuncVar))
852 var TransformFuncVarRef uintptr851 var TransformFuncVarRef uintptr
853- if cbRefPtr, ok := glib.GetCallback(TransformFuncVarPtr); ok {852+ if TransformFuncVar != nil {
854- TransformFuncVarRef = cbRefPtr853+ TransformFuncVarPtr := uintptr(unsafe.Pointer(TransformFuncVar))
855- } else {854+ if cbRefPtr, ok := glib.GetCallback(TransformFuncVarPtr); ok {
856- fcb := func(arg0 *Value, arg1 *Value) {855+ TransformFuncVarRef = cbRefPtr
857- cbFn := *TransformFuncVar856+ } else {
858- cbFn(arg0, arg1)857+ fcb := func(arg0 *Value, arg1 *Value) {
858+ cbFn := *TransformFuncVar
859+ cbFn(arg0, arg1)
860+ }
861+ TransformFuncVarRef = purego.NewCallback(fcb)
862+ glib.SaveCallback(TransformFuncVarPtr, TransformFuncVarRef)
859 }863 }
860- TransformFuncVarRef = purego.NewCallback(fcb)
861- glib.SaveCallback(TransformFuncVarPtr, TransformFuncVarRef)
862 }864 }
863 865
864 xValueRegisterTransformFunc(SrcTypeVar, DestTypeVar, TransformFuncVarRef)866 xValueRegisterTransformFunc(SrcTypeVar, DestTypeVar, TransformFuncVarRef)
M v4/gobject/gvaluearray.go +22 -18
@@ -145,17 +145,19 @@ var xValueArraySort func(uintptr, uintptr) *ValueArray
145 // C qsort() function.145 // C qsort() function.
146 func (x *ValueArray) Sort(CompareFuncVar *glib.CompareFunc) *ValueArray {146 func (x *ValueArray) Sort(CompareFuncVar *glib.CompareFunc) *ValueArray {
147 147
148- CompareFuncVarPtr := uintptr(unsafe.Pointer(CompareFuncVar))
149 var CompareFuncVarRef uintptr148 var CompareFuncVarRef uintptr
150- if cbRefPtr, ok := glib.GetCallback(CompareFuncVarPtr); ok {149+ if CompareFuncVar != nil {
151- CompareFuncVarRef = cbRefPtr150+ CompareFuncVarPtr := uintptr(unsafe.Pointer(CompareFuncVar))
152- } else {151+ if cbRefPtr, ok := glib.GetCallback(CompareFuncVarPtr); ok {
153- fcb := func(arg0 uintptr, arg1 uintptr) int {152+ CompareFuncVarRef = cbRefPtr
154- cbFn := *CompareFuncVar153+ } else {
155- return cbFn(arg0, arg1)154+ fcb := func(arg0 uintptr, arg1 uintptr) int {
155+ cbFn := *CompareFuncVar
156+ return cbFn(arg0, arg1)
157+ }
158+ CompareFuncVarRef = purego.NewCallback(fcb)
159+ glib.SaveCallback(CompareFuncVarPtr, CompareFuncVarRef)
156 }160 }
157- CompareFuncVarRef = purego.NewCallback(fcb)
158- glib.SaveCallback(CompareFuncVarPtr, CompareFuncVarRef)
159 }161 }
160 162
161 cret := xValueArraySort(x.GoPointer(), CompareFuncVarRef)163 cret := xValueArraySort(x.GoPointer(), CompareFuncVarRef)
@@ -171,17 +173,19 @@ var xValueArraySortWithData func(uintptr, uintptr, uintptr) *ValueArray
171 // C qsort() function.173 // C qsort() function.
172 func (x *ValueArray) SortWithData(CompareFuncVar *glib.CompareDataFunc, UserDataVar uintptr) *ValueArray {174 func (x *ValueArray) SortWithData(CompareFuncVar *glib.CompareDataFunc, UserDataVar uintptr) *ValueArray {
173 175
174- CompareFuncVarPtr := uintptr(unsafe.Pointer(CompareFuncVar))
175 var CompareFuncVarRef uintptr176 var CompareFuncVarRef uintptr
176- if cbRefPtr, ok := glib.GetCallback(CompareFuncVarPtr); ok {177+ if CompareFuncVar != nil {
177- CompareFuncVarRef = cbRefPtr178+ CompareFuncVarPtr := uintptr(unsafe.Pointer(CompareFuncVar))
178- } else {179+ if cbRefPtr, ok := glib.GetCallback(CompareFuncVarPtr); ok {
179- fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int {180+ CompareFuncVarRef = cbRefPtr
180- cbFn := *CompareFuncVar181+ } else {
181- return cbFn(arg0, arg1, arg2)182+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int {
183+ cbFn := *CompareFuncVar
184+ return cbFn(arg0, arg1, arg2)
185+ }
186+ CompareFuncVarRef = purego.NewCallback(fcb)
187+ glib.SaveCallback(CompareFuncVarPtr, CompareFuncVarRef)
182 }188 }
183- CompareFuncVarRef = purego.NewCallback(fcb)
184- glib.SaveCallback(CompareFuncVarPtr, CompareFuncVarRef)
185 }189 }
186 190
187 cret := xValueArraySortWithData(x.GoPointer(), CompareFuncVarRef, UserDataVar)191 cret := xValueArraySortWithData(x.GoPointer(), CompareFuncVarRef, UserDataVar)
M v4/gsk/gsktypes.go +22 -18
@@ -247,17 +247,19 @@ var xPathForeach func(uintptr, PathForeachFlags, uintptr, uintptr) bool
247 // an approximation of the path using just the allowed operations.247 // an approximation of the path using just the allowed operations.
248 func (x *Path) Foreach(FlagsVar PathForeachFlags, FuncVar *PathForeachFunc, UserDataVar uintptr) bool {248 func (x *Path) Foreach(FlagsVar PathForeachFlags, FuncVar *PathForeachFunc, UserDataVar uintptr) bool {
249 249
250- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
251 var FuncVarRef uintptr250 var FuncVarRef uintptr
252- if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok {251+ if FuncVar != nil {
253- FuncVarRef = cbRefPtr252+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
254- } else {253+ if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok {
255- fcb := func(arg0 PathOperation, arg1 []graphene.Point, arg2 uint, arg3 float32, arg4 uintptr) bool {254+ FuncVarRef = cbRefPtr
256- cbFn := *FuncVar255+ } else {
257- return cbFn(arg0, arg1, arg2, arg3, arg4)256+ fcb := func(arg0 PathOperation, arg1 []graphene.Point, arg2 uint, arg3 float32, arg4 uintptr) bool {
257+ cbFn := *FuncVar
258+ return cbFn(arg0, arg1, arg2, arg3, arg4)
259+ }
260+ FuncVarRef = purego.NewCallback(fcb)
261+ glib.SaveCallback(FuncVarPtr, FuncVarRef)
258 }262 }
259- FuncVarRef = purego.NewCallback(fcb)
260- glib.SaveCallback(FuncVarPtr, FuncVarRef)
261 }263 }
262 264
263 cret := xPathForeach(x.GoPointer(), FlagsVar, FuncVarRef, UserDataVar)265 cret := xPathForeach(x.GoPointer(), FlagsVar, FuncVarRef, UserDataVar)
@@ -283,17 +285,19 @@ var xPathForeachIntersection func(uintptr, *Path, uintptr, uintptr) bool
283 // If @func returns `FALSE`, the iteration is stopped.285 // If @func returns `FALSE`, the iteration is stopped.
284 func (x *Path) ForeachIntersection(Path2Var *Path, FuncVar *PathIntersectionFunc, UserDataVar uintptr) bool {286 func (x *Path) ForeachIntersection(Path2Var *Path, FuncVar *PathIntersectionFunc, UserDataVar uintptr) bool {
285 287
286- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
287 var FuncVarRef uintptr288 var FuncVarRef uintptr
288- if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok {289+ if FuncVar != nil {
289- FuncVarRef = cbRefPtr290+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
290- } else {291+ if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok {
291- fcb := func(arg0 *Path, arg1 *PathPoint, arg2 *Path, arg3 *PathPoint, arg4 PathIntersection, arg5 uintptr) bool {292+ FuncVarRef = cbRefPtr
292- cbFn := *FuncVar293+ } else {
293- return cbFn(arg0, arg1, arg2, arg3, arg4, arg5)294+ fcb := func(arg0 *Path, arg1 *PathPoint, arg2 *Path, arg3 *PathPoint, arg4 PathIntersection, arg5 uintptr) bool {
295+ cbFn := *FuncVar
296+ return cbFn(arg0, arg1, arg2, arg3, arg4, arg5)
297+ }
298+ FuncVarRef = purego.NewCallback(fcb)
299+ glib.SaveCallback(FuncVarPtr, FuncVarRef)
294 }300 }
295- FuncVarRef = purego.NewCallback(fcb)
296- glib.SaveCallback(FuncVarPtr, FuncVarRef)
297 }301 }
298 302
299 cret := xPathForeachIntersection(x.GoPointer(), Path2Var, FuncVarRef, UserDataVar)303 cret := xPathForeachIntersection(x.GoPointer(), Path2Var, FuncVarRef, UserDataVar)
M v4/gtk/gtkassistant.go +11 -9
@@ -375,17 +375,19 @@ func (x *Assistant) SetForwardPageFunc(PageFuncVar *AssistantPageFunc, DataVar u
375 }375 }
376 }376 }
377 377
378- DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
379 var DestroyVarRef uintptr378 var DestroyVarRef uintptr
380- if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok {379+ if DestroyVar != nil {
381- DestroyVarRef = cbRefPtr380+ DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
382- } else {381+ if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok {
383- fcb := func(arg0 uintptr) {382+ DestroyVarRef = cbRefPtr
384- cbFn := *DestroyVar383+ } else {
385- cbFn(arg0)384+ fcb := func(arg0 uintptr) {
385+ cbFn := *DestroyVar
386+ cbFn(arg0)
387+ }
388+ DestroyVarRef = purego.NewCallback(fcb)
389+ glib.SaveCallback(DestroyVarPtr, DestroyVarRef)
386 }390 }
387- DestroyVarRef = purego.NewCallback(fcb)
388- glib.SaveCallback(DestroyVarPtr, DestroyVarRef)
389 }391 }
390 392
391 xAssistantSetForwardPageFunc(x.GoPointer(), PageFuncVarRef, DataVar, DestroyVarRef)393 xAssistantSetForwardPageFunc(x.GoPointer(), PageFuncVarRef, DataVar, DestroyVarRef)
M v4/gtk/gtkbuilderscope.go +22 -18
@@ -274,17 +274,19 @@ var xBuilderCScopeAddCallbackSymbol func(uintptr, string, uintptr)
274 // namespace.274 // namespace.
275 func (x *BuilderCScope) AddCallbackSymbol(CallbackNameVar string, CallbackSymbolVar *gobject.Callback) {275 func (x *BuilderCScope) AddCallbackSymbol(CallbackNameVar string, CallbackSymbolVar *gobject.Callback) {
276 276
277- CallbackSymbolVarPtr := uintptr(unsafe.Pointer(CallbackSymbolVar))
278 var CallbackSymbolVarRef uintptr277 var CallbackSymbolVarRef uintptr
279- if cbRefPtr, ok := glib.GetCallback(CallbackSymbolVarPtr); ok {278+ if CallbackSymbolVar != nil {
280- CallbackSymbolVarRef = cbRefPtr279+ CallbackSymbolVarPtr := uintptr(unsafe.Pointer(CallbackSymbolVar))
281- } else {280+ if cbRefPtr, ok := glib.GetCallback(CallbackSymbolVarPtr); ok {
282- fcb := func() {281+ CallbackSymbolVarRef = cbRefPtr
283- cbFn := *CallbackSymbolVar282+ } else {
284- cbFn()283+ fcb := func() {
284+ cbFn := *CallbackSymbolVar
285+ cbFn()
286+ }
287+ CallbackSymbolVarRef = purego.NewCallback(fcb)
288+ glib.SaveCallback(CallbackSymbolVarPtr, CallbackSymbolVarRef)
285 }289 }
286- CallbackSymbolVarRef = purego.NewCallback(fcb)
287- glib.SaveCallback(CallbackSymbolVarPtr, CallbackSymbolVarRef)
288 }290 }
289 291
290 xBuilderCScopeAddCallbackSymbol(x.GoPointer(), CallbackNameVar, CallbackSymbolVarRef)292 xBuilderCScopeAddCallbackSymbol(x.GoPointer(), CallbackNameVar, CallbackSymbolVarRef)
@@ -299,17 +301,19 @@ var xBuilderCScopeAddCallbackSymbols func(uintptr, string, uintptr, ...interface
299 // for each symbol.301 // for each symbol.
300 func (x *BuilderCScope) AddCallbackSymbols(FirstCallbackNameVar string, FirstCallbackSymbolVar *gobject.Callback, varArgs ...interface{}) {302 func (x *BuilderCScope) AddCallbackSymbols(FirstCallbackNameVar string, FirstCallbackSymbolVar *gobject.Callback, varArgs ...interface{}) {
301 303
302- FirstCallbackSymbolVarPtr := uintptr(unsafe.Pointer(FirstCallbackSymbolVar))
303 var FirstCallbackSymbolVarRef uintptr304 var FirstCallbackSymbolVarRef uintptr
304- if cbRefPtr, ok := glib.GetCallback(FirstCallbackSymbolVarPtr); ok {305+ if FirstCallbackSymbolVar != nil {
305- FirstCallbackSymbolVarRef = cbRefPtr306+ FirstCallbackSymbolVarPtr := uintptr(unsafe.Pointer(FirstCallbackSymbolVar))
306- } else {307+ if cbRefPtr, ok := glib.GetCallback(FirstCallbackSymbolVarPtr); ok {
307- fcb := func() {308+ FirstCallbackSymbolVarRef = cbRefPtr
308- cbFn := *FirstCallbackSymbolVar309+ } else {
309- cbFn()310+ fcb := func() {
311+ cbFn := *FirstCallbackSymbolVar
312+ cbFn()
313+ }
314+ FirstCallbackSymbolVarRef = purego.NewCallback(fcb)
315+ glib.SaveCallback(FirstCallbackSymbolVarPtr, FirstCallbackSymbolVarRef)
310 }316 }
311- FirstCallbackSymbolVarRef = purego.NewCallback(fcb)
312- glib.SaveCallback(FirstCallbackSymbolVarPtr, FirstCallbackSymbolVarRef)
313 }317 }
314 318
315 xBuilderCScopeAddCallbackSymbols(x.GoPointer(), FirstCallbackNameVar, FirstCallbackSymbolVarRef, varArgs...)319 xBuilderCScopeAddCallbackSymbols(x.GoPointer(), FirstCallbackNameVar, FirstCallbackSymbolVarRef, varArgs...)
M v4/gtk/gtkcellarea.go +22 -18
@@ -1299,17 +1299,19 @@ var xCellAreaForeach func(uintptr, uintptr, uintptr)
1299 // Calls @callback for every `GtkCellRenderer` in @area.1299 // Calls @callback for every `GtkCellRenderer` in @area.
1300 func (x *CellArea) Foreach(CallbackVar *CellCallback, CallbackDataVar uintptr) {1300 func (x *CellArea) Foreach(CallbackVar *CellCallback, CallbackDataVar uintptr) {
1301 1301
1302- CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
1303 var CallbackVarRef uintptr1302 var CallbackVarRef uintptr
1304- if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {1303+ if CallbackVar != nil {
1305- CallbackVarRef = cbRefPtr1304+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
1306- } else {1305+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
1307- fcb := func(arg0 uintptr, arg1 uintptr) bool {1306+ CallbackVarRef = cbRefPtr
1308- cbFn := *CallbackVar1307+ } else {
1309- return cbFn(arg0, arg1)1308+ fcb := func(arg0 uintptr, arg1 uintptr) bool {
1309+ cbFn := *CallbackVar
1310+ return cbFn(arg0, arg1)
1311+ }
1312+ CallbackVarRef = purego.NewCallback(fcb)
1313+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
1310 }1314 }
1311- CallbackVarRef = purego.NewCallback(fcb)
1312- glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
1313 }1315 }
1314 1316
1315 xCellAreaForeach(x.GoPointer(), CallbackVarRef, CallbackDataVar)1317 xCellAreaForeach(x.GoPointer(), CallbackVarRef, CallbackDataVar)
@@ -1322,17 +1324,19 @@ var xCellAreaForeachAlloc func(uintptr, uintptr, uintptr, *gdk.Rectangle, *gdk.R
1322 // allocated rectangle inside @cell_area.1324 // allocated rectangle inside @cell_area.
1323 func (x *CellArea) ForeachAlloc(ContextVar *CellAreaContext, WidgetVar *Widget, CellAreaVar *gdk.Rectangle, BackgroundAreaVar *gdk.Rectangle, CallbackVar *CellAllocCallback, CallbackDataVar uintptr) {1325 func (x *CellArea) ForeachAlloc(ContextVar *CellAreaContext, WidgetVar *Widget, CellAreaVar *gdk.Rectangle, BackgroundAreaVar *gdk.Rectangle, CallbackVar *CellAllocCallback, CallbackDataVar uintptr) {
1324 1326
1325- CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
1326 var CallbackVarRef uintptr1327 var CallbackVarRef uintptr
1327- if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {1328+ if CallbackVar != nil {
1328- CallbackVarRef = cbRefPtr1329+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
1329- } else {1330+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
1330- fcb := func(arg0 uintptr, arg1 *gdk.Rectangle, arg2 *gdk.Rectangle, arg3 uintptr) bool {1331+ CallbackVarRef = cbRefPtr
1331- cbFn := *CallbackVar1332+ } else {
1332- return cbFn(arg0, arg1, arg2, arg3)1333+ fcb := func(arg0 uintptr, arg1 *gdk.Rectangle, arg2 *gdk.Rectangle, arg3 uintptr) bool {
1334+ cbFn := *CallbackVar
1335+ return cbFn(arg0, arg1, arg2, arg3)
1336+ }
1337+ CallbackVarRef = purego.NewCallback(fcb)
1338+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
1333 }1339 }
1334- CallbackVarRef = purego.NewCallback(fcb)
1335- glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
1336 }1340 }
1337 1341
1338 xCellAreaForeachAlloc(x.GoPointer(), ContextVar.GoPointer(), WidgetVar.GoPointer(), CellAreaVar, BackgroundAreaVar, CallbackVarRef, CallbackDataVar)1342 xCellAreaForeachAlloc(x.GoPointer(), ContextVar.GoPointer(), WidgetVar.GoPointer(), CellAreaVar, BackgroundAreaVar, CallbackVarRef, CallbackDataVar)
M v4/gtk/gtkcustomfilter.go +22 -18
@@ -70,17 +70,19 @@ func NewCustomFilter(MatchFuncVar *CustomFilterFunc, UserDataVar uintptr, UserDe
70 }70 }
71 }71 }
72 72
73- UserDestroyVarPtr := uintptr(unsafe.Pointer(UserDestroyVar))
74 var UserDestroyVarRef uintptr73 var UserDestroyVarRef uintptr
75- if cbRefPtr, ok := glib.GetCallback(UserDestroyVarPtr); ok {74+ if UserDestroyVar != nil {
76- UserDestroyVarRef = cbRefPtr75+ UserDestroyVarPtr := uintptr(unsafe.Pointer(UserDestroyVar))
77- } else {76+ if cbRefPtr, ok := glib.GetCallback(UserDestroyVarPtr); ok {
78- fcb := func(arg0 uintptr) {77+ UserDestroyVarRef = cbRefPtr
79- cbFn := *UserDestroyVar78+ } else {
80- cbFn(arg0)79+ fcb := func(arg0 uintptr) {
80+ cbFn := *UserDestroyVar
81+ cbFn(arg0)
82+ }
83+ UserDestroyVarRef = purego.NewCallback(fcb)
84+ glib.SaveCallback(UserDestroyVarPtr, UserDestroyVarRef)
81 }85 }
82- UserDestroyVarRef = purego.NewCallback(fcb)
83- glib.SaveCallback(UserDestroyVarPtr, UserDestroyVarRef)
84 }86 }
85 87
86 cret := xNewCustomFilter(MatchFuncVarRef, UserDataVar, UserDestroyVarRef)88 cret := xNewCustomFilter(MatchFuncVarRef, UserDataVar, UserDestroyVarRef)
@@ -121,17 +123,19 @@ func (x *CustomFilter) SetFilterFunc(MatchFuncVar *CustomFilterFunc, UserDataVar
121 }123 }
122 }124 }
123 125
124- UserDestroyVarPtr := uintptr(unsafe.Pointer(UserDestroyVar))
125 var UserDestroyVarRef uintptr126 var UserDestroyVarRef uintptr
126- if cbRefPtr, ok := glib.GetCallback(UserDestroyVarPtr); ok {127+ if UserDestroyVar != nil {
127- UserDestroyVarRef = cbRefPtr128+ UserDestroyVarPtr := uintptr(unsafe.Pointer(UserDestroyVar))
128- } else {129+ if cbRefPtr, ok := glib.GetCallback(UserDestroyVarPtr); ok {
129- fcb := func(arg0 uintptr) {130+ UserDestroyVarRef = cbRefPtr
130- cbFn := *UserDestroyVar131+ } else {
131- cbFn(arg0)132+ fcb := func(arg0 uintptr) {
133+ cbFn := *UserDestroyVar
134+ cbFn(arg0)
135+ }
136+ UserDestroyVarRef = purego.NewCallback(fcb)
137+ glib.SaveCallback(UserDestroyVarPtr, UserDestroyVarRef)
132 }138 }
133- UserDestroyVarRef = purego.NewCallback(fcb)
134- glib.SaveCallback(UserDestroyVarPtr, UserDestroyVarRef)
135 }139 }
136 140
137 xCustomFilterSetFilterFunc(x.GoPointer(), MatchFuncVarRef, UserDataVar, UserDestroyVarRef)141 xCustomFilterSetFilterFunc(x.GoPointer(), MatchFuncVarRef, UserDataVar, UserDestroyVarRef)
M v4/gtk/gtkcustomlayout.go +22 -18
@@ -77,30 +77,34 @@ func NewCustomLayout(RequestModeVar *CustomRequestModeFunc, MeasureVar *CustomMe
77 }77 }
78 }78 }
79 79
80- MeasureVarPtr := uintptr(unsafe.Pointer(MeasureVar))
81 var MeasureVarRef uintptr80 var MeasureVarRef uintptr
82- if cbRefPtr, ok := glib.GetCallback(MeasureVarPtr); ok {81+ if MeasureVar != nil {
83- MeasureVarRef = cbRefPtr82+ MeasureVarPtr := uintptr(unsafe.Pointer(MeasureVar))
84- } else {83+ if cbRefPtr, ok := glib.GetCallback(MeasureVarPtr); ok {
85- fcb := func(arg0 uintptr, arg1 Orientation, arg2 int, arg3 *int, arg4 *int, arg5 *int, arg6 *int) {84+ MeasureVarRef = cbRefPtr
86- cbFn := *MeasureVar85+ } else {
87- cbFn(arg0, arg1, arg2, arg3, arg4, arg5, arg6)86+ fcb := func(arg0 uintptr, arg1 Orientation, arg2 int, arg3 *int, arg4 *int, arg5 *int, arg6 *int) {
87+ cbFn := *MeasureVar
88+ cbFn(arg0, arg1, arg2, arg3, arg4, arg5, arg6)
89+ }
90+ MeasureVarRef = purego.NewCallback(fcb)
91+ glib.SaveCallback(MeasureVarPtr, MeasureVarRef)
88 }92 }
89- MeasureVarRef = purego.NewCallback(fcb)
90- glib.SaveCallback(MeasureVarPtr, MeasureVarRef)
91 }93 }
92 94
93- AllocateVarPtr := uintptr(unsafe.Pointer(AllocateVar))
94 var AllocateVarRef uintptr95 var AllocateVarRef uintptr
95- if cbRefPtr, ok := glib.GetCallback(AllocateVarPtr); ok {96+ if AllocateVar != nil {
96- AllocateVarRef = cbRefPtr97+ AllocateVarPtr := uintptr(unsafe.Pointer(AllocateVar))
97- } else {98+ if cbRefPtr, ok := glib.GetCallback(AllocateVarPtr); ok {
98- fcb := func(arg0 uintptr, arg1 int, arg2 int, arg3 int) {99+ AllocateVarRef = cbRefPtr
99- cbFn := *AllocateVar100+ } else {
100- cbFn(arg0, arg1, arg2, arg3)101+ fcb := func(arg0 uintptr, arg1 int, arg2 int, arg3 int) {
102+ cbFn := *AllocateVar
103+ cbFn(arg0, arg1, arg2, arg3)
104+ }
105+ AllocateVarRef = purego.NewCallback(fcb)
106+ glib.SaveCallback(AllocateVarPtr, AllocateVarRef)
101 }107 }
102- AllocateVarRef = purego.NewCallback(fcb)
103- glib.SaveCallback(AllocateVarPtr, AllocateVarRef)
104 }108 }
105 109
106 cret := xNewCustomLayout(RequestModeVarRef, MeasureVarRef, AllocateVarRef)110 cret := xNewCustomLayout(RequestModeVarRef, MeasureVarRef, AllocateVarRef)
M v4/gtk/gtkcustomsorter.go +11 -9
@@ -115,17 +115,19 @@ func (x *CustomSorter) SetSortFunc(SortFuncVar *glib.CompareDataFunc, UserDataVa
115 }115 }
116 }116 }
117 117
118- UserDestroyVarPtr := uintptr(unsafe.Pointer(UserDestroyVar))
119 var UserDestroyVarRef uintptr118 var UserDestroyVarRef uintptr
120- if cbRefPtr, ok := glib.GetCallback(UserDestroyVarPtr); ok {119+ if UserDestroyVar != nil {
121- UserDestroyVarRef = cbRefPtr120+ UserDestroyVarPtr := uintptr(unsafe.Pointer(UserDestroyVar))
122- } else {121+ if cbRefPtr, ok := glib.GetCallback(UserDestroyVarPtr); ok {
123- fcb := func(arg0 uintptr) {122+ UserDestroyVarRef = cbRefPtr
124- cbFn := *UserDestroyVar123+ } else {
125- cbFn(arg0)124+ fcb := func(arg0 uintptr) {
125+ cbFn := *UserDestroyVar
126+ cbFn(arg0)
127+ }
128+ UserDestroyVarRef = purego.NewCallback(fcb)
129+ glib.SaveCallback(UserDestroyVarPtr, UserDestroyVarRef)
126 }130 }
127- UserDestroyVarRef = purego.NewCallback(fcb)
128- glib.SaveCallback(UserDestroyVarPtr, UserDestroyVarRef)
129 }131 }
130 132
131 xCustomSorterSetSortFunc(x.GoPointer(), SortFuncVarRef, UserDataVar, UserDestroyVarRef)133 xCustomSorterSetSortFunc(x.GoPointer(), SortFuncVarRef, UserDataVar, UserDestroyVarRef)
M v4/gtk/gtkdrawingarea.go +11 -9
@@ -259,17 +259,19 @@ func (x *DrawingArea) SetDrawFunc(DrawFuncVar *DrawingAreaDrawFunc, UserDataVar
259 }259 }
260 }260 }
261 261
262- DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
263 var DestroyVarRef uintptr262 var DestroyVarRef uintptr
264- if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok {263+ if DestroyVar != nil {
265- DestroyVarRef = cbRefPtr264+ DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
266- } else {265+ if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok {
267- fcb := func(arg0 uintptr) {266+ DestroyVarRef = cbRefPtr
268- cbFn := *DestroyVar267+ } else {
269- cbFn(arg0)268+ fcb := func(arg0 uintptr) {
269+ cbFn := *DestroyVar
270+ cbFn(arg0)
271+ }
272+ DestroyVarRef = purego.NewCallback(fcb)
273+ glib.SaveCallback(DestroyVarPtr, DestroyVarRef)
270 }274 }
271- DestroyVarRef = purego.NewCallback(fcb)
272- glib.SaveCallback(DestroyVarPtr, DestroyVarRef)
273 }275 }
274 276
275 xDrawingAreaSetDrawFunc(x.GoPointer(), DrawFuncVarRef, UserDataVar, DestroyVarRef)277 xDrawingAreaSetDrawFunc(x.GoPointer(), DrawFuncVarRef, UserDataVar, DestroyVarRef)
M v4/gtk/gtkentrycompletion.go +22 -18
@@ -285,30 +285,34 @@ var xEntryCompletionSetMatchFunc func(uintptr, uintptr, uintptr, uintptr)
285 // should not be in the completion list.285 // should not be in the completion list.
286 func (x *EntryCompletion) SetMatchFunc(FuncVar *EntryCompletionMatchFunc, FuncDataVar uintptr, FuncNotifyVar *glib.DestroyNotify) {286 func (x *EntryCompletion) SetMatchFunc(FuncVar *EntryCompletionMatchFunc, FuncDataVar uintptr, FuncNotifyVar *glib.DestroyNotify) {
287 287
288- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
289 var FuncVarRef uintptr288 var FuncVarRef uintptr
290- if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok {289+ if FuncVar != nil {
291- FuncVarRef = cbRefPtr290+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
292- } else {291+ if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok {
293- fcb := func(arg0 uintptr, arg1 string, arg2 *TreeIter, arg3 uintptr) bool {292+ FuncVarRef = cbRefPtr
294- cbFn := *FuncVar293+ } else {
295- return cbFn(arg0, arg1, arg2, arg3)294+ fcb := func(arg0 uintptr, arg1 string, arg2 *TreeIter, arg3 uintptr) bool {
295+ cbFn := *FuncVar
296+ return cbFn(arg0, arg1, arg2, arg3)
297+ }
298+ FuncVarRef = purego.NewCallback(fcb)
299+ glib.SaveCallback(FuncVarPtr, FuncVarRef)
296 }300 }
297- FuncVarRef = purego.NewCallback(fcb)
298- glib.SaveCallback(FuncVarPtr, FuncVarRef)
299 }301 }
300 302
301- FuncNotifyVarPtr := uintptr(unsafe.Pointer(FuncNotifyVar))
302 var FuncNotifyVarRef uintptr303 var FuncNotifyVarRef uintptr
303- if cbRefPtr, ok := glib.GetCallback(FuncNotifyVarPtr); ok {304+ if FuncNotifyVar != nil {
304- FuncNotifyVarRef = cbRefPtr305+ FuncNotifyVarPtr := uintptr(unsafe.Pointer(FuncNotifyVar))
305- } else {306+ if cbRefPtr, ok := glib.GetCallback(FuncNotifyVarPtr); ok {
306- fcb := func(arg0 uintptr) {307+ FuncNotifyVarRef = cbRefPtr
307- cbFn := *FuncNotifyVar308+ } else {
308- cbFn(arg0)309+ fcb := func(arg0 uintptr) {
310+ cbFn := *FuncNotifyVar
311+ cbFn(arg0)
312+ }
313+ FuncNotifyVarRef = purego.NewCallback(fcb)
314+ glib.SaveCallback(FuncNotifyVarPtr, FuncNotifyVarRef)
309 }315 }
310- FuncNotifyVarRef = purego.NewCallback(fcb)
311- glib.SaveCallback(FuncNotifyVarPtr, FuncNotifyVarRef)
312 }316 }
313 317
314 xEntryCompletionSetMatchFunc(x.GoPointer(), FuncVarRef, FuncDataVar, FuncNotifyVarRef)318 xEntryCompletionSetMatchFunc(x.GoPointer(), FuncVarRef, FuncDataVar, FuncNotifyVarRef)
M v4/gtk/gtkexpression.go +33 -27
@@ -196,17 +196,19 @@ func NewCClosureExpression(ValueTypeVar types.GType, MarshalVar *gobject.Closure
196 }196 }
197 }197 }
198 198
199- CallbackFuncVarPtr := uintptr(unsafe.Pointer(CallbackFuncVar))
200 var CallbackFuncVarRef uintptr199 var CallbackFuncVarRef uintptr
201- if cbRefPtr, ok := glib.GetCallback(CallbackFuncVarPtr); ok {200+ if CallbackFuncVar != nil {
202- CallbackFuncVarRef = cbRefPtr201+ CallbackFuncVarPtr := uintptr(unsafe.Pointer(CallbackFuncVar))
203- } else {202+ if cbRefPtr, ok := glib.GetCallback(CallbackFuncVarPtr); ok {
204- fcb := func() {203+ CallbackFuncVarRef = cbRefPtr
205- cbFn := *CallbackFuncVar204+ } else {
206- cbFn()205+ fcb := func() {
206+ cbFn := *CallbackFuncVar
207+ cbFn()
208+ }
209+ CallbackFuncVarRef = purego.NewCallback(fcb)
210+ glib.SaveCallback(CallbackFuncVarPtr, CallbackFuncVarRef)
207 }211 }
208- CallbackFuncVarRef = purego.NewCallback(fcb)
209- glib.SaveCallback(CallbackFuncVarPtr, CallbackFuncVarRef)
210 }212 }
211 213
212 var UserDestroyVarRef uintptr214 var UserDestroyVarRef uintptr
@@ -672,30 +674,34 @@ var xExpressionWatch func(uintptr, uintptr, uintptr, uintptr, uintptr) *Expressi
672 // the @notify will be invoked.674 // the @notify will be invoked.
673 func (x *Expression) Watch(ThisVar *gobject.Object, NotifyVar *ExpressionNotify, UserDataVar uintptr, UserDestroyVar *glib.DestroyNotify) *ExpressionWatch {675 func (x *Expression) Watch(ThisVar *gobject.Object, NotifyVar *ExpressionNotify, UserDataVar uintptr, UserDestroyVar *glib.DestroyNotify) *ExpressionWatch {
674 676
675- NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
676 var NotifyVarRef uintptr677 var NotifyVarRef uintptr
677- if cbRefPtr, ok := glib.GetCallback(NotifyVarPtr); ok {678+ if NotifyVar != nil {
678- NotifyVarRef = cbRefPtr679+ NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
679- } else {680+ if cbRefPtr, ok := glib.GetCallback(NotifyVarPtr); ok {
680- fcb := func(arg0 uintptr) {681+ NotifyVarRef = cbRefPtr
681- cbFn := *NotifyVar682+ } else {
682- cbFn(arg0)683+ fcb := func(arg0 uintptr) {
684+ cbFn := *NotifyVar
685+ cbFn(arg0)
686+ }
687+ NotifyVarRef = purego.NewCallback(fcb)
688+ glib.SaveCallback(NotifyVarPtr, NotifyVarRef)
683 }689 }
684- NotifyVarRef = purego.NewCallback(fcb)
685- glib.SaveCallback(NotifyVarPtr, NotifyVarRef)
686 }690 }
687 691
688- UserDestroyVarPtr := uintptr(unsafe.Pointer(UserDestroyVar))
689 var UserDestroyVarRef uintptr692 var UserDestroyVarRef uintptr
690- if cbRefPtr, ok := glib.GetCallback(UserDestroyVarPtr); ok {693+ if UserDestroyVar != nil {
691- UserDestroyVarRef = cbRefPtr694+ UserDestroyVarPtr := uintptr(unsafe.Pointer(UserDestroyVar))
692- } else {695+ if cbRefPtr, ok := glib.GetCallback(UserDestroyVarPtr); ok {
693- fcb := func(arg0 uintptr) {696+ UserDestroyVarRef = cbRefPtr
694- cbFn := *UserDestroyVar697+ } else {
695- cbFn(arg0)698+ fcb := func(arg0 uintptr) {
699+ cbFn := *UserDestroyVar
700+ cbFn(arg0)
701+ }
702+ UserDestroyVarRef = purego.NewCallback(fcb)
703+ glib.SaveCallback(UserDestroyVarPtr, UserDestroyVarRef)
696 }704 }
697- UserDestroyVarRef = purego.NewCallback(fcb)
698- glib.SaveCallback(UserDestroyVarPtr, UserDestroyVarRef)
699 }705 }
700 706
701 cret := xExpressionWatch(x.GoPointer(), ThisVar.GoPointer(), NotifyVarRef, UserDataVar, UserDestroyVarRef)707 cret := xExpressionWatch(x.GoPointer(), ThisVar.GoPointer(), NotifyVarRef, UserDataVar, UserDestroyVarRef)
M v4/gtk/gtkflowbox.go +55 -45
@@ -198,30 +198,34 @@ var xFlowBoxBindModel func(uintptr, uintptr, uintptr, uintptr, uintptr)
198 // should be implemented by the model.198 // should be implemented by the model.
199 func (x *FlowBox) BindModel(ModelVar gio.ListModel, CreateWidgetFuncVar *FlowBoxCreateWidgetFunc, UserDataVar uintptr, UserDataFreeFuncVar *glib.DestroyNotify) {199 func (x *FlowBox) BindModel(ModelVar gio.ListModel, CreateWidgetFuncVar *FlowBoxCreateWidgetFunc, UserDataVar uintptr, UserDataFreeFuncVar *glib.DestroyNotify) {
200 200
201- CreateWidgetFuncVarPtr := uintptr(unsafe.Pointer(CreateWidgetFuncVar))
202 var CreateWidgetFuncVarRef uintptr201 var CreateWidgetFuncVarRef uintptr
203- if cbRefPtr, ok := glib.GetCallback(CreateWidgetFuncVarPtr); ok {202+ if CreateWidgetFuncVar != nil {
204- CreateWidgetFuncVarRef = cbRefPtr203+ CreateWidgetFuncVarPtr := uintptr(unsafe.Pointer(CreateWidgetFuncVar))
205- } else {204+ if cbRefPtr, ok := glib.GetCallback(CreateWidgetFuncVarPtr); ok {
206- fcb := func(arg0 uintptr, arg1 uintptr) uintptr {205+ CreateWidgetFuncVarRef = cbRefPtr
207- cbFn := *CreateWidgetFuncVar206+ } else {
208- return cbFn(arg0, arg1)207+ fcb := func(arg0 uintptr, arg1 uintptr) uintptr {
208+ cbFn := *CreateWidgetFuncVar
209+ return cbFn(arg0, arg1)
210+ }
211+ CreateWidgetFuncVarRef = purego.NewCallback(fcb)
212+ glib.SaveCallback(CreateWidgetFuncVarPtr, CreateWidgetFuncVarRef)
209 }213 }
210- CreateWidgetFuncVarRef = purego.NewCallback(fcb)
211- glib.SaveCallback(CreateWidgetFuncVarPtr, CreateWidgetFuncVarRef)
212 }214 }
213 215
214- UserDataFreeFuncVarPtr := uintptr(unsafe.Pointer(UserDataFreeFuncVar))
215 var UserDataFreeFuncVarRef uintptr216 var UserDataFreeFuncVarRef uintptr
216- if cbRefPtr, ok := glib.GetCallback(UserDataFreeFuncVarPtr); ok {217+ if UserDataFreeFuncVar != nil {
217- UserDataFreeFuncVarRef = cbRefPtr218+ UserDataFreeFuncVarPtr := uintptr(unsafe.Pointer(UserDataFreeFuncVar))
218- } else {219+ if cbRefPtr, ok := glib.GetCallback(UserDataFreeFuncVarPtr); ok {
219- fcb := func(arg0 uintptr) {220+ UserDataFreeFuncVarRef = cbRefPtr
220- cbFn := *UserDataFreeFuncVar221+ } else {
221- cbFn(arg0)222+ fcb := func(arg0 uintptr) {
223+ cbFn := *UserDataFreeFuncVar
224+ cbFn(arg0)
225+ }
226+ UserDataFreeFuncVarRef = purego.NewCallback(fcb)
227+ glib.SaveCallback(UserDataFreeFuncVarPtr, UserDataFreeFuncVarRef)
222 }228 }
223- UserDataFreeFuncVarRef = purego.NewCallback(fcb)
224- glib.SaveCallback(UserDataFreeFuncVarPtr, UserDataFreeFuncVarRef)
225 }229 }
226 230
227 xFlowBoxBindModel(x.GoPointer(), ModelVar.GoPointer(), CreateWidgetFuncVarRef, UserDataVar, UserDataFreeFuncVarRef)231 xFlowBoxBindModel(x.GoPointer(), ModelVar.GoPointer(), CreateWidgetFuncVarRef, UserDataVar, UserDataFreeFuncVarRef)
@@ -440,17 +444,19 @@ var xFlowBoxSelectedForeach func(uintptr, uintptr, uintptr)
440 // this function.444 // this function.
441 func (x *FlowBox) SelectedForeach(FuncVar *FlowBoxForeachFunc, DataVar uintptr) {445 func (x *FlowBox) SelectedForeach(FuncVar *FlowBoxForeachFunc, DataVar uintptr) {
442 446
443- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
444 var FuncVarRef uintptr447 var FuncVarRef uintptr
445- if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok {448+ if FuncVar != nil {
446- FuncVarRef = cbRefPtr449+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
447- } else {450+ if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok {
448- fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {451+ FuncVarRef = cbRefPtr
449- cbFn := *FuncVar452+ } else {
450- cbFn(arg0, arg1, arg2)453+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
454+ cbFn := *FuncVar
455+ cbFn(arg0, arg1, arg2)
456+ }
457+ FuncVarRef = purego.NewCallback(fcb)
458+ glib.SaveCallback(FuncVarPtr, FuncVarRef)
451 }459 }
452- FuncVarRef = purego.NewCallback(fcb)
453- glib.SaveCallback(FuncVarPtr, FuncVarRef)
454 }460 }
455 461
456 xFlowBoxSelectedForeach(x.GoPointer(), FuncVarRef, DataVar)462 xFlowBoxSelectedForeach(x.GoPointer(), FuncVarRef, DataVar)
@@ -508,17 +514,19 @@ func (x *FlowBox) SetFilterFunc(FilterFuncVar *FlowBoxFilterFunc, UserDataVar ui
508 }514 }
509 }515 }
510 516
511- DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
512 var DestroyVarRef uintptr517 var DestroyVarRef uintptr
513- if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok {518+ if DestroyVar != nil {
514- DestroyVarRef = cbRefPtr519+ DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
515- } else {520+ if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok {
516- fcb := func(arg0 uintptr) {521+ DestroyVarRef = cbRefPtr
517- cbFn := *DestroyVar522+ } else {
518- cbFn(arg0)523+ fcb := func(arg0 uintptr) {
524+ cbFn := *DestroyVar
525+ cbFn(arg0)
526+ }
527+ DestroyVarRef = purego.NewCallback(fcb)
528+ glib.SaveCallback(DestroyVarPtr, DestroyVarRef)
519 }529 }
520- DestroyVarRef = purego.NewCallback(fcb)
521- glib.SaveCallback(DestroyVarPtr, DestroyVarRef)
522 }530 }
523 531
524 xFlowBoxSetFilterFunc(x.GoPointer(), FilterFuncVarRef, UserDataVar, DestroyVarRef)532 xFlowBoxSetFilterFunc(x.GoPointer(), FilterFuncVarRef, UserDataVar, DestroyVarRef)
@@ -626,17 +634,19 @@ func (x *FlowBox) SetSortFunc(SortFuncVar *FlowBoxSortFunc, UserDataVar uintptr,
626 }634 }
627 }635 }
628 636
629- DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
630 var DestroyVarRef uintptr637 var DestroyVarRef uintptr
631- if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok {638+ if DestroyVar != nil {
632- DestroyVarRef = cbRefPtr639+ DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
633- } else {640+ if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok {
634- fcb := func(arg0 uintptr) {641+ DestroyVarRef = cbRefPtr
635- cbFn := *DestroyVar642+ } else {
636- cbFn(arg0)643+ fcb := func(arg0 uintptr) {
644+ cbFn := *DestroyVar
645+ cbFn(arg0)
646+ }
647+ DestroyVarRef = purego.NewCallback(fcb)
648+ glib.SaveCallback(DestroyVarPtr, DestroyVarRef)
637 }649 }
638- DestroyVarRef = purego.NewCallback(fcb)
639- glib.SaveCallback(DestroyVarPtr, DestroyVarRef)
640 }650 }
641 651
642 xFlowBoxSetSortFunc(x.GoPointer(), SortFuncVarRef, UserDataVar, DestroyVarRef)652 xFlowBoxSetSortFunc(x.GoPointer(), SortFuncVarRef, UserDataVar, DestroyVarRef)
M v4/gtk/gtkiconview.go +11 -9
@@ -536,17 +536,19 @@ var xIconViewSelectedForeach func(uintptr, uintptr, uintptr)
536 // selection cannot be modified from within this function.536 // selection cannot be modified from within this function.
537 func (x *IconView) SelectedForeach(FuncVar *IconViewForeachFunc, DataVar uintptr) {537 func (x *IconView) SelectedForeach(FuncVar *IconViewForeachFunc, DataVar uintptr) {
538 538
539- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
540 var FuncVarRef uintptr539 var FuncVarRef uintptr
541- if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok {540+ if FuncVar != nil {
542- FuncVarRef = cbRefPtr541+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
543- } else {542+ if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok {
544- fcb := func(arg0 uintptr, arg1 *TreePath, arg2 uintptr) {543+ FuncVarRef = cbRefPtr
545- cbFn := *FuncVar544+ } else {
546- cbFn(arg0, arg1, arg2)545+ fcb := func(arg0 uintptr, arg1 *TreePath, arg2 uintptr) {
546+ cbFn := *FuncVar
547+ cbFn(arg0, arg1, arg2)
548+ }
549+ FuncVarRef = purego.NewCallback(fcb)
550+ glib.SaveCallback(FuncVarPtr, FuncVarRef)
547 }551 }
548- FuncVarRef = purego.NewCallback(fcb)
549- glib.SaveCallback(FuncVarPtr, FuncVarRef)
550 }552 }
551 553
552 xIconViewSelectedForeach(x.GoPointer(), FuncVarRef, DataVar)554 xIconViewSelectedForeach(x.GoPointer(), FuncVarRef, DataVar)
M v4/gtk/gtklistbox.go +55 -45
@@ -224,17 +224,19 @@ func (x *ListBox) BindModel(ModelVar gio.ListModel, CreateWidgetFuncVar *ListBox
224 }224 }
225 }225 }
226 226
227- UserDataFreeFuncVarPtr := uintptr(unsafe.Pointer(UserDataFreeFuncVar))
228 var UserDataFreeFuncVarRef uintptr227 var UserDataFreeFuncVarRef uintptr
229- if cbRefPtr, ok := glib.GetCallback(UserDataFreeFuncVarPtr); ok {228+ if UserDataFreeFuncVar != nil {
230- UserDataFreeFuncVarRef = cbRefPtr229+ UserDataFreeFuncVarPtr := uintptr(unsafe.Pointer(UserDataFreeFuncVar))
231- } else {230+ if cbRefPtr, ok := glib.GetCallback(UserDataFreeFuncVarPtr); ok {
232- fcb := func(arg0 uintptr) {231+ UserDataFreeFuncVarRef = cbRefPtr
233- cbFn := *UserDataFreeFuncVar232+ } else {
234- cbFn(arg0)233+ fcb := func(arg0 uintptr) {
234+ cbFn := *UserDataFreeFuncVar
235+ cbFn(arg0)
236+ }
237+ UserDataFreeFuncVarRef = purego.NewCallback(fcb)
238+ glib.SaveCallback(UserDataFreeFuncVarPtr, UserDataFreeFuncVarRef)
235 }239 }
236- UserDataFreeFuncVarRef = purego.NewCallback(fcb)
237- glib.SaveCallback(UserDataFreeFuncVarPtr, UserDataFreeFuncVarRef)
238 }240 }
239 241
240 xListBoxBindModel(x.GoPointer(), ModelVar.GoPointer(), CreateWidgetFuncVarRef, UserDataVar, UserDataFreeFuncVarRef)242 xListBoxBindModel(x.GoPointer(), ModelVar.GoPointer(), CreateWidgetFuncVarRef, UserDataVar, UserDataFreeFuncVarRef)
@@ -503,17 +505,19 @@ var xListBoxSelectedForeach func(uintptr, uintptr, uintptr)
503 // Note that the selection cannot be modified from within this function.505 // Note that the selection cannot be modified from within this function.
504 func (x *ListBox) SelectedForeach(FuncVar *ListBoxForeachFunc, DataVar uintptr) {506 func (x *ListBox) SelectedForeach(FuncVar *ListBoxForeachFunc, DataVar uintptr) {
505 507
506- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
507 var FuncVarRef uintptr508 var FuncVarRef uintptr
508- if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok {509+ if FuncVar != nil {
509- FuncVarRef = cbRefPtr510+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
510- } else {511+ if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok {
511- fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {512+ FuncVarRef = cbRefPtr
512- cbFn := *FuncVar513+ } else {
513- cbFn(arg0, arg1, arg2)514+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
515+ cbFn := *FuncVar
516+ cbFn(arg0, arg1, arg2)
517+ }
518+ FuncVarRef = purego.NewCallback(fcb)
519+ glib.SaveCallback(FuncVarPtr, FuncVarRef)
514 }520 }
515- FuncVarRef = purego.NewCallback(fcb)
516- glib.SaveCallback(FuncVarPtr, FuncVarRef)
517 }521 }
518 522
519 xListBoxSelectedForeach(x.GoPointer(), FuncVarRef, DataVar)523 xListBoxSelectedForeach(x.GoPointer(), FuncVarRef, DataVar)
@@ -580,17 +584,19 @@ func (x *ListBox) SetFilterFunc(FilterFuncVar *ListBoxFilterFunc, UserDataVar ui
580 }584 }
581 }585 }
582 586
583- DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
584 var DestroyVarRef uintptr587 var DestroyVarRef uintptr
585- if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok {588+ if DestroyVar != nil {
586- DestroyVarRef = cbRefPtr589+ DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
587- } else {590+ if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok {
588- fcb := func(arg0 uintptr) {591+ DestroyVarRef = cbRefPtr
589- cbFn := *DestroyVar592+ } else {
590- cbFn(arg0)593+ fcb := func(arg0 uintptr) {
594+ cbFn := *DestroyVar
595+ cbFn(arg0)
596+ }
597+ DestroyVarRef = purego.NewCallback(fcb)
598+ glib.SaveCallback(DestroyVarPtr, DestroyVarRef)
591 }599 }
592- DestroyVarRef = purego.NewCallback(fcb)
593- glib.SaveCallback(DestroyVarPtr, DestroyVarRef)
594 }600 }
595 601
596 xListBoxSetFilterFunc(x.GoPointer(), FilterFuncVarRef, UserDataVar, DestroyVarRef)602 xListBoxSetFilterFunc(x.GoPointer(), FilterFuncVarRef, UserDataVar, DestroyVarRef)
@@ -641,17 +647,19 @@ func (x *ListBox) SetHeaderFunc(UpdateHeaderVar *ListBoxUpdateHeaderFunc, UserDa
641 }647 }
642 }648 }
643 649
644- DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
645 var DestroyVarRef uintptr650 var DestroyVarRef uintptr
646- if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok {651+ if DestroyVar != nil {
647- DestroyVarRef = cbRefPtr652+ DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
648- } else {653+ if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok {
649- fcb := func(arg0 uintptr) {654+ DestroyVarRef = cbRefPtr
650- cbFn := *DestroyVar655+ } else {
651- cbFn(arg0)656+ fcb := func(arg0 uintptr) {
657+ cbFn := *DestroyVar
658+ cbFn(arg0)
659+ }
660+ DestroyVarRef = purego.NewCallback(fcb)
661+ glib.SaveCallback(DestroyVarPtr, DestroyVarRef)
652 }662 }
653- DestroyVarRef = purego.NewCallback(fcb)
654- glib.SaveCallback(DestroyVarPtr, DestroyVarRef)
655 }663 }
656 664
657 xListBoxSetHeaderFunc(x.GoPointer(), UpdateHeaderVarRef, UserDataVar, DestroyVarRef)665 xListBoxSetHeaderFunc(x.GoPointer(), UpdateHeaderVarRef, UserDataVar, DestroyVarRef)
@@ -718,17 +726,19 @@ func (x *ListBox) SetSortFunc(SortFuncVar *ListBoxSortFunc, UserDataVar uintptr,
718 }726 }
719 }727 }
720 728
721- DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
722 var DestroyVarRef uintptr729 var DestroyVarRef uintptr
723- if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok {730+ if DestroyVar != nil {
724- DestroyVarRef = cbRefPtr731+ DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
725- } else {732+ if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok {
726- fcb := func(arg0 uintptr) {733+ DestroyVarRef = cbRefPtr
727- cbFn := *DestroyVar734+ } else {
728- cbFn(arg0)735+ fcb := func(arg0 uintptr) {
736+ cbFn := *DestroyVar
737+ cbFn(arg0)
738+ }
739+ DestroyVarRef = purego.NewCallback(fcb)
740+ glib.SaveCallback(DestroyVarPtr, DestroyVarRef)
729 }741 }
730- DestroyVarRef = purego.NewCallback(fcb)
731- glib.SaveCallback(DestroyVarPtr, DestroyVarRef)
732 }742 }
733 743
734 xListBoxSetSortFunc(x.GoPointer(), SortFuncVarRef, UserDataVar, DestroyVarRef)744 xListBoxSetSortFunc(x.GoPointer(), SortFuncVarRef, UserDataVar, DestroyVarRef)
M v4/gtk/gtkmaplistmodel.go +22 -18
@@ -101,17 +101,19 @@ func NewMapListModel(ModelVar gio.ListModel, MapFuncVar *MapListModelMapFunc, Us
101 }101 }
102 }102 }
103 103
104- UserDestroyVarPtr := uintptr(unsafe.Pointer(UserDestroyVar))
105 var UserDestroyVarRef uintptr104 var UserDestroyVarRef uintptr
106- if cbRefPtr, ok := glib.GetCallback(UserDestroyVarPtr); ok {105+ if UserDestroyVar != nil {
107- UserDestroyVarRef = cbRefPtr106+ UserDestroyVarPtr := uintptr(unsafe.Pointer(UserDestroyVar))
108- } else {107+ if cbRefPtr, ok := glib.GetCallback(UserDestroyVarPtr); ok {
109- fcb := func(arg0 uintptr) {108+ UserDestroyVarRef = cbRefPtr
110- cbFn := *UserDestroyVar109+ } else {
111- cbFn(arg0)110+ fcb := func(arg0 uintptr) {
111+ cbFn := *UserDestroyVar
112+ cbFn(arg0)
113+ }
114+ UserDestroyVarRef = purego.NewCallback(fcb)
115+ glib.SaveCallback(UserDestroyVarPtr, UserDestroyVarRef)
112 }116 }
113- UserDestroyVarRef = purego.NewCallback(fcb)
114- glib.SaveCallback(UserDestroyVarPtr, UserDestroyVarRef)
115 }117 }
116 118
117 cret := xNewMapListModel(ModelVar.GoPointer(), MapFuncVarRef, UserDataVar, UserDestroyVarRef)119 cret := xNewMapListModel(ModelVar.GoPointer(), MapFuncVarRef, UserDataVar, UserDestroyVarRef)
@@ -180,17 +182,19 @@ func (x *MapListModel) SetMapFunc(MapFuncVar *MapListModelMapFunc, UserDataVar u
180 }182 }
181 }183 }
182 184
183- UserDestroyVarPtr := uintptr(unsafe.Pointer(UserDestroyVar))
184 var UserDestroyVarRef uintptr185 var UserDestroyVarRef uintptr
185- if cbRefPtr, ok := glib.GetCallback(UserDestroyVarPtr); ok {186+ if UserDestroyVar != nil {
186- UserDestroyVarRef = cbRefPtr187+ UserDestroyVarPtr := uintptr(unsafe.Pointer(UserDestroyVar))
187- } else {188+ if cbRefPtr, ok := glib.GetCallback(UserDestroyVarPtr); ok {
188- fcb := func(arg0 uintptr) {189+ UserDestroyVarRef = cbRefPtr
189- cbFn := *UserDestroyVar190+ } else {
190- cbFn(arg0)191+ fcb := func(arg0 uintptr) {
192+ cbFn := *UserDestroyVar
193+ cbFn(arg0)
194+ }
195+ UserDestroyVarRef = purego.NewCallback(fcb)
196+ glib.SaveCallback(UserDestroyVarPtr, UserDestroyVarRef)
191 }197 }
192- UserDestroyVarRef = purego.NewCallback(fcb)
193- glib.SaveCallback(UserDestroyVarPtr, UserDestroyVarRef)
194 }198 }
195 199
196 xMapListModelSetMapFunc(x.GoPointer(), MapFuncVarRef, UserDataVar, UserDestroyVarRef)200 xMapListModelSetMapFunc(x.GoPointer(), MapFuncVarRef, UserDataVar, UserDestroyVarRef)
M v4/gtk/gtkprinter.go +22 -18
@@ -75,30 +75,34 @@ var xEnumeratePrinters func(uintptr, uintptr, uintptr, bool)
75 // If @func returns true, the enumeration is stopped.75 // If @func returns true, the enumeration is stopped.
76 func EnumeratePrinters(FuncVar *PrinterFunc, DataVar uintptr, DestroyVar *glib.DestroyNotify, WaitVar bool) {76 func EnumeratePrinters(FuncVar *PrinterFunc, DataVar uintptr, DestroyVar *glib.DestroyNotify, WaitVar bool) {
77 77
78- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
79 var FuncVarRef uintptr78 var FuncVarRef uintptr
80- if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok {79+ if FuncVar != nil {
81- FuncVarRef = cbRefPtr80+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
82- } else {81+ if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok {
83- fcb := func(arg0 uintptr, arg1 uintptr) bool {82+ FuncVarRef = cbRefPtr
84- cbFn := *FuncVar83+ } else {
85- return cbFn(arg0, arg1)84+ fcb := func(arg0 uintptr, arg1 uintptr) bool {
85+ cbFn := *FuncVar
86+ return cbFn(arg0, arg1)
87+ }
88+ FuncVarRef = purego.NewCallback(fcb)
89+ glib.SaveCallback(FuncVarPtr, FuncVarRef)
86 }90 }
87- FuncVarRef = purego.NewCallback(fcb)
88- glib.SaveCallback(FuncVarPtr, FuncVarRef)
89 }91 }
90 92
91- DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
92 var DestroyVarRef uintptr93 var DestroyVarRef uintptr
93- if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok {94+ if DestroyVar != nil {
94- DestroyVarRef = cbRefPtr95+ DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
95- } else {96+ if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok {
96- fcb := func(arg0 uintptr) {97+ DestroyVarRef = cbRefPtr
97- cbFn := *DestroyVar98+ } else {
98- cbFn(arg0)99+ fcb := func(arg0 uintptr) {
100+ cbFn := *DestroyVar
101+ cbFn(arg0)
102+ }
103+ DestroyVarRef = purego.NewCallback(fcb)
104+ glib.SaveCallback(DestroyVarPtr, DestroyVarRef)
99 }105 }
100- DestroyVarRef = purego.NewCallback(fcb)
101- glib.SaveCallback(DestroyVarPtr, DestroyVarRef)
102 }106 }
103 107
104 xEnumeratePrinters(FuncVarRef, DataVar, DestroyVarRef, WaitVar)108 xEnumeratePrinters(FuncVarRef, DataVar, DestroyVarRef, WaitVar)
M v4/gtk/gtkprintjob.go +22 -18
@@ -232,30 +232,34 @@ var xPrintJobSend func(uintptr, uintptr, uintptr, uintptr)
232 // Sends the print job off to the printer.232 // Sends the print job off to the printer.
233 func (x *PrintJob) Send(CallbackVar *PrintJobCompleteFunc, UserDataVar uintptr, DnotifyVar *glib.DestroyNotify) {233 func (x *PrintJob) Send(CallbackVar *PrintJobCompleteFunc, UserDataVar uintptr, DnotifyVar *glib.DestroyNotify) {
234 234
235- CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
236 var CallbackVarRef uintptr235 var CallbackVarRef uintptr
237- if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {236+ if CallbackVar != nil {
238- CallbackVarRef = cbRefPtr237+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
239- } else {238+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
240- fcb := func(arg0 uintptr, arg1 uintptr, arg2 *glib.Error) {239+ CallbackVarRef = cbRefPtr
241- cbFn := *CallbackVar240+ } else {
242- cbFn(arg0, arg1, arg2)241+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 *glib.Error) {
242+ cbFn := *CallbackVar
243+ cbFn(arg0, arg1, arg2)
244+ }
245+ CallbackVarRef = purego.NewCallback(fcb)
246+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
243 }247 }
244- CallbackVarRef = purego.NewCallback(fcb)
245- glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
246 }248 }
247 249
248- DnotifyVarPtr := uintptr(unsafe.Pointer(DnotifyVar))
249 var DnotifyVarRef uintptr250 var DnotifyVarRef uintptr
250- if cbRefPtr, ok := glib.GetCallback(DnotifyVarPtr); ok {251+ if DnotifyVar != nil {
251- DnotifyVarRef = cbRefPtr252+ DnotifyVarPtr := uintptr(unsafe.Pointer(DnotifyVar))
252- } else {253+ if cbRefPtr, ok := glib.GetCallback(DnotifyVarPtr); ok {
253- fcb := func(arg0 uintptr) {254+ DnotifyVarRef = cbRefPtr
254- cbFn := *DnotifyVar255+ } else {
255- cbFn(arg0)256+ fcb := func(arg0 uintptr) {
257+ cbFn := *DnotifyVar
258+ cbFn(arg0)
259+ }
260+ DnotifyVarRef = purego.NewCallback(fcb)
261+ glib.SaveCallback(DnotifyVarPtr, DnotifyVarRef)
256 }262 }
257- DnotifyVarRef = purego.NewCallback(fcb)
258- glib.SaveCallback(DnotifyVarPtr, DnotifyVarRef)
259 }263 }
260 264
261 xPrintJobSend(x.GoPointer(), CallbackVarRef, UserDataVar, DnotifyVarRef)265 xPrintJobSend(x.GoPointer(), CallbackVarRef, UserDataVar, DnotifyVarRef)
M v4/gtk/gtkprintoperation.go +11 -9
@@ -528,17 +528,19 @@ var xPrintRunPageSetupDialogAsync func(uintptr, uintptr, uintptr, uintptr, uintp
528 // @done_cb from a signal handler for the ::response signal of the dialog.528 // @done_cb from a signal handler for the ::response signal of the dialog.
529 func PrintRunPageSetupDialogAsync(ParentVar *Window, PageSetupVar *PageSetup, SettingsVar *PrintSettings, DoneCbVar *PageSetupDoneFunc, DataVar uintptr) {529 func PrintRunPageSetupDialogAsync(ParentVar *Window, PageSetupVar *PageSetup, SettingsVar *PrintSettings, DoneCbVar *PageSetupDoneFunc, DataVar uintptr) {
530 530
531- DoneCbVarPtr := uintptr(unsafe.Pointer(DoneCbVar))
532 var DoneCbVarRef uintptr531 var DoneCbVarRef uintptr
533- if cbRefPtr, ok := glib.GetCallback(DoneCbVarPtr); ok {532+ if DoneCbVar != nil {
534- DoneCbVarRef = cbRefPtr533+ DoneCbVarPtr := uintptr(unsafe.Pointer(DoneCbVar))
535- } else {534+ if cbRefPtr, ok := glib.GetCallback(DoneCbVarPtr); ok {
536- fcb := func(arg0 uintptr, arg1 uintptr) {535+ DoneCbVarRef = cbRefPtr
537- cbFn := *DoneCbVar536+ } else {
538- cbFn(arg0, arg1)537+ fcb := func(arg0 uintptr, arg1 uintptr) {
538+ cbFn := *DoneCbVar
539+ cbFn(arg0, arg1)
540+ }
541+ DoneCbVarRef = purego.NewCallback(fcb)
542+ glib.SaveCallback(DoneCbVarPtr, DoneCbVarRef)
539 }543 }
540- DoneCbVarRef = purego.NewCallback(fcb)
541- glib.SaveCallback(DoneCbVarPtr, DoneCbVarRef)
542 }544 }
543 545
544 xPrintRunPageSetupDialogAsync(ParentVar.GoPointer(), PageSetupVar.GoPointer(), SettingsVar.GoPointer(), DoneCbVarRef, DataVar)546 xPrintRunPageSetupDialogAsync(ParentVar.GoPointer(), PageSetupVar.GoPointer(), SettingsVar.GoPointer(), DoneCbVarRef, DataVar)
M v4/gtk/gtkprintsettings.go +11 -9
@@ -253,17 +253,19 @@ var xPrintSettingsForeach func(uintptr, uintptr, uintptr)
253 // Calls @func for each key-value pair of @settings.253 // Calls @func for each key-value pair of @settings.
254 func (x *PrintSettings) Foreach(FuncVar *PrintSettingsFunc, UserDataVar uintptr) {254 func (x *PrintSettings) Foreach(FuncVar *PrintSettingsFunc, UserDataVar uintptr) {
255 255
256- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
257 var FuncVarRef uintptr256 var FuncVarRef uintptr
258- if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok {257+ if FuncVar != nil {
259- FuncVarRef = cbRefPtr258+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
260- } else {259+ if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok {
261- fcb := func(arg0 string, arg1 string, arg2 uintptr) {260+ FuncVarRef = cbRefPtr
262- cbFn := *FuncVar261+ } else {
263- cbFn(arg0, arg1, arg2)262+ fcb := func(arg0 string, arg1 string, arg2 uintptr) {
263+ cbFn := *FuncVar
264+ cbFn(arg0, arg1, arg2)
265+ }
266+ FuncVarRef = purego.NewCallback(fcb)
267+ glib.SaveCallback(FuncVarPtr, FuncVarRef)
264 }268 }
265- FuncVarRef = purego.NewCallback(fcb)
266- glib.SaveCallback(FuncVarPtr, FuncVarRef)
267 }269 }
268 270
269 xPrintSettingsForeach(x.GoPointer(), FuncVarRef, UserDataVar)271 xPrintSettingsForeach(x.GoPointer(), FuncVarRef, UserDataVar)
M v4/gtk/gtkshortcutaction.go +22 -18
@@ -164,30 +164,34 @@ var xNewCallbackAction func(uintptr, uintptr, uintptr) uintptr
164 func NewCallbackAction(CallbackVar *ShortcutFunc, DataVar uintptr, DestroyVar *glib.DestroyNotify) *CallbackAction {164 func NewCallbackAction(CallbackVar *ShortcutFunc, DataVar uintptr, DestroyVar *glib.DestroyNotify) *CallbackAction {
165 var cls *CallbackAction165 var cls *CallbackAction
166 166
167- CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
168 var CallbackVarRef uintptr167 var CallbackVarRef uintptr
169- if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {168+ if CallbackVar != nil {
170- CallbackVarRef = cbRefPtr169+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
171- } else {170+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
172- fcb := func(arg0 uintptr, arg1 *glib.Variant, arg2 uintptr) bool {171+ CallbackVarRef = cbRefPtr
173- cbFn := *CallbackVar172+ } else {
174- return cbFn(arg0, arg1, arg2)173+ fcb := func(arg0 uintptr, arg1 *glib.Variant, arg2 uintptr) bool {
174+ cbFn := *CallbackVar
175+ return cbFn(arg0, arg1, arg2)
176+ }
177+ CallbackVarRef = purego.NewCallback(fcb)
178+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
175 }179 }
176- CallbackVarRef = purego.NewCallback(fcb)
177- glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
178 }180 }
179 181
180- DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
181 var DestroyVarRef uintptr182 var DestroyVarRef uintptr
182- if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok {183+ if DestroyVar != nil {
183- DestroyVarRef = cbRefPtr184+ DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
184- } else {185+ if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok {
185- fcb := func(arg0 uintptr) {186+ DestroyVarRef = cbRefPtr
186- cbFn := *DestroyVar187+ } else {
187- cbFn(arg0)188+ fcb := func(arg0 uintptr) {
189+ cbFn := *DestroyVar
190+ cbFn(arg0)
191+ }
192+ DestroyVarRef = purego.NewCallback(fcb)
193+ glib.SaveCallback(DestroyVarPtr, DestroyVarRef)
188 }194 }
189- DestroyVarRef = purego.NewCallback(fcb)
190- glib.SaveCallback(DestroyVarPtr, DestroyVarRef)
191 }195 }
192 196
193 cret := xNewCallbackAction(CallbackVarRef, DataVar, DestroyVarRef)197 cret := xNewCallbackAction(CallbackVarRef, DataVar, DestroyVarRef)
M v4/gtk/gtktextbuffer.go +22 -18
@@ -627,30 +627,34 @@ var xTextBufferAddCommitNotify func(uintptr, TextBufferNotifyFlags, uintptr, uin
627 // other signal handlers which may further modify the [type@Gtk.TextBuffer].627 // other signal handlers which may further modify the [type@Gtk.TextBuffer].
628 func (x *TextBuffer) AddCommitNotify(FlagsVar TextBufferNotifyFlags, CommitNotifyVar *TextBufferCommitNotify, UserDataVar uintptr, DestroyVar *glib.DestroyNotify) uint {628 func (x *TextBuffer) AddCommitNotify(FlagsVar TextBufferNotifyFlags, CommitNotifyVar *TextBufferCommitNotify, UserDataVar uintptr, DestroyVar *glib.DestroyNotify) uint {
629 629
630- CommitNotifyVarPtr := uintptr(unsafe.Pointer(CommitNotifyVar))
631 var CommitNotifyVarRef uintptr630 var CommitNotifyVarRef uintptr
632- if cbRefPtr, ok := glib.GetCallback(CommitNotifyVarPtr); ok {631+ if CommitNotifyVar != nil {
633- CommitNotifyVarRef = cbRefPtr632+ CommitNotifyVarPtr := uintptr(unsafe.Pointer(CommitNotifyVar))
634- } else {633+ if cbRefPtr, ok := glib.GetCallback(CommitNotifyVarPtr); ok {
635- fcb := func(arg0 uintptr, arg1 TextBufferNotifyFlags, arg2 uint, arg3 uint, arg4 uintptr) {634+ CommitNotifyVarRef = cbRefPtr
636- cbFn := *CommitNotifyVar635+ } else {
637- cbFn(arg0, arg1, arg2, arg3, arg4)636+ fcb := func(arg0 uintptr, arg1 TextBufferNotifyFlags, arg2 uint, arg3 uint, arg4 uintptr) {
637+ cbFn := *CommitNotifyVar
638+ cbFn(arg0, arg1, arg2, arg3, arg4)
639+ }
640+ CommitNotifyVarRef = purego.NewCallback(fcb)
641+ glib.SaveCallback(CommitNotifyVarPtr, CommitNotifyVarRef)
638 }642 }
639- CommitNotifyVarRef = purego.NewCallback(fcb)
640- glib.SaveCallback(CommitNotifyVarPtr, CommitNotifyVarRef)
641 }643 }
642 644
643- DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
644 var DestroyVarRef uintptr645 var DestroyVarRef uintptr
645- if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok {646+ if DestroyVar != nil {
646- DestroyVarRef = cbRefPtr647+ DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
647- } else {648+ if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok {
648- fcb := func(arg0 uintptr) {649+ DestroyVarRef = cbRefPtr
649- cbFn := *DestroyVar650+ } else {
650- cbFn(arg0)651+ fcb := func(arg0 uintptr) {
652+ cbFn := *DestroyVar
653+ cbFn(arg0)
654+ }
655+ DestroyVarRef = purego.NewCallback(fcb)
656+ glib.SaveCallback(DestroyVarPtr, DestroyVarRef)
651 }657 }
652- DestroyVarRef = purego.NewCallback(fcb)
653- glib.SaveCallback(DestroyVarPtr, DestroyVarRef)
654 }658 }
655 659
656 cret := xTextBufferAddCommitNotify(x.GoPointer(), FlagsVar, CommitNotifyVarRef, UserDataVar, DestroyVarRef)660 cret := xTextBufferAddCommitNotify(x.GoPointer(), FlagsVar, CommitNotifyVarRef, UserDataVar, DestroyVarRef)
M v4/gtk/gtktextiter.go +22 -18
@@ -136,17 +136,19 @@ var xTextIterBackwardFindChar func(uintptr, uintptr, uintptr, *TextIter) bool
136 // but goes backward from @iter.136 // but goes backward from @iter.
137 func (x *TextIter) BackwardFindChar(PredVar *TextCharPredicate, UserDataVar uintptr, LimitVar *TextIter) bool {137 func (x *TextIter) BackwardFindChar(PredVar *TextCharPredicate, UserDataVar uintptr, LimitVar *TextIter) bool {
138 138
139- PredVarPtr := uintptr(unsafe.Pointer(PredVar))
140 var PredVarRef uintptr139 var PredVarRef uintptr
141- if cbRefPtr, ok := glib.GetCallback(PredVarPtr); ok {140+ if PredVar != nil {
142- PredVarRef = cbRefPtr141+ PredVarPtr := uintptr(unsafe.Pointer(PredVar))
143- } else {142+ if cbRefPtr, ok := glib.GetCallback(PredVarPtr); ok {
144- fcb := func(arg0 uint32, arg1 uintptr) bool {143+ PredVarRef = cbRefPtr
145- cbFn := *PredVar144+ } else {
146- return cbFn(arg0, arg1)145+ fcb := func(arg0 uint32, arg1 uintptr) bool {
146+ cbFn := *PredVar
147+ return cbFn(arg0, arg1)
148+ }
149+ PredVarRef = purego.NewCallback(fcb)
150+ glib.SaveCallback(PredVarPtr, PredVarRef)
147 }151 }
148- PredVarRef = purego.NewCallback(fcb)
149- glib.SaveCallback(PredVarPtr, PredVarRef)
150 }152 }
151 153
152 cret := xTextIterBackwardFindChar(x.GoPointer(), PredVarRef, UserDataVar, LimitVar)154 cret := xTextIterBackwardFindChar(x.GoPointer(), PredVarRef, UserDataVar, LimitVar)
@@ -564,17 +566,19 @@ var xTextIterForwardFindChar func(uintptr, uintptr, uintptr, *TextIter) bool
564 // @limit is non-%NULL, otherwise to the end iterator.566 // @limit is non-%NULL, otherwise to the end iterator.
565 func (x *TextIter) ForwardFindChar(PredVar *TextCharPredicate, UserDataVar uintptr, LimitVar *TextIter) bool {567 func (x *TextIter) ForwardFindChar(PredVar *TextCharPredicate, UserDataVar uintptr, LimitVar *TextIter) bool {
566 568
567- PredVarPtr := uintptr(unsafe.Pointer(PredVar))
568 var PredVarRef uintptr569 var PredVarRef uintptr
569- if cbRefPtr, ok := glib.GetCallback(PredVarPtr); ok {570+ if PredVar != nil {
570- PredVarRef = cbRefPtr571+ PredVarPtr := uintptr(unsafe.Pointer(PredVar))
571- } else {572+ if cbRefPtr, ok := glib.GetCallback(PredVarPtr); ok {
572- fcb := func(arg0 uint32, arg1 uintptr) bool {573+ PredVarRef = cbRefPtr
573- cbFn := *PredVar574+ } else {
574- return cbFn(arg0, arg1)575+ fcb := func(arg0 uint32, arg1 uintptr) bool {
576+ cbFn := *PredVar
577+ return cbFn(arg0, arg1)
578+ }
579+ PredVarRef = purego.NewCallback(fcb)
580+ glib.SaveCallback(PredVarPtr, PredVarRef)
575 }581 }
576- PredVarRef = purego.NewCallback(fcb)
577- glib.SaveCallback(PredVarPtr, PredVarRef)
578 }582 }
579 583
580 cret := xTextIterForwardFindChar(x.GoPointer(), PredVarRef, UserDataVar, LimitVar)584 cret := xTextIterForwardFindChar(x.GoPointer(), PredVarRef, UserDataVar, LimitVar)
M v4/gtk/gtktexttagtable.go +11 -9
@@ -94,17 +94,19 @@ var xTextTagTableForeach func(uintptr, uintptr, uintptr)
94 // over it (you can’t add/remove tags).94 // over it (you can’t add/remove tags).
95 func (x *TextTagTable) Foreach(FuncVar *TextTagTableForeach, DataVar uintptr) {95 func (x *TextTagTable) Foreach(FuncVar *TextTagTableForeach, DataVar uintptr) {
96 96
97- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
98 var FuncVarRef uintptr97 var FuncVarRef uintptr
99- if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok {98+ if FuncVar != nil {
100- FuncVarRef = cbRefPtr99+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
101- } else {100+ if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok {
102- fcb := func(arg0 uintptr, arg1 uintptr) {101+ FuncVarRef = cbRefPtr
103- cbFn := *FuncVar102+ } else {
104- cbFn(arg0, arg1)103+ fcb := func(arg0 uintptr, arg1 uintptr) {
104+ cbFn := *FuncVar
105+ cbFn(arg0, arg1)
106+ }
107+ FuncVarRef = purego.NewCallback(fcb)
108+ glib.SaveCallback(FuncVarPtr, FuncVarRef)
105 }109 }
106- FuncVarRef = purego.NewCallback(fcb)
107- glib.SaveCallback(FuncVarPtr, FuncVarRef)
108 }110 }
109 111
110 xTextTagTableForeach(x.GoPointer(), FuncVarRef, DataVar)112 xTextTagTableForeach(x.GoPointer(), FuncVarRef, DataVar)
M v4/gtk/gtktreelistmodel.go +22 -18
@@ -66,30 +66,34 @@ var xNewTreeListModel func(uintptr, bool, bool, uintptr, uintptr, uintptr) uintp
66 func NewTreeListModel(RootVar gio.ListModel, PassthroughVar bool, AutoexpandVar bool, CreateFuncVar *TreeListModelCreateModelFunc, UserDataVar uintptr, UserDestroyVar *glib.DestroyNotify) *TreeListModel {66 func NewTreeListModel(RootVar gio.ListModel, PassthroughVar bool, AutoexpandVar bool, CreateFuncVar *TreeListModelCreateModelFunc, UserDataVar uintptr, UserDestroyVar *glib.DestroyNotify) *TreeListModel {
67 var cls *TreeListModel67 var cls *TreeListModel
68 68
69- CreateFuncVarPtr := uintptr(unsafe.Pointer(CreateFuncVar))
70 var CreateFuncVarRef uintptr69 var CreateFuncVarRef uintptr
71- if cbRefPtr, ok := glib.GetCallback(CreateFuncVarPtr); ok {70+ if CreateFuncVar != nil {
72- CreateFuncVarRef = cbRefPtr71+ CreateFuncVarPtr := uintptr(unsafe.Pointer(CreateFuncVar))
73- } else {72+ if cbRefPtr, ok := glib.GetCallback(CreateFuncVarPtr); ok {
74- fcb := func(arg0 uintptr, arg1 uintptr) uintptr {73+ CreateFuncVarRef = cbRefPtr
75- cbFn := *CreateFuncVar74+ } else {
76- return cbFn(arg0, arg1)75+ fcb := func(arg0 uintptr, arg1 uintptr) uintptr {
76+ cbFn := *CreateFuncVar
77+ return cbFn(arg0, arg1)
78+ }
79+ CreateFuncVarRef = purego.NewCallback(fcb)
80+ glib.SaveCallback(CreateFuncVarPtr, CreateFuncVarRef)
77 }81 }
78- CreateFuncVarRef = purego.NewCallback(fcb)
79- glib.SaveCallback(CreateFuncVarPtr, CreateFuncVarRef)
80 }82 }
81 83
82- UserDestroyVarPtr := uintptr(unsafe.Pointer(UserDestroyVar))
83 var UserDestroyVarRef uintptr84 var UserDestroyVarRef uintptr
84- if cbRefPtr, ok := glib.GetCallback(UserDestroyVarPtr); ok {85+ if UserDestroyVar != nil {
85- UserDestroyVarRef = cbRefPtr86+ UserDestroyVarPtr := uintptr(unsafe.Pointer(UserDestroyVar))
86- } else {87+ if cbRefPtr, ok := glib.GetCallback(UserDestroyVarPtr); ok {
87- fcb := func(arg0 uintptr) {88+ UserDestroyVarRef = cbRefPtr
88- cbFn := *UserDestroyVar89+ } else {
89- cbFn(arg0)90+ fcb := func(arg0 uintptr) {
91+ cbFn := *UserDestroyVar
92+ cbFn(arg0)
93+ }
94+ UserDestroyVarRef = purego.NewCallback(fcb)
95+ glib.SaveCallback(UserDestroyVarPtr, UserDestroyVarRef)
90 }96 }
91- UserDestroyVarRef = purego.NewCallback(fcb)
92- glib.SaveCallback(UserDestroyVarPtr, UserDestroyVarRef)
93 }97 }
94 98
95 cret := xNewTreeListModel(RootVar.GoPointer(), PassthroughVar, AutoexpandVar, CreateFuncVarRef, UserDataVar, UserDestroyVarRef)99 cret := xNewTreeListModel(RootVar.GoPointer(), PassthroughVar, AutoexpandVar, CreateFuncVarRef, UserDataVar, UserDestroyVarRef)
M v4/gtk/gtktreemodelfilter.go +22 -18
@@ -291,17 +291,19 @@ var xTreeModelFilterSetModifyFunc func(uintptr, int, []types.GType, uintptr, uin
291 // can only be called once for a given filter model.291 // can only be called once for a given filter model.
292 func (x *TreeModelFilter) SetModifyFunc(NColumnsVar int, TypesVar []types.GType, FuncVar *TreeModelFilterModifyFunc, DataVar uintptr, DestroyVar *glib.DestroyNotify) {292 func (x *TreeModelFilter) SetModifyFunc(NColumnsVar int, TypesVar []types.GType, FuncVar *TreeModelFilterModifyFunc, DataVar uintptr, DestroyVar *glib.DestroyNotify) {
293 293
294- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
295 var FuncVarRef uintptr294 var FuncVarRef uintptr
296- if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok {295+ if FuncVar != nil {
297- FuncVarRef = cbRefPtr296+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
298- } else {297+ if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok {
299- fcb := func(arg0 uintptr, arg1 *TreeIter, arg2 *gobject.Value, arg3 int, arg4 uintptr) {298+ FuncVarRef = cbRefPtr
300- cbFn := *FuncVar299+ } else {
301- cbFn(arg0, arg1, arg2, arg3, arg4)300+ fcb := func(arg0 uintptr, arg1 *TreeIter, arg2 *gobject.Value, arg3 int, arg4 uintptr) {
301+ cbFn := *FuncVar
302+ cbFn(arg0, arg1, arg2, arg3, arg4)
303+ }
304+ FuncVarRef = purego.NewCallback(fcb)
305+ glib.SaveCallback(FuncVarPtr, FuncVarRef)
302 }306 }
303- FuncVarRef = purego.NewCallback(fcb)
304- glib.SaveCallback(FuncVarPtr, FuncVarRef)
305 }307 }
306 308
307 var DestroyVarRef uintptr309 var DestroyVarRef uintptr
@@ -381,17 +383,19 @@ var xTreeModelFilterSetVisibleFunc func(uintptr, uintptr, uintptr, uintptr)
381 // once for a given filter model.383 // once for a given filter model.
382 func (x *TreeModelFilter) SetVisibleFunc(FuncVar *TreeModelFilterVisibleFunc, DataVar uintptr, DestroyVar *glib.DestroyNotify) {384 func (x *TreeModelFilter) SetVisibleFunc(FuncVar *TreeModelFilterVisibleFunc, DataVar uintptr, DestroyVar *glib.DestroyNotify) {
383 385
384- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
385 var FuncVarRef uintptr386 var FuncVarRef uintptr
386- if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok {387+ if FuncVar != nil {
387- FuncVarRef = cbRefPtr388+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
388- } else {389+ if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok {
389- fcb := func(arg0 uintptr, arg1 *TreeIter, arg2 uintptr) bool {390+ FuncVarRef = cbRefPtr
390- cbFn := *FuncVar391+ } else {
391- return cbFn(arg0, arg1, arg2)392+ fcb := func(arg0 uintptr, arg1 *TreeIter, arg2 uintptr) bool {
393+ cbFn := *FuncVar
394+ return cbFn(arg0, arg1, arg2)
395+ }
396+ FuncVarRef = purego.NewCallback(fcb)
397+ glib.SaveCallback(FuncVarPtr, FuncVarRef)
392 }398 }
393- FuncVarRef = purego.NewCallback(fcb)
394- glib.SaveCallback(FuncVarPtr, FuncVarRef)
395 }399 }
396 400
397 var DestroyVarRef uintptr401 var DestroyVarRef uintptr
M v4/gtk/gtktreeselection.go +22 -18
@@ -213,17 +213,19 @@ var xTreeSelectionSelectedForeach func(uintptr, uintptr, uintptr)
213 // gtk_tree_selection_get_selected_rows() might be more useful.213 // gtk_tree_selection_get_selected_rows() might be more useful.
214 func (x *TreeSelection) SelectedForeach(FuncVar *TreeSelectionForeachFunc, DataVar uintptr) {214 func (x *TreeSelection) SelectedForeach(FuncVar *TreeSelectionForeachFunc, DataVar uintptr) {
215 215
216- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
217 var FuncVarRef uintptr216 var FuncVarRef uintptr
218- if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok {217+ if FuncVar != nil {
219- FuncVarRef = cbRefPtr218+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
220- } else {219+ if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok {
221- fcb := func(arg0 uintptr, arg1 *TreePath, arg2 *TreeIter, arg3 uintptr) {220+ FuncVarRef = cbRefPtr
222- cbFn := *FuncVar221+ } else {
223- cbFn(arg0, arg1, arg2, arg3)222+ fcb := func(arg0 uintptr, arg1 *TreePath, arg2 *TreeIter, arg3 uintptr) {
223+ cbFn := *FuncVar
224+ cbFn(arg0, arg1, arg2, arg3)
225+ }
226+ FuncVarRef = purego.NewCallback(fcb)
227+ glib.SaveCallback(FuncVarPtr, FuncVarRef)
224 }228 }
225- FuncVarRef = purego.NewCallback(fcb)
226- glib.SaveCallback(FuncVarPtr, FuncVarRef)
227 }229 }
228 230
229 xTreeSelectionSelectedForeach(x.GoPointer(), FuncVarRef, DataVar)231 xTreeSelectionSelectedForeach(x.GoPointer(), FuncVarRef, DataVar)
@@ -266,17 +268,19 @@ func (x *TreeSelection) SetSelectFunction(FuncVar *TreeSelectionFunc, DataVar ui
266 }268 }
267 }269 }
268 270
269- DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
270 var DestroyVarRef uintptr271 var DestroyVarRef uintptr
271- if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok {272+ if DestroyVar != nil {
272- DestroyVarRef = cbRefPtr273+ DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
273- } else {274+ if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok {
274- fcb := func(arg0 uintptr) {275+ DestroyVarRef = cbRefPtr
275- cbFn := *DestroyVar276+ } else {
276- cbFn(arg0)277+ fcb := func(arg0 uintptr) {
278+ cbFn := *DestroyVar
279+ cbFn(arg0)
280+ }
281+ DestroyVarRef = purego.NewCallback(fcb)
282+ glib.SaveCallback(DestroyVarPtr, DestroyVarRef)
277 }283 }
278- DestroyVarRef = purego.NewCallback(fcb)
279- glib.SaveCallback(DestroyVarPtr, DestroyVarRef)
280 }284 }
281 285
282 xTreeSelectionSetSelectFunction(x.GoPointer(), FuncVarRef, DataVar, DestroyVarRef)286 xTreeSelectionSetSelectFunction(x.GoPointer(), FuncVarRef, DataVar, DestroyVarRef)
M v4/gtk/gtktreeview.go +44 -36
@@ -1193,30 +1193,34 @@ var xTreeViewInsertColumnWithDataFunc func(uintptr, int, string, uintptr, uintpt
1193 // “sizing” property set to be GTK_TREE_VIEW_COLUMN_FIXED.1193 // “sizing” property set to be GTK_TREE_VIEW_COLUMN_FIXED.
1194 func (x *TreeView) InsertColumnWithDataFunc(PositionVar int, TitleVar string, CellVar *CellRenderer, FuncVar *TreeCellDataFunc, DataVar uintptr, DnotifyVar *glib.DestroyNotify) int {1194 func (x *TreeView) InsertColumnWithDataFunc(PositionVar int, TitleVar string, CellVar *CellRenderer, FuncVar *TreeCellDataFunc, DataVar uintptr, DnotifyVar *glib.DestroyNotify) int {
1195 1195
1196- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
1197 var FuncVarRef uintptr1196 var FuncVarRef uintptr
1198- if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok {1197+ if FuncVar != nil {
1199- FuncVarRef = cbRefPtr1198+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
1200- } else {1199+ if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok {
1201- fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr, arg3 *TreeIter, arg4 uintptr) {1200+ FuncVarRef = cbRefPtr
1202- cbFn := *FuncVar1201+ } else {
1203- cbFn(arg0, arg1, arg2, arg3, arg4)1202+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr, arg3 *TreeIter, arg4 uintptr) {
1203+ cbFn := *FuncVar
1204+ cbFn(arg0, arg1, arg2, arg3, arg4)
1205+ }
1206+ FuncVarRef = purego.NewCallback(fcb)
1207+ glib.SaveCallback(FuncVarPtr, FuncVarRef)
1204 }1208 }
1205- FuncVarRef = purego.NewCallback(fcb)
1206- glib.SaveCallback(FuncVarPtr, FuncVarRef)
1207 }1209 }
1208 1210
1209- DnotifyVarPtr := uintptr(unsafe.Pointer(DnotifyVar))
1210 var DnotifyVarRef uintptr1211 var DnotifyVarRef uintptr
1211- if cbRefPtr, ok := glib.GetCallback(DnotifyVarPtr); ok {1212+ if DnotifyVar != nil {
1212- DnotifyVarRef = cbRefPtr1213+ DnotifyVarPtr := uintptr(unsafe.Pointer(DnotifyVar))
1213- } else {1214+ if cbRefPtr, ok := glib.GetCallback(DnotifyVarPtr); ok {
1214- fcb := func(arg0 uintptr) {1215+ DnotifyVarRef = cbRefPtr
1215- cbFn := *DnotifyVar1216+ } else {
1216- cbFn(arg0)1217+ fcb := func(arg0 uintptr) {
1218+ cbFn := *DnotifyVar
1219+ cbFn(arg0)
1220+ }
1221+ DnotifyVarRef = purego.NewCallback(fcb)
1222+ glib.SaveCallback(DnotifyVarPtr, DnotifyVarRef)
1217 }1223 }
1218- DnotifyVarRef = purego.NewCallback(fcb)
1219- glib.SaveCallback(DnotifyVarPtr, DnotifyVarRef)
1220 }1224 }
1221 1225
1222 cret := xTreeViewInsertColumnWithDataFunc(x.GoPointer(), PositionVar, TitleVar, CellVar.GoPointer(), FuncVarRef, DataVar, DnotifyVarRef)1226 cret := xTreeViewInsertColumnWithDataFunc(x.GoPointer(), PositionVar, TitleVar, CellVar.GoPointer(), FuncVarRef, DataVar, DnotifyVarRef)
@@ -1263,17 +1267,19 @@ var xTreeViewMapExpandedRows func(uintptr, uintptr, uintptr)
1263 // Calls @func on all expanded rows.1267 // Calls @func on all expanded rows.
1264 func (x *TreeView) MapExpandedRows(FuncVar *TreeViewMappingFunc, DataVar uintptr) {1268 func (x *TreeView) MapExpandedRows(FuncVar *TreeViewMappingFunc, DataVar uintptr) {
1265 1269
1266- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
1267 var FuncVarRef uintptr1270 var FuncVarRef uintptr
1268- if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok {1271+ if FuncVar != nil {
1269- FuncVarRef = cbRefPtr1272+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
1270- } else {1273+ if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok {
1271- fcb := func(arg0 uintptr, arg1 *TreePath, arg2 uintptr) {1274+ FuncVarRef = cbRefPtr
1272- cbFn := *FuncVar1275+ } else {
1273- cbFn(arg0, arg1, arg2)1276+ fcb := func(arg0 uintptr, arg1 *TreePath, arg2 uintptr) {
1277+ cbFn := *FuncVar
1278+ cbFn(arg0, arg1, arg2)
1279+ }
1280+ FuncVarRef = purego.NewCallback(fcb)
1281+ glib.SaveCallback(FuncVarPtr, FuncVarRef)
1274 }1282 }
1275- FuncVarRef = purego.NewCallback(fcb)
1276- glib.SaveCallback(FuncVarPtr, FuncVarRef)
1277 }1283 }
1278 1284
1279 xTreeViewMapExpandedRows(x.GoPointer(), FuncVarRef, DataVar)1285 xTreeViewMapExpandedRows(x.GoPointer(), FuncVarRef, DataVar)
@@ -1699,17 +1705,19 @@ var xTreeViewSetSearchEqualFunc func(uintptr, uintptr, uintptr, uintptr)
1699 // `GtkTreeView`SearchEqualFunc returns %FALSE on matches.1705 // `GtkTreeView`SearchEqualFunc returns %FALSE on matches.
1700 func (x *TreeView) SetSearchEqualFunc(SearchEqualFuncVar *TreeViewSearchEqualFunc, SearchUserDataVar uintptr, SearchDestroyVar *glib.DestroyNotify) {1706 func (x *TreeView) SetSearchEqualFunc(SearchEqualFuncVar *TreeViewSearchEqualFunc, SearchUserDataVar uintptr, SearchDestroyVar *glib.DestroyNotify) {
1701 1707
1702- SearchEqualFuncVarPtr := uintptr(unsafe.Pointer(SearchEqualFuncVar))
1703 var SearchEqualFuncVarRef uintptr1708 var SearchEqualFuncVarRef uintptr
1704- if cbRefPtr, ok := glib.GetCallback(SearchEqualFuncVarPtr); ok {1709+ if SearchEqualFuncVar != nil {
1705- SearchEqualFuncVarRef = cbRefPtr1710+ SearchEqualFuncVarPtr := uintptr(unsafe.Pointer(SearchEqualFuncVar))
1706- } else {1711+ if cbRefPtr, ok := glib.GetCallback(SearchEqualFuncVarPtr); ok {
1707- fcb := func(arg0 uintptr, arg1 int, arg2 string, arg3 *TreeIter, arg4 uintptr) bool {1712+ SearchEqualFuncVarRef = cbRefPtr
1708- cbFn := *SearchEqualFuncVar1713+ } else {
1709- return cbFn(arg0, arg1, arg2, arg3, arg4)1714+ fcb := func(arg0 uintptr, arg1 int, arg2 string, arg3 *TreeIter, arg4 uintptr) bool {
1715+ cbFn := *SearchEqualFuncVar
1716+ return cbFn(arg0, arg1, arg2, arg3, arg4)
1717+ }
1718+ SearchEqualFuncVarRef = purego.NewCallback(fcb)
1719+ glib.SaveCallback(SearchEqualFuncVarPtr, SearchEqualFuncVarRef)
1710 }1720 }
1711- SearchEqualFuncVarRef = purego.NewCallback(fcb)
1712- glib.SaveCallback(SearchEqualFuncVarPtr, SearchEqualFuncVarRef)
1713 }1721 }
1714 1722
1715 var SearchDestroyVarRef uintptr1723 var SearchDestroyVarRef uintptr
M v4/gtk/gtktreeviewcolumn.go +11 -9
@@ -538,17 +538,19 @@ func (x *TreeViewColumn) SetCellDataFunc(CellRendererVar *CellRenderer, FuncVar
538 }538 }
539 }539 }
540 540
541- DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
542 var DestroyVarRef uintptr541 var DestroyVarRef uintptr
543- if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok {542+ if DestroyVar != nil {
544- DestroyVarRef = cbRefPtr543+ DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
545- } else {544+ if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok {
546- fcb := func(arg0 uintptr) {545+ DestroyVarRef = cbRefPtr
547- cbFn := *DestroyVar546+ } else {
548- cbFn(arg0)547+ fcb := func(arg0 uintptr) {
548+ cbFn := *DestroyVar
549+ cbFn(arg0)
550+ }
551+ DestroyVarRef = purego.NewCallback(fcb)
552+ glib.SaveCallback(DestroyVarPtr, DestroyVarRef)
549 }553 }
550- DestroyVarRef = purego.NewCallback(fcb)
551- glib.SaveCallback(DestroyVarPtr, DestroyVarRef)
552 }554 }
553 555
554 xTreeViewColumnSetCellDataFunc(x.GoPointer(), CellRendererVar.GoPointer(), FuncVarRef, FuncDataVar, DestroyVarRef)556 xTreeViewColumnSetCellDataFunc(x.GoPointer(), CellRendererVar.GoPointer(), FuncVarRef, FuncDataVar, DestroyVarRef)
M v4/gtk/gtkwidget.go +55 -45
@@ -159,17 +159,19 @@ var xWidgetClassAddBinding func(uintptr, uint, gdk.ModifierType, uintptr, string
159 // shortcut.159 // shortcut.
160 func (x *WidgetClass) AddBinding(KeyvalVar uint, ModsVar gdk.ModifierType, CallbackVar *ShortcutFunc, FormatStringVar string, varArgs ...interface{}) {160 func (x *WidgetClass) AddBinding(KeyvalVar uint, ModsVar gdk.ModifierType, CallbackVar *ShortcutFunc, FormatStringVar string, varArgs ...interface{}) {
161 161
162- CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
163 var CallbackVarRef uintptr162 var CallbackVarRef uintptr
164- if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {163+ if CallbackVar != nil {
165- CallbackVarRef = cbRefPtr164+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
166- } else {165+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
167- fcb := func(arg0 uintptr, arg1 *glib.Variant, arg2 uintptr) bool {166+ CallbackVarRef = cbRefPtr
168- cbFn := *CallbackVar167+ } else {
169- return cbFn(arg0, arg1, arg2)168+ fcb := func(arg0 uintptr, arg1 *glib.Variant, arg2 uintptr) bool {
169+ cbFn := *CallbackVar
170+ return cbFn(arg0, arg1, arg2)
171+ }
172+ CallbackVarRef = purego.NewCallback(fcb)
173+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
170 }174 }
171- CallbackVarRef = purego.NewCallback(fcb)
172- glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
173 }175 }
174 176
175 xWidgetClassAddBinding(x.GoPointer(), KeyvalVar, ModsVar, CallbackVarRef, FormatStringVar, varArgs...)177 xWidgetClassAddBinding(x.GoPointer(), KeyvalVar, ModsVar, CallbackVarRef, FormatStringVar, varArgs...)
@@ -241,17 +243,19 @@ var xWidgetClassBindTemplateCallbackFull func(uintptr, string, uintptr)
241 // class initializer after calling [method@Gtk.WidgetClass.set_template].243 // class initializer after calling [method@Gtk.WidgetClass.set_template].
242 func (x *WidgetClass) BindTemplateCallbackFull(CallbackNameVar string, CallbackSymbolVar *gobject.Callback) {244 func (x *WidgetClass) BindTemplateCallbackFull(CallbackNameVar string, CallbackSymbolVar *gobject.Callback) {
243 245
244- CallbackSymbolVarPtr := uintptr(unsafe.Pointer(CallbackSymbolVar))
245 var CallbackSymbolVarRef uintptr246 var CallbackSymbolVarRef uintptr
246- if cbRefPtr, ok := glib.GetCallback(CallbackSymbolVarPtr); ok {247+ if CallbackSymbolVar != nil {
247- CallbackSymbolVarRef = cbRefPtr248+ CallbackSymbolVarPtr := uintptr(unsafe.Pointer(CallbackSymbolVar))
248- } else {249+ if cbRefPtr, ok := glib.GetCallback(CallbackSymbolVarPtr); ok {
249- fcb := func() {250+ CallbackSymbolVarRef = cbRefPtr
250- cbFn := *CallbackSymbolVar251+ } else {
251- cbFn()252+ fcb := func() {
253+ cbFn := *CallbackSymbolVar
254+ cbFn()
255+ }
256+ CallbackSymbolVarRef = purego.NewCallback(fcb)
257+ glib.SaveCallback(CallbackSymbolVarPtr, CallbackSymbolVarRef)
252 }258 }
253- CallbackSymbolVarRef = purego.NewCallback(fcb)
254- glib.SaveCallback(CallbackSymbolVarPtr, CallbackSymbolVarRef)
255 }259 }
256 260
257 xWidgetClassBindTemplateCallbackFull(x.GoPointer(), CallbackNameVar, CallbackSymbolVarRef)261 xWidgetClassBindTemplateCallbackFull(x.GoPointer(), CallbackNameVar, CallbackSymbolVarRef)
@@ -354,17 +358,19 @@ var xWidgetClassInstallAction func(uintptr, string, string, uintptr)
354 // with [method@Gtk.Widget.action_set_enabled]).358 // with [method@Gtk.Widget.action_set_enabled]).
355 func (x *WidgetClass) InstallAction(ActionNameVar string, ParameterTypeVar string, ActivateVar *WidgetActionActivateFunc) {359 func (x *WidgetClass) InstallAction(ActionNameVar string, ParameterTypeVar string, ActivateVar *WidgetActionActivateFunc) {
356 360
357- ActivateVarPtr := uintptr(unsafe.Pointer(ActivateVar))
358 var ActivateVarRef uintptr361 var ActivateVarRef uintptr
359- if cbRefPtr, ok := glib.GetCallback(ActivateVarPtr); ok {362+ if ActivateVar != nil {
360- ActivateVarRef = cbRefPtr363+ ActivateVarPtr := uintptr(unsafe.Pointer(ActivateVar))
361- } else {364+ if cbRefPtr, ok := glib.GetCallback(ActivateVarPtr); ok {
362- fcb := func(arg0 uintptr, arg1 string, arg2 *glib.Variant) {365+ ActivateVarRef = cbRefPtr
363- cbFn := *ActivateVar366+ } else {
364- cbFn(arg0, arg1, arg2)367+ fcb := func(arg0 uintptr, arg1 string, arg2 *glib.Variant) {
368+ cbFn := *ActivateVar
369+ cbFn(arg0, arg1, arg2)
370+ }
371+ ActivateVarRef = purego.NewCallback(fcb)
372+ glib.SaveCallback(ActivateVarPtr, ActivateVarRef)
365 }373 }
366- ActivateVarRef = purego.NewCallback(fcb)
367- glib.SaveCallback(ActivateVarPtr, ActivateVarRef)
368 }374 }
369 375
370 xWidgetClassInstallAction(x.GoPointer(), ActionNameVar, ParameterTypeVar, ActivateVarRef)376 xWidgetClassInstallAction(x.GoPointer(), ActionNameVar, ParameterTypeVar, ActivateVarRef)
@@ -1871,30 +1877,34 @@ var xWidgetAddTickCallback func(uintptr, uintptr, uintptr, uintptr) uint
1871 // to [method@Gtk.Widget.remove_tick_callback].1877 // to [method@Gtk.Widget.remove_tick_callback].
1872 func (x *Widget) AddTickCallback(CallbackVar *TickCallback, UserDataVar uintptr, NotifyVar *glib.DestroyNotify) uint {1878 func (x *Widget) AddTickCallback(CallbackVar *TickCallback, UserDataVar uintptr, NotifyVar *glib.DestroyNotify) uint {
1873 1879
1874- CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
1875 var CallbackVarRef uintptr1880 var CallbackVarRef uintptr
1876- if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {1881+ if CallbackVar != nil {
1877- CallbackVarRef = cbRefPtr1882+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
1878- } else {1883+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
1879- fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) bool {1884+ CallbackVarRef = cbRefPtr
1880- cbFn := *CallbackVar1885+ } else {
1881- return cbFn(arg0, arg1, arg2)1886+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) bool {
1887+ cbFn := *CallbackVar
1888+ return cbFn(arg0, arg1, arg2)
1889+ }
1890+ CallbackVarRef = purego.NewCallback(fcb)
1891+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
1882 }1892 }
1883- CallbackVarRef = purego.NewCallback(fcb)
1884- glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
1885 }1893 }
1886 1894
1887- NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
1888 var NotifyVarRef uintptr1895 var NotifyVarRef uintptr
1889- if cbRefPtr, ok := glib.GetCallback(NotifyVarPtr); ok {1896+ if NotifyVar != nil {
1890- NotifyVarRef = cbRefPtr1897+ NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
1891- } else {1898+ if cbRefPtr, ok := glib.GetCallback(NotifyVarPtr); ok {
1892- fcb := func(arg0 uintptr) {1899+ NotifyVarRef = cbRefPtr
1893- cbFn := *NotifyVar1900+ } else {
1894- cbFn(arg0)1901+ fcb := func(arg0 uintptr) {
1902+ cbFn := *NotifyVar
1903+ cbFn(arg0)
1904+ }
1905+ NotifyVarRef = purego.NewCallback(fcb)
1906+ glib.SaveCallback(NotifyVarPtr, NotifyVarRef)
1895 }1907 }
1896- NotifyVarRef = purego.NewCallback(fcb)
1897- glib.SaveCallback(NotifyVarPtr, NotifyVarRef)
1898 }1908 }
1899 1909
1900 cret := xWidgetAddTickCallback(x.GoPointer(), CallbackVarRef, UserDataVar, NotifyVarRef)1910 cret := xWidgetAddTickCallback(x.GoPointer(), CallbackVarRef, UserDataVar, NotifyVarRef)
M v4/pango/pango-attributes.go +11 -9
@@ -390,17 +390,19 @@ var xAttrListFilter func(uintptr, uintptr, uintptr) *AttrList
390 // inserts them into a new list.390 // inserts them into a new list.
391 func (x *AttrList) Filter(FuncVar *AttrFilterFunc, DataVar uintptr) *AttrList {391 func (x *AttrList) Filter(FuncVar *AttrFilterFunc, DataVar uintptr) *AttrList {
392 392
393- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
394 var FuncVarRef uintptr393 var FuncVarRef uintptr
395- if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok {394+ if FuncVar != nil {
396- FuncVarRef = cbRefPtr395+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
397- } else {396+ if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok {
398- fcb := func(arg0 *Attribute, arg1 uintptr) bool {397+ FuncVarRef = cbRefPtr
399- cbFn := *FuncVar398+ } else {
400- return cbFn(arg0, arg1)399+ fcb := func(arg0 *Attribute, arg1 uintptr) bool {
400+ cbFn := *FuncVar
401+ return cbFn(arg0, arg1)
402+ }
403+ FuncVarRef = purego.NewCallback(fcb)
404+ glib.SaveCallback(FuncVarPtr, FuncVarRef)
401 }405 }
402- FuncVarRef = purego.NewCallback(fcb)
403- glib.SaveCallback(FuncVarPtr, FuncVarRef)
404 }406 }
405 407
406 cret := xAttrListFilter(x.GoPointer(), FuncVarRef, DataVar)408 cret := xAttrListFilter(x.GoPointer(), FuncVarRef, DataVar)
M v4/pango/pango-fontset.go +11 -9
@@ -289,17 +289,19 @@ var xFontsetForeach func(uintptr, uintptr, uintptr)
289 // If @func returns %TRUE, that stops the iteration.289 // If @func returns %TRUE, that stops the iteration.
290 func (x *Fontset) Foreach(FuncVar *FontsetForeachFunc, DataVar uintptr) {290 func (x *Fontset) Foreach(FuncVar *FontsetForeachFunc, DataVar uintptr) {
291 291
292- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
293 var FuncVarRef uintptr292 var FuncVarRef uintptr
294- if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok {293+ if FuncVar != nil {
295- FuncVarRef = cbRefPtr294+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
296- } else {295+ if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok {
297- fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) bool {296+ FuncVarRef = cbRefPtr
298- cbFn := *FuncVar297+ } else {
299- return cbFn(arg0, arg1, arg2)298+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) bool {
299+ cbFn := *FuncVar
300+ return cbFn(arg0, arg1, arg2)
301+ }
302+ FuncVarRef = purego.NewCallback(fcb)
303+ glib.SaveCallback(FuncVarPtr, FuncVarRef)
300 }304 }
301- FuncVarRef = purego.NewCallback(fcb)
302- glib.SaveCallback(FuncVarPtr, FuncVarRef)
303 }305 }
304 306
305 xFontsetForeach(x.GoPointer(), FuncVarRef, DataVar)307 xFontsetForeach(x.GoPointer(), FuncVarRef, DataVar)

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 1

Tags 102

↑↓ moveenter openesc close