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
9292 func NewCallbackAnimationTarget(CallbackVar *AnimationTargetFunc, UserDataVar uintptr, DestroyVar *glib.DestroyNotify) *CallbackAnimationTarget {
9393 var cls *CallbackAnimationTarget
9494
95- CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
9695 var CallbackVarRef uintptr
97- if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
98- CallbackVarRef = cbRefPtr
99- } else {
100- fcb := func(arg0 float64, arg1 uintptr) {
101- cbFn := *CallbackVar
102- cbFn(arg0, arg1)
96+ if CallbackVar != nil {
97+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
98+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
99+ CallbackVarRef = cbRefPtr
100+ } else {
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)
103107 }
104- CallbackVarRef = purego.NewCallback(fcb)
105- glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
106108 }
107109
108- DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
109110 var DestroyVarRef uintptr
110- if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok {
111- DestroyVarRef = cbRefPtr
112- } else {
113- fcb := func(arg0 uintptr) {
114- cbFn := *DestroyVar
115- cbFn(arg0)
111+ if DestroyVar != nil {
112+ DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
113+ if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok {
114+ DestroyVarRef = cbRefPtr
115+ } else {
116+ fcb := func(arg0 uintptr) {
117+ cbFn := *DestroyVar
118+ cbFn(arg0)
119+ }
120+ DestroyVarRef = purego.NewCallback(fcb)
121+ glib.SaveCallback(DestroyVarPtr, DestroyVarRef)
116122 }
117- DestroyVarRef = purego.NewCallback(fcb)
118- glib.SaveCallback(DestroyVarPtr, DestroyVarRef)
119123 }
120124
121125 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
128128 }
129129 }
130130
131- UserDataFreeFuncVarPtr := uintptr(unsafe.Pointer(UserDataFreeFuncVar))
132131 var UserDataFreeFuncVarRef uintptr
133- if cbRefPtr, ok := glib.GetCallback(UserDataFreeFuncVarPtr); ok {
134- UserDataFreeFuncVarRef = cbRefPtr
135- } else {
136- fcb := func(arg0 uintptr) {
137- cbFn := *UserDataFreeFuncVar
138- cbFn(arg0)
132+ if UserDataFreeFuncVar != nil {
133+ UserDataFreeFuncVarPtr := uintptr(unsafe.Pointer(UserDataFreeFuncVar))
134+ if cbRefPtr, ok := glib.GetCallback(UserDataFreeFuncVarPtr); ok {
135+ UserDataFreeFuncVarRef = cbRefPtr
136+ } else {
137+ fcb := func(arg0 uintptr) {
138+ cbFn := *UserDataFreeFuncVar
139+ cbFn(arg0)
140+ }
141+ UserDataFreeFuncVarRef = purego.NewCallback(fcb)
142+ glib.SaveCallback(UserDataFreeFuncVarPtr, UserDataFreeFuncVarRef)
139143 }
140- UserDataFreeFuncVarRef = purego.NewCallback(fcb)
141- glib.SaveCallback(UserDataFreeFuncVarPtr, UserDataFreeFuncVarRef)
142144 }
143145
144146 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
6969 // so applications can override the built-in deserializers.
7070 func ContentRegisterDeserializer(MimeTypeVar string, TypeVar types.GType, DeserializeVar *ContentDeserializeFunc, DataVar uintptr, NotifyVar *glib.DestroyNotify) {
7171
72- DeserializeVarPtr := uintptr(unsafe.Pointer(DeserializeVar))
7372 var DeserializeVarRef uintptr
74- if cbRefPtr, ok := glib.GetCallback(DeserializeVarPtr); ok {
75- DeserializeVarRef = cbRefPtr
76- } else {
77- fcb := func(arg0 uintptr) {
78- cbFn := *DeserializeVar
79- cbFn(arg0)
73+ if DeserializeVar != nil {
74+ DeserializeVarPtr := uintptr(unsafe.Pointer(DeserializeVar))
75+ if cbRefPtr, ok := glib.GetCallback(DeserializeVarPtr); ok {
76+ DeserializeVarRef = cbRefPtr
77+ } else {
78+ fcb := func(arg0 uintptr) {
79+ cbFn := *DeserializeVar
80+ cbFn(arg0)
81+ }
82+ DeserializeVarRef = purego.NewCallback(fcb)
83+ glib.SaveCallback(DeserializeVarPtr, DeserializeVarRef)
8084 }
81- DeserializeVarRef = purego.NewCallback(fcb)
82- glib.SaveCallback(DeserializeVarPtr, DeserializeVarRef)
8385 }
8486
85- NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
8687 var NotifyVarRef uintptr
87- if cbRefPtr, ok := glib.GetCallback(NotifyVarPtr); ok {
88- NotifyVarRef = cbRefPtr
89- } else {
90- fcb := func(arg0 uintptr) {
91- cbFn := *NotifyVar
92- cbFn(arg0)
88+ if NotifyVar != nil {
89+ NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
90+ if cbRefPtr, ok := glib.GetCallback(NotifyVarPtr); ok {
91+ NotifyVarRef = cbRefPtr
92+ } else {
93+ fcb := func(arg0 uintptr) {
94+ cbFn := *NotifyVar
95+ cbFn(arg0)
96+ }
97+ NotifyVarRef = purego.NewCallback(fcb)
98+ glib.SaveCallback(NotifyVarPtr, NotifyVarRef)
9399 }
94- NotifyVarRef = purego.NewCallback(fcb)
95- glib.SaveCallback(NotifyVarPtr, NotifyVarRef)
96100 }
97101
98102 xContentRegisterDeserializer(MimeTypeVar, TypeVar, DeserializeVarRef, DataVar, NotifyVarRef)
@@ -246,17 +250,19 @@ var xContentDeserializerSetTaskData func(uintptr, uintptr, uintptr)
246250 // Associate data with the current deserialization operation.
247251 func (x *ContentDeserializer) SetTaskData(DataVar uintptr, NotifyVar *glib.DestroyNotify) {
248252
249- NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
250253 var NotifyVarRef uintptr
251- if cbRefPtr, ok := glib.GetCallback(NotifyVarPtr); ok {
252- NotifyVarRef = cbRefPtr
253- } else {
254- fcb := func(arg0 uintptr) {
255- cbFn := *NotifyVar
256- cbFn(arg0)
254+ if NotifyVar != nil {
255+ NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
256+ if cbRefPtr, ok := glib.GetCallback(NotifyVarPtr); ok {
257+ NotifyVarRef = cbRefPtr
258+ } else {
259+ fcb := func(arg0 uintptr) {
260+ cbFn := *NotifyVar
261+ cbFn(arg0)
262+ }
263+ NotifyVarRef = purego.NewCallback(fcb)
264+ glib.SaveCallback(NotifyVarPtr, NotifyVarRef)
257265 }
258- NotifyVarRef = purego.NewCallback(fcb)
259- glib.SaveCallback(NotifyVarPtr, NotifyVarRef)
260266 }
261267
262268 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
2828 // so applications can override the built-in serializers.
2929 func ContentRegisterSerializer(TypeVar types.GType, MimeTypeVar string, SerializeVar *ContentSerializeFunc, DataVar uintptr, NotifyVar *glib.DestroyNotify) {
3030
31- SerializeVarPtr := uintptr(unsafe.Pointer(SerializeVar))
3231 var SerializeVarRef uintptr
33- if cbRefPtr, ok := glib.GetCallback(SerializeVarPtr); ok {
34- SerializeVarRef = cbRefPtr
35- } else {
36- fcb := func(arg0 uintptr) {
37- cbFn := *SerializeVar
38- cbFn(arg0)
32+ if SerializeVar != nil {
33+ SerializeVarPtr := uintptr(unsafe.Pointer(SerializeVar))
34+ if cbRefPtr, ok := glib.GetCallback(SerializeVarPtr); ok {
35+ SerializeVarRef = cbRefPtr
36+ } else {
37+ fcb := func(arg0 uintptr) {
38+ cbFn := *SerializeVar
39+ cbFn(arg0)
40+ }
41+ SerializeVarRef = purego.NewCallback(fcb)
42+ glib.SaveCallback(SerializeVarPtr, SerializeVarRef)
3943 }
40- SerializeVarRef = purego.NewCallback(fcb)
41- glib.SaveCallback(SerializeVarPtr, SerializeVarRef)
4244 }
4345
44- NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
4546 var NotifyVarRef uintptr
46- if cbRefPtr, ok := glib.GetCallback(NotifyVarPtr); ok {
47- NotifyVarRef = cbRefPtr
48- } else {
49- fcb := func(arg0 uintptr) {
50- cbFn := *NotifyVar
51- cbFn(arg0)
47+ if NotifyVar != nil {
48+ NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
49+ if cbRefPtr, ok := glib.GetCallback(NotifyVarPtr); ok {
50+ NotifyVarRef = cbRefPtr
51+ } else {
52+ fcb := func(arg0 uintptr) {
53+ cbFn := *NotifyVar
54+ cbFn(arg0)
55+ }
56+ NotifyVarRef = purego.NewCallback(fcb)
57+ glib.SaveCallback(NotifyVarPtr, NotifyVarRef)
5258 }
53- NotifyVarRef = purego.NewCallback(fcb)
54- glib.SaveCallback(NotifyVarPtr, NotifyVarRef)
5559 }
5660
5761 xContentRegisterSerializer(TypeVar, MimeTypeVar, SerializeVarRef, DataVar, NotifyVarRef)
@@ -247,17 +251,19 @@ var xContentSerializerSetTaskData func(uintptr, uintptr, uintptr)
247251 // Associate data with the current serialization operation.
248252 func (x *ContentSerializer) SetTaskData(DataVar uintptr, NotifyVar *glib.DestroyNotify) {
249253
250- NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
251254 var NotifyVarRef uintptr
252- if cbRefPtr, ok := glib.GetCallback(NotifyVarPtr); ok {
253- NotifyVarRef = cbRefPtr
254- } else {
255- fcb := func(arg0 uintptr) {
256- cbFn := *NotifyVar
257- cbFn(arg0)
255+ if NotifyVar != nil {
256+ NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
257+ if cbRefPtr, ok := glib.GetCallback(NotifyVarPtr); ok {
258+ NotifyVarRef = cbRefPtr
259+ } else {
260+ fcb := func(arg0 uintptr) {
261+ cbFn := *NotifyVar
262+ cbFn(arg0)
263+ }
264+ NotifyVarRef = purego.NewCallback(fcb)
265+ glib.SaveCallback(NotifyVarPtr, NotifyVarRef)
258266 }
259- NotifyVarRef = purego.NewCallback(fcb)
260- glib.SaveCallback(NotifyVarPtr, NotifyVarRef)
261267 }
262268
263269 xContentSerializerSetTaskData(x.GoPointer(), DataVar, NotifyVarRef)
M v4/gdk/gdkcursor.go +22 -18
@@ -84,30 +84,34 @@ var xNewCursorFromCallback func(uintptr, uintptr, uintptr, uintptr) uintptr
8484 func NewCursorFromCallback(CallbackVar *CursorGetTextureCallback, DataVar uintptr, DestroyVar *glib.DestroyNotify, FallbackVar *Cursor) *Cursor {
8585 var cls *Cursor
8686
87- CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
8887 var CallbackVarRef uintptr
89- if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
90- CallbackVarRef = cbRefPtr
91- } else {
92- fcb := func(arg0 uintptr, arg1 int, arg2 float64, arg3 *int, arg4 *int, arg5 *int, arg6 *int, arg7 uintptr) uintptr {
93- cbFn := *CallbackVar
94- return cbFn(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7)
88+ if CallbackVar != nil {
89+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
90+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
91+ CallbackVarRef = cbRefPtr
92+ } else {
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)
9599 }
96- CallbackVarRef = purego.NewCallback(fcb)
97- glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
98100 }
99101
100- DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
101102 var DestroyVarRef uintptr
102- if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok {
103- DestroyVarRef = cbRefPtr
104- } else {
105- fcb := func(arg0 uintptr) {
106- cbFn := *DestroyVar
107- cbFn(arg0)
103+ if DestroyVar != nil {
104+ DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
105+ if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok {
106+ DestroyVarRef = cbRefPtr
107+ } else {
108+ fcb := func(arg0 uintptr) {
109+ cbFn := *DestroyVar
110+ cbFn(arg0)
111+ }
112+ DestroyVarRef = purego.NewCallback(fcb)
113+ glib.SaveCallback(DestroyVarPtr, DestroyVarRef)
108114 }
109- DestroyVarRef = purego.NewCallback(fcb)
110- glib.SaveCallback(DestroyVarPtr, DestroyVarRef)
111115 }
112116
113117 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
4747 func NewGLTexture(ContextVar *GLContext, IdVar uint, WidthVar int, HeightVar int, DestroyVar *glib.DestroyNotify, DataVar uintptr) *GLTexture {
4848 var cls *GLTexture
4949
50- DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
5150 var DestroyVarRef uintptr
52- if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok {
53- DestroyVarRef = cbRefPtr
54- } else {
55- fcb := func(arg0 uintptr) {
56- cbFn := *DestroyVar
57- cbFn(arg0)
51+ if DestroyVar != nil {
52+ DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
53+ if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok {
54+ DestroyVarRef = cbRefPtr
55+ } else {
56+ fcb := func(arg0 uintptr) {
57+ cbFn := *DestroyVar
58+ cbFn(arg0)
59+ }
60+ DestroyVarRef = purego.NewCallback(fcb)
61+ glib.SaveCallback(DestroyVarPtr, DestroyVarRef)
5862 }
59- DestroyVarRef = purego.NewCallback(fcb)
60- glib.SaveCallback(DestroyVarPtr, DestroyVarRef)
6163 }
6264
6365 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,
11611161 // See [method@GdkPixbuf.Pixbuf.save] for more details.
11621162 func (x *Pixbuf) SaveToCallback(SaveFuncVar *PixbufSaveFunc, UserDataVar uintptr, TypeVar string, ErrorVar **glib.Error, varArgs ...interface{}) bool {
11631163
1164- SaveFuncVarPtr := uintptr(unsafe.Pointer(SaveFuncVar))
11651164 var SaveFuncVarRef uintptr
1166- if cbRefPtr, ok := glib.GetCallback(SaveFuncVarPtr); ok {
1167- SaveFuncVarRef = cbRefPtr
1168- } else {
1169- fcb := func(arg0 []byte, arg1 uint, arg2 **glib.Error, arg3 uintptr) bool {
1170- cbFn := *SaveFuncVar
1171- return cbFn(arg0, arg1, arg2, arg3)
1165+ if SaveFuncVar != nil {
1166+ SaveFuncVarPtr := uintptr(unsafe.Pointer(SaveFuncVar))
1167+ if cbRefPtr, ok := glib.GetCallback(SaveFuncVarPtr); ok {
1168+ SaveFuncVarRef = cbRefPtr
1169+ } else {
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)
11721176 }
1173- SaveFuncVarRef = purego.NewCallback(fcb)
1174- glib.SaveCallback(SaveFuncVarPtr, SaveFuncVarRef)
11751177 }
11761178
11771179 cret := xPixbufSaveToCallback(x.GoPointer(), SaveFuncVarRef, UserDataVar, TypeVar, ErrorVar, varArgs...)
@@ -1191,17 +1193,19 @@ var xPixbufSaveToCallbackv func(uintptr, uintptr, uintptr, string, []string, []s
11911193 func (x *Pixbuf) SaveToCallbackv(SaveFuncVar *PixbufSaveFunc, UserDataVar uintptr, TypeVar string, OptionKeysVar []string, OptionValuesVar []string) (bool, error) {
11921194 var cerr *glib.Error
11931195
1194- SaveFuncVarPtr := uintptr(unsafe.Pointer(SaveFuncVar))
11951196 var SaveFuncVarRef uintptr
1196- if cbRefPtr, ok := glib.GetCallback(SaveFuncVarPtr); ok {
1197- SaveFuncVarRef = cbRefPtr
1198- } else {
1199- fcb := func(arg0 []byte, arg1 uint, arg2 **glib.Error, arg3 uintptr) bool {
1200- cbFn := *SaveFuncVar
1201- return cbFn(arg0, arg1, arg2, arg3)
1197+ if SaveFuncVar != nil {
1198+ SaveFuncVarPtr := uintptr(unsafe.Pointer(SaveFuncVar))
1199+ if cbRefPtr, ok := glib.GetCallback(SaveFuncVarPtr); ok {
1200+ SaveFuncVarRef = cbRefPtr
1201+ } else {
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)
12021208 }
1203- SaveFuncVarRef = purego.NewCallback(fcb)
1204- glib.SaveCallback(SaveFuncVarPtr, SaveFuncVarRef)
12051209 }
12061210
12071211 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
290290 // - [method@Gio.Cancellable.release_fd]
291291 func (x *Cancellable) Connect(CallbackVar *gobject.Callback, DataVar uintptr, DataDestroyFuncVar *glib.DestroyNotify) uint32 {
292292
293- CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
294293 var CallbackVarRef uintptr
295- if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
296- CallbackVarRef = cbRefPtr
297- } else {
298- fcb := func() {
299- cbFn := *CallbackVar
300- cbFn()
294+ if CallbackVar != nil {
295+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
296+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
297+ CallbackVarRef = cbRefPtr
298+ } else {
299+ fcb := func() {
300+ cbFn := *CallbackVar
301+ cbFn()
302+ }
303+ CallbackVarRef = purego.NewCallback(fcb)
304+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
301305 }
302- CallbackVarRef = purego.NewCallback(fcb)
303- glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
304306 }
305307
306308 var DataDestroyFuncVarRef uintptr
M v4/gio/gdbusconnection.go +55 -45
@@ -527,30 +527,34 @@ var xDBusConnectionAddFilter func(uintptr, uintptr, uintptr, uintptr) uint
527527 // destroyed.)
528528 func (x *DBusConnection) AddFilter(FilterFunctionVar *DBusMessageFilterFunction, UserDataVar uintptr, UserDataFreeFuncVar *glib.DestroyNotify) uint {
529529
530- FilterFunctionVarPtr := uintptr(unsafe.Pointer(FilterFunctionVar))
531530 var FilterFunctionVarRef uintptr
532- if cbRefPtr, ok := glib.GetCallback(FilterFunctionVarPtr); ok {
533- FilterFunctionVarRef = cbRefPtr
534- } else {
535- fcb := func(arg0 uintptr, arg1 uintptr, arg2 bool, arg3 uintptr) uintptr {
536- cbFn := *FilterFunctionVar
537- return cbFn(arg0, arg1, arg2, arg3)
531+ if FilterFunctionVar != nil {
532+ FilterFunctionVarPtr := uintptr(unsafe.Pointer(FilterFunctionVar))
533+ if cbRefPtr, ok := glib.GetCallback(FilterFunctionVarPtr); ok {
534+ FilterFunctionVarRef = cbRefPtr
535+ } else {
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)
538542 }
539- FilterFunctionVarRef = purego.NewCallback(fcb)
540- glib.SaveCallback(FilterFunctionVarPtr, FilterFunctionVarRef)
541543 }
542544
543- UserDataFreeFuncVarPtr := uintptr(unsafe.Pointer(UserDataFreeFuncVar))
544545 var UserDataFreeFuncVarRef uintptr
545- if cbRefPtr, ok := glib.GetCallback(UserDataFreeFuncVarPtr); ok {
546- UserDataFreeFuncVarRef = cbRefPtr
547- } else {
548- fcb := func(arg0 uintptr) {
549- cbFn := *UserDataFreeFuncVar
550- cbFn(arg0)
546+ if UserDataFreeFuncVar != nil {
547+ UserDataFreeFuncVarPtr := uintptr(unsafe.Pointer(UserDataFreeFuncVar))
548+ if cbRefPtr, ok := glib.GetCallback(UserDataFreeFuncVarPtr); ok {
549+ UserDataFreeFuncVarRef = cbRefPtr
550+ } else {
551+ fcb := func(arg0 uintptr) {
552+ cbFn := *UserDataFreeFuncVar
553+ cbFn(arg0)
554+ }
555+ UserDataFreeFuncVarRef = purego.NewCallback(fcb)
556+ glib.SaveCallback(UserDataFreeFuncVarPtr, UserDataFreeFuncVarRef)
551557 }
552- UserDataFreeFuncVarRef = purego.NewCallback(fcb)
553- glib.SaveCallback(UserDataFreeFuncVarPtr, UserDataFreeFuncVarRef)
554558 }
555559
556560 cret := xDBusConnectionAddFilter(x.GoPointer(), FilterFunctionVarRef, UserDataVar, UserDataFreeFuncVarRef)
@@ -1164,17 +1168,19 @@ var xDBusConnectionRegisterObject func(uintptr, string, *DBusInterfaceInfo, *DBu
11641168 func (x *DBusConnection) RegisterObject(ObjectPathVar string, InterfaceInfoVar *DBusInterfaceInfo, VtableVar *DBusInterfaceVTable, UserDataVar uintptr, UserDataFreeFuncVar *glib.DestroyNotify) (uint, error) {
11651169 var cerr *glib.Error
11661170
1167- UserDataFreeFuncVarPtr := uintptr(unsafe.Pointer(UserDataFreeFuncVar))
11681171 var UserDataFreeFuncVarRef uintptr
1169- if cbRefPtr, ok := glib.GetCallback(UserDataFreeFuncVarPtr); ok {
1170- UserDataFreeFuncVarRef = cbRefPtr
1171- } else {
1172- fcb := func(arg0 uintptr) {
1173- cbFn := *UserDataFreeFuncVar
1174- cbFn(arg0)
1172+ if UserDataFreeFuncVar != nil {
1173+ UserDataFreeFuncVarPtr := uintptr(unsafe.Pointer(UserDataFreeFuncVar))
1174+ if cbRefPtr, ok := glib.GetCallback(UserDataFreeFuncVarPtr); ok {
1175+ UserDataFreeFuncVarRef = cbRefPtr
1176+ } else {
1177+ fcb := func(arg0 uintptr) {
1178+ cbFn := *UserDataFreeFuncVar
1179+ cbFn(arg0)
1180+ }
1181+ UserDataFreeFuncVarRef = purego.NewCallback(fcb)
1182+ glib.SaveCallback(UserDataFreeFuncVarPtr, UserDataFreeFuncVarRef)
11751183 }
1176- UserDataFreeFuncVarRef = purego.NewCallback(fcb)
1177- glib.SaveCallback(UserDataFreeFuncVarPtr, UserDataFreeFuncVarRef)
11781184 }
11791185
11801186 cret := xDBusConnectionRegisterObject(x.GoPointer(), ObjectPathVar, InterfaceInfoVar, VtableVar, UserDataVar, UserDataFreeFuncVarRef, &cerr)
@@ -1269,17 +1275,19 @@ var xDBusConnectionRegisterSubtree func(uintptr, string, *DBusSubtreeVTable, DBu
12691275 func (x *DBusConnection) RegisterSubtree(ObjectPathVar string, VtableVar *DBusSubtreeVTable, FlagsVar DBusSubtreeFlags, UserDataVar uintptr, UserDataFreeFuncVar *glib.DestroyNotify) (uint, error) {
12701276 var cerr *glib.Error
12711277
1272- UserDataFreeFuncVarPtr := uintptr(unsafe.Pointer(UserDataFreeFuncVar))
12731278 var UserDataFreeFuncVarRef uintptr
1274- if cbRefPtr, ok := glib.GetCallback(UserDataFreeFuncVarPtr); ok {
1275- UserDataFreeFuncVarRef = cbRefPtr
1276- } else {
1277- fcb := func(arg0 uintptr) {
1278- cbFn := *UserDataFreeFuncVar
1279- cbFn(arg0)
1279+ if UserDataFreeFuncVar != nil {
1280+ UserDataFreeFuncVarPtr := uintptr(unsafe.Pointer(UserDataFreeFuncVar))
1281+ if cbRefPtr, ok := glib.GetCallback(UserDataFreeFuncVarPtr); ok {
1282+ UserDataFreeFuncVarRef = cbRefPtr
1283+ } else {
1284+ fcb := func(arg0 uintptr) {
1285+ cbFn := *UserDataFreeFuncVar
1286+ cbFn(arg0)
1287+ }
1288+ UserDataFreeFuncVarRef = purego.NewCallback(fcb)
1289+ glib.SaveCallback(UserDataFreeFuncVarPtr, UserDataFreeFuncVarRef)
12801290 }
1281- UserDataFreeFuncVarRef = purego.NewCallback(fcb)
1282- glib.SaveCallback(UserDataFreeFuncVarPtr, UserDataFreeFuncVarRef)
12831291 }
12841292
12851293 cret := xDBusConnectionRegisterSubtree(x.GoPointer(), ObjectPathVar, VtableVar, FlagsVar, UserDataVar, UserDataFreeFuncVarRef, &cerr)
@@ -1547,17 +1555,19 @@ var xDBusConnectionSignalSubscribe func(uintptr, string, string, string, string,
15471555 // This function can never fail.
15481556 func (x *DBusConnection) SignalSubscribe(SenderVar string, InterfaceNameVar string, MemberVar string, ObjectPathVar string, Arg0Var string, FlagsVar DBusSignalFlags, CallbackVar *DBusSignalCallback, UserDataVar uintptr, UserDataFreeFuncVar *glib.DestroyNotify) uint {
15491557
1550- CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
15511558 var CallbackVarRef uintptr
1552- if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
1553- CallbackVarRef = cbRefPtr
1554- } else {
1555- fcb := func(arg0 uintptr, arg1 string, arg2 string, arg3 string, arg4 string, arg5 *glib.Variant, arg6 uintptr) {
1556- cbFn := *CallbackVar
1557- cbFn(arg0, arg1, arg2, arg3, arg4, arg5, arg6)
1559+ if CallbackVar != nil {
1560+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
1561+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
1562+ CallbackVarRef = cbRefPtr
1563+ } else {
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)
15581570 }
1559- CallbackVarRef = purego.NewCallback(fcb)
1560- glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
15611571 }
15621572
15631573 var UserDataFreeFuncVarRef uintptr
M v4/gio/gioscheduler.go +11 -9
@@ -33,17 +33,19 @@ var xIoSchedulerPushJob func(uintptr, uintptr, uintptr, int, uintptr)
3333 // g_io_scheduler_cancel_all_jobs().
3434 func IoSchedulerPushJob(JobFuncVar *IOSchedulerJobFunc, UserDataVar uintptr, NotifyVar *glib.DestroyNotify, IoPriorityVar int, CancellableVar *Cancellable) {
3535
36- JobFuncVarPtr := uintptr(unsafe.Pointer(JobFuncVar))
3736 var JobFuncVarRef uintptr
38- if cbRefPtr, ok := glib.GetCallback(JobFuncVarPtr); ok {
39- JobFuncVarRef = cbRefPtr
40- } else {
41- fcb := func(arg0 *IOSchedulerJob, arg1 uintptr, arg2 uintptr) bool {
42- cbFn := *JobFuncVar
43- return cbFn(arg0, arg1, arg2)
37+ if JobFuncVar != nil {
38+ JobFuncVarPtr := uintptr(unsafe.Pointer(JobFuncVar))
39+ if cbRefPtr, ok := glib.GetCallback(JobFuncVarPtr); ok {
40+ JobFuncVarRef = cbRefPtr
41+ } else {
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)
4448 }
45- JobFuncVarRef = purego.NewCallback(fcb)
46- glib.SaveCallback(JobFuncVarPtr, JobFuncVarRef)
4749 }
4850
4951 var NotifyVarRef uintptr
M v4/gio/giotypes.go +22 -18
@@ -400,17 +400,19 @@ var xIOSchedulerJobSendToMainloop func(uintptr, uintptr, uintptr, uintptr) bool
400400 // blocking the I/O job).
401401 func (x *IOSchedulerJob) SendToMainloop(FuncVar *glib.SourceFunc, UserDataVar uintptr, NotifyVar *glib.DestroyNotify) bool {
402402
403- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
404403 var FuncVarRef uintptr
405- if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok {
406- FuncVarRef = cbRefPtr
407- } else {
408- fcb := func(arg0 uintptr) bool {
409- cbFn := *FuncVar
410- return cbFn(arg0)
404+ if FuncVar != nil {
405+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
406+ if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok {
407+ FuncVarRef = cbRefPtr
408+ } else {
409+ fcb := func(arg0 uintptr) bool {
410+ cbFn := *FuncVar
411+ return cbFn(arg0)
412+ }
413+ FuncVarRef = purego.NewCallback(fcb)
414+ glib.SaveCallback(FuncVarPtr, FuncVarRef)
411415 }
412- FuncVarRef = purego.NewCallback(fcb)
413- glib.SaveCallback(FuncVarPtr, FuncVarRef)
414416 }
415417
416418 var NotifyVarRef uintptr
@@ -445,17 +447,19 @@ var xIOSchedulerJobSendToMainloopAsync func(uintptr, uintptr, uintptr, uintptr)
445447 // g_io_scheduler_push_job() or by using refcounting for @user_data.
446448 func (x *IOSchedulerJob) SendToMainloopAsync(FuncVar *glib.SourceFunc, UserDataVar uintptr, NotifyVar *glib.DestroyNotify) {
447449
448- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
449450 var FuncVarRef uintptr
450- if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok {
451- FuncVarRef = cbRefPtr
452- } else {
453- fcb := func(arg0 uintptr) bool {
454- cbFn := *FuncVar
455- return cbFn(arg0)
451+ if FuncVar != nil {
452+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
453+ if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok {
454+ FuncVarRef = cbRefPtr
455+ } else {
456+ fcb := func(arg0 uintptr) bool {
457+ cbFn := *FuncVar
458+ return cbFn(arg0)
459+ }
460+ FuncVarRef = purego.NewCallback(fcb)
461+ glib.SaveCallback(FuncVarPtr, FuncVarRef)
456462 }
457- FuncVarRef = purego.NewCallback(fcb)
458- glib.SaveCallback(FuncVarPtr, FuncVarRef)
459463 }
460464
461465 var NotifyVarRef uintptr
M v4/gio/gliststore.go +44 -36
@@ -100,17 +100,19 @@ var xListStoreFindWithEqualFunc func(uintptr, uintptr, uintptr, *uint) bool
100100 // Since GLib 2.76 it is possible to pass `NULL` for @item.
101101 func (x *ListStore) FindWithEqualFunc(ItemVar *gobject.Object, EqualFuncVar *glib.EqualFunc, PositionVar *uint) bool {
102102
103- EqualFuncVarPtr := uintptr(unsafe.Pointer(EqualFuncVar))
104103 var EqualFuncVarRef uintptr
105- if cbRefPtr, ok := glib.GetCallback(EqualFuncVarPtr); ok {
106- EqualFuncVarRef = cbRefPtr
107- } else {
108- fcb := func(arg0 uintptr, arg1 uintptr) bool {
109- cbFn := *EqualFuncVar
110- return cbFn(arg0, arg1)
104+ if EqualFuncVar != nil {
105+ EqualFuncVarPtr := uintptr(unsafe.Pointer(EqualFuncVar))
106+ if cbRefPtr, ok := glib.GetCallback(EqualFuncVarPtr); ok {
107+ EqualFuncVarRef = cbRefPtr
108+ } else {
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)
111115 }
112- EqualFuncVarRef = purego.NewCallback(fcb)
113- glib.SaveCallback(EqualFuncVarPtr, EqualFuncVarRef)
114116 }
115117
116118 cret := xListStoreFindWithEqualFunc(x.GoPointer(), ItemVar.GoPointer(), EqualFuncVarRef, PositionVar)
@@ -127,17 +129,19 @@ var xListStoreFindWithEqualFuncFull func(uintptr, uintptr, uintptr, uintptr, *ui
127129 // Since GLib 2.76 it is possible to pass `NULL` for @item.
128130 func (x *ListStore) FindWithEqualFuncFull(ItemVar *gobject.Object, EqualFuncVar *glib.EqualFuncFull, UserDataVar uintptr, PositionVar *uint) bool {
129131
130- EqualFuncVarPtr := uintptr(unsafe.Pointer(EqualFuncVar))
131132 var EqualFuncVarRef uintptr
132- if cbRefPtr, ok := glib.GetCallback(EqualFuncVarPtr); ok {
133- EqualFuncVarRef = cbRefPtr
134- } else {
135- fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) bool {
136- cbFn := *EqualFuncVar
137- return cbFn(arg0, arg1, arg2)
133+ if EqualFuncVar != nil {
134+ EqualFuncVarPtr := uintptr(unsafe.Pointer(EqualFuncVar))
135+ if cbRefPtr, ok := glib.GetCallback(EqualFuncVarPtr); ok {
136+ EqualFuncVarRef = cbRefPtr
137+ } else {
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)
138144 }
139- EqualFuncVarRef = purego.NewCallback(fcb)
140- glib.SaveCallback(EqualFuncVarPtr, EqualFuncVarRef)
141145 }
142146
143147 cret := xListStoreFindWithEqualFuncFull(x.GoPointer(), ItemVar.GoPointer(), EqualFuncVarRef, UserDataVar, PositionVar)
@@ -172,17 +176,19 @@ var xListStoreInsertSorted func(uintptr, uintptr, uintptr, uintptr) uint
172176 // This function takes a ref on @item.
173177 func (x *ListStore) InsertSorted(ItemVar *gobject.Object, CompareFuncVar *glib.CompareDataFunc, UserDataVar uintptr) uint {
174178
175- CompareFuncVarPtr := uintptr(unsafe.Pointer(CompareFuncVar))
176179 var CompareFuncVarRef uintptr
177- if cbRefPtr, ok := glib.GetCallback(CompareFuncVarPtr); ok {
178- CompareFuncVarRef = cbRefPtr
179- } else {
180- fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int {
181- cbFn := *CompareFuncVar
182- return cbFn(arg0, arg1, arg2)
180+ if CompareFuncVar != nil {
181+ CompareFuncVarPtr := uintptr(unsafe.Pointer(CompareFuncVar))
182+ if cbRefPtr, ok := glib.GetCallback(CompareFuncVarPtr); ok {
183+ CompareFuncVarRef = cbRefPtr
184+ } else {
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)
183191 }
184- CompareFuncVarRef = purego.NewCallback(fcb)
185- glib.SaveCallback(CompareFuncVarPtr, CompareFuncVarRef)
186192 }
187193
188194 cret := xListStoreInsertSorted(x.GoPointer(), ItemVar.GoPointer(), CompareFuncVarRef, UserDataVar)
@@ -216,17 +222,19 @@ var xListStoreSort func(uintptr, uintptr, uintptr)
216222 // Sort the items in @store according to @compare_func.
217223 func (x *ListStore) Sort(CompareFuncVar *glib.CompareDataFunc, UserDataVar uintptr) {
218224
219- CompareFuncVarPtr := uintptr(unsafe.Pointer(CompareFuncVar))
220225 var CompareFuncVarRef uintptr
221- if cbRefPtr, ok := glib.GetCallback(CompareFuncVarPtr); ok {
222- CompareFuncVarRef = cbRefPtr
223- } else {
224- fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int {
225- cbFn := *CompareFuncVar
226- return cbFn(arg0, arg1, arg2)
226+ if CompareFuncVar != nil {
227+ CompareFuncVarPtr := uintptr(unsafe.Pointer(CompareFuncVar))
228+ if cbRefPtr, ok := glib.GetCallback(CompareFuncVarPtr); ok {
229+ CompareFuncVarRef = cbRefPtr
230+ } else {
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)
227237 }
228- CompareFuncVarRef = purego.NewCallback(fcb)
229- glib.SaveCallback(CompareFuncVarPtr, CompareFuncVarRef)
230238 }
231239
232240 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
823823 }
824824 }
825825
826- DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
827826 var DestroyVarRef uintptr
828- if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok {
829- DestroyVarRef = cbRefPtr
830- } else {
831- fcb := func(arg0 uintptr) {
832- cbFn := *DestroyVar
833- cbFn(arg0)
827+ if DestroyVar != nil {
828+ DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
829+ if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok {
830+ DestroyVarRef = cbRefPtr
831+ } else {
832+ fcb := func(arg0 uintptr) {
833+ cbFn := *DestroyVar
834+ cbFn(arg0)
835+ }
836+ DestroyVarRef = purego.NewCallback(fcb)
837+ glib.SaveCallback(DestroyVarPtr, DestroyVarRef)
834838 }
835- DestroyVarRef = purego.NewCallback(fcb)
836- glib.SaveCallback(DestroyVarPtr, DestroyVarRef)
837839 }
838840
839841 xSettingsBindWithMapping(x.GoPointer(), KeyVar, ObjectVar.GoPointer(), PropertyVar, FlagsVar, GetMappingVarRef, SetMappingVarRef, UserDataVar, DestroyVarRef)
@@ -1128,17 +1130,19 @@ var xSettingsGetMapped func(uintptr, string, uintptr, uintptr) uintptr
11281130 // just as any other value would be.
11291131 func (x *Settings) GetMapped(KeyVar string, MappingVar *SettingsGetMapping, UserDataVar uintptr) uintptr {
11301132
1131- MappingVarPtr := uintptr(unsafe.Pointer(MappingVar))
11321133 var MappingVarRef uintptr
1133- if cbRefPtr, ok := glib.GetCallback(MappingVarPtr); ok {
1134- MappingVarRef = cbRefPtr
1135- } else {
1136- fcb := func(arg0 *glib.Variant, arg1 *uintptr, arg2 uintptr) bool {
1137- cbFn := *MappingVar
1138- return cbFn(arg0, arg1, arg2)
1134+ if MappingVar != nil {
1135+ MappingVarPtr := uintptr(unsafe.Pointer(MappingVar))
1136+ if cbRefPtr, ok := glib.GetCallback(MappingVarPtr); ok {
1137+ MappingVarRef = cbRefPtr
1138+ } else {
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)
11391145 }
1140- MappingVarRef = purego.NewCallback(fcb)
1141- glib.SaveCallback(MappingVarPtr, MappingVarRef)
11421146 }
11431147
11441148 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)
516516 // is needed to run the job and report its completion.
517517 func (x *SimpleAsyncResult) RunInThread(FuncVar *SimpleAsyncThreadFunc, IoPriorityVar int, CancellableVar *Cancellable) {
518518
519- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
520519 var FuncVarRef uintptr
521- if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok {
522- FuncVarRef = cbRefPtr
523- } else {
524- fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
525- cbFn := *FuncVar
526- cbFn(arg0, arg1, arg2)
520+ if FuncVar != nil {
521+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
522+ if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok {
523+ FuncVarRef = cbRefPtr
524+ } else {
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)
527531 }
528- FuncVarRef = purego.NewCallback(fcb)
529- glib.SaveCallback(FuncVarPtr, FuncVarRef)
530532 }
531533
532534 xSimpleAsyncResultRunInThread(x.GoPointer(), FuncVarRef, IoPriorityVar, CancellableVar.GoPointer())
@@ -611,17 +613,19 @@ var xSimpleAsyncResultSetOpResGpointer func(uintptr, uintptr, uintptr)
611613 // Sets the operation result within the asynchronous result to a pointer.
612614 func (x *SimpleAsyncResult) SetOpResGpointer(OpResVar uintptr, DestroyOpResVar *glib.DestroyNotify) {
613615
614- DestroyOpResVarPtr := uintptr(unsafe.Pointer(DestroyOpResVar))
615616 var DestroyOpResVarRef uintptr
616- if cbRefPtr, ok := glib.GetCallback(DestroyOpResVarPtr); ok {
617- DestroyOpResVarRef = cbRefPtr
618- } else {
619- fcb := func(arg0 uintptr) {
620- cbFn := *DestroyOpResVar
621- cbFn(arg0)
617+ if DestroyOpResVar != nil {
618+ DestroyOpResVarPtr := uintptr(unsafe.Pointer(DestroyOpResVar))
619+ if cbRefPtr, ok := glib.GetCallback(DestroyOpResVarPtr); ok {
620+ DestroyOpResVarRef = cbRefPtr
621+ } else {
622+ fcb := func(arg0 uintptr) {
623+ cbFn := *DestroyOpResVar
624+ cbFn(arg0)
625+ }
626+ DestroyOpResVarRef = purego.NewCallback(fcb)
627+ glib.SaveCallback(DestroyOpResVarPtr, DestroyOpResVarRef)
622628 }
623- DestroyOpResVarRef = purego.NewCallback(fcb)
624- glib.SaveCallback(DestroyOpResVarPtr, DestroyOpResVarRef)
625629 }
626630
627631 xSimpleAsyncResultSetOpResGpointer(x.GoPointer(), OpResVar, DestroyOpResVarRef)
M v4/gio/gsubprocesslauncher.go +22 -18
@@ -103,30 +103,34 @@ var xSubprocessLauncherSetChildSetup func(uintptr, uintptr, uintptr, uintptr)
103103 // Child setup functions are only available on UNIX.
104104 func (x *SubprocessLauncher) SetChildSetup(ChildSetupVar *glib.SpawnChildSetupFunc, UserDataVar uintptr, DestroyNotifyVar *glib.DestroyNotify) {
105105
106- ChildSetupVarPtr := uintptr(unsafe.Pointer(ChildSetupVar))
107106 var ChildSetupVarRef uintptr
108- if cbRefPtr, ok := glib.GetCallback(ChildSetupVarPtr); ok {
109- ChildSetupVarRef = cbRefPtr
110- } else {
111- fcb := func(arg0 uintptr) {
112- cbFn := *ChildSetupVar
113- cbFn(arg0)
107+ if ChildSetupVar != nil {
108+ ChildSetupVarPtr := uintptr(unsafe.Pointer(ChildSetupVar))
109+ if cbRefPtr, ok := glib.GetCallback(ChildSetupVarPtr); ok {
110+ ChildSetupVarRef = cbRefPtr
111+ } else {
112+ fcb := func(arg0 uintptr) {
113+ cbFn := *ChildSetupVar
114+ cbFn(arg0)
115+ }
116+ ChildSetupVarRef = purego.NewCallback(fcb)
117+ glib.SaveCallback(ChildSetupVarPtr, ChildSetupVarRef)
114118 }
115- ChildSetupVarRef = purego.NewCallback(fcb)
116- glib.SaveCallback(ChildSetupVarPtr, ChildSetupVarRef)
117119 }
118120
119- DestroyNotifyVarPtr := uintptr(unsafe.Pointer(DestroyNotifyVar))
120121 var DestroyNotifyVarRef uintptr
121- if cbRefPtr, ok := glib.GetCallback(DestroyNotifyVarPtr); ok {
122- DestroyNotifyVarRef = cbRefPtr
123- } else {
124- fcb := func(arg0 uintptr) {
125- cbFn := *DestroyNotifyVar
126- cbFn(arg0)
122+ if DestroyNotifyVar != nil {
123+ DestroyNotifyVarPtr := uintptr(unsafe.Pointer(DestroyNotifyVar))
124+ if cbRefPtr, ok := glib.GetCallback(DestroyNotifyVarPtr); ok {
125+ DestroyNotifyVarRef = cbRefPtr
126+ } else {
127+ fcb := func(arg0 uintptr) {
128+ cbFn := *DestroyNotifyVar
129+ cbFn(arg0)
130+ }
131+ DestroyNotifyVarRef = purego.NewCallback(fcb)
132+ glib.SaveCallback(DestroyNotifyVarPtr, DestroyNotifyVarRef)
127133 }
128- DestroyNotifyVarRef = purego.NewCallback(fcb)
129- glib.SaveCallback(DestroyNotifyVarPtr, DestroyNotifyVarRef)
130134 }
131135
132136 xSubprocessLauncherSetChildSetup(x.GoPointer(), ChildSetupVarRef, UserDataVar, DestroyNotifyVarRef)
M v4/gio/gtask.go +33 -27
@@ -673,17 +673,19 @@ var xTaskAttachSource func(uintptr, *glib.Source, uintptr)
673673 // This takes a reference on @task until @source is destroyed.
674674 func (x *Task) AttachSource(SourceVar *glib.Source, CallbackVar *glib.SourceFunc) {
675675
676- CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
677676 var CallbackVarRef uintptr
678- if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
679- CallbackVarRef = cbRefPtr
680- } else {
681- fcb := func(arg0 uintptr) bool {
682- cbFn := *CallbackVar
683- return cbFn(arg0)
677+ if CallbackVar != nil {
678+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
679+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
680+ CallbackVarRef = cbRefPtr
681+ } else {
682+ fcb := func(arg0 uintptr) bool {
683+ cbFn := *CallbackVar
684+ return cbFn(arg0)
685+ }
686+ CallbackVarRef = purego.NewCallback(fcb)
687+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
684688 }
685- CallbackVarRef = purego.NewCallback(fcb)
686- glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
687689 }
688690
689691 xTaskAttachSource(x.GoPointer(), SourceVar, CallbackVarRef)
@@ -1083,17 +1085,19 @@ var xTaskRunInThread func(uintptr, uintptr)
10831085 // g_task_run_in_thread().
10841086 func (x *Task) RunInThread(TaskFuncVar *TaskThreadFunc) {
10851087
1086- TaskFuncVarPtr := uintptr(unsafe.Pointer(TaskFuncVar))
10871088 var TaskFuncVarRef uintptr
1088- if cbRefPtr, ok := glib.GetCallback(TaskFuncVarPtr); ok {
1089- TaskFuncVarRef = cbRefPtr
1090- } else {
1091- fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr, arg3 uintptr) {
1092- cbFn := *TaskFuncVar
1093- cbFn(arg0, arg1, arg2, arg3)
1089+ if TaskFuncVar != nil {
1090+ TaskFuncVarPtr := uintptr(unsafe.Pointer(TaskFuncVar))
1091+ if cbRefPtr, ok := glib.GetCallback(TaskFuncVarPtr); ok {
1092+ TaskFuncVarRef = cbRefPtr
1093+ } else {
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)
10941100 }
1095- TaskFuncVarRef = purego.NewCallback(fcb)
1096- glib.SaveCallback(TaskFuncVarPtr, TaskFuncVarRef)
10971101 }
10981102
10991103 xTaskRunInThread(x.GoPointer(), TaskFuncVarRef)
@@ -1120,17 +1124,19 @@ var xTaskRunInThreadSync func(uintptr, uintptr)
11201124 // limited number of them at a time.
11211125 func (x *Task) RunInThreadSync(TaskFuncVar *TaskThreadFunc) {
11221126
1123- TaskFuncVarPtr := uintptr(unsafe.Pointer(TaskFuncVar))
11241127 var TaskFuncVarRef uintptr
1125- if cbRefPtr, ok := glib.GetCallback(TaskFuncVarPtr); ok {
1126- TaskFuncVarRef = cbRefPtr
1127- } else {
1128- fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr, arg3 uintptr) {
1129- cbFn := *TaskFuncVar
1130- cbFn(arg0, arg1, arg2, arg3)
1128+ if TaskFuncVar != nil {
1129+ TaskFuncVarPtr := uintptr(unsafe.Pointer(TaskFuncVar))
1130+ if cbRefPtr, ok := glib.GetCallback(TaskFuncVarPtr); ok {
1131+ TaskFuncVarRef = cbRefPtr
1132+ } else {
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)
11311139 }
1132- TaskFuncVarRef = purego.NewCallback(fcb)
1133- glib.SaveCallback(TaskFuncVarPtr, TaskFuncVarRef)
11341140 }
11351141
11361142 xTaskRunInThreadSync(x.GoPointer(), TaskFuncVarRef)
M v4/glib/garray.go +33 -27
@@ -147,17 +147,19 @@ var xNewBytesWithFreeFunc func([]byte, uint, uintptr, uintptr) *Bytes
147147 // @data may be `NULL` if @size is 0.
148148 func NewBytesWithFreeFunc(DataVar []byte, SizeVar uint, FreeFuncVar *DestroyNotify, UserDataVar uintptr) *Bytes {
149149
150- FreeFuncVarPtr := uintptr(unsafe.Pointer(FreeFuncVar))
151150 var FreeFuncVarRef uintptr
152- if cbRefPtr, ok := GetCallback(FreeFuncVarPtr); ok {
153- FreeFuncVarRef = cbRefPtr
154- } else {
155- fcb := func(arg0 uintptr) {
156- cbFn := *FreeFuncVar
157- cbFn(arg0)
151+ if FreeFuncVar != nil {
152+ FreeFuncVarPtr := uintptr(unsafe.Pointer(FreeFuncVar))
153+ if cbRefPtr, ok := GetCallback(FreeFuncVarPtr); ok {
154+ FreeFuncVarRef = cbRefPtr
155+ } else {
156+ fcb := func(arg0 uintptr) {
157+ cbFn := *FreeFuncVar
158+ cbFn(arg0)
159+ }
160+ FreeFuncVarRef = purego.NewCallback(fcb)
161+ SaveCallback(FreeFuncVarPtr, FreeFuncVarRef)
158162 }
159- FreeFuncVarRef = purego.NewCallback(fcb)
160- SaveCallback(FreeFuncVarPtr, FreeFuncVarRef)
161163 }
162164
163165 cret := xNewBytesWithFreeFunc(DataVar, SizeVar, FreeFuncVarRef, UserDataVar)
@@ -566,17 +568,19 @@ var xByteArraySort func([]byte, uintptr)
566568 // their addresses.
567569 func ByteArraySort(ArrayVar []byte, CompareFuncVar *CompareFunc) {
568570
569- CompareFuncVarPtr := uintptr(unsafe.Pointer(CompareFuncVar))
570571 var CompareFuncVarRef uintptr
571- if cbRefPtr, ok := GetCallback(CompareFuncVarPtr); ok {
572- CompareFuncVarRef = cbRefPtr
573- } else {
574- fcb := func(arg0 uintptr, arg1 uintptr) int {
575- cbFn := *CompareFuncVar
576- return cbFn(arg0, arg1)
572+ if CompareFuncVar != nil {
573+ CompareFuncVarPtr := uintptr(unsafe.Pointer(CompareFuncVar))
574+ if cbRefPtr, ok := GetCallback(CompareFuncVarPtr); ok {
575+ CompareFuncVarRef = cbRefPtr
576+ } else {
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)
577583 }
578- CompareFuncVarRef = purego.NewCallback(fcb)
579- SaveCallback(CompareFuncVarPtr, CompareFuncVarRef)
580584 }
581585
582586 xByteArraySort(ArrayVar, CompareFuncVarRef)
@@ -589,17 +593,19 @@ var xByteArraySortWithData func([]byte, uintptr, uintptr)
589593 // user data argument.
590594 func ByteArraySortWithData(ArrayVar []byte, CompareFuncVar *CompareDataFunc, UserDataVar uintptr) {
591595
592- CompareFuncVarPtr := uintptr(unsafe.Pointer(CompareFuncVar))
593596 var CompareFuncVarRef uintptr
594- if cbRefPtr, ok := GetCallback(CompareFuncVarPtr); ok {
595- CompareFuncVarRef = cbRefPtr
596- } else {
597- fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int {
598- cbFn := *CompareFuncVar
599- return cbFn(arg0, arg1, arg2)
597+ if CompareFuncVar != nil {
598+ CompareFuncVarPtr := uintptr(unsafe.Pointer(CompareFuncVar))
599+ if cbRefPtr, ok := GetCallback(CompareFuncVarPtr); ok {
600+ CompareFuncVarRef = cbRefPtr
601+ } else {
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)
600608 }
601- CompareFuncVarRef = purego.NewCallback(fcb)
602- SaveCallback(CompareFuncVarPtr, CompareFuncVarRef)
603609 }
604610
605611 xByteArraySortWithData(ArrayVar, CompareFuncVarRef, UserDataVar)
M v4/glib/gasyncqueue.go +44 -36
@@ -144,17 +144,19 @@ var xAsyncQueuePushSorted func(uintptr, uintptr, uintptr, uintptr)
144144 // For an example of @func see g_async_queue_sort().
145145 func (x *AsyncQueue) PushSorted(DataVar uintptr, FuncVar *CompareDataFunc, UserDataVar uintptr) {
146146
147- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
148147 var FuncVarRef uintptr
149- if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
150- FuncVarRef = cbRefPtr
151- } else {
152- fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int {
153- cbFn := *FuncVar
154- return cbFn(arg0, arg1, arg2)
148+ if FuncVar != nil {
149+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
150+ if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
151+ FuncVarRef = cbRefPtr
152+ } else {
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)
155159 }
156- FuncVarRef = purego.NewCallback(fcb)
157- SaveCallback(FuncVarPtr, FuncVarRef)
158160 }
159161
160162 xAsyncQueuePushSorted(x.GoPointer(), DataVar, FuncVarRef, UserDataVar)
@@ -180,17 +182,19 @@ var xAsyncQueuePushSortedUnlocked func(uintptr, uintptr, uintptr, uintptr)
180182 // For an example of @func see g_async_queue_sort().
181183 func (x *AsyncQueue) PushSortedUnlocked(DataVar uintptr, FuncVar *CompareDataFunc, UserDataVar uintptr) {
182184
183- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
184185 var FuncVarRef uintptr
185- if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
186- FuncVarRef = cbRefPtr
187- } else {
188- fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int {
189- cbFn := *FuncVar
190- return cbFn(arg0, arg1, arg2)
186+ if FuncVar != nil {
187+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
188+ if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
189+ FuncVarRef = cbRefPtr
190+ } else {
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)
191197 }
192- FuncVarRef = purego.NewCallback(fcb)
193- SaveCallback(FuncVarPtr, FuncVarRef)
194198 }
195199
196200 xAsyncQueuePushSortedUnlocked(x.GoPointer(), DataVar, FuncVarRef, UserDataVar)
@@ -277,17 +281,19 @@ var xAsyncQueueSort func(uintptr, uintptr, uintptr)
277281 // ]|
278282 func (x *AsyncQueue) Sort(FuncVar *CompareDataFunc, UserDataVar uintptr) {
279283
280- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
281284 var FuncVarRef uintptr
282- if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
283- FuncVarRef = cbRefPtr
284- } else {
285- fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int {
286- cbFn := *FuncVar
287- return cbFn(arg0, arg1, arg2)
285+ if FuncVar != nil {
286+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
287+ if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
288+ FuncVarRef = cbRefPtr
289+ } else {
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)
288296 }
289- FuncVarRef = purego.NewCallback(fcb)
290- SaveCallback(FuncVarPtr, FuncVarRef)
291297 }
292298
293299 xAsyncQueueSort(x.GoPointer(), FuncVarRef, UserDataVar)
@@ -307,17 +313,19 @@ var xAsyncQueueSortUnlocked func(uintptr, uintptr, uintptr)
307313 // This function must be called while holding the @queue's lock.
308314 func (x *AsyncQueue) SortUnlocked(FuncVar *CompareDataFunc, UserDataVar uintptr) {
309315
310- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
311316 var FuncVarRef uintptr
312- if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
313- FuncVarRef = cbRefPtr
314- } else {
315- fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int {
316- cbFn := *FuncVar
317- return cbFn(arg0, arg1, arg2)
317+ if FuncVar != nil {
318+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
319+ if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
320+ FuncVarRef = cbRefPtr
321+ } else {
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)
318328 }
319- FuncVarRef = purego.NewCallback(fcb)
320- SaveCallback(FuncVarPtr, FuncVarRef)
321329 }
322330
323331 xAsyncQueueSortUnlocked(x.GoPointer(), FuncVarRef, UserDataVar)
M v4/glib/gcache.go +22 -18
@@ -80,17 +80,19 @@ var xCacheKeyForeach func(uintptr, uintptr, uintptr)
8080 // pairs to its callback function !
8181 func (x *Cache) KeyForeach(FuncVar *HFunc, UserDataVar uintptr) {
8282
83- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
8483 var FuncVarRef uintptr
85- if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
86- FuncVarRef = cbRefPtr
87- } else {
88- fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
89- cbFn := *FuncVar
90- cbFn(arg0, arg1, arg2)
84+ if FuncVar != nil {
85+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
86+ if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
87+ FuncVarRef = cbRefPtr
88+ } else {
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)
9195 }
92- FuncVarRef = purego.NewCallback(fcb)
93- SaveCallback(FuncVarPtr, FuncVarRef)
9496 }
9597
9698 xCacheKeyForeach(x.GoPointer(), FuncVarRef, UserDataVar)
@@ -113,17 +115,19 @@ var xCacheValueForeach func(uintptr, uintptr, uintptr)
113115 // Calls the given function for each of the values in the #GCache.
114116 func (x *Cache) ValueForeach(FuncVar *HFunc, UserDataVar uintptr) {
115117
116- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
117118 var FuncVarRef uintptr
118- if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
119- FuncVarRef = cbRefPtr
120- } else {
121- fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
122- cbFn := *FuncVar
123- cbFn(arg0, arg1, arg2)
119+ if FuncVar != nil {
120+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
121+ if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
122+ FuncVarRef = cbRefPtr
123+ } else {
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)
124130 }
125- FuncVarRef = purego.NewCallback(fcb)
126- SaveCallback(FuncVarPtr, FuncVarRef)
127131 }
128132
129133 xCacheValueForeach(x.GoPointer(), FuncVarRef, UserDataVar)
M v4/glib/gcompletion.go +11 -9
@@ -131,17 +131,19 @@ var xCompletionSetCompare func(uintptr, uintptr)
131131 // comparison function is strncmp().
132132 func (x *Completion) SetCompare(StrncmpFuncVar *CompletionStrncmpFunc) {
133133
134- StrncmpFuncVarPtr := uintptr(unsafe.Pointer(StrncmpFuncVar))
135134 var StrncmpFuncVarRef uintptr
136- if cbRefPtr, ok := GetCallback(StrncmpFuncVarPtr); ok {
137- StrncmpFuncVarRef = cbRefPtr
138- } else {
139- fcb := func(arg0 string, arg1 string, arg2 uint) int {
140- cbFn := *StrncmpFuncVar
141- return cbFn(arg0, arg1, arg2)
135+ if StrncmpFuncVar != nil {
136+ StrncmpFuncVarPtr := uintptr(unsafe.Pointer(StrncmpFuncVar))
137+ if cbRefPtr, ok := GetCallback(StrncmpFuncVarPtr); ok {
138+ StrncmpFuncVarRef = cbRefPtr
139+ } else {
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)
142146 }
143- StrncmpFuncVarRef = purego.NewCallback(fcb)
144- SaveCallback(StrncmpFuncVarPtr, StrncmpFuncVarRef)
145147 }
146148
147149 xCompletionSetCompare(x.GoPointer(), StrncmpFuncVarRef)
M v4/glib/gdataset.go +33 -27
@@ -63,17 +63,19 @@ var xDatalistForeach func(**Data, uintptr, uintptr)
6363 // than skipping over elements that are removed.
6464 func DatalistForeach(DatalistVar **Data, FuncVar *DataForeachFunc, UserDataVar uintptr) {
6565
66- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
6766 var FuncVarRef uintptr
68- if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
69- FuncVarRef = cbRefPtr
70- } else {
71- fcb := func(arg0 Quark, arg1 uintptr, arg2 uintptr) {
72- cbFn := *FuncVar
73- cbFn(arg0, arg1, arg2)
67+ if FuncVar != nil {
68+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
69+ if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
70+ FuncVarRef = cbRefPtr
71+ } else {
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)
7478 }
75- FuncVarRef = purego.NewCallback(fcb)
76- SaveCallback(FuncVarPtr, FuncVarRef)
7779 }
7880
7981 xDatalistForeach(DatalistVar, FuncVarRef, UserDataVar)
@@ -288,17 +290,19 @@ var xDatasetForeach func(uintptr, uintptr, uintptr)
288290 // than skipping over elements that are removed.
289291 func DatasetForeach(DatasetLocationVar uintptr, FuncVar *DataForeachFunc, UserDataVar uintptr) {
290292
291- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
292293 var FuncVarRef uintptr
293- if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
294- FuncVarRef = cbRefPtr
295- } else {
296- fcb := func(arg0 Quark, arg1 uintptr, arg2 uintptr) {
297- cbFn := *FuncVar
298- cbFn(arg0, arg1, arg2)
294+ if FuncVar != nil {
295+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
296+ if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
297+ FuncVarRef = cbRefPtr
298+ } else {
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)
299305 }
300- FuncVarRef = purego.NewCallback(fcb)
301- SaveCallback(FuncVarPtr, FuncVarRef)
302306 }
303307
304308 xDatasetForeach(DatasetLocationVar, FuncVarRef, UserDataVar)
@@ -332,17 +336,19 @@ var xDatasetIdSetDataFull func(uintptr, Quark, uintptr, uintptr)
332336 // is called.
333337 func DatasetIdSetDataFull(DatasetLocationVar uintptr, KeyIdVar Quark, DataVar uintptr, DestroyFuncVar *DestroyNotify) {
334338
335- DestroyFuncVarPtr := uintptr(unsafe.Pointer(DestroyFuncVar))
336339 var DestroyFuncVarRef uintptr
337- if cbRefPtr, ok := GetCallback(DestroyFuncVarPtr); ok {
338- DestroyFuncVarRef = cbRefPtr
339- } else {
340- fcb := func(arg0 uintptr) {
341- cbFn := *DestroyFuncVar
342- cbFn(arg0)
340+ if DestroyFuncVar != nil {
341+ DestroyFuncVarPtr := uintptr(unsafe.Pointer(DestroyFuncVar))
342+ if cbRefPtr, ok := GetCallback(DestroyFuncVarPtr); ok {
343+ DestroyFuncVarRef = cbRefPtr
344+ } else {
345+ fcb := func(arg0 uintptr) {
346+ cbFn := *DestroyFuncVar
347+ cbFn(arg0)
348+ }
349+ DestroyFuncVarRef = purego.NewCallback(fcb)
350+ SaveCallback(DestroyFuncVarPtr, DestroyFuncVarRef)
343351 }
344- DestroyFuncVarRef = purego.NewCallback(fcb)
345- SaveCallback(DestroyFuncVarPtr, DestroyFuncVarRef)
346352 }
347353
348354 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
149149 // g_error_domain_register_static().
150150 func ErrorDomainRegister(ErrorTypeNameVar string, ErrorTypePrivateSizeVar uint, ErrorTypeInitVar *ErrorInitFunc, ErrorTypeCopyVar *ErrorCopyFunc, ErrorTypeClearVar *ErrorClearFunc) Quark {
151151
152- ErrorTypeInitVarPtr := uintptr(unsafe.Pointer(ErrorTypeInitVar))
153152 var ErrorTypeInitVarRef uintptr
154- if cbRefPtr, ok := GetCallback(ErrorTypeInitVarPtr); ok {
155- ErrorTypeInitVarRef = cbRefPtr
156- } else {
157- fcb := func(arg0 *Error) {
158- cbFn := *ErrorTypeInitVar
159- cbFn(arg0)
153+ if ErrorTypeInitVar != nil {
154+ ErrorTypeInitVarPtr := uintptr(unsafe.Pointer(ErrorTypeInitVar))
155+ if cbRefPtr, ok := GetCallback(ErrorTypeInitVarPtr); ok {
156+ ErrorTypeInitVarRef = cbRefPtr
157+ } else {
158+ fcb := func(arg0 *Error) {
159+ cbFn := *ErrorTypeInitVar
160+ cbFn(arg0)
161+ }
162+ ErrorTypeInitVarRef = purego.NewCallback(fcb)
163+ SaveCallback(ErrorTypeInitVarPtr, ErrorTypeInitVarRef)
160164 }
161- ErrorTypeInitVarRef = purego.NewCallback(fcb)
162- SaveCallback(ErrorTypeInitVarPtr, ErrorTypeInitVarRef)
163165 }
164166
165- ErrorTypeCopyVarPtr := uintptr(unsafe.Pointer(ErrorTypeCopyVar))
166167 var ErrorTypeCopyVarRef uintptr
167- if cbRefPtr, ok := GetCallback(ErrorTypeCopyVarPtr); ok {
168- ErrorTypeCopyVarRef = cbRefPtr
169- } else {
170- fcb := func(arg0 *Error, arg1 *Error) {
171- cbFn := *ErrorTypeCopyVar
172- cbFn(arg0, arg1)
168+ if ErrorTypeCopyVar != nil {
169+ ErrorTypeCopyVarPtr := uintptr(unsafe.Pointer(ErrorTypeCopyVar))
170+ if cbRefPtr, ok := GetCallback(ErrorTypeCopyVarPtr); ok {
171+ ErrorTypeCopyVarRef = cbRefPtr
172+ } else {
173+ fcb := func(arg0 *Error, arg1 *Error) {
174+ cbFn := *ErrorTypeCopyVar
175+ cbFn(arg0, arg1)
176+ }
177+ ErrorTypeCopyVarRef = purego.NewCallback(fcb)
178+ SaveCallback(ErrorTypeCopyVarPtr, ErrorTypeCopyVarRef)
173179 }
174- ErrorTypeCopyVarRef = purego.NewCallback(fcb)
175- SaveCallback(ErrorTypeCopyVarPtr, ErrorTypeCopyVarRef)
176180 }
177181
178- ErrorTypeClearVarPtr := uintptr(unsafe.Pointer(ErrorTypeClearVar))
179182 var ErrorTypeClearVarRef uintptr
180- if cbRefPtr, ok := GetCallback(ErrorTypeClearVarPtr); ok {
181- ErrorTypeClearVarRef = cbRefPtr
182- } else {
183- fcb := func(arg0 *Error) {
184- cbFn := *ErrorTypeClearVar
185- cbFn(arg0)
183+ if ErrorTypeClearVar != nil {
184+ ErrorTypeClearVarPtr := uintptr(unsafe.Pointer(ErrorTypeClearVar))
185+ if cbRefPtr, ok := GetCallback(ErrorTypeClearVarPtr); ok {
186+ ErrorTypeClearVarRef = cbRefPtr
187+ } else {
188+ fcb := func(arg0 *Error) {
189+ cbFn := *ErrorTypeClearVar
190+ cbFn(arg0)
191+ }
192+ ErrorTypeClearVarRef = purego.NewCallback(fcb)
193+ SaveCallback(ErrorTypeClearVarPtr, ErrorTypeClearVarRef)
186194 }
187- ErrorTypeClearVarRef = purego.NewCallback(fcb)
188- SaveCallback(ErrorTypeClearVarPtr, ErrorTypeClearVarRef)
189195 }
190196
191197 cret := xErrorDomainRegister(ErrorTypeNameVar, ErrorTypePrivateSizeVar, ErrorTypeInitVarRef, ErrorTypeCopyVarRef, ErrorTypeClearVarRef)
@@ -213,43 +219,49 @@ var xErrorDomainRegisterStatic func(string, uint, uintptr, uintptr, uintptr) Qua
213219 // already takes care of passing valid information to this function.
214220 func ErrorDomainRegisterStatic(ErrorTypeNameVar string, ErrorTypePrivateSizeVar uint, ErrorTypeInitVar *ErrorInitFunc, ErrorTypeCopyVar *ErrorCopyFunc, ErrorTypeClearVar *ErrorClearFunc) Quark {
215221
216- ErrorTypeInitVarPtr := uintptr(unsafe.Pointer(ErrorTypeInitVar))
217222 var ErrorTypeInitVarRef uintptr
218- if cbRefPtr, ok := GetCallback(ErrorTypeInitVarPtr); ok {
219- ErrorTypeInitVarRef = cbRefPtr
220- } else {
221- fcb := func(arg0 *Error) {
222- cbFn := *ErrorTypeInitVar
223- cbFn(arg0)
223+ if ErrorTypeInitVar != nil {
224+ ErrorTypeInitVarPtr := uintptr(unsafe.Pointer(ErrorTypeInitVar))
225+ if cbRefPtr, ok := GetCallback(ErrorTypeInitVarPtr); ok {
226+ ErrorTypeInitVarRef = cbRefPtr
227+ } else {
228+ fcb := func(arg0 *Error) {
229+ cbFn := *ErrorTypeInitVar
230+ cbFn(arg0)
231+ }
232+ ErrorTypeInitVarRef = purego.NewCallback(fcb)
233+ SaveCallback(ErrorTypeInitVarPtr, ErrorTypeInitVarRef)
224234 }
225- ErrorTypeInitVarRef = purego.NewCallback(fcb)
226- SaveCallback(ErrorTypeInitVarPtr, ErrorTypeInitVarRef)
227235 }
228236
229- ErrorTypeCopyVarPtr := uintptr(unsafe.Pointer(ErrorTypeCopyVar))
230237 var ErrorTypeCopyVarRef uintptr
231- if cbRefPtr, ok := GetCallback(ErrorTypeCopyVarPtr); ok {
232- ErrorTypeCopyVarRef = cbRefPtr
233- } else {
234- fcb := func(arg0 *Error, arg1 *Error) {
235- cbFn := *ErrorTypeCopyVar
236- cbFn(arg0, arg1)
238+ if ErrorTypeCopyVar != nil {
239+ ErrorTypeCopyVarPtr := uintptr(unsafe.Pointer(ErrorTypeCopyVar))
240+ if cbRefPtr, ok := GetCallback(ErrorTypeCopyVarPtr); ok {
241+ ErrorTypeCopyVarRef = cbRefPtr
242+ } else {
243+ fcb := func(arg0 *Error, arg1 *Error) {
244+ cbFn := *ErrorTypeCopyVar
245+ cbFn(arg0, arg1)
246+ }
247+ ErrorTypeCopyVarRef = purego.NewCallback(fcb)
248+ SaveCallback(ErrorTypeCopyVarPtr, ErrorTypeCopyVarRef)
237249 }
238- ErrorTypeCopyVarRef = purego.NewCallback(fcb)
239- SaveCallback(ErrorTypeCopyVarPtr, ErrorTypeCopyVarRef)
240250 }
241251
242- ErrorTypeClearVarPtr := uintptr(unsafe.Pointer(ErrorTypeClearVar))
243252 var ErrorTypeClearVarRef uintptr
244- if cbRefPtr, ok := GetCallback(ErrorTypeClearVarPtr); ok {
245- ErrorTypeClearVarRef = cbRefPtr
246- } else {
247- fcb := func(arg0 *Error) {
248- cbFn := *ErrorTypeClearVar
249- cbFn(arg0)
253+ if ErrorTypeClearVar != nil {
254+ ErrorTypeClearVarPtr := uintptr(unsafe.Pointer(ErrorTypeClearVar))
255+ if cbRefPtr, ok := GetCallback(ErrorTypeClearVarPtr); ok {
256+ ErrorTypeClearVarRef = cbRefPtr
257+ } else {
258+ fcb := func(arg0 *Error) {
259+ cbFn := *ErrorTypeClearVar
260+ cbFn(arg0)
261+ }
262+ ErrorTypeClearVarRef = purego.NewCallback(fcb)
263+ SaveCallback(ErrorTypeClearVarPtr, ErrorTypeClearVarRef)
250264 }
251- ErrorTypeClearVarRef = purego.NewCallback(fcb)
252- SaveCallback(ErrorTypeClearVarPtr, ErrorTypeClearVarRef)
253265 }
254266
255267 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
286286 // values in a hash table ends up needing O(n*n) operations).
287287 func HashTableFind(HashTableVar *HashTable, PredicateVar *HRFunc, UserDataVar uintptr) uintptr {
288288
289- PredicateVarPtr := uintptr(unsafe.Pointer(PredicateVar))
290289 var PredicateVarRef uintptr
291- if cbRefPtr, ok := GetCallback(PredicateVarPtr); ok {
292- PredicateVarRef = cbRefPtr
293- } else {
294- fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) bool {
295- cbFn := *PredicateVar
296- return cbFn(arg0, arg1, arg2)
290+ if PredicateVar != nil {
291+ PredicateVarPtr := uintptr(unsafe.Pointer(PredicateVar))
292+ if cbRefPtr, ok := GetCallback(PredicateVarPtr); ok {
293+ PredicateVarRef = cbRefPtr
294+ } else {
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)
297301 }
298- PredicateVarRef = purego.NewCallback(fcb)
299- SaveCallback(PredicateVarPtr, PredicateVarRef)
300302 }
301303
302304 cret := xHashTableFind(HashTableVar, PredicateVarRef, UserDataVar)
@@ -319,17 +321,19 @@ var xHashTableForeach func(*HashTable, uintptr, uintptr)
319321 // order searches in contrast to g_hash_table_lookup().
320322 func HashTableForeach(HashTableVar *HashTable, FuncVar *HFunc, UserDataVar uintptr) {
321323
322- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
323324 var FuncVarRef uintptr
324- if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
325- FuncVarRef = cbRefPtr
326- } else {
327- fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
328- cbFn := *FuncVar
329- cbFn(arg0, arg1, arg2)
325+ if FuncVar != nil {
326+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
327+ if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
328+ FuncVarRef = cbRefPtr
329+ } else {
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)
330336 }
331- FuncVarRef = purego.NewCallback(fcb)
332- SaveCallback(FuncVarPtr, FuncVarRef)
333337 }
334338
335339 xHashTableForeach(HashTableVar, FuncVarRef, UserDataVar)
@@ -348,17 +352,19 @@ var xHashTableForeachRemove func(*HashTable, uintptr, uintptr) uint
348352 // key/value pairs in the hash table.
349353 func HashTableForeachRemove(HashTableVar *HashTable, FuncVar *HRFunc, UserDataVar uintptr) uint {
350354
351- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
352355 var FuncVarRef uintptr
353- if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
354- FuncVarRef = cbRefPtr
355- } else {
356- fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) bool {
357- cbFn := *FuncVar
358- return cbFn(arg0, arg1, arg2)
356+ if FuncVar != nil {
357+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
358+ if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
359+ FuncVarRef = cbRefPtr
360+ } else {
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)
359367 }
360- FuncVarRef = purego.NewCallback(fcb)
361- SaveCallback(FuncVarPtr, FuncVarRef)
362368 }
363369
364370 cret := xHashTableForeachRemove(HashTableVar, FuncVarRef, UserDataVar)
@@ -376,17 +382,19 @@ var xHashTableForeachSteal func(*HashTable, uintptr, uintptr) uint
376382 // key/value pairs in the hash table.
377383 func HashTableForeachSteal(HashTableVar *HashTable, FuncVar *HRFunc, UserDataVar uintptr) uint {
378384
379- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
380385 var FuncVarRef uintptr
381- if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
382- FuncVarRef = cbRefPtr
383- } else {
384- fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) bool {
385- cbFn := *FuncVar
386- return cbFn(arg0, arg1, arg2)
386+ if FuncVar != nil {
387+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
388+ if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
389+ FuncVarRef = cbRefPtr
390+ } else {
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)
387397 }
388- FuncVarRef = purego.NewCallback(fcb)
389- SaveCallback(FuncVarPtr, FuncVarRef)
390398 }
391399
392400 cret := xHashTableForeachSteal(HashTableVar, FuncVarRef, UserDataVar)
M v4/glib/ghook.go +33 -27
@@ -135,17 +135,19 @@ var xHookListMarshal func(uintptr, bool, uintptr, uintptr)
135135 // Calls a function on each valid #GHook.
136136 func (x *HookList) Marshal(MayRecurseVar bool, MarshallerVar *HookMarshaller, MarshalDataVar uintptr) {
137137
138- MarshallerVarPtr := uintptr(unsafe.Pointer(MarshallerVar))
139138 var MarshallerVarRef uintptr
140- if cbRefPtr, ok := GetCallback(MarshallerVarPtr); ok {
141- MarshallerVarRef = cbRefPtr
142- } else {
143- fcb := func(arg0 *Hook, arg1 uintptr) {
144- cbFn := *MarshallerVar
145- cbFn(arg0, arg1)
139+ if MarshallerVar != nil {
140+ MarshallerVarPtr := uintptr(unsafe.Pointer(MarshallerVar))
141+ if cbRefPtr, ok := GetCallback(MarshallerVarPtr); ok {
142+ MarshallerVarRef = cbRefPtr
143+ } else {
144+ fcb := func(arg0 *Hook, arg1 uintptr) {
145+ cbFn := *MarshallerVar
146+ cbFn(arg0, arg1)
147+ }
148+ MarshallerVarRef = purego.NewCallback(fcb)
149+ SaveCallback(MarshallerVarPtr, MarshallerVarRef)
146150 }
147- MarshallerVarRef = purego.NewCallback(fcb)
148- SaveCallback(MarshallerVarPtr, MarshallerVarRef)
149151 }
150152
151153 xHookListMarshal(x.GoPointer(), MayRecurseVar, MarshallerVarRef, MarshalDataVar)
@@ -158,17 +160,19 @@ var xHookListMarshalCheck func(uintptr, bool, uintptr, uintptr)
158160 // function returns %FALSE.
159161 func (x *HookList) MarshalCheck(MayRecurseVar bool, MarshallerVar *HookCheckMarshaller, MarshalDataVar uintptr) {
160162
161- MarshallerVarPtr := uintptr(unsafe.Pointer(MarshallerVar))
162163 var MarshallerVarRef uintptr
163- if cbRefPtr, ok := GetCallback(MarshallerVarPtr); ok {
164- MarshallerVarRef = cbRefPtr
165- } else {
166- fcb := func(arg0 *Hook, arg1 uintptr) bool {
167- cbFn := *MarshallerVar
168- return cbFn(arg0, arg1)
164+ if MarshallerVar != nil {
165+ MarshallerVarPtr := uintptr(unsafe.Pointer(MarshallerVar))
166+ if cbRefPtr, ok := GetCallback(MarshallerVarPtr); ok {
167+ MarshallerVarRef = cbRefPtr
168+ } else {
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)
169175 }
170- MarshallerVarRef = purego.NewCallback(fcb)
171- SaveCallback(MarshallerVarPtr, MarshallerVarRef)
172176 }
173177
174178 xHookListMarshalCheck(x.GoPointer(), MayRecurseVar, MarshallerVarRef, MarshalDataVar)
@@ -240,17 +244,19 @@ var xHookInsertSorted func(*HookList, *Hook, uintptr)
240244 // Inserts a #GHook into a #GHookList, sorted by the given function.
241245 func HookInsertSorted(HookListVar *HookList, HookVar *Hook, FuncVar *HookCompareFunc) {
242246
243- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
244247 var FuncVarRef uintptr
245- if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
246- FuncVarRef = cbRefPtr
247- } else {
248- fcb := func(arg0 *Hook, arg1 *Hook) int {
249- cbFn := *FuncVar
250- return cbFn(arg0, arg1)
248+ if FuncVar != nil {
249+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
250+ if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
251+ FuncVarRef = cbRefPtr
252+ } else {
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)
251259 }
252- FuncVarRef = purego.NewCallback(fcb)
253- SaveCallback(FuncVarPtr, FuncVarRef)
254260 }
255261
256262 xHookInsertSorted(HookListVar, HookVar, FuncVarRef)
M v4/glib/giochannel.go +33 -27
@@ -1018,17 +1018,19 @@ var xIoAddWatch func(*IOChannel, IOCondition, uintptr, uintptr) uint
10181018 // with the default priority.
10191019 func IoAddWatch(ChannelVar *IOChannel, ConditionVar IOCondition, FuncVar *IOFunc, UserDataVar uintptr) uint {
10201020
1021- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
10221021 var FuncVarRef uintptr
1023- if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
1024- FuncVarRef = cbRefPtr
1025- } else {
1026- fcb := func(arg0 *IOChannel, arg1 IOCondition, arg2 uintptr) bool {
1027- cbFn := *FuncVar
1028- return cbFn(arg0, arg1, arg2)
1022+ if FuncVar != nil {
1023+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
1024+ if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
1025+ FuncVarRef = cbRefPtr
1026+ } else {
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)
10291033 }
1030- FuncVarRef = purego.NewCallback(fcb)
1031- SaveCallback(FuncVarPtr, FuncVarRef)
10321034 }
10331035
10341036 cret := xIoAddWatch(ChannelVar, ConditionVar, FuncVarRef, UserDataVar)
@@ -1045,30 +1047,34 @@ var xIoAddWatchFull func(*IOChannel, int, IOCondition, uintptr, uintptr, uintptr
10451047 // You can do these steps manually if you need greater control.
10461048 func IoAddWatchFull(ChannelVar *IOChannel, PriorityVar int, ConditionVar IOCondition, FuncVar *IOFunc, UserDataVar uintptr, NotifyVar *DestroyNotify) uint {
10471049
1048- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
10491050 var FuncVarRef uintptr
1050- if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
1051- FuncVarRef = cbRefPtr
1052- } else {
1053- fcb := func(arg0 *IOChannel, arg1 IOCondition, arg2 uintptr) bool {
1054- cbFn := *FuncVar
1055- return cbFn(arg0, arg1, arg2)
1051+ if FuncVar != nil {
1052+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
1053+ if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
1054+ FuncVarRef = cbRefPtr
1055+ } else {
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)
10561062 }
1057- FuncVarRef = purego.NewCallback(fcb)
1058- SaveCallback(FuncVarPtr, FuncVarRef)
10591063 }
10601064
1061- NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
10621065 var NotifyVarRef uintptr
1063- if cbRefPtr, ok := GetCallback(NotifyVarPtr); ok {
1064- NotifyVarRef = cbRefPtr
1065- } else {
1066- fcb := func(arg0 uintptr) {
1067- cbFn := *NotifyVar
1068- cbFn(arg0)
1066+ if NotifyVar != nil {
1067+ NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
1068+ if cbRefPtr, ok := GetCallback(NotifyVarPtr); ok {
1069+ NotifyVarRef = cbRefPtr
1070+ } else {
1071+ fcb := func(arg0 uintptr) {
1072+ cbFn := *NotifyVar
1073+ cbFn(arg0)
1074+ }
1075+ NotifyVarRef = purego.NewCallback(fcb)
1076+ SaveCallback(NotifyVarPtr, NotifyVarRef)
10691077 }
1070- NotifyVarRef = purego.NewCallback(fcb)
1071- SaveCallback(NotifyVarPtr, NotifyVarRef)
10721078 }
10731079
10741080 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
9999 // The source will never close the fd -- you must do it yourself.
100100 func UnixFdAdd(FdVar int, ConditionVar IOCondition, FunctionVar *UnixFDSourceFunc, UserDataVar uintptr) uint {
101101
102- FunctionVarPtr := uintptr(unsafe.Pointer(FunctionVar))
103102 var FunctionVarRef uintptr
104- if cbRefPtr, ok := GetCallback(FunctionVarPtr); ok {
105- FunctionVarRef = cbRefPtr
106- } else {
107- fcb := func(arg0 int, arg1 IOCondition, arg2 uintptr) bool {
108- cbFn := *FunctionVar
109- return cbFn(arg0, arg1, arg2)
103+ if FunctionVar != nil {
104+ FunctionVarPtr := uintptr(unsafe.Pointer(FunctionVar))
105+ if cbRefPtr, ok := GetCallback(FunctionVarPtr); ok {
106+ FunctionVarRef = cbRefPtr
107+ } else {
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)
110114 }
111- FunctionVarRef = purego.NewCallback(fcb)
112- SaveCallback(FunctionVarPtr, FunctionVarRef)
113115 }
114116
115117 cret := xUnixFdAdd(FdVar, ConditionVar, FunctionVarRef, UserDataVar)
@@ -126,30 +128,34 @@ var xUnixFdAddFull func(int, int, IOCondition, uintptr, uintptr, uintptr) uint
126128 // @user_data.
127129 func UnixFdAddFull(PriorityVar int, FdVar int, ConditionVar IOCondition, FunctionVar *UnixFDSourceFunc, UserDataVar uintptr, NotifyVar *DestroyNotify) uint {
128130
129- FunctionVarPtr := uintptr(unsafe.Pointer(FunctionVar))
130131 var FunctionVarRef uintptr
131- if cbRefPtr, ok := GetCallback(FunctionVarPtr); ok {
132- FunctionVarRef = cbRefPtr
133- } else {
134- fcb := func(arg0 int, arg1 IOCondition, arg2 uintptr) bool {
135- cbFn := *FunctionVar
136- return cbFn(arg0, arg1, arg2)
132+ if FunctionVar != nil {
133+ FunctionVarPtr := uintptr(unsafe.Pointer(FunctionVar))
134+ if cbRefPtr, ok := GetCallback(FunctionVarPtr); ok {
135+ FunctionVarRef = cbRefPtr
136+ } else {
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)
137143 }
138- FunctionVarRef = purego.NewCallback(fcb)
139- SaveCallback(FunctionVarPtr, FunctionVarRef)
140144 }
141145
142- NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
143146 var NotifyVarRef uintptr
144- if cbRefPtr, ok := GetCallback(NotifyVarPtr); ok {
145- NotifyVarRef = cbRefPtr
146- } else {
147- fcb := func(arg0 uintptr) {
148- cbFn := *NotifyVar
149- cbFn(arg0)
147+ if NotifyVar != nil {
148+ NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
149+ if cbRefPtr, ok := GetCallback(NotifyVarPtr); ok {
150+ NotifyVarRef = cbRefPtr
151+ } else {
152+ fcb := func(arg0 uintptr) {
153+ cbFn := *NotifyVar
154+ cbFn(arg0)
155+ }
156+ NotifyVarRef = purego.NewCallback(fcb)
157+ SaveCallback(NotifyVarPtr, NotifyVarRef)
150158 }
151- NotifyVarRef = purego.NewCallback(fcb)
152- SaveCallback(NotifyVarPtr, NotifyVarRef)
153159 }
154160
155161 cret := xUnixFdAddFull(PriorityVar, FdVar, ConditionVar, FunctionVarRef, UserDataVar, NotifyVarRef)
@@ -250,17 +256,19 @@ var xUnixSignalAdd func(int, uintptr, uintptr) uint
250256 // using g_source_remove().
251257 func UnixSignalAdd(SignumVar int, HandlerVar *SourceFunc, UserDataVar uintptr) uint {
252258
253- HandlerVarPtr := uintptr(unsafe.Pointer(HandlerVar))
254259 var HandlerVarRef uintptr
255- if cbRefPtr, ok := GetCallback(HandlerVarPtr); ok {
256- HandlerVarRef = cbRefPtr
257- } else {
258- fcb := func(arg0 uintptr) bool {
259- cbFn := *HandlerVar
260- return cbFn(arg0)
260+ if HandlerVar != nil {
261+ HandlerVarPtr := uintptr(unsafe.Pointer(HandlerVar))
262+ if cbRefPtr, ok := GetCallback(HandlerVarPtr); ok {
263+ HandlerVarRef = cbRefPtr
264+ } else {
265+ fcb := func(arg0 uintptr) bool {
266+ cbFn := *HandlerVar
267+ return cbFn(arg0)
268+ }
269+ HandlerVarRef = purego.NewCallback(fcb)
270+ SaveCallback(HandlerVarPtr, HandlerVarRef)
261271 }
262- HandlerVarRef = purego.NewCallback(fcb)
263- SaveCallback(HandlerVarPtr, HandlerVarRef)
264272 }
265273
266274 cret := xUnixSignalAdd(SignumVar, HandlerVarRef, UserDataVar)
@@ -274,30 +282,34 @@ var xUnixSignalAddFull func(int, int, uintptr, uintptr, uintptr) uint
274282 // using g_source_remove().
275283 func UnixSignalAddFull(PriorityVar int, SignumVar int, HandlerVar *SourceFunc, UserDataVar uintptr, NotifyVar *DestroyNotify) uint {
276284
277- HandlerVarPtr := uintptr(unsafe.Pointer(HandlerVar))
278285 var HandlerVarRef uintptr
279- if cbRefPtr, ok := GetCallback(HandlerVarPtr); ok {
280- HandlerVarRef = cbRefPtr
281- } else {
282- fcb := func(arg0 uintptr) bool {
283- cbFn := *HandlerVar
284- return cbFn(arg0)
286+ if HandlerVar != nil {
287+ HandlerVarPtr := uintptr(unsafe.Pointer(HandlerVar))
288+ if cbRefPtr, ok := GetCallback(HandlerVarPtr); ok {
289+ HandlerVarRef = cbRefPtr
290+ } else {
291+ fcb := func(arg0 uintptr) bool {
292+ cbFn := *HandlerVar
293+ return cbFn(arg0)
294+ }
295+ HandlerVarRef = purego.NewCallback(fcb)
296+ SaveCallback(HandlerVarPtr, HandlerVarRef)
285297 }
286- HandlerVarRef = purego.NewCallback(fcb)
287- SaveCallback(HandlerVarPtr, HandlerVarRef)
288298 }
289299
290- NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
291300 var NotifyVarRef uintptr
292- if cbRefPtr, ok := GetCallback(NotifyVarPtr); ok {
293- NotifyVarRef = cbRefPtr
294- } else {
295- fcb := func(arg0 uintptr) {
296- cbFn := *NotifyVar
297- cbFn(arg0)
301+ if NotifyVar != nil {
302+ NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
303+ if cbRefPtr, ok := GetCallback(NotifyVarPtr); ok {
304+ NotifyVarRef = cbRefPtr
305+ } else {
306+ fcb := func(arg0 uintptr) {
307+ cbFn := *NotifyVar
308+ cbFn(arg0)
309+ }
310+ NotifyVarRef = purego.NewCallback(fcb)
311+ SaveCallback(NotifyVarPtr, NotifyVarRef)
298312 }
299- NotifyVarRef = purego.NewCallback(fcb)
300- SaveCallback(NotifyVarPtr, NotifyVarRef)
301313 }
302314
303315 cret := xUnixSignalAddFull(PriorityVar, SignumVar, HandlerVarRef, UserDataVar, NotifyVarRef)
M v4/glib/gmain.go +187 -153
@@ -279,17 +279,19 @@ var xMainContextInvoke func(uintptr, uintptr, uintptr)
279279 // will be continuously run in a loop (and may prevent this call from returning).
280280 func (x *MainContext) Invoke(FunctionVar *SourceFunc, DataVar uintptr) {
281281
282- FunctionVarPtr := uintptr(unsafe.Pointer(FunctionVar))
283282 var FunctionVarRef uintptr
284- if cbRefPtr, ok := GetCallback(FunctionVarPtr); ok {
285- FunctionVarRef = cbRefPtr
286- } else {
287- fcb := func(arg0 uintptr) bool {
288- cbFn := *FunctionVar
289- return cbFn(arg0)
283+ if FunctionVar != nil {
284+ FunctionVarPtr := uintptr(unsafe.Pointer(FunctionVar))
285+ if cbRefPtr, ok := GetCallback(FunctionVarPtr); ok {
286+ FunctionVarRef = cbRefPtr
287+ } else {
288+ fcb := func(arg0 uintptr) bool {
289+ cbFn := *FunctionVar
290+ return cbFn(arg0)
291+ }
292+ FunctionVarRef = purego.NewCallback(fcb)
293+ SaveCallback(FunctionVarPtr, FunctionVarRef)
290294 }
291- FunctionVarRef = purego.NewCallback(fcb)
292- SaveCallback(FunctionVarPtr, FunctionVarRef)
293295 }
294296
295297 xMainContextInvoke(x.GoPointer(), FunctionVarRef, DataVar)
@@ -310,17 +312,19 @@ var xMainContextInvokeFull func(uintptr, int, uintptr, uintptr, uintptr)
310312 // thread or with any particular context acquired.
311313 func (x *MainContext) InvokeFull(PriorityVar int, FunctionVar *SourceFunc, DataVar uintptr, NotifyVar *DestroyNotify) {
312314
313- FunctionVarPtr := uintptr(unsafe.Pointer(FunctionVar))
314315 var FunctionVarRef uintptr
315- if cbRefPtr, ok := GetCallback(FunctionVarPtr); ok {
316- FunctionVarRef = cbRefPtr
317- } else {
318- fcb := func(arg0 uintptr) bool {
319- cbFn := *FunctionVar
320- return cbFn(arg0)
316+ if FunctionVar != nil {
317+ FunctionVarPtr := uintptr(unsafe.Pointer(FunctionVar))
318+ if cbRefPtr, ok := GetCallback(FunctionVarPtr); ok {
319+ FunctionVarRef = cbRefPtr
320+ } else {
321+ fcb := func(arg0 uintptr) bool {
322+ cbFn := *FunctionVar
323+ return cbFn(arg0)
324+ }
325+ FunctionVarRef = purego.NewCallback(fcb)
326+ SaveCallback(FunctionVarPtr, FunctionVarRef)
321327 }
322- FunctionVarRef = purego.NewCallback(fcb)
323- SaveCallback(FunctionVarPtr, FunctionVarRef)
324328 }
325329
326330 var NotifyVarRef uintptr
@@ -571,17 +575,19 @@ var xMainContextSetPollFunc func(uintptr, uintptr)
571575 // loop with an external event loop.
572576 func (x *MainContext) SetPollFunc(FuncVar *PollFunc) {
573577
574- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
575578 var FuncVarRef uintptr
576- if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
577- FuncVarRef = cbRefPtr
578- } else {
579- fcb := func(arg0 *PollFD, arg1 uint, arg2 int) int {
580- cbFn := *FuncVar
581- return cbFn(arg0, arg1, arg2)
579+ if FuncVar != nil {
580+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
581+ if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
582+ FuncVarRef = cbRefPtr
583+ } else {
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)
582590 }
583- FuncVarRef = purego.NewCallback(fcb)
584- SaveCallback(FuncVarPtr, FuncVarRef)
585591 }
586592
587593 xMainContextSetPollFunc(x.GoPointer(), FuncVarRef)
@@ -1250,17 +1256,19 @@ var xSourceSetCallback func(uintptr, uintptr, uintptr, uintptr)
12501256 // of also unsetting the callback.
12511257 func (x *Source) SetCallback(FuncVar *SourceFunc, DataVar uintptr, NotifyVar *DestroyNotify) {
12521258
1253- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
12541259 var FuncVarRef uintptr
1255- if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
1256- FuncVarRef = cbRefPtr
1257- } else {
1258- fcb := func(arg0 uintptr) bool {
1259- cbFn := *FuncVar
1260- return cbFn(arg0)
1260+ if FuncVar != nil {
1261+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
1262+ if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
1263+ FuncVarRef = cbRefPtr
1264+ } else {
1265+ fcb := func(arg0 uintptr) bool {
1266+ cbFn := *FuncVar
1267+ return cbFn(arg0)
1268+ }
1269+ FuncVarRef = purego.NewCallback(fcb)
1270+ SaveCallback(FuncVarPtr, FuncVarRef)
12611271 }
1262- FuncVarRef = purego.NewCallback(fcb)
1263- SaveCallback(FuncVarPtr, FuncVarRef)
12641272 }
12651273
12661274 var NotifyVarRef uintptr
@@ -1339,17 +1347,19 @@ var xSourceSetDisposeFunction func(uintptr, uintptr)
13391347 // This should only ever be called from [struct@GLib.Source] implementations.
13401348 func (x *Source) SetDisposeFunction(DisposeVar *SourceDisposeFunc) {
13411349
1342- DisposeVarPtr := uintptr(unsafe.Pointer(DisposeVar))
13431350 var DisposeVarRef uintptr
1344- if cbRefPtr, ok := GetCallback(DisposeVarPtr); ok {
1345- DisposeVarRef = cbRefPtr
1346- } else {
1347- fcb := func(arg0 *Source) {
1348- cbFn := *DisposeVar
1349- cbFn(arg0)
1351+ if DisposeVar != nil {
1352+ DisposeVarPtr := uintptr(unsafe.Pointer(DisposeVar))
1353+ if cbRefPtr, ok := GetCallback(DisposeVarPtr); ok {
1354+ DisposeVarRef = cbRefPtr
1355+ } else {
1356+ fcb := func(arg0 *Source) {
1357+ cbFn := *DisposeVar
1358+ cbFn(arg0)
1359+ }
1360+ DisposeVarRef = purego.NewCallback(fcb)
1361+ SaveCallback(DisposeVarPtr, DisposeVarRef)
13501362 }
1351- DisposeVarRef = purego.NewCallback(fcb)
1352- SaveCallback(DisposeVarPtr, DisposeVarRef)
13531363 }
13541364
13551365 xSourceSetDisposeFunction(x.GoPointer(), DisposeVarRef)
@@ -1690,17 +1700,19 @@ var xChildWatchAdd func(Pid, uintptr, uintptr) uint
16901700 // need greater control.
16911701 func ChildWatchAdd(PidVar Pid, FunctionVar *ChildWatchFunc, DataVar uintptr) uint {
16921702
1693- FunctionVarPtr := uintptr(unsafe.Pointer(FunctionVar))
16941703 var FunctionVarRef uintptr
1695- if cbRefPtr, ok := GetCallback(FunctionVarPtr); ok {
1696- FunctionVarRef = cbRefPtr
1697- } else {
1698- fcb := func(arg0 Pid, arg1 int, arg2 uintptr) {
1699- cbFn := *FunctionVar
1700- cbFn(arg0, arg1, arg2)
1704+ if FunctionVar != nil {
1705+ FunctionVarPtr := uintptr(unsafe.Pointer(FunctionVar))
1706+ if cbRefPtr, ok := GetCallback(FunctionVarPtr); ok {
1707+ FunctionVarRef = cbRefPtr
1708+ } else {
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)
17011715 }
1702- FunctionVarRef = purego.NewCallback(fcb)
1703- SaveCallback(FunctionVarPtr, FunctionVarRef)
17041716 }
17051717
17061718 cret := xChildWatchAdd(PidVar, FunctionVarRef, DataVar)
@@ -1736,17 +1748,19 @@ var xChildWatchAddFull func(int, Pid, uintptr, uintptr, uintptr) uint
17361748 // need greater control.
17371749 func ChildWatchAddFull(PriorityVar int, PidVar Pid, FunctionVar *ChildWatchFunc, DataVar uintptr, NotifyVar *DestroyNotify) uint {
17381750
1739- FunctionVarPtr := uintptr(unsafe.Pointer(FunctionVar))
17401751 var FunctionVarRef uintptr
1741- if cbRefPtr, ok := GetCallback(FunctionVarPtr); ok {
1742- FunctionVarRef = cbRefPtr
1743- } else {
1744- fcb := func(arg0 Pid, arg1 int, arg2 uintptr) {
1745- cbFn := *FunctionVar
1746- cbFn(arg0, arg1, arg2)
1752+ if FunctionVar != nil {
1753+ FunctionVarPtr := uintptr(unsafe.Pointer(FunctionVar))
1754+ if cbRefPtr, ok := GetCallback(FunctionVarPtr); ok {
1755+ FunctionVarRef = cbRefPtr
1756+ } else {
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)
17471763 }
1748- FunctionVarRef = purego.NewCallback(fcb)
1749- SaveCallback(FunctionVarPtr, FunctionVarRef)
17501764 }
17511765
17521766 var NotifyVarRef uintptr
@@ -1830,17 +1844,19 @@ var xClearHandleId func(uint, uintptr)
18301844 // pointer casts.
18311845 func ClearHandleId(TagPtrVar uint, ClearFuncVar *ClearHandleFunc) {
18321846
1833- ClearFuncVarPtr := uintptr(unsafe.Pointer(ClearFuncVar))
18341847 var ClearFuncVarRef uintptr
1835- if cbRefPtr, ok := GetCallback(ClearFuncVarPtr); ok {
1836- ClearFuncVarRef = cbRefPtr
1837- } else {
1838- fcb := func(arg0 uint) {
1839- cbFn := *ClearFuncVar
1840- cbFn(arg0)
1848+ if ClearFuncVar != nil {
1849+ ClearFuncVarPtr := uintptr(unsafe.Pointer(ClearFuncVar))
1850+ if cbRefPtr, ok := GetCallback(ClearFuncVarPtr); ok {
1851+ ClearFuncVarRef = cbRefPtr
1852+ } else {
1853+ fcb := func(arg0 uint) {
1854+ cbFn := *ClearFuncVar
1855+ cbFn(arg0)
1856+ }
1857+ ClearFuncVarRef = purego.NewCallback(fcb)
1858+ SaveCallback(ClearFuncVarPtr, ClearFuncVarRef)
18411859 }
1842- ClearFuncVarRef = purego.NewCallback(fcb)
1843- SaveCallback(ClearFuncVarPtr, ClearFuncVarRef)
18441860 }
18451861
18461862 xClearHandleId(TagPtrVar, ClearFuncVarRef)
@@ -1916,17 +1932,19 @@ var xIdleAdd func(uintptr, uintptr) uint
19161932 // need greater control or to use a custom main context.
19171933 func IdleAdd(FunctionVar *SourceFunc, DataVar uintptr) uint {
19181934
1919- FunctionVarPtr := uintptr(unsafe.Pointer(FunctionVar))
19201935 var FunctionVarRef uintptr
1921- if cbRefPtr, ok := GetCallback(FunctionVarPtr); ok {
1922- FunctionVarRef = cbRefPtr
1923- } else {
1924- fcb := func(arg0 uintptr) bool {
1925- cbFn := *FunctionVar
1926- return cbFn(arg0)
1936+ if FunctionVar != nil {
1937+ FunctionVarPtr := uintptr(unsafe.Pointer(FunctionVar))
1938+ if cbRefPtr, ok := GetCallback(FunctionVarPtr); ok {
1939+ FunctionVarRef = cbRefPtr
1940+ } else {
1941+ fcb := func(arg0 uintptr) bool {
1942+ cbFn := *FunctionVar
1943+ return cbFn(arg0)
1944+ }
1945+ FunctionVarRef = purego.NewCallback(fcb)
1946+ SaveCallback(FunctionVarPtr, FunctionVarRef)
19271947 }
1928- FunctionVarRef = purego.NewCallback(fcb)
1929- SaveCallback(FunctionVarPtr, FunctionVarRef)
19301948 }
19311949
19321950 cret := xIdleAdd(FunctionVarRef, DataVar)
@@ -1951,17 +1969,19 @@ var xIdleAddFull func(int, uintptr, uintptr, uintptr) uint
19511969 // need greater control or to use a custom main context.
19521970 func IdleAddFull(PriorityVar int, FunctionVar *SourceFunc, DataVar uintptr, NotifyVar *DestroyNotify) uint {
19531971
1954- FunctionVarPtr := uintptr(unsafe.Pointer(FunctionVar))
19551972 var FunctionVarRef uintptr
1956- if cbRefPtr, ok := GetCallback(FunctionVarPtr); ok {
1957- FunctionVarRef = cbRefPtr
1958- } else {
1959- fcb := func(arg0 uintptr) bool {
1960- cbFn := *FunctionVar
1961- return cbFn(arg0)
1973+ if FunctionVar != nil {
1974+ FunctionVarPtr := uintptr(unsafe.Pointer(FunctionVar))
1975+ if cbRefPtr, ok := GetCallback(FunctionVarPtr); ok {
1976+ FunctionVarRef = cbRefPtr
1977+ } else {
1978+ fcb := func(arg0 uintptr) bool {
1979+ cbFn := *FunctionVar
1980+ return cbFn(arg0)
1981+ }
1982+ FunctionVarRef = purego.NewCallback(fcb)
1983+ SaveCallback(FunctionVarPtr, FunctionVarRef)
19621984 }
1963- FunctionVarRef = purego.NewCallback(fcb)
1964- SaveCallback(FunctionVarPtr, FunctionVarRef)
19651985 }
19661986
19671987 var NotifyVarRef uintptr
@@ -1997,17 +2017,19 @@ var xIdleAddOnce func(uintptr, uintptr) uint
19972017 // This function otherwise behaves like [func@GLib.idle_add].
19982018 func IdleAddOnce(FunctionVar *SourceOnceFunc, DataVar uintptr) uint {
19992019
2000- FunctionVarPtr := uintptr(unsafe.Pointer(FunctionVar))
20012020 var FunctionVarRef uintptr
2002- if cbRefPtr, ok := GetCallback(FunctionVarPtr); ok {
2003- FunctionVarRef = cbRefPtr
2004- } else {
2005- fcb := func(arg0 uintptr) {
2006- cbFn := *FunctionVar
2007- cbFn(arg0)
2021+ if FunctionVar != nil {
2022+ FunctionVarPtr := uintptr(unsafe.Pointer(FunctionVar))
2023+ if cbRefPtr, ok := GetCallback(FunctionVarPtr); ok {
2024+ FunctionVarRef = cbRefPtr
2025+ } else {
2026+ fcb := func(arg0 uintptr) {
2027+ cbFn := *FunctionVar
2028+ cbFn(arg0)
2029+ }
2030+ FunctionVarRef = purego.NewCallback(fcb)
2031+ SaveCallback(FunctionVarPtr, FunctionVarRef)
20082032 }
2009- FunctionVarRef = purego.NewCallback(fcb)
2010- SaveCallback(FunctionVarPtr, FunctionVarRef)
20112033 }
20122034
20132035 cret := xIdleAddOnce(FunctionVarRef, DataVar)
@@ -2333,17 +2355,19 @@ var xTimeoutAdd func(uint, uintptr, uintptr) uint
23332355 // time. See [func@GLib.get_monotonic_time].
23342356 func TimeoutAdd(IntervalVar uint, FunctionVar *SourceFunc, DataVar uintptr) uint {
23352357
2336- FunctionVarPtr := uintptr(unsafe.Pointer(FunctionVar))
23372358 var FunctionVarRef uintptr
2338- if cbRefPtr, ok := GetCallback(FunctionVarPtr); ok {
2339- FunctionVarRef = cbRefPtr
2340- } else {
2341- fcb := func(arg0 uintptr) bool {
2342- cbFn := *FunctionVar
2343- return cbFn(arg0)
2359+ if FunctionVar != nil {
2360+ FunctionVarPtr := uintptr(unsafe.Pointer(FunctionVar))
2361+ if cbRefPtr, ok := GetCallback(FunctionVarPtr); ok {
2362+ FunctionVarRef = cbRefPtr
2363+ } else {
2364+ fcb := func(arg0 uintptr) bool {
2365+ cbFn := *FunctionVar
2366+ return cbFn(arg0)
2367+ }
2368+ FunctionVarRef = purego.NewCallback(fcb)
2369+ SaveCallback(FunctionVarPtr, FunctionVarRef)
23442370 }
2345- FunctionVarRef = purego.NewCallback(fcb)
2346- SaveCallback(FunctionVarPtr, FunctionVarRef)
23472371 }
23482372
23492373 cret := xTimeoutAdd(IntervalVar, FunctionVarRef, DataVar)
@@ -2382,17 +2406,19 @@ var xTimeoutAddFull func(int, uint, uintptr, uintptr, uintptr) uint
23822406 // See [func@GLib.get_monotonic_time].
23832407 func TimeoutAddFull(PriorityVar int, IntervalVar uint, FunctionVar *SourceFunc, DataVar uintptr, NotifyVar *DestroyNotify) uint {
23842408
2385- FunctionVarPtr := uintptr(unsafe.Pointer(FunctionVar))
23862409 var FunctionVarRef uintptr
2387- if cbRefPtr, ok := GetCallback(FunctionVarPtr); ok {
2388- FunctionVarRef = cbRefPtr
2389- } else {
2390- fcb := func(arg0 uintptr) bool {
2391- cbFn := *FunctionVar
2392- return cbFn(arg0)
2410+ if FunctionVar != nil {
2411+ FunctionVarPtr := uintptr(unsafe.Pointer(FunctionVar))
2412+ if cbRefPtr, ok := GetCallback(FunctionVarPtr); ok {
2413+ FunctionVarRef = cbRefPtr
2414+ } else {
2415+ fcb := func(arg0 uintptr) bool {
2416+ cbFn := *FunctionVar
2417+ return cbFn(arg0)
2418+ }
2419+ FunctionVarRef = purego.NewCallback(fcb)
2420+ SaveCallback(FunctionVarPtr, FunctionVarRef)
23932421 }
2394- FunctionVarRef = purego.NewCallback(fcb)
2395- SaveCallback(FunctionVarPtr, FunctionVarRef)
23962422 }
23972423
23982424 var NotifyVarRef uintptr
@@ -2425,17 +2451,19 @@ var xTimeoutAddOnce func(uint, uintptr, uintptr) uint
24252451 // This function otherwise behaves like [func@GLib.timeout_add].
24262452 func TimeoutAddOnce(IntervalVar uint, FunctionVar *SourceOnceFunc, DataVar uintptr) uint {
24272453
2428- FunctionVarPtr := uintptr(unsafe.Pointer(FunctionVar))
24292454 var FunctionVarRef uintptr
2430- if cbRefPtr, ok := GetCallback(FunctionVarPtr); ok {
2431- FunctionVarRef = cbRefPtr
2432- } else {
2433- fcb := func(arg0 uintptr) {
2434- cbFn := *FunctionVar
2435- cbFn(arg0)
2455+ if FunctionVar != nil {
2456+ FunctionVarPtr := uintptr(unsafe.Pointer(FunctionVar))
2457+ if cbRefPtr, ok := GetCallback(FunctionVarPtr); ok {
2458+ FunctionVarRef = cbRefPtr
2459+ } else {
2460+ fcb := func(arg0 uintptr) {
2461+ cbFn := *FunctionVar
2462+ cbFn(arg0)
2463+ }
2464+ FunctionVarRef = purego.NewCallback(fcb)
2465+ SaveCallback(FunctionVarPtr, FunctionVarRef)
24362466 }
2437- FunctionVarRef = purego.NewCallback(fcb)
2438- SaveCallback(FunctionVarPtr, FunctionVarRef)
24392467 }
24402468
24412469 cret := xTimeoutAddOnce(IntervalVar, FunctionVarRef, DataVar)
@@ -2469,17 +2497,19 @@ var xTimeoutAddSeconds func(uint, uintptr, uintptr) uint
24692497 // time. See [func@GLib.get_monotonic_time].
24702498 func TimeoutAddSeconds(IntervalVar uint, FunctionVar *SourceFunc, DataVar uintptr) uint {
24712499
2472- FunctionVarPtr := uintptr(unsafe.Pointer(FunctionVar))
24732500 var FunctionVarRef uintptr
2474- if cbRefPtr, ok := GetCallback(FunctionVarPtr); ok {
2475- FunctionVarRef = cbRefPtr
2476- } else {
2477- fcb := func(arg0 uintptr) bool {
2478- cbFn := *FunctionVar
2479- return cbFn(arg0)
2501+ if FunctionVar != nil {
2502+ FunctionVarPtr := uintptr(unsafe.Pointer(FunctionVar))
2503+ if cbRefPtr, ok := GetCallback(FunctionVarPtr); ok {
2504+ FunctionVarRef = cbRefPtr
2505+ } else {
2506+ fcb := func(arg0 uintptr) bool {
2507+ cbFn := *FunctionVar
2508+ return cbFn(arg0)
2509+ }
2510+ FunctionVarRef = purego.NewCallback(fcb)
2511+ SaveCallback(FunctionVarPtr, FunctionVarRef)
24802512 }
2481- FunctionVarRef = purego.NewCallback(fcb)
2482- SaveCallback(FunctionVarPtr, FunctionVarRef)
24832513 }
24842514
24852515 cret := xTimeoutAddSeconds(IntervalVar, FunctionVarRef, DataVar)
@@ -2530,17 +2560,19 @@ var xTimeoutAddSecondsFull func(int, uint, uintptr, uintptr, uintptr) uint
25302560 // time. See [func@GLib.get_monotonic_time].
25312561 func TimeoutAddSecondsFull(PriorityVar int, IntervalVar uint, FunctionVar *SourceFunc, DataVar uintptr, NotifyVar *DestroyNotify) uint {
25322562
2533- FunctionVarPtr := uintptr(unsafe.Pointer(FunctionVar))
25342563 var FunctionVarRef uintptr
2535- if cbRefPtr, ok := GetCallback(FunctionVarPtr); ok {
2536- FunctionVarRef = cbRefPtr
2537- } else {
2538- fcb := func(arg0 uintptr) bool {
2539- cbFn := *FunctionVar
2540- return cbFn(arg0)
2564+ if FunctionVar != nil {
2565+ FunctionVarPtr := uintptr(unsafe.Pointer(FunctionVar))
2566+ if cbRefPtr, ok := GetCallback(FunctionVarPtr); ok {
2567+ FunctionVarRef = cbRefPtr
2568+ } else {
2569+ fcb := func(arg0 uintptr) bool {
2570+ cbFn := *FunctionVar
2571+ return cbFn(arg0)
2572+ }
2573+ FunctionVarRef = purego.NewCallback(fcb)
2574+ SaveCallback(FunctionVarPtr, FunctionVarRef)
25412575 }
2542- FunctionVarRef = purego.NewCallback(fcb)
2543- SaveCallback(FunctionVarPtr, FunctionVarRef)
25442576 }
25452577
25462578 var NotifyVarRef uintptr
@@ -2568,17 +2600,19 @@ var xTimeoutAddSecondsOnce func(uint, uintptr, uintptr) uint
25682600 // seconds.
25692601 func TimeoutAddSecondsOnce(IntervalVar uint, FunctionVar *SourceOnceFunc, DataVar uintptr) uint {
25702602
2571- FunctionVarPtr := uintptr(unsafe.Pointer(FunctionVar))
25722603 var FunctionVarRef uintptr
2573- if cbRefPtr, ok := GetCallback(FunctionVarPtr); ok {
2574- FunctionVarRef = cbRefPtr
2575- } else {
2576- fcb := func(arg0 uintptr) {
2577- cbFn := *FunctionVar
2578- cbFn(arg0)
2604+ if FunctionVar != nil {
2605+ FunctionVarPtr := uintptr(unsafe.Pointer(FunctionVar))
2606+ if cbRefPtr, ok := GetCallback(FunctionVarPtr); ok {
2607+ FunctionVarRef = cbRefPtr
2608+ } else {
2609+ fcb := func(arg0 uintptr) {
2610+ cbFn := *FunctionVar
2611+ cbFn(arg0)
2612+ }
2613+ FunctionVarRef = purego.NewCallback(fcb)
2614+ SaveCallback(FunctionVarPtr, FunctionVarRef)
25792615 }
2580- FunctionVarRef = purego.NewCallback(fcb)
2581- SaveCallback(FunctionVarPtr, FunctionVarRef)
25822616 }
25832617
25842618 cret := xTimeoutAddSecondsOnce(IntervalVar, FunctionVarRef, DataVar)
M v4/glib/gmarkup.go +11 -9
@@ -38,17 +38,19 @@ var xNewMarkupParseContext func(*MarkupParser, MarkupParseFlags, uintptr, uintpt
3838 // free it and create a new parse context).
3939 func NewMarkupParseContext(ParserVar *MarkupParser, FlagsVar MarkupParseFlags, UserDataVar uintptr, UserDataDnotifyVar *DestroyNotify) *MarkupParseContext {
4040
41- UserDataDnotifyVarPtr := uintptr(unsafe.Pointer(UserDataDnotifyVar))
4241 var UserDataDnotifyVarRef uintptr
43- if cbRefPtr, ok := GetCallback(UserDataDnotifyVarPtr); ok {
44- UserDataDnotifyVarRef = cbRefPtr
45- } else {
46- fcb := func(arg0 uintptr) {
47- cbFn := *UserDataDnotifyVar
48- cbFn(arg0)
42+ if UserDataDnotifyVar != nil {
43+ UserDataDnotifyVarPtr := uintptr(unsafe.Pointer(UserDataDnotifyVar))
44+ if cbRefPtr, ok := GetCallback(UserDataDnotifyVarPtr); ok {
45+ UserDataDnotifyVarRef = cbRefPtr
46+ } else {
47+ fcb := func(arg0 uintptr) {
48+ cbFn := *UserDataDnotifyVar
49+ cbFn(arg0)
50+ }
51+ UserDataDnotifyVarRef = purego.NewCallback(fcb)
52+ SaveCallback(UserDataDnotifyVarPtr, UserDataDnotifyVarRef)
4953 }
50- UserDataDnotifyVarRef = purego.NewCallback(fcb)
51- SaveCallback(UserDataDnotifyVarPtr, UserDataDnotifyVarRef)
5254 }
5355
5456 cret := xNewMarkupParseContext(ParserVar, FlagsVar, UserDataVar, UserDataDnotifyVarRef)
M v4/glib/gmem.go +11 -9
@@ -279,17 +279,19 @@ var xClearPointer func(uintptr, uintptr)
279279 // ```
280280 func ClearPointer(PpVar uintptr, DestroyVar *DestroyNotify) {
281281
282- DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
283282 var DestroyVarRef uintptr
284- if cbRefPtr, ok := GetCallback(DestroyVarPtr); ok {
285- DestroyVarRef = cbRefPtr
286- } else {
287- fcb := func(arg0 uintptr) {
288- cbFn := *DestroyVar
289- cbFn(arg0)
283+ if DestroyVar != nil {
284+ DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
285+ if cbRefPtr, ok := GetCallback(DestroyVarPtr); ok {
286+ DestroyVarRef = cbRefPtr
287+ } else {
288+ fcb := func(arg0 uintptr) {
289+ cbFn := *DestroyVar
290+ cbFn(arg0)
291+ }
292+ DestroyVarRef = purego.NewCallback(fcb)
293+ SaveCallback(DestroyVarPtr, DestroyVarRef)
290294 }
291- DestroyVarRef = purego.NewCallback(fcb)
292- SaveCallback(DestroyVarPtr, DestroyVarRef)
293295 }
294296
295297 xClearPointer(PpVar, DestroyVarRef)
M v4/glib/gmessages.go +66 -54
@@ -339,17 +339,19 @@ var xLogSetDefaultHandler func(uintptr, uintptr) uintptr
339339 // [Using Structured Logging](logging.html#using-structured-logging).
340340 func LogSetDefaultHandler(LogFuncVar *LogFunc, UserDataVar uintptr) uintptr {
341341
342- LogFuncVarPtr := uintptr(unsafe.Pointer(LogFuncVar))
343342 var LogFuncVarRef uintptr
344- if cbRefPtr, ok := GetCallback(LogFuncVarPtr); ok {
345- LogFuncVarRef = cbRefPtr
346- } else {
347- fcb := func(arg0 string, arg1 LogLevelFlags, arg2 string, arg3 uintptr) {
348- cbFn := *LogFuncVar
349- cbFn(arg0, arg1, arg2, arg3)
343+ if LogFuncVar != nil {
344+ LogFuncVarPtr := uintptr(unsafe.Pointer(LogFuncVar))
345+ if cbRefPtr, ok := GetCallback(LogFuncVarPtr); ok {
346+ LogFuncVarRef = cbRefPtr
347+ } else {
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)
350354 }
351- LogFuncVarRef = purego.NewCallback(fcb)
352- SaveCallback(LogFuncVarPtr, LogFuncVarRef)
353355 }
354356
355357 cret := xLogSetDefaultHandler(LogFuncVarRef, UserDataVar)
@@ -425,17 +427,19 @@ var xLogSetHandler func(string, LogLevelFlags, uintptr, uintptr) uint
425427 // ```
426428 func LogSetHandler(LogDomainVar string, LogLevelsVar LogLevelFlags, LogFuncVar *LogFunc, UserDataVar uintptr) uint {
427429
428- LogFuncVarPtr := uintptr(unsafe.Pointer(LogFuncVar))
429430 var LogFuncVarRef uintptr
430- if cbRefPtr, ok := GetCallback(LogFuncVarPtr); ok {
431- LogFuncVarRef = cbRefPtr
432- } else {
433- fcb := func(arg0 string, arg1 LogLevelFlags, arg2 string, arg3 uintptr) {
434- cbFn := *LogFuncVar
435- cbFn(arg0, arg1, arg2, arg3)
431+ if LogFuncVar != nil {
432+ LogFuncVarPtr := uintptr(unsafe.Pointer(LogFuncVar))
433+ if cbRefPtr, ok := GetCallback(LogFuncVarPtr); ok {
434+ LogFuncVarRef = cbRefPtr
435+ } else {
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)
436442 }
437- LogFuncVarRef = purego.NewCallback(fcb)
438- SaveCallback(LogFuncVarPtr, LogFuncVarRef)
439443 }
440444
441445 cret := xLogSetHandler(LogDomainVar, LogLevelsVar, LogFuncVarRef, UserDataVar)
@@ -453,30 +457,34 @@ var xLogSetHandlerFull func(string, LogLevelFlags, uintptr, uintptr, uintptr) ui
453457 // application domain.
454458 func LogSetHandlerFull(LogDomainVar string, LogLevelsVar LogLevelFlags, LogFuncVar *LogFunc, UserDataVar uintptr, DestroyVar *DestroyNotify) uint {
455459
456- LogFuncVarPtr := uintptr(unsafe.Pointer(LogFuncVar))
457460 var LogFuncVarRef uintptr
458- if cbRefPtr, ok := GetCallback(LogFuncVarPtr); ok {
459- LogFuncVarRef = cbRefPtr
460- } else {
461- fcb := func(arg0 string, arg1 LogLevelFlags, arg2 string, arg3 uintptr) {
462- cbFn := *LogFuncVar
463- cbFn(arg0, arg1, arg2, arg3)
461+ if LogFuncVar != nil {
462+ LogFuncVarPtr := uintptr(unsafe.Pointer(LogFuncVar))
463+ if cbRefPtr, ok := GetCallback(LogFuncVarPtr); ok {
464+ LogFuncVarRef = cbRefPtr
465+ } else {
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)
464472 }
465- LogFuncVarRef = purego.NewCallback(fcb)
466- SaveCallback(LogFuncVarPtr, LogFuncVarRef)
467473 }
468474
469- DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
470475 var DestroyVarRef uintptr
471- if cbRefPtr, ok := GetCallback(DestroyVarPtr); ok {
472- DestroyVarRef = cbRefPtr
473- } else {
474- fcb := func(arg0 uintptr) {
475- cbFn := *DestroyVar
476- cbFn(arg0)
476+ if DestroyVar != nil {
477+ DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
478+ if cbRefPtr, ok := GetCallback(DestroyVarPtr); ok {
479+ DestroyVarRef = cbRefPtr
480+ } else {
481+ fcb := func(arg0 uintptr) {
482+ cbFn := *DestroyVar
483+ cbFn(arg0)
484+ }
485+ DestroyVarRef = purego.NewCallback(fcb)
486+ SaveCallback(DestroyVarPtr, DestroyVarRef)
477487 }
478- DestroyVarRef = purego.NewCallback(fcb)
479- SaveCallback(DestroyVarPtr, DestroyVarRef)
480488 }
481489
482490 cret := xLogSetHandlerFull(LogDomainVar, LogLevelsVar, LogFuncVarRef, UserDataVar, DestroyVarRef)
@@ -498,30 +506,34 @@ var xLogSetWriterFunc func(uintptr, uintptr, uintptr)
498506 // There can only be one writer function. It is an error to set more than one.
499507 func LogSetWriterFunc(FuncVar *LogWriterFunc, UserDataVar uintptr, UserDataFreeVar *DestroyNotify) {
500508
501- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
502509 var FuncVarRef uintptr
503- if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
504- FuncVarRef = cbRefPtr
505- } else {
506- fcb := func(arg0 LogLevelFlags, arg1 []LogField, arg2 uint, arg3 uintptr) LogWriterOutput {
507- cbFn := *FuncVar
508- return cbFn(arg0, arg1, arg2, arg3)
510+ if FuncVar != nil {
511+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
512+ if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
513+ FuncVarRef = cbRefPtr
514+ } else {
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)
509521 }
510- FuncVarRef = purego.NewCallback(fcb)
511- SaveCallback(FuncVarPtr, FuncVarRef)
512522 }
513523
514- UserDataFreeVarPtr := uintptr(unsafe.Pointer(UserDataFreeVar))
515524 var UserDataFreeVarRef uintptr
516- if cbRefPtr, ok := GetCallback(UserDataFreeVarPtr); ok {
517- UserDataFreeVarRef = cbRefPtr
518- } else {
519- fcb := func(arg0 uintptr) {
520- cbFn := *UserDataFreeVar
521- cbFn(arg0)
525+ if UserDataFreeVar != nil {
526+ UserDataFreeVarPtr := uintptr(unsafe.Pointer(UserDataFreeVar))
527+ if cbRefPtr, ok := GetCallback(UserDataFreeVarPtr); ok {
528+ UserDataFreeVarRef = cbRefPtr
529+ } else {
530+ fcb := func(arg0 uintptr) {
531+ cbFn := *UserDataFreeVar
532+ cbFn(arg0)
533+ }
534+ UserDataFreeVarRef = purego.NewCallback(fcb)
535+ SaveCallback(UserDataFreeVarPtr, UserDataFreeVarRef)
522536 }
523- UserDataFreeVarRef = purego.NewCallback(fcb)
524- SaveCallback(UserDataFreeVarPtr, UserDataFreeVarRef)
525537 }
526538
527539 xLogSetWriterFunc(FuncVarRef, UserDataVar, UserDataFreeVarRef)
M v4/glib/gnode.go +33 -27
@@ -67,17 +67,19 @@ var xNodeChildrenForeach func(uintptr, TraverseFlags, uintptr, uintptr)
6767 // that would modify the structure of the tree.
6868 func (x *Node) ChildrenForeach(FlagsVar TraverseFlags, FuncVar *NodeForeachFunc, DataVar uintptr) {
6969
70- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
7170 var FuncVarRef uintptr
72- if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
73- FuncVarRef = cbRefPtr
74- } else {
75- fcb := func(arg0 *Node, arg1 uintptr) {
76- cbFn := *FuncVar
77- cbFn(arg0, arg1)
71+ if FuncVar != nil {
72+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
73+ if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
74+ FuncVarRef = cbRefPtr
75+ } else {
76+ fcb := func(arg0 *Node, arg1 uintptr) {
77+ cbFn := *FuncVar
78+ cbFn(arg0, arg1)
79+ }
80+ FuncVarRef = purego.NewCallback(fcb)
81+ SaveCallback(FuncVarPtr, FuncVarRef)
7882 }
79- FuncVarRef = purego.NewCallback(fcb)
80- SaveCallback(FuncVarPtr, FuncVarRef)
8183 }
8284
8385 xNodeChildrenForeach(x.GoPointer(), FlagsVar, FuncVarRef, DataVar)
@@ -99,17 +101,19 @@ var xNodeCopyDeep func(uintptr, uintptr, uintptr) *Node
99101 // Recursively copies a #GNode and its data.
100102 func (x *Node) CopyDeep(CopyFuncVar *CopyFunc, DataVar uintptr) *Node {
101103
102- CopyFuncVarPtr := uintptr(unsafe.Pointer(CopyFuncVar))
103104 var CopyFuncVarRef uintptr
104- if cbRefPtr, ok := GetCallback(CopyFuncVarPtr); ok {
105- CopyFuncVarRef = cbRefPtr
106- } else {
107- fcb := func(arg0 uintptr, arg1 uintptr) uintptr {
108- cbFn := *CopyFuncVar
109- return cbFn(arg0, arg1)
105+ if CopyFuncVar != nil {
106+ CopyFuncVarPtr := uintptr(unsafe.Pointer(CopyFuncVar))
107+ if cbRefPtr, ok := GetCallback(CopyFuncVarPtr); ok {
108+ CopyFuncVarRef = cbRefPtr
109+ } else {
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)
110116 }
111- CopyFuncVarRef = purego.NewCallback(fcb)
112- SaveCallback(CopyFuncVarPtr, CopyFuncVarRef)
113117 }
114118
115119 cret := xNodeCopyDeep(x.GoPointer(), CopyFuncVarRef, DataVar)
@@ -301,17 +305,19 @@ var xNodeTraverse func(uintptr, TraverseType, TraverseFlags, int, uintptr, uintp
301305 // @func must not do anything that would modify the structure of the tree.
302306 func (x *Node) Traverse(OrderVar TraverseType, FlagsVar TraverseFlags, MaxDepthVar int, FuncVar *NodeTraverseFunc, DataVar uintptr) {
303307
304- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
305308 var FuncVarRef uintptr
306- if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
307- FuncVarRef = cbRefPtr
308- } else {
309- fcb := func(arg0 *Node, arg1 uintptr) bool {
310- cbFn := *FuncVar
311- return cbFn(arg0, arg1)
309+ if FuncVar != nil {
310+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
311+ if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
312+ FuncVarRef = cbRefPtr
313+ } else {
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)
312320 }
313- FuncVarRef = purego.NewCallback(fcb)
314- SaveCallback(FuncVarPtr, FuncVarRef)
315321 }
316322
317323 xNodeTraverse(x.GoPointer(), OrderVar, FlagsVar, MaxDepthVar, FuncVarRef, DataVar)
M v4/glib/goption.go +11 -9
@@ -490,17 +490,19 @@ var xOptionGroupSetErrorHook func(uintptr, uintptr)
490490 // specified when constructing the group with g_option_group_new().
491491 func (x *OptionGroup) SetErrorHook(ErrorFuncVar *OptionErrorFunc) {
492492
493- ErrorFuncVarPtr := uintptr(unsafe.Pointer(ErrorFuncVar))
494493 var ErrorFuncVarRef uintptr
495- if cbRefPtr, ok := GetCallback(ErrorFuncVarPtr); ok {
496- ErrorFuncVarRef = cbRefPtr
497- } else {
498- fcb := func(arg0 *OptionContext, arg1 *OptionGroup, arg2 uintptr, arg3 **Error) {
499- cbFn := *ErrorFuncVar
500- cbFn(arg0, arg1, arg2, arg3)
494+ if ErrorFuncVar != nil {
495+ ErrorFuncVarPtr := uintptr(unsafe.Pointer(ErrorFuncVar))
496+ if cbRefPtr, ok := GetCallback(ErrorFuncVarPtr); ok {
497+ ErrorFuncVarRef = cbRefPtr
498+ } else {
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)
501505 }
502- ErrorFuncVarRef = purego.NewCallback(fcb)
503- SaveCallback(ErrorFuncVarPtr, ErrorFuncVarRef)
504506 }
505507
506508 xOptionGroupSetErrorHook(x.GoPointer(), ErrorFuncVarRef)
M v4/glib/gqsort.go +22 -18
@@ -17,17 +17,19 @@ var xQsortWithData func(uintptr, int, uint, uintptr, uintptr)
1717 // Unlike `qsort()`, this is guaranteed to be a stable sort (since GLib 2.32).
1818 func QsortWithData(PbaseVar uintptr, TotalElemsVar int, SizeVar uint, CompareFuncVar *CompareDataFunc, UserDataVar uintptr) {
1919
20- CompareFuncVarPtr := uintptr(unsafe.Pointer(CompareFuncVar))
2120 var CompareFuncVarRef uintptr
22- if cbRefPtr, ok := GetCallback(CompareFuncVarPtr); ok {
23- CompareFuncVarRef = cbRefPtr
24- } else {
25- fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int {
26- cbFn := *CompareFuncVar
27- return cbFn(arg0, arg1, arg2)
21+ if CompareFuncVar != nil {
22+ CompareFuncVarPtr := uintptr(unsafe.Pointer(CompareFuncVar))
23+ if cbRefPtr, ok := GetCallback(CompareFuncVarPtr); ok {
24+ CompareFuncVarRef = cbRefPtr
25+ } else {
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)
2832 }
29- CompareFuncVarRef = purego.NewCallback(fcb)
30- SaveCallback(CompareFuncVarPtr, CompareFuncVarRef)
3133 }
3234
3335 xQsortWithData(PbaseVar, TotalElemsVar, SizeVar, CompareFuncVarRef, UserDataVar)
@@ -43,17 +45,19 @@ var xSortArray func([]uintptr, uint, uint, uintptr, uintptr)
4345 // Unlike `qsort()`, this is guaranteed to be a stable sort.
4446 func SortArray(ArrayVar []uintptr, NElementsVar uint, ElementSizeVar uint, CompareFuncVar *CompareDataFunc, UserDataVar uintptr) {
4547
46- CompareFuncVarPtr := uintptr(unsafe.Pointer(CompareFuncVar))
4748 var CompareFuncVarRef uintptr
48- if cbRefPtr, ok := GetCallback(CompareFuncVarPtr); ok {
49- CompareFuncVarRef = cbRefPtr
50- } else {
51- fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int {
52- cbFn := *CompareFuncVar
53- return cbFn(arg0, arg1, arg2)
49+ if CompareFuncVar != nil {
50+ CompareFuncVarPtr := uintptr(unsafe.Pointer(CompareFuncVar))
51+ if cbRefPtr, ok := GetCallback(CompareFuncVarPtr); ok {
52+ CompareFuncVarRef = cbRefPtr
53+ } else {
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)
5460 }
55- CompareFuncVarRef = purego.NewCallback(fcb)
56- SaveCallback(CompareFuncVarPtr, CompareFuncVarRef)
5761 }
5862
5963 xSortArray(ArrayVar, NElementsVar, ElementSizeVar, CompareFuncVarRef, UserDataVar)
M v4/glib/gqueue.go +55 -45
@@ -100,17 +100,19 @@ var xQueueFindCustom func(uintptr, uintptr, uintptr) *List
100100 // first argument and the given user data as the second argument.
101101 func (x *Queue) FindCustom(DataVar uintptr, FuncVar *CompareFunc) *List {
102102
103- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
104103 var FuncVarRef uintptr
105- if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
106- FuncVarRef = cbRefPtr
107- } else {
108- fcb := func(arg0 uintptr, arg1 uintptr) int {
109- cbFn := *FuncVar
110- return cbFn(arg0, arg1)
104+ if FuncVar != nil {
105+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
106+ if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
107+ FuncVarRef = cbRefPtr
108+ } else {
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)
111115 }
112- FuncVarRef = purego.NewCallback(fcb)
113- SaveCallback(FuncVarPtr, FuncVarRef)
114116 }
115117
116118 cret := xQueueFindCustom(x.GoPointer(), DataVar, FuncVarRef)
@@ -126,17 +128,19 @@ var xQueueForeach func(uintptr, uintptr, uintptr)
126128 // not modify any part of the queue after that element.
127129 func (x *Queue) Foreach(FuncVar *Func, UserDataVar uintptr) {
128130
129- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
130131 var FuncVarRef uintptr
131- if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
132- FuncVarRef = cbRefPtr
133- } else {
134- fcb := func(arg0 uintptr, arg1 uintptr) {
135- cbFn := *FuncVar
136- cbFn(arg0, arg1)
132+ if FuncVar != nil {
133+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
134+ if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
135+ FuncVarRef = cbRefPtr
136+ } else {
137+ fcb := func(arg0 uintptr, arg1 uintptr) {
138+ cbFn := *FuncVar
139+ cbFn(arg0, arg1)
140+ }
141+ FuncVarRef = purego.NewCallback(fcb)
142+ SaveCallback(FuncVarPtr, FuncVarRef)
137143 }
138- FuncVarRef = purego.NewCallback(fcb)
139- SaveCallback(FuncVarPtr, FuncVarRef)
140144 }
141145
142146 xQueueForeach(x.GoPointer(), FuncVarRef, UserDataVar)
@@ -166,17 +170,19 @@ var xQueueFreeFull func(uintptr, uintptr)
166170 // element from it).
167171 func (x *Queue) FreeFull(FreeFuncVar *DestroyNotify) {
168172
169- FreeFuncVarPtr := uintptr(unsafe.Pointer(FreeFuncVar))
170173 var FreeFuncVarRef uintptr
171- if cbRefPtr, ok := GetCallback(FreeFuncVarPtr); ok {
172- FreeFuncVarRef = cbRefPtr
173- } else {
174- fcb := func(arg0 uintptr) {
175- cbFn := *FreeFuncVar
176- cbFn(arg0)
174+ if FreeFuncVar != nil {
175+ FreeFuncVarPtr := uintptr(unsafe.Pointer(FreeFuncVar))
176+ if cbRefPtr, ok := GetCallback(FreeFuncVarPtr); ok {
177+ FreeFuncVarRef = cbRefPtr
178+ } else {
179+ fcb := func(arg0 uintptr) {
180+ cbFn := *FreeFuncVar
181+ cbFn(arg0)
182+ }
183+ FreeFuncVarRef = purego.NewCallback(fcb)
184+ SaveCallback(FreeFuncVarPtr, FreeFuncVarRef)
177185 }
178- FreeFuncVarRef = purego.NewCallback(fcb)
179- SaveCallback(FreeFuncVarPtr, FreeFuncVarRef)
180186 }
181187
182188 xQueueFreeFull(x.GoPointer(), FreeFuncVarRef)
@@ -264,17 +270,19 @@ var xQueueInsertSorted func(uintptr, uintptr, uintptr, uintptr)
264270 // Inserts @data into @queue using @func to determine the new position.
265271 func (x *Queue) InsertSorted(DataVar uintptr, FuncVar *CompareDataFunc, UserDataVar uintptr) {
266272
267- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
268273 var FuncVarRef uintptr
269- if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
270- FuncVarRef = cbRefPtr
271- } else {
272- fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int {
273- cbFn := *FuncVar
274- return cbFn(arg0, arg1, arg2)
274+ if FuncVar != nil {
275+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
276+ if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
277+ FuncVarRef = cbRefPtr
278+ } else {
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)
275285 }
276- FuncVarRef = purego.NewCallback(fcb)
277- SaveCallback(FuncVarPtr, FuncVarRef)
278286 }
279287
280288 xQueueInsertSorted(x.GoPointer(), DataVar, FuncVarRef, UserDataVar)
@@ -493,17 +501,19 @@ var xQueueSort func(uintptr, uintptr, uintptr)
493501 // Sorts @queue using @compare_func.
494502 func (x *Queue) Sort(CompareFuncVar *CompareDataFunc, UserDataVar uintptr) {
495503
496- CompareFuncVarPtr := uintptr(unsafe.Pointer(CompareFuncVar))
497504 var CompareFuncVarRef uintptr
498- if cbRefPtr, ok := GetCallback(CompareFuncVarPtr); ok {
499- CompareFuncVarRef = cbRefPtr
500- } else {
501- fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int {
502- cbFn := *CompareFuncVar
503- return cbFn(arg0, arg1, arg2)
505+ if CompareFuncVar != nil {
506+ CompareFuncVarPtr := uintptr(unsafe.Pointer(CompareFuncVar))
507+ if cbRefPtr, ok := GetCallback(CompareFuncVarPtr); ok {
508+ CompareFuncVarRef = cbRefPtr
509+ } else {
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)
504516 }
505- CompareFuncVarRef = purego.NewCallback(fcb)
506- SaveCallback(CompareFuncVarPtr, CompareFuncVarRef)
507517 }
508518
509519 xQueueSort(x.GoPointer(), CompareFuncVarRef, UserDataVar)
M v4/glib/grcbox.go +22 -18
@@ -97,17 +97,19 @@ var xAtomicRcBoxReleaseFull func(uintptr, uintptr)
9797 // when the callback is called and will be freed.
9898 func AtomicRcBoxReleaseFull(MemBlockVar uintptr, ClearFuncVar *DestroyNotify) {
9999
100- ClearFuncVarPtr := uintptr(unsafe.Pointer(ClearFuncVar))
101100 var ClearFuncVarRef uintptr
102- if cbRefPtr, ok := GetCallback(ClearFuncVarPtr); ok {
103- ClearFuncVarRef = cbRefPtr
104- } else {
105- fcb := func(arg0 uintptr) {
106- cbFn := *ClearFuncVar
107- cbFn(arg0)
101+ if ClearFuncVar != nil {
102+ ClearFuncVarPtr := uintptr(unsafe.Pointer(ClearFuncVar))
103+ if cbRefPtr, ok := GetCallback(ClearFuncVarPtr); ok {
104+ ClearFuncVarRef = cbRefPtr
105+ } else {
106+ fcb := func(arg0 uintptr) {
107+ cbFn := *ClearFuncVar
108+ cbFn(arg0)
109+ }
110+ ClearFuncVarRef = purego.NewCallback(fcb)
111+ SaveCallback(ClearFuncVarPtr, ClearFuncVarRef)
108112 }
109- ClearFuncVarRef = purego.NewCallback(fcb)
110- SaveCallback(ClearFuncVarPtr, ClearFuncVarRef)
111113 }
112114
113115 xAtomicRcBoxReleaseFull(MemBlockVar, ClearFuncVarRef)
@@ -198,17 +200,19 @@ var xRcBoxReleaseFull func(uintptr, uintptr)
198200 // resources allocated for @mem_block.
199201 func RcBoxReleaseFull(MemBlockVar uintptr, ClearFuncVar *DestroyNotify) {
200202
201- ClearFuncVarPtr := uintptr(unsafe.Pointer(ClearFuncVar))
202203 var ClearFuncVarRef uintptr
203- if cbRefPtr, ok := GetCallback(ClearFuncVarPtr); ok {
204- ClearFuncVarRef = cbRefPtr
205- } else {
206- fcb := func(arg0 uintptr) {
207- cbFn := *ClearFuncVar
208- cbFn(arg0)
204+ if ClearFuncVar != nil {
205+ ClearFuncVarPtr := uintptr(unsafe.Pointer(ClearFuncVar))
206+ if cbRefPtr, ok := GetCallback(ClearFuncVarPtr); ok {
207+ ClearFuncVarRef = cbRefPtr
208+ } else {
209+ fcb := func(arg0 uintptr) {
210+ cbFn := *ClearFuncVar
211+ cbFn(arg0)
212+ }
213+ ClearFuncVarRef = purego.NewCallback(fcb)
214+ SaveCallback(ClearFuncVarPtr, ClearFuncVarRef)
209215 }
210- ClearFuncVarRef = purego.NewCallback(fcb)
211- SaveCallback(ClearFuncVarPtr, ClearFuncVarRef)
212216 }
213217
214218 xRcBoxReleaseFull(MemBlockVar, ClearFuncVarRef)
M v4/glib/gregex.go +11 -9
@@ -1028,17 +1028,19 @@ var xRegexReplaceEval func(uintptr, []string, int, int, RegexMatchFlags, uintptr
10281028 func (x *Regex) ReplaceEval(StringVar []string, StringLenVar int, StartPositionVar int, MatchOptionsVar RegexMatchFlags, EvalVar *RegexEvalCallback, UserDataVar uintptr) (string, error) {
10291029 var cerr *Error
10301030
1031- EvalVarPtr := uintptr(unsafe.Pointer(EvalVar))
10321031 var EvalVarRef uintptr
1033- if cbRefPtr, ok := GetCallback(EvalVarPtr); ok {
1034- EvalVarRef = cbRefPtr
1035- } else {
1036- fcb := func(arg0 *MatchInfo, arg1 *String, arg2 uintptr) bool {
1037- cbFn := *EvalVar
1038- return cbFn(arg0, arg1, arg2)
1032+ if EvalVar != nil {
1033+ EvalVarPtr := uintptr(unsafe.Pointer(EvalVar))
1034+ if cbRefPtr, ok := GetCallback(EvalVarPtr); ok {
1035+ EvalVarRef = cbRefPtr
1036+ } else {
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)
10391043 }
1040- EvalVarRef = purego.NewCallback(fcb)
1041- SaveCallback(EvalVarPtr, EvalVarRef)
10421044 }
10431045
10441046 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)
104104 // before any records are added to the #GRelation.
105105 func (x *Relation) Index(FieldVar int, HashFuncVar *HashFunc, KeyEqualFuncVar *EqualFunc) {
106106
107- HashFuncVarPtr := uintptr(unsafe.Pointer(HashFuncVar))
108107 var HashFuncVarRef uintptr
109- if cbRefPtr, ok := GetCallback(HashFuncVarPtr); ok {
110- HashFuncVarRef = cbRefPtr
111- } else {
112- fcb := func(arg0 uintptr) uint {
113- cbFn := *HashFuncVar
114- return cbFn(arg0)
108+ if HashFuncVar != nil {
109+ HashFuncVarPtr := uintptr(unsafe.Pointer(HashFuncVar))
110+ if cbRefPtr, ok := GetCallback(HashFuncVarPtr); ok {
111+ HashFuncVarRef = cbRefPtr
112+ } else {
113+ fcb := func(arg0 uintptr) uint {
114+ cbFn := *HashFuncVar
115+ return cbFn(arg0)
116+ }
117+ HashFuncVarRef = purego.NewCallback(fcb)
118+ SaveCallback(HashFuncVarPtr, HashFuncVarRef)
115119 }
116- HashFuncVarRef = purego.NewCallback(fcb)
117- SaveCallback(HashFuncVarPtr, HashFuncVarRef)
118120 }
119121
120- KeyEqualFuncVarPtr := uintptr(unsafe.Pointer(KeyEqualFuncVar))
121122 var KeyEqualFuncVarRef uintptr
122- if cbRefPtr, ok := GetCallback(KeyEqualFuncVarPtr); ok {
123- KeyEqualFuncVarRef = cbRefPtr
124- } else {
125- fcb := func(arg0 uintptr, arg1 uintptr) bool {
126- cbFn := *KeyEqualFuncVar
127- return cbFn(arg0, arg1)
123+ if KeyEqualFuncVar != nil {
124+ KeyEqualFuncVarPtr := uintptr(unsafe.Pointer(KeyEqualFuncVar))
125+ if cbRefPtr, ok := GetCallback(KeyEqualFuncVarPtr); ok {
126+ KeyEqualFuncVarRef = cbRefPtr
127+ } else {
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)
128134 }
129- KeyEqualFuncVarRef = purego.NewCallback(fcb)
130- SaveCallback(KeyEqualFuncVarPtr, KeyEqualFuncVarRef)
131135 }
132136
133137 xRelationIndex(x.GoPointer(), FieldVar, HashFuncVarRef, KeyEqualFuncVarRef)
M v4/glib/gscanner.go +11 -9
@@ -223,17 +223,19 @@ var xScannerScopeForeachSymbol func(uintptr, uint, uintptr, uintptr)
223223 // parameter.
224224 func (x *Scanner) ScopeForeachSymbol(ScopeIdVar uint, FuncVar *HFunc, UserDataVar uintptr) {
225225
226- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
227226 var FuncVarRef uintptr
228- if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
229- FuncVarRef = cbRefPtr
230- } else {
231- fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
232- cbFn := *FuncVar
233- cbFn(arg0, arg1, arg2)
227+ if FuncVar != nil {
228+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
229+ if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
230+ FuncVarRef = cbRefPtr
231+ } else {
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)
234238 }
235- FuncVarRef = purego.NewCallback(fcb)
236- SaveCallback(FuncVarPtr, FuncVarRef)
237239 }
238240
239241 xScannerScopeForeachSymbol(x.GoPointer(), ScopeIdVar, FuncVarRef, UserDataVar)
M v4/glib/gsequence.go +132 -108
@@ -39,17 +39,19 @@ var xSequenceForeach func(uintptr, uintptr, uintptr)
3939 // to the function. @func must not modify the sequence itself.
4040 func (x *Sequence) Foreach(FuncVar *Func, UserDataVar uintptr) {
4141
42- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
4342 var FuncVarRef uintptr
44- if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
45- FuncVarRef = cbRefPtr
46- } else {
47- fcb := func(arg0 uintptr, arg1 uintptr) {
48- cbFn := *FuncVar
49- cbFn(arg0, arg1)
43+ if FuncVar != nil {
44+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
45+ if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
46+ FuncVarRef = cbRefPtr
47+ } else {
48+ fcb := func(arg0 uintptr, arg1 uintptr) {
49+ cbFn := *FuncVar
50+ cbFn(arg0, arg1)
51+ }
52+ FuncVarRef = purego.NewCallback(fcb)
53+ SaveCallback(FuncVarPtr, FuncVarRef)
5054 }
51- FuncVarRef = purego.NewCallback(fcb)
52- SaveCallback(FuncVarPtr, FuncVarRef)
5355 }
5456
5557 xSequenceForeach(x.GoPointer(), FuncVarRef, UserDataVar)
@@ -122,17 +124,19 @@ var xSequenceInsertSorted func(uintptr, uintptr, uintptr, uintptr) *SequenceIter
122124 // g_sequence_sort() or g_sequence_sort_iter().
123125 func (x *Sequence) InsertSorted(DataVar uintptr, CmpFuncVar *CompareDataFunc, CmpDataVar uintptr) *SequenceIter {
124126
125- CmpFuncVarPtr := uintptr(unsafe.Pointer(CmpFuncVar))
126127 var CmpFuncVarRef uintptr
127- if cbRefPtr, ok := GetCallback(CmpFuncVarPtr); ok {
128- CmpFuncVarRef = cbRefPtr
129- } else {
130- fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int {
131- cbFn := *CmpFuncVar
132- return cbFn(arg0, arg1, arg2)
128+ if CmpFuncVar != nil {
129+ CmpFuncVarPtr := uintptr(unsafe.Pointer(CmpFuncVar))
130+ if cbRefPtr, ok := GetCallback(CmpFuncVarPtr); ok {
131+ CmpFuncVarRef = cbRefPtr
132+ } else {
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)
133139 }
134- CmpFuncVarRef = purego.NewCallback(fcb)
135- SaveCallback(CmpFuncVarPtr, CmpFuncVarRef)
136140 }
137141
138142 cret := xSequenceInsertSorted(x.GoPointer(), DataVar, CmpFuncVarRef, CmpDataVar)
@@ -155,17 +159,19 @@ var xSequenceInsertSortedIter func(uintptr, uintptr, uintptr, uintptr) *Sequence
155159 // g_sequence_sort() or g_sequence_sort_iter().
156160 func (x *Sequence) InsertSortedIter(DataVar uintptr, IterCmpVar *SequenceIterCompareFunc, CmpDataVar uintptr) *SequenceIter {
157161
158- IterCmpVarPtr := uintptr(unsafe.Pointer(IterCmpVar))
159162 var IterCmpVarRef uintptr
160- if cbRefPtr, ok := GetCallback(IterCmpVarPtr); ok {
161- IterCmpVarRef = cbRefPtr
162- } else {
163- fcb := func(arg0 *SequenceIter, arg1 *SequenceIter, arg2 uintptr) int {
164- cbFn := *IterCmpVar
165- return cbFn(arg0, arg1, arg2)
163+ if IterCmpVar != nil {
164+ IterCmpVarPtr := uintptr(unsafe.Pointer(IterCmpVar))
165+ if cbRefPtr, ok := GetCallback(IterCmpVarPtr); ok {
166+ IterCmpVarRef = cbRefPtr
167+ } else {
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)
166174 }
167- IterCmpVarRef = purego.NewCallback(fcb)
168- SaveCallback(IterCmpVarPtr, IterCmpVarRef)
169175 }
170176
171177 cret := xSequenceInsertSortedIter(x.GoPointer(), DataVar, IterCmpVarRef, CmpDataVar)
@@ -202,17 +208,19 @@ var xSequenceLookup func(uintptr, uintptr, uintptr, uintptr) *SequenceIter
202208 // unsorted.
203209 func (x *Sequence) Lookup(DataVar uintptr, CmpFuncVar *CompareDataFunc, CmpDataVar uintptr) *SequenceIter {
204210
205- CmpFuncVarPtr := uintptr(unsafe.Pointer(CmpFuncVar))
206211 var CmpFuncVarRef uintptr
207- if cbRefPtr, ok := GetCallback(CmpFuncVarPtr); ok {
208- CmpFuncVarRef = cbRefPtr
209- } else {
210- fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int {
211- cbFn := *CmpFuncVar
212- return cbFn(arg0, arg1, arg2)
212+ if CmpFuncVar != nil {
213+ CmpFuncVarPtr := uintptr(unsafe.Pointer(CmpFuncVar))
214+ if cbRefPtr, ok := GetCallback(CmpFuncVarPtr); ok {
215+ CmpFuncVarRef = cbRefPtr
216+ } else {
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)
213223 }
214- CmpFuncVarRef = purego.NewCallback(fcb)
215- SaveCallback(CmpFuncVarPtr, CmpFuncVarRef)
216224 }
217225
218226 cret := xSequenceLookup(x.GoPointer(), DataVar, CmpFuncVarRef, CmpDataVar)
@@ -233,17 +241,19 @@ var xSequenceLookupIter func(uintptr, uintptr, uintptr, uintptr) *SequenceIter
233241 // unsorted.
234242 func (x *Sequence) LookupIter(DataVar uintptr, IterCmpVar *SequenceIterCompareFunc, CmpDataVar uintptr) *SequenceIter {
235243
236- IterCmpVarPtr := uintptr(unsafe.Pointer(IterCmpVar))
237244 var IterCmpVarRef uintptr
238- if cbRefPtr, ok := GetCallback(IterCmpVarPtr); ok {
239- IterCmpVarRef = cbRefPtr
240- } else {
241- fcb := func(arg0 *SequenceIter, arg1 *SequenceIter, arg2 uintptr) int {
242- cbFn := *IterCmpVar
243- return cbFn(arg0, arg1, arg2)
245+ if IterCmpVar != nil {
246+ IterCmpVarPtr := uintptr(unsafe.Pointer(IterCmpVar))
247+ if cbRefPtr, ok := GetCallback(IterCmpVarPtr); ok {
248+ IterCmpVarRef = cbRefPtr
249+ } else {
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)
244256 }
245- IterCmpVarRef = purego.NewCallback(fcb)
246- SaveCallback(IterCmpVarPtr, IterCmpVarRef)
247257 }
248258
249259 cret := xSequenceLookupIter(x.GoPointer(), DataVar, IterCmpVarRef, CmpDataVar)
@@ -276,17 +286,19 @@ var xSequenceSearch func(uintptr, uintptr, uintptr, uintptr) *SequenceIter
276286 // unsorted.
277287 func (x *Sequence) Search(DataVar uintptr, CmpFuncVar *CompareDataFunc, CmpDataVar uintptr) *SequenceIter {
278288
279- CmpFuncVarPtr := uintptr(unsafe.Pointer(CmpFuncVar))
280289 var CmpFuncVarRef uintptr
281- if cbRefPtr, ok := GetCallback(CmpFuncVarPtr); ok {
282- CmpFuncVarRef = cbRefPtr
283- } else {
284- fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int {
285- cbFn := *CmpFuncVar
286- return cbFn(arg0, arg1, arg2)
290+ if CmpFuncVar != nil {
291+ CmpFuncVarPtr := uintptr(unsafe.Pointer(CmpFuncVar))
292+ if cbRefPtr, ok := GetCallback(CmpFuncVarPtr); ok {
293+ CmpFuncVarRef = cbRefPtr
294+ } else {
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)
287301 }
288- CmpFuncVarRef = purego.NewCallback(fcb)
289- SaveCallback(CmpFuncVarPtr, CmpFuncVarRef)
290302 }
291303
292304 cret := xSequenceSearch(x.GoPointer(), DataVar, CmpFuncVarRef, CmpDataVar)
@@ -310,17 +322,19 @@ var xSequenceSearchIter func(uintptr, uintptr, uintptr, uintptr) *SequenceIter
310322 // unsorted.
311323 func (x *Sequence) SearchIter(DataVar uintptr, IterCmpVar *SequenceIterCompareFunc, CmpDataVar uintptr) *SequenceIter {
312324
313- IterCmpVarPtr := uintptr(unsafe.Pointer(IterCmpVar))
314325 var IterCmpVarRef uintptr
315- if cbRefPtr, ok := GetCallback(IterCmpVarPtr); ok {
316- IterCmpVarRef = cbRefPtr
317- } else {
318- fcb := func(arg0 *SequenceIter, arg1 *SequenceIter, arg2 uintptr) int {
319- cbFn := *IterCmpVar
320- return cbFn(arg0, arg1, arg2)
326+ if IterCmpVar != nil {
327+ IterCmpVarPtr := uintptr(unsafe.Pointer(IterCmpVar))
328+ if cbRefPtr, ok := GetCallback(IterCmpVarPtr); ok {
329+ IterCmpVarRef = cbRefPtr
330+ } else {
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)
321337 }
322- IterCmpVarRef = purego.NewCallback(fcb)
323- SaveCallback(IterCmpVarPtr, IterCmpVarRef)
324338 }
325339
326340 cret := xSequenceSearchIter(x.GoPointer(), DataVar, IterCmpVarRef, CmpDataVar)
@@ -337,17 +351,19 @@ var xSequenceSort func(uintptr, uintptr, uintptr)
337351 // if the second comes before the first.
338352 func (x *Sequence) Sort(CmpFuncVar *CompareDataFunc, CmpDataVar uintptr) {
339353
340- CmpFuncVarPtr := uintptr(unsafe.Pointer(CmpFuncVar))
341354 var CmpFuncVarRef uintptr
342- if cbRefPtr, ok := GetCallback(CmpFuncVarPtr); ok {
343- CmpFuncVarRef = cbRefPtr
344- } else {
345- fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int {
346- cbFn := *CmpFuncVar
347- return cbFn(arg0, arg1, arg2)
355+ if CmpFuncVar != nil {
356+ CmpFuncVarPtr := uintptr(unsafe.Pointer(CmpFuncVar))
357+ if cbRefPtr, ok := GetCallback(CmpFuncVarPtr); ok {
358+ CmpFuncVarRef = cbRefPtr
359+ } else {
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)
348366 }
349- CmpFuncVarRef = purego.NewCallback(fcb)
350- SaveCallback(CmpFuncVarPtr, CmpFuncVarRef)
351367 }
352368
353369 xSequenceSort(x.GoPointer(), CmpFuncVarRef, CmpDataVar)
@@ -365,17 +381,19 @@ var xSequenceSortIter func(uintptr, uintptr, uintptr)
365381 // iterator comes before the first.
366382 func (x *Sequence) SortIter(CmpFuncVar *SequenceIterCompareFunc, CmpDataVar uintptr) {
367383
368- CmpFuncVarPtr := uintptr(unsafe.Pointer(CmpFuncVar))
369384 var CmpFuncVarRef uintptr
370- if cbRefPtr, ok := GetCallback(CmpFuncVarPtr); ok {
371- CmpFuncVarRef = cbRefPtr
372- } else {
373- fcb := func(arg0 *SequenceIter, arg1 *SequenceIter, arg2 uintptr) int {
374- cbFn := *CmpFuncVar
375- return cbFn(arg0, arg1, arg2)
385+ if CmpFuncVar != nil {
386+ CmpFuncVarPtr := uintptr(unsafe.Pointer(CmpFuncVar))
387+ if cbRefPtr, ok := GetCallback(CmpFuncVarPtr); ok {
388+ CmpFuncVarRef = cbRefPtr
389+ } else {
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)
376396 }
377- CmpFuncVarRef = purego.NewCallback(fcb)
378- SaveCallback(CmpFuncVarPtr, CmpFuncVarRef)
379397 }
380398
381399 xSequenceSortIter(x.GoPointer(), CmpFuncVarRef, CmpDataVar)
@@ -479,17 +497,19 @@ var xSequenceForeachRange func(*SequenceIter, *SequenceIter, uintptr, uintptr)
479497 // itself.
480498 func SequenceForeachRange(BeginVar *SequenceIter, EndVar *SequenceIter, FuncVar *Func, UserDataVar uintptr) {
481499
482- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
483500 var FuncVarRef uintptr
484- if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
485- FuncVarRef = cbRefPtr
486- } else {
487- fcb := func(arg0 uintptr, arg1 uintptr) {
488- cbFn := *FuncVar
489- cbFn(arg0, arg1)
501+ if FuncVar != nil {
502+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
503+ if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
504+ FuncVarRef = cbRefPtr
505+ } else {
506+ fcb := func(arg0 uintptr, arg1 uintptr) {
507+ cbFn := *FuncVar
508+ cbFn(arg0, arg1)
509+ }
510+ FuncVarRef = purego.NewCallback(fcb)
511+ SaveCallback(FuncVarPtr, FuncVarRef)
490512 }
491- FuncVarRef = purego.NewCallback(fcb)
492- SaveCallback(FuncVarPtr, FuncVarRef)
493513 }
494514
495515 xSequenceForeachRange(BeginVar, EndVar, FuncVarRef, UserDataVar)
@@ -606,17 +626,19 @@ var xSequenceSortChanged func(*SequenceIter, uintptr, uintptr)
606626 // the second item comes before the first.
607627 func SequenceSortChanged(IterVar *SequenceIter, CmpFuncVar *CompareDataFunc, CmpDataVar uintptr) {
608628
609- CmpFuncVarPtr := uintptr(unsafe.Pointer(CmpFuncVar))
610629 var CmpFuncVarRef uintptr
611- if cbRefPtr, ok := GetCallback(CmpFuncVarPtr); ok {
612- CmpFuncVarRef = cbRefPtr
613- } else {
614- fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int {
615- cbFn := *CmpFuncVar
616- return cbFn(arg0, arg1, arg2)
630+ if CmpFuncVar != nil {
631+ CmpFuncVarPtr := uintptr(unsafe.Pointer(CmpFuncVar))
632+ if cbRefPtr, ok := GetCallback(CmpFuncVarPtr); ok {
633+ CmpFuncVarRef = cbRefPtr
634+ } else {
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)
617641 }
618- CmpFuncVarRef = purego.NewCallback(fcb)
619- SaveCallback(CmpFuncVarPtr, CmpFuncVarRef)
620642 }
621643
622644 xSequenceSortChanged(IterVar, CmpFuncVarRef, CmpDataVar)
@@ -636,17 +658,19 @@ var xSequenceSortChangedIter func(*SequenceIter, uintptr, uintptr)
636658 // iterator comes before the first.
637659 func SequenceSortChangedIter(IterVar *SequenceIter, IterCmpVar *SequenceIterCompareFunc, CmpDataVar uintptr) {
638660
639- IterCmpVarPtr := uintptr(unsafe.Pointer(IterCmpVar))
640661 var IterCmpVarRef uintptr
641- if cbRefPtr, ok := GetCallback(IterCmpVarPtr); ok {
642- IterCmpVarRef = cbRefPtr
643- } else {
644- fcb := func(arg0 *SequenceIter, arg1 *SequenceIter, arg2 uintptr) int {
645- cbFn := *IterCmpVar
646- return cbFn(arg0, arg1, arg2)
662+ if IterCmpVar != nil {
663+ IterCmpVarPtr := uintptr(unsafe.Pointer(IterCmpVar))
664+ if cbRefPtr, ok := GetCallback(IterCmpVarPtr); ok {
665+ IterCmpVarRef = cbRefPtr
666+ } else {
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)
647673 }
648- IterCmpVarRef = purego.NewCallback(fcb)
649- SaveCallback(IterCmpVarPtr, IterCmpVarRef)
650674 }
651675
652676 xSequenceSortChangedIter(IterVar, IterCmpVarRef, CmpDataVar)
M v4/glib/gtestutils.go +132 -108
@@ -420,17 +420,19 @@ var xTestAddDataFunc func(string, uintptr, uintptr)
420420 // and it is recommended to do so even if it isn’t.
421421 func TestAddDataFunc(TestpathVar string, TestDataVar uintptr, TestFuncVar *TestDataFunc) {
422422
423- TestFuncVarPtr := uintptr(unsafe.Pointer(TestFuncVar))
424423 var TestFuncVarRef uintptr
425- if cbRefPtr, ok := GetCallback(TestFuncVarPtr); ok {
426- TestFuncVarRef = cbRefPtr
427- } else {
428- fcb := func(arg0 uintptr) {
429- cbFn := *TestFuncVar
430- cbFn(arg0)
424+ if TestFuncVar != nil {
425+ TestFuncVarPtr := uintptr(unsafe.Pointer(TestFuncVar))
426+ if cbRefPtr, ok := GetCallback(TestFuncVarPtr); ok {
427+ TestFuncVarRef = cbRefPtr
428+ } else {
429+ fcb := func(arg0 uintptr) {
430+ cbFn := *TestFuncVar
431+ cbFn(arg0)
432+ }
433+ TestFuncVarRef = purego.NewCallback(fcb)
434+ SaveCallback(TestFuncVarPtr, TestFuncVarRef)
431435 }
432- TestFuncVarRef = purego.NewCallback(fcb)
433- SaveCallback(TestFuncVarPtr, TestFuncVarRef)
434436 }
435437
436438 xTestAddDataFunc(TestpathVar, TestDataVar, TestFuncVarRef)
@@ -445,30 +447,34 @@ var xTestAddDataFuncFull func(string, uintptr, uintptr, uintptr)
445447 // is freeing @test_data after the test run is complete.
446448 func TestAddDataFuncFull(TestpathVar string, TestDataVar uintptr, TestFuncVar *TestDataFunc, DataFreeFuncVar *DestroyNotify) {
447449
448- TestFuncVarPtr := uintptr(unsafe.Pointer(TestFuncVar))
449450 var TestFuncVarRef uintptr
450- if cbRefPtr, ok := GetCallback(TestFuncVarPtr); ok {
451- TestFuncVarRef = cbRefPtr
452- } else {
453- fcb := func(arg0 uintptr) {
454- cbFn := *TestFuncVar
455- cbFn(arg0)
451+ if TestFuncVar != nil {
452+ TestFuncVarPtr := uintptr(unsafe.Pointer(TestFuncVar))
453+ if cbRefPtr, ok := GetCallback(TestFuncVarPtr); ok {
454+ TestFuncVarRef = cbRefPtr
455+ } else {
456+ fcb := func(arg0 uintptr) {
457+ cbFn := *TestFuncVar
458+ cbFn(arg0)
459+ }
460+ TestFuncVarRef = purego.NewCallback(fcb)
461+ SaveCallback(TestFuncVarPtr, TestFuncVarRef)
456462 }
457- TestFuncVarRef = purego.NewCallback(fcb)
458- SaveCallback(TestFuncVarPtr, TestFuncVarRef)
459463 }
460464
461- DataFreeFuncVarPtr := uintptr(unsafe.Pointer(DataFreeFuncVar))
462465 var DataFreeFuncVarRef uintptr
463- if cbRefPtr, ok := GetCallback(DataFreeFuncVarPtr); ok {
464- DataFreeFuncVarRef = cbRefPtr
465- } else {
466- fcb := func(arg0 uintptr) {
467- cbFn := *DataFreeFuncVar
468- cbFn(arg0)
466+ if DataFreeFuncVar != nil {
467+ DataFreeFuncVarPtr := uintptr(unsafe.Pointer(DataFreeFuncVar))
468+ if cbRefPtr, ok := GetCallback(DataFreeFuncVarPtr); ok {
469+ DataFreeFuncVarRef = cbRefPtr
470+ } else {
471+ fcb := func(arg0 uintptr) {
472+ cbFn := *DataFreeFuncVar
473+ cbFn(arg0)
474+ }
475+ DataFreeFuncVarRef = purego.NewCallback(fcb)
476+ SaveCallback(DataFreeFuncVarPtr, DataFreeFuncVarRef)
469477 }
470- DataFreeFuncVarRef = purego.NewCallback(fcb)
471- SaveCallback(DataFreeFuncVarPtr, DataFreeFuncVarRef)
472478 }
473479
474480 xTestAddDataFuncFull(TestpathVar, TestDataVar, TestFuncVarRef, DataFreeFuncVarRef)
@@ -493,17 +499,19 @@ var xTestAddFunc func(string, uintptr)
493499 // it is recommended to do so even if it isn’t.
494500 func TestAddFunc(TestpathVar string, TestFuncVar *TestFunc) {
495501
496- TestFuncVarPtr := uintptr(unsafe.Pointer(TestFuncVar))
497502 var TestFuncVarRef uintptr
498- if cbRefPtr, ok := GetCallback(TestFuncVarPtr); ok {
499- TestFuncVarRef = cbRefPtr
500- } else {
501- fcb := func() {
502- cbFn := *TestFuncVar
503- cbFn()
503+ if TestFuncVar != nil {
504+ TestFuncVarPtr := uintptr(unsafe.Pointer(TestFuncVar))
505+ if cbRefPtr, ok := GetCallback(TestFuncVarPtr); ok {
506+ TestFuncVarRef = cbRefPtr
507+ } else {
508+ fcb := func() {
509+ cbFn := *TestFuncVar
510+ cbFn()
511+ }
512+ TestFuncVarRef = purego.NewCallback(fcb)
513+ SaveCallback(TestFuncVarPtr, TestFuncVarRef)
504514 }
505- TestFuncVarRef = purego.NewCallback(fcb)
506- SaveCallback(TestFuncVarPtr, TestFuncVarRef)
507515 }
508516
509517 xTestAddFunc(TestpathVar, TestFuncVarRef)
@@ -514,43 +522,49 @@ var xTestAddVtable func(string, uint, uintptr, uintptr, uintptr, uintptr)
514522
515523 func TestAddVtable(TestpathVar string, DataSizeVar uint, TestDataVar uintptr, DataSetupVar *TestFixtureFunc, DataTestVar *TestFixtureFunc, DataTeardownVar *TestFixtureFunc) {
516524
517- DataSetupVarPtr := uintptr(unsafe.Pointer(DataSetupVar))
518525 var DataSetupVarRef uintptr
519- if cbRefPtr, ok := GetCallback(DataSetupVarPtr); ok {
520- DataSetupVarRef = cbRefPtr
521- } else {
522- fcb := func(arg0 uintptr, arg1 uintptr) {
523- cbFn := *DataSetupVar
524- cbFn(arg0, arg1)
526+ if DataSetupVar != nil {
527+ DataSetupVarPtr := uintptr(unsafe.Pointer(DataSetupVar))
528+ if cbRefPtr, ok := GetCallback(DataSetupVarPtr); ok {
529+ DataSetupVarRef = cbRefPtr
530+ } else {
531+ fcb := func(arg0 uintptr, arg1 uintptr) {
532+ cbFn := *DataSetupVar
533+ cbFn(arg0, arg1)
534+ }
535+ DataSetupVarRef = purego.NewCallback(fcb)
536+ SaveCallback(DataSetupVarPtr, DataSetupVarRef)
525537 }
526- DataSetupVarRef = purego.NewCallback(fcb)
527- SaveCallback(DataSetupVarPtr, DataSetupVarRef)
528538 }
529539
530- DataTestVarPtr := uintptr(unsafe.Pointer(DataTestVar))
531540 var DataTestVarRef uintptr
532- if cbRefPtr, ok := GetCallback(DataTestVarPtr); ok {
533- DataTestVarRef = cbRefPtr
534- } else {
535- fcb := func(arg0 uintptr, arg1 uintptr) {
536- cbFn := *DataTestVar
537- cbFn(arg0, arg1)
541+ if DataTestVar != nil {
542+ DataTestVarPtr := uintptr(unsafe.Pointer(DataTestVar))
543+ if cbRefPtr, ok := GetCallback(DataTestVarPtr); ok {
544+ DataTestVarRef = cbRefPtr
545+ } else {
546+ fcb := func(arg0 uintptr, arg1 uintptr) {
547+ cbFn := *DataTestVar
548+ cbFn(arg0, arg1)
549+ }
550+ DataTestVarRef = purego.NewCallback(fcb)
551+ SaveCallback(DataTestVarPtr, DataTestVarRef)
538552 }
539- DataTestVarRef = purego.NewCallback(fcb)
540- SaveCallback(DataTestVarPtr, DataTestVarRef)
541553 }
542554
543- DataTeardownVarPtr := uintptr(unsafe.Pointer(DataTeardownVar))
544555 var DataTeardownVarRef uintptr
545- if cbRefPtr, ok := GetCallback(DataTeardownVarPtr); ok {
546- DataTeardownVarRef = cbRefPtr
547- } else {
548- fcb := func(arg0 uintptr, arg1 uintptr) {
549- cbFn := *DataTeardownVar
550- cbFn(arg0, arg1)
556+ if DataTeardownVar != nil {
557+ DataTeardownVarPtr := uintptr(unsafe.Pointer(DataTeardownVar))
558+ if cbRefPtr, ok := GetCallback(DataTeardownVarPtr); ok {
559+ DataTeardownVarRef = cbRefPtr
560+ } else {
561+ fcb := func(arg0 uintptr, arg1 uintptr) {
562+ cbFn := *DataTeardownVar
563+ cbFn(arg0, arg1)
564+ }
565+ DataTeardownVarRef = purego.NewCallback(fcb)
566+ SaveCallback(DataTeardownVarPtr, DataTeardownVarRef)
551567 }
552- DataTeardownVarRef = purego.NewCallback(fcb)
553- SaveCallback(DataTeardownVarPtr, DataTeardownVarRef)
554568 }
555569
556570 xTestAddVtable(TestpathVar, DataSizeVar, TestDataVar, DataSetupVarRef, DataTestVarRef, DataTeardownVarRef)
@@ -657,43 +671,49 @@ var xTestCreateCase func(string, uint, uintptr, uintptr, uintptr, uintptr) *Test
657671 // varying @test_name and @data_test arguments.
658672 func TestCreateCase(TestNameVar string, DataSizeVar uint, TestDataVar uintptr, DataSetupVar *TestFixtureFunc, DataTestVar *TestFixtureFunc, DataTeardownVar *TestFixtureFunc) *TestCase {
659673
660- DataSetupVarPtr := uintptr(unsafe.Pointer(DataSetupVar))
661674 var DataSetupVarRef uintptr
662- if cbRefPtr, ok := GetCallback(DataSetupVarPtr); ok {
663- DataSetupVarRef = cbRefPtr
664- } else {
665- fcb := func(arg0 uintptr, arg1 uintptr) {
666- cbFn := *DataSetupVar
667- cbFn(arg0, arg1)
675+ if DataSetupVar != nil {
676+ DataSetupVarPtr := uintptr(unsafe.Pointer(DataSetupVar))
677+ if cbRefPtr, ok := GetCallback(DataSetupVarPtr); ok {
678+ DataSetupVarRef = cbRefPtr
679+ } else {
680+ fcb := func(arg0 uintptr, arg1 uintptr) {
681+ cbFn := *DataSetupVar
682+ cbFn(arg0, arg1)
683+ }
684+ DataSetupVarRef = purego.NewCallback(fcb)
685+ SaveCallback(DataSetupVarPtr, DataSetupVarRef)
668686 }
669- DataSetupVarRef = purego.NewCallback(fcb)
670- SaveCallback(DataSetupVarPtr, DataSetupVarRef)
671687 }
672688
673- DataTestVarPtr := uintptr(unsafe.Pointer(DataTestVar))
674689 var DataTestVarRef uintptr
675- if cbRefPtr, ok := GetCallback(DataTestVarPtr); ok {
676- DataTestVarRef = cbRefPtr
677- } else {
678- fcb := func(arg0 uintptr, arg1 uintptr) {
679- cbFn := *DataTestVar
680- cbFn(arg0, arg1)
690+ if DataTestVar != nil {
691+ DataTestVarPtr := uintptr(unsafe.Pointer(DataTestVar))
692+ if cbRefPtr, ok := GetCallback(DataTestVarPtr); ok {
693+ DataTestVarRef = cbRefPtr
694+ } else {
695+ fcb := func(arg0 uintptr, arg1 uintptr) {
696+ cbFn := *DataTestVar
697+ cbFn(arg0, arg1)
698+ }
699+ DataTestVarRef = purego.NewCallback(fcb)
700+ SaveCallback(DataTestVarPtr, DataTestVarRef)
681701 }
682- DataTestVarRef = purego.NewCallback(fcb)
683- SaveCallback(DataTestVarPtr, DataTestVarRef)
684702 }
685703
686- DataTeardownVarPtr := uintptr(unsafe.Pointer(DataTeardownVar))
687704 var DataTeardownVarRef uintptr
688- if cbRefPtr, ok := GetCallback(DataTeardownVarPtr); ok {
689- DataTeardownVarRef = cbRefPtr
690- } else {
691- fcb := func(arg0 uintptr, arg1 uintptr) {
692- cbFn := *DataTeardownVar
693- cbFn(arg0, arg1)
705+ if DataTeardownVar != nil {
706+ DataTeardownVarPtr := uintptr(unsafe.Pointer(DataTeardownVar))
707+ if cbRefPtr, ok := GetCallback(DataTeardownVarPtr); ok {
708+ DataTeardownVarRef = cbRefPtr
709+ } else {
710+ fcb := func(arg0 uintptr, arg1 uintptr) {
711+ cbFn := *DataTeardownVar
712+ cbFn(arg0, arg1)
713+ }
714+ DataTeardownVarRef = purego.NewCallback(fcb)
715+ SaveCallback(DataTeardownVarPtr, DataTeardownVarRef)
694716 }
695- DataTeardownVarRef = purego.NewCallback(fcb)
696- SaveCallback(DataTeardownVarPtr, DataTeardownVarRef)
697717 }
698718
699719 cret := xTestCreateCase(TestNameVar, DataSizeVar, TestDataVar, DataSetupVarRef, DataTestVarRef, DataTeardownVarRef)
@@ -1009,17 +1029,19 @@ var xTestLogSetFatalHandler func(uintptr, uintptr)
10091029 // [Using Structured Logging](logging.html#using-structured-logging).
10101030 func TestLogSetFatalHandler(LogFuncVar *TestLogFatalFunc, UserDataVar uintptr) {
10111031
1012- LogFuncVarPtr := uintptr(unsafe.Pointer(LogFuncVar))
10131032 var LogFuncVarRef uintptr
1014- if cbRefPtr, ok := GetCallback(LogFuncVarPtr); ok {
1015- LogFuncVarRef = cbRefPtr
1016- } else {
1017- fcb := func(arg0 string, arg1 LogLevelFlags, arg2 string, arg3 uintptr) bool {
1018- cbFn := *LogFuncVar
1019- return cbFn(arg0, arg1, arg2, arg3)
1033+ if LogFuncVar != nil {
1034+ LogFuncVarPtr := uintptr(unsafe.Pointer(LogFuncVar))
1035+ if cbRefPtr, ok := GetCallback(LogFuncVarPtr); ok {
1036+ LogFuncVarRef = cbRefPtr
1037+ } else {
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)
10201044 }
1021- LogFuncVarRef = purego.NewCallback(fcb)
1022- SaveCallback(LogFuncVarPtr, LogFuncVarRef)
10231045 }
10241046
10251047 xTestLogSetFatalHandler(LogFuncVarRef, UserDataVar)
@@ -1082,17 +1104,19 @@ var xTestQueueDestroy func(uintptr, uintptr)
10821104 // before `A()` during teardown.
10831105 func TestQueueDestroy(DestroyFuncVar *DestroyNotify, DestroyDataVar uintptr) {
10841106
1085- DestroyFuncVarPtr := uintptr(unsafe.Pointer(DestroyFuncVar))
10861107 var DestroyFuncVarRef uintptr
1087- if cbRefPtr, ok := GetCallback(DestroyFuncVarPtr); ok {
1088- DestroyFuncVarRef = cbRefPtr
1089- } else {
1090- fcb := func(arg0 uintptr) {
1091- cbFn := *DestroyFuncVar
1092- cbFn(arg0)
1108+ if DestroyFuncVar != nil {
1109+ DestroyFuncVarPtr := uintptr(unsafe.Pointer(DestroyFuncVar))
1110+ if cbRefPtr, ok := GetCallback(DestroyFuncVarPtr); ok {
1111+ DestroyFuncVarRef = cbRefPtr
1112+ } else {
1113+ fcb := func(arg0 uintptr) {
1114+ cbFn := *DestroyFuncVar
1115+ cbFn(arg0)
1116+ }
1117+ DestroyFuncVarRef = purego.NewCallback(fcb)
1118+ SaveCallback(DestroyFuncVarPtr, DestroyFuncVarRef)
10931119 }
1094- DestroyFuncVarRef = purego.NewCallback(fcb)
1095- SaveCallback(DestroyFuncVarPtr, DestroyFuncVarRef)
10961120 }
10971121
10981122 xTestQueueDestroy(DestroyFuncVarRef, DestroyDataVar)
M v4/glib/gthread.go +88 -72
@@ -281,17 +281,19 @@ var xOnceImpl func(uintptr, uintptr, uintptr) uintptr
281281
282282 func (x *Once) Impl(FuncVar *ThreadFunc, ArgVar uintptr) uintptr {
283283
284- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
285284 var FuncVarRef uintptr
286- if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
287- FuncVarRef = cbRefPtr
288- } else {
289- fcb := func(arg0 uintptr) uintptr {
290- cbFn := *FuncVar
291- return cbFn(arg0)
285+ if FuncVar != nil {
286+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
287+ if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
288+ FuncVarRef = cbRefPtr
289+ } else {
290+ fcb := func(arg0 uintptr) uintptr {
291+ cbFn := *FuncVar
292+ return cbFn(arg0)
293+ }
294+ FuncVarRef = purego.NewCallback(fcb)
295+ SaveCallback(FuncVarPtr, FuncVarRef)
292296 }
293- FuncVarRef = purego.NewCallback(fcb)
294- SaveCallback(FuncVarPtr, FuncVarRef)
295297 }
296298
297299 cret := xOnceImpl(x.GoPointer(), FuncVarRef, ArgVar)
@@ -872,17 +874,19 @@ var xStaticPrivateSet func(uintptr, uintptr, uintptr)
872874 // @notify is used quite differently from @destructor in g_private_new().
873875 func (x *StaticPrivate) Set(DataVar uintptr, NotifyVar *DestroyNotify) {
874876
875- NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
876877 var NotifyVarRef uintptr
877- if cbRefPtr, ok := GetCallback(NotifyVarPtr); ok {
878- NotifyVarRef = cbRefPtr
879- } else {
880- fcb := func(arg0 uintptr) {
881- cbFn := *NotifyVar
882- cbFn(arg0)
878+ if NotifyVar != nil {
879+ NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
880+ if cbRefPtr, ok := GetCallback(NotifyVarPtr); ok {
881+ NotifyVarRef = cbRefPtr
882+ } else {
883+ fcb := func(arg0 uintptr) {
884+ cbFn := *NotifyVar
885+ cbFn(arg0)
886+ }
887+ NotifyVarRef = purego.NewCallback(fcb)
888+ SaveCallback(NotifyVarPtr, NotifyVarRef)
883889 }
884- NotifyVarRef = purego.NewCallback(fcb)
885- SaveCallback(NotifyVarPtr, NotifyVarRef)
886890 }
887891
888892 xStaticPrivateSet(x.GoPointer(), DataVar, NotifyVarRef)
@@ -1276,17 +1280,19 @@ var xNewThread func(string, uintptr, uintptr) *Thread
12761280 // POSIX and all threads inherit their parent thread's priority.
12771281 func NewThread(NameVar string, FuncVar *ThreadFunc, DataVar uintptr) *Thread {
12781282
1279- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
12801283 var FuncVarRef uintptr
1281- if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
1282- FuncVarRef = cbRefPtr
1283- } else {
1284- fcb := func(arg0 uintptr) uintptr {
1285- cbFn := *FuncVar
1286- return cbFn(arg0)
1284+ if FuncVar != nil {
1285+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
1286+ if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
1287+ FuncVarRef = cbRefPtr
1288+ } else {
1289+ fcb := func(arg0 uintptr) uintptr {
1290+ cbFn := *FuncVar
1291+ return cbFn(arg0)
1292+ }
1293+ FuncVarRef = purego.NewCallback(fcb)
1294+ SaveCallback(FuncVarPtr, FuncVarRef)
12871295 }
1288- FuncVarRef = purego.NewCallback(fcb)
1289- SaveCallback(FuncVarPtr, FuncVarRef)
12901296 }
12911297
12921298 cret := xNewThread(NameVar, FuncVarRef, DataVar)
@@ -1303,17 +1309,19 @@ var xThreadTryNew func(string, uintptr, uintptr, **Error) *Thread
13031309 func ThreadTryNew(NameVar string, FuncVar *ThreadFunc, DataVar uintptr) (*Thread, error) {
13041310 var cerr *Error
13051311
1306- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
13071312 var FuncVarRef uintptr
1308- if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
1309- FuncVarRef = cbRefPtr
1310- } else {
1311- fcb := func(arg0 uintptr) uintptr {
1312- cbFn := *FuncVar
1313- return cbFn(arg0)
1313+ if FuncVar != nil {
1314+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
1315+ if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
1316+ FuncVarRef = cbRefPtr
1317+ } else {
1318+ fcb := func(arg0 uintptr) uintptr {
1319+ cbFn := *FuncVar
1320+ return cbFn(arg0)
1321+ }
1322+ FuncVarRef = purego.NewCallback(fcb)
1323+ SaveCallback(FuncVarPtr, FuncVarRef)
13141324 }
1315- FuncVarRef = purego.NewCallback(fcb)
1316- SaveCallback(FuncVarPtr, FuncVarRef)
13171325 }
13181326
13191327 cret := xThreadTryNew(NameVar, FuncVarRef, DataVar, &cerr)
@@ -2212,17 +2220,19 @@ var xPrivateNew func(uintptr) *Private
22122220 // Creates a new #GPrivate.
22132221 func PrivateNew(NotifyVar *DestroyNotify) *Private {
22142222
2215- NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
22162223 var NotifyVarRef uintptr
2217- if cbRefPtr, ok := GetCallback(NotifyVarPtr); ok {
2218- NotifyVarRef = cbRefPtr
2219- } else {
2220- fcb := func(arg0 uintptr) {
2221- cbFn := *NotifyVar
2222- cbFn(arg0)
2224+ if NotifyVar != nil {
2225+ NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
2226+ if cbRefPtr, ok := GetCallback(NotifyVarPtr); ok {
2227+ NotifyVarRef = cbRefPtr
2228+ } else {
2229+ fcb := func(arg0 uintptr) {
2230+ cbFn := *NotifyVar
2231+ cbFn(arg0)
2232+ }
2233+ NotifyVarRef = purego.NewCallback(fcb)
2234+ SaveCallback(NotifyVarPtr, NotifyVarRef)
22232235 }
2224- NotifyVarRef = purego.NewCallback(fcb)
2225- SaveCallback(NotifyVarPtr, NotifyVarRef)
22262236 }
22272237
22282238 cret := xPrivateNew(NotifyVarRef)
@@ -2246,17 +2256,19 @@ var xThreadCreate func(uintptr, uintptr, bool, **Error) *Thread
22462256 func ThreadCreate(FuncVar *ThreadFunc, DataVar uintptr, JoinableVar bool) (*Thread, error) {
22472257 var cerr *Error
22482258
2249- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
22502259 var FuncVarRef uintptr
2251- if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
2252- FuncVarRef = cbRefPtr
2253- } else {
2254- fcb := func(arg0 uintptr) uintptr {
2255- cbFn := *FuncVar
2256- return cbFn(arg0)
2260+ if FuncVar != nil {
2261+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
2262+ if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
2263+ FuncVarRef = cbRefPtr
2264+ } else {
2265+ fcb := func(arg0 uintptr) uintptr {
2266+ cbFn := *FuncVar
2267+ return cbFn(arg0)
2268+ }
2269+ FuncVarRef = purego.NewCallback(fcb)
2270+ SaveCallback(FuncVarPtr, FuncVarRef)
22572271 }
2258- FuncVarRef = purego.NewCallback(fcb)
2259- SaveCallback(FuncVarPtr, FuncVarRef)
22602272 }
22612273
22622274 cret := xThreadCreate(FuncVarRef, DataVar, JoinableVar, &cerr)
@@ -2273,17 +2285,19 @@ var xThreadCreateFull func(uintptr, uintptr, uint32, bool, bool, ThreadPriority,
22732285 func ThreadCreateFull(FuncVar *ThreadFunc, DataVar uintptr, StackSizeVar uint32, JoinableVar bool, BoundVar bool, PriorityVar ThreadPriority) (*Thread, error) {
22742286 var cerr *Error
22752287
2276- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
22772288 var FuncVarRef uintptr
2278- if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
2279- FuncVarRef = cbRefPtr
2280- } else {
2281- fcb := func(arg0 uintptr) uintptr {
2282- cbFn := *FuncVar
2283- return cbFn(arg0)
2289+ if FuncVar != nil {
2290+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
2291+ if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
2292+ FuncVarRef = cbRefPtr
2293+ } else {
2294+ fcb := func(arg0 uintptr) uintptr {
2295+ cbFn := *FuncVar
2296+ return cbFn(arg0)
2297+ }
2298+ FuncVarRef = purego.NewCallback(fcb)
2299+ SaveCallback(FuncVarPtr, FuncVarRef)
22842300 }
2285- FuncVarRef = purego.NewCallback(fcb)
2286- SaveCallback(FuncVarPtr, FuncVarRef)
22872301 }
22882302
22892303 cret := xThreadCreateFull(FuncVarRef, DataVar, StackSizeVar, JoinableVar, BoundVar, PriorityVar, &cerr)
@@ -2330,17 +2344,19 @@ var xThreadForeach func(uintptr, uintptr)
23302344 // which is quadratic in the number of existing threads.
23312345 func ThreadForeach(ThreadFuncVar *Func, UserDataVar uintptr) {
23322346
2333- ThreadFuncVarPtr := uintptr(unsafe.Pointer(ThreadFuncVar))
23342347 var ThreadFuncVarRef uintptr
2335- if cbRefPtr, ok := GetCallback(ThreadFuncVarPtr); ok {
2336- ThreadFuncVarRef = cbRefPtr
2337- } else {
2338- fcb := func(arg0 uintptr, arg1 uintptr) {
2339- cbFn := *ThreadFuncVar
2340- cbFn(arg0, arg1)
2348+ if ThreadFuncVar != nil {
2349+ ThreadFuncVarPtr := uintptr(unsafe.Pointer(ThreadFuncVar))
2350+ if cbRefPtr, ok := GetCallback(ThreadFuncVarPtr); ok {
2351+ ThreadFuncVarRef = cbRefPtr
2352+ } else {
2353+ fcb := func(arg0 uintptr, arg1 uintptr) {
2354+ cbFn := *ThreadFuncVar
2355+ cbFn(arg0, arg1)
2356+ }
2357+ ThreadFuncVarRef = purego.NewCallback(fcb)
2358+ SaveCallback(ThreadFuncVarPtr, ThreadFuncVarRef)
23412359 }
2342- ThreadFuncVarRef = purego.NewCallback(fcb)
2343- SaveCallback(ThreadFuncVarPtr, ThreadFuncVarRef)
23442360 }
23452361
23462362 xThreadForeach(ThreadFuncVarRef, UserDataVar)
M v4/glib/gthreadpool.go +11 -9
@@ -172,17 +172,19 @@ var xThreadPoolSetSortFunction func(uintptr, uintptr, uintptr)
172172 // created.
173173 func (x *ThreadPool) SetSortFunction(FuncVar *CompareDataFunc, UserDataVar uintptr) {
174174
175- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
176175 var FuncVarRef uintptr
177- if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
178- FuncVarRef = cbRefPtr
179- } else {
180- fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int {
181- cbFn := *FuncVar
182- return cbFn(arg0, arg1, arg2)
176+ if FuncVar != nil {
177+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
178+ if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
179+ FuncVarRef = cbRefPtr
180+ } else {
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)
183187 }
184- FuncVarRef = purego.NewCallback(fcb)
185- SaveCallback(FuncVarPtr, FuncVarRef)
186188 }
187189
188190 xThreadPoolSetSortFunction(x.GoPointer(), FuncVarRef, UserDataVar)
M v4/glib/gtree.go +110 -90
@@ -44,17 +44,19 @@ var xNewTree func(uintptr) *Tree
4444 // Creates a new #GTree.
4545 func NewTree(KeyCompareFuncVar *CompareFunc) *Tree {
4646
47- KeyCompareFuncVarPtr := uintptr(unsafe.Pointer(KeyCompareFuncVar))
4847 var KeyCompareFuncVarRef uintptr
49- if cbRefPtr, ok := GetCallback(KeyCompareFuncVarPtr); ok {
50- KeyCompareFuncVarRef = cbRefPtr
51- } else {
52- fcb := func(arg0 uintptr, arg1 uintptr) int {
53- cbFn := *KeyCompareFuncVar
54- return cbFn(arg0, arg1)
48+ if KeyCompareFuncVar != nil {
49+ KeyCompareFuncVarPtr := uintptr(unsafe.Pointer(KeyCompareFuncVar))
50+ if cbRefPtr, ok := GetCallback(KeyCompareFuncVarPtr); ok {
51+ KeyCompareFuncVarRef = cbRefPtr
52+ } else {
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)
5559 }
56- KeyCompareFuncVarRef = purego.NewCallback(fcb)
57- SaveCallback(KeyCompareFuncVarPtr, KeyCompareFuncVarRef)
5860 }
5961
6062 cret := xNewTree(KeyCompareFuncVarRef)
@@ -68,43 +70,49 @@ var xNewTreeFull func(uintptr, uintptr, uintptr, uintptr) *Tree
6870 // removing the entry from the #GTree.
6971 func NewTreeFull(KeyCompareFuncVar *CompareDataFunc, KeyCompareDataVar uintptr, KeyDestroyFuncVar *DestroyNotify, ValueDestroyFuncVar *DestroyNotify) *Tree {
7072
71- KeyCompareFuncVarPtr := uintptr(unsafe.Pointer(KeyCompareFuncVar))
7273 var KeyCompareFuncVarRef uintptr
73- if cbRefPtr, ok := GetCallback(KeyCompareFuncVarPtr); ok {
74- KeyCompareFuncVarRef = cbRefPtr
75- } else {
76- fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int {
77- cbFn := *KeyCompareFuncVar
78- return cbFn(arg0, arg1, arg2)
74+ if KeyCompareFuncVar != nil {
75+ KeyCompareFuncVarPtr := uintptr(unsafe.Pointer(KeyCompareFuncVar))
76+ if cbRefPtr, ok := GetCallback(KeyCompareFuncVarPtr); ok {
77+ KeyCompareFuncVarRef = cbRefPtr
78+ } else {
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)
7985 }
80- KeyCompareFuncVarRef = purego.NewCallback(fcb)
81- SaveCallback(KeyCompareFuncVarPtr, KeyCompareFuncVarRef)
8286 }
8387
84- KeyDestroyFuncVarPtr := uintptr(unsafe.Pointer(KeyDestroyFuncVar))
8588 var KeyDestroyFuncVarRef uintptr
86- if cbRefPtr, ok := GetCallback(KeyDestroyFuncVarPtr); ok {
87- KeyDestroyFuncVarRef = cbRefPtr
88- } else {
89- fcb := func(arg0 uintptr) {
90- cbFn := *KeyDestroyFuncVar
91- cbFn(arg0)
89+ if KeyDestroyFuncVar != nil {
90+ KeyDestroyFuncVarPtr := uintptr(unsafe.Pointer(KeyDestroyFuncVar))
91+ if cbRefPtr, ok := GetCallback(KeyDestroyFuncVarPtr); ok {
92+ KeyDestroyFuncVarRef = cbRefPtr
93+ } else {
94+ fcb := func(arg0 uintptr) {
95+ cbFn := *KeyDestroyFuncVar
96+ cbFn(arg0)
97+ }
98+ KeyDestroyFuncVarRef = purego.NewCallback(fcb)
99+ SaveCallback(KeyDestroyFuncVarPtr, KeyDestroyFuncVarRef)
92100 }
93- KeyDestroyFuncVarRef = purego.NewCallback(fcb)
94- SaveCallback(KeyDestroyFuncVarPtr, KeyDestroyFuncVarRef)
95101 }
96102
97- ValueDestroyFuncVarPtr := uintptr(unsafe.Pointer(ValueDestroyFuncVar))
98103 var ValueDestroyFuncVarRef uintptr
99- if cbRefPtr, ok := GetCallback(ValueDestroyFuncVarPtr); ok {
100- ValueDestroyFuncVarRef = cbRefPtr
101- } else {
102- fcb := func(arg0 uintptr) {
103- cbFn := *ValueDestroyFuncVar
104- cbFn(arg0)
104+ if ValueDestroyFuncVar != nil {
105+ ValueDestroyFuncVarPtr := uintptr(unsafe.Pointer(ValueDestroyFuncVar))
106+ if cbRefPtr, ok := GetCallback(ValueDestroyFuncVarPtr); ok {
107+ ValueDestroyFuncVarRef = cbRefPtr
108+ } else {
109+ fcb := func(arg0 uintptr) {
110+ cbFn := *ValueDestroyFuncVar
111+ cbFn(arg0)
112+ }
113+ ValueDestroyFuncVarRef = purego.NewCallback(fcb)
114+ SaveCallback(ValueDestroyFuncVarPtr, ValueDestroyFuncVarRef)
105115 }
106- ValueDestroyFuncVarRef = purego.NewCallback(fcb)
107- SaveCallback(ValueDestroyFuncVarPtr, ValueDestroyFuncVarRef)
108116 }
109117
110118 cret := xNewTreeFull(KeyCompareFuncVarRef, KeyCompareDataVar, KeyDestroyFuncVarRef, ValueDestroyFuncVarRef)
@@ -117,17 +125,19 @@ var xNewTreeWithData func(uintptr, uintptr) *Tree
117125 // See g_tree_new() for more details.
118126 func NewTreeWithData(KeyCompareFuncVar *CompareDataFunc, KeyCompareDataVar uintptr) *Tree {
119127
120- KeyCompareFuncVarPtr := uintptr(unsafe.Pointer(KeyCompareFuncVar))
121128 var KeyCompareFuncVarRef uintptr
122- if cbRefPtr, ok := GetCallback(KeyCompareFuncVarPtr); ok {
123- KeyCompareFuncVarRef = cbRefPtr
124- } else {
125- fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int {
126- cbFn := *KeyCompareFuncVar
127- return cbFn(arg0, arg1, arg2)
129+ if KeyCompareFuncVar != nil {
130+ KeyCompareFuncVarPtr := uintptr(unsafe.Pointer(KeyCompareFuncVar))
131+ if cbRefPtr, ok := GetCallback(KeyCompareFuncVarPtr); ok {
132+ KeyCompareFuncVarRef = cbRefPtr
133+ } else {
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)
128140 }
129- KeyCompareFuncVarRef = purego.NewCallback(fcb)
130- SaveCallback(KeyCompareFuncVarPtr, KeyCompareFuncVarRef)
131141 }
132142
133143 cret := xNewTreeWithData(KeyCompareFuncVarRef, KeyCompareDataVar)
@@ -160,17 +170,19 @@ var xTreeForeach func(uintptr, uintptr, uintptr)
160170 // the tree, then walk the list and remove each item.
161171 func (x *Tree) Foreach(FuncVar *TraverseFunc, UserDataVar uintptr) {
162172
163- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
164173 var FuncVarRef uintptr
165- if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
166- FuncVarRef = cbRefPtr
167- } else {
168- fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) bool {
169- cbFn := *FuncVar
170- return cbFn(arg0, arg1, arg2)
174+ if FuncVar != nil {
175+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
176+ if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
177+ FuncVarRef = cbRefPtr
178+ } else {
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)
171185 }
172- FuncVarRef = purego.NewCallback(fcb)
173- SaveCallback(FuncVarPtr, FuncVarRef)
174186 }
175187
176188 xTreeForeach(x.GoPointer(), FuncVarRef, UserDataVar)
@@ -189,17 +201,19 @@ var xTreeForeachNode func(uintptr, uintptr, uintptr)
189201 // the tree, then walk the list and remove each item.
190202 func (x *Tree) ForeachNode(FuncVar *TraverseNodeFunc, UserDataVar uintptr) {
191203
192- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
193204 var FuncVarRef uintptr
194- if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
195- FuncVarRef = cbRefPtr
196- } else {
197- fcb := func(arg0 *TreeNode, arg1 uintptr) bool {
198- cbFn := *FuncVar
199- return cbFn(arg0, arg1)
205+ if FuncVar != nil {
206+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
207+ if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
208+ FuncVarRef = cbRefPtr
209+ } else {
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)
200216 }
201- FuncVarRef = purego.NewCallback(fcb)
202- SaveCallback(FuncVarPtr, FuncVarRef)
203217 }
204218
205219 xTreeForeachNode(x.GoPointer(), FuncVarRef, UserDataVar)
@@ -408,17 +422,19 @@ var xTreeSearch func(uintptr, uintptr, uintptr) uintptr
408422 // pairs that have a larger key.
409423 func (x *Tree) Search(SearchFuncVar *CompareFunc, UserDataVar uintptr) uintptr {
410424
411- SearchFuncVarPtr := uintptr(unsafe.Pointer(SearchFuncVar))
412425 var SearchFuncVarRef uintptr
413- if cbRefPtr, ok := GetCallback(SearchFuncVarPtr); ok {
414- SearchFuncVarRef = cbRefPtr
415- } else {
416- fcb := func(arg0 uintptr, arg1 uintptr) int {
417- cbFn := *SearchFuncVar
418- return cbFn(arg0, arg1)
426+ if SearchFuncVar != nil {
427+ SearchFuncVarPtr := uintptr(unsafe.Pointer(SearchFuncVar))
428+ if cbRefPtr, ok := GetCallback(SearchFuncVarPtr); ok {
429+ SearchFuncVarRef = cbRefPtr
430+ } else {
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)
419437 }
420- SearchFuncVarRef = purego.NewCallback(fcb)
421- SaveCallback(SearchFuncVarPtr, SearchFuncVarRef)
422438 }
423439
424440 cret := xTreeSearch(x.GoPointer(), SearchFuncVarRef, UserDataVar)
@@ -438,17 +454,19 @@ var xTreeSearchNode func(uintptr, uintptr, uintptr) *TreeNode
438454 // pairs that have a larger key.
439455 func (x *Tree) SearchNode(SearchFuncVar *CompareFunc, UserDataVar uintptr) *TreeNode {
440456
441- SearchFuncVarPtr := uintptr(unsafe.Pointer(SearchFuncVar))
442457 var SearchFuncVarRef uintptr
443- if cbRefPtr, ok := GetCallback(SearchFuncVarPtr); ok {
444- SearchFuncVarRef = cbRefPtr
445- } else {
446- fcb := func(arg0 uintptr, arg1 uintptr) int {
447- cbFn := *SearchFuncVar
448- return cbFn(arg0, arg1)
458+ if SearchFuncVar != nil {
459+ SearchFuncVarPtr := uintptr(unsafe.Pointer(SearchFuncVar))
460+ if cbRefPtr, ok := GetCallback(SearchFuncVarPtr); ok {
461+ SearchFuncVarRef = cbRefPtr
462+ } else {
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)
449469 }
450- SearchFuncVarRef = purego.NewCallback(fcb)
451- SaveCallback(SearchFuncVarPtr, SearchFuncVarRef)
452470 }
453471
454472 cret := xTreeSearchNode(x.GoPointer(), SearchFuncVarRef, UserDataVar)
@@ -472,17 +490,19 @@ var xTreeTraverse func(uintptr, uintptr, TraverseType, uintptr)
472490 // Calls the given function for each node in the #GTree.
473491 func (x *Tree) Traverse(TraverseFuncVar *TraverseFunc, TraverseTypeVar TraverseType, UserDataVar uintptr) {
474492
475- TraverseFuncVarPtr := uintptr(unsafe.Pointer(TraverseFuncVar))
476493 var TraverseFuncVarRef uintptr
477- if cbRefPtr, ok := GetCallback(TraverseFuncVarPtr); ok {
478- TraverseFuncVarRef = cbRefPtr
479- } else {
480- fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) bool {
481- cbFn := *TraverseFuncVar
482- return cbFn(arg0, arg1, arg2)
494+ if TraverseFuncVar != nil {
495+ TraverseFuncVarPtr := uintptr(unsafe.Pointer(TraverseFuncVar))
496+ if cbRefPtr, ok := GetCallback(TraverseFuncVarPtr); ok {
497+ TraverseFuncVarRef = cbRefPtr
498+ } else {
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)
483505 }
484- TraverseFuncVarRef = purego.NewCallback(fcb)
485- SaveCallback(TraverseFuncVarPtr, TraverseFuncVarRef)
486506 }
487507
488508 xTreeTraverse(x.GoPointer(), TraverseFuncVarRef, TraverseTypeVar, UserDataVar)
M v4/glib/gutils.go +11 -9
@@ -121,17 +121,19 @@ var xAtexit func(uintptr)
121121 // program.
122122 func Atexit(FuncVar *VoidFunc) {
123123
124- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
125124 var FuncVarRef uintptr
126- if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
127- FuncVarRef = cbRefPtr
128- } else {
129- fcb := func() {
130- cbFn := *FuncVar
131- cbFn()
125+ if FuncVar != nil {
126+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
127+ if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
128+ FuncVarRef = cbRefPtr
129+ } else {
130+ fcb := func() {
131+ cbFn := *FuncVar
132+ cbFn()
133+ }
134+ FuncVarRef = purego.NewCallback(fcb)
135+ SaveCallback(FuncVarPtr, FuncVarRef)
132136 }
133- FuncVarRef = purego.NewCallback(fcb)
134- SaveCallback(FuncVarPtr, FuncVarRef)
135137 }
136138
137139 xAtexit(FuncVarRef)
M v4/glib/gvariant.go +11 -9
@@ -466,17 +466,19 @@ var xNewVariantFromData func(*VariantType, []byte, uint, bool, uintptr, uintptr)
466466 // process.
467467 func NewVariantFromData(TypeVar *VariantType, DataVar []byte, SizeVar uint, TrustedVar bool, NotifyVar *DestroyNotify, UserDataVar uintptr) *Variant {
468468
469- NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
470469 var NotifyVarRef uintptr
471- if cbRefPtr, ok := GetCallback(NotifyVarPtr); ok {
472- NotifyVarRef = cbRefPtr
473- } else {
474- fcb := func(arg0 uintptr) {
475- cbFn := *NotifyVar
476- cbFn(arg0)
470+ if NotifyVar != nil {
471+ NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
472+ if cbRefPtr, ok := GetCallback(NotifyVarPtr); ok {
473+ NotifyVarRef = cbRefPtr
474+ } else {
475+ fcb := func(arg0 uintptr) {
476+ cbFn := *NotifyVar
477+ cbFn(arg0)
478+ }
479+ NotifyVarRef = purego.NewCallback(fcb)
480+ SaveCallback(NotifyVarPtr, NotifyVarRef)
477481 }
478- NotifyVarRef = purego.NewCallback(fcb)
479- SaveCallback(NotifyVarPtr, NotifyVarRef)
480482 }
481483
482484 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
103103 }
104104 }
105105
106- UserDataDestroyVarPtr := uintptr(unsafe.Pointer(UserDataDestroyVar))
107106 var UserDataDestroyVarRef uintptr
108- if cbRefPtr, ok := glib.GetCallback(UserDataDestroyVarPtr); ok {
109- UserDataDestroyVarRef = cbRefPtr
110- } else {
111- fcb := func(arg0 uintptr) {
112- cbFn := *UserDataDestroyVar
113- cbFn(arg0)
107+ if UserDataDestroyVar != nil {
108+ UserDataDestroyVarPtr := uintptr(unsafe.Pointer(UserDataDestroyVar))
109+ if cbRefPtr, ok := glib.GetCallback(UserDataDestroyVarPtr); ok {
110+ UserDataDestroyVarRef = cbRefPtr
111+ } else {
112+ fcb := func(arg0 uintptr) {
113+ cbFn := *UserDataDestroyVar
114+ cbFn(arg0)
115+ }
116+ UserDataDestroyVarRef = purego.NewCallback(fcb)
117+ glib.SaveCallback(UserDataDestroyVarPtr, UserDataDestroyVarRef)
114118 }
115- UserDataDestroyVarRef = purego.NewCallback(fcb)
116- glib.SaveCallback(UserDataDestroyVarPtr, UserDataDestroyVarRef)
117119 }
118120
119121 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
4949 // will create the appropriate `*_get_type()` function for the boxed type.
5050 func BoxedTypeRegisterStatic(NameVar string, BoxedCopyVar *BoxedCopyFunc, BoxedFreeVar *BoxedFreeFunc) types.GType {
5151
52- BoxedCopyVarPtr := uintptr(unsafe.Pointer(BoxedCopyVar))
5352 var BoxedCopyVarRef uintptr
54- if cbRefPtr, ok := glib.GetCallback(BoxedCopyVarPtr); ok {
55- BoxedCopyVarRef = cbRefPtr
56- } else {
57- fcb := func(arg0 uintptr) uintptr {
58- cbFn := *BoxedCopyVar
59- return cbFn(arg0)
53+ if BoxedCopyVar != nil {
54+ BoxedCopyVarPtr := uintptr(unsafe.Pointer(BoxedCopyVar))
55+ if cbRefPtr, ok := glib.GetCallback(BoxedCopyVarPtr); ok {
56+ BoxedCopyVarRef = cbRefPtr
57+ } else {
58+ fcb := func(arg0 uintptr) uintptr {
59+ cbFn := *BoxedCopyVar
60+ return cbFn(arg0)
61+ }
62+ BoxedCopyVarRef = purego.NewCallback(fcb)
63+ glib.SaveCallback(BoxedCopyVarPtr, BoxedCopyVarRef)
6064 }
61- BoxedCopyVarRef = purego.NewCallback(fcb)
62- glib.SaveCallback(BoxedCopyVarPtr, BoxedCopyVarRef)
6365 }
6466
65- BoxedFreeVarPtr := uintptr(unsafe.Pointer(BoxedFreeVar))
6667 var BoxedFreeVarRef uintptr
67- if cbRefPtr, ok := glib.GetCallback(BoxedFreeVarPtr); ok {
68- BoxedFreeVarRef = cbRefPtr
69- } else {
70- fcb := func(arg0 uintptr) {
71- cbFn := *BoxedFreeVar
72- cbFn(arg0)
68+ if BoxedFreeVar != nil {
69+ BoxedFreeVarPtr := uintptr(unsafe.Pointer(BoxedFreeVar))
70+ if cbRefPtr, ok := glib.GetCallback(BoxedFreeVarPtr); ok {
71+ BoxedFreeVarRef = cbRefPtr
72+ } else {
73+ fcb := func(arg0 uintptr) {
74+ cbFn := *BoxedFreeVar
75+ cbFn(arg0)
76+ }
77+ BoxedFreeVarRef = purego.NewCallback(fcb)
78+ glib.SaveCallback(BoxedFreeVarPtr, BoxedFreeVarRef)
7379 }
74- BoxedFreeVarRef = purego.NewCallback(fcb)
75- glib.SaveCallback(BoxedFreeVarPtr, BoxedFreeVarRef)
7680 }
7781
7882 cret := xBoxedTypeRegisterStatic(NameVar, BoxedCopyVarRef, BoxedFreeVarRef)
M v4/gobject/gclosure.go +132 -108
@@ -203,17 +203,19 @@ var xClosureAddFinalizeNotifier func(uintptr, uintptr, uintptr)
203203 // notifiers will be run before the finalize notifiers.
204204 func (x *Closure) AddFinalizeNotifier(NotifyDataVar uintptr, NotifyFuncVar *ClosureNotify) {
205205
206- NotifyFuncVarPtr := uintptr(unsafe.Pointer(NotifyFuncVar))
207206 var NotifyFuncVarRef uintptr
208- if cbRefPtr, ok := glib.GetCallback(NotifyFuncVarPtr); ok {
209- NotifyFuncVarRef = cbRefPtr
210- } else {
211- fcb := func(arg0 uintptr, arg1 *Closure) {
212- cbFn := *NotifyFuncVar
213- cbFn(arg0, arg1)
207+ if NotifyFuncVar != nil {
208+ NotifyFuncVarPtr := uintptr(unsafe.Pointer(NotifyFuncVar))
209+ if cbRefPtr, ok := glib.GetCallback(NotifyFuncVarPtr); ok {
210+ NotifyFuncVarRef = cbRefPtr
211+ } else {
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)
214218 }
215- NotifyFuncVarRef = purego.NewCallback(fcb)
216- glib.SaveCallback(NotifyFuncVarPtr, NotifyFuncVarRef)
217219 }
218220
219221 xClosureAddFinalizeNotifier(x.GoPointer(), NotifyDataVar, NotifyFuncVarRef)
@@ -229,17 +231,19 @@ var xClosureAddInvalidateNotifier func(uintptr, uintptr, uintptr)
229231 // in an unspecified order.
230232 func (x *Closure) AddInvalidateNotifier(NotifyDataVar uintptr, NotifyFuncVar *ClosureNotify) {
231233
232- NotifyFuncVarPtr := uintptr(unsafe.Pointer(NotifyFuncVar))
233234 var NotifyFuncVarRef uintptr
234- if cbRefPtr, ok := glib.GetCallback(NotifyFuncVarPtr); ok {
235- NotifyFuncVarRef = cbRefPtr
236- } else {
237- fcb := func(arg0 uintptr, arg1 *Closure) {
238- cbFn := *NotifyFuncVar
239- cbFn(arg0, arg1)
235+ if NotifyFuncVar != nil {
236+ NotifyFuncVarPtr := uintptr(unsafe.Pointer(NotifyFuncVar))
237+ if cbRefPtr, ok := glib.GetCallback(NotifyFuncVarPtr); ok {
238+ NotifyFuncVarRef = cbRefPtr
239+ } else {
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)
240246 }
241- NotifyFuncVarRef = purego.NewCallback(fcb)
242- glib.SaveCallback(NotifyFuncVarPtr, NotifyFuncVarRef)
243247 }
244248
245249 xClosureAddInvalidateNotifier(x.GoPointer(), NotifyDataVar, NotifyFuncVarRef)
@@ -256,30 +260,34 @@ var xClosureAddMarshalGuards func(uintptr, uintptr, uintptr, uintptr, uintptr)
256260 // example of marshal guards.
257261 func (x *Closure) AddMarshalGuards(PreMarshalDataVar uintptr, PreMarshalNotifyVar *ClosureNotify, PostMarshalDataVar uintptr, PostMarshalNotifyVar *ClosureNotify) {
258262
259- PreMarshalNotifyVarPtr := uintptr(unsafe.Pointer(PreMarshalNotifyVar))
260263 var PreMarshalNotifyVarRef uintptr
261- if cbRefPtr, ok := glib.GetCallback(PreMarshalNotifyVarPtr); ok {
262- PreMarshalNotifyVarRef = cbRefPtr
263- } else {
264- fcb := func(arg0 uintptr, arg1 *Closure) {
265- cbFn := *PreMarshalNotifyVar
266- cbFn(arg0, arg1)
264+ if PreMarshalNotifyVar != nil {
265+ PreMarshalNotifyVarPtr := uintptr(unsafe.Pointer(PreMarshalNotifyVar))
266+ if cbRefPtr, ok := glib.GetCallback(PreMarshalNotifyVarPtr); ok {
267+ PreMarshalNotifyVarRef = cbRefPtr
268+ } else {
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)
267275 }
268- PreMarshalNotifyVarRef = purego.NewCallback(fcb)
269- glib.SaveCallback(PreMarshalNotifyVarPtr, PreMarshalNotifyVarRef)
270276 }
271277
272- PostMarshalNotifyVarPtr := uintptr(unsafe.Pointer(PostMarshalNotifyVar))
273278 var PostMarshalNotifyVarRef uintptr
274- if cbRefPtr, ok := glib.GetCallback(PostMarshalNotifyVarPtr); ok {
275- PostMarshalNotifyVarRef = cbRefPtr
276- } else {
277- fcb := func(arg0 uintptr, arg1 *Closure) {
278- cbFn := *PostMarshalNotifyVar
279- cbFn(arg0, arg1)
279+ if PostMarshalNotifyVar != nil {
280+ PostMarshalNotifyVarPtr := uintptr(unsafe.Pointer(PostMarshalNotifyVar))
281+ if cbRefPtr, ok := glib.GetCallback(PostMarshalNotifyVarPtr); ok {
282+ PostMarshalNotifyVarRef = cbRefPtr
283+ } else {
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)
280290 }
281- PostMarshalNotifyVarRef = purego.NewCallback(fcb)
282- glib.SaveCallback(PostMarshalNotifyVarPtr, PostMarshalNotifyVarRef)
283291 }
284292
285293 xClosureAddMarshalGuards(x.GoPointer(), PreMarshalDataVar, PreMarshalNotifyVarRef, PostMarshalDataVar, PostMarshalNotifyVarRef)
@@ -335,17 +343,19 @@ var xClosureRemoveFinalizeNotifier func(uintptr, uintptr, uintptr)
335343 // Notice that notifiers are automatically removed after they are run.
336344 func (x *Closure) RemoveFinalizeNotifier(NotifyDataVar uintptr, NotifyFuncVar *ClosureNotify) {
337345
338- NotifyFuncVarPtr := uintptr(unsafe.Pointer(NotifyFuncVar))
339346 var NotifyFuncVarRef uintptr
340- if cbRefPtr, ok := glib.GetCallback(NotifyFuncVarPtr); ok {
341- NotifyFuncVarRef = cbRefPtr
342- } else {
343- fcb := func(arg0 uintptr, arg1 *Closure) {
344- cbFn := *NotifyFuncVar
345- cbFn(arg0, arg1)
347+ if NotifyFuncVar != nil {
348+ NotifyFuncVarPtr := uintptr(unsafe.Pointer(NotifyFuncVar))
349+ if cbRefPtr, ok := glib.GetCallback(NotifyFuncVarPtr); ok {
350+ NotifyFuncVarRef = cbRefPtr
351+ } else {
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)
346358 }
347- NotifyFuncVarRef = purego.NewCallback(fcb)
348- glib.SaveCallback(NotifyFuncVarPtr, NotifyFuncVarRef)
349359 }
350360
351361 xClosureRemoveFinalizeNotifier(x.GoPointer(), NotifyDataVar, NotifyFuncVarRef)
@@ -359,17 +369,19 @@ var xClosureRemoveInvalidateNotifier func(uintptr, uintptr, uintptr)
359369 // Notice that notifiers are automatically removed after they are run.
360370 func (x *Closure) RemoveInvalidateNotifier(NotifyDataVar uintptr, NotifyFuncVar *ClosureNotify) {
361371
362- NotifyFuncVarPtr := uintptr(unsafe.Pointer(NotifyFuncVar))
363372 var NotifyFuncVarRef uintptr
364- if cbRefPtr, ok := glib.GetCallback(NotifyFuncVarPtr); ok {
365- NotifyFuncVarRef = cbRefPtr
366- } else {
367- fcb := func(arg0 uintptr, arg1 *Closure) {
368- cbFn := *NotifyFuncVar
369- cbFn(arg0, arg1)
373+ if NotifyFuncVar != nil {
374+ NotifyFuncVarPtr := uintptr(unsafe.Pointer(NotifyFuncVar))
375+ if cbRefPtr, ok := glib.GetCallback(NotifyFuncVarPtr); ok {
376+ NotifyFuncVarRef = cbRefPtr
377+ } else {
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)
370384 }
371- NotifyFuncVarRef = purego.NewCallback(fcb)
372- glib.SaveCallback(NotifyFuncVarPtr, NotifyFuncVarRef)
373385 }
374386
375387 xClosureRemoveInvalidateNotifier(x.GoPointer(), NotifyDataVar, NotifyFuncVarRef)
@@ -390,17 +402,19 @@ var xClosureSetMarshal func(uintptr, uintptr)
390402 // See also: g_closure_set_meta_marshal()
391403 func (x *Closure) SetMarshal(MarshalVar *ClosureMarshal) {
392404
393- MarshalVarPtr := uintptr(unsafe.Pointer(MarshalVar))
394405 var MarshalVarRef uintptr
395- if cbRefPtr, ok := glib.GetCallback(MarshalVarPtr); ok {
396- MarshalVarRef = cbRefPtr
397- } else {
398- fcb := func(arg0 *Closure, arg1 *Value, arg2 uint, arg3 []Value, arg4 uintptr, arg5 uintptr) {
399- cbFn := *MarshalVar
400- cbFn(arg0, arg1, arg2, arg3, arg4, arg5)
406+ if MarshalVar != nil {
407+ MarshalVarPtr := uintptr(unsafe.Pointer(MarshalVar))
408+ if cbRefPtr, ok := glib.GetCallback(MarshalVarPtr); ok {
409+ MarshalVarRef = cbRefPtr
410+ } else {
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)
401417 }
402- MarshalVarRef = purego.NewCallback(fcb)
403- glib.SaveCallback(MarshalVarPtr, MarshalVarRef)
404418 }
405419
406420 xClosureSetMarshal(x.GoPointer(), MarshalVarRef)
@@ -428,17 +442,19 @@ var xClosureSetMetaMarshal func(uintptr, uintptr, uintptr)
428442 // @marshal_data argument.
429443 func (x *Closure) SetMetaMarshal(MarshalDataVar uintptr, MetaMarshalVar *ClosureMarshal) {
430444
431- MetaMarshalVarPtr := uintptr(unsafe.Pointer(MetaMarshalVar))
432445 var MetaMarshalVarRef uintptr
433- if cbRefPtr, ok := glib.GetCallback(MetaMarshalVarPtr); ok {
434- MetaMarshalVarRef = cbRefPtr
435- } else {
436- fcb := func(arg0 *Closure, arg1 *Value, arg2 uint, arg3 []Value, arg4 uintptr, arg5 uintptr) {
437- cbFn := *MetaMarshalVar
438- cbFn(arg0, arg1, arg2, arg3, arg4, arg5)
446+ if MetaMarshalVar != nil {
447+ MetaMarshalVarPtr := uintptr(unsafe.Pointer(MetaMarshalVar))
448+ if cbRefPtr, ok := glib.GetCallback(MetaMarshalVarPtr); ok {
449+ MetaMarshalVarRef = cbRefPtr
450+ } else {
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)
439457 }
440- MetaMarshalVarRef = purego.NewCallback(fcb)
441- glib.SaveCallback(MetaMarshalVarPtr, MetaMarshalVarRef)
442458 }
443459
444460 xClosureSetMetaMarshal(x.GoPointer(), MarshalDataVar, MetaMarshalVarRef)
@@ -571,30 +587,34 @@ var xCclosureNew func(uintptr, uintptr, uintptr) *Closure
571587 // @destroy_data will be called as a finalize notifier on the #GClosure.
572588 func CclosureNew(CallbackFuncVar *Callback, UserDataVar uintptr, DestroyDataVar *ClosureNotify) *Closure {
573589
574- CallbackFuncVarPtr := uintptr(unsafe.Pointer(CallbackFuncVar))
575590 var CallbackFuncVarRef uintptr
576- if cbRefPtr, ok := glib.GetCallback(CallbackFuncVarPtr); ok {
577- CallbackFuncVarRef = cbRefPtr
578- } else {
579- fcb := func() {
580- cbFn := *CallbackFuncVar
581- cbFn()
591+ if CallbackFuncVar != nil {
592+ CallbackFuncVarPtr := uintptr(unsafe.Pointer(CallbackFuncVar))
593+ if cbRefPtr, ok := glib.GetCallback(CallbackFuncVarPtr); ok {
594+ CallbackFuncVarRef = cbRefPtr
595+ } else {
596+ fcb := func() {
597+ cbFn := *CallbackFuncVar
598+ cbFn()
599+ }
600+ CallbackFuncVarRef = purego.NewCallback(fcb)
601+ glib.SaveCallback(CallbackFuncVarPtr, CallbackFuncVarRef)
582602 }
583- CallbackFuncVarRef = purego.NewCallback(fcb)
584- glib.SaveCallback(CallbackFuncVarPtr, CallbackFuncVarRef)
585603 }
586604
587- DestroyDataVarPtr := uintptr(unsafe.Pointer(DestroyDataVar))
588605 var DestroyDataVarRef uintptr
589- if cbRefPtr, ok := glib.GetCallback(DestroyDataVarPtr); ok {
590- DestroyDataVarRef = cbRefPtr
591- } else {
592- fcb := func(arg0 uintptr, arg1 *Closure) {
593- cbFn := *DestroyDataVar
594- cbFn(arg0, arg1)
606+ if DestroyDataVar != nil {
607+ DestroyDataVarPtr := uintptr(unsafe.Pointer(DestroyDataVar))
608+ if cbRefPtr, ok := glib.GetCallback(DestroyDataVarPtr); ok {
609+ DestroyDataVarRef = cbRefPtr
610+ } else {
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)
595617 }
596- DestroyDataVarRef = purego.NewCallback(fcb)
597- glib.SaveCallback(DestroyDataVarPtr, DestroyDataVarRef)
598618 }
599619
600620 cret := xCclosureNew(CallbackFuncVarRef, UserDataVar, DestroyDataVarRef)
@@ -609,30 +629,34 @@ var xCclosureNewSwap func(uintptr, uintptr, uintptr) *Closure
609629 // @destroy_data will be called as a finalize notifier on the #GClosure.
610630 func CclosureNewSwap(CallbackFuncVar *Callback, UserDataVar uintptr, DestroyDataVar *ClosureNotify) *Closure {
611631
612- CallbackFuncVarPtr := uintptr(unsafe.Pointer(CallbackFuncVar))
613632 var CallbackFuncVarRef uintptr
614- if cbRefPtr, ok := glib.GetCallback(CallbackFuncVarPtr); ok {
615- CallbackFuncVarRef = cbRefPtr
616- } else {
617- fcb := func() {
618- cbFn := *CallbackFuncVar
619- cbFn()
633+ if CallbackFuncVar != nil {
634+ CallbackFuncVarPtr := uintptr(unsafe.Pointer(CallbackFuncVar))
635+ if cbRefPtr, ok := glib.GetCallback(CallbackFuncVarPtr); ok {
636+ CallbackFuncVarRef = cbRefPtr
637+ } else {
638+ fcb := func() {
639+ cbFn := *CallbackFuncVar
640+ cbFn()
641+ }
642+ CallbackFuncVarRef = purego.NewCallback(fcb)
643+ glib.SaveCallback(CallbackFuncVarPtr, CallbackFuncVarRef)
620644 }
621- CallbackFuncVarRef = purego.NewCallback(fcb)
622- glib.SaveCallback(CallbackFuncVarPtr, CallbackFuncVarRef)
623645 }
624646
625- DestroyDataVarPtr := uintptr(unsafe.Pointer(DestroyDataVar))
626647 var DestroyDataVarRef uintptr
627- if cbRefPtr, ok := glib.GetCallback(DestroyDataVarPtr); ok {
628- DestroyDataVarRef = cbRefPtr
629- } else {
630- fcb := func(arg0 uintptr, arg1 *Closure) {
631- cbFn := *DestroyDataVar
632- cbFn(arg0, arg1)
648+ if DestroyDataVar != nil {
649+ DestroyDataVarPtr := uintptr(unsafe.Pointer(DestroyDataVar))
650+ if cbRefPtr, ok := glib.GetCallback(DestroyDataVarPtr); ok {
651+ DestroyDataVarRef = cbRefPtr
652+ } else {
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)
633659 }
634- DestroyDataVarRef = purego.NewCallback(fcb)
635- glib.SaveCallback(DestroyDataVarPtr, DestroyDataVarRef)
636660 }
637661
638662 cret := xCclosureNewSwap(CallbackFuncVarRef, UserDataVar, DestroyDataVarRef)
M v4/gobject/gobject.go +77 -63
@@ -931,17 +931,19 @@ var xCclosureNewObject func(uintptr, uintptr) *Closure
931931 // after the object is is freed.
932932 func CclosureNewObject(CallbackFuncVar *Callback, ObjectVar *Object) *Closure {
933933
934- CallbackFuncVarPtr := uintptr(unsafe.Pointer(CallbackFuncVar))
935934 var CallbackFuncVarRef uintptr
936- if cbRefPtr, ok := glib.GetCallback(CallbackFuncVarPtr); ok {
937- CallbackFuncVarRef = cbRefPtr
938- } else {
939- fcb := func() {
940- cbFn := *CallbackFuncVar
941- cbFn()
935+ if CallbackFuncVar != nil {
936+ CallbackFuncVarPtr := uintptr(unsafe.Pointer(CallbackFuncVar))
937+ if cbRefPtr, ok := glib.GetCallback(CallbackFuncVarPtr); ok {
938+ CallbackFuncVarRef = cbRefPtr
939+ } else {
940+ fcb := func() {
941+ cbFn := *CallbackFuncVar
942+ cbFn()
943+ }
944+ CallbackFuncVarRef = purego.NewCallback(fcb)
945+ glib.SaveCallback(CallbackFuncVarPtr, CallbackFuncVarRef)
942946 }
943- CallbackFuncVarRef = purego.NewCallback(fcb)
944- glib.SaveCallback(CallbackFuncVarPtr, CallbackFuncVarRef)
945947 }
946948
947949 cret := xCclosureNewObject(CallbackFuncVarRef, ObjectVar.GoPointer())
@@ -957,17 +959,19 @@ var xCclosureNewObjectSwap func(uintptr, uintptr) *Closure
957959 // after the object is is freed.
958960 func CclosureNewObjectSwap(CallbackFuncVar *Callback, ObjectVar *Object) *Closure {
959961
960- CallbackFuncVarPtr := uintptr(unsafe.Pointer(CallbackFuncVar))
961962 var CallbackFuncVarRef uintptr
962- if cbRefPtr, ok := glib.GetCallback(CallbackFuncVarPtr); ok {
963- CallbackFuncVarRef = cbRefPtr
964- } else {
965- fcb := func() {
966- cbFn := *CallbackFuncVar
967- cbFn()
963+ if CallbackFuncVar != nil {
964+ CallbackFuncVarPtr := uintptr(unsafe.Pointer(CallbackFuncVar))
965+ if cbRefPtr, ok := glib.GetCallback(CallbackFuncVarPtr); ok {
966+ CallbackFuncVarRef = cbRefPtr
967+ } else {
968+ fcb := func() {
969+ cbFn := *CallbackFuncVar
970+ cbFn()
971+ }
972+ CallbackFuncVarRef = purego.NewCallback(fcb)
973+ glib.SaveCallback(CallbackFuncVarPtr, CallbackFuncVarRef)
968974 }
969- CallbackFuncVarRef = purego.NewCallback(fcb)
970- glib.SaveCallback(CallbackFuncVarPtr, CallbackFuncVarRef)
971975 }
972976
973977 cret := xCclosureNewObjectSwap(CallbackFuncVarRef, ObjectVar.GoPointer())
@@ -1012,17 +1016,19 @@ var xSignalConnectObject func(*TypeInstance, string, uintptr, uintptr, ConnectFl
10121016 // details.
10131017 func SignalConnectObject(InstanceVar *TypeInstance, DetailedSignalVar string, CHandlerVar *Callback, GobjectVar *Object, ConnectFlagsVar ConnectFlags) uint32 {
10141018
1015- CHandlerVarPtr := uintptr(unsafe.Pointer(CHandlerVar))
10161019 var CHandlerVarRef uintptr
1017- if cbRefPtr, ok := glib.GetCallback(CHandlerVarPtr); ok {
1018- CHandlerVarRef = cbRefPtr
1019- } else {
1020- fcb := func() {
1021- cbFn := *CHandlerVar
1022- cbFn()
1020+ if CHandlerVar != nil {
1021+ CHandlerVarPtr := uintptr(unsafe.Pointer(CHandlerVar))
1022+ if cbRefPtr, ok := glib.GetCallback(CHandlerVarPtr); ok {
1023+ CHandlerVarRef = cbRefPtr
1024+ } else {
1025+ fcb := func() {
1026+ cbFn := *CHandlerVar
1027+ cbFn()
1028+ }
1029+ CHandlerVarRef = purego.NewCallback(fcb)
1030+ glib.SaveCallback(CHandlerVarPtr, CHandlerVarRef)
10231031 }
1024- CHandlerVarRef = purego.NewCallback(fcb)
1025- glib.SaveCallback(CHandlerVarPtr, CHandlerVarRef)
10261032 }
10271033
10281034 cret := xSignalConnectObject(InstanceVar, DetailedSignalVar, CHandlerVarRef, GobjectVar.GoPointer(), ConnectFlagsVar)
@@ -1237,17 +1243,19 @@ var xObjectAddToggleRef func(uintptr, uintptr, uintptr)
12371243 // A g_object_add_toggle_ref() must be released with g_object_remove_toggle_ref().
12381244 func (x *Object) AddToggleRef(NotifyVar *ToggleNotify, DataVar uintptr) {
12391245
1240- NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
12411246 var NotifyVarRef uintptr
1242- if cbRefPtr, ok := glib.GetCallback(NotifyVarPtr); ok {
1243- NotifyVarRef = cbRefPtr
1244- } else {
1245- fcb := func(arg0 uintptr, arg1 uintptr, arg2 bool) {
1246- cbFn := *NotifyVar
1247- cbFn(arg0, arg1, arg2)
1247+ if NotifyVar != nil {
1248+ NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
1249+ if cbRefPtr, ok := glib.GetCallback(NotifyVarPtr); ok {
1250+ NotifyVarRef = cbRefPtr
1251+ } else {
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)
12481258 }
1249- NotifyVarRef = purego.NewCallback(fcb)
1250- glib.SaveCallback(NotifyVarPtr, NotifyVarRef)
12511259 }
12521260
12531261 xObjectAddToggleRef(x.GoPointer(), NotifyVarRef, DataVar)
@@ -1830,17 +1838,19 @@ var xObjectRemoveToggleRef func(uintptr, uintptr, uintptr)
18301838 // you must take care of that yourself.
18311839 func (x *Object) RemoveToggleRef(NotifyVar *ToggleNotify, DataVar uintptr) {
18321840
1833- NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
18341841 var NotifyVarRef uintptr
1835- if cbRefPtr, ok := glib.GetCallback(NotifyVarPtr); ok {
1836- NotifyVarRef = cbRefPtr
1837- } else {
1838- fcb := func(arg0 uintptr, arg1 uintptr, arg2 bool) {
1839- cbFn := *NotifyVar
1840- cbFn(arg0, arg1, arg2)
1842+ if NotifyVar != nil {
1843+ NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
1844+ if cbRefPtr, ok := glib.GetCallback(NotifyVarPtr); ok {
1845+ NotifyVarRef = cbRefPtr
1846+ } else {
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)
18411853 }
1842- NotifyVarRef = purego.NewCallback(fcb)
1843- glib.SaveCallback(NotifyVarPtr, NotifyVarRef)
18441854 }
18451855
18461856 xObjectRemoveToggleRef(x.GoPointer(), NotifyVarRef, DataVar)
@@ -2254,17 +2264,19 @@ var xObjectWeakRef func(uintptr, uintptr, uintptr)
22542264 // Use #GWeakRef if thread-safety is required.
22552265 func (x *Object) WeakRef(NotifyVar *WeakNotify, DataVar uintptr) {
22562266
2257- NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
22582267 var NotifyVarRef uintptr
2259- if cbRefPtr, ok := glib.GetCallback(NotifyVarPtr); ok {
2260- NotifyVarRef = cbRefPtr
2261- } else {
2262- fcb := func(arg0 uintptr, arg1 uintptr) {
2263- cbFn := *NotifyVar
2264- cbFn(arg0, arg1)
2268+ if NotifyVar != nil {
2269+ NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
2270+ if cbRefPtr, ok := glib.GetCallback(NotifyVarPtr); ok {
2271+ NotifyVarRef = cbRefPtr
2272+ } else {
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)
22652279 }
2266- NotifyVarRef = purego.NewCallback(fcb)
2267- glib.SaveCallback(NotifyVarPtr, NotifyVarRef)
22682280 }
22692281
22702282 xObjectWeakRef(x.GoPointer(), NotifyVarRef, DataVar)
@@ -2276,17 +2288,19 @@ var xObjectWeakUnref func(uintptr, uintptr, uintptr)
22762288 // Removes a weak reference callback to an object.
22772289 func (x *Object) WeakUnref(NotifyVar *WeakNotify, DataVar uintptr) {
22782290
2279- NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
22802291 var NotifyVarRef uintptr
2281- if cbRefPtr, ok := glib.GetCallback(NotifyVarPtr); ok {
2282- NotifyVarRef = cbRefPtr
2283- } else {
2284- fcb := func(arg0 uintptr, arg1 uintptr) {
2285- cbFn := *NotifyVar
2286- cbFn(arg0, arg1)
2292+ if NotifyVar != nil {
2293+ NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
2294+ if cbRefPtr, ok := glib.GetCallback(NotifyVarPtr); ok {
2295+ NotifyVarRef = cbRefPtr
2296+ } else {
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)
22872303 }
2288- NotifyVarRef = purego.NewCallback(fcb)
2289- glib.SaveCallback(NotifyVarPtr, NotifyVarRef)
22902304 }
22912305
22922306 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
228228 // for signals which don't have %G_SIGNAL_NO_HOOKS flag set.
229229 func SignalAddEmissionHook(SignalIdVar uint, DetailVar glib.Quark, HookFuncVar *SignalEmissionHook, HookDataVar uintptr, DataDestroyVar *glib.DestroyNotify) uint32 {
230230
231- HookFuncVarPtr := uintptr(unsafe.Pointer(HookFuncVar))
232231 var HookFuncVarRef uintptr
233- if cbRefPtr, ok := glib.GetCallback(HookFuncVarPtr); ok {
234- HookFuncVarRef = cbRefPtr
235- } else {
236- fcb := func(arg0 *SignalInvocationHint, arg1 uint, arg2 []Value, arg3 uintptr) bool {
237- cbFn := *HookFuncVar
238- return cbFn(arg0, arg1, arg2, arg3)
232+ if HookFuncVar != nil {
233+ HookFuncVarPtr := uintptr(unsafe.Pointer(HookFuncVar))
234+ if cbRefPtr, ok := glib.GetCallback(HookFuncVarPtr); ok {
235+ HookFuncVarRef = cbRefPtr
236+ } else {
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)
239243 }
240- HookFuncVarRef = purego.NewCallback(fcb)
241- glib.SaveCallback(HookFuncVarPtr, HookFuncVarRef)
242244 }
243245
244246 var DataDestroyVarRef uintptr
@@ -341,17 +343,19 @@ var xSignalConnectData func(uintptr, string, uintptr, uintptr, uintptr, ConnectF
341343 // details.
342344 func SignalConnectData(InstanceVar *Object, DetailedSignalVar string, CHandlerVar *Callback, DataVar uintptr, DestroyDataVar *ClosureNotify, ConnectFlagsVar ConnectFlags) uint32 {
343345
344- CHandlerVarPtr := uintptr(unsafe.Pointer(CHandlerVar))
345346 var CHandlerVarRef uintptr
346- if cbRefPtr, ok := glib.GetCallback(CHandlerVarPtr); ok {
347- CHandlerVarRef = cbRefPtr
348- } else {
349- fcb := func() {
350- cbFn := *CHandlerVar
351- cbFn()
347+ if CHandlerVar != nil {
348+ CHandlerVarPtr := uintptr(unsafe.Pointer(CHandlerVar))
349+ if cbRefPtr, ok := glib.GetCallback(CHandlerVarPtr); ok {
350+ CHandlerVarRef = cbRefPtr
351+ } else {
352+ fcb := func() {
353+ cbFn := *CHandlerVar
354+ cbFn()
355+ }
356+ CHandlerVarRef = purego.NewCallback(fcb)
357+ glib.SaveCallback(CHandlerVarPtr, CHandlerVarRef)
352358 }
353- CHandlerVarRef = purego.NewCallback(fcb)
354- glib.SaveCallback(CHandlerVarPtr, CHandlerVarRef)
355359 }
356360
357361 var DestroyDataVarRef uintptr
@@ -848,17 +852,19 @@ var xSignalOverrideClassHandler func(string, types.GType, uintptr)
848852 // parent class closure from inside the overridden one.
849853 func SignalOverrideClassHandler(SignalNameVar string, InstanceTypeVar types.GType, ClassHandlerVar *Callback) {
850854
851- ClassHandlerVarPtr := uintptr(unsafe.Pointer(ClassHandlerVar))
852855 var ClassHandlerVarRef uintptr
853- if cbRefPtr, ok := glib.GetCallback(ClassHandlerVarPtr); ok {
854- ClassHandlerVarRef = cbRefPtr
855- } else {
856- fcb := func() {
857- cbFn := *ClassHandlerVar
858- cbFn()
856+ if ClassHandlerVar != nil {
857+ ClassHandlerVarPtr := uintptr(unsafe.Pointer(ClassHandlerVar))
858+ if cbRefPtr, ok := glib.GetCallback(ClassHandlerVarPtr); ok {
859+ ClassHandlerVarRef = cbRefPtr
860+ } else {
861+ fcb := func() {
862+ cbFn := *ClassHandlerVar
863+ cbFn()
864+ }
865+ ClassHandlerVarRef = purego.NewCallback(fcb)
866+ glib.SaveCallback(ClassHandlerVarPtr, ClassHandlerVarRef)
859867 }
860- ClassHandlerVarRef = purego.NewCallback(fcb)
861- glib.SaveCallback(ClassHandlerVarPtr, ClassHandlerVarRef)
862868 }
863869
864870 xSignalOverrideClassHandler(SignalNameVar, InstanceTypeVar, ClassHandlerVarRef)
M v4/gobject/gsignalgroup.go +66 -54
@@ -82,17 +82,19 @@ var xSignalGroupConnect func(uintptr, string, uintptr, uintptr)
8282 // You cannot connect a signal handler after #GSignalGroup:target has been set.
8383 func (x *SignalGroup) Connect(DetailedSignalVar string, CHandlerVar *Callback, DataVar uintptr) {
8484
85- CHandlerVarPtr := uintptr(unsafe.Pointer(CHandlerVar))
8685 var CHandlerVarRef uintptr
87- if cbRefPtr, ok := glib.GetCallback(CHandlerVarPtr); ok {
88- CHandlerVarRef = cbRefPtr
89- } else {
90- fcb := func() {
91- cbFn := *CHandlerVar
92- cbFn()
86+ if CHandlerVar != nil {
87+ CHandlerVarPtr := uintptr(unsafe.Pointer(CHandlerVar))
88+ if cbRefPtr, ok := glib.GetCallback(CHandlerVarPtr); ok {
89+ CHandlerVarRef = cbRefPtr
90+ } else {
91+ fcb := func() {
92+ cbFn := *CHandlerVar
93+ cbFn()
94+ }
95+ CHandlerVarRef = purego.NewCallback(fcb)
96+ glib.SaveCallback(CHandlerVarPtr, CHandlerVarRef)
9397 }
94- CHandlerVarRef = purego.NewCallback(fcb)
95- glib.SaveCallback(CHandlerVarPtr, CHandlerVarRef)
9698 }
9799
98100 xSignalGroupConnect(x.GoPointer(), DetailedSignalVar, CHandlerVarRef, DataVar)
@@ -109,17 +111,19 @@ var xSignalGroupConnectAfter func(uintptr, string, uintptr, uintptr)
109111 // You cannot connect a signal handler after #GSignalGroup:target has been set.
110112 func (x *SignalGroup) ConnectAfter(DetailedSignalVar string, CHandlerVar *Callback, DataVar uintptr) {
111113
112- CHandlerVarPtr := uintptr(unsafe.Pointer(CHandlerVar))
113114 var CHandlerVarRef uintptr
114- if cbRefPtr, ok := glib.GetCallback(CHandlerVarPtr); ok {
115- CHandlerVarRef = cbRefPtr
116- } else {
117- fcb := func() {
118- cbFn := *CHandlerVar
119- cbFn()
115+ if CHandlerVar != nil {
116+ CHandlerVarPtr := uintptr(unsafe.Pointer(CHandlerVar))
117+ if cbRefPtr, ok := glib.GetCallback(CHandlerVarPtr); ok {
118+ CHandlerVarRef = cbRefPtr
119+ } else {
120+ fcb := func() {
121+ cbFn := *CHandlerVar
122+ cbFn()
123+ }
124+ CHandlerVarRef = purego.NewCallback(fcb)
125+ glib.SaveCallback(CHandlerVarPtr, CHandlerVarRef)
120126 }
121- CHandlerVarRef = purego.NewCallback(fcb)
122- glib.SaveCallback(CHandlerVarPtr, CHandlerVarRef)
123127 }
124128
125129 xSignalGroupConnectAfter(x.GoPointer(), DetailedSignalVar, CHandlerVarRef, DataVar)
@@ -145,30 +149,34 @@ var xSignalGroupConnectData func(uintptr, string, uintptr, uintptr, uintptr, Con
145149 // You cannot connect a signal handler after #GSignalGroup:target has been set.
146150 func (x *SignalGroup) ConnectData(DetailedSignalVar string, CHandlerVar *Callback, DataVar uintptr, NotifyVar *ClosureNotify, FlagsVar ConnectFlags) {
147151
148- CHandlerVarPtr := uintptr(unsafe.Pointer(CHandlerVar))
149152 var CHandlerVarRef uintptr
150- if cbRefPtr, ok := glib.GetCallback(CHandlerVarPtr); ok {
151- CHandlerVarRef = cbRefPtr
152- } else {
153- fcb := func() {
154- cbFn := *CHandlerVar
155- cbFn()
153+ if CHandlerVar != nil {
154+ CHandlerVarPtr := uintptr(unsafe.Pointer(CHandlerVar))
155+ if cbRefPtr, ok := glib.GetCallback(CHandlerVarPtr); ok {
156+ CHandlerVarRef = cbRefPtr
157+ } else {
158+ fcb := func() {
159+ cbFn := *CHandlerVar
160+ cbFn()
161+ }
162+ CHandlerVarRef = purego.NewCallback(fcb)
163+ glib.SaveCallback(CHandlerVarPtr, CHandlerVarRef)
156164 }
157- CHandlerVarRef = purego.NewCallback(fcb)
158- glib.SaveCallback(CHandlerVarPtr, CHandlerVarRef)
159165 }
160166
161- NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
162167 var NotifyVarRef uintptr
163- if cbRefPtr, ok := glib.GetCallback(NotifyVarPtr); ok {
164- NotifyVarRef = cbRefPtr
165- } else {
166- fcb := func(arg0 uintptr, arg1 *Closure) {
167- cbFn := *NotifyVar
168- cbFn(arg0, arg1)
168+ if NotifyVar != nil {
169+ NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
170+ if cbRefPtr, ok := glib.GetCallback(NotifyVarPtr); ok {
171+ NotifyVarRef = cbRefPtr
172+ } else {
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)
169179 }
170- NotifyVarRef = purego.NewCallback(fcb)
171- glib.SaveCallback(NotifyVarPtr, NotifyVarRef)
172180 }
173181
174182 xSignalGroupConnectData(x.GoPointer(), DetailedSignalVar, CHandlerVarRef, DataVar, NotifyVarRef, FlagsVar)
@@ -186,17 +194,19 @@ var xSignalGroupConnectObject func(uintptr, string, uintptr, uintptr, ConnectFla
186194 // You cannot connect a signal handler after #GSignalGroup:target has been set.
187195 func (x *SignalGroup) ConnectObject(DetailedSignalVar string, CHandlerVar *Callback, ObjectVar uintptr, FlagsVar ConnectFlags) {
188196
189- CHandlerVarPtr := uintptr(unsafe.Pointer(CHandlerVar))
190197 var CHandlerVarRef uintptr
191- if cbRefPtr, ok := glib.GetCallback(CHandlerVarPtr); ok {
192- CHandlerVarRef = cbRefPtr
193- } else {
194- fcb := func() {
195- cbFn := *CHandlerVar
196- cbFn()
198+ if CHandlerVar != nil {
199+ CHandlerVarPtr := uintptr(unsafe.Pointer(CHandlerVar))
200+ if cbRefPtr, ok := glib.GetCallback(CHandlerVarPtr); ok {
201+ CHandlerVarRef = cbRefPtr
202+ } else {
203+ fcb := func() {
204+ cbFn := *CHandlerVar
205+ cbFn()
206+ }
207+ CHandlerVarRef = purego.NewCallback(fcb)
208+ glib.SaveCallback(CHandlerVarPtr, CHandlerVarRef)
197209 }
198- CHandlerVarRef = purego.NewCallback(fcb)
199- glib.SaveCallback(CHandlerVarPtr, CHandlerVarRef)
200210 }
201211
202212 xSignalGroupConnectObject(x.GoPointer(), DetailedSignalVar, CHandlerVarRef, ObjectVar, FlagsVar)
@@ -214,17 +224,19 @@ var xSignalGroupConnectSwapped func(uintptr, string, uintptr, uintptr)
214224 // You cannot connect a signal handler after #GSignalGroup:target has been set.
215225 func (x *SignalGroup) ConnectSwapped(DetailedSignalVar string, CHandlerVar *Callback, DataVar uintptr) {
216226
217- CHandlerVarPtr := uintptr(unsafe.Pointer(CHandlerVar))
218227 var CHandlerVarRef uintptr
219- if cbRefPtr, ok := glib.GetCallback(CHandlerVarPtr); ok {
220- CHandlerVarRef = cbRefPtr
221- } else {
222- fcb := func() {
223- cbFn := *CHandlerVar
224- cbFn()
228+ if CHandlerVar != nil {
229+ CHandlerVarPtr := uintptr(unsafe.Pointer(CHandlerVar))
230+ if cbRefPtr, ok := glib.GetCallback(CHandlerVarPtr); ok {
231+ CHandlerVarRef = cbRefPtr
232+ } else {
233+ fcb := func() {
234+ cbFn := *CHandlerVar
235+ cbFn()
236+ }
237+ CHandlerVarRef = purego.NewCallback(fcb)
238+ glib.SaveCallback(CHandlerVarPtr, CHandlerVarRef)
225239 }
226- CHandlerVarRef = purego.NewCallback(fcb)
227- glib.SaveCallback(CHandlerVarPtr, CHandlerVarRef)
228240 }
229241
230242 xSignalGroupConnectSwapped(x.GoPointer(), DetailedSignalVar, CHandlerVarRef, DataVar)
M v4/gobject/gtype.go +66 -54
@@ -810,17 +810,19 @@ var xTypeAddClassCacheFunc func(uintptr, uintptr)
810810 // chain.
811811 func TypeAddClassCacheFunc(CacheDataVar uintptr, CacheFuncVar *TypeClassCacheFunc) {
812812
813- CacheFuncVarPtr := uintptr(unsafe.Pointer(CacheFuncVar))
814813 var CacheFuncVarRef uintptr
815- if cbRefPtr, ok := glib.GetCallback(CacheFuncVarPtr); ok {
816- CacheFuncVarRef = cbRefPtr
817- } else {
818- fcb := func(arg0 uintptr, arg1 *TypeClass) bool {
819- cbFn := *CacheFuncVar
820- return cbFn(arg0, arg1)
814+ if CacheFuncVar != nil {
815+ CacheFuncVarPtr := uintptr(unsafe.Pointer(CacheFuncVar))
816+ if cbRefPtr, ok := glib.GetCallback(CacheFuncVarPtr); ok {
817+ CacheFuncVarRef = cbRefPtr
818+ } else {
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)
821825 }
822- CacheFuncVarRef = purego.NewCallback(fcb)
823- glib.SaveCallback(CacheFuncVarPtr, CacheFuncVarRef)
824826 }
825827
826828 xTypeAddClassCacheFunc(CacheDataVar, CacheFuncVarRef)
@@ -866,17 +868,19 @@ var xTypeAddInterfaceCheck func(uintptr, uintptr)
866868 // interfaces.
867869 func TypeAddInterfaceCheck(CheckDataVar uintptr, CheckFuncVar *TypeInterfaceCheckFunc) {
868870
869- CheckFuncVarPtr := uintptr(unsafe.Pointer(CheckFuncVar))
870871 var CheckFuncVarRef uintptr
871- if cbRefPtr, ok := glib.GetCallback(CheckFuncVarPtr); ok {
872- CheckFuncVarRef = cbRefPtr
873- } else {
874- fcb := func(arg0 uintptr, arg1 *TypeInterface) {
875- cbFn := *CheckFuncVar
876- cbFn(arg0, arg1)
872+ if CheckFuncVar != nil {
873+ CheckFuncVarPtr := uintptr(unsafe.Pointer(CheckFuncVar))
874+ if cbRefPtr, ok := glib.GetCallback(CheckFuncVarPtr); ok {
875+ CheckFuncVarRef = cbRefPtr
876+ } else {
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)
877883 }
878- CheckFuncVarRef = purego.NewCallback(fcb)
879- glib.SaveCallback(CheckFuncVarPtr, CheckFuncVarRef)
880884 }
881885
882886 xTypeAddInterfaceCheck(CheckDataVar, CheckFuncVarRef)
@@ -1500,30 +1504,34 @@ var xTypeRegisterStaticSimple func(types.GType, string, uint, uintptr, uint, uin
15001504 // struct and calling g_type_register_static().
15011505 func TypeRegisterStaticSimple(ParentTypeVar types.GType, TypeNameVar string, ClassSizeVar uint, ClassInitVar *ClassInitFunc, InstanceSizeVar uint, InstanceInitVar *InstanceInitFunc, FlagsVar TypeFlags) types.GType {
15021506
1503- ClassInitVarPtr := uintptr(unsafe.Pointer(ClassInitVar))
15041507 var ClassInitVarRef uintptr
1505- if cbRefPtr, ok := glib.GetCallback(ClassInitVarPtr); ok {
1506- ClassInitVarRef = cbRefPtr
1507- } else {
1508- fcb := func(arg0 *TypeClass, arg1 uintptr) {
1509- cbFn := *ClassInitVar
1510- cbFn(arg0, arg1)
1508+ if ClassInitVar != nil {
1509+ ClassInitVarPtr := uintptr(unsafe.Pointer(ClassInitVar))
1510+ if cbRefPtr, ok := glib.GetCallback(ClassInitVarPtr); ok {
1511+ ClassInitVarRef = cbRefPtr
1512+ } else {
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)
15111519 }
1512- ClassInitVarRef = purego.NewCallback(fcb)
1513- glib.SaveCallback(ClassInitVarPtr, ClassInitVarRef)
15141520 }
15151521
1516- InstanceInitVarPtr := uintptr(unsafe.Pointer(InstanceInitVar))
15171522 var InstanceInitVarRef uintptr
1518- if cbRefPtr, ok := glib.GetCallback(InstanceInitVarPtr); ok {
1519- InstanceInitVarRef = cbRefPtr
1520- } else {
1521- fcb := func(arg0 *TypeInstance, arg1 *TypeClass) {
1522- cbFn := *InstanceInitVar
1523- cbFn(arg0, arg1)
1523+ if InstanceInitVar != nil {
1524+ InstanceInitVarPtr := uintptr(unsafe.Pointer(InstanceInitVar))
1525+ if cbRefPtr, ok := glib.GetCallback(InstanceInitVarPtr); ok {
1526+ InstanceInitVarRef = cbRefPtr
1527+ } else {
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)
15241534 }
1525- InstanceInitVarRef = purego.NewCallback(fcb)
1526- glib.SaveCallback(InstanceInitVarPtr, InstanceInitVarRef)
15271535 }
15281536
15291537 cret := xTypeRegisterStaticSimple(ParentTypeVar, TypeNameVar, ClassSizeVar, ClassInitVarRef, InstanceSizeVar, InstanceInitVarRef, FlagsVar)
@@ -1537,17 +1545,19 @@ var xTypeRemoveClassCacheFunc func(uintptr, uintptr)
15371545 // g_type_remove_class_cache_func() to avoid leaks.
15381546 func TypeRemoveClassCacheFunc(CacheDataVar uintptr, CacheFuncVar *TypeClassCacheFunc) {
15391547
1540- CacheFuncVarPtr := uintptr(unsafe.Pointer(CacheFuncVar))
15411548 var CacheFuncVarRef uintptr
1542- if cbRefPtr, ok := glib.GetCallback(CacheFuncVarPtr); ok {
1543- CacheFuncVarRef = cbRefPtr
1544- } else {
1545- fcb := func(arg0 uintptr, arg1 *TypeClass) bool {
1546- cbFn := *CacheFuncVar
1547- return cbFn(arg0, arg1)
1549+ if CacheFuncVar != nil {
1550+ CacheFuncVarPtr := uintptr(unsafe.Pointer(CacheFuncVar))
1551+ if cbRefPtr, ok := glib.GetCallback(CacheFuncVarPtr); ok {
1552+ CacheFuncVarRef = cbRefPtr
1553+ } else {
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)
15481560 }
1549- CacheFuncVarRef = purego.NewCallback(fcb)
1550- glib.SaveCallback(CacheFuncVarPtr, CacheFuncVarRef)
15511561 }
15521562
15531563 xTypeRemoveClassCacheFunc(CacheDataVar, CacheFuncVarRef)
@@ -1560,17 +1570,19 @@ var xTypeRemoveInterfaceCheck func(uintptr, uintptr)
15601570 // g_type_add_interface_check().
15611571 func TypeRemoveInterfaceCheck(CheckDataVar uintptr, CheckFuncVar *TypeInterfaceCheckFunc) {
15621572
1563- CheckFuncVarPtr := uintptr(unsafe.Pointer(CheckFuncVar))
15641573 var CheckFuncVarRef uintptr
1565- if cbRefPtr, ok := glib.GetCallback(CheckFuncVarPtr); ok {
1566- CheckFuncVarRef = cbRefPtr
1567- } else {
1568- fcb := func(arg0 uintptr, arg1 *TypeInterface) {
1569- cbFn := *CheckFuncVar
1570- cbFn(arg0, arg1)
1574+ if CheckFuncVar != nil {
1575+ CheckFuncVarPtr := uintptr(unsafe.Pointer(CheckFuncVar))
1576+ if cbRefPtr, ok := glib.GetCallback(CheckFuncVarPtr); ok {
1577+ CheckFuncVarRef = cbRefPtr
1578+ } else {
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)
15711585 }
1572- CheckFuncVarRef = purego.NewCallback(fcb)
1573- glib.SaveCallback(CheckFuncVarPtr, CheckFuncVarRef)
15741586 }
15751587
15761588 xTypeRemoveInterfaceCheck(CheckDataVar, CheckFuncVarRef)
M v4/gobject/gvalue.go +11 -9
@@ -848,17 +848,19 @@ var xValueRegisterTransformFunc func(types.GType, types.GType, uintptr)
848848 // @dest_type will be replaced.
849849 func ValueRegisterTransformFunc(SrcTypeVar types.GType, DestTypeVar types.GType, TransformFuncVar *ValueTransform) {
850850
851- TransformFuncVarPtr := uintptr(unsafe.Pointer(TransformFuncVar))
852851 var TransformFuncVarRef uintptr
853- if cbRefPtr, ok := glib.GetCallback(TransformFuncVarPtr); ok {
854- TransformFuncVarRef = cbRefPtr
855- } else {
856- fcb := func(arg0 *Value, arg1 *Value) {
857- cbFn := *TransformFuncVar
858- cbFn(arg0, arg1)
852+ if TransformFuncVar != nil {
853+ TransformFuncVarPtr := uintptr(unsafe.Pointer(TransformFuncVar))
854+ if cbRefPtr, ok := glib.GetCallback(TransformFuncVarPtr); ok {
855+ TransformFuncVarRef = cbRefPtr
856+ } else {
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)
859863 }
860- TransformFuncVarRef = purego.NewCallback(fcb)
861- glib.SaveCallback(TransformFuncVarPtr, TransformFuncVarRef)
862864 }
863865
864866 xValueRegisterTransformFunc(SrcTypeVar, DestTypeVar, TransformFuncVarRef)
M v4/gobject/gvaluearray.go +22 -18
@@ -145,17 +145,19 @@ var xValueArraySort func(uintptr, uintptr) *ValueArray
145145 // C qsort() function.
146146 func (x *ValueArray) Sort(CompareFuncVar *glib.CompareFunc) *ValueArray {
147147
148- CompareFuncVarPtr := uintptr(unsafe.Pointer(CompareFuncVar))
149148 var CompareFuncVarRef uintptr
150- if cbRefPtr, ok := glib.GetCallback(CompareFuncVarPtr); ok {
151- CompareFuncVarRef = cbRefPtr
152- } else {
153- fcb := func(arg0 uintptr, arg1 uintptr) int {
154- cbFn := *CompareFuncVar
155- return cbFn(arg0, arg1)
149+ if CompareFuncVar != nil {
150+ CompareFuncVarPtr := uintptr(unsafe.Pointer(CompareFuncVar))
151+ if cbRefPtr, ok := glib.GetCallback(CompareFuncVarPtr); ok {
152+ CompareFuncVarRef = cbRefPtr
153+ } else {
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)
156160 }
157- CompareFuncVarRef = purego.NewCallback(fcb)
158- glib.SaveCallback(CompareFuncVarPtr, CompareFuncVarRef)
159161 }
160162
161163 cret := xValueArraySort(x.GoPointer(), CompareFuncVarRef)
@@ -171,17 +173,19 @@ var xValueArraySortWithData func(uintptr, uintptr, uintptr) *ValueArray
171173 // C qsort() function.
172174 func (x *ValueArray) SortWithData(CompareFuncVar *glib.CompareDataFunc, UserDataVar uintptr) *ValueArray {
173175
174- CompareFuncVarPtr := uintptr(unsafe.Pointer(CompareFuncVar))
175176 var CompareFuncVarRef uintptr
176- if cbRefPtr, ok := glib.GetCallback(CompareFuncVarPtr); ok {
177- CompareFuncVarRef = cbRefPtr
178- } else {
179- fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int {
180- cbFn := *CompareFuncVar
181- return cbFn(arg0, arg1, arg2)
177+ if CompareFuncVar != nil {
178+ CompareFuncVarPtr := uintptr(unsafe.Pointer(CompareFuncVar))
179+ if cbRefPtr, ok := glib.GetCallback(CompareFuncVarPtr); ok {
180+ CompareFuncVarRef = cbRefPtr
181+ } else {
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)
182188 }
183- CompareFuncVarRef = purego.NewCallback(fcb)
184- glib.SaveCallback(CompareFuncVarPtr, CompareFuncVarRef)
185189 }
186190
187191 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
247247 // an approximation of the path using just the allowed operations.
248248 func (x *Path) Foreach(FlagsVar PathForeachFlags, FuncVar *PathForeachFunc, UserDataVar uintptr) bool {
249249
250- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
251250 var FuncVarRef uintptr
252- if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok {
253- FuncVarRef = cbRefPtr
254- } else {
255- fcb := func(arg0 PathOperation, arg1 []graphene.Point, arg2 uint, arg3 float32, arg4 uintptr) bool {
256- cbFn := *FuncVar
257- return cbFn(arg0, arg1, arg2, arg3, arg4)
251+ if FuncVar != nil {
252+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
253+ if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok {
254+ FuncVarRef = cbRefPtr
255+ } else {
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)
258262 }
259- FuncVarRef = purego.NewCallback(fcb)
260- glib.SaveCallback(FuncVarPtr, FuncVarRef)
261263 }
262264
263265 cret := xPathForeach(x.GoPointer(), FlagsVar, FuncVarRef, UserDataVar)
@@ -283,17 +285,19 @@ var xPathForeachIntersection func(uintptr, *Path, uintptr, uintptr) bool
283285 // If @func returns `FALSE`, the iteration is stopped.
284286 func (x *Path) ForeachIntersection(Path2Var *Path, FuncVar *PathIntersectionFunc, UserDataVar uintptr) bool {
285287
286- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
287288 var FuncVarRef uintptr
288- if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok {
289- FuncVarRef = cbRefPtr
290- } else {
291- fcb := func(arg0 *Path, arg1 *PathPoint, arg2 *Path, arg3 *PathPoint, arg4 PathIntersection, arg5 uintptr) bool {
292- cbFn := *FuncVar
293- return cbFn(arg0, arg1, arg2, arg3, arg4, arg5)
289+ if FuncVar != nil {
290+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
291+ if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok {
292+ FuncVarRef = cbRefPtr
293+ } else {
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)
294300 }
295- FuncVarRef = purego.NewCallback(fcb)
296- glib.SaveCallback(FuncVarPtr, FuncVarRef)
297301 }
298302
299303 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
375375 }
376376 }
377377
378- DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
379378 var DestroyVarRef uintptr
380- if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok {
381- DestroyVarRef = cbRefPtr
382- } else {
383- fcb := func(arg0 uintptr) {
384- cbFn := *DestroyVar
385- cbFn(arg0)
379+ if DestroyVar != nil {
380+ DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
381+ if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok {
382+ DestroyVarRef = cbRefPtr
383+ } else {
384+ fcb := func(arg0 uintptr) {
385+ cbFn := *DestroyVar
386+ cbFn(arg0)
387+ }
388+ DestroyVarRef = purego.NewCallback(fcb)
389+ glib.SaveCallback(DestroyVarPtr, DestroyVarRef)
386390 }
387- DestroyVarRef = purego.NewCallback(fcb)
388- glib.SaveCallback(DestroyVarPtr, DestroyVarRef)
389391 }
390392
391393 xAssistantSetForwardPageFunc(x.GoPointer(), PageFuncVarRef, DataVar, DestroyVarRef)
M v4/gtk/gtkbuilderscope.go +22 -18
@@ -274,17 +274,19 @@ var xBuilderCScopeAddCallbackSymbol func(uintptr, string, uintptr)
274274 // namespace.
275275 func (x *BuilderCScope) AddCallbackSymbol(CallbackNameVar string, CallbackSymbolVar *gobject.Callback) {
276276
277- CallbackSymbolVarPtr := uintptr(unsafe.Pointer(CallbackSymbolVar))
278277 var CallbackSymbolVarRef uintptr
279- if cbRefPtr, ok := glib.GetCallback(CallbackSymbolVarPtr); ok {
280- CallbackSymbolVarRef = cbRefPtr
281- } else {
282- fcb := func() {
283- cbFn := *CallbackSymbolVar
284- cbFn()
278+ if CallbackSymbolVar != nil {
279+ CallbackSymbolVarPtr := uintptr(unsafe.Pointer(CallbackSymbolVar))
280+ if cbRefPtr, ok := glib.GetCallback(CallbackSymbolVarPtr); ok {
281+ CallbackSymbolVarRef = cbRefPtr
282+ } else {
283+ fcb := func() {
284+ cbFn := *CallbackSymbolVar
285+ cbFn()
286+ }
287+ CallbackSymbolVarRef = purego.NewCallback(fcb)
288+ glib.SaveCallback(CallbackSymbolVarPtr, CallbackSymbolVarRef)
285289 }
286- CallbackSymbolVarRef = purego.NewCallback(fcb)
287- glib.SaveCallback(CallbackSymbolVarPtr, CallbackSymbolVarRef)
288290 }
289291
290292 xBuilderCScopeAddCallbackSymbol(x.GoPointer(), CallbackNameVar, CallbackSymbolVarRef)
@@ -299,17 +301,19 @@ var xBuilderCScopeAddCallbackSymbols func(uintptr, string, uintptr, ...interface
299301 // for each symbol.
300302 func (x *BuilderCScope) AddCallbackSymbols(FirstCallbackNameVar string, FirstCallbackSymbolVar *gobject.Callback, varArgs ...interface{}) {
301303
302- FirstCallbackSymbolVarPtr := uintptr(unsafe.Pointer(FirstCallbackSymbolVar))
303304 var FirstCallbackSymbolVarRef uintptr
304- if cbRefPtr, ok := glib.GetCallback(FirstCallbackSymbolVarPtr); ok {
305- FirstCallbackSymbolVarRef = cbRefPtr
306- } else {
307- fcb := func() {
308- cbFn := *FirstCallbackSymbolVar
309- cbFn()
305+ if FirstCallbackSymbolVar != nil {
306+ FirstCallbackSymbolVarPtr := uintptr(unsafe.Pointer(FirstCallbackSymbolVar))
307+ if cbRefPtr, ok := glib.GetCallback(FirstCallbackSymbolVarPtr); ok {
308+ FirstCallbackSymbolVarRef = cbRefPtr
309+ } else {
310+ fcb := func() {
311+ cbFn := *FirstCallbackSymbolVar
312+ cbFn()
313+ }
314+ FirstCallbackSymbolVarRef = purego.NewCallback(fcb)
315+ glib.SaveCallback(FirstCallbackSymbolVarPtr, FirstCallbackSymbolVarRef)
310316 }
311- FirstCallbackSymbolVarRef = purego.NewCallback(fcb)
312- glib.SaveCallback(FirstCallbackSymbolVarPtr, FirstCallbackSymbolVarRef)
313317 }
314318
315319 xBuilderCScopeAddCallbackSymbols(x.GoPointer(), FirstCallbackNameVar, FirstCallbackSymbolVarRef, varArgs...)
M v4/gtk/gtkcellarea.go +22 -18
@@ -1299,17 +1299,19 @@ var xCellAreaForeach func(uintptr, uintptr, uintptr)
12991299 // Calls @callback for every `GtkCellRenderer` in @area.
13001300 func (x *CellArea) Foreach(CallbackVar *CellCallback, CallbackDataVar uintptr) {
13011301
1302- CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
13031302 var CallbackVarRef uintptr
1304- if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
1305- CallbackVarRef = cbRefPtr
1306- } else {
1307- fcb := func(arg0 uintptr, arg1 uintptr) bool {
1308- cbFn := *CallbackVar
1309- return cbFn(arg0, arg1)
1303+ if CallbackVar != nil {
1304+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
1305+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
1306+ CallbackVarRef = cbRefPtr
1307+ } else {
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)
13101314 }
1311- CallbackVarRef = purego.NewCallback(fcb)
1312- glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
13131315 }
13141316
13151317 xCellAreaForeach(x.GoPointer(), CallbackVarRef, CallbackDataVar)
@@ -1322,17 +1324,19 @@ var xCellAreaForeachAlloc func(uintptr, uintptr, uintptr, *gdk.Rectangle, *gdk.R
13221324 // allocated rectangle inside @cell_area.
13231325 func (x *CellArea) ForeachAlloc(ContextVar *CellAreaContext, WidgetVar *Widget, CellAreaVar *gdk.Rectangle, BackgroundAreaVar *gdk.Rectangle, CallbackVar *CellAllocCallback, CallbackDataVar uintptr) {
13241326
1325- CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
13261327 var CallbackVarRef uintptr
1327- if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
1328- CallbackVarRef = cbRefPtr
1329- } else {
1330- fcb := func(arg0 uintptr, arg1 *gdk.Rectangle, arg2 *gdk.Rectangle, arg3 uintptr) bool {
1331- cbFn := *CallbackVar
1332- return cbFn(arg0, arg1, arg2, arg3)
1328+ if CallbackVar != nil {
1329+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
1330+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
1331+ CallbackVarRef = cbRefPtr
1332+ } else {
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)
13331339 }
1334- CallbackVarRef = purego.NewCallback(fcb)
1335- glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
13361340 }
13371341
13381342 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
7070 }
7171 }
7272
73- UserDestroyVarPtr := uintptr(unsafe.Pointer(UserDestroyVar))
7473 var UserDestroyVarRef uintptr
75- if cbRefPtr, ok := glib.GetCallback(UserDestroyVarPtr); ok {
76- UserDestroyVarRef = cbRefPtr
77- } else {
78- fcb := func(arg0 uintptr) {
79- cbFn := *UserDestroyVar
80- cbFn(arg0)
74+ if UserDestroyVar != nil {
75+ UserDestroyVarPtr := uintptr(unsafe.Pointer(UserDestroyVar))
76+ if cbRefPtr, ok := glib.GetCallback(UserDestroyVarPtr); ok {
77+ UserDestroyVarRef = cbRefPtr
78+ } else {
79+ fcb := func(arg0 uintptr) {
80+ cbFn := *UserDestroyVar
81+ cbFn(arg0)
82+ }
83+ UserDestroyVarRef = purego.NewCallback(fcb)
84+ glib.SaveCallback(UserDestroyVarPtr, UserDestroyVarRef)
8185 }
82- UserDestroyVarRef = purego.NewCallback(fcb)
83- glib.SaveCallback(UserDestroyVarPtr, UserDestroyVarRef)
8486 }
8587
8688 cret := xNewCustomFilter(MatchFuncVarRef, UserDataVar, UserDestroyVarRef)
@@ -121,17 +123,19 @@ func (x *CustomFilter) SetFilterFunc(MatchFuncVar *CustomFilterFunc, UserDataVar
121123 }
122124 }
123125
124- UserDestroyVarPtr := uintptr(unsafe.Pointer(UserDestroyVar))
125126 var UserDestroyVarRef uintptr
126- if cbRefPtr, ok := glib.GetCallback(UserDestroyVarPtr); ok {
127- UserDestroyVarRef = cbRefPtr
128- } else {
129- fcb := func(arg0 uintptr) {
130- cbFn := *UserDestroyVar
131- cbFn(arg0)
127+ if UserDestroyVar != nil {
128+ UserDestroyVarPtr := uintptr(unsafe.Pointer(UserDestroyVar))
129+ if cbRefPtr, ok := glib.GetCallback(UserDestroyVarPtr); ok {
130+ UserDestroyVarRef = cbRefPtr
131+ } else {
132+ fcb := func(arg0 uintptr) {
133+ cbFn := *UserDestroyVar
134+ cbFn(arg0)
135+ }
136+ UserDestroyVarRef = purego.NewCallback(fcb)
137+ glib.SaveCallback(UserDestroyVarPtr, UserDestroyVarRef)
132138 }
133- UserDestroyVarRef = purego.NewCallback(fcb)
134- glib.SaveCallback(UserDestroyVarPtr, UserDestroyVarRef)
135139 }
136140
137141 xCustomFilterSetFilterFunc(x.GoPointer(), MatchFuncVarRef, UserDataVar, UserDestroyVarRef)
M v4/gtk/gtkcustomlayout.go +22 -18
@@ -77,30 +77,34 @@ func NewCustomLayout(RequestModeVar *CustomRequestModeFunc, MeasureVar *CustomMe
7777 }
7878 }
7979
80- MeasureVarPtr := uintptr(unsafe.Pointer(MeasureVar))
8180 var MeasureVarRef uintptr
82- if cbRefPtr, ok := glib.GetCallback(MeasureVarPtr); ok {
83- MeasureVarRef = cbRefPtr
84- } else {
85- fcb := func(arg0 uintptr, arg1 Orientation, arg2 int, arg3 *int, arg4 *int, arg5 *int, arg6 *int) {
86- cbFn := *MeasureVar
87- cbFn(arg0, arg1, arg2, arg3, arg4, arg5, arg6)
81+ if MeasureVar != nil {
82+ MeasureVarPtr := uintptr(unsafe.Pointer(MeasureVar))
83+ if cbRefPtr, ok := glib.GetCallback(MeasureVarPtr); ok {
84+ MeasureVarRef = cbRefPtr
85+ } else {
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)
8892 }
89- MeasureVarRef = purego.NewCallback(fcb)
90- glib.SaveCallback(MeasureVarPtr, MeasureVarRef)
9193 }
9294
93- AllocateVarPtr := uintptr(unsafe.Pointer(AllocateVar))
9495 var AllocateVarRef uintptr
95- if cbRefPtr, ok := glib.GetCallback(AllocateVarPtr); ok {
96- AllocateVarRef = cbRefPtr
97- } else {
98- fcb := func(arg0 uintptr, arg1 int, arg2 int, arg3 int) {
99- cbFn := *AllocateVar
100- cbFn(arg0, arg1, arg2, arg3)
96+ if AllocateVar != nil {
97+ AllocateVarPtr := uintptr(unsafe.Pointer(AllocateVar))
98+ if cbRefPtr, ok := glib.GetCallback(AllocateVarPtr); ok {
99+ AllocateVarRef = cbRefPtr
100+ } else {
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)
101107 }
102- AllocateVarRef = purego.NewCallback(fcb)
103- glib.SaveCallback(AllocateVarPtr, AllocateVarRef)
104108 }
105109
106110 cret := xNewCustomLayout(RequestModeVarRef, MeasureVarRef, AllocateVarRef)
M v4/gtk/gtkcustomsorter.go +11 -9
@@ -115,17 +115,19 @@ func (x *CustomSorter) SetSortFunc(SortFuncVar *glib.CompareDataFunc, UserDataVa
115115 }
116116 }
117117
118- UserDestroyVarPtr := uintptr(unsafe.Pointer(UserDestroyVar))
119118 var UserDestroyVarRef uintptr
120- if cbRefPtr, ok := glib.GetCallback(UserDestroyVarPtr); ok {
121- UserDestroyVarRef = cbRefPtr
122- } else {
123- fcb := func(arg0 uintptr) {
124- cbFn := *UserDestroyVar
125- cbFn(arg0)
119+ if UserDestroyVar != nil {
120+ UserDestroyVarPtr := uintptr(unsafe.Pointer(UserDestroyVar))
121+ if cbRefPtr, ok := glib.GetCallback(UserDestroyVarPtr); ok {
122+ UserDestroyVarRef = cbRefPtr
123+ } else {
124+ fcb := func(arg0 uintptr) {
125+ cbFn := *UserDestroyVar
126+ cbFn(arg0)
127+ }
128+ UserDestroyVarRef = purego.NewCallback(fcb)
129+ glib.SaveCallback(UserDestroyVarPtr, UserDestroyVarRef)
126130 }
127- UserDestroyVarRef = purego.NewCallback(fcb)
128- glib.SaveCallback(UserDestroyVarPtr, UserDestroyVarRef)
129131 }
130132
131133 xCustomSorterSetSortFunc(x.GoPointer(), SortFuncVarRef, UserDataVar, UserDestroyVarRef)
M v4/gtk/gtkdrawingarea.go +11 -9
@@ -259,17 +259,19 @@ func (x *DrawingArea) SetDrawFunc(DrawFuncVar *DrawingAreaDrawFunc, UserDataVar
259259 }
260260 }
261261
262- DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
263262 var DestroyVarRef uintptr
264- if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok {
265- DestroyVarRef = cbRefPtr
266- } else {
267- fcb := func(arg0 uintptr) {
268- cbFn := *DestroyVar
269- cbFn(arg0)
263+ if DestroyVar != nil {
264+ DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
265+ if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok {
266+ DestroyVarRef = cbRefPtr
267+ } else {
268+ fcb := func(arg0 uintptr) {
269+ cbFn := *DestroyVar
270+ cbFn(arg0)
271+ }
272+ DestroyVarRef = purego.NewCallback(fcb)
273+ glib.SaveCallback(DestroyVarPtr, DestroyVarRef)
270274 }
271- DestroyVarRef = purego.NewCallback(fcb)
272- glib.SaveCallback(DestroyVarPtr, DestroyVarRef)
273275 }
274276
275277 xDrawingAreaSetDrawFunc(x.GoPointer(), DrawFuncVarRef, UserDataVar, DestroyVarRef)
M v4/gtk/gtkentrycompletion.go +22 -18
@@ -285,30 +285,34 @@ var xEntryCompletionSetMatchFunc func(uintptr, uintptr, uintptr, uintptr)
285285 // should not be in the completion list.
286286 func (x *EntryCompletion) SetMatchFunc(FuncVar *EntryCompletionMatchFunc, FuncDataVar uintptr, FuncNotifyVar *glib.DestroyNotify) {
287287
288- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
289288 var FuncVarRef uintptr
290- if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok {
291- FuncVarRef = cbRefPtr
292- } else {
293- fcb := func(arg0 uintptr, arg1 string, arg2 *TreeIter, arg3 uintptr) bool {
294- cbFn := *FuncVar
295- return cbFn(arg0, arg1, arg2, arg3)
289+ if FuncVar != nil {
290+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
291+ if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok {
292+ FuncVarRef = cbRefPtr
293+ } else {
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)
296300 }
297- FuncVarRef = purego.NewCallback(fcb)
298- glib.SaveCallback(FuncVarPtr, FuncVarRef)
299301 }
300302
301- FuncNotifyVarPtr := uintptr(unsafe.Pointer(FuncNotifyVar))
302303 var FuncNotifyVarRef uintptr
303- if cbRefPtr, ok := glib.GetCallback(FuncNotifyVarPtr); ok {
304- FuncNotifyVarRef = cbRefPtr
305- } else {
306- fcb := func(arg0 uintptr) {
307- cbFn := *FuncNotifyVar
308- cbFn(arg0)
304+ if FuncNotifyVar != nil {
305+ FuncNotifyVarPtr := uintptr(unsafe.Pointer(FuncNotifyVar))
306+ if cbRefPtr, ok := glib.GetCallback(FuncNotifyVarPtr); ok {
307+ FuncNotifyVarRef = cbRefPtr
308+ } else {
309+ fcb := func(arg0 uintptr) {
310+ cbFn := *FuncNotifyVar
311+ cbFn(arg0)
312+ }
313+ FuncNotifyVarRef = purego.NewCallback(fcb)
314+ glib.SaveCallback(FuncNotifyVarPtr, FuncNotifyVarRef)
309315 }
310- FuncNotifyVarRef = purego.NewCallback(fcb)
311- glib.SaveCallback(FuncNotifyVarPtr, FuncNotifyVarRef)
312316 }
313317
314318 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
196196 }
197197 }
198198
199- CallbackFuncVarPtr := uintptr(unsafe.Pointer(CallbackFuncVar))
200199 var CallbackFuncVarRef uintptr
201- if cbRefPtr, ok := glib.GetCallback(CallbackFuncVarPtr); ok {
202- CallbackFuncVarRef = cbRefPtr
203- } else {
204- fcb := func() {
205- cbFn := *CallbackFuncVar
206- cbFn()
200+ if CallbackFuncVar != nil {
201+ CallbackFuncVarPtr := uintptr(unsafe.Pointer(CallbackFuncVar))
202+ if cbRefPtr, ok := glib.GetCallback(CallbackFuncVarPtr); ok {
203+ CallbackFuncVarRef = cbRefPtr
204+ } else {
205+ fcb := func() {
206+ cbFn := *CallbackFuncVar
207+ cbFn()
208+ }
209+ CallbackFuncVarRef = purego.NewCallback(fcb)
210+ glib.SaveCallback(CallbackFuncVarPtr, CallbackFuncVarRef)
207211 }
208- CallbackFuncVarRef = purego.NewCallback(fcb)
209- glib.SaveCallback(CallbackFuncVarPtr, CallbackFuncVarRef)
210212 }
211213
212214 var UserDestroyVarRef uintptr
@@ -672,30 +674,34 @@ var xExpressionWatch func(uintptr, uintptr, uintptr, uintptr, uintptr) *Expressi
672674 // the @notify will be invoked.
673675 func (x *Expression) Watch(ThisVar *gobject.Object, NotifyVar *ExpressionNotify, UserDataVar uintptr, UserDestroyVar *glib.DestroyNotify) *ExpressionWatch {
674676
675- NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
676677 var NotifyVarRef uintptr
677- if cbRefPtr, ok := glib.GetCallback(NotifyVarPtr); ok {
678- NotifyVarRef = cbRefPtr
679- } else {
680- fcb := func(arg0 uintptr) {
681- cbFn := *NotifyVar
682- cbFn(arg0)
678+ if NotifyVar != nil {
679+ NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
680+ if cbRefPtr, ok := glib.GetCallback(NotifyVarPtr); ok {
681+ NotifyVarRef = cbRefPtr
682+ } else {
683+ fcb := func(arg0 uintptr) {
684+ cbFn := *NotifyVar
685+ cbFn(arg0)
686+ }
687+ NotifyVarRef = purego.NewCallback(fcb)
688+ glib.SaveCallback(NotifyVarPtr, NotifyVarRef)
683689 }
684- NotifyVarRef = purego.NewCallback(fcb)
685- glib.SaveCallback(NotifyVarPtr, NotifyVarRef)
686690 }
687691
688- UserDestroyVarPtr := uintptr(unsafe.Pointer(UserDestroyVar))
689692 var UserDestroyVarRef uintptr
690- if cbRefPtr, ok := glib.GetCallback(UserDestroyVarPtr); ok {
691- UserDestroyVarRef = cbRefPtr
692- } else {
693- fcb := func(arg0 uintptr) {
694- cbFn := *UserDestroyVar
695- cbFn(arg0)
693+ if UserDestroyVar != nil {
694+ UserDestroyVarPtr := uintptr(unsafe.Pointer(UserDestroyVar))
695+ if cbRefPtr, ok := glib.GetCallback(UserDestroyVarPtr); ok {
696+ UserDestroyVarRef = cbRefPtr
697+ } else {
698+ fcb := func(arg0 uintptr) {
699+ cbFn := *UserDestroyVar
700+ cbFn(arg0)
701+ }
702+ UserDestroyVarRef = purego.NewCallback(fcb)
703+ glib.SaveCallback(UserDestroyVarPtr, UserDestroyVarRef)
696704 }
697- UserDestroyVarRef = purego.NewCallback(fcb)
698- glib.SaveCallback(UserDestroyVarPtr, UserDestroyVarRef)
699705 }
700706
701707 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)
198198 // should be implemented by the model.
199199 func (x *FlowBox) BindModel(ModelVar gio.ListModel, CreateWidgetFuncVar *FlowBoxCreateWidgetFunc, UserDataVar uintptr, UserDataFreeFuncVar *glib.DestroyNotify) {
200200
201- CreateWidgetFuncVarPtr := uintptr(unsafe.Pointer(CreateWidgetFuncVar))
202201 var CreateWidgetFuncVarRef uintptr
203- if cbRefPtr, ok := glib.GetCallback(CreateWidgetFuncVarPtr); ok {
204- CreateWidgetFuncVarRef = cbRefPtr
205- } else {
206- fcb := func(arg0 uintptr, arg1 uintptr) uintptr {
207- cbFn := *CreateWidgetFuncVar
208- return cbFn(arg0, arg1)
202+ if CreateWidgetFuncVar != nil {
203+ CreateWidgetFuncVarPtr := uintptr(unsafe.Pointer(CreateWidgetFuncVar))
204+ if cbRefPtr, ok := glib.GetCallback(CreateWidgetFuncVarPtr); ok {
205+ CreateWidgetFuncVarRef = cbRefPtr
206+ } else {
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)
209213 }
210- CreateWidgetFuncVarRef = purego.NewCallback(fcb)
211- glib.SaveCallback(CreateWidgetFuncVarPtr, CreateWidgetFuncVarRef)
212214 }
213215
214- UserDataFreeFuncVarPtr := uintptr(unsafe.Pointer(UserDataFreeFuncVar))
215216 var UserDataFreeFuncVarRef uintptr
216- if cbRefPtr, ok := glib.GetCallback(UserDataFreeFuncVarPtr); ok {
217- UserDataFreeFuncVarRef = cbRefPtr
218- } else {
219- fcb := func(arg0 uintptr) {
220- cbFn := *UserDataFreeFuncVar
221- cbFn(arg0)
217+ if UserDataFreeFuncVar != nil {
218+ UserDataFreeFuncVarPtr := uintptr(unsafe.Pointer(UserDataFreeFuncVar))
219+ if cbRefPtr, ok := glib.GetCallback(UserDataFreeFuncVarPtr); ok {
220+ UserDataFreeFuncVarRef = cbRefPtr
221+ } else {
222+ fcb := func(arg0 uintptr) {
223+ cbFn := *UserDataFreeFuncVar
224+ cbFn(arg0)
225+ }
226+ UserDataFreeFuncVarRef = purego.NewCallback(fcb)
227+ glib.SaveCallback(UserDataFreeFuncVarPtr, UserDataFreeFuncVarRef)
222228 }
223- UserDataFreeFuncVarRef = purego.NewCallback(fcb)
224- glib.SaveCallback(UserDataFreeFuncVarPtr, UserDataFreeFuncVarRef)
225229 }
226230
227231 xFlowBoxBindModel(x.GoPointer(), ModelVar.GoPointer(), CreateWidgetFuncVarRef, UserDataVar, UserDataFreeFuncVarRef)
@@ -440,17 +444,19 @@ var xFlowBoxSelectedForeach func(uintptr, uintptr, uintptr)
440444 // this function.
441445 func (x *FlowBox) SelectedForeach(FuncVar *FlowBoxForeachFunc, DataVar uintptr) {
442446
443- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
444447 var FuncVarRef uintptr
445- if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok {
446- FuncVarRef = cbRefPtr
447- } else {
448- fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
449- cbFn := *FuncVar
450- cbFn(arg0, arg1, arg2)
448+ if FuncVar != nil {
449+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
450+ if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok {
451+ FuncVarRef = cbRefPtr
452+ } else {
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)
451459 }
452- FuncVarRef = purego.NewCallback(fcb)
453- glib.SaveCallback(FuncVarPtr, FuncVarRef)
454460 }
455461
456462 xFlowBoxSelectedForeach(x.GoPointer(), FuncVarRef, DataVar)
@@ -508,17 +514,19 @@ func (x *FlowBox) SetFilterFunc(FilterFuncVar *FlowBoxFilterFunc, UserDataVar ui
508514 }
509515 }
510516
511- DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
512517 var DestroyVarRef uintptr
513- if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok {
514- DestroyVarRef = cbRefPtr
515- } else {
516- fcb := func(arg0 uintptr) {
517- cbFn := *DestroyVar
518- cbFn(arg0)
518+ if DestroyVar != nil {
519+ DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
520+ if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok {
521+ DestroyVarRef = cbRefPtr
522+ } else {
523+ fcb := func(arg0 uintptr) {
524+ cbFn := *DestroyVar
525+ cbFn(arg0)
526+ }
527+ DestroyVarRef = purego.NewCallback(fcb)
528+ glib.SaveCallback(DestroyVarPtr, DestroyVarRef)
519529 }
520- DestroyVarRef = purego.NewCallback(fcb)
521- glib.SaveCallback(DestroyVarPtr, DestroyVarRef)
522530 }
523531
524532 xFlowBoxSetFilterFunc(x.GoPointer(), FilterFuncVarRef, UserDataVar, DestroyVarRef)
@@ -626,17 +634,19 @@ func (x *FlowBox) SetSortFunc(SortFuncVar *FlowBoxSortFunc, UserDataVar uintptr,
626634 }
627635 }
628636
629- DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
630637 var DestroyVarRef uintptr
631- if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok {
632- DestroyVarRef = cbRefPtr
633- } else {
634- fcb := func(arg0 uintptr) {
635- cbFn := *DestroyVar
636- cbFn(arg0)
638+ if DestroyVar != nil {
639+ DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
640+ if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok {
641+ DestroyVarRef = cbRefPtr
642+ } else {
643+ fcb := func(arg0 uintptr) {
644+ cbFn := *DestroyVar
645+ cbFn(arg0)
646+ }
647+ DestroyVarRef = purego.NewCallback(fcb)
648+ glib.SaveCallback(DestroyVarPtr, DestroyVarRef)
637649 }
638- DestroyVarRef = purego.NewCallback(fcb)
639- glib.SaveCallback(DestroyVarPtr, DestroyVarRef)
640650 }
641651
642652 xFlowBoxSetSortFunc(x.GoPointer(), SortFuncVarRef, UserDataVar, DestroyVarRef)
M v4/gtk/gtkiconview.go +11 -9
@@ -536,17 +536,19 @@ var xIconViewSelectedForeach func(uintptr, uintptr, uintptr)
536536 // selection cannot be modified from within this function.
537537 func (x *IconView) SelectedForeach(FuncVar *IconViewForeachFunc, DataVar uintptr) {
538538
539- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
540539 var FuncVarRef uintptr
541- if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok {
542- FuncVarRef = cbRefPtr
543- } else {
544- fcb := func(arg0 uintptr, arg1 *TreePath, arg2 uintptr) {
545- cbFn := *FuncVar
546- cbFn(arg0, arg1, arg2)
540+ if FuncVar != nil {
541+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
542+ if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok {
543+ FuncVarRef = cbRefPtr
544+ } else {
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)
547551 }
548- FuncVarRef = purego.NewCallback(fcb)
549- glib.SaveCallback(FuncVarPtr, FuncVarRef)
550552 }
551553
552554 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
224224 }
225225 }
226226
227- UserDataFreeFuncVarPtr := uintptr(unsafe.Pointer(UserDataFreeFuncVar))
228227 var UserDataFreeFuncVarRef uintptr
229- if cbRefPtr, ok := glib.GetCallback(UserDataFreeFuncVarPtr); ok {
230- UserDataFreeFuncVarRef = cbRefPtr
231- } else {
232- fcb := func(arg0 uintptr) {
233- cbFn := *UserDataFreeFuncVar
234- cbFn(arg0)
228+ if UserDataFreeFuncVar != nil {
229+ UserDataFreeFuncVarPtr := uintptr(unsafe.Pointer(UserDataFreeFuncVar))
230+ if cbRefPtr, ok := glib.GetCallback(UserDataFreeFuncVarPtr); ok {
231+ UserDataFreeFuncVarRef = cbRefPtr
232+ } else {
233+ fcb := func(arg0 uintptr) {
234+ cbFn := *UserDataFreeFuncVar
235+ cbFn(arg0)
236+ }
237+ UserDataFreeFuncVarRef = purego.NewCallback(fcb)
238+ glib.SaveCallback(UserDataFreeFuncVarPtr, UserDataFreeFuncVarRef)
235239 }
236- UserDataFreeFuncVarRef = purego.NewCallback(fcb)
237- glib.SaveCallback(UserDataFreeFuncVarPtr, UserDataFreeFuncVarRef)
238240 }
239241
240242 xListBoxBindModel(x.GoPointer(), ModelVar.GoPointer(), CreateWidgetFuncVarRef, UserDataVar, UserDataFreeFuncVarRef)
@@ -503,17 +505,19 @@ var xListBoxSelectedForeach func(uintptr, uintptr, uintptr)
503505 // Note that the selection cannot be modified from within this function.
504506 func (x *ListBox) SelectedForeach(FuncVar *ListBoxForeachFunc, DataVar uintptr) {
505507
506- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
507508 var FuncVarRef uintptr
508- if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok {
509- FuncVarRef = cbRefPtr
510- } else {
511- fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
512- cbFn := *FuncVar
513- cbFn(arg0, arg1, arg2)
509+ if FuncVar != nil {
510+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
511+ if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok {
512+ FuncVarRef = cbRefPtr
513+ } else {
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)
514520 }
515- FuncVarRef = purego.NewCallback(fcb)
516- glib.SaveCallback(FuncVarPtr, FuncVarRef)
517521 }
518522
519523 xListBoxSelectedForeach(x.GoPointer(), FuncVarRef, DataVar)
@@ -580,17 +584,19 @@ func (x *ListBox) SetFilterFunc(FilterFuncVar *ListBoxFilterFunc, UserDataVar ui
580584 }
581585 }
582586
583- DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
584587 var DestroyVarRef uintptr
585- if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok {
586- DestroyVarRef = cbRefPtr
587- } else {
588- fcb := func(arg0 uintptr) {
589- cbFn := *DestroyVar
590- cbFn(arg0)
588+ if DestroyVar != nil {
589+ DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
590+ if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok {
591+ DestroyVarRef = cbRefPtr
592+ } else {
593+ fcb := func(arg0 uintptr) {
594+ cbFn := *DestroyVar
595+ cbFn(arg0)
596+ }
597+ DestroyVarRef = purego.NewCallback(fcb)
598+ glib.SaveCallback(DestroyVarPtr, DestroyVarRef)
591599 }
592- DestroyVarRef = purego.NewCallback(fcb)
593- glib.SaveCallback(DestroyVarPtr, DestroyVarRef)
594600 }
595601
596602 xListBoxSetFilterFunc(x.GoPointer(), FilterFuncVarRef, UserDataVar, DestroyVarRef)
@@ -641,17 +647,19 @@ func (x *ListBox) SetHeaderFunc(UpdateHeaderVar *ListBoxUpdateHeaderFunc, UserDa
641647 }
642648 }
643649
644- DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
645650 var DestroyVarRef uintptr
646- if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok {
647- DestroyVarRef = cbRefPtr
648- } else {
649- fcb := func(arg0 uintptr) {
650- cbFn := *DestroyVar
651- cbFn(arg0)
651+ if DestroyVar != nil {
652+ DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
653+ if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok {
654+ DestroyVarRef = cbRefPtr
655+ } else {
656+ fcb := func(arg0 uintptr) {
657+ cbFn := *DestroyVar
658+ cbFn(arg0)
659+ }
660+ DestroyVarRef = purego.NewCallback(fcb)
661+ glib.SaveCallback(DestroyVarPtr, DestroyVarRef)
652662 }
653- DestroyVarRef = purego.NewCallback(fcb)
654- glib.SaveCallback(DestroyVarPtr, DestroyVarRef)
655663 }
656664
657665 xListBoxSetHeaderFunc(x.GoPointer(), UpdateHeaderVarRef, UserDataVar, DestroyVarRef)
@@ -718,17 +726,19 @@ func (x *ListBox) SetSortFunc(SortFuncVar *ListBoxSortFunc, UserDataVar uintptr,
718726 }
719727 }
720728
721- DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
722729 var DestroyVarRef uintptr
723- if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok {
724- DestroyVarRef = cbRefPtr
725- } else {
726- fcb := func(arg0 uintptr) {
727- cbFn := *DestroyVar
728- cbFn(arg0)
730+ if DestroyVar != nil {
731+ DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
732+ if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok {
733+ DestroyVarRef = cbRefPtr
734+ } else {
735+ fcb := func(arg0 uintptr) {
736+ cbFn := *DestroyVar
737+ cbFn(arg0)
738+ }
739+ DestroyVarRef = purego.NewCallback(fcb)
740+ glib.SaveCallback(DestroyVarPtr, DestroyVarRef)
729741 }
730- DestroyVarRef = purego.NewCallback(fcb)
731- glib.SaveCallback(DestroyVarPtr, DestroyVarRef)
732742 }
733743
734744 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
101101 }
102102 }
103103
104- UserDestroyVarPtr := uintptr(unsafe.Pointer(UserDestroyVar))
105104 var UserDestroyVarRef uintptr
106- if cbRefPtr, ok := glib.GetCallback(UserDestroyVarPtr); ok {
107- UserDestroyVarRef = cbRefPtr
108- } else {
109- fcb := func(arg0 uintptr) {
110- cbFn := *UserDestroyVar
111- cbFn(arg0)
105+ if UserDestroyVar != nil {
106+ UserDestroyVarPtr := uintptr(unsafe.Pointer(UserDestroyVar))
107+ if cbRefPtr, ok := glib.GetCallback(UserDestroyVarPtr); ok {
108+ UserDestroyVarRef = cbRefPtr
109+ } else {
110+ fcb := func(arg0 uintptr) {
111+ cbFn := *UserDestroyVar
112+ cbFn(arg0)
113+ }
114+ UserDestroyVarRef = purego.NewCallback(fcb)
115+ glib.SaveCallback(UserDestroyVarPtr, UserDestroyVarRef)
112116 }
113- UserDestroyVarRef = purego.NewCallback(fcb)
114- glib.SaveCallback(UserDestroyVarPtr, UserDestroyVarRef)
115117 }
116118
117119 cret := xNewMapListModel(ModelVar.GoPointer(), MapFuncVarRef, UserDataVar, UserDestroyVarRef)
@@ -180,17 +182,19 @@ func (x *MapListModel) SetMapFunc(MapFuncVar *MapListModelMapFunc, UserDataVar u
180182 }
181183 }
182184
183- UserDestroyVarPtr := uintptr(unsafe.Pointer(UserDestroyVar))
184185 var UserDestroyVarRef uintptr
185- if cbRefPtr, ok := glib.GetCallback(UserDestroyVarPtr); ok {
186- UserDestroyVarRef = cbRefPtr
187- } else {
188- fcb := func(arg0 uintptr) {
189- cbFn := *UserDestroyVar
190- cbFn(arg0)
186+ if UserDestroyVar != nil {
187+ UserDestroyVarPtr := uintptr(unsafe.Pointer(UserDestroyVar))
188+ if cbRefPtr, ok := glib.GetCallback(UserDestroyVarPtr); ok {
189+ UserDestroyVarRef = cbRefPtr
190+ } else {
191+ fcb := func(arg0 uintptr) {
192+ cbFn := *UserDestroyVar
193+ cbFn(arg0)
194+ }
195+ UserDestroyVarRef = purego.NewCallback(fcb)
196+ glib.SaveCallback(UserDestroyVarPtr, UserDestroyVarRef)
191197 }
192- UserDestroyVarRef = purego.NewCallback(fcb)
193- glib.SaveCallback(UserDestroyVarPtr, UserDestroyVarRef)
194198 }
195199
196200 xMapListModelSetMapFunc(x.GoPointer(), MapFuncVarRef, UserDataVar, UserDestroyVarRef)
M v4/gtk/gtkprinter.go +22 -18
@@ -75,30 +75,34 @@ var xEnumeratePrinters func(uintptr, uintptr, uintptr, bool)
7575 // If @func returns true, the enumeration is stopped.
7676 func EnumeratePrinters(FuncVar *PrinterFunc, DataVar uintptr, DestroyVar *glib.DestroyNotify, WaitVar bool) {
7777
78- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
7978 var FuncVarRef uintptr
80- if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok {
81- FuncVarRef = cbRefPtr
82- } else {
83- fcb := func(arg0 uintptr, arg1 uintptr) bool {
84- cbFn := *FuncVar
85- return cbFn(arg0, arg1)
79+ if FuncVar != nil {
80+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
81+ if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok {
82+ FuncVarRef = cbRefPtr
83+ } else {
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)
8690 }
87- FuncVarRef = purego.NewCallback(fcb)
88- glib.SaveCallback(FuncVarPtr, FuncVarRef)
8991 }
9092
91- DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
9293 var DestroyVarRef uintptr
93- if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok {
94- DestroyVarRef = cbRefPtr
95- } else {
96- fcb := func(arg0 uintptr) {
97- cbFn := *DestroyVar
98- cbFn(arg0)
94+ if DestroyVar != nil {
95+ DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
96+ if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok {
97+ DestroyVarRef = cbRefPtr
98+ } else {
99+ fcb := func(arg0 uintptr) {
100+ cbFn := *DestroyVar
101+ cbFn(arg0)
102+ }
103+ DestroyVarRef = purego.NewCallback(fcb)
104+ glib.SaveCallback(DestroyVarPtr, DestroyVarRef)
99105 }
100- DestroyVarRef = purego.NewCallback(fcb)
101- glib.SaveCallback(DestroyVarPtr, DestroyVarRef)
102106 }
103107
104108 xEnumeratePrinters(FuncVarRef, DataVar, DestroyVarRef, WaitVar)
M v4/gtk/gtkprintjob.go +22 -18
@@ -232,30 +232,34 @@ var xPrintJobSend func(uintptr, uintptr, uintptr, uintptr)
232232 // Sends the print job off to the printer.
233233 func (x *PrintJob) Send(CallbackVar *PrintJobCompleteFunc, UserDataVar uintptr, DnotifyVar *glib.DestroyNotify) {
234234
235- CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
236235 var CallbackVarRef uintptr
237- if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
238- CallbackVarRef = cbRefPtr
239- } else {
240- fcb := func(arg0 uintptr, arg1 uintptr, arg2 *glib.Error) {
241- cbFn := *CallbackVar
242- cbFn(arg0, arg1, arg2)
236+ if CallbackVar != nil {
237+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
238+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
239+ CallbackVarRef = cbRefPtr
240+ } else {
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)
243247 }
244- CallbackVarRef = purego.NewCallback(fcb)
245- glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
246248 }
247249
248- DnotifyVarPtr := uintptr(unsafe.Pointer(DnotifyVar))
249250 var DnotifyVarRef uintptr
250- if cbRefPtr, ok := glib.GetCallback(DnotifyVarPtr); ok {
251- DnotifyVarRef = cbRefPtr
252- } else {
253- fcb := func(arg0 uintptr) {
254- cbFn := *DnotifyVar
255- cbFn(arg0)
251+ if DnotifyVar != nil {
252+ DnotifyVarPtr := uintptr(unsafe.Pointer(DnotifyVar))
253+ if cbRefPtr, ok := glib.GetCallback(DnotifyVarPtr); ok {
254+ DnotifyVarRef = cbRefPtr
255+ } else {
256+ fcb := func(arg0 uintptr) {
257+ cbFn := *DnotifyVar
258+ cbFn(arg0)
259+ }
260+ DnotifyVarRef = purego.NewCallback(fcb)
261+ glib.SaveCallback(DnotifyVarPtr, DnotifyVarRef)
256262 }
257- DnotifyVarRef = purego.NewCallback(fcb)
258- glib.SaveCallback(DnotifyVarPtr, DnotifyVarRef)
259263 }
260264
261265 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
528528 // @done_cb from a signal handler for the ::response signal of the dialog.
529529 func PrintRunPageSetupDialogAsync(ParentVar *Window, PageSetupVar *PageSetup, SettingsVar *PrintSettings, DoneCbVar *PageSetupDoneFunc, DataVar uintptr) {
530530
531- DoneCbVarPtr := uintptr(unsafe.Pointer(DoneCbVar))
532531 var DoneCbVarRef uintptr
533- if cbRefPtr, ok := glib.GetCallback(DoneCbVarPtr); ok {
534- DoneCbVarRef = cbRefPtr
535- } else {
536- fcb := func(arg0 uintptr, arg1 uintptr) {
537- cbFn := *DoneCbVar
538- cbFn(arg0, arg1)
532+ if DoneCbVar != nil {
533+ DoneCbVarPtr := uintptr(unsafe.Pointer(DoneCbVar))
534+ if cbRefPtr, ok := glib.GetCallback(DoneCbVarPtr); ok {
535+ DoneCbVarRef = cbRefPtr
536+ } else {
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)
539543 }
540- DoneCbVarRef = purego.NewCallback(fcb)
541- glib.SaveCallback(DoneCbVarPtr, DoneCbVarRef)
542544 }
543545
544546 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)
253253 // Calls @func for each key-value pair of @settings.
254254 func (x *PrintSettings) Foreach(FuncVar *PrintSettingsFunc, UserDataVar uintptr) {
255255
256- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
257256 var FuncVarRef uintptr
258- if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok {
259- FuncVarRef = cbRefPtr
260- } else {
261- fcb := func(arg0 string, arg1 string, arg2 uintptr) {
262- cbFn := *FuncVar
263- cbFn(arg0, arg1, arg2)
257+ if FuncVar != nil {
258+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
259+ if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok {
260+ FuncVarRef = cbRefPtr
261+ } else {
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)
264268 }
265- FuncVarRef = purego.NewCallback(fcb)
266- glib.SaveCallback(FuncVarPtr, FuncVarRef)
267269 }
268270
269271 xPrintSettingsForeach(x.GoPointer(), FuncVarRef, UserDataVar)
M v4/gtk/gtkshortcutaction.go +22 -18
@@ -164,30 +164,34 @@ var xNewCallbackAction func(uintptr, uintptr, uintptr) uintptr
164164 func NewCallbackAction(CallbackVar *ShortcutFunc, DataVar uintptr, DestroyVar *glib.DestroyNotify) *CallbackAction {
165165 var cls *CallbackAction
166166
167- CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
168167 var CallbackVarRef uintptr
169- if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
170- CallbackVarRef = cbRefPtr
171- } else {
172- fcb := func(arg0 uintptr, arg1 *glib.Variant, arg2 uintptr) bool {
173- cbFn := *CallbackVar
174- return cbFn(arg0, arg1, arg2)
168+ if CallbackVar != nil {
169+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
170+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
171+ CallbackVarRef = cbRefPtr
172+ } else {
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)
175179 }
176- CallbackVarRef = purego.NewCallback(fcb)
177- glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
178180 }
179181
180- DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
181182 var DestroyVarRef uintptr
182- if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok {
183- DestroyVarRef = cbRefPtr
184- } else {
185- fcb := func(arg0 uintptr) {
186- cbFn := *DestroyVar
187- cbFn(arg0)
183+ if DestroyVar != nil {
184+ DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
185+ if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok {
186+ DestroyVarRef = cbRefPtr
187+ } else {
188+ fcb := func(arg0 uintptr) {
189+ cbFn := *DestroyVar
190+ cbFn(arg0)
191+ }
192+ DestroyVarRef = purego.NewCallback(fcb)
193+ glib.SaveCallback(DestroyVarPtr, DestroyVarRef)
188194 }
189- DestroyVarRef = purego.NewCallback(fcb)
190- glib.SaveCallback(DestroyVarPtr, DestroyVarRef)
191195 }
192196
193197 cret := xNewCallbackAction(CallbackVarRef, DataVar, DestroyVarRef)
M v4/gtk/gtktextbuffer.go +22 -18
@@ -627,30 +627,34 @@ var xTextBufferAddCommitNotify func(uintptr, TextBufferNotifyFlags, uintptr, uin
627627 // other signal handlers which may further modify the [type@Gtk.TextBuffer].
628628 func (x *TextBuffer) AddCommitNotify(FlagsVar TextBufferNotifyFlags, CommitNotifyVar *TextBufferCommitNotify, UserDataVar uintptr, DestroyVar *glib.DestroyNotify) uint {
629629
630- CommitNotifyVarPtr := uintptr(unsafe.Pointer(CommitNotifyVar))
631630 var CommitNotifyVarRef uintptr
632- if cbRefPtr, ok := glib.GetCallback(CommitNotifyVarPtr); ok {
633- CommitNotifyVarRef = cbRefPtr
634- } else {
635- fcb := func(arg0 uintptr, arg1 TextBufferNotifyFlags, arg2 uint, arg3 uint, arg4 uintptr) {
636- cbFn := *CommitNotifyVar
637- cbFn(arg0, arg1, arg2, arg3, arg4)
631+ if CommitNotifyVar != nil {
632+ CommitNotifyVarPtr := uintptr(unsafe.Pointer(CommitNotifyVar))
633+ if cbRefPtr, ok := glib.GetCallback(CommitNotifyVarPtr); ok {
634+ CommitNotifyVarRef = cbRefPtr
635+ } else {
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)
638642 }
639- CommitNotifyVarRef = purego.NewCallback(fcb)
640- glib.SaveCallback(CommitNotifyVarPtr, CommitNotifyVarRef)
641643 }
642644
643- DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
644645 var DestroyVarRef uintptr
645- if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok {
646- DestroyVarRef = cbRefPtr
647- } else {
648- fcb := func(arg0 uintptr) {
649- cbFn := *DestroyVar
650- cbFn(arg0)
646+ if DestroyVar != nil {
647+ DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
648+ if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok {
649+ DestroyVarRef = cbRefPtr
650+ } else {
651+ fcb := func(arg0 uintptr) {
652+ cbFn := *DestroyVar
653+ cbFn(arg0)
654+ }
655+ DestroyVarRef = purego.NewCallback(fcb)
656+ glib.SaveCallback(DestroyVarPtr, DestroyVarRef)
651657 }
652- DestroyVarRef = purego.NewCallback(fcb)
653- glib.SaveCallback(DestroyVarPtr, DestroyVarRef)
654658 }
655659
656660 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
136136 // but goes backward from @iter.
137137 func (x *TextIter) BackwardFindChar(PredVar *TextCharPredicate, UserDataVar uintptr, LimitVar *TextIter) bool {
138138
139- PredVarPtr := uintptr(unsafe.Pointer(PredVar))
140139 var PredVarRef uintptr
141- if cbRefPtr, ok := glib.GetCallback(PredVarPtr); ok {
142- PredVarRef = cbRefPtr
143- } else {
144- fcb := func(arg0 uint32, arg1 uintptr) bool {
145- cbFn := *PredVar
146- return cbFn(arg0, arg1)
140+ if PredVar != nil {
141+ PredVarPtr := uintptr(unsafe.Pointer(PredVar))
142+ if cbRefPtr, ok := glib.GetCallback(PredVarPtr); ok {
143+ PredVarRef = cbRefPtr
144+ } else {
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)
147151 }
148- PredVarRef = purego.NewCallback(fcb)
149- glib.SaveCallback(PredVarPtr, PredVarRef)
150152 }
151153
152154 cret := xTextIterBackwardFindChar(x.GoPointer(), PredVarRef, UserDataVar, LimitVar)
@@ -564,17 +566,19 @@ var xTextIterForwardFindChar func(uintptr, uintptr, uintptr, *TextIter) bool
564566 // @limit is non-%NULL, otherwise to the end iterator.
565567 func (x *TextIter) ForwardFindChar(PredVar *TextCharPredicate, UserDataVar uintptr, LimitVar *TextIter) bool {
566568
567- PredVarPtr := uintptr(unsafe.Pointer(PredVar))
568569 var PredVarRef uintptr
569- if cbRefPtr, ok := glib.GetCallback(PredVarPtr); ok {
570- PredVarRef = cbRefPtr
571- } else {
572- fcb := func(arg0 uint32, arg1 uintptr) bool {
573- cbFn := *PredVar
574- return cbFn(arg0, arg1)
570+ if PredVar != nil {
571+ PredVarPtr := uintptr(unsafe.Pointer(PredVar))
572+ if cbRefPtr, ok := glib.GetCallback(PredVarPtr); ok {
573+ PredVarRef = cbRefPtr
574+ } else {
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)
575581 }
576- PredVarRef = purego.NewCallback(fcb)
577- glib.SaveCallback(PredVarPtr, PredVarRef)
578582 }
579583
580584 cret := xTextIterForwardFindChar(x.GoPointer(), PredVarRef, UserDataVar, LimitVar)
M v4/gtk/gtktexttagtable.go +11 -9
@@ -94,17 +94,19 @@ var xTextTagTableForeach func(uintptr, uintptr, uintptr)
9494 // over it (you can’t add/remove tags).
9595 func (x *TextTagTable) Foreach(FuncVar *TextTagTableForeach, DataVar uintptr) {
9696
97- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
9897 var FuncVarRef uintptr
99- if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok {
100- FuncVarRef = cbRefPtr
101- } else {
102- fcb := func(arg0 uintptr, arg1 uintptr) {
103- cbFn := *FuncVar
104- cbFn(arg0, arg1)
98+ if FuncVar != nil {
99+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
100+ if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok {
101+ FuncVarRef = cbRefPtr
102+ } else {
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)
105109 }
106- FuncVarRef = purego.NewCallback(fcb)
107- glib.SaveCallback(FuncVarPtr, FuncVarRef)
108110 }
109111
110112 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
6666 func NewTreeListModel(RootVar gio.ListModel, PassthroughVar bool, AutoexpandVar bool, CreateFuncVar *TreeListModelCreateModelFunc, UserDataVar uintptr, UserDestroyVar *glib.DestroyNotify) *TreeListModel {
6767 var cls *TreeListModel
6868
69- CreateFuncVarPtr := uintptr(unsafe.Pointer(CreateFuncVar))
7069 var CreateFuncVarRef uintptr
71- if cbRefPtr, ok := glib.GetCallback(CreateFuncVarPtr); ok {
72- CreateFuncVarRef = cbRefPtr
73- } else {
74- fcb := func(arg0 uintptr, arg1 uintptr) uintptr {
75- cbFn := *CreateFuncVar
76- return cbFn(arg0, arg1)
70+ if CreateFuncVar != nil {
71+ CreateFuncVarPtr := uintptr(unsafe.Pointer(CreateFuncVar))
72+ if cbRefPtr, ok := glib.GetCallback(CreateFuncVarPtr); ok {
73+ CreateFuncVarRef = cbRefPtr
74+ } else {
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)
7781 }
78- CreateFuncVarRef = purego.NewCallback(fcb)
79- glib.SaveCallback(CreateFuncVarPtr, CreateFuncVarRef)
8082 }
8183
82- UserDestroyVarPtr := uintptr(unsafe.Pointer(UserDestroyVar))
8384 var UserDestroyVarRef uintptr
84- if cbRefPtr, ok := glib.GetCallback(UserDestroyVarPtr); ok {
85- UserDestroyVarRef = cbRefPtr
86- } else {
87- fcb := func(arg0 uintptr) {
88- cbFn := *UserDestroyVar
89- cbFn(arg0)
85+ if UserDestroyVar != nil {
86+ UserDestroyVarPtr := uintptr(unsafe.Pointer(UserDestroyVar))
87+ if cbRefPtr, ok := glib.GetCallback(UserDestroyVarPtr); ok {
88+ UserDestroyVarRef = cbRefPtr
89+ } else {
90+ fcb := func(arg0 uintptr) {
91+ cbFn := *UserDestroyVar
92+ cbFn(arg0)
93+ }
94+ UserDestroyVarRef = purego.NewCallback(fcb)
95+ glib.SaveCallback(UserDestroyVarPtr, UserDestroyVarRef)
9096 }
91- UserDestroyVarRef = purego.NewCallback(fcb)
92- glib.SaveCallback(UserDestroyVarPtr, UserDestroyVarRef)
9397 }
9498
9599 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
291291 // can only be called once for a given filter model.
292292 func (x *TreeModelFilter) SetModifyFunc(NColumnsVar int, TypesVar []types.GType, FuncVar *TreeModelFilterModifyFunc, DataVar uintptr, DestroyVar *glib.DestroyNotify) {
293293
294- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
295294 var FuncVarRef uintptr
296- if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok {
297- FuncVarRef = cbRefPtr
298- } else {
299- fcb := func(arg0 uintptr, arg1 *TreeIter, arg2 *gobject.Value, arg3 int, arg4 uintptr) {
300- cbFn := *FuncVar
301- cbFn(arg0, arg1, arg2, arg3, arg4)
295+ if FuncVar != nil {
296+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
297+ if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok {
298+ FuncVarRef = cbRefPtr
299+ } else {
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)
302306 }
303- FuncVarRef = purego.NewCallback(fcb)
304- glib.SaveCallback(FuncVarPtr, FuncVarRef)
305307 }
306308
307309 var DestroyVarRef uintptr
@@ -381,17 +383,19 @@ var xTreeModelFilterSetVisibleFunc func(uintptr, uintptr, uintptr, uintptr)
381383 // once for a given filter model.
382384 func (x *TreeModelFilter) SetVisibleFunc(FuncVar *TreeModelFilterVisibleFunc, DataVar uintptr, DestroyVar *glib.DestroyNotify) {
383385
384- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
385386 var FuncVarRef uintptr
386- if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok {
387- FuncVarRef = cbRefPtr
388- } else {
389- fcb := func(arg0 uintptr, arg1 *TreeIter, arg2 uintptr) bool {
390- cbFn := *FuncVar
391- return cbFn(arg0, arg1, arg2)
387+ if FuncVar != nil {
388+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
389+ if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok {
390+ FuncVarRef = cbRefPtr
391+ } else {
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)
392398 }
393- FuncVarRef = purego.NewCallback(fcb)
394- glib.SaveCallback(FuncVarPtr, FuncVarRef)
395399 }
396400
397401 var DestroyVarRef uintptr
M v4/gtk/gtktreeselection.go +22 -18
@@ -213,17 +213,19 @@ var xTreeSelectionSelectedForeach func(uintptr, uintptr, uintptr)
213213 // gtk_tree_selection_get_selected_rows() might be more useful.
214214 func (x *TreeSelection) SelectedForeach(FuncVar *TreeSelectionForeachFunc, DataVar uintptr) {
215215
216- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
217216 var FuncVarRef uintptr
218- if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok {
219- FuncVarRef = cbRefPtr
220- } else {
221- fcb := func(arg0 uintptr, arg1 *TreePath, arg2 *TreeIter, arg3 uintptr) {
222- cbFn := *FuncVar
223- cbFn(arg0, arg1, arg2, arg3)
217+ if FuncVar != nil {
218+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
219+ if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok {
220+ FuncVarRef = cbRefPtr
221+ } else {
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)
224228 }
225- FuncVarRef = purego.NewCallback(fcb)
226- glib.SaveCallback(FuncVarPtr, FuncVarRef)
227229 }
228230
229231 xTreeSelectionSelectedForeach(x.GoPointer(), FuncVarRef, DataVar)
@@ -266,17 +268,19 @@ func (x *TreeSelection) SetSelectFunction(FuncVar *TreeSelectionFunc, DataVar ui
266268 }
267269 }
268270
269- DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
270271 var DestroyVarRef uintptr
271- if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok {
272- DestroyVarRef = cbRefPtr
273- } else {
274- fcb := func(arg0 uintptr) {
275- cbFn := *DestroyVar
276- cbFn(arg0)
272+ if DestroyVar != nil {
273+ DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
274+ if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok {
275+ DestroyVarRef = cbRefPtr
276+ } else {
277+ fcb := func(arg0 uintptr) {
278+ cbFn := *DestroyVar
279+ cbFn(arg0)
280+ }
281+ DestroyVarRef = purego.NewCallback(fcb)
282+ glib.SaveCallback(DestroyVarPtr, DestroyVarRef)
277283 }
278- DestroyVarRef = purego.NewCallback(fcb)
279- glib.SaveCallback(DestroyVarPtr, DestroyVarRef)
280284 }
281285
282286 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
11931193 // “sizing” property set to be GTK_TREE_VIEW_COLUMN_FIXED.
11941194 func (x *TreeView) InsertColumnWithDataFunc(PositionVar int, TitleVar string, CellVar *CellRenderer, FuncVar *TreeCellDataFunc, DataVar uintptr, DnotifyVar *glib.DestroyNotify) int {
11951195
1196- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
11971196 var FuncVarRef uintptr
1198- if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok {
1199- FuncVarRef = cbRefPtr
1200- } else {
1201- fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr, arg3 *TreeIter, arg4 uintptr) {
1202- cbFn := *FuncVar
1203- cbFn(arg0, arg1, arg2, arg3, arg4)
1197+ if FuncVar != nil {
1198+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
1199+ if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok {
1200+ FuncVarRef = cbRefPtr
1201+ } else {
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)
12041208 }
1205- FuncVarRef = purego.NewCallback(fcb)
1206- glib.SaveCallback(FuncVarPtr, FuncVarRef)
12071209 }
12081210
1209- DnotifyVarPtr := uintptr(unsafe.Pointer(DnotifyVar))
12101211 var DnotifyVarRef uintptr
1211- if cbRefPtr, ok := glib.GetCallback(DnotifyVarPtr); ok {
1212- DnotifyVarRef = cbRefPtr
1213- } else {
1214- fcb := func(arg0 uintptr) {
1215- cbFn := *DnotifyVar
1216- cbFn(arg0)
1212+ if DnotifyVar != nil {
1213+ DnotifyVarPtr := uintptr(unsafe.Pointer(DnotifyVar))
1214+ if cbRefPtr, ok := glib.GetCallback(DnotifyVarPtr); ok {
1215+ DnotifyVarRef = cbRefPtr
1216+ } else {
1217+ fcb := func(arg0 uintptr) {
1218+ cbFn := *DnotifyVar
1219+ cbFn(arg0)
1220+ }
1221+ DnotifyVarRef = purego.NewCallback(fcb)
1222+ glib.SaveCallback(DnotifyVarPtr, DnotifyVarRef)
12171223 }
1218- DnotifyVarRef = purego.NewCallback(fcb)
1219- glib.SaveCallback(DnotifyVarPtr, DnotifyVarRef)
12201224 }
12211225
12221226 cret := xTreeViewInsertColumnWithDataFunc(x.GoPointer(), PositionVar, TitleVar, CellVar.GoPointer(), FuncVarRef, DataVar, DnotifyVarRef)
@@ -1263,17 +1267,19 @@ var xTreeViewMapExpandedRows func(uintptr, uintptr, uintptr)
12631267 // Calls @func on all expanded rows.
12641268 func (x *TreeView) MapExpandedRows(FuncVar *TreeViewMappingFunc, DataVar uintptr) {
12651269
1266- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
12671270 var FuncVarRef uintptr
1268- if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok {
1269- FuncVarRef = cbRefPtr
1270- } else {
1271- fcb := func(arg0 uintptr, arg1 *TreePath, arg2 uintptr) {
1272- cbFn := *FuncVar
1273- cbFn(arg0, arg1, arg2)
1271+ if FuncVar != nil {
1272+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
1273+ if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok {
1274+ FuncVarRef = cbRefPtr
1275+ } else {
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)
12741282 }
1275- FuncVarRef = purego.NewCallback(fcb)
1276- glib.SaveCallback(FuncVarPtr, FuncVarRef)
12771283 }
12781284
12791285 xTreeViewMapExpandedRows(x.GoPointer(), FuncVarRef, DataVar)
@@ -1699,17 +1705,19 @@ var xTreeViewSetSearchEqualFunc func(uintptr, uintptr, uintptr, uintptr)
16991705 // `GtkTreeView`SearchEqualFunc returns %FALSE on matches.
17001706 func (x *TreeView) SetSearchEqualFunc(SearchEqualFuncVar *TreeViewSearchEqualFunc, SearchUserDataVar uintptr, SearchDestroyVar *glib.DestroyNotify) {
17011707
1702- SearchEqualFuncVarPtr := uintptr(unsafe.Pointer(SearchEqualFuncVar))
17031708 var SearchEqualFuncVarRef uintptr
1704- if cbRefPtr, ok := glib.GetCallback(SearchEqualFuncVarPtr); ok {
1705- SearchEqualFuncVarRef = cbRefPtr
1706- } else {
1707- fcb := func(arg0 uintptr, arg1 int, arg2 string, arg3 *TreeIter, arg4 uintptr) bool {
1708- cbFn := *SearchEqualFuncVar
1709- return cbFn(arg0, arg1, arg2, arg3, arg4)
1709+ if SearchEqualFuncVar != nil {
1710+ SearchEqualFuncVarPtr := uintptr(unsafe.Pointer(SearchEqualFuncVar))
1711+ if cbRefPtr, ok := glib.GetCallback(SearchEqualFuncVarPtr); ok {
1712+ SearchEqualFuncVarRef = cbRefPtr
1713+ } else {
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)
17101720 }
1711- SearchEqualFuncVarRef = purego.NewCallback(fcb)
1712- glib.SaveCallback(SearchEqualFuncVarPtr, SearchEqualFuncVarRef)
17131721 }
17141722
17151723 var SearchDestroyVarRef uintptr
M v4/gtk/gtktreeviewcolumn.go +11 -9
@@ -538,17 +538,19 @@ func (x *TreeViewColumn) SetCellDataFunc(CellRendererVar *CellRenderer, FuncVar
538538 }
539539 }
540540
541- DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
542541 var DestroyVarRef uintptr
543- if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok {
544- DestroyVarRef = cbRefPtr
545- } else {
546- fcb := func(arg0 uintptr) {
547- cbFn := *DestroyVar
548- cbFn(arg0)
542+ if DestroyVar != nil {
543+ DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
544+ if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok {
545+ DestroyVarRef = cbRefPtr
546+ } else {
547+ fcb := func(arg0 uintptr) {
548+ cbFn := *DestroyVar
549+ cbFn(arg0)
550+ }
551+ DestroyVarRef = purego.NewCallback(fcb)
552+ glib.SaveCallback(DestroyVarPtr, DestroyVarRef)
549553 }
550- DestroyVarRef = purego.NewCallback(fcb)
551- glib.SaveCallback(DestroyVarPtr, DestroyVarRef)
552554 }
553555
554556 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
159159 // shortcut.
160160 func (x *WidgetClass) AddBinding(KeyvalVar uint, ModsVar gdk.ModifierType, CallbackVar *ShortcutFunc, FormatStringVar string, varArgs ...interface{}) {
161161
162- CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
163162 var CallbackVarRef uintptr
164- if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
165- CallbackVarRef = cbRefPtr
166- } else {
167- fcb := func(arg0 uintptr, arg1 *glib.Variant, arg2 uintptr) bool {
168- cbFn := *CallbackVar
169- return cbFn(arg0, arg1, arg2)
163+ if CallbackVar != nil {
164+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
165+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
166+ CallbackVarRef = cbRefPtr
167+ } else {
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)
170174 }
171- CallbackVarRef = purego.NewCallback(fcb)
172- glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
173175 }
174176
175177 xWidgetClassAddBinding(x.GoPointer(), KeyvalVar, ModsVar, CallbackVarRef, FormatStringVar, varArgs...)
@@ -241,17 +243,19 @@ var xWidgetClassBindTemplateCallbackFull func(uintptr, string, uintptr)
241243 // class initializer after calling [method@Gtk.WidgetClass.set_template].
242244 func (x *WidgetClass) BindTemplateCallbackFull(CallbackNameVar string, CallbackSymbolVar *gobject.Callback) {
243245
244- CallbackSymbolVarPtr := uintptr(unsafe.Pointer(CallbackSymbolVar))
245246 var CallbackSymbolVarRef uintptr
246- if cbRefPtr, ok := glib.GetCallback(CallbackSymbolVarPtr); ok {
247- CallbackSymbolVarRef = cbRefPtr
248- } else {
249- fcb := func() {
250- cbFn := *CallbackSymbolVar
251- cbFn()
247+ if CallbackSymbolVar != nil {
248+ CallbackSymbolVarPtr := uintptr(unsafe.Pointer(CallbackSymbolVar))
249+ if cbRefPtr, ok := glib.GetCallback(CallbackSymbolVarPtr); ok {
250+ CallbackSymbolVarRef = cbRefPtr
251+ } else {
252+ fcb := func() {
253+ cbFn := *CallbackSymbolVar
254+ cbFn()
255+ }
256+ CallbackSymbolVarRef = purego.NewCallback(fcb)
257+ glib.SaveCallback(CallbackSymbolVarPtr, CallbackSymbolVarRef)
252258 }
253- CallbackSymbolVarRef = purego.NewCallback(fcb)
254- glib.SaveCallback(CallbackSymbolVarPtr, CallbackSymbolVarRef)
255259 }
256260
257261 xWidgetClassBindTemplateCallbackFull(x.GoPointer(), CallbackNameVar, CallbackSymbolVarRef)
@@ -354,17 +358,19 @@ var xWidgetClassInstallAction func(uintptr, string, string, uintptr)
354358 // with [method@Gtk.Widget.action_set_enabled]).
355359 func (x *WidgetClass) InstallAction(ActionNameVar string, ParameterTypeVar string, ActivateVar *WidgetActionActivateFunc) {
356360
357- ActivateVarPtr := uintptr(unsafe.Pointer(ActivateVar))
358361 var ActivateVarRef uintptr
359- if cbRefPtr, ok := glib.GetCallback(ActivateVarPtr); ok {
360- ActivateVarRef = cbRefPtr
361- } else {
362- fcb := func(arg0 uintptr, arg1 string, arg2 *glib.Variant) {
363- cbFn := *ActivateVar
364- cbFn(arg0, arg1, arg2)
362+ if ActivateVar != nil {
363+ ActivateVarPtr := uintptr(unsafe.Pointer(ActivateVar))
364+ if cbRefPtr, ok := glib.GetCallback(ActivateVarPtr); ok {
365+ ActivateVarRef = cbRefPtr
366+ } else {
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)
365373 }
366- ActivateVarRef = purego.NewCallback(fcb)
367- glib.SaveCallback(ActivateVarPtr, ActivateVarRef)
368374 }
369375
370376 xWidgetClassInstallAction(x.GoPointer(), ActionNameVar, ParameterTypeVar, ActivateVarRef)
@@ -1871,30 +1877,34 @@ var xWidgetAddTickCallback func(uintptr, uintptr, uintptr, uintptr) uint
18711877 // to [method@Gtk.Widget.remove_tick_callback].
18721878 func (x *Widget) AddTickCallback(CallbackVar *TickCallback, UserDataVar uintptr, NotifyVar *glib.DestroyNotify) uint {
18731879
1874- CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
18751880 var CallbackVarRef uintptr
1876- if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
1877- CallbackVarRef = cbRefPtr
1878- } else {
1879- fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) bool {
1880- cbFn := *CallbackVar
1881- return cbFn(arg0, arg1, arg2)
1881+ if CallbackVar != nil {
1882+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
1883+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
1884+ CallbackVarRef = cbRefPtr
1885+ } else {
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)
18821892 }
1883- CallbackVarRef = purego.NewCallback(fcb)
1884- glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
18851893 }
18861894
1887- NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
18881895 var NotifyVarRef uintptr
1889- if cbRefPtr, ok := glib.GetCallback(NotifyVarPtr); ok {
1890- NotifyVarRef = cbRefPtr
1891- } else {
1892- fcb := func(arg0 uintptr) {
1893- cbFn := *NotifyVar
1894- cbFn(arg0)
1896+ if NotifyVar != nil {
1897+ NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
1898+ if cbRefPtr, ok := glib.GetCallback(NotifyVarPtr); ok {
1899+ NotifyVarRef = cbRefPtr
1900+ } else {
1901+ fcb := func(arg0 uintptr) {
1902+ cbFn := *NotifyVar
1903+ cbFn(arg0)
1904+ }
1905+ NotifyVarRef = purego.NewCallback(fcb)
1906+ glib.SaveCallback(NotifyVarPtr, NotifyVarRef)
18951907 }
1896- NotifyVarRef = purego.NewCallback(fcb)
1897- glib.SaveCallback(NotifyVarPtr, NotifyVarRef)
18981908 }
18991909
19001910 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
390390 // inserts them into a new list.
391391 func (x *AttrList) Filter(FuncVar *AttrFilterFunc, DataVar uintptr) *AttrList {
392392
393- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
394393 var FuncVarRef uintptr
395- if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok {
396- FuncVarRef = cbRefPtr
397- } else {
398- fcb := func(arg0 *Attribute, arg1 uintptr) bool {
399- cbFn := *FuncVar
400- return cbFn(arg0, arg1)
394+ if FuncVar != nil {
395+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
396+ if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok {
397+ FuncVarRef = cbRefPtr
398+ } else {
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)
401405 }
402- FuncVarRef = purego.NewCallback(fcb)
403- glib.SaveCallback(FuncVarPtr, FuncVarRef)
404406 }
405407
406408 cret := xAttrListFilter(x.GoPointer(), FuncVarRef, DataVar)
M v4/pango/pango-fontset.go +11 -9
@@ -289,17 +289,19 @@ var xFontsetForeach func(uintptr, uintptr, uintptr)
289289 // If @func returns %TRUE, that stops the iteration.
290290 func (x *Fontset) Foreach(FuncVar *FontsetForeachFunc, DataVar uintptr) {
291291
292- FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
293292 var FuncVarRef uintptr
294- if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok {
295- FuncVarRef = cbRefPtr
296- } else {
297- fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) bool {
298- cbFn := *FuncVar
299- return cbFn(arg0, arg1, arg2)
293+ if FuncVar != nil {
294+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
295+ if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok {
296+ FuncVarRef = cbRefPtr
297+ } else {
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)
300304 }
301- FuncVarRef = purego.NewCallback(fcb)
302- glib.SaveCallback(FuncVarPtr, FuncVarRef)
303305 }
304306
305307 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