detached 70e34f7

Merge branch 'dev'

commit
70e34f7ee80023727d3b21ec3ed2b069a780449a
author
brice · · 2025-12-16 18:49 UTC
merge of
9ff73d6 + dd4a135 · diff against the first parent
signature
unsigned
328 files · +10396 -1977
M gen.sh +1 -1
@@ -18,4 +18,4 @@ echo "running a second pass for goimports..."
1818 goimports -w v4
1919
2020 echo "running go vet..."
21-go vet ./v4/...
21+go vet -unsafeptr=false -stdmethods=false ./v4/...
M internal/core/core.go +17 -0
@@ -226,3 +226,20 @@ func GoString(c uintptr) string {
226226 }
227227 return string(unsafe.Slice((*byte)(ptr), length))
228228 }
229+
230+// NullableStringToPtr converts a nullable Go string to a uintptr suitable for C calls.
231+func NullableStringToPtr(s *string) uintptr {
232+ if s == nil {
233+ return 0
234+ }
235+ return uintptr(unsafe.Pointer(CString(*s)))
236+}
237+
238+// PtrToNullableString converts a nullable char* to a Go *string (nil when NULL).
239+func PtrToNullableString(ptr uintptr) *string {
240+ if ptr == 0 {
241+ return nil
242+ }
243+ str := GoString(ptr)
244+ return &str
245+}
M internal/gir/pass/pass.go +105 -26
@@ -134,7 +134,7 @@ func (p *Pass) writeGo(r types.Repository, gotemp *template.Template, dir string
134134 Name: util.ConstructorName(c.Name, rec.Name),
135135 CName: c.CIdentifier,
136136 Doc: c.Doc.StringSafe(),
137- Args: c.Parameters.Template(ns.Name, "", p.Types, c.Throws),
137+ Args: c.Parameters.Template(ns.Name, "", p.Types, c.Throws, types.ArgsFromGoToC),
138138 Ret: c.ReturnValue.Template(ns.Name, "", p.Types, c.Throws),
139139 }
140140 }
@@ -148,7 +148,7 @@ func (p *Pass) writeGo(r types.Repository, gotemp *template.Template, dir string
148148 fieldName = "x" + util.SnakeToCamel(f.Name) // Prefix callback pointer fields with `x` to make them private
149149
150150 callbackName := util.SnakeToCamel(f.Name)
151- args := f.Callback.Parameters.Template(ns.Name, "", p.Types, f.Callback.Throws)
151+ args := f.Callback.Parameters.Template(ns.Name, "", p.Types, f.Callback.Throws, types.ArgsFromCToGo)
152152 ret := f.Callback.ReturnValue.Template(ns.Name, "", p.Types, f.Callback.Throws)
153153
154154 apiTypes := args.API.Types
@@ -228,7 +228,7 @@ func (p *Pass) writeGo(r types.Repository, gotemp *template.Template, dir string
228228 Doc: f.Doc.StringSafe(),
229229 Name: name,
230230 CName: f.CIdentifier,
231- Args: f.Parameters.Template(ns.Name, "", p.Types, f.Throws),
231+ Args: f.Parameters.Template(ns.Name, "", p.Types, f.Throws, types.ArgsFromGoToC),
232232 Ret: f.ReturnValue.Template(ns.Name, "", p.Types, f.Throws),
233233 })
234234 }
@@ -252,7 +252,7 @@ func (p *Pass) writeGo(r types.Repository, gotemp *template.Template, dir string
252252 cbT := types.CallbackTemplate{
253253 Doc: cb.Doc.StringSafe(),
254254 Name: cb.Name,
255- Args: cb.Parameters.Template(ns.Name, "", p.Types, cb.Throws),
255+ Args: cb.Parameters.Template(ns.Name, "", p.Types, cb.Throws, types.ArgsFromCToGo),
256256 Ret: cb.ReturnValue.Template(ns.Name, "", p.Types, cb.Throws),
257257 }
258258 callbacks[fn] = append(callbacks[fn], cbT)
@@ -307,7 +307,7 @@ func (p *Pass) writeGo(r types.Repository, gotemp *template.Template, dir string
307307 Name: name,
308308 CName: f.CIdentifier,
309309 Doc: f.Doc.StringSafe(),
310- Args: f.Parameters.Template(ns.Name, "", p.Types, f.Throws),
310+ Args: f.Parameters.Template(ns.Name, "", p.Types, f.Throws, types.ArgsFromGoToC),
311311 Ret: f.ReturnValue.Template(ns.Name, "", p.Types, f.Throws),
312312 })
313313 }
@@ -326,18 +326,19 @@ func (p *Pass) writeGo(r types.Repository, gotemp *template.Template, dir string
326326 Name: util.ConstructorName(c.Name, cls.Name),
327327 CName: c.CIdentifier,
328328 Doc: c.Doc.StringSafe(),
329- Args: c.Parameters.Template(ns.Name, "", p.Types, c.Throws),
329+ Args: c.Parameters.Template(ns.Name, "", p.Types, c.Throws, types.ArgsFromGoToC),
330330 Ret: c.ReturnValue.Template(ns.Name, "", p.Types, c.Throws),
331331 }
332332 }
333333 signals := make([]types.SignalsTemplate, len(cls.Signals))
334334 for i, s := range cls.Signals {
335335 signals[i] = types.SignalsTemplate{
336- Doc: s.Doc.StringSafe(),
337- Name: util.DashToCamel(s.Name),
338- CName: s.Name,
339- Args: s.Parameters.Template(ns.Name, "", p.Types, false),
340- Ret: s.ReturnValue.Template(ns.Name, "", p.Types, false),
336+ Doc: s.Doc.StringSafe(),
337+ Name: util.DashToCamel(s.Name),
338+ CName: s.Name,
339+ Args: s.Parameters.Template(ns.Name, "", p.Types, false, types.ArgsFromCToGo),
340+ Ret: s.ReturnValue.Template(ns.Name, "", p.Types, false),
341+ Detailed: s.Detailed,
341342 }
342343 }
343344 receivers := make([]types.FuncTemplate, len(cls.Methods))
@@ -348,7 +349,7 @@ func (p *Pass) writeGo(r types.Repository, gotemp *template.Template, dir string
348349 Doc: f.Doc.StringSafe(),
349350 Name: name,
350351 CName: f.CIdentifier,
351- Args: f.Parameters.Template(ns.Name, "", p.Types, f.Throws),
352+ Args: f.Parameters.Template(ns.Name, "", p.Types, f.Throws, types.ArgsFromGoToC),
352353 Ret: f.ReturnValue.Template(ns.Name, "", p.Types, f.Throws),
353354 }
354355 }
@@ -359,7 +360,7 @@ func (p *Pass) writeGo(r types.Repository, gotemp *template.Template, dir string
359360 Name: name,
360361 CName: f.CIdentifier,
361362 Doc: f.Doc.StringSafe(),
362- Args: f.Parameters.Template(ns.Name, "", p.Types, f.Throws),
363+ Args: f.Parameters.Template(ns.Name, "", p.Types, f.Throws, types.ArgsFromGoToC),
363364 Ret: f.ReturnValue.Template(ns.Name, "", p.Types, f.Throws),
364365 }
365366 }
@@ -423,20 +424,98 @@ func (p *Pass) writeGo(r types.Repository, gotemp *template.Template, dir string
423424 // as they should only be loaded when there are classes
424425 needsInit := (len(functions[fn]) + methods) > 0
425426
427+ // Check if any receiver method has callback parameters
428+ // This is used to conditionally import unsafe and purego
429+ hasReceiverCallbacks := false
430+ for _, rec := range records[fn] {
431+ for _, r := range rec.Receivers {
432+ if len(r.Args.Callbacks) > 0 {
433+ hasReceiverCallbacks = true
434+ break
435+ }
436+ }
437+ if hasReceiverCallbacks {
438+ break
439+ }
440+ }
441+ if !hasReceiverCallbacks {
442+ for _, cls := range classes[fn] {
443+ for _, r := range cls.Receivers {
444+ if len(r.Args.Callbacks) > 0 {
445+ hasReceiverCallbacks = true
446+ break
447+ }
448+ }
449+ if hasReceiverCallbacks {
450+ break
451+ }
452+ }
453+ }
454+
455+ // Check if any standalone function has callback parameters
456+ hasFunctionCallbacks := false
457+ for _, f := range functions[fn] {
458+ if len(f.Args.Callbacks) > 0 {
459+ hasFunctionCallbacks = true
460+ break
461+ }
462+ }
463+
464+ needsCoreHelpers := false
465+ checkFuncArgs := func(funcs []types.FuncTemplate) {
466+ if needsCoreHelpers {
467+ return
468+ }
469+ for _, f := range funcs {
470+ if f.Args.NeedsCore() {
471+ needsCoreHelpers = true
472+ return
473+ }
474+ }
475+ }
476+ checkInterfaceArgs := func(funcs []types.InterfaceFuncTemplate) {
477+ if needsCoreHelpers {
478+ return
479+ }
480+ for _, f := range funcs {
481+ if f.Args.NeedsCore() {
482+ needsCoreHelpers = true
483+ return
484+ }
485+ }
486+ }
487+
488+ for _, rec := range records[fn] {
489+ checkFuncArgs(rec.Constructors)
490+ checkFuncArgs(rec.Receivers)
491+ }
492+ for _, cls := range classes[fn] {
493+ checkFuncArgs(cls.Constructors)
494+ checkFuncArgs(cls.Receivers)
495+ checkFuncArgs(cls.Functions)
496+ }
497+ checkFuncArgs(functions[fn])
498+ for _, inter := range interfaces[fn] {
499+ checkInterfaceArgs(inter.Methods)
500+ }
501+
426502 args := types.TemplateArg{
427- PkgName: pkgName,
428- PkgEnv: strings.ToUpper(pkgName),
429- PkgConfigName: pkgConfigName,
430- SharedLibraries: sharedLibraries,
431- NeedsInit: needsInit,
432- Aliases: aliases[fn],
433- Callbacks: callbacks[fn],
434- Records: records[fn],
435- Enums: enums[fn],
436- Constants: constants[fn],
437- Functions: functions[fn],
438- Interfaces: interfaces[fn],
439- Classes: classes[fn],
503+ PkgName: pkgName,
504+ PkgEnv: strings.ToUpper(pkgName),
505+ PkgConfigName: pkgConfigName,
506+ SharedLibraries: sharedLibraries,
507+ NeedsInit: needsInit,
508+ NeedsCore: needsCoreHelpers,
509+ HasReceiverCallbacks: hasReceiverCallbacks,
510+ HasFunctionCallbacks: hasFunctionCallbacks,
511+ Aliases: aliases[fn],
512+ Callbacks: callbacks[fn],
513+ Records: records[fn],
514+ Enums: enums[fn],
515+ Constants: constants[fn],
516+ Functions: functions[fn],
517+ Interfaces: interfaces[fn],
518+ Classes: classes[fn],
440519 }
441520
442521 os.MkdirAll(fmt.Sprintf(dir+"/%s", pkgName), 0o755)
M internal/gir/types/interface.go +1 -1
@@ -28,7 +28,7 @@ func ConvertInterface(currns string, ins string, inter Interface, implemented ma
2828 Doc: m.Doc.StringSafe(),
2929 CName: m.CIdentifier,
3030 Name: name,
31- Args: m.Parameters.Template(currns, ins, kinds, m.Throws),
31+ Args: m.Parameters.Template(currns, ins, kinds, m.Throws, ArgsFromGoToC),
3232 Ret: m.ReturnValue.Template(currns, ins, kinds, m.Throws),
3333 },
3434 })
M internal/gir/types/kind.go +11 -0
@@ -53,6 +53,17 @@ func (km KindMap) MustInterface(ns string, name string) Interface {
5353 return p.Value.(Interface)
5454 }
5555
56+// GetCallback retrieves a callback definition by namespace and name.
57+// Returns the Callback and true if found, otherwise nil and false.
58+func (km KindMap) GetCallback(ns string, name string) (Callback, bool) {
59+ p := km.pair(ns, name)
60+ if p.K != CallbackType {
61+ return Callback{}, false
62+ }
63+ cb, ok := p.Value.(Callback)
64+ return cb, ok
65+}
66+
5667 type KindPair struct {
5768 K Kind
5869 Value interface{}
M internal/gir/types/template.go +188 -11
@@ -17,9 +17,27 @@ type argsTemplate struct {
1717 // Call are the variables as given in a function call
1818 Call []string
1919
20+ // CallWithRefs is like Call but with callback parameters using {name}Ref
21+ // for use in contexts that generate closure wrappers
22+ CallWithRefs []string
23+
2024 Full []string
2125 }
2226
27+// CallbackParam holds metadata for callback parameters to enable proper closure generation
28+type CallbackParam struct {
29+ // Name is the parameter name (e.g., "CallbackVar")
30+ Name string
31+ // TypeName is the callback type name (e.g., "TickCallback")
32+ TypeName string
33+ // PureTypes are the pure argument types for the closure
34+ PureTypes []string
35+ // RetRaw is the return type for the closure (e.g., "bool")
36+ RetRaw string
37+ // Nullable indicates if the callback can be nil
38+ Nullable bool
39+}
40+
2341 type funcArgsTemplate struct {
2442 // Pure are the arguments as passed directly to PureGo
2543 // The pure Call is a special case that contains the arguments for a callback call
@@ -27,16 +45,99 @@ type funcArgsTemplate struct {
2745
2846 // API are the arguments as suitable for a Go API
2947 API argsTemplate
48+
49+ // Callbacks tracks callback parameters for proper closure generation
50+ Callbacks []CallbackParam
51+
52+ // UsesNullableHelper indicates nullable string handling that needs core import.
53+ UsesNullableHelper bool
3054 }
3155
32-func (f *funcArgsTemplate) AddAPI(t string, n string, k Kind, ns string, nullable bool, isOut bool) {
56+// ArgContext indicates where the arguments are flowing so we can handle
57+// direction-sensitive cases (e.g. nullable strings) differently.
58+type ArgContext int
59+
60+const (
61+ // ArgsFromGoToC covers regular functions/methods where Go calls into C.
62+ ArgsFromGoToC ArgContext = iota
63+ // ArgsFromCToGo covers callbacks/signals where C calls into Go.
64+ ArgsFromCToGo
65+)
66+
67+func isStringType(t string) bool {
68+ if strings.HasPrefix(t, "[]") {
69+ return false
70+ }
71+ return strings.TrimLeft(t, "*") == "string"
72+}
73+
74+// NeedsCore reports whether this argument set requires core helpers.
75+func (f funcArgsTemplate) NeedsCore() bool {
76+ return f.UsesNullableHelper
77+}
78+
79+func qualifyCallbackType(t string, callbackNS string, currentNS string) string {
80+ if t == "" || callbackNS == "" || strings.EqualFold(callbackNS, currentNS) {
81+ return t
82+ }
83+
84+ if strings.Contains(t, ".") {
85+ return t
86+ }
87+
88+ ptrPrefix := ""
89+ base := t
90+ for strings.HasPrefix(base, "*") {
91+ ptrPrefix += "*"
92+ base = strings.TrimPrefix(base, "*")
93+ }
94+
95+ slicePrefix := ""
96+ for strings.HasPrefix(base, "[]") {
97+ slicePrefix += "[]"
98+ base = strings.TrimPrefix(base, "[]")
99+ }
100+
101+ arrayPrefix := ""
102+ for strings.HasPrefix(base, "[") {
103+ end := strings.Index(base, "]")
104+ if end == -1 {
105+ break
106+ }
107+ arrayPrefix += base[:end+1]
108+ base = base[end+1:]
109+ }
110+
111+ switch base {
112+ case "bool", "byte", "complex64", "complex128", "error", "float32", "float64", "int", "int8", "int16", "int32", "int64", "rune", "string", "uint", "uint8", "uint16", "uint32", "uint64", "uintptr":
113+ return t
114+ }
115+
116+ if base == "" {
117+ return t
118+ }
119+
120+ qualifiedBase := callbackNS + "." + base
121+ return ptrPrefix + slicePrefix + arrayPrefix + qualifiedBase
122+}
123+
124+func qualifyCallbackTypes(types []string, callbackNS string, currentNS string) []string {
125+ qualified := make([]string, len(types))
126+ for i, t := range types {
127+ qualified[i] = qualifyCallbackType(t, callbackNS, currentNS)
128+ }
129+ return qualified
130+}
131+
132+func (f *funcArgsTemplate) AddAPI(t string, n string, k Kind, ns string, nullable bool, isOut bool, ctx ArgContext) {
33133 c := n
134+ cRef := n // For CallWithRefs, defaults to same as Call
34135 stars := strings.Count(t, "*")
35136 gobjectNs := "gobject."
137+ glibNs := "glib."
36138 if strings.ToLower(ns) == "gobject" {
37139 gobjectNs = ""
38140 }
39- glibNs := "glib."
40141 if strings.ToLower(ns) == "glib" {
41142 glibNs = ""
42143 }
@@ -48,14 +149,28 @@ func (f *funcArgsTemplate) AddAPI(t string, n string, k Kind, ns string, nullabl
48149 t = "*" + t
49150 }
50151 c = n
152+ cRef = n
51153 } else {
154+ // Nullable strings differ based on direction. For Go->C we need a *string API type
155+ // and pass a pointer (or nil) to C. For C->Go we keep the string as-is.
156+ if ctx == ArgsFromGoToC && nullable && isStringType(t) {
157+ f.UsesNullableHelper = true
158+ t = "*string"
159+ c = fmt.Sprintf("core.NullableStringToPtr(%s)", n)
160+ cRef = c
161+ }
162+
52163 switch k {
53164 case CallbackType:
165+ // Call uses glib.NewCallback for contexts like callback accessor getters
54166 if nullable {
55167 c = fmt.Sprintf("%sNewCallbackNullable(%s)", glibNs, n)
56168 } else {
57169 c = fmt.Sprintf("%sNewCallback(%s)", glibNs, n)
58170 }
171+ // For CallWithRefs, start with the same value as Call
172+ // It will be updated to {name}Ref in Add() if the callback lookup succeeds
173+ cRef = c
59174 t = "*" + t
60175 case ClassesType:
61176 if stars == 0 {
@@ -66,6 +181,7 @@ func (f *funcArgsTemplate) AddAPI(t string, n string, k Kind, ns string, nullabl
66181 } else if stars == 1 {
67182 c = n + ".GoPointer()"
68183 }
184+ cRef = c
69185 case InterfacesType:
70186 t = strings.TrimPrefix(t, "*")
71187 if stars == 0 {
@@ -76,21 +192,26 @@ func (f *funcArgsTemplate) AddAPI(t string, n string, k Kind, ns string, nullabl
76192 } else if stars == 1 {
77193 c = n + ".GoPointer()"
78194 }
195+ cRef = c
196+ default:
197+ cRef = c
79198 }
80199
81200 // special case for varargs
82201 if n == "varArgs" {
83202 c = n + "..."
203+ cRef = c
84204 }
85205 }
86206
87207 f.API.Names = append(f.API.Names, n)
88208 f.API.Types = append(f.API.Types, t)
89209 f.API.Call = append(f.API.Call, c)
210+ f.API.CallWithRefs = append(f.API.CallWithRefs, cRef)
90211 f.API.Full = append(f.API.Full, n+" "+t)
91212 }
92213
93-func (f *funcArgsTemplate) AddPure(t string, n string, k Kind, isOut bool) {
214+func (f *funcArgsTemplate) AddPure(t string, n string, k Kind, isOut bool, nullable bool, ctx ArgContext) {
94215 n += "p"
95216 c := n
96217 stars := strings.Count(t, "*")
@@ -103,6 +224,12 @@ func (f *funcArgsTemplate) AddPure(t string, n string, k Kind, isOut bool) {
103224 }
104225 c = n
105226 } else {
227+ if ctx == ArgsFromGoToC && nullable && isStringType(t) {
228+ f.UsesNullableHelper = true
229+ t = "uintptr"
230+ c = fmt.Sprintf("core.NullableStringToPtr(%s)", strings.TrimSuffix(n, "p"))
231+ }
232+
106233 switch k {
107234 case RecordsType:
108235 if stars == 0 {
@@ -142,7 +269,7 @@ func (f *funcArgsTemplate) AddPure(t string, n string, k Kind, isOut bool) {
142269 f.Pure.Full = append(f.Pure.Full, n+" "+t)
143270 }
144271
145-func (f *funcArgsTemplate) Add(p Parameter, ins string, ns string, kinds KindMap) {
272+func (f *funcArgsTemplate) Add(p Parameter, ins string, ns string, kinds KindMap, ctx ArgContext) {
146273 // get the lookup namespace
147274 // as if the interface namespace is non-empty
148275 // means we can also lookup in the namespace of the interface
@@ -153,6 +280,9 @@ func (f *funcArgsTemplate) Add(p Parameter, ins string, ns string, kinds KindMap
153280 goType := p.Translate(lns, kinds)
154281 kind := kinds.Kind(lns, goType)
155282
283+ // Save the original type name before normalization for callback lookup
284+ originalType := goType
285+
156286 stars := strings.Count(goType, "*")
157287 goType = util.NormalizeNamespace(ns, goType, true)
158288
@@ -168,12 +298,51 @@ func (f *funcArgsTemplate) Add(p Parameter, ins string, ns string, kinds KindMap
168298
169299 isOut := p.Direction == "out"
170300
171- f.AddAPI(goType, varName, kind, ns, p.Nullable, isOut)
172- f.AddPure(goType, varName, kind, isOut)
301+ f.AddAPI(goType, varName, kind, ns, p.Nullable, isOut, ctx)
302+ f.AddPure(goType, varName, kind, isOut, p.Nullable, ctx)
303+
304+ // For callback parameters (not out parameters), populate callback metadata
305+ // This enables the template to generate proper closure wrapping
306+ if kind == CallbackType && !isOut {
307+ if cb, ok := kinds.GetCallback(lns, originalType); ok {
308+ // Determine the callback's namespace from the original type name
309+ // e.g., "gio.AsyncReadyCallback" -> "gio", "AsyncReadyCallback" -> lns
310+ cbNs := lns
311+ if parts := strings.Split(originalType, "."); len(parts) > 1 {
312+ cbNs = parts[0]
313+ }
314+
315+ // Get the callback's pure argument types and return type
316+ // Use cbNs (callback's namespace) for proper type lookups
317+ cbArgs := cb.Parameters.Template(cbNs, "", kinds, cb.Throws, ArgsFromCToGo)
318+ var retRaw string
319+ if cb.ReturnValue != nil {
320+ cbRet := cb.ReturnValue.Template(cbNs, "", kinds, cb.Throws)
321+ retRaw = cbRet.Raw
322+ }
323+
324+ qualifiedPureTypes := qualifyCallbackTypes(cbArgs.Pure.Types, cbNs, ns)
325+ qualifiedRetRaw := qualifyCallbackType(retRaw, cbNs, ns)
326+
327+ f.Callbacks = append(f.Callbacks, CallbackParam{
328+ Name: varName,
329+ TypeName: strings.TrimPrefix(goType, "*"),
330+ PureTypes: qualifiedPureTypes,
331+ RetRaw: qualifiedRetRaw,
332+ Nullable: p.Nullable,
333+ })
334+
335+ // Update CallWithRefs to use {name}Ref since we have the callback info
336+ // for generating the closure wrapper
337+ lastIdx := len(f.API.CallWithRefs) - 1
338+ f.API.CallWithRefs[lastIdx] = varName + "Ref"
339+ }
340+ }
173341 }
174342
175343 func (f *funcArgsTemplate) AddThrows(ns string) {
176344 f.API.Call = append(f.API.Call, "&cerr")
345+ f.API.CallWithRefs = append(f.API.CallWithRefs, "&cerr")
177346 if strings.ToLower(ns) != "glib" {
178347 f.Pure.Types = append(f.Pure.Types, "**glib.Error")
179348 } else {
@@ -410,11 +579,12 @@ type InterfaceFuncTemplate struct {
410579 }
411580
412581 type SignalsTemplate struct {
413- Doc string
414- Name string
415- CName string
416- Args funcArgsTemplate
417- Ret funcRetTemplate
582+ Doc string
583+ Name string
584+ CName string
585+ Args funcArgsTemplate
586+ Ret funcRetTemplate
587+ Detailed bool
418588 }
419589
420590 type PropertyTemplate struct {
@@ -483,6 +653,13 @@ type TemplateArg struct {
483653 SharedLibraries []string
484654 // NeedsInit declares whether or not this file needs an init code to register functions with purego
485655 NeedsInit bool
656+ // NeedsCore indicates if core helpers are required even without init.
657+ NeedsCore bool
658+ // HasReceiverCallbacks indicates if any receiver method has callback parameters
659+ // This is used to conditionally import unsafe and purego
660+ HasReceiverCallbacks bool
661+ // HasFunctionCallbacks indicates if any standalone function has callback parameters
662+ HasFunctionCallbacks bool
486663 // Imports defines the package imports that we need
487664 // This does not include purego
488665 // As the template already includes that if `NeedsInit` is set to true
M internal/gir/types/types.go +2 -2
@@ -658,7 +658,7 @@ func (p *Parameter) VarName() string {
658658 return snaked + "Var"
659659 }
660660
661-func (p *Parameters) Template(ns string, ifacens string, kinds KindMap, throws bool) funcArgsTemplate {
661+func (p *Parameters) Template(ns string, ifacens string, kinds KindMap, throws bool, ctx ArgContext) funcArgsTemplate {
662662 if p == nil {
663663 return funcArgsTemplate{}
664664 }
@@ -668,7 +668,7 @@ func (p *Parameters) Template(ns string, ifacens string, kinds KindMap, throws b
668668 }
669669 args := funcArgsTemplate{}
670670 for _, par := range params {
671- args.Add(par, ifacens, ns, kinds)
671+ args.Add(par, ifacens, ns, kinds, ctx)
672672 }
673673 if throws {
674674 args.AddThrows(ns)
M internal/gir/util/util.go +35 -0
@@ -93,15 +93,47 @@ func AddNamespace(val, ns string) string {
9393 if ns == "" || strings.Count(val, ".") >= 1 {
9494 return val
9595 }
96+ // Don't add namespace to Go builtin types
97+ if isGoBuiltinType(val) {
98+ return val
99+ }
96100 return PrefixValue(val, ns+".")
97101 }
98102
103+// goBuiltinTypes contains Go builtin types that should never be namespace-prefixed
104+var goBuiltinTypes = map[string]bool{
105+ "bool": true, "byte": true, "complex64": true, "complex128": true,
106+ "error": true, "float32": true, "float64": true, "int": true,
107+ "int8": true, "int16": true, "int32": true, "int64": true,
108+ "rune": true, "string": true, "uint": true, "uint8": true,
109+ "uint16": true, "uint32": true, "uint64": true, "uintptr": true,
110+}
111+
112+// isGoBuiltinType checks if the given type (after stripping pointers and slices) is a Go builtin
113+func isGoBuiltinType(gotype string) bool {
114+ // Strip pointer prefixes
115+ baseType := strings.TrimLeft(gotype, "*")
116+ // Strip slice prefix
117+ baseType = strings.TrimPrefix(baseType, "[]")
118+ // Strip any remaining pointers (e.g., *[]byte -> []byte -> byte)
119+ baseType = strings.TrimLeft(baseType, "*")
120+ return goBuiltinTypes[baseType]
121+}
122+
99123 // NormalizeNamespace converts a type to one that always includes a lowercase namespace
100124 // if no namespace is found, it adds `ns`, unless if strip is True then namespaces always equaling `ns` will be removed
101125 func NormalizeNamespace(ns string, gotype string, strip bool) string {
102126 if ns == "" {
103127 return ""
104128 }
129+
130+ // Check if this is a Go builtin type before any modifications
131+ // Note: gotype here may still have * prefixes which are trimmed below
132+ trimmedForCheck := strings.Trim(gotype, "*")
133+ if isGoBuiltinType(trimmedForCheck) {
134+ return trimmedForCheck
135+ }
136+
105137 gotype = strings.Trim(gotype, "*")
106138 splt := strings.Split(gotype, ".")
107139 if len(splt) <= 1 {
@@ -220,6 +252,9 @@ func PropertyScalarSet(notGObject bool, gvalueType, setMethod string) string {
220252 if notGObject {
221253 prefix = "gobject."
222254 }
255+ if setMethod == "SetString" {
256+ return prefix + gvalueType + ")\n\tv." + setMethod + "(&value"
257+ }
223258 return prefix + gvalueType + ")\n\tv." + setMethod + "(value"
224259 }
225260
M pkg/core/core.go +9 -7
@@ -3,11 +3,13 @@ package core
33 import "github.com/jwijenbergh/puregotk/internal/core"
44
55 var (
6- GetPaths = core.GetPaths
7- ByteSlice = core.ByteSlice
8- GoStringSlice = core.GoStringSlice
9- GoString = core.GoString
10- SetPackageName = core.SetPackageName
11- SetSharedLibraries = core.SetSharedLibraries
12- PuregoSafeRegister = core.PuregoSafeRegister
6+ GetPaths = core.GetPaths
7+ ByteSlice = core.ByteSlice
8+ GoStringSlice = core.GoStringSlice
9+ GoString = core.GoString
10+ NullableStringToPtr = core.NullableStringToPtr
11+ PtrToNullableString = core.PtrToNullableString
12+ SetPackageName = core.SetPackageName
13+ SetSharedLibraries = core.SetSharedLibraries
14+ PuregoSafeRegister = core.PuregoSafeRegister
1315 )
M templates/go +151 -10
@@ -4,27 +4,38 @@ package {{.PkgName}}
44 {{ $NotGObject := ne .PkgName "gobject" }}
55 {{ $NotGLib := ne .PkgName "glib" }}
66 {{ $HasSignals := false }}
7+{{ $HasDetailedSignals := false }}
78 {{range .Classes -}}
89 {{if .Signals}}
910 {{ $HasSignals = true }}
1011 {{end}}
12+ {{range .Signals}}
13+ {{if .Detailed}}
14+ {{ $HasDetailedSignals = true }}
15+ {{end}}
16+ {{end}}
1117 {{end}}
12-{{ $NeedsUnsafe := or .Records $HasSignals }}
13-{{ $NeedsPurego := or .NeedsInit $HasSignals }}
14-{{ $AnyImports := or .NeedsInit .Records $HasSignals }}
18+{{ $HasCallbacks := or .HasReceiverCallbacks .HasFunctionCallbacks }}
19+{{ $NeedsUnsafe := or .Records $HasSignals $HasCallbacks }}
20+{{ $NeedsPurego := or .NeedsInit $HasSignals $HasCallbacks }}
21+{{ $NeedsCore := or .NeedsInit .NeedsCore }}
22+{{ $AnyImports := or $NeedsCore .Records $HasSignals $HasCallbacks $HasDetailedSignals }}
1523
1624 {{if $AnyImports}}
1725 import (
1826 {{- if $NeedsUnsafe}}
1927 "unsafe"
2028 {{- end}}
29+{{- if $HasDetailedSignals}}
30+ "fmt"
31+{{- end}}
2132 {{- if .Records}}
2233 "structs"
2334 {{- end}}
2435 {{- if $NeedsPurego}}
2536 "github.com/jwijenbergh/purego"
2637 {{- end}}
27-{{- if .NeedsInit}}
38+{{- if $NeedsCore}}
2839 "github.com/jwijenbergh/puregotk/pkg/core"
2940 {{- end}}
3041 )
@@ -66,7 +77,24 @@ var x{{.Name}} func({{conv .Args.Pure.Types}}) {{.Ret.Raw}}
6677 {{.Doc}}
6778 func {{.Name}}({{conv .Args.API.Full}}) {{.Ret.Return}} {
6879 {{.Ret.Preamble $NotGLib}}
69- {{if .Ret.Value}}cret :={{end}}x{{.Name}}({{convd .Args.API.Call}})
80+ {{- /* Generate closure wrappers for callback parameters */}}
81+ {{range .Args.Callbacks}}
82+ var {{.Name}}Ref uintptr
83+ if {{.Name}} != nil {
84+ {{.Name}}Ptr := uintptr(unsafe.Pointer({{.Name}}))
85+ if cbRefPtr, ok := {{if $NotGLib}}glib.{{end}}GetCallback({{.Name}}Ptr); ok {
86+ {{.Name}}Ref = cbRefPtr
87+ } else {
88+ fcb := func({{range $i, $t := .PureTypes}}{{if $i}}, {{end}}arg{{$i}} {{$t}}{{end}}) {{.RetRaw}} {
89+ cbFn := *{{.Name}}
90+ {{if .RetRaw}}return {{end}}cbFn({{range $i, $t := .PureTypes}}{{if $i}}, {{end}}arg{{$i}}{{end}})
91+ }
92+ {{.Name}}Ref = purego.NewCallback(fcb)
93+ {{if $NotGLib}}glib.{{end}}SaveCallback({{.Name}}Ptr, {{.Name}}Ref)
94+ }
95+ }
96+ {{end}}
97+ {{if .Ret.Value}}cret :={{end}}x{{.Name}}({{convd .Args.API.CallWithRefs}})
7098 {{.Ret.Fmt $NotGObject}}
7199 }
72100 {{end}}
@@ -78,7 +106,24 @@ var x{{$outer.Name}}{{.Name}} func(uintptr {{convc .Args.Pure.Types}}) {{.Ret.Ra
78106 {{.Doc}}
79107 func (x *{{$outer.Name}}) {{.Name}}({{conv .Args.API.Full}}) {{.Ret.Return}} {
80108 {{.Ret.Preamble $NotGLib}}
81- {{if .Ret.Value}}cret :={{end}}x{{$outer.Name}}{{.Name}}(x.GoPointer() {{convcd .Args.API.Call}})
109+ {{- /* Generate closure wrappers for callback parameters */}}
110+ {{range .Args.Callbacks}}
111+ var {{.Name}}Ref uintptr
112+ if {{.Name}} != nil {
113+ {{.Name}}Ptr := uintptr(unsafe.Pointer({{.Name}}))
114+ if cbRefPtr, ok := {{if $NotGLib}}glib.{{end}}GetCallback({{.Name}}Ptr); ok {
115+ {{.Name}}Ref = cbRefPtr
116+ } else {
117+ fcb := func({{range $i, $t := .PureTypes}}{{if $i}}, {{end}}arg{{$i}} {{$t}}{{end}}) {{.RetRaw}} {
118+ cbFn := *{{.Name}}
119+ {{if .RetRaw}}return {{end}}cbFn({{range $i, $t := .PureTypes}}{{if $i}}, {{end}}arg{{$i}}{{end}})
120+ }
121+ {{.Name}}Ref = purego.NewCallback(fcb)
122+ {{if $NotGLib}}glib.{{end}}SaveCallback({{.Name}}Ptr, {{.Name}}Ref)
123+ }
124+ }
125+ {{end}}
126+ {{if .Ret.Value}}cret :={{end}}x{{$outer.Name}}{{.Name}}(x.GoPointer() {{convcd .Args.API.CallWithRefs}})
82127 {{.Ret.Fmt $NotGObject}}
83128 }
84129 {{end}}
@@ -239,7 +284,24 @@ var x{{.Name}} func({{conv .Args.Pure.Types}}) {{.Ret.Raw}}
239284 {{.Doc}}
240285 func {{.Name}}({{conv .Args.API.Full}}) {{.Ret.Return}} {
241286 {{.Ret.Preamble $NotGLib}}
242- {{if .Ret.Value}}cret := {{end}}x{{.Name}}({{convd .Args.API.Call}})
287+ {{- /* Generate closure wrappers for callback parameters */}}
288+ {{range .Args.Callbacks}}
289+ var {{.Name}}Ref uintptr
290+ if {{.Name}} != nil {
291+ {{.Name}}Ptr := uintptr(unsafe.Pointer({{.Name}}))
292+ if cbRefPtr, ok := {{if $NotGLib}}glib.{{end}}GetCallback({{.Name}}Ptr); ok {
293+ {{.Name}}Ref = cbRefPtr
294+ } else {
295+ fcb := func({{range $i, $t := .PureTypes}}{{if $i}}, {{end}}arg{{$i}} {{$t}}{{end}}) {{.RetRaw}} {
296+ cbFn := *{{.Name}}
297+ {{if .RetRaw}}return {{end}}cbFn({{range $i, $t := .PureTypes}}{{if $i}}, {{end}}arg{{$i}}{{end}})
298+ }
299+ {{.Name}}Ref = purego.NewCallback(fcb)
300+ {{if $NotGLib}}glib.{{end}}SaveCallback({{.Name}}Ptr, {{.Name}}Ref)
301+ }
302+ }
303+ {{end}}
304+ {{if .Ret.Value}}cret := {{end}}x{{.Name}}({{convd .Args.API.CallWithRefs}})
243305 {{.Ret.Fmt $NotGObject}}
244306 }
245307 {{end}}
@@ -274,7 +336,24 @@ var x{{.Name}} func({{conv .Args.Pure.Types}}) {{.Ret.Raw}}
274336 {{.Doc}}
275337 func {{.Name}}({{conv .Args.API.Full}}) {{.Ret.Return}} {
276338 {{.Ret.Preamble $NotGLib}}
277- {{if .Ret.Value}}cret :={{end}}x{{.Name}}({{convd .Args.API.Call}})
339+ {{- /* Generate closure wrappers for callback parameters */}}
340+ {{range .Args.Callbacks}}
341+ var {{.Name}}Ref uintptr
342+ if {{.Name}} != nil {
343+ {{.Name}}Ptr := uintptr(unsafe.Pointer({{.Name}}))
344+ if cbRefPtr, ok := {{if $NotGLib}}glib.{{end}}GetCallback({{.Name}}Ptr); ok {
345+ {{.Name}}Ref = cbRefPtr
346+ } else {
347+ fcb := func({{range $i, $t := .PureTypes}}{{if $i}}, {{end}}arg{{$i}} {{$t}}{{end}}) {{.RetRaw}} {
348+ cbFn := *{{.Name}}
349+ {{if .RetRaw}}return {{end}}cbFn({{range $i, $t := .PureTypes}}{{if $i}}, {{end}}arg{{$i}}{{end}})
350+ }
351+ {{.Name}}Ref = purego.NewCallback(fcb)
352+ {{if $NotGLib}}glib.{{end}}SaveCallback({{.Name}}Ptr, {{.Name}}Ref)
353+ }
354+ }
355+ {{end}}
356+ {{if .Ret.Value}}cret :={{end}}x{{.Name}}({{convd .Args.API.CallWithRefs}})
278357 {{.Ret.Fmt $NotGObject}}
279358 }
280359 {{end}}
@@ -286,7 +365,24 @@ var x{{$outer.Name}}{{.Name}} func(uintptr {{convc .Args.Pure.Types}}) {{.Ret.Ra
286365 {{.Doc}}
287366 func (x *{{$outer.Name}}) {{.Name}}({{conv .Args.API.Full}}) {{.Ret.Return}} {
288367 {{.Ret.Preamble $NotGLib}}
289- {{if .Ret.Value}}cret :={{end}}x{{$outer.Name}}{{.Name}}(x.GoPointer() {{convcd .Args.API.Call}})
368+ {{- /* Generate closure wrappers for callback parameters */}}
369+ {{range .Args.Callbacks}}
370+ var {{.Name}}Ref uintptr
371+ if {{.Name}} != nil {
372+ {{.Name}}Ptr := uintptr(unsafe.Pointer({{.Name}}))
373+ if cbRefPtr, ok := {{if $NotGLib}}glib.{{end}}GetCallback({{.Name}}Ptr); ok {
374+ {{.Name}}Ref = cbRefPtr
375+ } else {
376+ fcb := func({{range $i, $t := .PureTypes}}{{if $i}}, {{end}}arg{{$i}} {{$t}}{{end}}) {{.RetRaw}} {
377+ cbFn := *{{.Name}}
378+ {{if .RetRaw}}return {{end}}cbFn({{range $i, $t := .PureTypes}}{{if $i}}, {{end}}arg{{$i}}{{end}})
379+ }
380+ {{.Name}}Ref = purego.NewCallback(fcb)
381+ {{if $NotGLib}}glib.{{end}}SaveCallback({{.Name}}Ptr, {{.Name}}Ref)
382+ }
383+ }
384+ {{end}}
385+ {{if .Ret.Value}}cret :={{end}}x{{$outer.Name}}{{.Name}}(x.GoPointer() {{convcd .Args.API.CallWithRefs}})
290386 {{.Ret.Fmt $NotGObject}}
291387 }
292388 {{end}}
@@ -350,6 +446,34 @@ func (x *{{$outer.Name}}) Connect{{.Name}}(cb *func({{$outer.Name}} {{convc .Arg
350446 {{if $NotGLib}}glib.{{end}}SaveCallback(cbPtr, cbRefPtr)
351447 return {{if $NotGObject}}gobject.{{end}}SignalConnect(x.GoPointer(), "{{.CName}}", cbRefPtr)
352448 }
449+{{if .Detailed}}
450+// Connect{{.Name}}WithDetail connects to the "{{.CName}}" signal with a detail string.
451+// The detail is appended as "{{.CName}}::<detail>".
452+func (x *{{$outer.Name}}) Connect{{.Name}}WithDetail(detail string, cb *func({{$outer.Name}} {{convc .Args.API.Types}}) {{.Ret.Value}}) uint32 {
453+ cbPtr := uintptr(unsafe.Pointer(cb))
454+ signalName := fmt.Sprintf("{{.CName}}::%s", detail)
455+ if cbRefPtr, ok := {{if $NotGLib}}glib.{{end}}GetCallback(cbPtr); ok {
456+ return {{if $NotGObject}}gobject.{{end}}SignalConnect(x.GoPointer(), signalName, cbRefPtr)
457+ }
458+
459+ fcb := func(clsPtr uintptr {{convc .Args.Pure.Full}}) {{.Ret.Raw}} {
460+ fa := {{$outer.Name}}{}
461+ fa.Ptr = clsPtr
462+ cbFn := *cb
463+ {{if .Ret.Class}}
464+ {{.Name}}Cls := cbFn(fa {{convc .Args.Pure.Call}})
465+ return {{.Name}}Cls.Ptr
466+ {{else if .Ret.Value}}
467+ return cbFn(fa {{convc .Args.Pure.Call}})
468+ {{else}}
469+ cbFn(fa {{convc .Args.Pure.Call}})
470+ {{end}}
471+ }
472+ cbRefPtr := purego.NewCallback(fcb)
473+ {{if $NotGLib}}glib.{{end}}SaveCallback(cbPtr, cbRefPtr)
474+ return {{if $NotGObject}}gobject.{{end}}SignalConnect(x.GoPointer(), signalName, cbRefPtr)
475+}
476+{{end}}
353477 {{end}}
354478
355479 {{range .Interfaces -}}
@@ -369,7 +493,24 @@ var x{{.Name}} func({{conv .Args.Pure.Types}}) {{.Ret.Raw}}
369493 {{.Doc}}
370494 func {{.Name}}({{conv .Args.API.Full}}) {{.Ret.Return}} {
371495 {{.Ret.Preamble $NotGLib}}
372- {{if .Ret.Value}}cret := {{end}}x{{.Name}}({{convd .Args.API.Call}})
496+ {{- /* Generate closure wrappers for callback parameters */}}
497+ {{range .Args.Callbacks}}
498+ var {{.Name}}Ref uintptr
499+ if {{.Name}} != nil {
500+ {{.Name}}Ptr := uintptr(unsafe.Pointer({{.Name}}))
501+ if cbRefPtr, ok := {{if $NotGLib}}glib.{{end}}GetCallback({{.Name}}Ptr); ok {
502+ {{.Name}}Ref = cbRefPtr
503+ } else {
504+ fcb := func({{range $i, $t := .PureTypes}}{{if $i}}, {{end}}arg{{$i}} {{$t}}{{end}}) {{.RetRaw}} {
505+ cbFn := *{{.Name}}
506+ {{if .RetRaw}}return {{end}}cbFn({{range $i, $t := .PureTypes}}{{if $i}}, {{end}}arg{{$i}}{{end}})
507+ }
508+ {{.Name}}Ref = purego.NewCallback(fcb)
509+ {{if $NotGLib}}glib.{{end}}SaveCallback({{.Name}}Ptr, {{.Name}}Ref)
510+ }
511+ }
512+ {{end}}
513+ {{if .Ret.Value}}cret := {{end}}x{{.Name}}({{convd .Args.API.CallWithRefs}})
373514 {{.Ret.Fmt $NotGObject}}
374515 }
375516 {{end}}
M v4/adw/adw-about-dialog.go +30 -30
@@ -32,15 +32,15 @@ func ShowAboutDialog(ParentVar *gtk.Widget, FirstPropertyNameVar string, varArgs
3232
3333 }
3434
35-var xShowAboutDialogFromAppdata func(uintptr, string, string, string, ...interface{})
35+var xShowAboutDialogFromAppdata func(uintptr, string, uintptr, string, ...interface{})
3636
3737 // A convenience function for showing an application’s about dialog from
3838 // AppStream metadata.
3939 //
4040 // See [ctor@AboutDialog.new_from_appdata] for details.
41-func ShowAboutDialogFromAppdata(ParentVar *gtk.Widget, ResourcePathVar string, ReleaseNotesVersionVar string, FirstPropertyNameVar string, varArgs ...interface{}) {
41+func ShowAboutDialogFromAppdata(ParentVar *gtk.Widget, ResourcePathVar string, ReleaseNotesVersionVar *string, FirstPropertyNameVar string, varArgs ...interface{}) {
4242
43- xShowAboutDialogFromAppdata(ParentVar.GoPointer(), ResourcePathVar, ReleaseNotesVersionVar, FirstPropertyNameVar, varArgs...)
43+ xShowAboutDialogFromAppdata(ParentVar.GoPointer(), ResourcePathVar, core.NullableStringToPtr(ReleaseNotesVersionVar), FirstPropertyNameVar, varArgs...)
4444
4545 }
4646
@@ -253,7 +253,7 @@ func NewAboutDialog() *AboutDialog {
253253 return cls
254254 }
255255
256-var xNewAboutDialogFromAppdata func(string, string) uintptr
256+var xNewAboutDialogFromAppdata func(string, uintptr) uintptr
257257
258258 // Creates a new `AdwAboutDialog` using AppStream metadata.
259259 //
@@ -276,10 +276,10 @@ var xNewAboutDialogFromAppdata func(string, string) uintptr
276276 // [property@AboutDialog:release-notes-version] is set to match it, while
277277 // [property@AboutDialog:release-notes] is set from the AppStream release
278278 // description for that version.
279-func NewAboutDialogFromAppdata(ResourcePathVar string, ReleaseNotesVersionVar string) *AboutDialog {
279+func NewAboutDialogFromAppdata(ResourcePathVar string, ReleaseNotesVersionVar *string) *AboutDialog {
280280 var cls *AboutDialog
281281
282- cret := xNewAboutDialogFromAppdata(ResourcePathVar, ReleaseNotesVersionVar)
282+ cret := xNewAboutDialogFromAppdata(ResourcePathVar, core.NullableStringToPtr(ReleaseNotesVersionVar))
283283
284284 if cret == 0 {
285285 return nil
@@ -290,7 +290,7 @@ func NewAboutDialogFromAppdata(ResourcePathVar string, ReleaseNotesVersionVar st
290290 return cls
291291 }
292292
293-var xAboutDialogAddAcknowledgementSection func(uintptr, string, []string)
293+var xAboutDialogAddAcknowledgementSection func(uintptr, uintptr, []string)
294294
295295 // Adds a section to the Acknowledgements page.
296296 //
@@ -309,13 +309,13 @@ var xAboutDialogAddAcknowledgementSection func(uintptr, string, []string)
309309 // * [property@AboutDialog:documenters]
310310 // * [property@AboutDialog:translator-credits]
311311 // * [method@AboutDialog.add_credit_section]
312-func (x *AboutDialog) AddAcknowledgementSection(NameVar string, PeopleVar []string) {
312+func (x *AboutDialog) AddAcknowledgementSection(NameVar *string, PeopleVar []string) {
313313
314- xAboutDialogAddAcknowledgementSection(x.GoPointer(), NameVar, PeopleVar)
314+ xAboutDialogAddAcknowledgementSection(x.GoPointer(), core.NullableStringToPtr(NameVar), PeopleVar)
315315
316316 }
317317
318-var xAboutDialogAddCreditSection func(uintptr, string, []string)
318+var xAboutDialogAddCreditSection func(uintptr, uintptr, []string)
319319
320320 // Adds an extra section to the Credits page.
321321 //
@@ -332,13 +332,13 @@ var xAboutDialogAddCreditSection func(uintptr, string, []string)
332332 // * [property@AboutDialog:documenters]
333333 // * [property@AboutDialog:translator-credits]
334334 // * [method@AboutDialog.add_acknowledgement_section]
335-func (x *AboutDialog) AddCreditSection(NameVar string, PeopleVar []string) {
335+func (x *AboutDialog) AddCreditSection(NameVar *string, PeopleVar []string) {
336336
337- xAboutDialogAddCreditSection(x.GoPointer(), NameVar, PeopleVar)
337+ xAboutDialogAddCreditSection(x.GoPointer(), core.NullableStringToPtr(NameVar), PeopleVar)
338338
339339 }
340340
341-var xAboutDialogAddLegalSection func(uintptr, string, string, gtk.License, string)
341+var xAboutDialogAddLegalSection func(uintptr, string, uintptr, gtk.License, uintptr)
342342
343343 // Adds an extra section to the Legal page.
344344 //
@@ -385,9 +385,9 @@ var xAboutDialogAddLegalSection func(uintptr, string, string, gtk.License, strin
385385 // "Something completely custom here.");
386386 //
387387 // ```
388-func (x *AboutDialog) AddLegalSection(TitleVar string, CopyrightVar string, LicenseTypeVar gtk.License, LicenseVar string) {
388+func (x *AboutDialog) AddLegalSection(TitleVar string, CopyrightVar *string, LicenseTypeVar gtk.License, LicenseVar *string) {
389389
390- xAboutDialogAddLegalSection(x.GoPointer(), TitleVar, CopyrightVar, LicenseTypeVar, LicenseVar)
390+ xAboutDialogAddLegalSection(x.GoPointer(), TitleVar, core.NullableStringToPtr(CopyrightVar), LicenseTypeVar, core.NullableStringToPtr(LicenseVar))
391391
392392 }
393393
@@ -1002,7 +1002,7 @@ func (c *AboutDialog) SetGoPointer(ptr uintptr) {
10021002 func (x *AboutDialog) SetPropertyApplicationIcon(value string) {
10031003 var v gobject.Value
10041004 v.Init(gobject.TypeStringVal)
1005- v.SetString(value)
1005+ v.SetString(&value)
10061006 x.SetProperty("application-icon", &v)
10071007 }
10081008
@@ -1023,7 +1023,7 @@ func (x *AboutDialog) GetPropertyApplicationIcon() string {
10231023 func (x *AboutDialog) SetPropertyApplicationName(value string) {
10241024 var v gobject.Value
10251025 v.Init(gobject.TypeStringVal)
1026- v.SetString(value)
1026+ v.SetString(&value)
10271027 x.SetProperty("application-name", &v)
10281028 }
10291029
@@ -1092,7 +1092,7 @@ func (x *AboutDialog) GetPropertyArtists() []string {
10921092 func (x *AboutDialog) SetPropertyComments(value string) {
10931093 var v gobject.Value
10941094 v.Init(gobject.TypeStringVal)
1095- v.SetString(value)
1095+ v.SetString(&value)
10961096 x.SetProperty("comments", &v)
10971097 }
10981098
@@ -1123,7 +1123,7 @@ func (x *AboutDialog) GetPropertyComments() string {
11231123 func (x *AboutDialog) SetPropertyCopyright(value string) {
11241124 var v gobject.Value
11251125 v.Init(gobject.TypeStringVal)
1126- v.SetString(value)
1126+ v.SetString(&value)
11271127 x.SetProperty("copyright", &v)
11281128 }
11291129
@@ -1159,7 +1159,7 @@ func (x *AboutDialog) GetPropertyCopyright() string {
11591159 func (x *AboutDialog) SetPropertyDebugInfo(value string) {
11601160 var v gobject.Value
11611161 v.Init(gobject.TypeStringVal)
1162- v.SetString(value)
1162+ v.SetString(&value)
11631163 x.SetProperty("debug-info", &v)
11641164 }
11651165
@@ -1191,7 +1191,7 @@ func (x *AboutDialog) GetPropertyDebugInfo() string {
11911191 func (x *AboutDialog) SetPropertyDebugInfoFilename(value string) {
11921192 var v gobject.Value
11931193 v.Init(gobject.TypeStringVal)
1194- v.SetString(value)
1194+ v.SetString(&value)
11951195 x.SetProperty("debug-info-filename", &v)
11961196 }
11971197
@@ -1267,7 +1267,7 @@ func (x *AboutDialog) GetPropertyDesigners() []string {
12671267 func (x *AboutDialog) SetPropertyDeveloperName(value string) {
12681268 var v gobject.Value
12691269 v.Init(gobject.TypeStringVal)
1270- v.SetString(value)
1270+ v.SetString(&value)
12711271 x.SetProperty("developer-name", &v)
12721272 }
12731273
@@ -1385,7 +1385,7 @@ func (x *AboutDialog) GetPropertyDocumenters() []string {
13851385 func (x *AboutDialog) SetPropertyIssueUrl(value string) {
13861386 var v gobject.Value
13871387 v.Init(gobject.TypeStringVal)
1388- v.SetString(value)
1388+ v.SetString(&value)
13891389 x.SetProperty("issue-url", &v)
13901390 }
13911391
@@ -1418,7 +1418,7 @@ func (x *AboutDialog) GetPropertyIssueUrl() string {
14181418 func (x *AboutDialog) SetPropertyLicense(value string) {
14191419 var v gobject.Value
14201420 v.Init(gobject.TypeStringVal)
1421- v.SetString(value)
1421+ v.SetString(&value)
14221422 x.SetProperty("license", &v)
14231423 }
14241424
@@ -1472,7 +1472,7 @@ func (x *AboutDialog) GetPropertyLicense() string {
14721472 func (x *AboutDialog) SetPropertyReleaseNotes(value string) {
14731473 var v gobject.Value
14741474 v.Init(gobject.TypeStringVal)
1475- v.SetString(value)
1475+ v.SetString(&value)
14761476 x.SetProperty("release-notes", &v)
14771477 }
14781478
@@ -1523,7 +1523,7 @@ func (x *AboutDialog) GetPropertyReleaseNotes() string {
15231523 func (x *AboutDialog) SetPropertyReleaseNotesVersion(value string) {
15241524 var v gobject.Value
15251525 v.Init(gobject.TypeStringVal)
1526- v.SetString(value)
1526+ v.SetString(&value)
15271527 x.SetProperty("release-notes-version", &v)
15281528 }
15291529
@@ -1553,7 +1553,7 @@ func (x *AboutDialog) GetPropertyReleaseNotesVersion() string {
15531553 func (x *AboutDialog) SetPropertySupportUrl(value string) {
15541554 var v gobject.Value
15551555 v.Init(gobject.TypeStringVal)
1556- v.SetString(value)
1556+ v.SetString(&value)
15571557 x.SetProperty("support-url", &v)
15581558 }
15591559
@@ -1589,7 +1589,7 @@ func (x *AboutDialog) GetPropertySupportUrl() string {
15891589 func (x *AboutDialog) SetPropertyTranslatorCredits(value string) {
15901590 var v gobject.Value
15911591 v.Init(gobject.TypeStringVal)
1592- v.SetString(value)
1592+ v.SetString(&value)
15931593 x.SetProperty("translator-credits", &v)
15941594 }
15951595
@@ -1628,7 +1628,7 @@ func (x *AboutDialog) GetPropertyTranslatorCredits() string {
16281628 func (x *AboutDialog) SetPropertyVersion(value string) {
16291629 var v gobject.Value
16301630 v.Init(gobject.TypeStringVal)
1631- v.SetString(value)
1631+ v.SetString(&value)
16321632 x.SetProperty("version", &v)
16331633 }
16341634
@@ -1655,7 +1655,7 @@ func (x *AboutDialog) GetPropertyVersion() string {
16551655 func (x *AboutDialog) SetPropertyWebsite(value string) {
16561656 var v gobject.Value
16571657 v.Init(gobject.TypeStringVal)
1658- v.SetString(value)
1658+ v.SetString(&value)
16591659 x.SetProperty("website", &v)
16601660 }
16611661
M v4/adw/adw-about-window.go +30 -30
@@ -34,15 +34,15 @@ func ShowAboutWindow(ParentVar *gtk.Window, FirstPropertyNameVar string, varArgs
3434
3535 }
3636
37-var xShowAboutWindowFromAppdata func(uintptr, string, string, string, ...interface{})
37+var xShowAboutWindowFromAppdata func(uintptr, string, uintptr, string, ...interface{})
3838
3939 // A convenience function for showing an application’s about window from
4040 // AppStream metadata.
4141 //
4242 // See [ctor@AboutWindow.new_from_appdata] for details.
43-func ShowAboutWindowFromAppdata(ParentVar *gtk.Window, ResourcePathVar string, ReleaseNotesVersionVar string, FirstPropertyNameVar string, varArgs ...interface{}) {
43+func ShowAboutWindowFromAppdata(ParentVar *gtk.Window, ResourcePathVar string, ReleaseNotesVersionVar *string, FirstPropertyNameVar string, varArgs ...interface{}) {
4444
45- xShowAboutWindowFromAppdata(ParentVar.GoPointer(), ResourcePathVar, ReleaseNotesVersionVar, FirstPropertyNameVar, varArgs...)
45+ xShowAboutWindowFromAppdata(ParentVar.GoPointer(), ResourcePathVar, core.NullableStringToPtr(ReleaseNotesVersionVar), FirstPropertyNameVar, varArgs...)
4646
4747 }
4848
@@ -250,7 +250,7 @@ func NewAboutWindow() *AboutWindow {
250250 return cls
251251 }
252252
253-var xNewAboutWindowFromAppdata func(string, string) uintptr
253+var xNewAboutWindowFromAppdata func(string, uintptr) uintptr
254254
255255 // Creates a new `AdwAboutWindow` using AppStream metadata.
256256 //
@@ -273,10 +273,10 @@ var xNewAboutWindowFromAppdata func(string, string) uintptr
273273 // [property@AboutWindow:release-notes-version] is set to match it, while
274274 // [property@AboutWindow:release-notes] is set from the AppStream release
275275 // description for that version.
276-func NewAboutWindowFromAppdata(ResourcePathVar string, ReleaseNotesVersionVar string) *AboutWindow {
276+func NewAboutWindowFromAppdata(ResourcePathVar string, ReleaseNotesVersionVar *string) *AboutWindow {
277277 var cls *AboutWindow
278278
279- cret := xNewAboutWindowFromAppdata(ResourcePathVar, ReleaseNotesVersionVar)
279+ cret := xNewAboutWindowFromAppdata(ResourcePathVar, core.NullableStringToPtr(ReleaseNotesVersionVar))
280280
281281 if cret == 0 {
282282 return nil
@@ -287,7 +287,7 @@ func NewAboutWindowFromAppdata(ResourcePathVar string, ReleaseNotesVersionVar st
287287 return cls
288288 }
289289
290-var xAboutWindowAddAcknowledgementSection func(uintptr, string, []string)
290+var xAboutWindowAddAcknowledgementSection func(uintptr, uintptr, []string)
291291
292292 // Adds a section to the Acknowledgements page.
293293 //
@@ -306,13 +306,13 @@ var xAboutWindowAddAcknowledgementSection func(uintptr, string, []string)
306306 // * [property@AboutWindow:documenters]
307307 // * [property@AboutWindow:translator-credits]
308308 // * [method@AboutWindow.add_credit_section]
309-func (x *AboutWindow) AddAcknowledgementSection(NameVar string, PeopleVar []string) {
309+func (x *AboutWindow) AddAcknowledgementSection(NameVar *string, PeopleVar []string) {
310310
311- xAboutWindowAddAcknowledgementSection(x.GoPointer(), NameVar, PeopleVar)
311+ xAboutWindowAddAcknowledgementSection(x.GoPointer(), core.NullableStringToPtr(NameVar), PeopleVar)
312312
313313 }
314314
315-var xAboutWindowAddCreditSection func(uintptr, string, []string)
315+var xAboutWindowAddCreditSection func(uintptr, uintptr, []string)
316316
317317 // Adds an extra section to the Credits page.
318318 //
@@ -329,13 +329,13 @@ var xAboutWindowAddCreditSection func(uintptr, string, []string)
329329 // * [property@AboutWindow:documenters]
330330 // * [property@AboutWindow:translator-credits]
331331 // * [method@AboutWindow.add_acknowledgement_section]
332-func (x *AboutWindow) AddCreditSection(NameVar string, PeopleVar []string) {
332+func (x *AboutWindow) AddCreditSection(NameVar *string, PeopleVar []string) {
333333
334- xAboutWindowAddCreditSection(x.GoPointer(), NameVar, PeopleVar)
334+ xAboutWindowAddCreditSection(x.GoPointer(), core.NullableStringToPtr(NameVar), PeopleVar)
335335
336336 }
337337
338-var xAboutWindowAddLegalSection func(uintptr, string, string, gtk.License, string)
338+var xAboutWindowAddLegalSection func(uintptr, string, uintptr, gtk.License, uintptr)
339339
340340 // Adds an extra section to the Legal page.
341341 //
@@ -382,9 +382,9 @@ var xAboutWindowAddLegalSection func(uintptr, string, string, gtk.License, strin
382382 // "Something completely custom here.");
383383 //
384384 // ```
385-func (x *AboutWindow) AddLegalSection(TitleVar string, CopyrightVar string, LicenseTypeVar gtk.License, LicenseVar string) {
385+func (x *AboutWindow) AddLegalSection(TitleVar string, CopyrightVar *string, LicenseTypeVar gtk.License, LicenseVar *string) {
386386
387- xAboutWindowAddLegalSection(x.GoPointer(), TitleVar, CopyrightVar, LicenseTypeVar, LicenseVar)
387+ xAboutWindowAddLegalSection(x.GoPointer(), TitleVar, core.NullableStringToPtr(CopyrightVar), LicenseTypeVar, core.NullableStringToPtr(LicenseVar))
388388
389389 }
390390
@@ -972,7 +972,7 @@ func (c *AboutWindow) SetGoPointer(ptr uintptr) {
972972 func (x *AboutWindow) SetPropertyApplicationIcon(value string) {
973973 var v gobject.Value
974974 v.Init(gobject.TypeStringVal)
975- v.SetString(value)
975+ v.SetString(&value)
976976 x.SetProperty("application-icon", &v)
977977 }
978978
@@ -993,7 +993,7 @@ func (x *AboutWindow) GetPropertyApplicationIcon() string {
993993 func (x *AboutWindow) SetPropertyApplicationName(value string) {
994994 var v gobject.Value
995995 v.Init(gobject.TypeStringVal)
996- v.SetString(value)
996+ v.SetString(&value)
997997 x.SetProperty("application-name", &v)
998998 }
999999
@@ -1062,7 +1062,7 @@ func (x *AboutWindow) GetPropertyArtists() []string {
10621062 func (x *AboutWindow) SetPropertyComments(value string) {
10631063 var v gobject.Value
10641064 v.Init(gobject.TypeStringVal)
1065- v.SetString(value)
1065+ v.SetString(&value)
10661066 x.SetProperty("comments", &v)
10671067 }
10681068
@@ -1093,7 +1093,7 @@ func (x *AboutWindow) GetPropertyComments() string {
10931093 func (x *AboutWindow) SetPropertyCopyright(value string) {
10941094 var v gobject.Value
10951095 v.Init(gobject.TypeStringVal)
1096- v.SetString(value)
1096+ v.SetString(&value)
10971097 x.SetProperty("copyright", &v)
10981098 }
10991099
@@ -1129,7 +1129,7 @@ func (x *AboutWindow) GetPropertyCopyright() string {
11291129 func (x *AboutWindow) SetPropertyDebugInfo(value string) {
11301130 var v gobject.Value
11311131 v.Init(gobject.TypeStringVal)
1132- v.SetString(value)
1132+ v.SetString(&value)
11331133 x.SetProperty("debug-info", &v)
11341134 }
11351135
@@ -1161,7 +1161,7 @@ func (x *AboutWindow) GetPropertyDebugInfo() string {
11611161 func (x *AboutWindow) SetPropertyDebugInfoFilename(value string) {
11621162 var v gobject.Value
11631163 v.Init(gobject.TypeStringVal)
1164- v.SetString(value)
1164+ v.SetString(&value)
11651165 x.SetProperty("debug-info-filename", &v)
11661166 }
11671167
@@ -1237,7 +1237,7 @@ func (x *AboutWindow) GetPropertyDesigners() []string {
12371237 func (x *AboutWindow) SetPropertyDeveloperName(value string) {
12381238 var v gobject.Value
12391239 v.Init(gobject.TypeStringVal)
1240- v.SetString(value)
1240+ v.SetString(&value)
12411241 x.SetProperty("developer-name", &v)
12421242 }
12431243
@@ -1355,7 +1355,7 @@ func (x *AboutWindow) GetPropertyDocumenters() []string {
13551355 func (x *AboutWindow) SetPropertyIssueUrl(value string) {
13561356 var v gobject.Value
13571357 v.Init(gobject.TypeStringVal)
1358- v.SetString(value)
1358+ v.SetString(&value)
13591359 x.SetProperty("issue-url", &v)
13601360 }
13611361
@@ -1388,7 +1388,7 @@ func (x *AboutWindow) GetPropertyIssueUrl() string {
13881388 func (x *AboutWindow) SetPropertyLicense(value string) {
13891389 var v gobject.Value
13901390 v.Init(gobject.TypeStringVal)
1391- v.SetString(value)
1391+ v.SetString(&value)
13921392 x.SetProperty("license", &v)
13931393 }
13941394
@@ -1442,7 +1442,7 @@ func (x *AboutWindow) GetPropertyLicense() string {
14421442 func (x *AboutWindow) SetPropertyReleaseNotes(value string) {
14431443 var v gobject.Value
14441444 v.Init(gobject.TypeStringVal)
1445- v.SetString(value)
1445+ v.SetString(&value)
14461446 x.SetProperty("release-notes", &v)
14471447 }
14481448
@@ -1493,7 +1493,7 @@ func (x *AboutWindow) GetPropertyReleaseNotes() string {
14931493 func (x *AboutWindow) SetPropertyReleaseNotesVersion(value string) {
14941494 var v gobject.Value
14951495 v.Init(gobject.TypeStringVal)
1496- v.SetString(value)
1496+ v.SetString(&value)
14971497 x.SetProperty("release-notes-version", &v)
14981498 }
14991499
@@ -1523,7 +1523,7 @@ func (x *AboutWindow) GetPropertyReleaseNotesVersion() string {
15231523 func (x *AboutWindow) SetPropertySupportUrl(value string) {
15241524 var v gobject.Value
15251525 v.Init(gobject.TypeStringVal)
1526- v.SetString(value)
1526+ v.SetString(&value)
15271527 x.SetProperty("support-url", &v)
15281528 }
15291529
@@ -1559,7 +1559,7 @@ func (x *AboutWindow) GetPropertySupportUrl() string {
15591559 func (x *AboutWindow) SetPropertyTranslatorCredits(value string) {
15601560 var v gobject.Value
15611561 v.Init(gobject.TypeStringVal)
1562- v.SetString(value)
1562+ v.SetString(&value)
15631563 x.SetProperty("translator-credits", &v)
15641564 }
15651565
@@ -1598,7 +1598,7 @@ func (x *AboutWindow) GetPropertyTranslatorCredits() string {
15981598 func (x *AboutWindow) SetPropertyVersion(value string) {
15991599 var v gobject.Value
16001600 v.Init(gobject.TypeStringVal)
1601- v.SetString(value)
1601+ v.SetString(&value)
16021602 x.SetProperty("version", &v)
16031603 }
16041604
@@ -1625,7 +1625,7 @@ func (x *AboutWindow) GetPropertyVersion() string {
16251625 func (x *AboutWindow) SetPropertyWebsite(value string) {
16261626 var v gobject.Value
16271627 v.Init(gobject.TypeStringVal)
1628- v.SetString(value)
1628+ v.SetString(&value)
16291629 x.SetProperty("website", &v)
16301630 }
16311631
M v4/adw/adw-action-row.go +7 -7
@@ -253,12 +253,12 @@ func (x *ActionRow) SetActivatableWidget(WidgetVar *gtk.Widget) {
253253
254254 }
255255
256-var xActionRowSetIconName func(uintptr, string)
256+var xActionRowSetIconName func(uintptr, uintptr)
257257
258258 // Sets the icon name for @self.
259-func (x *ActionRow) SetIconName(IconNameVar string) {
259+func (x *ActionRow) SetIconName(IconNameVar *string) {
260260
261- xActionRowSetIconName(x.GoPointer(), IconNameVar)
261+ xActionRowSetIconName(x.GoPointer(), core.NullableStringToPtr(IconNameVar))
262262
263263 }
264264
@@ -325,7 +325,7 @@ func (c *ActionRow) SetGoPointer(ptr uintptr) {
325325 func (x *ActionRow) SetPropertyIconName(value string) {
326326 var v gobject.Value
327327 v.Init(gobject.TypeStringVal)
328- v.SetString(value)
328+ v.SetString(&value)
329329 x.SetProperty("icon-name", &v)
330330 }
331331
@@ -345,7 +345,7 @@ func (x *ActionRow) GetPropertyIconName() string {
345345 func (x *ActionRow) SetPropertySubtitle(value string) {
346346 var v gobject.Value
347347 v.Init(gobject.TypeStringVal)
348- v.SetString(value)
348+ v.SetString(&value)
349349 x.SetProperty("subtitle", &v)
350350 }
351351
@@ -740,9 +740,9 @@ func (x *ActionRow) GetActionTargetValue() *glib.Variant {
740740 // containing [class@ApplicationWindow] or its associated [class@Application],
741741 // respectively. This is the same form used for actions in the [class@Gio.Menu]
742742 // associated with the window.
743-func (x *ActionRow) SetActionName(ActionNameVar string) {
743+func (x *ActionRow) SetActionName(ActionNameVar *string) {
744744
745- gtk.XGtkActionableSetActionName(x.GoPointer(), ActionNameVar)
745+ gtk.XGtkActionableSetActionName(x.GoPointer(), core.NullableStringToPtr(ActionNameVar))
746746
747747 }
748748
M v4/adw/adw-alert-dialog.go +52 -14
@@ -2,6 +2,7 @@
22 package adw
33
44 import (
5+ "fmt"
56 "structs"
67 "unsafe"
78
@@ -232,7 +233,7 @@ func AlertDialogNewFromInternalPtr(ptr uintptr) *AlertDialog {
232233 return cls
233234 }
234235
235-var xNewAlertDialog func(string, string) uintptr
236+var xNewAlertDialog func(uintptr, uintptr) uintptr
236237
237238 // Creates a new `AdwAlertDialog`.
238239 //
@@ -250,10 +251,10 @@ var xNewAlertDialog func(string, string) uintptr
250251 // filename);
251252 //
252253 // ```
253-func NewAlertDialog(HeadingVar string, BodyVar string) *AlertDialog {
254+func NewAlertDialog(HeadingVar *string, BodyVar *string) *AlertDialog {
254255 var cls *AlertDialog
255256
256- cret := xNewAlertDialog(HeadingVar, BodyVar)
257+ cret := xNewAlertDialog(core.NullableStringToPtr(HeadingVar), core.NullableStringToPtr(BodyVar))
257258
258259 if cret == 0 {
259260 return nil
@@ -321,7 +322,22 @@ var xAlertDialogChoose func(uintptr, uintptr, uintptr, uintptr, uintptr)
321322 // will be shown within it. Otherwise, it will be a separate window.
322323 func (x *AlertDialog) Choose(ParentVar *gtk.Widget, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) {
323324
324- xAlertDialogChoose(x.GoPointer(), ParentVar.GoPointer(), CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
325+ var CallbackVarRef uintptr
326+ if CallbackVar != nil {
327+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
328+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
329+ CallbackVarRef = cbRefPtr
330+ } else {
331+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
332+ cbFn := *CallbackVar
333+ cbFn(arg0, arg1, arg2)
334+ }
335+ CallbackVarRef = purego.NewCallback(fcb)
336+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
337+ }
338+ }
339+
340+ xAlertDialogChoose(x.GoPointer(), ParentVar.GoPointer(), CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
325341
326342 }
327343
@@ -557,7 +573,7 @@ func (x *AlertDialog) SetCloseResponse(ResponseVar string) {
557573
558574 }
559575
560-var xAlertDialogSetDefaultResponse func(uintptr, string)
576+var xAlertDialogSetDefaultResponse func(uintptr, uintptr)
561577
562578 // Sets the ID of the default response of @self.
563579 //
@@ -568,9 +584,9 @@ var xAlertDialogSetDefaultResponse func(uintptr, string)
568584 // will be focused by default.
569585 //
570586 // See [property@Dialog:default-widget].
571-func (x *AlertDialog) SetDefaultResponse(ResponseVar string) {
587+func (x *AlertDialog) SetDefaultResponse(ResponseVar *string) {
572588
573- xAlertDialogSetDefaultResponse(x.GoPointer(), ResponseVar)
589+ xAlertDialogSetDefaultResponse(x.GoPointer(), core.NullableStringToPtr(ResponseVar))
574590
575591 }
576592
@@ -585,12 +601,12 @@ func (x *AlertDialog) SetExtraChild(ChildVar *gtk.Widget) {
585601
586602 }
587603
588-var xAlertDialogSetHeading func(uintptr, string)
604+var xAlertDialogSetHeading func(uintptr, uintptr)
589605
590606 // Sets the heading of @self.
591-func (x *AlertDialog) SetHeading(HeadingVar string) {
607+func (x *AlertDialog) SetHeading(HeadingVar *string) {
592608
593- xAlertDialogSetHeading(x.GoPointer(), HeadingVar)
609+ xAlertDialogSetHeading(x.GoPointer(), core.NullableStringToPtr(HeadingVar))
594610
595611 }
596612
@@ -690,7 +706,7 @@ func (c *AlertDialog) SetGoPointer(ptr uintptr) {
690706 func (x *AlertDialog) SetPropertyBody(value string) {
691707 var v gobject.Value
692708 v.Init(gobject.TypeStringVal)
693- v.SetString(value)
709+ v.SetString(&value)
694710 x.SetProperty("body", &v)
695711 }
696712
@@ -735,7 +751,7 @@ func (x *AlertDialog) GetPropertyBodyUseMarkup() bool {
735751 func (x *AlertDialog) SetPropertyCloseResponse(value string) {
736752 var v gobject.Value
737753 v.Init(gobject.TypeStringVal)
738- v.SetString(value)
754+ v.SetString(&value)
739755 x.SetProperty("close-response", &v)
740756 }
741757
@@ -767,7 +783,7 @@ func (x *AlertDialog) GetPropertyCloseResponse() string {
767783 func (x *AlertDialog) SetPropertyDefaultResponse(value string) {
768784 var v gobject.Value
769785 v.Init(gobject.TypeStringVal)
770- v.SetString(value)
786+ v.SetString(&value)
771787 x.SetProperty("default-response", &v)
772788 }
773789
@@ -792,7 +808,7 @@ func (x *AlertDialog) GetPropertyDefaultResponse() string {
792808 func (x *AlertDialog) SetPropertyHeading(value string) {
793809 var v gobject.Value
794810 v.Init(gobject.TypeStringVal)
795- v.SetString(value)
811+ v.SetString(&value)
796812 x.SetProperty("heading", &v)
797813 }
798814
@@ -875,6 +891,28 @@ func (x *AlertDialog) ConnectResponse(cb *func(AlertDialog, string)) uint32 {
875891 return gobject.SignalConnect(x.GoPointer(), "response", cbRefPtr)
876892 }
877893
894+// ConnectResponseWithDetail connects to the "response" signal with a detail string.
895+// The detail is appended as "response::<detail>".
896+func (x *AlertDialog) ConnectResponseWithDetail(detail string, cb *func(AlertDialog, string)) uint32 {
897+ cbPtr := uintptr(unsafe.Pointer(cb))
898+ signalName := fmt.Sprintf("response::%s", detail)
899+ if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
900+ return gobject.SignalConnect(x.GoPointer(), signalName, cbRefPtr)
901+ }
902+
903+ fcb := func(clsPtr uintptr, ResponseVarp string) {
904+ fa := AlertDialog{}
905+ fa.Ptr = clsPtr
906+ cbFn := *cb
907+
908+ cbFn(fa, ResponseVarp)
909+
910+ }
911+ cbRefPtr := purego.NewCallback(fcb)
912+ glib.SaveCallback(cbPtr, cbRefPtr)
913+ return gobject.SignalConnect(x.GoPointer(), signalName, cbRefPtr)
914+}
915+
878916 // Requests the user's screen reader to announce the given message.
879917 //
880918 // This kind of notification is useful for messages that
M v4/adw/adw-animation-target.go +31 -1
@@ -92,7 +92,37 @@ var xNewCallbackAnimationTarget func(uintptr, uintptr, uintptr) uintptr
9292 func NewCallbackAnimationTarget(CallbackVar *AnimationTargetFunc, UserDataVar uintptr, DestroyVar *glib.DestroyNotify) *CallbackAnimationTarget {
9393 var cls *CallbackAnimationTarget
9494
95- cret := xNewCallbackAnimationTarget(glib.NewCallback(CallbackVar), UserDataVar, glib.NewCallback(DestroyVar))
95+ var CallbackVarRef uintptr
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)
107+ }
108+ }
109+
110+ var DestroyVarRef uintptr
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)
122+ }
123+ }
124+
125+ cret := xNewCallbackAnimationTarget(CallbackVarRef, UserDataVar, DestroyVarRef)
96126
97127 if cret == 0 {
98128 return nil
M v4/adw/adw-application.go +3 -3
@@ -86,7 +86,7 @@ func ApplicationNewFromInternalPtr(ptr uintptr) *Application {
8686 return cls
8787 }
8888
89-var xNewApplication func(string, gio.ApplicationFlags) uintptr
89+var xNewApplication func(uintptr, gio.ApplicationFlags) uintptr
9090
9191 // Creates a new `AdwApplication`.
9292 //
@@ -95,10 +95,10 @@ var xNewApplication func(string, gio.ApplicationFlags) uintptr
9595 //
9696 // If no application ID is given then some features (most notably application
9797 // uniqueness) will be disabled.
98-func NewApplication(ApplicationIdVar string, FlagsVar gio.ApplicationFlags) *Application {
98+func NewApplication(ApplicationIdVar *string, FlagsVar gio.ApplicationFlags) *Application {
9999 var cls *Application
100100
101- cret := xNewApplication(ApplicationIdVar, FlagsVar)
101+ cret := xNewApplication(core.NullableStringToPtr(ApplicationIdVar), FlagsVar)
102102
103103 if cret == 0 {
104104 return nil
M v4/adw/adw-avatar.go +11 -11
@@ -68,13 +68,13 @@ func AvatarNewFromInternalPtr(ptr uintptr) *Avatar {
6868 return cls
6969 }
7070
71-var xNewAvatar func(int, string, bool) uintptr
71+var xNewAvatar func(int, uintptr, bool) uintptr
7272
7373 // Creates a new `AdwAvatar`.
74-func NewAvatar(SizeVar int, TextVar string, ShowInitialsVar bool) *Avatar {
74+func NewAvatar(SizeVar int, TextVar *string, ShowInitialsVar bool) *Avatar {
7575 var cls *Avatar
7676
77- cret := xNewAvatar(SizeVar, TextVar, ShowInitialsVar)
77+ cret := xNewAvatar(SizeVar, core.NullableStringToPtr(TextVar), ShowInitialsVar)
7878
7979 if cret == 0 {
8080 return nil
@@ -167,14 +167,14 @@ func (x *Avatar) SetCustomImage(CustomImageVar gdk.Paintable) {
167167
168168 }
169169
170-var xAvatarSetIconName func(uintptr, string)
170+var xAvatarSetIconName func(uintptr, uintptr)
171171
172172 // Sets the name of an icon to use as a fallback.
173173 //
174174 // If no name is set, `avatar-default-symbolic` will be used.
175-func (x *Avatar) SetIconName(IconNameVar string) {
175+func (x *Avatar) SetIconName(IconNameVar *string) {
176176
177- xAvatarSetIconName(x.GoPointer(), IconNameVar)
177+ xAvatarSetIconName(x.GoPointer(), core.NullableStringToPtr(IconNameVar))
178178
179179 }
180180
@@ -198,15 +198,15 @@ func (x *Avatar) SetSize(SizeVar int) {
198198
199199 }
200200
201-var xAvatarSetText func(uintptr, string)
201+var xAvatarSetText func(uintptr, uintptr)
202202
203203 // Sets the text used to generate the fallback initials and color.
204204 //
205205 // It's only used to generate the color if [property@Avatar:show-initials] is
206206 // `FALSE`.
207-func (x *Avatar) SetText(TextVar string) {
207+func (x *Avatar) SetText(TextVar *string) {
208208
209- xAvatarSetText(x.GoPointer(), TextVar)
209+ xAvatarSetText(x.GoPointer(), core.NullableStringToPtr(TextVar))
210210
211211 }
212212
@@ -228,7 +228,7 @@ func (c *Avatar) SetGoPointer(ptr uintptr) {
228228 func (x *Avatar) SetPropertyIconName(value string) {
229229 var v gobject.Value
230230 v.Init(gobject.TypeStringVal)
231- v.SetString(value)
231+ v.SetString(&value)
232232 x.SetProperty("icon-name", &v)
233233 }
234234
@@ -288,7 +288,7 @@ func (x *Avatar) GetPropertySize() int {
288288 func (x *Avatar) SetPropertyText(value string) {
289289 var v gobject.Value
290290 v.Init(gobject.TypeStringVal)
291- v.SetString(value)
291+ v.SetString(&value)
292292 x.SetProperty("text", &v)
293293 }
294294
M v4/adw/adw-banner.go +7 -7
@@ -154,7 +154,7 @@ func (x *Banner) GetUseMarkup() bool {
154154 return cret
155155 }
156156
157-var xBannerSetButtonLabel func(uintptr, string)
157+var xBannerSetButtonLabel func(uintptr, uintptr)
158158
159159 // Sets the button label for @self.
160160 //
@@ -162,9 +162,9 @@ var xBannerSetButtonLabel func(uintptr, string)
162162 //
163163 // The button can be used with a `GAction`, or with the
164164 // [signal@Banner::button-clicked] signal.
165-func (x *Banner) SetButtonLabel(LabelVar string) {
165+func (x *Banner) SetButtonLabel(LabelVar *string) {
166166
167- xBannerSetButtonLabel(x.GoPointer(), LabelVar)
167+ xBannerSetButtonLabel(x.GoPointer(), core.NullableStringToPtr(LabelVar))
168168
169169 }
170170
@@ -239,7 +239,7 @@ func (c *Banner) SetGoPointer(ptr uintptr) {
239239 func (x *Banner) SetPropertyButtonLabel(value string) {
240240 var v gobject.Value
241241 v.Init(gobject.TypeStringVal)
242- v.SetString(value)
242+ v.SetString(&value)
243243 x.SetProperty("button-label", &v)
244244 }
245245
@@ -280,7 +280,7 @@ func (x *Banner) GetPropertyRevealed() bool {
280280 func (x *Banner) SetPropertyTitle(value string) {
281281 var v gobject.Value
282282 v.Init(gobject.TypeStringVal)
283- v.SetString(value)
283+ v.SetString(&value)
284284 x.SetProperty("title", &v)
285285 }
286286
@@ -632,9 +632,9 @@ func (x *Banner) GetActionTargetValue() *glib.Variant {
632632 // containing [class@ApplicationWindow] or its associated [class@Application],
633633 // respectively. This is the same form used for actions in the [class@Gio.Menu]
634634 // associated with the window.
635-func (x *Banner) SetActionName(ActionNameVar string) {
635+func (x *Banner) SetActionName(ActionNameVar *string) {
636636
637- gtk.XGtkActionableSetActionName(x.GoPointer(), ActionNameVar)
637+ gtk.XGtkActionableSetActionName(x.GoPointer(), core.NullableStringToPtr(ActionNameVar))
638638
639639 }
640640
M v4/adw/adw-button-content.go +2 -2
@@ -233,7 +233,7 @@ func (x *ButtonContent) GetPropertyCanShrink() bool {
233233 func (x *ButtonContent) SetPropertyIconName(value string) {
234234 var v gobject.Value
235235 v.Init(gobject.TypeStringVal)
236- v.SetString(value)
236+ v.SetString(&value)
237237 x.SetProperty("icon-name", &v)
238238 }
239239
@@ -252,7 +252,7 @@ func (x *ButtonContent) GetPropertyIconName() string {
252252 func (x *ButtonContent) SetPropertyLabel(value string) {
253253 var v gobject.Value
254254 v.Init(gobject.TypeStringVal)
255- v.SetString(value)
255+ v.SetString(&value)
256256 x.SetProperty("label", &v)
257257 }
258258
M v4/adw/adw-button-row.go +10 -10
@@ -124,21 +124,21 @@ func (x *ButtonRow) GetStartIconName() string {
124124 return cret
125125 }
126126
127-var xButtonRowSetEndIconName func(uintptr, string)
127+var xButtonRowSetEndIconName func(uintptr, uintptr)
128128
129129 // Sets the end icon name for @self.
130-func (x *ButtonRow) SetEndIconName(IconNameVar string) {
130+func (x *ButtonRow) SetEndIconName(IconNameVar *string) {
131131
132- xButtonRowSetEndIconName(x.GoPointer(), IconNameVar)
132+ xButtonRowSetEndIconName(x.GoPointer(), core.NullableStringToPtr(IconNameVar))
133133
134134 }
135135
136-var xButtonRowSetStartIconName func(uintptr, string)
136+var xButtonRowSetStartIconName func(uintptr, uintptr)
137137
138138 // Sets the start icon name for @self.
139-func (x *ButtonRow) SetStartIconName(IconNameVar string) {
139+func (x *ButtonRow) SetStartIconName(IconNameVar *string) {
140140
141- xButtonRowSetStartIconName(x.GoPointer(), IconNameVar)
141+ xButtonRowSetStartIconName(x.GoPointer(), core.NullableStringToPtr(IconNameVar))
142142
143143 }
144144
@@ -158,7 +158,7 @@ func (c *ButtonRow) SetGoPointer(ptr uintptr) {
158158 func (x *ButtonRow) SetPropertyEndIconName(value string) {
159159 var v gobject.Value
160160 v.Init(gobject.TypeStringVal)
161- v.SetString(value)
161+ v.SetString(&value)
162162 x.SetProperty("end-icon-name", &v)
163163 }
164164
@@ -175,7 +175,7 @@ func (x *ButtonRow) GetPropertyEndIconName() string {
175175 func (x *ButtonRow) SetPropertyStartIconName(value string) {
176176 var v gobject.Value
177177 v.Init(gobject.TypeStringVal)
178- v.SetString(value)
178+ v.SetString(&value)
179179 x.SetProperty("start-icon-name", &v)
180180 }
181181
@@ -502,9 +502,9 @@ func (x *ButtonRow) GetActionTargetValue() *glib.Variant {
502502 // containing [class@ApplicationWindow] or its associated [class@Application],
503503 // respectively. This is the same form used for actions in the [class@Gio.Menu]
504504 // associated with the window.
505-func (x *ButtonRow) SetActionName(ActionNameVar string) {
505+func (x *ButtonRow) SetActionName(ActionNameVar *string) {
506506
507- gtk.XGtkActionableSetActionName(x.GoPointer(), ActionNameVar)
507+ gtk.XGtkActionableSetActionName(x.GoPointer(), core.NullableStringToPtr(ActionNameVar))
508508
509509 }
510510
M v4/adw/adw-combo-row.go +2 -2
@@ -747,9 +747,9 @@ func (x *ComboRow) GetActionTargetValue() *glib.Variant {
747747 // containing [class@ApplicationWindow] or its associated [class@Application],
748748 // respectively. This is the same form used for actions in the [class@Gio.Menu]
749749 // associated with the window.
750-func (x *ComboRow) SetActionName(ActionNameVar string) {
750+func (x *ComboRow) SetActionName(ActionNameVar *string) {
751751
752- gtk.XGtkActionableSetActionName(x.GoPointer(), ActionNameVar)
752+ gtk.XGtkActionableSetActionName(x.GoPointer(), core.NullableStringToPtr(ActionNameVar))
753753
754754 }
755755
M v4/adw/adw-dialog.go +1 -1
@@ -605,7 +605,7 @@ func (x *Dialog) GetPropertyFollowsContentSize() bool {
605605 func (x *Dialog) SetPropertyTitle(value string) {
606606 var v gobject.Value
607607 v.Init(gobject.TypeStringVal)
608- v.SetString(value)
608+ v.SetString(&value)
609609 x.SetProperty("title", &v)
610610 }
611611
M v4/adw/adw-entry-row.go +2 -2
@@ -752,9 +752,9 @@ func (x *EntryRow) GetActionTargetValue() *glib.Variant {
752752 // containing [class@ApplicationWindow] or its associated [class@Application],
753753 // respectively. This is the same form used for actions in the [class@Gio.Menu]
754754 // associated with the window.
755-func (x *EntryRow) SetActionName(ActionNameVar string) {
755+func (x *EntryRow) SetActionName(ActionNameVar *string) {
756756
757- gtk.XGtkActionableSetActionName(x.GoPointer(), ActionNameVar)
757+ gtk.XGtkActionableSetActionName(x.GoPointer(), core.NullableStringToPtr(ActionNameVar))
758758
759759 }
760760
M v4/adw/adw-expander-row.go +7 -7
@@ -227,12 +227,12 @@ func (x *ExpanderRow) SetExpanded(ExpandedVar bool) {
227227
228228 }
229229
230-var xExpanderRowSetIconName func(uintptr, string)
230+var xExpanderRowSetIconName func(uintptr, uintptr)
231231
232232 // Sets the icon name for @self.
233-func (x *ExpanderRow) SetIconName(IconNameVar string) {
233+func (x *ExpanderRow) SetIconName(IconNameVar *string) {
234234
235- xExpanderRowSetIconName(x.GoPointer(), IconNameVar)
235+ xExpanderRowSetIconName(x.GoPointer(), core.NullableStringToPtr(IconNameVar))
236236
237237 }
238238
@@ -331,7 +331,7 @@ func (x *ExpanderRow) GetPropertyExpanded() bool {
331331 func (x *ExpanderRow) SetPropertyIconName(value string) {
332332 var v gobject.Value
333333 v.Init(gobject.TypeStringVal)
334- v.SetString(value)
334+ v.SetString(&value)
335335 x.SetProperty("icon-name", &v)
336336 }
337337
@@ -368,7 +368,7 @@ func (x *ExpanderRow) GetPropertyShowEnableSwitch() bool {
368368 func (x *ExpanderRow) SetPropertySubtitle(value string) {
369369 var v gobject.Value
370370 v.Init(gobject.TypeStringVal)
371- v.SetString(value)
371+ v.SetString(&value)
372372 x.SetProperty("subtitle", &v)
373373 }
374374
@@ -722,9 +722,9 @@ func (x *ExpanderRow) GetActionTargetValue() *glib.Variant {
722722 // containing [class@ApplicationWindow] or its associated [class@Application],
723723 // respectively. This is the same form used for actions in the [class@Gio.Menu]
724724 // associated with the window.
725-func (x *ExpanderRow) SetActionName(ActionNameVar string) {
725+func (x *ExpanderRow) SetActionName(ActionNameVar *string) {
726726
727- gtk.XGtkActionableSetActionName(x.GoPointer(), ActionNameVar)
727+ gtk.XGtkActionableSetActionName(x.GoPointer(), core.NullableStringToPtr(ActionNameVar))
728728
729729 }
730730
M v4/adw/adw-header-bar.go +4 -4
@@ -280,7 +280,7 @@ func (x *HeaderBar) SetCenteringPolicy(CenteringPolicyVar CenteringPolicy) {
280280
281281 }
282282
283-var xHeaderBarSetDecorationLayout func(uintptr, string)
283+var xHeaderBarSetDecorationLayout func(uintptr, uintptr)
284284
285285 // Sets the decoration layout for @self.
286286 //
@@ -294,9 +294,9 @@ var xHeaderBarSetDecorationLayout func(uintptr, string)
294294 //
295295 // For example, “icon:minimize,maximize,close” specifies an icon at the start,
296296 // and minimize, maximize and close buttons at the end.
297-func (x *HeaderBar) SetDecorationLayout(LayoutVar string) {
297+func (x *HeaderBar) SetDecorationLayout(LayoutVar *string) {
298298
299- xHeaderBarSetDecorationLayout(x.GoPointer(), LayoutVar)
299+ xHeaderBarSetDecorationLayout(x.GoPointer(), core.NullableStringToPtr(LayoutVar))
300300
301301 }
302302
@@ -404,7 +404,7 @@ func (c *HeaderBar) SetGoPointer(ptr uintptr) {
404404 func (x *HeaderBar) SetPropertyDecorationLayout(value string) {
405405 var v gobject.Value
406406 v.Init(gobject.TypeStringVal)
407- v.SetString(value)
407+ v.SetString(&value)
408408 x.SetProperty("decoration-layout", &v)
409409 }
410410
M v4/adw/adw-layout-slot.go +1 -1
@@ -88,7 +88,7 @@ func (c *LayoutSlot) SetGoPointer(ptr uintptr) {
8888 func (x *LayoutSlot) SetPropertyId(value string) {
8989 var v gobject.Value
9090 v.Init(gobject.TypeStringVal)
91- v.SetString(value)
91+ v.SetString(&value)
9292 x.SetProperty("id", &v)
9393 }
9494
M v4/adw/adw-layout.go +4 -4
@@ -81,12 +81,12 @@ func (x *Layout) GetName() string {
8181 return cret
8282 }
8383
84-var xLayoutSetName func(uintptr, string)
84+var xLayoutSetName func(uintptr, uintptr)
8585
8686 // Sets the name of the layout.
87-func (x *Layout) SetName(NameVar string) {
87+func (x *Layout) SetName(NameVar *string) {
8888
89- xLayoutSetName(x.GoPointer(), NameVar)
89+ xLayoutSetName(x.GoPointer(), core.NullableStringToPtr(NameVar))
9090
9191 }
9292
@@ -106,7 +106,7 @@ func (c *Layout) SetGoPointer(ptr uintptr) {
106106 func (x *Layout) SetPropertyName(value string) {
107107 var v gobject.Value
108108 v.Init(gobject.TypeStringVal)
109- v.SetString(value)
109+ v.SetString(&value)
110110 x.SetProperty("name", &v)
111111 }
112112
M v4/adw/adw-leaflet.go +5 -5
@@ -783,7 +783,7 @@ func (x *Leaflet) GetPropertyModeTransitionDuration() uint {
783783 func (x *Leaflet) SetPropertyVisibleChildName(value string) {
784784 var v gobject.Value
785785 v.Init(gobject.TypeStringVal)
786- v.SetString(value)
786+ v.SetString(&value)
787787 x.SetProperty("visible-child-name", &v)
788788 }
789789
@@ -1189,12 +1189,12 @@ func (x *LeafletPage) GetNavigatable() bool {
11891189 return cret
11901190 }
11911191
1192-var xLeafletPageSetName func(uintptr, string)
1192+var xLeafletPageSetName func(uintptr, uintptr)
11931193
11941194 // Sets the name of the @self.
1195-func (x *LeafletPage) SetName(NameVar string) {
1195+func (x *LeafletPage) SetName(NameVar *string) {
11961196
1197- xLeafletPageSetName(x.GoPointer(), NameVar)
1197+ xLeafletPageSetName(x.GoPointer(), core.NullableStringToPtr(NameVar))
11981198
11991199 }
12001200
@@ -1228,7 +1228,7 @@ func (c *LeafletPage) SetGoPointer(ptr uintptr) {
12281228 func (x *LeafletPage) SetPropertyName(value string) {
12291229 var v gobject.Value
12301230 v.Init(gobject.TypeStringVal)
1231- v.SetString(value)
1231+ v.SetString(&value)
12321232 x.SetProperty("name", &v)
12331233 }
12341234
M v4/adw/adw-message-dialog.go +52 -14
@@ -2,6 +2,7 @@
22 package adw
33
44 import (
5+ "fmt"
56 "structs"
67 "unsafe"
78
@@ -208,7 +209,7 @@ func MessageDialogNewFromInternalPtr(ptr uintptr) *MessageDialog {
208209 return cls
209210 }
210211
211-var xNewMessageDialog func(uintptr, string, string) uintptr
212+var xNewMessageDialog func(uintptr, uintptr, uintptr) uintptr
212213
213214 // Creates a new `AdwMessageDialog`.
214215 //
@@ -226,10 +227,10 @@ var xNewMessageDialog func(uintptr, string, string) uintptr
226227 // filename);
227228 //
228229 // ```
229-func NewMessageDialog(ParentVar *gtk.Window, HeadingVar string, BodyVar string) *MessageDialog {
230+func NewMessageDialog(ParentVar *gtk.Window, HeadingVar *string, BodyVar *string) *MessageDialog {
230231 var cls *MessageDialog
231232
232- cret := xNewMessageDialog(ParentVar.GoPointer(), HeadingVar, BodyVar)
233+ cret := xNewMessageDialog(ParentVar.GoPointer(), core.NullableStringToPtr(HeadingVar), core.NullableStringToPtr(BodyVar))
233234
234235 if cret == 0 {
235236 return nil
@@ -294,7 +295,22 @@ var xMessageDialogChoose func(uintptr, uintptr, uintptr, uintptr)
294295 // This function shows @self to the user.
295296 func (x *MessageDialog) Choose(CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) {
296297
297- xMessageDialogChoose(x.GoPointer(), CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
298+ var CallbackVarRef uintptr
299+ if CallbackVar != nil {
300+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
301+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
302+ CallbackVarRef = cbRefPtr
303+ } else {
304+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
305+ cbFn := *CallbackVar
306+ cbFn(arg0, arg1, arg2)
307+ }
308+ CallbackVarRef = purego.NewCallback(fcb)
309+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
310+ }
311+ }
312+
313+ xMessageDialogChoose(x.GoPointer(), CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
298314
299315 }
300316
@@ -532,7 +548,7 @@ func (x *MessageDialog) SetCloseResponse(ResponseVar string) {
532548
533549 }
534550
535-var xMessageDialogSetDefaultResponse func(uintptr, string)
551+var xMessageDialogSetDefaultResponse func(uintptr, uintptr)
536552
537553 // Sets the ID of the default response of @self.
538554 //
@@ -543,9 +559,9 @@ var xMessageDialogSetDefaultResponse func(uintptr, string)
543559 // will be focused by default.
544560 //
545561 // See [property@Gtk.Window:default-widget].
546-func (x *MessageDialog) SetDefaultResponse(ResponseVar string) {
562+func (x *MessageDialog) SetDefaultResponse(ResponseVar *string) {
547563
548- xMessageDialogSetDefaultResponse(x.GoPointer(), ResponseVar)
564+ xMessageDialogSetDefaultResponse(x.GoPointer(), core.NullableStringToPtr(ResponseVar))
549565
550566 }
551567
@@ -560,12 +576,12 @@ func (x *MessageDialog) SetExtraChild(ChildVar *gtk.Widget) {
560576
561577 }
562578
563-var xMessageDialogSetHeading func(uintptr, string)
579+var xMessageDialogSetHeading func(uintptr, uintptr)
564580
565581 // Sets the heading of @self.
566-func (x *MessageDialog) SetHeading(HeadingVar string) {
582+func (x *MessageDialog) SetHeading(HeadingVar *string) {
567583
568- xMessageDialogSetHeading(x.GoPointer(), HeadingVar)
584+ xMessageDialogSetHeading(x.GoPointer(), core.NullableStringToPtr(HeadingVar))
569585
570586 }
571587
@@ -653,7 +669,7 @@ func (c *MessageDialog) SetGoPointer(ptr uintptr) {
653669 func (x *MessageDialog) SetPropertyBody(value string) {
654670 var v gobject.Value
655671 v.Init(gobject.TypeStringVal)
656- v.SetString(value)
672+ v.SetString(&value)
657673 x.SetProperty("body", &v)
658674 }
659675
@@ -698,7 +714,7 @@ func (x *MessageDialog) GetPropertyBodyUseMarkup() bool {
698714 func (x *MessageDialog) SetPropertyCloseResponse(value string) {
699715 var v gobject.Value
700716 v.Init(gobject.TypeStringVal)
701- v.SetString(value)
717+ v.SetString(&value)
702718 x.SetProperty("close-response", &v)
703719 }
704720
@@ -730,7 +746,7 @@ func (x *MessageDialog) GetPropertyCloseResponse() string {
730746 func (x *MessageDialog) SetPropertyDefaultResponse(value string) {
731747 var v gobject.Value
732748 v.Init(gobject.TypeStringVal)
733- v.SetString(value)
749+ v.SetString(&value)
734750 x.SetProperty("default-response", &v)
735751 }
736752
@@ -755,7 +771,7 @@ func (x *MessageDialog) GetPropertyDefaultResponse() string {
755771 func (x *MessageDialog) SetPropertyHeading(value string) {
756772 var v gobject.Value
757773 v.Init(gobject.TypeStringVal)
758- v.SetString(value)
774+ v.SetString(&value)
759775 x.SetProperty("heading", &v)
760776 }
761777
@@ -815,6 +831,28 @@ func (x *MessageDialog) ConnectResponse(cb *func(MessageDialog, string)) uint32
815831 return gobject.SignalConnect(x.GoPointer(), "response", cbRefPtr)
816832 }
817833
834+// ConnectResponseWithDetail connects to the "response" signal with a detail string.
835+// The detail is appended as "response::<detail>".
836+func (x *MessageDialog) ConnectResponseWithDetail(detail string, cb *func(MessageDialog, string)) uint32 {
837+ cbPtr := uintptr(unsafe.Pointer(cb))
838+ signalName := fmt.Sprintf("response::%s", detail)
839+ if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
840+ return gobject.SignalConnect(x.GoPointer(), signalName, cbRefPtr)
841+ }
842+
843+ fcb := func(clsPtr uintptr, ResponseVarp string) {
844+ fa := MessageDialog{}
845+ fa.Ptr = clsPtr
846+ cbFn := *cb
847+
848+ cbFn(fa, ResponseVarp)
849+
850+ }
851+ cbRefPtr := purego.NewCallback(fcb)
852+ glib.SaveCallback(cbPtr, cbRefPtr)
853+ return gobject.SignalConnect(x.GoPointer(), signalName, cbRefPtr)
854+}
855+
818856 // Requests the user's screen reader to announce the given message.
819857 //
820858 // This kind of notification is useful for messages that
M v4/adw/adw-multi-layout-view.go +1 -1
@@ -266,7 +266,7 @@ func (c *MultiLayoutView) SetGoPointer(ptr uintptr) {
266266 func (x *MultiLayoutView) SetPropertyLayoutName(value string) {
267267 var v gobject.Value
268268 v.Init(gobject.TypeStringVal)
269- v.SetString(value)
269+ v.SetString(&value)
270270 x.SetProperty("layout-name", &v)
271271 }
272272
M v4/adw/adw-navigation-view.go +5 -5
@@ -284,7 +284,7 @@ func (x *NavigationPage) SetChild(ChildVar *gtk.Widget) {
284284
285285 }
286286
287-var xNavigationPageSetTag func(uintptr, string)
287+var xNavigationPageSetTag func(uintptr, uintptr)
288288
289289 // Sets the tag for @self.
290290 //
@@ -296,9 +296,9 @@ var xNavigationPageSetTag func(uintptr, string)
296296 // Tags must be unique within each [class@NavigationView].
297297 //
298298 // The tag also must be set to use the `navigation.push` action.
299-func (x *NavigationPage) SetTag(TagVar string) {
299+func (x *NavigationPage) SetTag(TagVar *string) {
300300
301- xNavigationPageSetTag(x.GoPointer(), TagVar)
301+ xNavigationPageSetTag(x.GoPointer(), core.NullableStringToPtr(TagVar))
302302
303303 }
304304
@@ -374,7 +374,7 @@ func (x *NavigationPage) GetPropertyCanPop() bool {
374374 func (x *NavigationPage) SetPropertyTag(value string) {
375375 var v gobject.Value
376376 v.Init(gobject.TypeStringVal)
377- v.SetString(value)
377+ v.SetString(&value)
378378 x.SetProperty("tag", &v)
379379 }
380380
@@ -403,7 +403,7 @@ func (x *NavigationPage) GetPropertyTag() string {
403403 func (x *NavigationPage) SetPropertyTitle(value string) {
404404 var v gobject.Value
405405 v.Init(gobject.TypeStringVal)
406- v.SetString(value)
406+ v.SetString(&value)
407407 x.SetProperty("title", &v)
408408 }
409409
M v4/adw/adw-password-entry-row.go +2 -2
@@ -383,9 +383,9 @@ func (x *PasswordEntryRow) GetActionTargetValue() *glib.Variant {
383383 // containing [class@ApplicationWindow] or its associated [class@Application],
384384 // respectively. This is the same form used for actions in the [class@Gio.Menu]
385385 // associated with the window.
386-func (x *PasswordEntryRow) SetActionName(ActionNameVar string) {
386+func (x *PasswordEntryRow) SetActionName(ActionNameVar *string) {
387387
388- gtk.XGtkActionableSetActionName(x.GoPointer(), ActionNameVar)
388+ gtk.XGtkActionableSetActionName(x.GoPointer(), core.NullableStringToPtr(ActionNameVar))
389389
390390 }
391391
M v4/adw/adw-preferences-dialog.go +1 -1
@@ -227,7 +227,7 @@ func (x *PreferencesDialog) GetPropertySearchEnabled() bool {
227227 func (x *PreferencesDialog) SetPropertyVisiblePageName(value string) {
228228 var v gobject.Value
229229 v.Init(gobject.TypeStringVal)
230- v.SetString(value)
230+ v.SetString(&value)
231231 x.SetProperty("visible-page-name", &v)
232232 }
233233
M v4/adw/adw-preferences-group.go +36 -6
@@ -113,7 +113,37 @@ var xPreferencesGroupBindModel func(uintptr, uintptr, uintptr, uintptr, uintptr)
113113 // See [method@Gtk.ListBox.bind_model].
114114 func (x *PreferencesGroup) BindModel(ModelVar gio.ListModel, CreateRowFuncVar *gtk.ListBoxCreateWidgetFunc, UserDataVar uintptr, UserDataFreeFuncVar *glib.DestroyNotify) {
115115
116- xPreferencesGroupBindModel(x.GoPointer(), ModelVar.GoPointer(), glib.NewCallbackNullable(CreateRowFuncVar), UserDataVar, glib.NewCallback(UserDataFreeFuncVar))
116+ var CreateRowFuncVarRef uintptr
117+ if CreateRowFuncVar != nil {
118+ CreateRowFuncVarPtr := uintptr(unsafe.Pointer(CreateRowFuncVar))
119+ if cbRefPtr, ok := glib.GetCallback(CreateRowFuncVarPtr); ok {
120+ CreateRowFuncVarRef = cbRefPtr
121+ } else {
122+ fcb := func(arg0 uintptr, arg1 uintptr) uintptr {
123+ cbFn := *CreateRowFuncVar
124+ return cbFn(arg0, arg1)
125+ }
126+ CreateRowFuncVarRef = purego.NewCallback(fcb)
127+ glib.SaveCallback(CreateRowFuncVarPtr, CreateRowFuncVarRef)
128+ }
129+ }
130+
131+ var UserDataFreeFuncVarRef uintptr
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)
143+ }
144+ }
145+
146+ xPreferencesGroupBindModel(x.GoPointer(), ModelVar.GoPointer(), CreateRowFuncVarRef, UserDataVar, UserDataFreeFuncVarRef)
117147
118148 }
119149
@@ -189,12 +219,12 @@ func (x *PreferencesGroup) Remove(ChildVar *gtk.Widget) {
189219
190220 }
191221
192-var xPreferencesGroupSetDescription func(uintptr, string)
222+var xPreferencesGroupSetDescription func(uintptr, uintptr)
193223
194224 // Sets the description for @self.
195-func (x *PreferencesGroup) SetDescription(DescriptionVar string) {
225+func (x *PreferencesGroup) SetDescription(DescriptionVar *string) {
196226
197- xPreferencesGroupSetDescription(x.GoPointer(), DescriptionVar)
227+ xPreferencesGroupSetDescription(x.GoPointer(), core.NullableStringToPtr(DescriptionVar))
198228
199229 }
200230
@@ -249,7 +279,7 @@ func (c *PreferencesGroup) SetGoPointer(ptr uintptr) {
249279 func (x *PreferencesGroup) SetPropertyDescription(value string) {
250280 var v gobject.Value
251281 v.Init(gobject.TypeStringVal)
252- v.SetString(value)
282+ v.SetString(&value)
253283 x.SetProperty("description", &v)
254284 }
255285
@@ -291,7 +321,7 @@ func (x *PreferencesGroup) GetPropertySeparateRows() bool {
291321 func (x *PreferencesGroup) SetPropertyTitle(value string) {
292322 var v gobject.Value
293323 v.Init(gobject.TypeStringVal)
294- v.SetString(value)
324+ v.SetString(&value)
295325 x.SetProperty("title", &v)
296326 }
297327
M v4/adw/adw-preferences-page.go +10 -10
@@ -234,21 +234,21 @@ func (x *PreferencesPage) SetDescriptionCentered(CenteredVar bool) {
234234
235235 }
236236
237-var xPreferencesPageSetIconName func(uintptr, string)
237+var xPreferencesPageSetIconName func(uintptr, uintptr)
238238
239239 // Sets the icon name for @self.
240-func (x *PreferencesPage) SetIconName(IconNameVar string) {
240+func (x *PreferencesPage) SetIconName(IconNameVar *string) {
241241
242- xPreferencesPageSetIconName(x.GoPointer(), IconNameVar)
242+ xPreferencesPageSetIconName(x.GoPointer(), core.NullableStringToPtr(IconNameVar))
243243
244244 }
245245
246-var xPreferencesPageSetName func(uintptr, string)
246+var xPreferencesPageSetName func(uintptr, uintptr)
247247
248248 // Sets the name of @self.
249-func (x *PreferencesPage) SetName(NameVar string) {
249+func (x *PreferencesPage) SetName(NameVar *string) {
250250
251- xPreferencesPageSetName(x.GoPointer(), NameVar)
251+ xPreferencesPageSetName(x.GoPointer(), core.NullableStringToPtr(NameVar))
252252
253253 }
254254
@@ -286,7 +286,7 @@ func (c *PreferencesPage) SetGoPointer(ptr uintptr) {
286286 func (x *PreferencesPage) SetPropertyDescription(value string) {
287287 var v gobject.Value
288288 v.Init(gobject.TypeStringVal)
289- v.SetString(value)
289+ v.SetString(&value)
290290 x.SetProperty("description", &v)
291291 }
292292
@@ -320,7 +320,7 @@ func (x *PreferencesPage) GetPropertyDescriptionCentered() bool {
320320 func (x *PreferencesPage) SetPropertyIconName(value string) {
321321 var v gobject.Value
322322 v.Init(gobject.TypeStringVal)
323- v.SetString(value)
323+ v.SetString(&value)
324324 x.SetProperty("icon-name", &v)
325325 }
326326
@@ -337,7 +337,7 @@ func (x *PreferencesPage) GetPropertyIconName() string {
337337 func (x *PreferencesPage) SetPropertyName(value string) {
338338 var v gobject.Value
339339 v.Init(gobject.TypeStringVal)
340- v.SetString(value)
340+ v.SetString(&value)
341341 x.SetProperty("name", &v)
342342 }
343343
@@ -354,7 +354,7 @@ func (x *PreferencesPage) GetPropertyName() string {
354354 func (x *PreferencesPage) SetPropertyTitle(value string) {
355355 var v gobject.Value
356356 v.Init(gobject.TypeStringVal)
357- v.SetString(value)
357+ v.SetString(&value)
358358 x.SetProperty("title", &v)
359359 }
360360
M v4/adw/adw-preferences-row.go +3 -3
@@ -167,7 +167,7 @@ func (c *PreferencesRow) SetGoPointer(ptr uintptr) {
167167 func (x *PreferencesRow) SetPropertyTitle(value string) {
168168 var v gobject.Value
169169 v.Init(gobject.TypeStringVal)
170- v.SetString(value)
170+ v.SetString(&value)
171171 x.SetProperty("title", &v)
172172 }
173173
@@ -540,9 +540,9 @@ func (x *PreferencesRow) GetActionTargetValue() *glib.Variant {
540540 // containing [class@ApplicationWindow] or its associated [class@Application],
541541 // respectively. This is the same form used for actions in the [class@Gio.Menu]
542542 // associated with the window.
543-func (x *PreferencesRow) SetActionName(ActionNameVar string) {
543+func (x *PreferencesRow) SetActionName(ActionNameVar *string) {
544544
545- gtk.XGtkActionableSetActionName(x.GoPointer(), ActionNameVar)
545+ gtk.XGtkActionableSetActionName(x.GoPointer(), core.NullableStringToPtr(ActionNameVar))
546546
547547 }
548548
M v4/adw/adw-preferences-window.go +1 -1
@@ -322,7 +322,7 @@ func (x *PreferencesWindow) GetPropertySearchEnabled() bool {
322322 func (x *PreferencesWindow) SetPropertyVisiblePageName(value string) {
323323 var v gobject.Value
324324 v.Init(gobject.TypeStringVal)
325- v.SetString(value)
325+ v.SetString(&value)
326326 x.SetProperty("visible-page-name", &v)
327327 }
328328
M v4/adw/adw-shortcut-label.go +2 -2
@@ -174,7 +174,7 @@ func (c *ShortcutLabel) SetGoPointer(ptr uintptr) {
174174 func (x *ShortcutLabel) SetPropertyAccelerator(value string) {
175175 var v gobject.Value
176176 v.Init(gobject.TypeStringVal)
177- v.SetString(value)
177+ v.SetString(&value)
178178 x.SetProperty("accelerator", &v)
179179 }
180180
@@ -191,7 +191,7 @@ func (x *ShortcutLabel) GetPropertyAccelerator() string {
191191 func (x *ShortcutLabel) SetPropertyDisabledText(value string) {
192192 var v gobject.Value
193193 v.Init(gobject.TypeStringVal)
194- v.SetString(value)
194+ v.SetString(&value)
195195 x.SetProperty("disabled-text", &v)
196196 }
197197
M v4/adw/adw-shortcuts-item.go +4 -4
@@ -199,7 +199,7 @@ func (c *ShortcutsItem) SetGoPointer(ptr uintptr) {
199199 func (x *ShortcutsItem) SetPropertyAccelerator(value string) {
200200 var v gobject.Value
201201 v.Init(gobject.TypeStringVal)
202- v.SetString(value)
202+ v.SetString(&value)
203203 x.SetProperty("accelerator", &v)
204204 }
205205
@@ -218,7 +218,7 @@ func (x *ShortcutsItem) GetPropertyAccelerator() string {
218218 func (x *ShortcutsItem) SetPropertyActionName(value string) {
219219 var v gobject.Value
220220 v.Init(gobject.TypeStringVal)
221- v.SetString(value)
221+ v.SetString(&value)
222222 x.SetProperty("action-name", &v)
223223 }
224224
@@ -235,7 +235,7 @@ func (x *ShortcutsItem) GetPropertyActionName() string {
235235 func (x *ShortcutsItem) SetPropertySubtitle(value string) {
236236 var v gobject.Value
237237 v.Init(gobject.TypeStringVal)
238- v.SetString(value)
238+ v.SetString(&value)
239239 x.SetProperty("subtitle", &v)
240240 }
241241
@@ -252,7 +252,7 @@ func (x *ShortcutsItem) GetPropertySubtitle() string {
252252 func (x *ShortcutsItem) SetPropertyTitle(value string) {
253253 var v gobject.Value
254254 v.Init(gobject.TypeStringVal)
255- v.SetString(value)
255+ v.SetString(&value)
256256 x.SetProperty("title", &v)
257257 }
258258
M v4/adw/adw-shortcuts-section.go +7 -7
@@ -50,13 +50,13 @@ func ShortcutsSectionNewFromInternalPtr(ptr uintptr) *ShortcutsSection {
5050 return cls
5151 }
5252
53-var xNewShortcutsSection func(string) uintptr
53+var xNewShortcutsSection func(uintptr) uintptr
5454
5555 // Creates a new `AdwShortcutsSection` with @title as its title if provided.
56-func NewShortcutsSection(TitleVar string) *ShortcutsSection {
56+func NewShortcutsSection(TitleVar *string) *ShortcutsSection {
5757 var cls *ShortcutsSection
5858
59- cret := xNewShortcutsSection(TitleVar)
59+ cret := xNewShortcutsSection(core.NullableStringToPtr(TitleVar))
6060
6161 if cret == 0 {
6262 return nil
@@ -84,12 +84,12 @@ func (x *ShortcutsSection) GetTitle() string {
8484 return cret
8585 }
8686
87-var xShortcutsSectionSetTitle func(uintptr, string)
87+var xShortcutsSectionSetTitle func(uintptr, uintptr)
8888
8989 // Sets the title of @self.
90-func (x *ShortcutsSection) SetTitle(TitleVar string) {
90+func (x *ShortcutsSection) SetTitle(TitleVar *string) {
9191
92- xShortcutsSectionSetTitle(x.GoPointer(), TitleVar)
92+ xShortcutsSectionSetTitle(x.GoPointer(), core.NullableStringToPtr(TitleVar))
9393
9494 }
9595
@@ -109,7 +109,7 @@ func (c *ShortcutsSection) SetGoPointer(ptr uintptr) {
109109 func (x *ShortcutsSection) SetPropertyTitle(value string) {
110110 var v gobject.Value
111111 v.Init(gobject.TypeStringVal)
112- v.SetString(value)
112+ v.SetString(&value)
113113 x.SetProperty("title", &v)
114114 }
115115
M v4/adw/adw-spin-row.go +2 -2
@@ -789,9 +789,9 @@ func (x *SpinRow) GetActionTargetValue() *glib.Variant {
789789 // containing [class@ApplicationWindow] or its associated [class@Application],
790790 // respectively. This is the same form used for actions in the [class@Gio.Menu]
791791 // associated with the window.
792-func (x *SpinRow) SetActionName(ActionNameVar string) {
792+func (x *SpinRow) SetActionName(ActionNameVar *string) {
793793
794- gtk.XGtkActionableSetActionName(x.GoPointer(), ActionNameVar)
794+ gtk.XGtkActionableSetActionName(x.GoPointer(), core.NullableStringToPtr(ActionNameVar))
795795
796796 }
797797
M v4/adw/adw-split-button.go +5 -5
@@ -396,7 +396,7 @@ func (x *SplitButton) GetPropertyCanShrink() bool {
396396 func (x *SplitButton) SetPropertyDropdownTooltip(value string) {
397397 var v gobject.Value
398398 v.Init(gobject.TypeStringVal)
399- v.SetString(value)
399+ v.SetString(&value)
400400 x.SetProperty("dropdown-tooltip", &v)
401401 }
402402
@@ -418,7 +418,7 @@ func (x *SplitButton) GetPropertyDropdownTooltip() string {
418418 func (x *SplitButton) SetPropertyIconName(value string) {
419419 var v gobject.Value
420420 v.Init(gobject.TypeStringVal)
421- v.SetString(value)
421+ v.SetString(&value)
422422 x.SetProperty("icon-name", &v)
423423 }
424424
@@ -441,7 +441,7 @@ func (x *SplitButton) GetPropertyIconName() string {
441441 func (x *SplitButton) SetPropertyLabel(value string) {
442442 var v gobject.Value
443443 v.Init(gobject.TypeStringVal)
444- v.SetString(value)
444+ v.SetString(&value)
445445 x.SetProperty("label", &v)
446446 }
447447
@@ -815,9 +815,9 @@ func (x *SplitButton) GetActionTargetValue() *glib.Variant {
815815 // containing [class@ApplicationWindow] or its associated [class@Application],
816816 // respectively. This is the same form used for actions in the [class@Gio.Menu]
817817 // associated with the window.
818-func (x *SplitButton) SetActionName(ActionNameVar string) {
818+func (x *SplitButton) SetActionName(ActionNameVar *string) {
819819
820- gtk.XGtkActionableSetActionName(x.GoPointer(), ActionNameVar)
820+ gtk.XGtkActionableSetActionName(x.GoPointer(), core.NullableStringToPtr(ActionNameVar))
821821
822822 }
823823
M v4/adw/adw-status-page.go +9 -9
@@ -159,25 +159,25 @@ func (x *StatusPage) SetChild(ChildVar *gtk.Widget) {
159159
160160 }
161161
162-var xStatusPageSetDescription func(uintptr, string)
162+var xStatusPageSetDescription func(uintptr, uintptr)
163163
164164 // Sets the description markup for @self.
165165 //
166166 // The description is displayed below the title. It is parsed as Pango markup.
167-func (x *StatusPage) SetDescription(DescriptionVar string) {
167+func (x *StatusPage) SetDescription(DescriptionVar *string) {
168168
169- xStatusPageSetDescription(x.GoPointer(), DescriptionVar)
169+ xStatusPageSetDescription(x.GoPointer(), core.NullableStringToPtr(DescriptionVar))
170170
171171 }
172172
173-var xStatusPageSetIconName func(uintptr, string)
173+var xStatusPageSetIconName func(uintptr, uintptr)
174174
175175 // Sets the icon name for @self.
176176 //
177177 // Changing this will set [property@StatusPage:paintable] to `NULL`.
178-func (x *StatusPage) SetIconName(IconNameVar string) {
178+func (x *StatusPage) SetIconName(IconNameVar *string) {
179179
180- xStatusPageSetIconName(x.GoPointer(), IconNameVar)
180+ xStatusPageSetIconName(x.GoPointer(), core.NullableStringToPtr(IconNameVar))
181181
182182 }
183183
@@ -219,7 +219,7 @@ func (c *StatusPage) SetGoPointer(ptr uintptr) {
219219 func (x *StatusPage) SetPropertyDescription(value string) {
220220 var v gobject.Value
221221 v.Init(gobject.TypeStringVal)
222- v.SetString(value)
222+ v.SetString(&value)
223223 x.SetProperty("description", &v)
224224 }
225225
@@ -238,7 +238,7 @@ func (x *StatusPage) GetPropertyDescription() string {
238238 func (x *StatusPage) SetPropertyIconName(value string) {
239239 var v gobject.Value
240240 v.Init(gobject.TypeStringVal)
241- v.SetString(value)
241+ v.SetString(&value)
242242 x.SetProperty("icon-name", &v)
243243 }
244244
@@ -259,7 +259,7 @@ func (x *StatusPage) GetPropertyIconName() string {
259259 func (x *StatusPage) SetPropertyTitle(value string) {
260260 var v gobject.Value
261261 v.Init(gobject.TypeStringVal)
262- v.SetString(value)
262+ v.SetString(&value)
263263 x.SetProperty("title", &v)
264264 }
265265
M v4/adw/adw-switch-row.go +2 -2
@@ -431,9 +431,9 @@ func (x *SwitchRow) GetActionTargetValue() *glib.Variant {
431431 // containing [class@ApplicationWindow] or its associated [class@Application],
432432 // respectively. This is the same form used for actions in the [class@Gio.Menu]
433433 // associated with the window.
434-func (x *SwitchRow) SetActionName(ActionNameVar string) {
434+func (x *SwitchRow) SetActionName(ActionNameVar *string) {
435435
436- gtk.XGtkActionableSetActionName(x.GoPointer(), ActionNameVar)
436+ gtk.XGtkActionableSetActionName(x.GoPointer(), core.NullableStringToPtr(ActionNameVar))
437437
438438 }
439439
M v4/adw/adw-tab-button.go +2 -2
@@ -463,9 +463,9 @@ func (x *TabButton) GetActionTargetValue() *glib.Variant {
463463 // containing [class@ApplicationWindow] or its associated [class@Application],
464464 // respectively. This is the same form used for actions in the [class@Gio.Menu]
465465 // associated with the window.
466-func (x *TabButton) SetActionName(ActionNameVar string) {
466+func (x *TabButton) SetActionName(ActionNameVar *string) {
467467
468- gtk.XGtkActionableSetActionName(x.GoPointer(), ActionNameVar)
468+ gtk.XGtkActionableSetActionName(x.GoPointer(), core.NullableStringToPtr(ActionNameVar))
469469
470470 }
471471
M v4/adw/adw-tab-view.go +4 -4
@@ -544,7 +544,7 @@ func (x *TabPage) GetPropertyIndicatorActivatable() bool {
544544 func (x *TabPage) SetPropertyIndicatorTooltip(value string) {
545545 var v gobject.Value
546546 v.Init(gobject.TypeStringVal)
547- v.SetString(value)
547+ v.SetString(&value)
548548 x.SetProperty("indicator-tooltip", &v)
549549 }
550550
@@ -570,7 +570,7 @@ func (x *TabPage) GetPropertyIndicatorTooltip() string {
570570 func (x *TabPage) SetPropertyKeyword(value string) {
571571 var v gobject.Value
572572 v.Init(gobject.TypeStringVal)
573- v.SetString(value)
573+ v.SetString(&value)
574574 x.SetProperty("keyword", &v)
575575 }
576576
@@ -786,7 +786,7 @@ func (x *TabPage) GetPropertyThumbnailYalign() float32 {
786786 func (x *TabPage) SetPropertyTitle(value string) {
787787 var v gobject.Value
788788 v.Init(gobject.TypeStringVal)
789- v.SetString(value)
789+ v.SetString(&value)
790790 x.SetProperty("title", &v)
791791 }
792792
@@ -815,7 +815,7 @@ func (x *TabPage) GetPropertyTitle() string {
815815 func (x *TabPage) SetPropertyTooltip(value string) {
816816 var v gobject.Value
817817 v.Init(gobject.TypeStringVal)
818- v.SetString(value)
818+ v.SetString(&value)
819819 x.SetProperty("tooltip", &v)
820820 }
821821
M v4/adw/adw-toast.go +15 -15
@@ -327,20 +327,20 @@ func (x *Toast) GetUseMarkup() bool {
327327 return cret
328328 }
329329
330-var xToastSetActionName func(uintptr, string)
330+var xToastSetActionName func(uintptr, uintptr)
331331
332332 // Sets the name of the associated action.
333333 //
334334 // It will be activated when clicking the button.
335335 //
336336 // See [property@Toast:action-target].
337-func (x *Toast) SetActionName(ActionNameVar string) {
337+func (x *Toast) SetActionName(ActionNameVar *string) {
338338
339- xToastSetActionName(x.GoPointer(), ActionNameVar)
339+ xToastSetActionName(x.GoPointer(), core.NullableStringToPtr(ActionNameVar))
340340
341341 }
342342
343-var xToastSetActionTarget func(uintptr, string, ...interface{})
343+var xToastSetActionTarget func(uintptr, uintptr, ...interface{})
344344
345345 // Sets the parameter for action invocations.
346346 //
@@ -351,9 +351,9 @@ var xToastSetActionTarget func(uintptr, string, ...interface{})
351351 // If you are setting a string-valued target and want to set
352352 // the action name at the same time, you can use
353353 // [method@Toast.set_detailed_action_name].
354-func (x *Toast) SetActionTarget(FormatStringVar string, varArgs ...interface{}) {
354+func (x *Toast) SetActionTarget(FormatStringVar *string, varArgs ...interface{}) {
355355
356- xToastSetActionTarget(x.GoPointer(), FormatStringVar, varArgs...)
356+ xToastSetActionTarget(x.GoPointer(), core.NullableStringToPtr(FormatStringVar), varArgs...)
357357
358358 }
359359
@@ -369,7 +369,7 @@ func (x *Toast) SetActionTargetValue(ActionTargetVar *glib.Variant) {
369369
370370 }
371371
372-var xToastSetButtonLabel func(uintptr, string)
372+var xToastSetButtonLabel func(uintptr, uintptr)
373373
374374 // Sets the label to show on the button.
375375 //
@@ -378,9 +378,9 @@ var xToastSetButtonLabel func(uintptr, string)
378378 // If set to `NULL`, the button won't be shown.
379379 //
380380 // See [property@Toast:action-name].
381-func (x *Toast) SetButtonLabel(ButtonLabelVar string) {
381+func (x *Toast) SetButtonLabel(ButtonLabelVar *string) {
382382
383- xToastSetButtonLabel(x.GoPointer(), ButtonLabelVar)
383+ xToastSetButtonLabel(x.GoPointer(), core.NullableStringToPtr(ButtonLabelVar))
384384
385385 }
386386
@@ -398,15 +398,15 @@ func (x *Toast) SetCustomTitle(WidgetVar *gtk.Widget) {
398398
399399 }
400400
401-var xToastSetDetailedActionName func(uintptr, string)
401+var xToastSetDetailedActionName func(uintptr, uintptr)
402402
403403 // Sets the action name and its parameter.
404404 //
405405 // @detailed_action_name is a string in the format accepted by
406406 // [func@Gio.Action.parse_detailed_name].
407-func (x *Toast) SetDetailedActionName(DetailedActionNameVar string) {
407+func (x *Toast) SetDetailedActionName(DetailedActionNameVar *string) {
408408
409- xToastSetDetailedActionName(x.GoPointer(), DetailedActionNameVar)
409+ xToastSetDetailedActionName(x.GoPointer(), core.NullableStringToPtr(DetailedActionNameVar))
410410
411411 }
412412
@@ -488,7 +488,7 @@ func (c *Toast) SetGoPointer(ptr uintptr) {
488488 func (x *Toast) SetPropertyActionName(value string) {
489489 var v gobject.Value
490490 v.Init(gobject.TypeStringVal)
491- v.SetString(value)
491+ v.SetString(&value)
492492 x.SetProperty("action-name", &v)
493493 }
494494
@@ -532,7 +532,7 @@ func (x *Toast) GetPropertyActionTarget() uintptr {
532532 func (x *Toast) SetPropertyButtonLabel(value string) {
533533 var v gobject.Value
534534 v.Init(gobject.TypeStringVal)
535- v.SetString(value)
535+ v.SetString(&value)
536536 x.SetProperty("button-label", &v)
537537 }
538538
@@ -590,7 +590,7 @@ func (x *Toast) GetPropertyTimeout() uint {
590590 func (x *Toast) SetPropertyTitle(value string) {
591591 var v gobject.Value
592592 v.Init(gobject.TypeStringVal)
593- v.SetString(value)
593+ v.SetString(&value)
594594 x.SetProperty("title", &v)
595595 }
596596
M v4/adw/adw-toggle-group.go +17 -17
@@ -172,41 +172,41 @@ func (x *Toggle) SetEnabled(EnabledVar bool) {
172172
173173 }
174174
175-var xToggleSetIconName func(uintptr, string)
175+var xToggleSetIconName func(uintptr, uintptr)
176176
177177 // Sets the icon name of @self to @icon_name.
178178 //
179179 // The icon will be displayed alone or next to the label, unless
180180 // [property@Toggle:child] is set.
181-func (x *Toggle) SetIconName(IconNameVar string) {
181+func (x *Toggle) SetIconName(IconNameVar *string) {
182182
183- xToggleSetIconName(x.GoPointer(), IconNameVar)
183+ xToggleSetIconName(x.GoPointer(), core.NullableStringToPtr(IconNameVar))
184184
185185 }
186186
187-var xToggleSetLabel func(uintptr, string)
187+var xToggleSetLabel func(uintptr, uintptr)
188188
189189 // Sets the label of @self to @label.
190190 //
191191 // The label will be displayed alone or next to the icon, unless
192192 // [property@Toggle:child] is set, but will still be read out by the screen
193193 // reader.
194-func (x *Toggle) SetLabel(LabelVar string) {
194+func (x *Toggle) SetLabel(LabelVar *string) {
195195
196- xToggleSetLabel(x.GoPointer(), LabelVar)
196+ xToggleSetLabel(x.GoPointer(), core.NullableStringToPtr(LabelVar))
197197
198198 }
199199
200-var xToggleSetName func(uintptr, string)
200+var xToggleSetName func(uintptr, uintptr)
201201
202202 // Sets the name of @self to @name.
203203 //
204204 // Allows accessing @self by its name instead of index.
205205 //
206206 // See [property@ToggleGroup:active-name].
207-func (x *Toggle) SetName(NameVar string) {
207+func (x *Toggle) SetName(NameVar *string) {
208208
209- xToggleSetName(x.GoPointer(), NameVar)
209+ xToggleSetName(x.GoPointer(), core.NullableStringToPtr(NameVar))
210210
211211 }
212212
@@ -268,7 +268,7 @@ func (x *Toggle) GetPropertyEnabled() bool {
268268 func (x *Toggle) SetPropertyIconName(value string) {
269269 var v gobject.Value
270270 v.Init(gobject.TypeStringVal)
271- v.SetString(value)
271+ v.SetString(&value)
272272 x.SetProperty("icon-name", &v)
273273 }
274274
@@ -292,7 +292,7 @@ func (x *Toggle) GetPropertyIconName() string {
292292 func (x *Toggle) SetPropertyLabel(value string) {
293293 var v gobject.Value
294294 v.Init(gobject.TypeStringVal)
295- v.SetString(value)
295+ v.SetString(&value)
296296 x.SetProperty("label", &v)
297297 }
298298
@@ -317,7 +317,7 @@ func (x *Toggle) GetPropertyLabel() string {
317317 func (x *Toggle) SetPropertyName(value string) {
318318 var v gobject.Value
319319 v.Init(gobject.TypeStringVal)
320- v.SetString(value)
320+ v.SetString(&value)
321321 x.SetProperty("name", &v)
322322 }
323323
@@ -340,7 +340,7 @@ func (x *Toggle) GetPropertyName() string {
340340 func (x *Toggle) SetPropertyTooltip(value string) {
341341 var v gobject.Value
342342 v.Init(gobject.TypeStringVal)
343- v.SetString(value)
343+ v.SetString(&value)
344344 x.SetProperty("tooltip", &v)
345345 }
346346
@@ -659,16 +659,16 @@ func (x *ToggleGroup) SetActive(ActiveVar uint) {
659659
660660 }
661661
662-var xToggleGroupSetActiveName func(uintptr, string)
662+var xToggleGroupSetActiveName func(uintptr, uintptr)
663663
664664 // Sets the active toggle for @self.
665665 //
666666 // The name can be set via [property@Toggle:name].
667667 //
668668 // If @name is `NULL`, unset the current active toggle instead.
669-func (x *ToggleGroup) SetActiveName(NameVar string) {
669+func (x *ToggleGroup) SetActiveName(NameVar *string) {
670670
671- xToggleGroupSetActiveName(x.GoPointer(), NameVar)
671+ xToggleGroupSetActiveName(x.GoPointer(), core.NullableStringToPtr(NameVar))
672672
673673 }
674674
@@ -745,7 +745,7 @@ func (x *ToggleGroup) GetPropertyActive() uint {
745745 func (x *ToggleGroup) SetPropertyActiveName(value string) {
746746 var v gobject.Value
747747 v.Init(gobject.TypeStringVal)
748- v.SetString(value)
748+ v.SetString(&value)
749749 x.SetProperty("active-name", &v)
750750 }
751751
M v4/adw/adw-view-stack.go +22 -22
@@ -151,15 +151,15 @@ func (x *ViewStack) Add(ChildVar *gtk.Widget) *ViewStackPage {
151151 return cls
152152 }
153153
154-var xViewStackAddNamed func(uintptr, uintptr, string) uintptr
154+var xViewStackAddNamed func(uintptr, uintptr, uintptr) uintptr
155155
156156 // Adds a child to @self.
157157 //
158158 // The child is identified by the @name.
159-func (x *ViewStack) AddNamed(ChildVar *gtk.Widget, NameVar string) *ViewStackPage {
159+func (x *ViewStack) AddNamed(ChildVar *gtk.Widget, NameVar *string) *ViewStackPage {
160160 var cls *ViewStackPage
161161
162- cret := xViewStackAddNamed(x.GoPointer(), ChildVar.GoPointer(), NameVar)
162+ cret := xViewStackAddNamed(x.GoPointer(), ChildVar.GoPointer(), core.NullableStringToPtr(NameVar))
163163
164164 if cret == 0 {
165165 return nil
@@ -170,16 +170,16 @@ func (x *ViewStack) AddNamed(ChildVar *gtk.Widget, NameVar string) *ViewStackPag
170170 return cls
171171 }
172172
173-var xViewStackAddTitled func(uintptr, uintptr, string, string) uintptr
173+var xViewStackAddTitled func(uintptr, uintptr, uintptr, string) uintptr
174174
175175 // Adds a child to @self.
176176 //
177177 // The child is identified by the @name. The @title will be used by
178178 // [class@ViewSwitcher] to represent @child, so it should be short.
179-func (x *ViewStack) AddTitled(ChildVar *gtk.Widget, NameVar string, TitleVar string) *ViewStackPage {
179+func (x *ViewStack) AddTitled(ChildVar *gtk.Widget, NameVar *string, TitleVar string) *ViewStackPage {
180180 var cls *ViewStackPage
181181
182- cret := xViewStackAddTitled(x.GoPointer(), ChildVar.GoPointer(), NameVar, TitleVar)
182+ cret := xViewStackAddTitled(x.GoPointer(), ChildVar.GoPointer(), core.NullableStringToPtr(NameVar), TitleVar)
183183
184184 if cret == 0 {
185185 return nil
@@ -190,16 +190,16 @@ func (x *ViewStack) AddTitled(ChildVar *gtk.Widget, NameVar string, TitleVar str
190190 return cls
191191 }
192192
193-var xViewStackAddTitledWithIcon func(uintptr, uintptr, string, string, string) uintptr
193+var xViewStackAddTitledWithIcon func(uintptr, uintptr, uintptr, string, string) uintptr
194194
195195 // Adds a child to @self.
196196 //
197197 // The child is identified by the @name. The @title and @icon_name will be used
198198 // by [class@ViewSwitcher] to represent @child.
199-func (x *ViewStack) AddTitledWithIcon(ChildVar *gtk.Widget, NameVar string, TitleVar string, IconNameVar string) *ViewStackPage {
199+func (x *ViewStack) AddTitledWithIcon(ChildVar *gtk.Widget, NameVar *string, TitleVar string, IconNameVar string) *ViewStackPage {
200200 var cls *ViewStackPage
201201
202- cret := xViewStackAddTitledWithIcon(x.GoPointer(), ChildVar.GoPointer(), NameVar, TitleVar, IconNameVar)
202+ cret := xViewStackAddTitledWithIcon(x.GoPointer(), ChildVar.GoPointer(), core.NullableStringToPtr(NameVar), TitleVar, IconNameVar)
203203
204204 if cret == 0 {
205205 return nil
@@ -556,7 +556,7 @@ func (x *ViewStack) GetPropertyVhomogeneous() bool {
556556 func (x *ViewStack) SetPropertyVisibleChildName(value string) {
557557 var v gobject.Value
558558 v.Init(gobject.TypeStringVal)
559- v.SetString(value)
559+ v.SetString(&value)
560560 x.SetProperty("visible-child-name", &v)
561561 }
562562
@@ -962,21 +962,21 @@ func (x *ViewStackPage) SetBadgeNumber(BadgeNumberVar uint) {
962962
963963 }
964964
965-var xViewStackPageSetIconName func(uintptr, string)
965+var xViewStackPageSetIconName func(uintptr, uintptr)
966966
967967 // Sets the icon name of the page.
968-func (x *ViewStackPage) SetIconName(IconNameVar string) {
968+func (x *ViewStackPage) SetIconName(IconNameVar *string) {
969969
970- xViewStackPageSetIconName(x.GoPointer(), IconNameVar)
970+ xViewStackPageSetIconName(x.GoPointer(), core.NullableStringToPtr(IconNameVar))
971971
972972 }
973973
974-var xViewStackPageSetName func(uintptr, string)
974+var xViewStackPageSetName func(uintptr, uintptr)
975975
976976 // Sets the name of the page.
977-func (x *ViewStackPage) SetName(NameVar string) {
977+func (x *ViewStackPage) SetName(NameVar *string) {
978978
979- xViewStackPageSetName(x.GoPointer(), NameVar)
979+ xViewStackPageSetName(x.GoPointer(), core.NullableStringToPtr(NameVar))
980980
981981 }
982982
@@ -991,12 +991,12 @@ func (x *ViewStackPage) SetNeedsAttention(NeedsAttentionVar bool) {
991991
992992 }
993993
994-var xViewStackPageSetTitle func(uintptr, string)
994+var xViewStackPageSetTitle func(uintptr, uintptr)
995995
996996 // Sets the page title.
997-func (x *ViewStackPage) SetTitle(TitleVar string) {
997+func (x *ViewStackPage) SetTitle(TitleVar *string) {
998998
999- xViewStackPageSetTitle(x.GoPointer(), TitleVar)
999+ xViewStackPageSetTitle(x.GoPointer(), core.NullableStringToPtr(TitleVar))
10001000
10011001 }
10021002
@@ -1064,7 +1064,7 @@ func (x *ViewStackPage) GetPropertyBadgeNumber() uint {
10641064 func (x *ViewStackPage) SetPropertyIconName(value string) {
10651065 var v gobject.Value
10661066 v.Init(gobject.TypeStringVal)
1067- v.SetString(value)
1067+ v.SetString(&value)
10681068 x.SetProperty("icon-name", &v)
10691069 }
10701070
@@ -1081,7 +1081,7 @@ func (x *ViewStackPage) GetPropertyIconName() string {
10811081 func (x *ViewStackPage) SetPropertyName(value string) {
10821082 var v gobject.Value
10831083 v.Init(gobject.TypeStringVal)
1084- v.SetString(value)
1084+ v.SetString(&value)
10851085 x.SetProperty("name", &v)
10861086 }
10871087
@@ -1119,7 +1119,7 @@ func (x *ViewStackPage) GetPropertyNeedsAttention() bool {
11191119 func (x *ViewStackPage) SetPropertyTitle(value string) {
11201120 var v gobject.Value
11211121 v.Init(gobject.TypeStringVal)
1122- v.SetString(value)
1122+ v.SetString(&value)
11231123 x.SetProperty("title", &v)
11241124 }
11251125
M v4/adw/adw-view-switcher-title.go +2 -2
@@ -240,7 +240,7 @@ func (c *ViewSwitcherTitle) SetGoPointer(ptr uintptr) {
240240 func (x *ViewSwitcherTitle) SetPropertySubtitle(value string) {
241241 var v gobject.Value
242242 v.Init(gobject.TypeStringVal)
243- v.SetString(value)
243+ v.SetString(&value)
244244 x.SetProperty("subtitle", &v)
245245 }
246246
@@ -262,7 +262,7 @@ func (x *ViewSwitcherTitle) GetPropertySubtitle() string {
262262 func (x *ViewSwitcherTitle) SetPropertyTitle(value string) {
263263 var v gobject.Value
264264 v.Init(gobject.TypeStringVal)
265- v.SetString(value)
265+ v.SetString(&value)
266266 x.SetProperty("title", &v)
267267 }
268268
M v4/adw/adw-window-title.go +2 -2
@@ -129,7 +129,7 @@ func (c *WindowTitle) SetGoPointer(ptr uintptr) {
129129 func (x *WindowTitle) SetPropertySubtitle(value string) {
130130 var v gobject.Value
131131 v.Init(gobject.TypeStringVal)
132- v.SetString(value)
132+ v.SetString(&value)
133133 x.SetProperty("subtitle", &v)
134134 }
135135
@@ -151,7 +151,7 @@ func (x *WindowTitle) GetPropertySubtitle() string {
151151 func (x *WindowTitle) SetPropertyTitle(value string) {
152152 var v gobject.Value
153153 v.Init(gobject.TypeStringVal)
154- v.SetString(value)
154+ v.SetString(&value)
155155 x.SetProperty("title", &v)
156156 }
157157
M v4/gdk/gdkapplaunchcontext.go +3 -3
@@ -98,7 +98,7 @@ func (x *AppLaunchContext) SetIcon(IconVar gio.Icon) {
9898
9999 }
100100
101-var xAppLaunchContextSetIconName func(uintptr, string)
101+var xAppLaunchContextSetIconName func(uintptr, uintptr)
102102
103103 // Sets the icon for applications that are launched with this context.
104104 //
@@ -109,9 +109,9 @@ var xAppLaunchContextSetIconName func(uintptr, string)
109109 // If neither @icon or @icon_name is set, the icon is taken from either
110110 // the file that is passed to launched application or from the `GAppInfo`
111111 // for the launched application itself.
112-func (x *AppLaunchContext) SetIconName(IconNameVar string) {
112+func (x *AppLaunchContext) SetIconName(IconNameVar *string) {
113113
114- xAppLaunchContextSetIconName(x.GoPointer(), IconNameVar)
114+ xAppLaunchContextSetIconName(x.GoPointer(), core.NullableStringToPtr(IconNameVar))
115115
116116 }
117117
M v4/gdk/gdkclipboard.go +80 -5
@@ -114,7 +114,22 @@ var xClipboardReadAsync func(uintptr, []string, int, uintptr, uintptr, uintptr)
114114 // to fulfill the request, preferring the ones listed first.
115115 func (x *Clipboard) ReadAsync(MimeTypesVar []string, IoPriorityVar int, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) {
116116
117- xClipboardReadAsync(x.GoPointer(), MimeTypesVar, IoPriorityVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
117+ var CallbackVarRef uintptr
118+ if CallbackVar != nil {
119+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
120+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
121+ CallbackVarRef = cbRefPtr
122+ } else {
123+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
124+ cbFn := *CallbackVar
125+ cbFn(arg0, arg1, arg2)
126+ }
127+ CallbackVarRef = purego.NewCallback(fcb)
128+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
129+ }
130+ }
131+
132+ xClipboardReadAsync(x.GoPointer(), MimeTypesVar, IoPriorityVar, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
118133
119134 }
120135
@@ -150,7 +165,22 @@ var xClipboardReadTextAsync func(uintptr, uintptr, uintptr, uintptr)
150165 // need more control over the operation.
151166 func (x *Clipboard) ReadTextAsync(CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) {
152167
153- xClipboardReadTextAsync(x.GoPointer(), CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
168+ var CallbackVarRef uintptr
169+ if CallbackVar != nil {
170+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
171+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
172+ CallbackVarRef = cbRefPtr
173+ } else {
174+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
175+ cbFn := *CallbackVar
176+ cbFn(arg0, arg1, arg2)
177+ }
178+ CallbackVarRef = purego.NewCallback(fcb)
179+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
180+ }
181+ }
182+
183+ xClipboardReadTextAsync(x.GoPointer(), CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
154184
155185 }
156186
@@ -179,7 +209,22 @@ var xClipboardReadTextureAsync func(uintptr, uintptr, uintptr, uintptr)
179209 // need more control over the operation.
180210 func (x *Clipboard) ReadTextureAsync(CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) {
181211
182- xClipboardReadTextureAsync(x.GoPointer(), CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
212+ var CallbackVarRef uintptr
213+ if CallbackVar != nil {
214+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
215+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
216+ CallbackVarRef = cbRefPtr
217+ } else {
218+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
219+ cbFn := *CallbackVar
220+ cbFn(arg0, arg1, arg2)
221+ }
222+ CallbackVarRef = purego.NewCallback(fcb)
223+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
224+ }
225+ }
226+
227+ xClipboardReadTextureAsync(x.GoPointer(), CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
183228
184229 }
185230
@@ -216,7 +261,22 @@ var xClipboardReadValueAsync func(uintptr, types.GType, int, uintptr, uintptr, u
216261 // [func@content_deserialize_async] to convert the clipboard's data.
217262 func (x *Clipboard) ReadValueAsync(TypeVar types.GType, IoPriorityVar int, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) {
218263
219- xClipboardReadValueAsync(x.GoPointer(), TypeVar, IoPriorityVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
264+ var CallbackVarRef uintptr
265+ if CallbackVar != nil {
266+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
267+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
268+ CallbackVarRef = cbRefPtr
269+ } else {
270+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
271+ cbFn := *CallbackVar
272+ cbFn(arg0, arg1, arg2)
273+ }
274+ CallbackVarRef = purego.NewCallback(fcb)
275+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
276+ }
277+ }
278+
279+ xClipboardReadValueAsync(x.GoPointer(), TypeVar, IoPriorityVar, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
220280
221281 }
222282
@@ -327,7 +387,22 @@ var xClipboardStoreAsync func(uintptr, int, uintptr, uintptr, uintptr)
327387 // is shut down, so you likely don't need to call it.
328388 func (x *Clipboard) StoreAsync(IoPriorityVar int, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) {
329389
330- xClipboardStoreAsync(x.GoPointer(), IoPriorityVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
390+ var CallbackVarRef uintptr
391+ if CallbackVar != nil {
392+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
393+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
394+ CallbackVarRef = cbRefPtr
395+ } else {
396+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
397+ cbFn := *CallbackVar
398+ cbFn(arg0, arg1, arg2)
399+ }
400+ CallbackVarRef = purego.NewCallback(fcb)
401+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
402+ }
403+ }
404+
405+ xClipboardStoreAsync(x.GoPointer(), IoPriorityVar, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
331406
332407 }
333408
M v4/gdk/gdkcontentdeserializer.go +65 -3
@@ -2,6 +2,8 @@
22 package gdk
33
44 import (
5+ "unsafe"
6+
57 "github.com/jwijenbergh/purego"
68 "github.com/jwijenbergh/puregotk/pkg/core"
79 "github.com/jwijenbergh/puregotk/v4/gio"
@@ -25,7 +27,22 @@ var xContentDeserializeAsync func(uintptr, string, types.GType, int, uintptr, ui
2527 // indicate a higher priority.
2628 func ContentDeserializeAsync(StreamVar *gio.InputStream, MimeTypeVar string, TypeVar types.GType, IoPriorityVar int, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) {
2729
28- xContentDeserializeAsync(StreamVar.GoPointer(), MimeTypeVar, TypeVar, IoPriorityVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
30+ var CallbackVarRef uintptr
31+ if CallbackVar != nil {
32+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
33+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
34+ CallbackVarRef = cbRefPtr
35+ } else {
36+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
37+ cbFn := *CallbackVar
38+ cbFn(arg0, arg1, arg2)
39+ }
40+ CallbackVarRef = purego.NewCallback(fcb)
41+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
42+ }
43+ }
44+
45+ xContentDeserializeAsync(StreamVar.GoPointer(), MimeTypeVar, TypeVar, IoPriorityVar, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
2946
3047 }
3148
@@ -52,7 +69,37 @@ var xContentRegisterDeserializer func(string, types.GType, uintptr, uintptr, uin
5269 // so applications can override the built-in deserializers.
5370 func ContentRegisterDeserializer(MimeTypeVar string, TypeVar types.GType, DeserializeVar *ContentDeserializeFunc, DataVar uintptr, NotifyVar *glib.DestroyNotify) {
5471
55- xContentRegisterDeserializer(MimeTypeVar, TypeVar, glib.NewCallback(DeserializeVar), DataVar, glib.NewCallback(NotifyVar))
72+ var DeserializeVarRef uintptr
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)
84+ }
85+ }
86+
87+ var NotifyVarRef uintptr
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)
99+ }
100+ }
101+
102+ xContentRegisterDeserializer(MimeTypeVar, TypeVar, DeserializeVarRef, DataVar, NotifyVarRef)
56103
57104 }
58105
@@ -203,7 +250,22 @@ var xContentDeserializerSetTaskData func(uintptr, uintptr, uintptr)
203250 // Associate data with the current deserialization operation.
204251 func (x *ContentDeserializer) SetTaskData(DataVar uintptr, NotifyVar *glib.DestroyNotify) {
205252
206- xContentDeserializerSetTaskData(x.GoPointer(), DataVar, glib.NewCallback(NotifyVar))
253+ var NotifyVarRef uintptr
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)
265+ }
266+ }
267+
268+ xContentDeserializerSetTaskData(x.GoPointer(), DataVar, NotifyVarRef)
207269
208270 }
209271
M v4/gdk/gdkcontentprovider.go +16 -1
@@ -402,7 +402,22 @@ var xContentProviderWriteMimeTypeAsync func(uintptr, string, uintptr, int, uintp
402402 // The given @stream will not be closed.
403403 func (x *ContentProvider) WriteMimeTypeAsync(MimeTypeVar string, StreamVar *gio.OutputStream, IoPriorityVar int, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) {
404404
405- xContentProviderWriteMimeTypeAsync(x.GoPointer(), MimeTypeVar, StreamVar.GoPointer(), IoPriorityVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
405+ var CallbackVarRef uintptr
406+ if CallbackVar != nil {
407+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
408+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
409+ CallbackVarRef = cbRefPtr
410+ } else {
411+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
412+ cbFn := *CallbackVar
413+ cbFn(arg0, arg1, arg2)
414+ }
415+ CallbackVarRef = purego.NewCallback(fcb)
416+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
417+ }
418+ }
419+
420+ xContentProviderWriteMimeTypeAsync(x.GoPointer(), MimeTypeVar, StreamVar.GoPointer(), IoPriorityVar, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
406421
407422 }
408423
M v4/gdk/gdkcontentserializer.go +65 -3
@@ -2,6 +2,8 @@
22 package gdk
33
44 import (
5+ "unsafe"
6+
57 "github.com/jwijenbergh/purego"
68 "github.com/jwijenbergh/puregotk/pkg/core"
79 "github.com/jwijenbergh/puregotk/v4/gio"
@@ -26,7 +28,37 @@ var xContentRegisterSerializer func(types.GType, string, uintptr, uintptr, uintp
2628 // so applications can override the built-in serializers.
2729 func ContentRegisterSerializer(TypeVar types.GType, MimeTypeVar string, SerializeVar *ContentSerializeFunc, DataVar uintptr, NotifyVar *glib.DestroyNotify) {
2830
29- xContentRegisterSerializer(TypeVar, MimeTypeVar, glib.NewCallback(SerializeVar), DataVar, glib.NewCallback(NotifyVar))
31+ var SerializeVarRef uintptr
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)
43+ }
44+ }
45+
46+ var NotifyVarRef uintptr
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)
58+ }
59+ }
60+
61+ xContentRegisterSerializer(TypeVar, MimeTypeVar, SerializeVarRef, DataVar, NotifyVarRef)
3062
3163 }
3264
@@ -38,7 +70,22 @@ var xContentSerializeAsync func(uintptr, string, *gobject.Value, int, uintptr, u
3870 // indicate a higher priority.
3971 func ContentSerializeAsync(StreamVar *gio.OutputStream, MimeTypeVar string, ValueVar *gobject.Value, IoPriorityVar int, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) {
4072
41- xContentSerializeAsync(StreamVar.GoPointer(), MimeTypeVar, ValueVar, IoPriorityVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
73+ var CallbackVarRef uintptr
74+ if CallbackVar != nil {
75+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
76+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
77+ CallbackVarRef = cbRefPtr
78+ } else {
79+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
80+ cbFn := *CallbackVar
81+ cbFn(arg0, arg1, arg2)
82+ }
83+ CallbackVarRef = purego.NewCallback(fcb)
84+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
85+ }
86+ }
87+
88+ xContentSerializeAsync(StreamVar.GoPointer(), MimeTypeVar, ValueVar, IoPriorityVar, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
4289
4390 }
4491
@@ -204,7 +251,22 @@ var xContentSerializerSetTaskData func(uintptr, uintptr, uintptr)
204251 // Associate data with the current serialization operation.
205252 func (x *ContentSerializer) SetTaskData(DataVar uintptr, NotifyVar *glib.DestroyNotify) {
206253
207- xContentSerializerSetTaskData(x.GoPointer(), DataVar, glib.NewCallback(NotifyVar))
254+ var NotifyVarRef uintptr
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)
266+ }
267+ }
268+
269+ xContentSerializerSetTaskData(x.GoPointer(), DataVar, NotifyVarRef)
208270
209271 }
210272
M v4/gdk/gdkcursor.go +34 -2
@@ -2,6 +2,8 @@
22 package gdk
33
44 import (
5+ "unsafe"
6+
57 "github.com/jwijenbergh/purego"
68 "github.com/jwijenbergh/puregotk/pkg/core"
79 "github.com/jwijenbergh/puregotk/v4/glib"
@@ -82,7 +84,37 @@ var xNewCursorFromCallback func(uintptr, uintptr, uintptr, uintptr) uintptr
8284 func NewCursorFromCallback(CallbackVar *CursorGetTextureCallback, DataVar uintptr, DestroyVar *glib.DestroyNotify, FallbackVar *Cursor) *Cursor {
8385 var cls *Cursor
8486
85- cret := xNewCursorFromCallback(glib.NewCallback(CallbackVar), DataVar, glib.NewCallback(DestroyVar), FallbackVar.GoPointer())
87+ var CallbackVarRef uintptr
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)
99+ }
100+ }
101+
102+ var DestroyVarRef uintptr
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)
114+ }
115+ }
116+
117+ cret := xNewCursorFromCallback(CallbackVarRef, DataVar, DestroyVarRef, FallbackVar.GoPointer())
86118
87119 if cret == 0 {
88120 return nil
@@ -303,7 +335,7 @@ func (x *Cursor) GetPropertyHotspotY() int {
303335 func (x *Cursor) SetPropertyName(value string) {
304336 var v gobject.Value
305337 v.Init(gobject.TypeStringVal)
306- v.SetString(value)
338+ v.SetString(&value)
307339 x.SetProperty("name", &v)
308340 }
309341
M v4/gdk/gdkdevice.go +3 -3
@@ -436,7 +436,7 @@ func (x *Device) GetPropertyNAxes() uint {
436436 func (x *Device) SetPropertyName(value string) {
437437 var v gobject.Value
438438 v.Init(gobject.TypeStringVal)
439- v.SetString(value)
439+ v.SetString(&value)
440440 x.SetProperty("name", &v)
441441 }
442442
@@ -488,7 +488,7 @@ func (x *Device) GetPropertyNumTouches() uint {
488488 func (x *Device) SetPropertyProductId(value string) {
489489 var v gobject.Value
490490 v.Init(gobject.TypeStringVal)
491- v.SetString(value)
491+ v.SetString(&value)
492492 x.SetProperty("product-id", &v)
493493 }
494494
@@ -519,7 +519,7 @@ func (x *Device) GetPropertyScrollLockState() bool {
519519 func (x *Device) SetPropertyVendorId(value string) {
520520 var v gobject.Value
521521 v.Init(gobject.TypeStringVal)
522- v.SetString(value)
522+ v.SetString(&value)
523523 x.SetProperty("vendor-id", &v)
524524 }
525525
M v4/gdk/gdkdisplay.go +3 -3
@@ -670,15 +670,15 @@ func DisplayGetDefault() *Display {
670670 return cls
671671 }
672672
673-var xDisplayOpen func(string) uintptr
673+var xDisplayOpen func(uintptr) uintptr
674674
675675 // Opens a display.
676676 //
677677 // If opening the display fails, `NULL` is returned.
678-func DisplayOpen(DisplayNameVar string) *Display {
678+func DisplayOpen(DisplayNameVar *string) *Display {
679679 var cls *Display
680680
681- cret := xDisplayOpen(DisplayNameVar)
681+ cret := xDisplayOpen(core.NullableStringToPtr(DisplayNameVar))
682682
683683 if cret == 0 {
684684 return nil
M v4/gdk/gdkdisplaymanager.go +3 -3
@@ -143,13 +143,13 @@ func (x *DisplayManager) ListDisplays() *glib.SList {
143143 return cret
144144 }
145145
146-var xDisplayManagerOpenDisplay func(uintptr, string) uintptr
146+var xDisplayManagerOpenDisplay func(uintptr, uintptr) uintptr
147147
148148 // Opens a display.
149-func (x *DisplayManager) OpenDisplay(NameVar string) *Display {
149+func (x *DisplayManager) OpenDisplay(NameVar *string) *Display {
150150 var cls *Display
151151
152- cret := xDisplayManagerOpenDisplay(x.GoPointer(), NameVar)
152+ cret := xDisplayManagerOpenDisplay(x.GoPointer(), core.NullableStringToPtr(NameVar))
153153
154154 if cret == 0 {
155155 return nil
M v4/gdk/gdkdmabuftexturebuilder.go +16 -1
@@ -131,7 +131,22 @@ func (x *DmabufTextureBuilder) Build(DestroyVar *glib.DestroyNotify, DataVar uin
131131 var cls *Texture
132132 var cerr *glib.Error
133133
134- cret := xDmabufTextureBuilderBuild(x.GoPointer(), glib.NewCallbackNullable(DestroyVar), DataVar, &cerr)
134+ var DestroyVarRef uintptr
135+ if DestroyVar != nil {
136+ DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
137+ if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok {
138+ DestroyVarRef = cbRefPtr
139+ } else {
140+ fcb := func(arg0 uintptr) {
141+ cbFn := *DestroyVar
142+ cbFn(arg0)
143+ }
144+ DestroyVarRef = purego.NewCallback(fcb)
145+ glib.SaveCallback(DestroyVarPtr, DestroyVarRef)
146+ }
147+ }
148+
149+ cret := xDmabufTextureBuilderBuild(x.GoPointer(), DestroyVarRef, DataVar, &cerr)
135150
136151 if cret == 0 {
137152 return nil, cerr
M v4/gdk/gdkdrop.go +34 -2
@@ -2,6 +2,8 @@
22 package gdk
33
44 import (
5+ "unsafe"
6+
57 "github.com/jwijenbergh/purego"
68 "github.com/jwijenbergh/puregotk/pkg/core"
79 "github.com/jwijenbergh/puregotk/v4/gio"
@@ -161,7 +163,22 @@ var xDropReadAsync func(uintptr, []string, int, uintptr, uintptr, uintptr)
161163 // in a format that complies with one of the mime types.
162164 func (x *Drop) ReadAsync(MimeTypesVar []string, IoPriorityVar int, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) {
163165
164- xDropReadAsync(x.GoPointer(), MimeTypesVar, IoPriorityVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
166+ var CallbackVarRef uintptr
167+ if CallbackVar != nil {
168+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
169+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
170+ CallbackVarRef = cbRefPtr
171+ } else {
172+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
173+ cbFn := *CallbackVar
174+ cbFn(arg0, arg1, arg2)
175+ }
176+ CallbackVarRef = purego.NewCallback(fcb)
177+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
178+ }
179+ }
180+
181+ xDropReadAsync(x.GoPointer(), MimeTypesVar, IoPriorityVar, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
165182
166183 }
167184
@@ -203,7 +220,22 @@ var xDropReadValueAsync func(uintptr, types.GType, int, uintptr, uintptr, uintpt
203220 // try to use [func@Gdk.content_deserialize_async] to convert the data.
204221 func (x *Drop) ReadValueAsync(TypeVar types.GType, IoPriorityVar int, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) {
205222
206- xDropReadValueAsync(x.GoPointer(), TypeVar, IoPriorityVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
223+ var CallbackVarRef uintptr
224+ if CallbackVar != nil {
225+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
226+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
227+ CallbackVarRef = cbRefPtr
228+ } else {
229+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
230+ cbFn := *CallbackVar
231+ cbFn(arg0, arg1, arg2)
232+ }
233+ CallbackVarRef = purego.NewCallback(fcb)
234+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
235+ }
236+ }
237+
238+ xDropReadValueAsync(x.GoPointer(), TypeVar, IoPriorityVar, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
207239
208240 }
209241
M v4/gdk/gdkgltexture.go +16 -1
@@ -47,7 +47,22 @@ 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- cret := xNewGLTexture(ContextVar.GoPointer(), IdVar, WidthVar, HeightVar, glib.NewCallback(DestroyVar), DataVar)
50+ var DestroyVarRef uintptr
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)
62+ }
63+ }
64+
65+ cret := xNewGLTexture(ContextVar.GoPointer(), IdVar, WidthVar, HeightVar, DestroyVarRef, DataVar)
5166
5267 if cret == 0 {
5368 return nil
M v4/gdk/gdkgltexturebuilder.go +16 -1
@@ -81,7 +81,22 @@ var xGLTextureBuilderBuild func(uintptr, uintptr, uintptr) uintptr
8181 func (x *GLTextureBuilder) Build(DestroyVar *glib.DestroyNotify, DataVar uintptr) *Texture {
8282 var cls *Texture
8383
84- cret := xGLTextureBuilderBuild(x.GoPointer(), glib.NewCallbackNullable(DestroyVar), DataVar)
84+ var DestroyVarRef uintptr
85+ if DestroyVar != nil {
86+ DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
87+ if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok {
88+ DestroyVarRef = cbRefPtr
89+ } else {
90+ fcb := func(arg0 uintptr) {
91+ cbFn := *DestroyVar
92+ cbFn(arg0)
93+ }
94+ DestroyVarRef = purego.NewCallback(fcb)
95+ glib.SaveCallback(DestroyVarPtr, DestroyVarRef)
96+ }
97+ }
98+
99+ cret := xGLTextureBuilderBuild(x.GoPointer(), DestroyVarRef, DataVar)
85100
86101 if cret == 0 {
87102 return nil
M v4/gdk/gdktoplevel.go +2 -2
@@ -423,7 +423,7 @@ func (x *ToplevelBase) SetPropertyStartupId(value string) {
423423 obj.Ptr = x.GoPointer()
424424 var v gobject.Value
425425 v.Init(gobject.TypeStringVal)
426- v.SetString(value)
426+ v.SetString(&value)
427427 obj.SetProperty("startup-id", &v)
428428 }
429429
@@ -447,7 +447,7 @@ func (x *ToplevelBase) SetPropertyTitle(value string) {
447447 obj.Ptr = x.GoPointer()
448448 var v gobject.Value
449449 v.Init(gobject.TypeStringVal)
450- v.SetString(value)
450+ v.SetString(&value)
451451 obj.SetProperty("title", &v)
452452 }
453453
M v4/gdkpixbuf/gdk-pixbuf-animation.go +16 -1
@@ -588,7 +588,22 @@ var xPixbufAnimationNewFromStreamAsync func(uintptr, uintptr, uintptr, uintptr)
588588 // result of the operation.
589589 func PixbufAnimationNewFromStreamAsync(StreamVar *gio.InputStream, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) {
590590
591- xPixbufAnimationNewFromStreamAsync(StreamVar.GoPointer(), CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
591+ var CallbackVarRef uintptr
592+ if CallbackVar != nil {
593+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
594+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
595+ CallbackVarRef = cbRefPtr
596+ } else {
597+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
598+ cbFn := *CallbackVar
599+ cbFn(arg0, arg1, arg2)
600+ }
601+ CallbackVarRef = purego.NewCallback(fcb)
602+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
603+ }
604+ }
605+
606+ xPixbufAnimationNewFromStreamAsync(StreamVar.GoPointer(), CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
592607
593608 }
594609
M v4/gdkpixbuf/gdk-pixbuf.go +130 -8
@@ -2,6 +2,8 @@
22 package gdkpixbuf
33
44 import (
5+ "unsafe"
6+
57 "github.com/jwijenbergh/purego"
68 "github.com/jwijenbergh/puregotk/pkg/core"
79 "github.com/jwijenbergh/puregotk/v4/gio"
@@ -219,7 +221,22 @@ var xNewPixbufFromData func([]byte, Colorspace, bool, int, int, int, int, uintpt
219221 func NewPixbufFromData(DataVar []byte, ColorspaceVar Colorspace, HasAlphaVar bool, BitsPerSampleVar int, WidthVar int, HeightVar int, RowstrideVar int, DestroyFnVar *PixbufDestroyNotify, DestroyFnDataVar uintptr) *Pixbuf {
220222 var cls *Pixbuf
221223
222- cret := xNewPixbufFromData(DataVar, ColorspaceVar, HasAlphaVar, BitsPerSampleVar, WidthVar, HeightVar, RowstrideVar, glib.NewCallbackNullable(DestroyFnVar), DestroyFnDataVar)
224+ var DestroyFnVarRef uintptr
225+ if DestroyFnVar != nil {
226+ DestroyFnVarPtr := uintptr(unsafe.Pointer(DestroyFnVar))
227+ if cbRefPtr, ok := glib.GetCallback(DestroyFnVarPtr); ok {
228+ DestroyFnVarRef = cbRefPtr
229+ } else {
230+ fcb := func(arg0 []byte, arg1 uintptr) {
231+ cbFn := *DestroyFnVar
232+ cbFn(arg0, arg1)
233+ }
234+ DestroyFnVarRef = purego.NewCallback(fcb)
235+ glib.SaveCallback(DestroyFnVarPtr, DestroyFnVarRef)
236+ }
237+ }
238+
239+ cret := xNewPixbufFromData(DataVar, ColorspaceVar, HasAlphaVar, BitsPerSampleVar, WidthVar, HeightVar, RowstrideVar, DestroyFnVarRef, DestroyFnDataVar)
223240
224241 if cret == 0 {
225242 return nil
@@ -1144,7 +1161,22 @@ var xPixbufSaveToCallback func(uintptr, uintptr, uintptr, string, **glib.Error,
11441161 // See [method@GdkPixbuf.Pixbuf.save] for more details.
11451162 func (x *Pixbuf) SaveToCallback(SaveFuncVar *PixbufSaveFunc, UserDataVar uintptr, TypeVar string, ErrorVar **glib.Error, varArgs ...interface{}) bool {
11461163
1147- cret := xPixbufSaveToCallback(x.GoPointer(), glib.NewCallback(SaveFuncVar), UserDataVar, TypeVar, ErrorVar, varArgs...)
1164+ var SaveFuncVarRef uintptr
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)
1176+ }
1177+ }
1178+
1179+ cret := xPixbufSaveToCallback(x.GoPointer(), SaveFuncVarRef, UserDataVar, TypeVar, ErrorVar, varArgs...)
11481180 return cret
11491181 }
11501182
@@ -1161,7 +1193,22 @@ var xPixbufSaveToCallbackv func(uintptr, uintptr, uintptr, string, []string, []s
11611193 func (x *Pixbuf) SaveToCallbackv(SaveFuncVar *PixbufSaveFunc, UserDataVar uintptr, TypeVar string, OptionKeysVar []string, OptionValuesVar []string) (bool, error) {
11621194 var cerr *glib.Error
11631195
1164- cret := xPixbufSaveToCallbackv(x.GoPointer(), glib.NewCallback(SaveFuncVar), UserDataVar, TypeVar, OptionKeysVar, OptionValuesVar, &cerr)
1196+ var SaveFuncVarRef uintptr
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)
1208+ }
1209+ }
1210+
1211+ cret := xPixbufSaveToCallbackv(x.GoPointer(), SaveFuncVarRef, UserDataVar, TypeVar, OptionKeysVar, OptionValuesVar, &cerr)
11651212 if cerr == nil {
11661213 return cret, nil
11671214 }
@@ -1201,7 +1248,22 @@ var xPixbufSaveToStreamAsync func(uintptr, uintptr, string, uintptr, uintptr, ui
12011248 // the operation.
12021249 func (x *Pixbuf) SaveToStreamAsync(StreamVar *gio.OutputStream, TypeVar string, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr, varArgs ...interface{}) {
12031250
1204- xPixbufSaveToStreamAsync(x.GoPointer(), StreamVar.GoPointer(), TypeVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar, varArgs...)
1251+ var CallbackVarRef uintptr
1252+ if CallbackVar != nil {
1253+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
1254+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
1255+ CallbackVarRef = cbRefPtr
1256+ } else {
1257+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
1258+ cbFn := *CallbackVar
1259+ cbFn(arg0, arg1, arg2)
1260+ }
1261+ CallbackVarRef = purego.NewCallback(fcb)
1262+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
1263+ }
1264+ }
1265+
1266+ xPixbufSaveToStreamAsync(x.GoPointer(), StreamVar.GoPointer(), TypeVar, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar, varArgs...)
12051267
12061268 }
12071269
@@ -1237,7 +1299,22 @@ var xPixbufSaveToStreamvAsync func(uintptr, uintptr, string, []string, []string,
12371299 // the operation.
12381300 func (x *Pixbuf) SaveToStreamvAsync(StreamVar *gio.OutputStream, TypeVar string, OptionKeysVar []string, OptionValuesVar []string, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) {
12391301
1240- xPixbufSaveToStreamvAsync(x.GoPointer(), StreamVar.GoPointer(), TypeVar, OptionKeysVar, OptionValuesVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
1302+ var CallbackVarRef uintptr
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, arg2 uintptr) {
1309+ cbFn := *CallbackVar
1310+ cbFn(arg0, arg1, arg2)
1311+ }
1312+ CallbackVarRef = purego.NewCallback(fcb)
1313+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
1314+ }
1315+ }
1316+
1317+ xPixbufSaveToStreamvAsync(x.GoPointer(), StreamVar.GoPointer(), TypeVar, OptionKeysVar, OptionValuesVar, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
12411318
12421319 }
12431320
@@ -1627,7 +1704,22 @@ var xPixbufGetFileInfoAsync func(string, uintptr, uintptr, uintptr)
16271704 // get the result of the operation.
16281705 func PixbufGetFileInfoAsync(FilenameVar string, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) {
16291706
1630- xPixbufGetFileInfoAsync(FilenameVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
1707+ var CallbackVarRef uintptr
1708+ if CallbackVar != nil {
1709+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
1710+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
1711+ CallbackVarRef = cbRefPtr
1712+ } else {
1713+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
1714+ cbFn := *CallbackVar
1715+ cbFn(arg0, arg1, arg2)
1716+ }
1717+ CallbackVarRef = purego.NewCallback(fcb)
1718+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
1719+ }
1720+ }
1721+
1722+ xPixbufGetFileInfoAsync(FilenameVar, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
16311723
16321724 }
16331725
@@ -1694,7 +1786,22 @@ var xPixbufNewFromStreamAsync func(uintptr, uintptr, uintptr, uintptr)
16941786 // the operation.
16951787 func PixbufNewFromStreamAsync(StreamVar *gio.InputStream, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) {
16961788
1697- xPixbufNewFromStreamAsync(StreamVar.GoPointer(), CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
1789+ var CallbackVarRef uintptr
1790+ if CallbackVar != nil {
1791+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
1792+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
1793+ CallbackVarRef = cbRefPtr
1794+ } else {
1795+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
1796+ cbFn := *CallbackVar
1797+ cbFn(arg0, arg1, arg2)
1798+ }
1799+ CallbackVarRef = purego.NewCallback(fcb)
1800+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
1801+ }
1802+ }
1803+
1804+ xPixbufNewFromStreamAsync(StreamVar.GoPointer(), CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
16981805
16991806 }
17001807
@@ -1709,7 +1816,22 @@ var xPixbufNewFromStreamAtScaleAsync func(uintptr, int, int, bool, uintptr, uint
17091816 // You can then call gdk_pixbuf_new_from_stream_finish() to get the result of the operation.
17101817 func PixbufNewFromStreamAtScaleAsync(StreamVar *gio.InputStream, WidthVar int, HeightVar int, PreserveAspectRatioVar bool, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) {
17111818
1712- xPixbufNewFromStreamAtScaleAsync(StreamVar.GoPointer(), WidthVar, HeightVar, PreserveAspectRatioVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
1819+ var CallbackVarRef uintptr
1820+ if CallbackVar != nil {
1821+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
1822+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
1823+ CallbackVarRef = cbRefPtr
1824+ } else {
1825+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
1826+ cbFn := *CallbackVar
1827+ cbFn(arg0, arg1, arg2)
1828+ }
1829+ CallbackVarRef = purego.NewCallback(fcb)
1830+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
1831+ }
1832+ }
1833+
1834+ xPixbufNewFromStreamAtScaleAsync(StreamVar.GoPointer(), WidthVar, HeightVar, PreserveAspectRatioVar, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
17131835
17141836 }
17151837
M v4/gio/gappinfo.go +51 -6
@@ -1435,7 +1435,7 @@ var XGAppInfoShouldShow func(uintptr) bool
14351435 var XGAppInfoSupportsFiles func(uintptr) bool
14361436 var XGAppInfoSupportsUris func(uintptr) bool
14371437
1438-var xAppInfoCreateFromCommandline func(string, string, AppInfoCreateFlags, **glib.Error) uintptr
1438+var xAppInfoCreateFromCommandline func(string, uintptr, AppInfoCreateFlags, **glib.Error) uintptr
14391439
14401440 // Creates a new [iface@Gio.AppInfo] from the given information.
14411441 //
@@ -1446,11 +1446,11 @@ var xAppInfoCreateFromCommandline func(string, string, AppInfoCreateFlags, **gli
14461446 // being swallowed by `Exec` key unquoting. See
14471447 // [the specification](https://specifications.freedesktop.org/desktop-entry-spec/latest/ar01s07.html)
14481448 // for exact quoting rules.
1449-func AppInfoCreateFromCommandline(CommandlineVar string, ApplicationNameVar string, FlagsVar AppInfoCreateFlags) (*AppInfoBase, error) {
1449+func AppInfoCreateFromCommandline(CommandlineVar string, ApplicationNameVar *string, FlagsVar AppInfoCreateFlags) (*AppInfoBase, error) {
14501450 var cls *AppInfoBase
14511451 var cerr *glib.Error
14521452
1453- cret := xAppInfoCreateFromCommandline(CommandlineVar, ApplicationNameVar, FlagsVar, &cerr)
1453+ cret := xAppInfoCreateFromCommandline(CommandlineVar, core.NullableStringToPtr(ApplicationNameVar), FlagsVar, &cerr)
14541454
14551455 if cret == 0 {
14561456 return nil, cerr
@@ -1519,7 +1519,22 @@ var xAppInfoGetDefaultForTypeAsync func(string, bool, uintptr, uintptr, uintptr)
15191519 // type.
15201520 func AppInfoGetDefaultForTypeAsync(ContentTypeVar string, MustSupportUrisVar bool, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
15211521
1522- xAppInfoGetDefaultForTypeAsync(ContentTypeVar, MustSupportUrisVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
1522+ var CallbackVarRef uintptr
1523+ if CallbackVar != nil {
1524+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
1525+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
1526+ CallbackVarRef = cbRefPtr
1527+ } else {
1528+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
1529+ cbFn := *CallbackVar
1530+ cbFn(arg0, arg1, arg2)
1531+ }
1532+ CallbackVarRef = purego.NewCallback(fcb)
1533+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
1534+ }
1535+ }
1536+
1537+ xAppInfoGetDefaultForTypeAsync(ContentTypeVar, MustSupportUrisVar, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
15231538
15241539 }
15251540
@@ -1575,7 +1590,22 @@ var xAppInfoGetDefaultForUriSchemeAsync func(string, uintptr, uintptr, uintptr)
15751590 // `ftp` or `sip`.
15761591 func AppInfoGetDefaultForUriSchemeAsync(UriSchemeVar string, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
15771592
1578- xAppInfoGetDefaultForUriSchemeAsync(UriSchemeVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
1593+ var CallbackVarRef uintptr
1594+ if CallbackVar != nil {
1595+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
1596+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
1597+ CallbackVarRef = cbRefPtr
1598+ } else {
1599+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
1600+ cbFn := *CallbackVar
1601+ cbFn(arg0, arg1, arg2)
1602+ }
1603+ CallbackVarRef = purego.NewCallback(fcb)
1604+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
1605+ }
1606+ }
1607+
1608+ xAppInfoGetDefaultForUriSchemeAsync(UriSchemeVar, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
15791609
15801610 }
15811611
@@ -1663,7 +1693,22 @@ var xAppInfoLaunchDefaultForUriAsync func(string, uintptr, uintptr, uintptr, uin
16631693 // in receiving error information from their activation.
16641694 func AppInfoLaunchDefaultForUriAsync(UriVar string, ContextVar *AppLaunchContext, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
16651695
1666- xAppInfoLaunchDefaultForUriAsync(UriVar, ContextVar.GoPointer(), CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
1696+ var CallbackVarRef uintptr
1697+ if CallbackVar != nil {
1698+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
1699+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
1700+ CallbackVarRef = cbRefPtr
1701+ } else {
1702+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
1703+ cbFn := *CallbackVar
1704+ cbFn(arg0, arg1, arg2)
1705+ }
1706+ CallbackVarRef = purego.NewCallback(fcb)
1707+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
1708+ }
1709+ }
1710+
1711+ xAppInfoLaunchDefaultForUriAsync(UriVar, ContextVar.GoPointer(), CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
16671712
16681713 }
16691714
M v4/gio/gapplication.go +27 -27
@@ -649,7 +649,7 @@ func ApplicationNewFromInternalPtr(ptr uintptr) *Application {
649649 return cls
650650 }
651651
652-var xNewApplication func(string, ApplicationFlags) uintptr
652+var xNewApplication func(uintptr, ApplicationFlags) uintptr
653653
654654 // Creates a new #GApplication instance.
655655 //
@@ -658,10 +658,10 @@ var xNewApplication func(string, ApplicationFlags) uintptr
658658 //
659659 // If no application ID is given then some features of #GApplication
660660 // (most notably application uniqueness) will be disabled.
661-func NewApplication(ApplicationIdVar string, FlagsVar ApplicationFlags) *Application {
661+func NewApplication(ApplicationIdVar *string, FlagsVar ApplicationFlags) *Application {
662662 var cls *Application
663663
664- cret := xNewApplication(ApplicationIdVar, FlagsVar)
664+ cret := xNewApplication(core.NullableStringToPtr(ApplicationIdVar), FlagsVar)
665665
666666 if cret == 0 {
667667 return nil
@@ -685,7 +685,7 @@ func (x *Application) Activate() {
685685
686686 }
687687
688-var xApplicationAddMainOption func(uintptr, string, byte, glib.OptionFlags, glib.OptionArg, string, string)
688+var xApplicationAddMainOption func(uintptr, string, byte, glib.OptionFlags, glib.OptionArg, string, uintptr)
689689
690690 // Add an option to be handled by @application.
691691 //
@@ -700,9 +700,9 @@ var xApplicationAddMainOption func(uintptr, string, byte, glib.OptionFlags, glib
700700 // g_application_add_main_option_entries() for more details.
701701 //
702702 // See #GOptionEntry for more documentation of the arguments.
703-func (x *Application) AddMainOption(LongNameVar string, ShortNameVar byte, FlagsVar glib.OptionFlags, ArgVar glib.OptionArg, DescriptionVar string, ArgDescriptionVar string) {
703+func (x *Application) AddMainOption(LongNameVar string, ShortNameVar byte, FlagsVar glib.OptionFlags, ArgVar glib.OptionArg, DescriptionVar string, ArgDescriptionVar *string) {
704704
705- xApplicationAddMainOption(x.GoPointer(), LongNameVar, ShortNameVar, FlagsVar, ArgVar, DescriptionVar, ArgDescriptionVar)
705+ xApplicationAddMainOption(x.GoPointer(), LongNameVar, ShortNameVar, FlagsVar, ArgVar, DescriptionVar, core.NullableStringToPtr(ArgDescriptionVar))
706706
707707 }
708708
@@ -1178,7 +1178,7 @@ func (x *Application) Run(ArgcVar int, ArgvVar []string) int {
11781178 return cret
11791179 }
11801180
1181-var xApplicationSendNotification func(uintptr, string, uintptr)
1181+var xApplicationSendNotification func(uintptr, uintptr, uintptr)
11821182
11831183 // Sends a notification on behalf of @application to the desktop shell.
11841184 // There is no guarantee that the notification is displayed immediately,
@@ -1209,9 +1209,9 @@ var xApplicationSendNotification func(uintptr, string, uintptr)
12091209 //
12101210 // It is an error to call this function if @application has no
12111211 // application ID.
1212-func (x *Application) SendNotification(IdVar string, NotificationVar *Notification) {
1212+func (x *Application) SendNotification(IdVar *string, NotificationVar *Notification) {
12131213
1214- xApplicationSendNotification(x.GoPointer(), IdVar, NotificationVar.GoPointer())
1214+ xApplicationSendNotification(x.GoPointer(), core.NullableStringToPtr(IdVar), NotificationVar.GoPointer())
12151215
12161216 }
12171217
@@ -1225,7 +1225,7 @@ func (x *Application) SetActionGroup(ActionGroupVar ActionGroup) {
12251225
12261226 }
12271227
1228-var xApplicationSetApplicationId func(uintptr, string)
1228+var xApplicationSetApplicationId func(uintptr, uintptr)
12291229
12301230 // Sets the unique identifier for @application.
12311231 //
@@ -1234,9 +1234,9 @@ var xApplicationSetApplicationId func(uintptr, string)
12341234 //
12351235 // If non-%NULL, the application id must be valid. See
12361236 // g_application_id_is_valid().
1237-func (x *Application) SetApplicationId(ApplicationIdVar string) {
1237+func (x *Application) SetApplicationId(ApplicationIdVar *string) {
12381238
1239- xApplicationSetApplicationId(x.GoPointer(), ApplicationIdVar)
1239+ xApplicationSetApplicationId(x.GoPointer(), core.NullableStringToPtr(ApplicationIdVar))
12401240
12411241 }
12421242
@@ -1284,18 +1284,18 @@ func (x *Application) SetInactivityTimeout(InactivityTimeoutVar uint) {
12841284
12851285 }
12861286
1287-var xApplicationSetOptionContextDescription func(uintptr, string)
1287+var xApplicationSetOptionContextDescription func(uintptr, uintptr)
12881288
12891289 // Adds a description to the @application option context.
12901290 //
12911291 // See g_option_context_set_description() for more information.
1292-func (x *Application) SetOptionContextDescription(DescriptionVar string) {
1292+func (x *Application) SetOptionContextDescription(DescriptionVar *string) {
12931293
1294- xApplicationSetOptionContextDescription(x.GoPointer(), DescriptionVar)
1294+ xApplicationSetOptionContextDescription(x.GoPointer(), core.NullableStringToPtr(DescriptionVar))
12951295
12961296 }
12971297
1298-var xApplicationSetOptionContextParameterString func(uintptr, string)
1298+var xApplicationSetOptionContextParameterString func(uintptr, uintptr)
12991299
13001300 // Sets the parameter string to be used by the commandline handling of @application.
13011301 //
@@ -1303,24 +1303,24 @@ var xApplicationSetOptionContextParameterString func(uintptr, string)
13031303 // when the internal #GOptionContext of @application is created.
13041304 //
13051305 // See g_option_context_new() for more information about @parameter_string.
1306-func (x *Application) SetOptionContextParameterString(ParameterStringVar string) {
1306+func (x *Application) SetOptionContextParameterString(ParameterStringVar *string) {
13071307
1308- xApplicationSetOptionContextParameterString(x.GoPointer(), ParameterStringVar)
1308+ xApplicationSetOptionContextParameterString(x.GoPointer(), core.NullableStringToPtr(ParameterStringVar))
13091309
13101310 }
13111311
1312-var xApplicationSetOptionContextSummary func(uintptr, string)
1312+var xApplicationSetOptionContextSummary func(uintptr, uintptr)
13131313
13141314 // Adds a summary to the @application option context.
13151315 //
13161316 // See g_option_context_set_summary() for more information.
1317-func (x *Application) SetOptionContextSummary(SummaryVar string) {
1317+func (x *Application) SetOptionContextSummary(SummaryVar *string) {
13181318
1319- xApplicationSetOptionContextSummary(x.GoPointer(), SummaryVar)
1319+ xApplicationSetOptionContextSummary(x.GoPointer(), core.NullableStringToPtr(SummaryVar))
13201320
13211321 }
13221322
1323-var xApplicationSetResourceBasePath func(uintptr, string)
1323+var xApplicationSetResourceBasePath func(uintptr, uintptr)
13241324
13251325 // Sets (or unsets) the base resource path of @application.
13261326 //
@@ -1355,9 +1355,9 @@ var xApplicationSetResourceBasePath func(uintptr, string)
13551355 // this function during the instance initialization. Alternatively, you
13561356 // can call this function in the #GApplicationClass.startup virtual function,
13571357 // before chaining up to the parent implementation.
1358-func (x *Application) SetResourceBasePath(ResourcePathVar string) {
1358+func (x *Application) SetResourceBasePath(ResourcePathVar *string) {
13591359
1360- xApplicationSetResourceBasePath(x.GoPointer(), ResourcePathVar)
1360+ xApplicationSetResourceBasePath(x.GoPointer(), core.NullableStringToPtr(ResourcePathVar))
13611361
13621362 }
13631363
@@ -1437,7 +1437,7 @@ func (c *Application) SetGoPointer(ptr uintptr) {
14371437 func (x *Application) SetPropertyApplicationId(value string) {
14381438 var v gobject.Value
14391439 v.Init(gobject.TypeStringVal)
1440- v.SetString(value)
1440+ v.SetString(&value)
14411441 x.SetProperty("application-id", &v)
14421442 }
14431443
@@ -1496,7 +1496,7 @@ func (x *Application) GetPropertyIsRemote() bool {
14961496 func (x *Application) SetPropertyResourceBasePath(value string) {
14971497 var v gobject.Value
14981498 v.Init(gobject.TypeStringVal)
1499- v.SetString(value)
1499+ v.SetString(&value)
15001500 x.SetProperty("resource-base-path", &v)
15011501 }
15021502
@@ -1513,7 +1513,7 @@ func (x *Application) GetPropertyResourceBasePath() string {
15131513 func (x *Application) SetPropertyVersion(value string) {
15141514 var v gobject.Value
15151515 v.Init(gobject.TypeStringVal)
1516- v.SetString(value)
1516+ v.SetString(&value)
15171517 x.SetProperty("version", &v)
15181518 }
15191519
M v4/gio/gasyncinitable.go +16 -1
@@ -306,7 +306,22 @@ var xAsyncInitableNewvAsync func(types.GType, uint, *gobject.Parameter, int, uin
306306 // for any errors.
307307 func AsyncInitableNewvAsync(ObjectTypeVar types.GType, NParametersVar uint, ParametersVar *gobject.Parameter, IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
308308
309- xAsyncInitableNewvAsync(ObjectTypeVar, NParametersVar, ParametersVar, IoPriorityVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
309+ var CallbackVarRef uintptr
310+ if CallbackVar != nil {
311+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
312+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
313+ CallbackVarRef = cbRefPtr
314+ } else {
315+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
316+ cbFn := *CallbackVar
317+ cbFn(arg0, arg1, arg2)
318+ }
319+ CallbackVarRef = purego.NewCallback(fcb)
320+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
321+ }
322+ }
323+
324+ xAsyncInitableNewvAsync(ObjectTypeVar, NParametersVar, ParametersVar, IoPriorityVar, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
310325
311326 }
312327
M v4/gio/gbufferedinputstream.go +16 -1
@@ -341,7 +341,22 @@ var xBufferedInputStreamFillAsync func(uintptr, int, int, uintptr, uintptr, uint
341341 // of bytes that are required to fill the buffer.
342342 func (x *BufferedInputStream) FillAsync(CountVar int, IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
343343
344- xBufferedInputStreamFillAsync(x.GoPointer(), CountVar, IoPriorityVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
344+ var CallbackVarRef uintptr
345+ if CallbackVar != nil {
346+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
347+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
348+ CallbackVarRef = cbRefPtr
349+ } else {
350+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
351+ cbFn := *CallbackVar
352+ cbFn(arg0, arg1, arg2)
353+ }
354+ CallbackVarRef = purego.NewCallback(fcb)
355+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
356+ }
357+ }
358+
359+ xBufferedInputStreamFillAsync(x.GoPointer(), CountVar, IoPriorityVar, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
345360
346361 }
347362
M v4/gio/gcancellable.go +31 -1
@@ -290,7 +290,37 @@ 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- cret := xCancellableConnect(x.GoPointer(), glib.NewCallback(CallbackVar), DataVar, glib.NewCallbackNullable(DataDestroyFuncVar))
293+ var CallbackVarRef uintptr
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)
305+ }
306+ }
307+
308+ var DataDestroyFuncVarRef uintptr
309+ if DataDestroyFuncVar != nil {
310+ DataDestroyFuncVarPtr := uintptr(unsafe.Pointer(DataDestroyFuncVar))
311+ if cbRefPtr, ok := glib.GetCallback(DataDestroyFuncVarPtr); ok {
312+ DataDestroyFuncVarRef = cbRefPtr
313+ } else {
314+ fcb := func(arg0 uintptr) {
315+ cbFn := *DataDestroyFuncVar
316+ cbFn(arg0)
317+ }
318+ DataDestroyFuncVarRef = purego.NewCallback(fcb)
319+ glib.SaveCallback(DataDestroyFuncVarPtr, DataDestroyFuncVarRef)
320+ }
321+ }
322+
323+ cret := xCancellableConnect(x.GoPointer(), CallbackVarRef, DataVar, DataDestroyFuncVarRef)
294324 return cret
295325 }
296326
M v4/gio/gcharsetconverter.go +2 -2
@@ -104,7 +104,7 @@ func (c *CharsetConverter) SetGoPointer(ptr uintptr) {
104104 func (x *CharsetConverter) SetPropertyFromCharset(value string) {
105105 var v gobject.Value
106106 v.Init(gobject.TypeStringVal)
107- v.SetString(value)
107+ v.SetString(&value)
108108 x.SetProperty("from-charset", &v)
109109 }
110110
@@ -121,7 +121,7 @@ func (x *CharsetConverter) GetPropertyFromCharset() string {
121121 func (x *CharsetConverter) SetPropertyToCharset(value string) {
122122 var v gobject.Value
123123 v.Init(gobject.TypeStringVal)
124- v.SetString(value)
124+ v.SetString(&value)
125125 x.SetProperty("to-charset", &v)
126126 }
127127
M v4/gio/gcontenttype.go +3 -3
@@ -108,15 +108,15 @@ func ContentTypeGetSymbolicIcon(TypeVar string) *IconBase {
108108 return cls
109109 }
110110
111-var xContentTypeGuess func(string, []byte, uint, *bool) string
111+var xContentTypeGuess func(uintptr, []byte, uint, *bool) string
112112
113113 // Guesses the content type based on example data. If the function is
114114 // uncertain, @result_uncertain will be set to %TRUE. Either @filename
115115 // or @data may be %NULL, in which case the guess will be based solely
116116 // on the other argument.
117-func ContentTypeGuess(FilenameVar string, DataVar []byte, DataSizeVar uint, ResultUncertainVar *bool) string {
117+func ContentTypeGuess(FilenameVar *string, DataVar []byte, DataSizeVar uint, ResultUncertainVar *bool) string {
118118
119- cret := xContentTypeGuess(FilenameVar, DataVar, DataSizeVar, ResultUncertainVar)
119+ cret := xContentTypeGuess(core.NullableStringToPtr(FilenameVar), DataVar, DataSizeVar, ResultUncertainVar)
120120 return cret
121121 }
122122
M v4/gio/gdatainputstream.go +48 -3
@@ -309,7 +309,22 @@ var xDataInputStreamReadLineAsync func(uintptr, int, uintptr, uintptr, uintptr)
309309 // the result of the operation.
310310 func (x *DataInputStream) ReadLineAsync(IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
311311
312- xDataInputStreamReadLineAsync(x.GoPointer(), IoPriorityVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
312+ var CallbackVarRef uintptr
313+ if CallbackVar != nil {
314+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
315+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
316+ CallbackVarRef = cbRefPtr
317+ } else {
318+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
319+ cbFn := *CallbackVar
320+ cbFn(arg0, arg1, arg2)
321+ }
322+ CallbackVarRef = purego.NewCallback(fcb)
323+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
324+ }
325+ }
326+
327+ xDataInputStreamReadLineAsync(x.GoPointer(), IoPriorityVar, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
313328
314329 }
315330
@@ -465,7 +480,22 @@ var xDataInputStreamReadUntilAsync func(uintptr, string, int, uintptr, uintptr,
465480 // g_data_input_stream_read_upto_async() instead.
466481 func (x *DataInputStream) ReadUntilAsync(StopCharsVar string, IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
467482
468- xDataInputStreamReadUntilAsync(x.GoPointer(), StopCharsVar, IoPriorityVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
483+ var CallbackVarRef uintptr
484+ if CallbackVar != nil {
485+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
486+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
487+ CallbackVarRef = cbRefPtr
488+ } else {
489+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
490+ cbFn := *CallbackVar
491+ cbFn(arg0, arg1, arg2)
492+ }
493+ CallbackVarRef = purego.NewCallback(fcb)
494+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
495+ }
496+ }
497+
498+ xDataInputStreamReadUntilAsync(x.GoPointer(), StopCharsVar, IoPriorityVar, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
469499
470500 }
471501
@@ -527,7 +557,22 @@ var xDataInputStreamReadUptoAsync func(uintptr, string, int, int, uintptr, uintp
527557 // the result of the operation.
528558 func (x *DataInputStream) ReadUptoAsync(StopCharsVar string, StopCharsLenVar int, IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
529559
530- xDataInputStreamReadUptoAsync(x.GoPointer(), StopCharsVar, StopCharsLenVar, IoPriorityVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
560+ var CallbackVarRef uintptr
561+ if CallbackVar != nil {
562+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
563+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
564+ CallbackVarRef = cbRefPtr
565+ } else {
566+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
567+ cbFn := *CallbackVar
568+ cbFn(arg0, arg1, arg2)
569+ }
570+ CallbackVarRef = purego.NewCallback(fcb)
571+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
572+ }
573+ }
574+
575+ xDataInputStreamReadUptoAsync(x.GoPointer(), StopCharsVar, StopCharsLenVar, IoPriorityVar, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
531576
532577 }
533578
M v4/gio/gdbusactiongroup.go +3 -3
@@ -302,7 +302,7 @@ func (x *DBusActionGroup) ChangeActionStateFull(ActionNameVar string, ValueVar *
302302
303303 }
304304
305-var xDBusActionGroupGet func(uintptr, string, string) uintptr
305+var xDBusActionGroupGet func(uintptr, uintptr, string) uintptr
306306
307307 // Obtains a #GDBusActionGroup for the action group which is exported at
308308 // the given @bus_name and @object_path.
@@ -317,10 +317,10 @@ var xDBusActionGroupGet func(uintptr, string, string) uintptr
317317 // already be filled in. The correct thing to do is connect the signals
318318 // for the action group to monitor for changes and then to call
319319 // g_action_group_list_actions() to get the initial list.
320-func DBusActionGroupGet(ConnectionVar *DBusConnection, BusNameVar string, ObjectPathVar string) *DBusActionGroup {
320+func DBusActionGroupGet(ConnectionVar *DBusConnection, BusNameVar *string, ObjectPathVar string) *DBusActionGroup {
321321 var cls *DBusActionGroup
322322
323- cret := xDBusActionGroupGet(ConnectionVar.GoPointer(), BusNameVar, ObjectPathVar)
323+ cret := xDBusActionGroupGet(ConnectionVar.GoPointer(), core.NullableStringToPtr(BusNameVar), ObjectPathVar)
324324
325325 if cret == 0 {
326326 return nil
M v4/gio/gdbusaddress.go +18 -1
@@ -2,6 +2,8 @@
22 package gio
33
44 import (
5+ "unsafe"
6+
57 "github.com/jwijenbergh/purego"
68 "github.com/jwijenbergh/puregotk/pkg/core"
79 "github.com/jwijenbergh/puregotk/v4/glib"
@@ -56,7 +58,22 @@ var xDbusAddressGetStream func(string, uintptr, uintptr, uintptr)
5658 // g_dbus_address_get_stream_sync() for the synchronous version.
5759 func DbusAddressGetStream(AddressVar string, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
5860
59- xDbusAddressGetStream(AddressVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
61+ var CallbackVarRef uintptr
62+ if CallbackVar != nil {
63+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
64+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
65+ CallbackVarRef = cbRefPtr
66+ } else {
67+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
68+ cbFn := *CallbackVar
69+ cbFn(arg0, arg1, arg2)
70+ }
71+ CallbackVarRef = purego.NewCallback(fcb)
72+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
73+ }
74+ }
75+
76+ xDbusAddressGetStream(AddressVar, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
6077
6178 }
6279
M v4/gio/gdbusconnection.go +244 -34
@@ -225,7 +225,22 @@ var xBusGet func(BusType, uintptr, uintptr, uintptr)
225225 // the synchronous version.
226226 func BusGet(BusTypeVar BusType, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
227227
228- xBusGet(BusTypeVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
228+ var CallbackVarRef uintptr
229+ if CallbackVar != nil {
230+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
231+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
232+ CallbackVarRef = cbRefPtr
233+ } else {
234+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
235+ cbFn := *CallbackVar
236+ cbFn(arg0, arg1, arg2)
237+ }
238+ CallbackVarRef = purego.NewCallback(fcb)
239+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
240+ }
241+ }
242+
243+ xBusGet(BusTypeVar, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
229244
230245 }
231246
@@ -446,7 +461,7 @@ func NewDBusConnectionForAddressSync(AddressVar string, FlagsVar DBusConnectionF
446461
447462 }
448463
449-var xNewDBusConnectionSync func(uintptr, string, DBusConnectionFlags, uintptr, uintptr, **glib.Error) uintptr
464+var xNewDBusConnectionSync func(uintptr, uintptr, DBusConnectionFlags, uintptr, uintptr, **glib.Error) uintptr
450465
451466 // Synchronously sets up a D-Bus connection for exchanging D-Bus messages
452467 // with the end represented by @stream.
@@ -463,11 +478,11 @@ var xNewDBusConnectionSync func(uintptr, string, DBusConnectionFlags, uintptr, u
463478 //
464479 // This is a synchronous failable constructor. See
465480 // g_dbus_connection_new() for the asynchronous version.
466-func NewDBusConnectionSync(StreamVar *IOStream, GuidVar string, FlagsVar DBusConnectionFlags, ObserverVar *DBusAuthObserver, CancellableVar *Cancellable) (*DBusConnection, error) {
481+func NewDBusConnectionSync(StreamVar *IOStream, GuidVar *string, FlagsVar DBusConnectionFlags, ObserverVar *DBusAuthObserver, CancellableVar *Cancellable) (*DBusConnection, error) {
467482 var cls *DBusConnection
468483 var cerr *glib.Error
469484
470- cret := xNewDBusConnectionSync(StreamVar.GoPointer(), GuidVar, FlagsVar, ObserverVar.GoPointer(), CancellableVar.GoPointer(), &cerr)
485+ cret := xNewDBusConnectionSync(StreamVar.GoPointer(), core.NullableStringToPtr(GuidVar), FlagsVar, ObserverVar.GoPointer(), CancellableVar.GoPointer(), &cerr)
471486
472487 if cret == 0 {
473488 return nil, cerr
@@ -512,11 +527,41 @@ var xDBusConnectionAddFilter func(uintptr, uintptr, uintptr, uintptr) uint
512527 // destroyed.)
513528 func (x *DBusConnection) AddFilter(FilterFunctionVar *DBusMessageFilterFunction, UserDataVar uintptr, UserDataFreeFuncVar *glib.DestroyNotify) uint {
514529
515- cret := xDBusConnectionAddFilter(x.GoPointer(), glib.NewCallback(FilterFunctionVar), UserDataVar, glib.NewCallback(UserDataFreeFuncVar))
530+ var FilterFunctionVarRef uintptr
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)
542+ }
543+ }
544+
545+ var UserDataFreeFuncVarRef uintptr
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)
557+ }
558+ }
559+
560+ cret := xDBusConnectionAddFilter(x.GoPointer(), FilterFunctionVarRef, UserDataVar, UserDataFreeFuncVarRef)
516561 return cret
517562 }
518563
519-var xDBusConnectionCall func(uintptr, string, string, string, string, *glib.Variant, *glib.VariantType, DBusCallFlags, int, uintptr, uintptr, uintptr)
564+var xDBusConnectionCall func(uintptr, uintptr, string, string, string, *glib.Variant, *glib.VariantType, DBusCallFlags, int, uintptr, uintptr, uintptr)
520565
521566 // Asynchronously invokes the @method_name method on the
522567 // @interface_name D-Bus interface on the remote object at
@@ -565,9 +610,24 @@ var xDBusConnectionCall func(uintptr, string, string, string, string, *glib.Vari
565610 //
566611 // If @callback is %NULL then the D-Bus method call message will be sent with
567612 // the %G_DBUS_MESSAGE_FLAGS_NO_REPLY_EXPECTED flag set.
568-func (x *DBusConnection) Call(BusNameVar string, ObjectPathVar string, InterfaceNameVar string, MethodNameVar string, ParametersVar *glib.Variant, ReplyTypeVar *glib.VariantType, FlagsVar DBusCallFlags, TimeoutMsecVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
613+func (x *DBusConnection) Call(BusNameVar *string, ObjectPathVar string, InterfaceNameVar string, MethodNameVar string, ParametersVar *glib.Variant, ReplyTypeVar *glib.VariantType, FlagsVar DBusCallFlags, TimeoutMsecVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
614+
615+ var CallbackVarRef uintptr
616+ if CallbackVar != nil {
617+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
618+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
619+ CallbackVarRef = cbRefPtr
620+ } else {
621+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
622+ cbFn := *CallbackVar
623+ cbFn(arg0, arg1, arg2)
624+ }
625+ CallbackVarRef = purego.NewCallback(fcb)
626+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
627+ }
628+ }
569629
570- xDBusConnectionCall(x.GoPointer(), BusNameVar, ObjectPathVar, InterfaceNameVar, MethodNameVar, ParametersVar, ReplyTypeVar, FlagsVar, TimeoutMsecVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
630+ xDBusConnectionCall(x.GoPointer(), core.NullableStringToPtr(BusNameVar), ObjectPathVar, InterfaceNameVar, MethodNameVar, ParametersVar, ReplyTypeVar, FlagsVar, TimeoutMsecVar, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
571631
572632 }
573633
@@ -585,7 +645,7 @@ func (x *DBusConnection) CallFinish(ResVar AsyncResult) (*glib.Variant, error) {
585645
586646 }
587647
588-var xDBusConnectionCallSync func(uintptr, string, string, string, string, *glib.Variant, *glib.VariantType, DBusCallFlags, int, uintptr, **glib.Error) *glib.Variant
648+var xDBusConnectionCallSync func(uintptr, uintptr, string, string, string, *glib.Variant, *glib.VariantType, DBusCallFlags, int, uintptr, **glib.Error) *glib.Variant
589649
590650 // Synchronously invokes the @method_name method on the
591651 // @interface_name D-Bus interface on the remote object at
@@ -625,10 +685,10 @@ var xDBusConnectionCallSync func(uintptr, string, string, string, string, *glib.
625685 // The calling thread is blocked until a reply is received. See
626686 // g_dbus_connection_call() for the asynchronous version of
627687 // this method.
628-func (x *DBusConnection) CallSync(BusNameVar string, ObjectPathVar string, InterfaceNameVar string, MethodNameVar string, ParametersVar *glib.Variant, ReplyTypeVar *glib.VariantType, FlagsVar DBusCallFlags, TimeoutMsecVar int, CancellableVar *Cancellable) (*glib.Variant, error) {
688+func (x *DBusConnection) CallSync(BusNameVar *string, ObjectPathVar string, InterfaceNameVar string, MethodNameVar string, ParametersVar *glib.Variant, ReplyTypeVar *glib.VariantType, FlagsVar DBusCallFlags, TimeoutMsecVar int, CancellableVar *Cancellable) (*glib.Variant, error) {
629689 var cerr *glib.Error
630690
631- cret := xDBusConnectionCallSync(x.GoPointer(), BusNameVar, ObjectPathVar, InterfaceNameVar, MethodNameVar, ParametersVar, ReplyTypeVar, FlagsVar, TimeoutMsecVar, CancellableVar.GoPointer(), &cerr)
691+ cret := xDBusConnectionCallSync(x.GoPointer(), core.NullableStringToPtr(BusNameVar), ObjectPathVar, InterfaceNameVar, MethodNameVar, ParametersVar, ReplyTypeVar, FlagsVar, TimeoutMsecVar, CancellableVar.GoPointer(), &cerr)
632692 if cerr == nil {
633693 return cret, nil
634694 }
@@ -636,7 +696,7 @@ func (x *DBusConnection) CallSync(BusNameVar string, ObjectPathVar string, Inter
636696
637697 }
638698
639-var xDBusConnectionCallWithUnixFdList func(uintptr, string, string, string, string, *glib.Variant, *glib.VariantType, DBusCallFlags, int, uintptr, uintptr, uintptr, uintptr)
699+var xDBusConnectionCallWithUnixFdList func(uintptr, uintptr, string, string, string, *glib.Variant, *glib.VariantType, DBusCallFlags, int, uintptr, uintptr, uintptr, uintptr)
640700
641701 // Like g_dbus_connection_call() but also takes a #GUnixFDList object.
642702 //
@@ -653,9 +713,24 @@ var xDBusConnectionCallWithUnixFdList func(uintptr, string, string, string, stri
653713 // value of type %G_VARIANT_TYPE_HANDLE in the body of the message.
654714 //
655715 // This method is only available on UNIX.
656-func (x *DBusConnection) CallWithUnixFdList(BusNameVar string, ObjectPathVar string, InterfaceNameVar string, MethodNameVar string, ParametersVar *glib.Variant, ReplyTypeVar *glib.VariantType, FlagsVar DBusCallFlags, TimeoutMsecVar int, FdListVar *UnixFDList, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
716+func (x *DBusConnection) CallWithUnixFdList(BusNameVar *string, ObjectPathVar string, InterfaceNameVar string, MethodNameVar string, ParametersVar *glib.Variant, ReplyTypeVar *glib.VariantType, FlagsVar DBusCallFlags, TimeoutMsecVar int, FdListVar *UnixFDList, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
717+
718+ var CallbackVarRef uintptr
719+ if CallbackVar != nil {
720+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
721+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
722+ CallbackVarRef = cbRefPtr
723+ } else {
724+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
725+ cbFn := *CallbackVar
726+ cbFn(arg0, arg1, arg2)
727+ }
728+ CallbackVarRef = purego.NewCallback(fcb)
729+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
730+ }
731+ }
657732
658- xDBusConnectionCallWithUnixFdList(x.GoPointer(), BusNameVar, ObjectPathVar, InterfaceNameVar, MethodNameVar, ParametersVar, ReplyTypeVar, FlagsVar, TimeoutMsecVar, FdListVar.GoPointer(), CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
733+ xDBusConnectionCallWithUnixFdList(x.GoPointer(), core.NullableStringToPtr(BusNameVar), ObjectPathVar, InterfaceNameVar, MethodNameVar, ParametersVar, ReplyTypeVar, FlagsVar, TimeoutMsecVar, FdListVar.GoPointer(), CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
659734
660735 }
661736
@@ -684,17 +759,17 @@ func (x *DBusConnection) CallWithUnixFdListFinish(OutFdListVar **UnixFDList, Res
684759
685760 }
686761
687-var xDBusConnectionCallWithUnixFdListSync func(uintptr, string, string, string, string, *glib.Variant, *glib.VariantType, DBusCallFlags, int, uintptr, **UnixFDList, uintptr, **glib.Error) *glib.Variant
762+var xDBusConnectionCallWithUnixFdListSync func(uintptr, uintptr, string, string, string, *glib.Variant, *glib.VariantType, DBusCallFlags, int, uintptr, **UnixFDList, uintptr, **glib.Error) *glib.Variant
688763
689764 // Like g_dbus_connection_call_sync() but also takes and returns #GUnixFDList objects.
690765 // See g_dbus_connection_call_with_unix_fd_list() and
691766 // g_dbus_connection_call_with_unix_fd_list_finish() for more details.
692767 //
693768 // This method is only available on UNIX.
694-func (x *DBusConnection) CallWithUnixFdListSync(BusNameVar string, ObjectPathVar string, InterfaceNameVar string, MethodNameVar string, ParametersVar *glib.Variant, ReplyTypeVar *glib.VariantType, FlagsVar DBusCallFlags, TimeoutMsecVar int, FdListVar *UnixFDList, OutFdListVar **UnixFDList, CancellableVar *Cancellable) (*glib.Variant, error) {
769+func (x *DBusConnection) CallWithUnixFdListSync(BusNameVar *string, ObjectPathVar string, InterfaceNameVar string, MethodNameVar string, ParametersVar *glib.Variant, ReplyTypeVar *glib.VariantType, FlagsVar DBusCallFlags, TimeoutMsecVar int, FdListVar *UnixFDList, OutFdListVar **UnixFDList, CancellableVar *Cancellable) (*glib.Variant, error) {
695770 var cerr *glib.Error
696771
697- cret := xDBusConnectionCallWithUnixFdListSync(x.GoPointer(), BusNameVar, ObjectPathVar, InterfaceNameVar, MethodNameVar, ParametersVar, ReplyTypeVar, FlagsVar, TimeoutMsecVar, FdListVar.GoPointer(), OutFdListVar, CancellableVar.GoPointer(), &cerr)
772+ cret := xDBusConnectionCallWithUnixFdListSync(x.GoPointer(), core.NullableStringToPtr(BusNameVar), ObjectPathVar, InterfaceNameVar, MethodNameVar, ParametersVar, ReplyTypeVar, FlagsVar, TimeoutMsecVar, FdListVar.GoPointer(), OutFdListVar, CancellableVar.GoPointer(), &cerr)
698773 if cerr == nil {
699774 return cret, nil
700775 }
@@ -730,7 +805,22 @@ var xDBusConnectionClose func(uintptr, uintptr, uintptr, uintptr)
730805 // version.
731806 func (x *DBusConnection) Close(CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
732807
733- xDBusConnectionClose(x.GoPointer(), CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
808+ var CallbackVarRef uintptr
809+ if CallbackVar != nil {
810+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
811+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
812+ CallbackVarRef = cbRefPtr
813+ } else {
814+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
815+ cbFn := *CallbackVar
816+ cbFn(arg0, arg1, arg2)
817+ }
818+ CallbackVarRef = purego.NewCallback(fcb)
819+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
820+ }
821+ }
822+
823+ xDBusConnectionClose(x.GoPointer(), CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
734824
735825 }
736826
@@ -765,7 +855,7 @@ func (x *DBusConnection) CloseSync(CancellableVar *Cancellable) (bool, error) {
765855
766856 }
767857
768-var xDBusConnectionEmitSignal func(uintptr, string, string, string, string, *glib.Variant, **glib.Error) bool
858+var xDBusConnectionEmitSignal func(uintptr, uintptr, string, string, string, *glib.Variant, **glib.Error) bool
769859
770860 // Emits a signal.
771861 //
@@ -774,10 +864,10 @@ var xDBusConnectionEmitSignal func(uintptr, string, string, string, string, *gli
774864 // This can only fail if @parameters is not compatible with the D-Bus protocol
775865 // (%G_IO_ERROR_INVALID_ARGUMENT), or if @connection has been closed
776866 // (%G_IO_ERROR_CLOSED).
777-func (x *DBusConnection) EmitSignal(DestinationBusNameVar string, ObjectPathVar string, InterfaceNameVar string, SignalNameVar string, ParametersVar *glib.Variant) (bool, error) {
867+func (x *DBusConnection) EmitSignal(DestinationBusNameVar *string, ObjectPathVar string, InterfaceNameVar string, SignalNameVar string, ParametersVar *glib.Variant) (bool, error) {
778868 var cerr *glib.Error
779869
780- cret := xDBusConnectionEmitSignal(x.GoPointer(), DestinationBusNameVar, ObjectPathVar, InterfaceNameVar, SignalNameVar, ParametersVar, &cerr)
870+ cret := xDBusConnectionEmitSignal(x.GoPointer(), core.NullableStringToPtr(DestinationBusNameVar), ObjectPathVar, InterfaceNameVar, SignalNameVar, ParametersVar, &cerr)
781871 if cerr == nil {
782872 return cret, nil
783873 }
@@ -866,7 +956,22 @@ var xDBusConnectionFlush func(uintptr, uintptr, uintptr, uintptr)
866956 // version.
867957 func (x *DBusConnection) Flush(CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
868958
869- xDBusConnectionFlush(x.GoPointer(), CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
959+ var CallbackVarRef uintptr
960+ if CallbackVar != nil {
961+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
962+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
963+ CallbackVarRef = cbRefPtr
964+ } else {
965+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
966+ cbFn := *CallbackVar
967+ cbFn(arg0, arg1, arg2)
968+ }
969+ CallbackVarRef = purego.NewCallback(fcb)
970+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
971+ }
972+ }
973+
974+ xDBusConnectionFlush(x.GoPointer(), CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
870975
871976 }
872977
@@ -1063,7 +1168,22 @@ var xDBusConnectionRegisterObject func(uintptr, string, *DBusInterfaceInfo, *DBu
10631168 func (x *DBusConnection) RegisterObject(ObjectPathVar string, InterfaceInfoVar *DBusInterfaceInfo, VtableVar *DBusInterfaceVTable, UserDataVar uintptr, UserDataFreeFuncVar *glib.DestroyNotify) (uint, error) {
10641169 var cerr *glib.Error
10651170
1066- cret := xDBusConnectionRegisterObject(x.GoPointer(), ObjectPathVar, InterfaceInfoVar, VtableVar, UserDataVar, glib.NewCallback(UserDataFreeFuncVar), &cerr)
1171+ var UserDataFreeFuncVarRef uintptr
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)
1183+ }
1184+ }
1185+
1186+ cret := xDBusConnectionRegisterObject(x.GoPointer(), ObjectPathVar, InterfaceInfoVar, VtableVar, UserDataVar, UserDataFreeFuncVarRef, &cerr)
10671187 if cerr == nil {
10681188 return cret, nil
10691189 }
@@ -1155,7 +1275,22 @@ var xDBusConnectionRegisterSubtree func(uintptr, string, *DBusSubtreeVTable, DBu
11551275 func (x *DBusConnection) RegisterSubtree(ObjectPathVar string, VtableVar *DBusSubtreeVTable, FlagsVar DBusSubtreeFlags, UserDataVar uintptr, UserDataFreeFuncVar *glib.DestroyNotify) (uint, error) {
11561276 var cerr *glib.Error
11571277
1158- cret := xDBusConnectionRegisterSubtree(x.GoPointer(), ObjectPathVar, VtableVar, FlagsVar, UserDataVar, glib.NewCallback(UserDataFreeFuncVar), &cerr)
1278+ var UserDataFreeFuncVarRef uintptr
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)
1290+ }
1291+ }
1292+
1293+ cret := xDBusConnectionRegisterSubtree(x.GoPointer(), ObjectPathVar, VtableVar, FlagsVar, UserDataVar, UserDataFreeFuncVarRef, &cerr)
11591294 if cerr == nil {
11601295 return cret, nil
11611296 }
@@ -1248,7 +1383,22 @@ var xDBusConnectionSendMessageWithReply func(uintptr, uintptr, DBusSendMessageFl
12481383 // UNIX file descriptors.
12491384 func (x *DBusConnection) SendMessageWithReply(MessageVar *DBusMessage, FlagsVar DBusSendMessageFlags, TimeoutMsecVar int, OutSerialVar *uint32, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
12501385
1251- xDBusConnectionSendMessageWithReply(x.GoPointer(), MessageVar.GoPointer(), FlagsVar, TimeoutMsecVar, OutSerialVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
1386+ var CallbackVarRef uintptr
1387+ if CallbackVar != nil {
1388+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
1389+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
1390+ CallbackVarRef = cbRefPtr
1391+ } else {
1392+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
1393+ cbFn := *CallbackVar
1394+ cbFn(arg0, arg1, arg2)
1395+ }
1396+ CallbackVarRef = purego.NewCallback(fcb)
1397+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
1398+ }
1399+ }
1400+
1401+ xDBusConnectionSendMessageWithReply(x.GoPointer(), MessageVar.GoPointer(), FlagsVar, TimeoutMsecVar, OutSerialVar, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
12521402
12531403 }
12541404
@@ -1352,7 +1502,7 @@ func (x *DBusConnection) SetExitOnClose(ExitOnCloseVar bool) {
13521502
13531503 }
13541504
1355-var xDBusConnectionSignalSubscribe func(uintptr, string, string, string, string, string, DBusSignalFlags, uintptr, uintptr, uintptr) uint
1505+var xDBusConnectionSignalSubscribe func(uintptr, uintptr, uintptr, uintptr, uintptr, uintptr, DBusSignalFlags, uintptr, uintptr, uintptr) uint
13561506
13571507 // Subscribes to signals on @connection and invokes @callback whenever
13581508 // the signal is received. Note that @callback will be invoked in the
@@ -1403,9 +1553,39 @@ var xDBusConnectionSignalSubscribe func(uintptr, string, string, string, string,
14031553 // to never be zero.
14041554 //
14051555 // This function can never fail.
1406-func (x *DBusConnection) SignalSubscribe(SenderVar string, InterfaceNameVar string, MemberVar string, ObjectPathVar string, Arg0Var string, FlagsVar DBusSignalFlags, CallbackVar *DBusSignalCallback, UserDataVar uintptr, UserDataFreeFuncVar *glib.DestroyNotify) uint {
1556+func (x *DBusConnection) SignalSubscribe(SenderVar *string, InterfaceNameVar *string, MemberVar *string, ObjectPathVar *string, Arg0Var *string, FlagsVar DBusSignalFlags, CallbackVar *DBusSignalCallback, UserDataVar uintptr, UserDataFreeFuncVar *glib.DestroyNotify) uint {
1557+
1558+ var CallbackVarRef uintptr
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)
1570+ }
1571+ }
14071572
1408- cret := xDBusConnectionSignalSubscribe(x.GoPointer(), SenderVar, InterfaceNameVar, MemberVar, ObjectPathVar, Arg0Var, FlagsVar, glib.NewCallback(CallbackVar), UserDataVar, glib.NewCallbackNullable(UserDataFreeFuncVar))
1573+ var UserDataFreeFuncVarRef uintptr
1574+ if UserDataFreeFuncVar != nil {
1575+ UserDataFreeFuncVarPtr := uintptr(unsafe.Pointer(UserDataFreeFuncVar))
1576+ if cbRefPtr, ok := glib.GetCallback(UserDataFreeFuncVarPtr); ok {
1577+ UserDataFreeFuncVarRef = cbRefPtr
1578+ } else {
1579+ fcb := func(arg0 uintptr) {
1580+ cbFn := *UserDataFreeFuncVar
1581+ cbFn(arg0)
1582+ }
1583+ UserDataFreeFuncVarRef = purego.NewCallback(fcb)
1584+ glib.SaveCallback(UserDataFreeFuncVarPtr, UserDataFreeFuncVarRef)
1585+ }
1586+ }
1587+
1588+ cret := xDBusConnectionSignalSubscribe(x.GoPointer(), core.NullableStringToPtr(SenderVar), core.NullableStringToPtr(InterfaceNameVar), core.NullableStringToPtr(MemberVar), core.NullableStringToPtr(ObjectPathVar), core.NullableStringToPtr(Arg0Var), FlagsVar, CallbackVarRef, UserDataVar, UserDataFreeFuncVarRef)
14091589 return cret
14101590 }
14111591
@@ -1504,7 +1684,7 @@ func (c *DBusConnection) SetGoPointer(ptr uintptr) {
15041684 func (x *DBusConnection) SetPropertyAddress(value string) {
15051685 var v gobject.Value
15061686 v.Init(gobject.TypeStringVal)
1507- v.SetString(value)
1687+ v.SetString(&value)
15081688 x.SetProperty("address", &v)
15091689 }
15101690
@@ -1569,7 +1749,7 @@ func (x *DBusConnection) GetPropertyExitOnClose() bool {
15691749 func (x *DBusConnection) SetPropertyGuid(value string) {
15701750 var v gobject.Value
15711751 v.Init(gobject.TypeStringVal)
1572- v.SetString(value)
1752+ v.SetString(&value)
15731753 x.SetProperty("guid", &v)
15741754 }
15751755
@@ -1770,7 +1950,7 @@ func (x *DBusConnection) Init(CancellableVar *Cancellable) (bool, error) {
17701950
17711951 }
17721952
1773-var xDBusConnectionNew func(uintptr, string, DBusConnectionFlags, uintptr, uintptr, uintptr, uintptr)
1953+var xDBusConnectionNew func(uintptr, uintptr, DBusConnectionFlags, uintptr, uintptr, uintptr, uintptr)
17741954
17751955 // Asynchronously sets up a D-Bus connection for exchanging D-Bus messages
17761956 // with the end represented by @stream.
@@ -1792,9 +1972,24 @@ var xDBusConnectionNew func(uintptr, string, DBusConnectionFlags, uintptr, uintp
17921972 // This is an asynchronous failable constructor. See
17931973 // g_dbus_connection_new_sync() for the synchronous
17941974 // version.
1795-func DBusConnectionNew(StreamVar *IOStream, GuidVar string, FlagsVar DBusConnectionFlags, ObserverVar *DBusAuthObserver, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
1975+func DBusConnectionNew(StreamVar *IOStream, GuidVar *string, FlagsVar DBusConnectionFlags, ObserverVar *DBusAuthObserver, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
1976+
1977+ var CallbackVarRef uintptr
1978+ if CallbackVar != nil {
1979+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
1980+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
1981+ CallbackVarRef = cbRefPtr
1982+ } else {
1983+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
1984+ cbFn := *CallbackVar
1985+ cbFn(arg0, arg1, arg2)
1986+ }
1987+ CallbackVarRef = purego.NewCallback(fcb)
1988+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
1989+ }
1990+ }
17961991
1797- xDBusConnectionNew(StreamVar.GoPointer(), GuidVar, FlagsVar, ObserverVar.GoPointer(), CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
1992+ xDBusConnectionNew(StreamVar.GoPointer(), core.NullableStringToPtr(GuidVar), FlagsVar, ObserverVar.GoPointer(), CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
17981993
17991994 }
18001995
@@ -1824,7 +2019,22 @@ var xDBusConnectionNewForAddress func(string, DBusConnectionFlags, uintptr, uint
18242019 // version.
18252020 func DBusConnectionNewForAddress(AddressVar string, FlagsVar DBusConnectionFlags, ObserverVar *DBusAuthObserver, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
18262021
1827- xDBusConnectionNewForAddress(AddressVar, FlagsVar, ObserverVar.GoPointer(), CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
2022+ var CallbackVarRef uintptr
2023+ if CallbackVar != nil {
2024+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
2025+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
2026+ CallbackVarRef = cbRefPtr
2027+ } else {
2028+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
2029+ cbFn := *CallbackVar
2030+ cbFn(arg0, arg1, arg2)
2031+ }
2032+ CallbackVarRef = purego.NewCallback(fcb)
2033+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
2034+ }
2035+ }
2036+
2037+ xDBusConnectionNewForAddress(AddressVar, FlagsVar, ObserverVar.GoPointer(), CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
18282038
18292039 }
18302040
M v4/gio/gdbusmenumodel.go +3 -3
@@ -37,7 +37,7 @@ func (c *DBusMenuModel) SetGoPointer(ptr uintptr) {
3737 c.Ptr = ptr
3838 }
3939
40-var xDBusMenuModelGet func(uintptr, string, string) uintptr
40+var xDBusMenuModelGet func(uintptr, uintptr, string) uintptr
4141
4242 // Obtains a #GDBusMenuModel for the menu model which is exported
4343 // at the given @bus_name and @object_path.
@@ -47,10 +47,10 @@ var xDBusMenuModelGet func(uintptr, string, string) uintptr
4747 // with respect to this context. All calls on the returned menu model
4848 // (and linked models) must also originate from this same context, with
4949 // the thread default main context unchanged.
50-func DBusMenuModelGet(ConnectionVar *DBusConnection, BusNameVar string, ObjectPathVar string) *DBusMenuModel {
50+func DBusMenuModelGet(ConnectionVar *DBusConnection, BusNameVar *string, ObjectPathVar string) *DBusMenuModel {
5151 var cls *DBusMenuModel
5252
53- cret := xDBusMenuModelGet(ConnectionVar.GoPointer(), BusNameVar, ObjectPathVar)
53+ cret := xDBusMenuModelGet(ConnectionVar.GoPointer(), core.NullableStringToPtr(BusNameVar), ObjectPathVar)
5454
5555 if cret == 0 {
5656 return nil
M v4/gio/gdbusmessage.go +21 -21
@@ -69,13 +69,13 @@ func NewDBusMessageFromBlob(BlobVar []byte, BlobLenVar uint, CapabilitiesVar DBu
6969
7070 }
7171
72-var xNewDBusMessageMethodCall func(string, string, string, string) uintptr
72+var xNewDBusMessageMethodCall func(uintptr, string, uintptr, string) uintptr
7373
7474 // Creates a new #GDBusMessage for a method call.
75-func NewDBusMessageMethodCall(NameVar string, PathVar string, InterfaceVar string, MethodVar string) *DBusMessage {
75+func NewDBusMessageMethodCall(NameVar *string, PathVar string, InterfaceVar *string, MethodVar string) *DBusMessage {
7676 var cls *DBusMessage
7777
78- cret := xNewDBusMessageMethodCall(NameVar, PathVar, InterfaceVar, MethodVar)
78+ cret := xNewDBusMessageMethodCall(core.NullableStringToPtr(NameVar), PathVar, core.NullableStringToPtr(InterfaceVar), MethodVar)
7979
8080 if cret == 0 {
8181 return nil
@@ -478,12 +478,12 @@ func (x *DBusMessage) SetByteOrder(ByteOrderVar DBusMessageByteOrder) {
478478
479479 }
480480
481-var xDBusMessageSetDestination func(uintptr, string)
481+var xDBusMessageSetDestination func(uintptr, uintptr)
482482
483483 // Convenience setter for the %G_DBUS_MESSAGE_HEADER_FIELD_DESTINATION header field.
484-func (x *DBusMessage) SetDestination(ValueVar string) {
484+func (x *DBusMessage) SetDestination(ValueVar *string) {
485485
486- xDBusMessageSetDestination(x.GoPointer(), ValueVar)
486+ xDBusMessageSetDestination(x.GoPointer(), core.NullableStringToPtr(ValueVar))
487487
488488 }
489489
@@ -516,21 +516,21 @@ func (x *DBusMessage) SetHeader(HeaderFieldVar DBusMessageHeaderField, ValueVar
516516
517517 }
518518
519-var xDBusMessageSetInterface func(uintptr, string)
519+var xDBusMessageSetInterface func(uintptr, uintptr)
520520
521521 // Convenience setter for the %G_DBUS_MESSAGE_HEADER_FIELD_INTERFACE header field.
522-func (x *DBusMessage) SetInterface(ValueVar string) {
522+func (x *DBusMessage) SetInterface(ValueVar *string) {
523523
524- xDBusMessageSetInterface(x.GoPointer(), ValueVar)
524+ xDBusMessageSetInterface(x.GoPointer(), core.NullableStringToPtr(ValueVar))
525525
526526 }
527527
528-var xDBusMessageSetMember func(uintptr, string)
528+var xDBusMessageSetMember func(uintptr, uintptr)
529529
530530 // Convenience setter for the %G_DBUS_MESSAGE_HEADER_FIELD_MEMBER header field.
531-func (x *DBusMessage) SetMember(ValueVar string) {
531+func (x *DBusMessage) SetMember(ValueVar *string) {
532532
533- xDBusMessageSetMember(x.GoPointer(), ValueVar)
533+ xDBusMessageSetMember(x.GoPointer(), core.NullableStringToPtr(ValueVar))
534534
535535 }
536536
@@ -552,12 +552,12 @@ func (x *DBusMessage) SetNumUnixFds(ValueVar uint32) {
552552
553553 }
554554
555-var xDBusMessageSetPath func(uintptr, string)
555+var xDBusMessageSetPath func(uintptr, uintptr)
556556
557557 // Convenience setter for the %G_DBUS_MESSAGE_HEADER_FIELD_PATH header field.
558-func (x *DBusMessage) SetPath(ValueVar string) {
558+func (x *DBusMessage) SetPath(ValueVar *string) {
559559
560- xDBusMessageSetPath(x.GoPointer(), ValueVar)
560+ xDBusMessageSetPath(x.GoPointer(), core.NullableStringToPtr(ValueVar))
561561
562562 }
563563
@@ -570,12 +570,12 @@ func (x *DBusMessage) SetReplySerial(ValueVar uint32) {
570570
571571 }
572572
573-var xDBusMessageSetSender func(uintptr, string)
573+var xDBusMessageSetSender func(uintptr, uintptr)
574574
575575 // Convenience setter for the %G_DBUS_MESSAGE_HEADER_FIELD_SENDER header field.
576-func (x *DBusMessage) SetSender(ValueVar string) {
576+func (x *DBusMessage) SetSender(ValueVar *string) {
577577
578- xDBusMessageSetSender(x.GoPointer(), ValueVar)
578+ xDBusMessageSetSender(x.GoPointer(), core.NullableStringToPtr(ValueVar))
579579
580580 }
581581
@@ -591,12 +591,12 @@ func (x *DBusMessage) SetSerial(SerialVar uint32) {
591591
592592 }
593593
594-var xDBusMessageSetSignature func(uintptr, string)
594+var xDBusMessageSetSignature func(uintptr, uintptr)
595595
596596 // Convenience setter for the %G_DBUS_MESSAGE_HEADER_FIELD_SIGNATURE header field.
597-func (x *DBusMessage) SetSignature(ValueVar string) {
597+func (x *DBusMessage) SetSignature(ValueVar *string) {
598598
599- xDBusMessageSetSignature(x.GoPointer(), ValueVar)
599+ xDBusMessageSetSignature(x.GoPointer(), core.NullableStringToPtr(ValueVar))
600600
601601 }
602602
M v4/gio/gdbusnameowning.go +109 -2
@@ -2,6 +2,8 @@
22 package gio
33
44 import (
5+ "unsafe"
6+
57 "github.com/jwijenbergh/purego"
68 "github.com/jwijenbergh/puregotk/pkg/core"
79 "github.com/jwijenbergh/puregotk/v4/glib"
@@ -71,7 +73,67 @@ var xBusOwnName func(BusType, string, BusNameOwnerFlags, uintptr, uintptr, uintp
7173 // unregister the objects (if any) in @name_lost_handler.
7274 func BusOwnName(BusTypeVar BusType, NameVar string, FlagsVar BusNameOwnerFlags, BusAcquiredHandlerVar *BusAcquiredCallback, NameAcquiredHandlerVar *BusNameAcquiredCallback, NameLostHandlerVar *BusNameLostCallback, UserDataVar uintptr, UserDataFreeFuncVar *glib.DestroyNotify) uint {
7375
74- cret := xBusOwnName(BusTypeVar, NameVar, FlagsVar, glib.NewCallbackNullable(BusAcquiredHandlerVar), glib.NewCallbackNullable(NameAcquiredHandlerVar), glib.NewCallbackNullable(NameLostHandlerVar), UserDataVar, glib.NewCallbackNullable(UserDataFreeFuncVar))
76+ var BusAcquiredHandlerVarRef uintptr
77+ if BusAcquiredHandlerVar != nil {
78+ BusAcquiredHandlerVarPtr := uintptr(unsafe.Pointer(BusAcquiredHandlerVar))
79+ if cbRefPtr, ok := glib.GetCallback(BusAcquiredHandlerVarPtr); ok {
80+ BusAcquiredHandlerVarRef = cbRefPtr
81+ } else {
82+ fcb := func(arg0 uintptr, arg1 string, arg2 uintptr) {
83+ cbFn := *BusAcquiredHandlerVar
84+ cbFn(arg0, arg1, arg2)
85+ }
86+ BusAcquiredHandlerVarRef = purego.NewCallback(fcb)
87+ glib.SaveCallback(BusAcquiredHandlerVarPtr, BusAcquiredHandlerVarRef)
88+ }
89+ }
90+
91+ var NameAcquiredHandlerVarRef uintptr
92+ if NameAcquiredHandlerVar != nil {
93+ NameAcquiredHandlerVarPtr := uintptr(unsafe.Pointer(NameAcquiredHandlerVar))
94+ if cbRefPtr, ok := glib.GetCallback(NameAcquiredHandlerVarPtr); ok {
95+ NameAcquiredHandlerVarRef = cbRefPtr
96+ } else {
97+ fcb := func(arg0 uintptr, arg1 string, arg2 uintptr) {
98+ cbFn := *NameAcquiredHandlerVar
99+ cbFn(arg0, arg1, arg2)
100+ }
101+ NameAcquiredHandlerVarRef = purego.NewCallback(fcb)
102+ glib.SaveCallback(NameAcquiredHandlerVarPtr, NameAcquiredHandlerVarRef)
103+ }
104+ }
105+
106+ var NameLostHandlerVarRef uintptr
107+ if NameLostHandlerVar != nil {
108+ NameLostHandlerVarPtr := uintptr(unsafe.Pointer(NameLostHandlerVar))
109+ if cbRefPtr, ok := glib.GetCallback(NameLostHandlerVarPtr); ok {
110+ NameLostHandlerVarRef = cbRefPtr
111+ } else {
112+ fcb := func(arg0 uintptr, arg1 string, arg2 uintptr) {
113+ cbFn := *NameLostHandlerVar
114+ cbFn(arg0, arg1, arg2)
115+ }
116+ NameLostHandlerVarRef = purego.NewCallback(fcb)
117+ glib.SaveCallback(NameLostHandlerVarPtr, NameLostHandlerVarRef)
118+ }
119+ }
120+
121+ var UserDataFreeFuncVarRef uintptr
122+ if UserDataFreeFuncVar != nil {
123+ UserDataFreeFuncVarPtr := uintptr(unsafe.Pointer(UserDataFreeFuncVar))
124+ if cbRefPtr, ok := glib.GetCallback(UserDataFreeFuncVarPtr); ok {
125+ UserDataFreeFuncVarRef = cbRefPtr
126+ } else {
127+ fcb := func(arg0 uintptr) {
128+ cbFn := *UserDataFreeFuncVar
129+ cbFn(arg0)
130+ }
131+ UserDataFreeFuncVarRef = purego.NewCallback(fcb)
132+ glib.SaveCallback(UserDataFreeFuncVarPtr, UserDataFreeFuncVarRef)
133+ }
134+ }
135+
136+ cret := xBusOwnName(BusTypeVar, NameVar, FlagsVar, BusAcquiredHandlerVarRef, NameAcquiredHandlerVarRef, NameLostHandlerVarRef, UserDataVar, UserDataFreeFuncVarRef)
75137 return cret
76138 }
77139
@@ -81,7 +143,52 @@ var xBusOwnNameOnConnection func(uintptr, string, BusNameOwnerFlags, uintptr, ui
81143 // of a [enum@Gio.BusType].
82144 func BusOwnNameOnConnection(ConnectionVar *DBusConnection, NameVar string, FlagsVar BusNameOwnerFlags, NameAcquiredHandlerVar *BusNameAcquiredCallback, NameLostHandlerVar *BusNameLostCallback, UserDataVar uintptr, UserDataFreeFuncVar *glib.DestroyNotify) uint {
83145
84- cret := xBusOwnNameOnConnection(ConnectionVar.GoPointer(), NameVar, FlagsVar, glib.NewCallbackNullable(NameAcquiredHandlerVar), glib.NewCallbackNullable(NameLostHandlerVar), UserDataVar, glib.NewCallbackNullable(UserDataFreeFuncVar))
146+ var NameAcquiredHandlerVarRef uintptr
147+ if NameAcquiredHandlerVar != nil {
148+ NameAcquiredHandlerVarPtr := uintptr(unsafe.Pointer(NameAcquiredHandlerVar))
149+ if cbRefPtr, ok := glib.GetCallback(NameAcquiredHandlerVarPtr); ok {
150+ NameAcquiredHandlerVarRef = cbRefPtr
151+ } else {
152+ fcb := func(arg0 uintptr, arg1 string, arg2 uintptr) {
153+ cbFn := *NameAcquiredHandlerVar
154+ cbFn(arg0, arg1, arg2)
155+ }
156+ NameAcquiredHandlerVarRef = purego.NewCallback(fcb)
157+ glib.SaveCallback(NameAcquiredHandlerVarPtr, NameAcquiredHandlerVarRef)
158+ }
159+ }
160+
161+ var NameLostHandlerVarRef uintptr
162+ if NameLostHandlerVar != nil {
163+ NameLostHandlerVarPtr := uintptr(unsafe.Pointer(NameLostHandlerVar))
164+ if cbRefPtr, ok := glib.GetCallback(NameLostHandlerVarPtr); ok {
165+ NameLostHandlerVarRef = cbRefPtr
166+ } else {
167+ fcb := func(arg0 uintptr, arg1 string, arg2 uintptr) {
168+ cbFn := *NameLostHandlerVar
169+ cbFn(arg0, arg1, arg2)
170+ }
171+ NameLostHandlerVarRef = purego.NewCallback(fcb)
172+ glib.SaveCallback(NameLostHandlerVarPtr, NameLostHandlerVarRef)
173+ }
174+ }
175+
176+ var UserDataFreeFuncVarRef uintptr
177+ if UserDataFreeFuncVar != nil {
178+ UserDataFreeFuncVarPtr := uintptr(unsafe.Pointer(UserDataFreeFuncVar))
179+ if cbRefPtr, ok := glib.GetCallback(UserDataFreeFuncVarPtr); ok {
180+ UserDataFreeFuncVarRef = cbRefPtr
181+ } else {
182+ fcb := func(arg0 uintptr) {
183+ cbFn := *UserDataFreeFuncVar
184+ cbFn(arg0)
185+ }
186+ UserDataFreeFuncVarRef = purego.NewCallback(fcb)
187+ glib.SaveCallback(UserDataFreeFuncVarPtr, UserDataFreeFuncVarRef)
188+ }
189+ }
190+
191+ cret := xBusOwnNameOnConnection(ConnectionVar.GoPointer(), NameVar, FlagsVar, NameAcquiredHandlerVarRef, NameLostHandlerVarRef, UserDataVar, UserDataFreeFuncVarRef)
85192 return cret
86193 }
87194
M v4/gio/gdbusnamewatching.go +94 -2
@@ -2,6 +2,8 @@
22 package gio
33
44 import (
5+ "unsafe"
6+
57 "github.com/jwijenbergh/purego"
68 "github.com/jwijenbergh/puregotk/pkg/core"
79 "github.com/jwijenbergh/puregotk/v4/glib"
@@ -67,7 +69,52 @@ var xBusWatchName func(BusType, string, BusNameWatcherFlags, uintptr, uintptr, u
6769 // @name_vanished_handler.
6870 func BusWatchName(BusTypeVar BusType, NameVar string, FlagsVar BusNameWatcherFlags, NameAppearedHandlerVar *BusNameAppearedCallback, NameVanishedHandlerVar *BusNameVanishedCallback, UserDataVar uintptr, UserDataFreeFuncVar *glib.DestroyNotify) uint {
6971
70- cret := xBusWatchName(BusTypeVar, NameVar, FlagsVar, glib.NewCallbackNullable(NameAppearedHandlerVar), glib.NewCallbackNullable(NameVanishedHandlerVar), UserDataVar, glib.NewCallbackNullable(UserDataFreeFuncVar))
72+ var NameAppearedHandlerVarRef uintptr
73+ if NameAppearedHandlerVar != nil {
74+ NameAppearedHandlerVarPtr := uintptr(unsafe.Pointer(NameAppearedHandlerVar))
75+ if cbRefPtr, ok := glib.GetCallback(NameAppearedHandlerVarPtr); ok {
76+ NameAppearedHandlerVarRef = cbRefPtr
77+ } else {
78+ fcb := func(arg0 uintptr, arg1 string, arg2 string, arg3 uintptr) {
79+ cbFn := *NameAppearedHandlerVar
80+ cbFn(arg0, arg1, arg2, arg3)
81+ }
82+ NameAppearedHandlerVarRef = purego.NewCallback(fcb)
83+ glib.SaveCallback(NameAppearedHandlerVarPtr, NameAppearedHandlerVarRef)
84+ }
85+ }
86+
87+ var NameVanishedHandlerVarRef uintptr
88+ if NameVanishedHandlerVar != nil {
89+ NameVanishedHandlerVarPtr := uintptr(unsafe.Pointer(NameVanishedHandlerVar))
90+ if cbRefPtr, ok := glib.GetCallback(NameVanishedHandlerVarPtr); ok {
91+ NameVanishedHandlerVarRef = cbRefPtr
92+ } else {
93+ fcb := func(arg0 uintptr, arg1 string, arg2 uintptr) {
94+ cbFn := *NameVanishedHandlerVar
95+ cbFn(arg0, arg1, arg2)
96+ }
97+ NameVanishedHandlerVarRef = purego.NewCallback(fcb)
98+ glib.SaveCallback(NameVanishedHandlerVarPtr, NameVanishedHandlerVarRef)
99+ }
100+ }
101+
102+ var UserDataFreeFuncVarRef uintptr
103+ if UserDataFreeFuncVar != nil {
104+ UserDataFreeFuncVarPtr := uintptr(unsafe.Pointer(UserDataFreeFuncVar))
105+ if cbRefPtr, ok := glib.GetCallback(UserDataFreeFuncVarPtr); ok {
106+ UserDataFreeFuncVarRef = cbRefPtr
107+ } else {
108+ fcb := func(arg0 uintptr) {
109+ cbFn := *UserDataFreeFuncVar
110+ cbFn(arg0)
111+ }
112+ UserDataFreeFuncVarRef = purego.NewCallback(fcb)
113+ glib.SaveCallback(UserDataFreeFuncVarPtr, UserDataFreeFuncVarRef)
114+ }
115+ }
116+
117+ cret := xBusWatchName(BusTypeVar, NameVar, FlagsVar, NameAppearedHandlerVarRef, NameVanishedHandlerVarRef, UserDataVar, UserDataFreeFuncVarRef)
71118 return cret
72119 }
73120
@@ -77,7 +124,52 @@ var xBusWatchNameOnConnection func(uintptr, string, BusNameWatcherFlags, uintptr
77124 // #GBusType.
78125 func BusWatchNameOnConnection(ConnectionVar *DBusConnection, NameVar string, FlagsVar BusNameWatcherFlags, NameAppearedHandlerVar *BusNameAppearedCallback, NameVanishedHandlerVar *BusNameVanishedCallback, UserDataVar uintptr, UserDataFreeFuncVar *glib.DestroyNotify) uint {
79126
80- cret := xBusWatchNameOnConnection(ConnectionVar.GoPointer(), NameVar, FlagsVar, glib.NewCallbackNullable(NameAppearedHandlerVar), glib.NewCallbackNullable(NameVanishedHandlerVar), UserDataVar, glib.NewCallbackNullable(UserDataFreeFuncVar))
127+ var NameAppearedHandlerVarRef uintptr
128+ if NameAppearedHandlerVar != nil {
129+ NameAppearedHandlerVarPtr := uintptr(unsafe.Pointer(NameAppearedHandlerVar))
130+ if cbRefPtr, ok := glib.GetCallback(NameAppearedHandlerVarPtr); ok {
131+ NameAppearedHandlerVarRef = cbRefPtr
132+ } else {
133+ fcb := func(arg0 uintptr, arg1 string, arg2 string, arg3 uintptr) {
134+ cbFn := *NameAppearedHandlerVar
135+ cbFn(arg0, arg1, arg2, arg3)
136+ }
137+ NameAppearedHandlerVarRef = purego.NewCallback(fcb)
138+ glib.SaveCallback(NameAppearedHandlerVarPtr, NameAppearedHandlerVarRef)
139+ }
140+ }
141+
142+ var NameVanishedHandlerVarRef uintptr
143+ if NameVanishedHandlerVar != nil {
144+ NameVanishedHandlerVarPtr := uintptr(unsafe.Pointer(NameVanishedHandlerVar))
145+ if cbRefPtr, ok := glib.GetCallback(NameVanishedHandlerVarPtr); ok {
146+ NameVanishedHandlerVarRef = cbRefPtr
147+ } else {
148+ fcb := func(arg0 uintptr, arg1 string, arg2 uintptr) {
149+ cbFn := *NameVanishedHandlerVar
150+ cbFn(arg0, arg1, arg2)
151+ }
152+ NameVanishedHandlerVarRef = purego.NewCallback(fcb)
153+ glib.SaveCallback(NameVanishedHandlerVarPtr, NameVanishedHandlerVarRef)
154+ }
155+ }
156+
157+ var UserDataFreeFuncVarRef uintptr
158+ if UserDataFreeFuncVar != nil {
159+ UserDataFreeFuncVarPtr := uintptr(unsafe.Pointer(UserDataFreeFuncVar))
160+ if cbRefPtr, ok := glib.GetCallback(UserDataFreeFuncVarPtr); ok {
161+ UserDataFreeFuncVarRef = cbRefPtr
162+ } else {
163+ fcb := func(arg0 uintptr) {
164+ cbFn := *UserDataFreeFuncVar
165+ cbFn(arg0)
166+ }
167+ UserDataFreeFuncVarRef = purego.NewCallback(fcb)
168+ glib.SaveCallback(UserDataFreeFuncVarPtr, UserDataFreeFuncVarRef)
169+ }
170+ }
171+
172+ cret := xBusWatchNameOnConnection(ConnectionVar.GoPointer(), NameVar, FlagsVar, NameAppearedHandlerVarRef, NameVanishedHandlerVarRef, UserDataVar, UserDataFreeFuncVarRef)
81173 return cret
82174 }
83175
M v4/gio/gdbusobjectmanagerclient.go +158 -8
@@ -235,7 +235,37 @@ func NewDBusObjectManagerClientForBusSync(BusTypeVar BusType, FlagsVar DBusObjec
235235 var cls *DBusObjectManagerClient
236236 var cerr *glib.Error
237237
238- cret := xNewDBusObjectManagerClientForBusSync(BusTypeVar, FlagsVar, NameVar, ObjectPathVar, glib.NewCallbackNullable(GetProxyTypeFuncVar), GetProxyTypeUserDataVar, glib.NewCallbackNullable(GetProxyTypeDestroyNotifyVar), CancellableVar.GoPointer(), &cerr)
238+ var GetProxyTypeFuncVarRef uintptr
239+ if GetProxyTypeFuncVar != nil {
240+ GetProxyTypeFuncVarPtr := uintptr(unsafe.Pointer(GetProxyTypeFuncVar))
241+ if cbRefPtr, ok := glib.GetCallback(GetProxyTypeFuncVarPtr); ok {
242+ GetProxyTypeFuncVarRef = cbRefPtr
243+ } else {
244+ fcb := func(arg0 uintptr, arg1 string, arg2 string, arg3 uintptr) types.GType {
245+ cbFn := *GetProxyTypeFuncVar
246+ return cbFn(arg0, arg1, arg2, arg3)
247+ }
248+ GetProxyTypeFuncVarRef = purego.NewCallback(fcb)
249+ glib.SaveCallback(GetProxyTypeFuncVarPtr, GetProxyTypeFuncVarRef)
250+ }
251+ }
252+
253+ var GetProxyTypeDestroyNotifyVarRef uintptr
254+ if GetProxyTypeDestroyNotifyVar != nil {
255+ GetProxyTypeDestroyNotifyVarPtr := uintptr(unsafe.Pointer(GetProxyTypeDestroyNotifyVar))
256+ if cbRefPtr, ok := glib.GetCallback(GetProxyTypeDestroyNotifyVarPtr); ok {
257+ GetProxyTypeDestroyNotifyVarRef = cbRefPtr
258+ } else {
259+ fcb := func(arg0 uintptr) {
260+ cbFn := *GetProxyTypeDestroyNotifyVar
261+ cbFn(arg0)
262+ }
263+ GetProxyTypeDestroyNotifyVarRef = purego.NewCallback(fcb)
264+ glib.SaveCallback(GetProxyTypeDestroyNotifyVarPtr, GetProxyTypeDestroyNotifyVarRef)
265+ }
266+ }
267+
268+ cret := xNewDBusObjectManagerClientForBusSync(BusTypeVar, FlagsVar, NameVar, ObjectPathVar, GetProxyTypeFuncVarRef, GetProxyTypeUserDataVar, GetProxyTypeDestroyNotifyVarRef, CancellableVar.GoPointer(), &cerr)
239269
240270 if cret == 0 {
241271 return nil, cerr
@@ -249,18 +279,48 @@ func NewDBusObjectManagerClientForBusSync(BusTypeVar BusType, FlagsVar DBusObjec
249279
250280 }
251281
252-var xNewDBusObjectManagerClientSync func(uintptr, DBusObjectManagerClientFlags, string, string, uintptr, uintptr, uintptr, uintptr, **glib.Error) uintptr
282+var xNewDBusObjectManagerClientSync func(uintptr, DBusObjectManagerClientFlags, uintptr, string, uintptr, uintptr, uintptr, uintptr, **glib.Error) uintptr
253283
254284 // Creates a new #GDBusObjectManagerClient object.
255285 //
256286 // This is a synchronous failable constructor - the calling thread is
257287 // blocked until a reply is received. See g_dbus_object_manager_client_new()
258288 // for the asynchronous version.
259-func NewDBusObjectManagerClientSync(ConnectionVar *DBusConnection, FlagsVar DBusObjectManagerClientFlags, NameVar string, ObjectPathVar string, GetProxyTypeFuncVar *DBusProxyTypeFunc, GetProxyTypeUserDataVar uintptr, GetProxyTypeDestroyNotifyVar *glib.DestroyNotify, CancellableVar *Cancellable) (*DBusObjectManagerClient, error) {
289+func NewDBusObjectManagerClientSync(ConnectionVar *DBusConnection, FlagsVar DBusObjectManagerClientFlags, NameVar *string, ObjectPathVar string, GetProxyTypeFuncVar *DBusProxyTypeFunc, GetProxyTypeUserDataVar uintptr, GetProxyTypeDestroyNotifyVar *glib.DestroyNotify, CancellableVar *Cancellable) (*DBusObjectManagerClient, error) {
260290 var cls *DBusObjectManagerClient
261291 var cerr *glib.Error
262292
263- cret := xNewDBusObjectManagerClientSync(ConnectionVar.GoPointer(), FlagsVar, NameVar, ObjectPathVar, glib.NewCallbackNullable(GetProxyTypeFuncVar), GetProxyTypeUserDataVar, glib.NewCallbackNullable(GetProxyTypeDestroyNotifyVar), CancellableVar.GoPointer(), &cerr)
293+ var GetProxyTypeFuncVarRef uintptr
294+ if GetProxyTypeFuncVar != nil {
295+ GetProxyTypeFuncVarPtr := uintptr(unsafe.Pointer(GetProxyTypeFuncVar))
296+ if cbRefPtr, ok := glib.GetCallback(GetProxyTypeFuncVarPtr); ok {
297+ GetProxyTypeFuncVarRef = cbRefPtr
298+ } else {
299+ fcb := func(arg0 uintptr, arg1 string, arg2 string, arg3 uintptr) types.GType {
300+ cbFn := *GetProxyTypeFuncVar
301+ return cbFn(arg0, arg1, arg2, arg3)
302+ }
303+ GetProxyTypeFuncVarRef = purego.NewCallback(fcb)
304+ glib.SaveCallback(GetProxyTypeFuncVarPtr, GetProxyTypeFuncVarRef)
305+ }
306+ }
307+
308+ var GetProxyTypeDestroyNotifyVarRef uintptr
309+ if GetProxyTypeDestroyNotifyVar != nil {
310+ GetProxyTypeDestroyNotifyVarPtr := uintptr(unsafe.Pointer(GetProxyTypeDestroyNotifyVar))
311+ if cbRefPtr, ok := glib.GetCallback(GetProxyTypeDestroyNotifyVarPtr); ok {
312+ GetProxyTypeDestroyNotifyVarRef = cbRefPtr
313+ } else {
314+ fcb := func(arg0 uintptr) {
315+ cbFn := *GetProxyTypeDestroyNotifyVar
316+ cbFn(arg0)
317+ }
318+ GetProxyTypeDestroyNotifyVarRef = purego.NewCallback(fcb)
319+ glib.SaveCallback(GetProxyTypeDestroyNotifyVarPtr, GetProxyTypeDestroyNotifyVarRef)
320+ }
321+ }
322+
323+ cret := xNewDBusObjectManagerClientSync(ConnectionVar.GoPointer(), FlagsVar, core.NullableStringToPtr(NameVar), ObjectPathVar, GetProxyTypeFuncVarRef, GetProxyTypeUserDataVar, GetProxyTypeDestroyNotifyVarRef, CancellableVar.GoPointer(), &cerr)
264324
265325 if cret == 0 {
266326 return nil, cerr
@@ -391,7 +451,7 @@ func (x *DBusObjectManagerClient) GetPropertyGetProxyTypeUserData() uintptr {
391451 func (x *DBusObjectManagerClient) SetPropertyName(value string) {
392452 var v gobject.Value
393453 v.Init(gobject.TypeStringVal)
394- v.SetString(value)
454+ v.SetString(&value)
395455 x.SetProperty("name", &v)
396456 }
397457
@@ -418,7 +478,7 @@ func (x *DBusObjectManagerClient) GetPropertyNameOwner() string {
418478 func (x *DBusObjectManagerClient) SetPropertyObjectPath(value string) {
419479 var v gobject.Value
420480 v.Init(gobject.TypeStringVal)
421- v.SetString(value)
481+ v.SetString(&value)
422482 x.SetProperty("object-path", &v)
423483 }
424484
@@ -666,7 +726,52 @@ var xDBusObjectManagerClientNew func(uintptr, DBusObjectManagerClientFlags, stri
666726 // g_dbus_object_manager_client_new_sync() for the synchronous version.
667727 func DBusObjectManagerClientNew(ConnectionVar *DBusConnection, FlagsVar DBusObjectManagerClientFlags, NameVar string, ObjectPathVar string, GetProxyTypeFuncVar *DBusProxyTypeFunc, GetProxyTypeUserDataVar uintptr, GetProxyTypeDestroyNotifyVar *glib.DestroyNotify, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
668728
669- xDBusObjectManagerClientNew(ConnectionVar.GoPointer(), FlagsVar, NameVar, ObjectPathVar, glib.NewCallbackNullable(GetProxyTypeFuncVar), GetProxyTypeUserDataVar, glib.NewCallbackNullable(GetProxyTypeDestroyNotifyVar), CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
729+ var GetProxyTypeFuncVarRef uintptr
730+ if GetProxyTypeFuncVar != nil {
731+ GetProxyTypeFuncVarPtr := uintptr(unsafe.Pointer(GetProxyTypeFuncVar))
732+ if cbRefPtr, ok := glib.GetCallback(GetProxyTypeFuncVarPtr); ok {
733+ GetProxyTypeFuncVarRef = cbRefPtr
734+ } else {
735+ fcb := func(arg0 uintptr, arg1 string, arg2 string, arg3 uintptr) types.GType {
736+ cbFn := *GetProxyTypeFuncVar
737+ return cbFn(arg0, arg1, arg2, arg3)
738+ }
739+ GetProxyTypeFuncVarRef = purego.NewCallback(fcb)
740+ glib.SaveCallback(GetProxyTypeFuncVarPtr, GetProxyTypeFuncVarRef)
741+ }
742+ }
743+
744+ var GetProxyTypeDestroyNotifyVarRef uintptr
745+ if GetProxyTypeDestroyNotifyVar != nil {
746+ GetProxyTypeDestroyNotifyVarPtr := uintptr(unsafe.Pointer(GetProxyTypeDestroyNotifyVar))
747+ if cbRefPtr, ok := glib.GetCallback(GetProxyTypeDestroyNotifyVarPtr); ok {
748+ GetProxyTypeDestroyNotifyVarRef = cbRefPtr
749+ } else {
750+ fcb := func(arg0 uintptr) {
751+ cbFn := *GetProxyTypeDestroyNotifyVar
752+ cbFn(arg0)
753+ }
754+ GetProxyTypeDestroyNotifyVarRef = purego.NewCallback(fcb)
755+ glib.SaveCallback(GetProxyTypeDestroyNotifyVarPtr, GetProxyTypeDestroyNotifyVarRef)
756+ }
757+ }
758+
759+ var CallbackVarRef uintptr
760+ if CallbackVar != nil {
761+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
762+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
763+ CallbackVarRef = cbRefPtr
764+ } else {
765+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
766+ cbFn := *CallbackVar
767+ cbFn(arg0, arg1, arg2)
768+ }
769+ CallbackVarRef = purego.NewCallback(fcb)
770+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
771+ }
772+ }
773+
774+ xDBusObjectManagerClientNew(ConnectionVar.GoPointer(), FlagsVar, NameVar, ObjectPathVar, GetProxyTypeFuncVarRef, GetProxyTypeUserDataVar, GetProxyTypeDestroyNotifyVarRef, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
670775
671776 }
672777
@@ -683,7 +788,52 @@ var xDBusObjectManagerClientNewForBus func(BusType, DBusObjectManagerClientFlags
683788 // g_dbus_object_manager_client_new_for_bus_sync() for the synchronous version.
684789 func DBusObjectManagerClientNewForBus(BusTypeVar BusType, FlagsVar DBusObjectManagerClientFlags, NameVar string, ObjectPathVar string, GetProxyTypeFuncVar *DBusProxyTypeFunc, GetProxyTypeUserDataVar uintptr, GetProxyTypeDestroyNotifyVar *glib.DestroyNotify, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
685790
686- xDBusObjectManagerClientNewForBus(BusTypeVar, FlagsVar, NameVar, ObjectPathVar, glib.NewCallbackNullable(GetProxyTypeFuncVar), GetProxyTypeUserDataVar, glib.NewCallbackNullable(GetProxyTypeDestroyNotifyVar), CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
791+ var GetProxyTypeFuncVarRef uintptr
792+ if GetProxyTypeFuncVar != nil {
793+ GetProxyTypeFuncVarPtr := uintptr(unsafe.Pointer(GetProxyTypeFuncVar))
794+ if cbRefPtr, ok := glib.GetCallback(GetProxyTypeFuncVarPtr); ok {
795+ GetProxyTypeFuncVarRef = cbRefPtr
796+ } else {
797+ fcb := func(arg0 uintptr, arg1 string, arg2 string, arg3 uintptr) types.GType {
798+ cbFn := *GetProxyTypeFuncVar
799+ return cbFn(arg0, arg1, arg2, arg3)
800+ }
801+ GetProxyTypeFuncVarRef = purego.NewCallback(fcb)
802+ glib.SaveCallback(GetProxyTypeFuncVarPtr, GetProxyTypeFuncVarRef)
803+ }
804+ }
805+
806+ var GetProxyTypeDestroyNotifyVarRef uintptr
807+ if GetProxyTypeDestroyNotifyVar != nil {
808+ GetProxyTypeDestroyNotifyVarPtr := uintptr(unsafe.Pointer(GetProxyTypeDestroyNotifyVar))
809+ if cbRefPtr, ok := glib.GetCallback(GetProxyTypeDestroyNotifyVarPtr); ok {
810+ GetProxyTypeDestroyNotifyVarRef = cbRefPtr
811+ } else {
812+ fcb := func(arg0 uintptr) {
813+ cbFn := *GetProxyTypeDestroyNotifyVar
814+ cbFn(arg0)
815+ }
816+ GetProxyTypeDestroyNotifyVarRef = purego.NewCallback(fcb)
817+ glib.SaveCallback(GetProxyTypeDestroyNotifyVarPtr, GetProxyTypeDestroyNotifyVarRef)
818+ }
819+ }
820+
821+ var CallbackVarRef uintptr
822+ if CallbackVar != nil {
823+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
824+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
825+ CallbackVarRef = cbRefPtr
826+ } else {
827+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
828+ cbFn := *CallbackVar
829+ cbFn(arg0, arg1, arg2)
830+ }
831+ CallbackVarRef = purego.NewCallback(fcb)
832+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
833+ }
834+ }
835+
836+ xDBusObjectManagerClientNewForBus(BusTypeVar, FlagsVar, NameVar, ObjectPathVar, GetProxyTypeFuncVarRef, GetProxyTypeUserDataVar, GetProxyTypeDestroyNotifyVarRef, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
687837
688838 }
689839
M v4/gio/gdbusobjectmanagerserver.go +1 -1
@@ -186,7 +186,7 @@ func (c *DBusObjectManagerServer) SetGoPointer(ptr uintptr) {
186186 func (x *DBusObjectManagerServer) SetPropertyObjectPath(value string) {
187187 var v gobject.Value
188188 v.Init(gobject.TypeStringVal)
189- v.SetString(value)
189+ v.SetString(&value)
190190 x.SetProperty("object-path", &v)
191191 }
192192
M v4/gio/gdbusobjectproxy.go +1 -1
@@ -103,7 +103,7 @@ func (c *DBusObjectProxy) SetGoPointer(ptr uintptr) {
103103 func (x *DBusObjectProxy) SetPropertyGObjectPath(value string) {
104104 var v gobject.Value
105105 v.Init(gobject.TypeStringVal)
106- v.SetString(value)
106+ v.SetString(&value)
107107 x.SetProperty("g-object-path", &v)
108108 }
109109
M v4/gio/gdbusobjectskeleton.go +1 -1
@@ -169,7 +169,7 @@ func (c *DBusObjectSkeleton) SetGoPointer(ptr uintptr) {
169169 func (x *DBusObjectSkeleton) SetPropertyGObjectPath(value string) {
170170 var v gobject.Value
171171 v.Init(gobject.TypeStringVal)
172- v.SetString(value)
172+ v.SetString(&value)
173173 x.SetProperty("g-object-path", &v)
174174 }
175175
M v4/gio/gdbusproxy.go +95 -12
@@ -2,6 +2,7 @@
22 package gio
33
44 import (
5+ "fmt"
56 "structs"
67 "unsafe"
78
@@ -215,7 +216,7 @@ func NewDBusProxyForBusSync(BusTypeVar BusType, FlagsVar DBusProxyFlags, InfoVar
215216
216217 }
217218
218-var xNewDBusProxySync func(uintptr, DBusProxyFlags, *DBusInterfaceInfo, string, string, string, uintptr, **glib.Error) uintptr
219+var xNewDBusProxySync func(uintptr, DBusProxyFlags, *DBusInterfaceInfo, uintptr, string, string, uintptr, **glib.Error) uintptr
219220
220221 // Creates a proxy for accessing @interface_name on the remote object
221222 // at @object_path owned by @name at @connection and synchronously
@@ -239,11 +240,11 @@ var xNewDBusProxySync func(uintptr, DBusProxyFlags, *DBusInterfaceInfo, string,
239240 // and g_dbus_proxy_new_finish() for the asynchronous version.
240241 //
241242 // #GDBusProxy is used in this [example][class@Gio.DBusProxy#a-watch-proxy-example].
242-func NewDBusProxySync(ConnectionVar *DBusConnection, FlagsVar DBusProxyFlags, InfoVar *DBusInterfaceInfo, NameVar string, ObjectPathVar string, InterfaceNameVar string, CancellableVar *Cancellable) (*DBusProxy, error) {
243+func NewDBusProxySync(ConnectionVar *DBusConnection, FlagsVar DBusProxyFlags, InfoVar *DBusInterfaceInfo, NameVar *string, ObjectPathVar string, InterfaceNameVar string, CancellableVar *Cancellable) (*DBusProxy, error) {
243244 var cls *DBusProxy
244245 var cerr *glib.Error
245246
246- cret := xNewDBusProxySync(ConnectionVar.GoPointer(), FlagsVar, InfoVar, NameVar, ObjectPathVar, InterfaceNameVar, CancellableVar.GoPointer(), &cerr)
247+ cret := xNewDBusProxySync(ConnectionVar.GoPointer(), FlagsVar, InfoVar, core.NullableStringToPtr(NameVar), ObjectPathVar, InterfaceNameVar, CancellableVar.GoPointer(), &cerr)
247248
248249 if cret == 0 {
249250 return nil, cerr
@@ -305,7 +306,22 @@ var xDBusProxyCall func(uintptr, string, *glib.Variant, DBusCallFlags, int, uint
305306 // the %G_DBUS_MESSAGE_FLAGS_NO_REPLY_EXPECTED flag set.
306307 func (x *DBusProxy) Call(MethodNameVar string, ParametersVar *glib.Variant, FlagsVar DBusCallFlags, TimeoutMsecVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
307308
308- xDBusProxyCall(x.GoPointer(), MethodNameVar, ParametersVar, FlagsVar, TimeoutMsecVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
309+ var CallbackVarRef uintptr
310+ if CallbackVar != nil {
311+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
312+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
313+ CallbackVarRef = cbRefPtr
314+ } else {
315+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
316+ cbFn := *CallbackVar
317+ cbFn(arg0, arg1, arg2)
318+ }
319+ CallbackVarRef = purego.NewCallback(fcb)
320+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
321+ }
322+ }
323+
324+ xDBusProxyCall(x.GoPointer(), MethodNameVar, ParametersVar, FlagsVar, TimeoutMsecVar, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
309325
310326 }
311327
@@ -379,7 +395,22 @@ var xDBusProxyCallWithUnixFdList func(uintptr, string, *glib.Variant, DBusCallFl
379395 // This method is only available on UNIX.
380396 func (x *DBusProxy) CallWithUnixFdList(MethodNameVar string, ParametersVar *glib.Variant, FlagsVar DBusCallFlags, TimeoutMsecVar int, FdListVar *UnixFDList, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
381397
382- xDBusProxyCallWithUnixFdList(x.GoPointer(), MethodNameVar, ParametersVar, FlagsVar, TimeoutMsecVar, FdListVar.GoPointer(), CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
398+ var CallbackVarRef uintptr
399+ if CallbackVar != nil {
400+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
401+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
402+ CallbackVarRef = cbRefPtr
403+ } else {
404+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
405+ cbFn := *CallbackVar
406+ cbFn(arg0, arg1, arg2)
407+ }
408+ CallbackVarRef = purego.NewCallback(fcb)
409+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
410+ }
411+ }
412+
413+ xDBusProxyCallWithUnixFdList(x.GoPointer(), MethodNameVar, ParametersVar, FlagsVar, TimeoutMsecVar, FdListVar.GoPointer(), CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
383414
384415 }
385416
@@ -708,7 +739,7 @@ func (x *DBusProxy) GetPropertyGInterfaceInfo() uintptr {
708739 func (x *DBusProxy) SetPropertyGInterfaceName(value string) {
709740 var v gobject.Value
710741 v.Init(gobject.TypeStringVal)
711- v.SetString(value)
742+ v.SetString(&value)
712743 x.SetProperty("g-interface-name", &v)
713744 }
714745
@@ -725,7 +756,7 @@ func (x *DBusProxy) GetPropertyGInterfaceName() string {
725756 func (x *DBusProxy) SetPropertyGName(value string) {
726757 var v gobject.Value
727758 v.Init(gobject.TypeStringVal)
728- v.SetString(value)
759+ v.SetString(&value)
729760 x.SetProperty("g-name", &v)
730761 }
731762
@@ -752,7 +783,7 @@ func (x *DBusProxy) GetPropertyGNameOwner() string {
752783 func (x *DBusProxy) SetPropertyGObjectPath(value string) {
753784 var v gobject.Value
754785 v.Init(gobject.TypeStringVal)
755- v.SetString(value)
786+ v.SetString(&value)
756787 x.SetProperty("g-object-path", &v)
757788 }
758789
@@ -819,6 +850,28 @@ func (x *DBusProxy) ConnectGSignal(cb *func(DBusProxy, string, string, uintptr))
819850 return gobject.SignalConnect(x.GoPointer(), "g-signal", cbRefPtr)
820851 }
821852
853+// ConnectGSignalWithDetail connects to the "g-signal" signal with a detail string.
854+// The detail is appended as "g-signal::<detail>".
855+func (x *DBusProxy) ConnectGSignalWithDetail(detail string, cb *func(DBusProxy, string, string, uintptr)) uint32 {
856+ cbPtr := uintptr(unsafe.Pointer(cb))
857+ signalName := fmt.Sprintf("g-signal::%s", detail)
858+ if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
859+ return gobject.SignalConnect(x.GoPointer(), signalName, cbRefPtr)
860+ }
861+
862+ fcb := func(clsPtr uintptr, SenderNameVarp string, SignalNameVarp string, ParametersVarp uintptr) {
863+ fa := DBusProxy{}
864+ fa.Ptr = clsPtr
865+ cbFn := *cb
866+
867+ cbFn(fa, SenderNameVarp, SignalNameVarp, ParametersVarp)
868+
869+ }
870+ cbRefPtr := purego.NewCallback(fcb)
871+ glib.SaveCallback(cbPtr, cbRefPtr)
872+ return gobject.SignalConnect(x.GoPointer(), signalName, cbRefPtr)
873+}
874+
822875 // Starts asynchronous initialization of the object implementing the
823876 // interface. This must be done before any real use of the object after
824877 // initial construction. If the object also implements #GInitable you can
@@ -993,7 +1046,7 @@ func (x *DBusProxy) Init(CancellableVar *Cancellable) (bool, error) {
9931046
9941047 }
9951048
996-var xDBusProxyNew func(uintptr, DBusProxyFlags, *DBusInterfaceInfo, string, string, string, uintptr, uintptr, uintptr)
1049+var xDBusProxyNew func(uintptr, DBusProxyFlags, *DBusInterfaceInfo, uintptr, string, string, uintptr, uintptr, uintptr)
9971050
9981051 // Creates a proxy for accessing @interface_name on the remote object
9991052 // at @object_path owned by @name at @connection and asynchronously
@@ -1022,9 +1075,24 @@ var xDBusProxyNew func(uintptr, DBusProxyFlags, *DBusInterfaceInfo, string, stri
10221075 // See g_dbus_proxy_new_sync() and for a synchronous version of this constructor.
10231076 //
10241077 // #GDBusProxy is used in this [example][class@Gio.DBusProxy#a-watch-proxy-example].
1025-func DBusProxyNew(ConnectionVar *DBusConnection, FlagsVar DBusProxyFlags, InfoVar *DBusInterfaceInfo, NameVar string, ObjectPathVar string, InterfaceNameVar string, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
1078+func DBusProxyNew(ConnectionVar *DBusConnection, FlagsVar DBusProxyFlags, InfoVar *DBusInterfaceInfo, NameVar *string, ObjectPathVar string, InterfaceNameVar string, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
1079+
1080+ var CallbackVarRef uintptr
1081+ if CallbackVar != nil {
1082+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
1083+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
1084+ CallbackVarRef = cbRefPtr
1085+ } else {
1086+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
1087+ cbFn := *CallbackVar
1088+ cbFn(arg0, arg1, arg2)
1089+ }
1090+ CallbackVarRef = purego.NewCallback(fcb)
1091+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
1092+ }
1093+ }
10261094
1027- xDBusProxyNew(ConnectionVar.GoPointer(), FlagsVar, InfoVar, NameVar, ObjectPathVar, InterfaceNameVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
1095+ xDBusProxyNew(ConnectionVar.GoPointer(), FlagsVar, InfoVar, core.NullableStringToPtr(NameVar), ObjectPathVar, InterfaceNameVar, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
10281096
10291097 }
10301098
@@ -1035,7 +1103,22 @@ var xDBusProxyNewForBus func(BusType, DBusProxyFlags, *DBusInterfaceInfo, string
10351103 // #GDBusProxy is used in this [example][class@Gio.DBusProxy#a-watch-proxy-example].
10361104 func DBusProxyNewForBus(BusTypeVar BusType, FlagsVar DBusProxyFlags, InfoVar *DBusInterfaceInfo, NameVar string, ObjectPathVar string, InterfaceNameVar string, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
10371105
1038- xDBusProxyNewForBus(BusTypeVar, FlagsVar, InfoVar, NameVar, ObjectPathVar, InterfaceNameVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
1106+ var CallbackVarRef uintptr
1107+ if CallbackVar != nil {
1108+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
1109+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
1110+ CallbackVarRef = cbRefPtr
1111+ } else {
1112+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
1113+ cbFn := *CallbackVar
1114+ cbFn(arg0, arg1, arg2)
1115+ }
1116+ CallbackVarRef = purego.NewCallback(fcb)
1117+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
1118+ }
1119+ }
1120+
1121+ xDBusProxyNewForBus(BusTypeVar, FlagsVar, InfoVar, NameVar, ObjectPathVar, InterfaceNameVar, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
10391122
10401123 }
10411124
M v4/gio/gdbusserver.go +2 -2
@@ -169,7 +169,7 @@ func (x *DBusServer) GetPropertyActive() bool {
169169 func (x *DBusServer) SetPropertyAddress(value string) {
170170 var v gobject.Value
171171 v.Init(gobject.TypeStringVal)
172- v.SetString(value)
172+ v.SetString(&value)
173173 x.SetProperty("address", &v)
174174 }
175175
@@ -196,7 +196,7 @@ func (x *DBusServer) GetPropertyClientAddress() string {
196196 func (x *DBusServer) SetPropertyGuid(value string) {
197197 var v gobject.Value
198198 v.Init(gobject.TypeStringVal)
199- v.SetString(value)
199+ v.SetString(&value)
200200 x.SetProperty("guid", &v)
201201 }
202202
M v4/gio/gfile.go +67 -37
@@ -3315,15 +3315,15 @@ type File interface {
33153315 Read(CancellableVar *Cancellable) (*FileInputStream, error)
33163316 ReadAsync(IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr)
33173317 ReadFinish(ResVar AsyncResult) (*FileInputStream, error)
3318- Replace(EtagVar string, MakeBackupVar bool, FlagsVar FileCreateFlags, CancellableVar *Cancellable) (*FileOutputStream, error)
3319- ReplaceAsync(EtagVar string, MakeBackupVar bool, FlagsVar FileCreateFlags, IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr)
3320- ReplaceContents(ContentsVar string, LengthVar uint, EtagVar string, MakeBackupVar bool, FlagsVar FileCreateFlags, NewEtagVar *string, CancellableVar *Cancellable) (bool, error)
3321- ReplaceContentsAsync(ContentsVar string, LengthVar uint, EtagVar string, MakeBackupVar bool, FlagsVar FileCreateFlags, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr)
3322- ReplaceContentsBytesAsync(ContentsVar *glib.Bytes, EtagVar string, MakeBackupVar bool, FlagsVar FileCreateFlags, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr)
3318+ Replace(EtagVar *string, MakeBackupVar bool, FlagsVar FileCreateFlags, CancellableVar *Cancellable) (*FileOutputStream, error)
3319+ ReplaceAsync(EtagVar *string, MakeBackupVar bool, FlagsVar FileCreateFlags, IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr)
3320+ ReplaceContents(ContentsVar string, LengthVar uint, EtagVar *string, MakeBackupVar bool, FlagsVar FileCreateFlags, NewEtagVar *string, CancellableVar *Cancellable) (bool, error)
3321+ ReplaceContentsAsync(ContentsVar string, LengthVar uint, EtagVar *string, MakeBackupVar bool, FlagsVar FileCreateFlags, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr)
3322+ ReplaceContentsBytesAsync(ContentsVar *glib.Bytes, EtagVar *string, MakeBackupVar bool, FlagsVar FileCreateFlags, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr)
33233323 ReplaceContentsFinish(ResVar AsyncResult, NewEtagVar *string) (bool, error)
33243324 ReplaceFinish(ResVar AsyncResult) (*FileOutputStream, error)
3325- ReplaceReadwrite(EtagVar string, MakeBackupVar bool, FlagsVar FileCreateFlags, CancellableVar *Cancellable) (*FileIOStream, error)
3326- ReplaceReadwriteAsync(EtagVar string, MakeBackupVar bool, FlagsVar FileCreateFlags, IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr)
3325+ ReplaceReadwrite(EtagVar *string, MakeBackupVar bool, FlagsVar FileCreateFlags, CancellableVar *Cancellable) (*FileIOStream, error)
3326+ ReplaceReadwriteAsync(EtagVar *string, MakeBackupVar bool, FlagsVar FileCreateFlags, IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr)
33273327 ReplaceReadwriteFinish(ResVar AsyncResult) (*FileIOStream, error)
33283328 ResolveRelativePath(RelativePathVar string) *FileBase
33293329 SetAttribute(AttributeVar string, TypeVar FileAttributeType, ValuePVar uintptr, FlagsVar FileQueryInfoFlags, CancellableVar *Cancellable) (bool, error)
@@ -5280,11 +5280,11 @@ func (x *FileBase) ReadFinish(ResVar AsyncResult) (*FileInputStream, error) {
52805280 // %G_IO_ERROR_INVALID_FILENAME error, and if the name is to long
52815281 // %G_IO_ERROR_FILENAME_TOO_LONG will be returned. Other errors are
52825282 // possible too, and depend on what kind of filesystem the file is on.
5283-func (x *FileBase) Replace(EtagVar string, MakeBackupVar bool, FlagsVar FileCreateFlags, CancellableVar *Cancellable) (*FileOutputStream, error) {
5283+func (x *FileBase) Replace(EtagVar *string, MakeBackupVar bool, FlagsVar FileCreateFlags, CancellableVar *Cancellable) (*FileOutputStream, error) {
52845284 var cls *FileOutputStream
52855285 var cerr *glib.Error
52865286
5287- cret := XGFileReplace(x.GoPointer(), EtagVar, MakeBackupVar, FlagsVar, CancellableVar.GoPointer(), &cerr)
5287+ cret := XGFileReplace(x.GoPointer(), core.NullableStringToPtr(EtagVar), MakeBackupVar, FlagsVar, CancellableVar.GoPointer(), &cerr)
52885288
52895289 if cret == 0 {
52905290 return nil, cerr
@@ -5307,9 +5307,9 @@ func (x *FileBase) Replace(EtagVar string, MakeBackupVar bool, FlagsVar FileCrea
53075307 // When the operation is finished, @callback will be called.
53085308 // You can then call g_file_replace_finish() to get the result
53095309 // of the operation.
5310-func (x *FileBase) ReplaceAsync(EtagVar string, MakeBackupVar bool, FlagsVar FileCreateFlags, IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
5310+func (x *FileBase) ReplaceAsync(EtagVar *string, MakeBackupVar bool, FlagsVar FileCreateFlags, IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
53115311
5312- XGFileReplaceAsync(x.GoPointer(), EtagVar, MakeBackupVar, FlagsVar, IoPriorityVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
5312+ XGFileReplaceAsync(x.GoPointer(), core.NullableStringToPtr(EtagVar), MakeBackupVar, FlagsVar, IoPriorityVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
53135313
53145314 }
53155315
@@ -5329,10 +5329,10 @@ func (x *FileBase) ReplaceAsync(EtagVar string, MakeBackupVar bool, FlagsVar Fil
53295329 //
53305330 // The returned @new_etag can be used to verify that the file hasn't
53315331 // changed the next time it is saved over.
5332-func (x *FileBase) ReplaceContents(ContentsVar string, LengthVar uint, EtagVar string, MakeBackupVar bool, FlagsVar FileCreateFlags, NewEtagVar *string, CancellableVar *Cancellable) (bool, error) {
5332+func (x *FileBase) ReplaceContents(ContentsVar string, LengthVar uint, EtagVar *string, MakeBackupVar bool, FlagsVar FileCreateFlags, NewEtagVar *string, CancellableVar *Cancellable) (bool, error) {
53335333 var cerr *glib.Error
53345334
5335- cret := XGFileReplaceContents(x.GoPointer(), ContentsVar, LengthVar, EtagVar, MakeBackupVar, FlagsVar, NewEtagVar, CancellableVar.GoPointer(), &cerr)
5335+ cret := XGFileReplaceContents(x.GoPointer(), ContentsVar, LengthVar, core.NullableStringToPtr(EtagVar), MakeBackupVar, FlagsVar, NewEtagVar, CancellableVar.GoPointer(), &cerr)
53365336 if cerr == nil {
53375337 return cret, nil
53385338 }
@@ -5359,9 +5359,9 @@ func (x *FileBase) ReplaceContents(ContentsVar string, LengthVar uint, EtagVar s
53595359 // until @callback is called. See g_file_replace_contents_bytes_async()
53605360 // for a #GBytes version that will automatically hold a reference to the
53615361 // contents (without copying) for the duration of the call.
5362-func (x *FileBase) ReplaceContentsAsync(ContentsVar string, LengthVar uint, EtagVar string, MakeBackupVar bool, FlagsVar FileCreateFlags, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
5362+func (x *FileBase) ReplaceContentsAsync(ContentsVar string, LengthVar uint, EtagVar *string, MakeBackupVar bool, FlagsVar FileCreateFlags, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
53635363
5364- XGFileReplaceContentsAsync(x.GoPointer(), ContentsVar, LengthVar, EtagVar, MakeBackupVar, FlagsVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
5364+ XGFileReplaceContentsAsync(x.GoPointer(), ContentsVar, LengthVar, core.NullableStringToPtr(EtagVar), MakeBackupVar, FlagsVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
53655365
53665366 }
53675367
@@ -5373,9 +5373,9 @@ func (x *FileBase) ReplaceContentsAsync(ContentsVar string, LengthVar uint, Etag
53735373 // When this operation has completed, @callback will be called with
53745374 // @user_user data, and the operation can be finalized with
53755375 // g_file_replace_contents_finish().
5376-func (x *FileBase) ReplaceContentsBytesAsync(ContentsVar *glib.Bytes, EtagVar string, MakeBackupVar bool, FlagsVar FileCreateFlags, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
5376+func (x *FileBase) ReplaceContentsBytesAsync(ContentsVar *glib.Bytes, EtagVar *string, MakeBackupVar bool, FlagsVar FileCreateFlags, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
53775377
5378- XGFileReplaceContentsBytesAsync(x.GoPointer(), ContentsVar, EtagVar, MakeBackupVar, FlagsVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
5378+ XGFileReplaceContentsBytesAsync(x.GoPointer(), ContentsVar, core.NullableStringToPtr(EtagVar), MakeBackupVar, FlagsVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
53795379
53805380 }
53815381
@@ -5423,11 +5423,11 @@ func (x *FileBase) ReplaceFinish(ResVar AsyncResult) (*FileOutputStream, error)
54235423 // Note that in many non-local file cases read and write streams are not
54245424 // supported, so make sure you really need to do read and write streaming,
54255425 // rather than just opening for reading or writing.
5426-func (x *FileBase) ReplaceReadwrite(EtagVar string, MakeBackupVar bool, FlagsVar FileCreateFlags, CancellableVar *Cancellable) (*FileIOStream, error) {
5426+func (x *FileBase) ReplaceReadwrite(EtagVar *string, MakeBackupVar bool, FlagsVar FileCreateFlags, CancellableVar *Cancellable) (*FileIOStream, error) {
54275427 var cls *FileIOStream
54285428 var cerr *glib.Error
54295429
5430- cret := XGFileReplaceReadwrite(x.GoPointer(), EtagVar, MakeBackupVar, FlagsVar, CancellableVar.GoPointer(), &cerr)
5430+ cret := XGFileReplaceReadwrite(x.GoPointer(), core.NullableStringToPtr(EtagVar), MakeBackupVar, FlagsVar, CancellableVar.GoPointer(), &cerr)
54315431
54325432 if cret == 0 {
54335433 return nil, cerr
@@ -5451,9 +5451,9 @@ func (x *FileBase) ReplaceReadwrite(EtagVar string, MakeBackupVar bool, FlagsVar
54515451 // When the operation is finished, @callback will be called.
54525452 // You can then call g_file_replace_readwrite_finish() to get
54535453 // the result of the operation.
5454-func (x *FileBase) ReplaceReadwriteAsync(EtagVar string, MakeBackupVar bool, FlagsVar FileCreateFlags, IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
5454+func (x *FileBase) ReplaceReadwriteAsync(EtagVar *string, MakeBackupVar bool, FlagsVar FileCreateFlags, IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
54555455
5456- XGFileReplaceReadwriteAsync(x.GoPointer(), EtagVar, MakeBackupVar, FlagsVar, IoPriorityVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
5456+ XGFileReplaceReadwriteAsync(x.GoPointer(), core.NullableStringToPtr(EtagVar), MakeBackupVar, FlagsVar, IoPriorityVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
54575457
54585458 }
54595459
@@ -6006,15 +6006,15 @@ var XGFileQueryWritableNamespaces func(uintptr, uintptr, **glib.Error) *FileAttr
60066006 var XGFileRead func(uintptr, uintptr, **glib.Error) uintptr
60076007 var XGFileReadAsync func(uintptr, int, uintptr, uintptr, uintptr)
60086008 var XGFileReadFinish func(uintptr, uintptr, **glib.Error) uintptr
6009-var XGFileReplace func(uintptr, string, bool, FileCreateFlags, uintptr, **glib.Error) uintptr
6010-var XGFileReplaceAsync func(uintptr, string, bool, FileCreateFlags, int, uintptr, uintptr, uintptr)
6011-var XGFileReplaceContents func(uintptr, string, uint, string, bool, FileCreateFlags, *string, uintptr, **glib.Error) bool
6012-var XGFileReplaceContentsAsync func(uintptr, string, uint, string, bool, FileCreateFlags, uintptr, uintptr, uintptr)
6013-var XGFileReplaceContentsBytesAsync func(uintptr, *glib.Bytes, string, bool, FileCreateFlags, uintptr, uintptr, uintptr)
6009+var XGFileReplace func(uintptr, uintptr, bool, FileCreateFlags, uintptr, **glib.Error) uintptr
6010+var XGFileReplaceAsync func(uintptr, uintptr, bool, FileCreateFlags, int, uintptr, uintptr, uintptr)
6011+var XGFileReplaceContents func(uintptr, string, uint, uintptr, bool, FileCreateFlags, *string, uintptr, **glib.Error) bool
6012+var XGFileReplaceContentsAsync func(uintptr, string, uint, uintptr, bool, FileCreateFlags, uintptr, uintptr, uintptr)
6013+var XGFileReplaceContentsBytesAsync func(uintptr, *glib.Bytes, uintptr, bool, FileCreateFlags, uintptr, uintptr, uintptr)
60146014 var XGFileReplaceContentsFinish func(uintptr, uintptr, *string, **glib.Error) bool
60156015 var XGFileReplaceFinish func(uintptr, uintptr, **glib.Error) uintptr
6016-var XGFileReplaceReadwrite func(uintptr, string, bool, FileCreateFlags, uintptr, **glib.Error) uintptr
6017-var XGFileReplaceReadwriteAsync func(uintptr, string, bool, FileCreateFlags, int, uintptr, uintptr, uintptr)
6016+var XGFileReplaceReadwrite func(uintptr, uintptr, bool, FileCreateFlags, uintptr, **glib.Error) uintptr
6017+var XGFileReplaceReadwriteAsync func(uintptr, uintptr, bool, FileCreateFlags, int, uintptr, uintptr, uintptr)
60186018 var XGFileReplaceReadwriteFinish func(uintptr, uintptr, **glib.Error) uintptr
60196019 var XGFileResolveRelativePath func(uintptr, string) uintptr
60206020 var XGFileSetAttribute func(uintptr, string, FileAttributeType, uintptr, FileQueryInfoFlags, uintptr, **glib.Error) bool
@@ -6155,7 +6155,7 @@ func FileNewForUri(UriVar string) *FileBase {
61556155 return cls
61566156 }
61576157
6158-var xFileNewTmp func(string, **FileIOStream, **glib.Error) uintptr
6158+var xFileNewTmp func(uintptr, **FileIOStream, **glib.Error) uintptr
61596159
61606160 // Opens a file in the preferred directory for temporary files (as
61616161 // returned by g_get_tmp_dir()) and returns a #GFile and
@@ -6167,11 +6167,11 @@ var xFileNewTmp func(string, **FileIOStream, **glib.Error) uintptr
61676167 //
61686168 // Unlike the other #GFile constructors, this will return %NULL if
61696169 // a temporary file could not be created.
6170-func FileNewTmp(TmplVar string, IostreamVar **FileIOStream) (*FileBase, error) {
6170+func FileNewTmp(TmplVar *string, IostreamVar **FileIOStream) (*FileBase, error) {
61716171 var cls *FileBase
61726172 var cerr *glib.Error
61736173
6174- cret := xFileNewTmp(TmplVar, IostreamVar, &cerr)
6174+ cret := xFileNewTmp(core.NullableStringToPtr(TmplVar), IostreamVar, &cerr)
61756175
61766176 if cret == 0 {
61776177 return nil, cerr
@@ -6185,7 +6185,7 @@ func FileNewTmp(TmplVar string, IostreamVar **FileIOStream) (*FileBase, error) {
61856185
61866186 }
61876187
6188-var xFileNewTmpAsync func(string, int, uintptr, uintptr, uintptr)
6188+var xFileNewTmpAsync func(uintptr, int, uintptr, uintptr, uintptr)
61896189
61906190 // Asynchronously opens a file in the preferred directory for temporary files
61916191 //
@@ -6194,13 +6194,28 @@ var xFileNewTmpAsync func(string, int, uintptr, uintptr, uintptr)
61946194 // @tmpl should be a string in the GLib file name encoding
61956195 // containing a sequence of six 'X' characters, and containing no
61966196 // directory components. If it is %NULL, a default template is used.
6197-func FileNewTmpAsync(TmplVar string, IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
6197+func FileNewTmpAsync(TmplVar *string, IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
6198+
6199+ var CallbackVarRef uintptr
6200+ if CallbackVar != nil {
6201+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
6202+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
6203+ CallbackVarRef = cbRefPtr
6204+ } else {
6205+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
6206+ cbFn := *CallbackVar
6207+ cbFn(arg0, arg1, arg2)
6208+ }
6209+ CallbackVarRef = purego.NewCallback(fcb)
6210+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
6211+ }
6212+ }
61986213
6199- xFileNewTmpAsync(TmplVar, IoPriorityVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
6214+ xFileNewTmpAsync(core.NullableStringToPtr(TmplVar), IoPriorityVar, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
62006215
62016216 }
62026217
6203-var xFileNewTmpDirAsync func(string, int, uintptr, uintptr, uintptr)
6218+var xFileNewTmpDirAsync func(uintptr, int, uintptr, uintptr, uintptr)
62046219
62056220 // Asynchronously creates a directory in the preferred directory for
62066221 // temporary files (as returned by g_get_tmp_dir()) as g_dir_make_tmp().
@@ -6208,9 +6223,24 @@ var xFileNewTmpDirAsync func(string, int, uintptr, uintptr, uintptr)
62086223 // @tmpl should be a string in the GLib file name encoding
62096224 // containing a sequence of six 'X' characters, and containing no
62106225 // directory components. If it is %NULL, a default template is used.
6211-func FileNewTmpDirAsync(TmplVar string, IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
6226+func FileNewTmpDirAsync(TmplVar *string, IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
6227+
6228+ var CallbackVarRef uintptr
6229+ if CallbackVar != nil {
6230+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
6231+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
6232+ CallbackVarRef = cbRefPtr
6233+ } else {
6234+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
6235+ cbFn := *CallbackVar
6236+ cbFn(arg0, arg1, arg2)
6237+ }
6238+ CallbackVarRef = purego.NewCallback(fcb)
6239+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
6240+ }
6241+ }
62126242
6213- xFileNewTmpDirAsync(TmplVar, IoPriorityVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
6243+ xFileNewTmpDirAsync(core.NullableStringToPtr(TmplVar), IoPriorityVar, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
62146244
62156245 }
62166246
M v4/gio/gfileenumerator.go +32 -2
@@ -436,7 +436,22 @@ var xFileEnumeratorCloseAsync func(uintptr, int, uintptr, uintptr, uintptr)
436436 // g_file_enumerator_close_finish().
437437 func (x *FileEnumerator) CloseAsync(IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
438438
439- xFileEnumeratorCloseAsync(x.GoPointer(), IoPriorityVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
439+ var CallbackVarRef uintptr
440+ if CallbackVar != nil {
441+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
442+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
443+ CallbackVarRef = cbRefPtr
444+ } else {
445+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
446+ cbFn := *CallbackVar
447+ cbFn(arg0, arg1, arg2)
448+ }
449+ CallbackVarRef = purego.NewCallback(fcb)
450+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
451+ }
452+ }
453+
454+ xFileEnumeratorCloseAsync(x.GoPointer(), IoPriorityVar, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
440455
441456 }
442457
@@ -688,7 +703,22 @@ var xFileEnumeratorNextFilesAsync func(uintptr, int, int, uintptr, uintptr, uint
688703 // priority is %G_PRIORITY_DEFAULT.
689704 func (x *FileEnumerator) NextFilesAsync(NumFilesVar int, IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
690705
691- xFileEnumeratorNextFilesAsync(x.GoPointer(), NumFilesVar, IoPriorityVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
706+ var CallbackVarRef uintptr
707+ if CallbackVar != nil {
708+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
709+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
710+ CallbackVarRef = cbRefPtr
711+ } else {
712+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
713+ cbFn := *CallbackVar
714+ cbFn(arg0, arg1, arg2)
715+ }
716+ CallbackVarRef = purego.NewCallback(fcb)
717+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
718+ }
719+ }
720+
721+ xFileEnumeratorNextFilesAsync(x.GoPointer(), NumFilesVar, IoPriorityVar, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
692722
693723 }
694724
M v4/gio/gfileinfo.go +3 -3
@@ -1249,12 +1249,12 @@ func (x *FileInfo) HasNamespace(NameSpaceVar string) bool {
12491249 return cret
12501250 }
12511251
1252-var xFileInfoListAttributes func(uintptr, string) []string
1252+var xFileInfoListAttributes func(uintptr, uintptr) []string
12531253
12541254 // Lists the file info structure's attributes.
1255-func (x *FileInfo) ListAttributes(NameSpaceVar string) []string {
1255+func (x *FileInfo) ListAttributes(NameSpaceVar *string) []string {
12561256
1257- cret := xFileInfoListAttributes(x.GoPointer(), NameSpaceVar)
1257+ cret := xFileInfoListAttributes(x.GoPointer(), core.NullableStringToPtr(NameSpaceVar))
12581258 return cret
12591259 }
12601260
M v4/gio/gfileinputstream.go +16 -1
@@ -389,7 +389,22 @@ var xFileInputStreamQueryInfoAsync func(uintptr, string, int, uintptr, uintptr,
389389 // was cancelled, the error %G_IO_ERROR_CANCELLED will be set
390390 func (x *FileInputStream) QueryInfoAsync(AttributesVar string, IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
391391
392- xFileInputStreamQueryInfoAsync(x.GoPointer(), AttributesVar, IoPriorityVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
392+ var CallbackVarRef uintptr
393+ if CallbackVar != nil {
394+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
395+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
396+ CallbackVarRef = cbRefPtr
397+ } else {
398+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
399+ cbFn := *CallbackVar
400+ cbFn(arg0, arg1, arg2)
401+ }
402+ CallbackVarRef = purego.NewCallback(fcb)
403+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
404+ }
405+ }
406+
407+ xFileInputStreamQueryInfoAsync(x.GoPointer(), AttributesVar, IoPriorityVar, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
393408
394409 }
395410
M v4/gio/gfileiostream.go +16 -1
@@ -492,7 +492,22 @@ var xFileIOStreamQueryInfoAsync func(uintptr, string, int, uintptr, uintptr, uin
492492 // g_file_io_stream_query_info().
493493 func (x *FileIOStream) QueryInfoAsync(AttributesVar string, IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
494494
495- xFileIOStreamQueryInfoAsync(x.GoPointer(), AttributesVar, IoPriorityVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
495+ var CallbackVarRef uintptr
496+ if CallbackVar != nil {
497+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
498+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
499+ CallbackVarRef = cbRefPtr
500+ } else {
501+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
502+ cbFn := *CallbackVar
503+ cbFn(arg0, arg1, arg2)
504+ }
505+ CallbackVarRef = purego.NewCallback(fcb)
506+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
507+ }
508+ }
509+
510+ xFileIOStreamQueryInfoAsync(x.GoPointer(), AttributesVar, IoPriorityVar, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
496511
497512 }
498513
M v4/gio/gfileoutputstream.go +16 -1
@@ -487,7 +487,22 @@ var xFileOutputStreamQueryInfoAsync func(uintptr, string, int, uintptr, uintptr,
487487 // g_file_output_stream_query_info().
488488 func (x *FileOutputStream) QueryInfoAsync(AttributesVar string, IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
489489
490- xFileOutputStreamQueryInfoAsync(x.GoPointer(), AttributesVar, IoPriorityVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
490+ var CallbackVarRef uintptr
491+ if CallbackVar != nil {
492+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
493+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
494+ CallbackVarRef = cbRefPtr
495+ } else {
496+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
497+ cbFn := *CallbackVar
498+ cbFn(arg0, arg1, arg2)
499+ }
500+ CallbackVarRef = purego.NewCallback(fcb)
501+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
502+ }
503+ }
504+
505+ xFileOutputStreamQueryInfoAsync(x.GoPointer(), AttributesVar, IoPriorityVar, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
491506
492507 }
493508
M v4/gio/ginputstream.go +80 -5
@@ -468,7 +468,22 @@ var xInputStreamCloseAsync func(uintptr, int, uintptr, uintptr, uintptr)
468468 // override one you must override all.
469469 func (x *InputStream) CloseAsync(IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
470470
471- xInputStreamCloseAsync(x.GoPointer(), IoPriorityVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
471+ var CallbackVarRef uintptr
472+ if CallbackVar != nil {
473+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
474+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
475+ CallbackVarRef = cbRefPtr
476+ } else {
477+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
478+ cbFn := *CallbackVar
479+ cbFn(arg0, arg1, arg2)
480+ }
481+ CallbackVarRef = purego.NewCallback(fcb)
482+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
483+ }
484+ }
485+
486+ xInputStreamCloseAsync(x.GoPointer(), IoPriorityVar, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
472487
473488 }
474489
@@ -584,7 +599,22 @@ var xInputStreamReadAllAsync func(uintptr, *[]byte, uint, int, uintptr, uintptr,
584599 // priority. Default priority is %G_PRIORITY_DEFAULT.
585600 func (x *InputStream) ReadAllAsync(BufferVar *[]byte, CountVar uint, IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
586601
587- xInputStreamReadAllAsync(x.GoPointer(), BufferVar, CountVar, IoPriorityVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
602+ var CallbackVarRef uintptr
603+ if CallbackVar != nil {
604+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
605+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
606+ CallbackVarRef = cbRefPtr
607+ } else {
608+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
609+ cbFn := *CallbackVar
610+ cbFn(arg0, arg1, arg2)
611+ }
612+ CallbackVarRef = purego.NewCallback(fcb)
613+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
614+ }
615+ }
616+
617+ xInputStreamReadAllAsync(x.GoPointer(), BufferVar, CountVar, IoPriorityVar, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
588618
589619 }
590620
@@ -637,7 +667,22 @@ var xInputStreamReadAsync func(uintptr, *[]byte, uint, int, uintptr, uintptr, ui
637667 // override one you must override all.
638668 func (x *InputStream) ReadAsync(BufferVar *[]byte, CountVar uint, IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
639669
640- xInputStreamReadAsync(x.GoPointer(), BufferVar, CountVar, IoPriorityVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
670+ var CallbackVarRef uintptr
671+ if CallbackVar != nil {
672+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
673+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
674+ CallbackVarRef = cbRefPtr
675+ } else {
676+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
677+ cbFn := *CallbackVar
678+ cbFn(arg0, arg1, arg2)
679+ }
680+ CallbackVarRef = purego.NewCallback(fcb)
681+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
682+ }
683+ }
684+
685+ xInputStreamReadAsync(x.GoPointer(), BufferVar, CountVar, IoPriorityVar, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
641686
642687 }
643688
@@ -701,7 +746,22 @@ var xInputStreamReadBytesAsync func(uintptr, uint, int, uintptr, uintptr, uintpt
701746 // priority. Default priority is %G_PRIORITY_DEFAULT.
702747 func (x *InputStream) ReadBytesAsync(CountVar uint, IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
703748
704- xInputStreamReadBytesAsync(x.GoPointer(), CountVar, IoPriorityVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
749+ var CallbackVarRef uintptr
750+ if CallbackVar != nil {
751+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
752+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
753+ CallbackVarRef = cbRefPtr
754+ } else {
755+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
756+ cbFn := *CallbackVar
757+ cbFn(arg0, arg1, arg2)
758+ }
759+ CallbackVarRef = purego.NewCallback(fcb)
760+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
761+ }
762+ }
763+
764+ xInputStreamReadBytesAsync(x.GoPointer(), CountVar, IoPriorityVar, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
705765
706766 }
707767
@@ -803,7 +863,22 @@ var xInputStreamSkipAsync func(uintptr, uint, int, uintptr, uintptr, uintptr)
803863 // However, if you override one, you must override all.
804864 func (x *InputStream) SkipAsync(CountVar uint, IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
805865
806- xInputStreamSkipAsync(x.GoPointer(), CountVar, IoPriorityVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
866+ var CallbackVarRef uintptr
867+ if CallbackVar != nil {
868+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
869+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
870+ CallbackVarRef = cbRefPtr
871+ } else {
872+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
873+ cbFn := *CallbackVar
874+ cbFn(arg0, arg1, arg2)
875+ }
876+ CallbackVarRef = purego.NewCallback(fcb)
877+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
878+ }
879+ }
880+
881+ xInputStreamSkipAsync(x.GoPointer(), CountVar, IoPriorityVar, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
807882
808883 }
809884
M v4/gio/gioscheduler.go +33 -1
@@ -2,6 +2,8 @@
22 package gio
33
44 import (
5+ "unsafe"
6+
57 "github.com/jwijenbergh/purego"
68 "github.com/jwijenbergh/puregotk/pkg/core"
79 "github.com/jwijenbergh/puregotk/v4/glib"
@@ -31,7 +33,37 @@ var xIoSchedulerPushJob func(uintptr, uintptr, uintptr, int, uintptr)
3133 // g_io_scheduler_cancel_all_jobs().
3234 func IoSchedulerPushJob(JobFuncVar *IOSchedulerJobFunc, UserDataVar uintptr, NotifyVar *glib.DestroyNotify, IoPriorityVar int, CancellableVar *Cancellable) {
3335
34- xIoSchedulerPushJob(glib.NewCallback(JobFuncVar), UserDataVar, glib.NewCallbackNullable(NotifyVar), IoPriorityVar, CancellableVar.GoPointer())
36+ var JobFuncVarRef uintptr
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)
48+ }
49+ }
50+
51+ var NotifyVarRef uintptr
52+ if NotifyVar != nil {
53+ NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
54+ if cbRefPtr, ok := glib.GetCallback(NotifyVarPtr); ok {
55+ NotifyVarRef = cbRefPtr
56+ } else {
57+ fcb := func(arg0 uintptr) {
58+ cbFn := *NotifyVar
59+ cbFn(arg0)
60+ }
61+ NotifyVarRef = purego.NewCallback(fcb)
62+ glib.SaveCallback(NotifyVarPtr, NotifyVarRef)
63+ }
64+ }
65+
66+ xIoSchedulerPushJob(JobFuncVarRef, UserDataVar, NotifyVarRef, IoPriorityVar, CancellableVar.GoPointer())
3567
3668 }
3769
M v4/gio/giostream.go +32 -2
@@ -558,7 +558,22 @@ var xIOStreamCloseAsync func(uintptr, int, uintptr, uintptr, uintptr)
558558 // classes. However, if you override one you must override all.
559559 func (x *IOStream) CloseAsync(IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
560560
561- xIOStreamCloseAsync(x.GoPointer(), IoPriorityVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
561+ var CallbackVarRef uintptr
562+ if CallbackVar != nil {
563+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
564+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
565+ CallbackVarRef = cbRefPtr
566+ } else {
567+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
568+ cbFn := *CallbackVar
569+ cbFn(arg0, arg1, arg2)
570+ }
571+ CallbackVarRef = purego.NewCallback(fcb)
572+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
573+ }
574+ }
575+
576+ xIOStreamCloseAsync(x.GoPointer(), IoPriorityVar, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
562577
563578 }
564579
@@ -657,7 +672,22 @@ var xIOStreamSpliceAsync func(uintptr, uintptr, IOStreamSpliceFlags, int, uintpt
657672 // result of the operation.
658673 func (x *IOStream) SpliceAsync(Stream2Var *IOStream, FlagsVar IOStreamSpliceFlags, IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
659674
660- xIOStreamSpliceAsync(x.GoPointer(), Stream2Var.GoPointer(), FlagsVar, IoPriorityVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
675+ var CallbackVarRef uintptr
676+ if CallbackVar != nil {
677+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
678+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
679+ CallbackVarRef = cbRefPtr
680+ } else {
681+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
682+ cbFn := *CallbackVar
683+ cbFn(arg0, arg1, arg2)
684+ }
685+ CallbackVarRef = purego.NewCallback(fcb)
686+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
687+ }
688+ }
689+
690+ xIOStreamSpliceAsync(x.GoPointer(), Stream2Var.GoPointer(), FlagsVar, IoPriorityVar, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
661691
662692 }
663693
M v4/gio/giotypes.go +62 -2
@@ -400,7 +400,37 @@ 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- cret := xIOSchedulerJobSendToMainloop(x.GoPointer(), glib.NewCallback(FuncVar), UserDataVar, glib.NewCallbackNullable(NotifyVar))
403+ var FuncVarRef uintptr
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)
415+ }
416+ }
417+
418+ var NotifyVarRef uintptr
419+ if NotifyVar != nil {
420+ NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
421+ if cbRefPtr, ok := glib.GetCallback(NotifyVarPtr); ok {
422+ NotifyVarRef = cbRefPtr
423+ } else {
424+ fcb := func(arg0 uintptr) {
425+ cbFn := *NotifyVar
426+ cbFn(arg0)
427+ }
428+ NotifyVarRef = purego.NewCallback(fcb)
429+ glib.SaveCallback(NotifyVarPtr, NotifyVarRef)
430+ }
431+ }
432+
433+ cret := xIOSchedulerJobSendToMainloop(x.GoPointer(), FuncVarRef, UserDataVar, NotifyVarRef)
404434 return cret
405435 }
406436
@@ -417,7 +447,37 @@ var xIOSchedulerJobSendToMainloopAsync func(uintptr, uintptr, uintptr, uintptr)
417447 // g_io_scheduler_push_job() or by using refcounting for @user_data.
418448 func (x *IOSchedulerJob) SendToMainloopAsync(FuncVar *glib.SourceFunc, UserDataVar uintptr, NotifyVar *glib.DestroyNotify) {
419449
420- xIOSchedulerJobSendToMainloopAsync(x.GoPointer(), glib.NewCallback(FuncVar), UserDataVar, glib.NewCallbackNullable(NotifyVar))
450+ var FuncVarRef uintptr
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)
462+ }
463+ }
464+
465+ var NotifyVarRef uintptr
466+ if NotifyVar != nil {
467+ NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
468+ if cbRefPtr, ok := glib.GetCallback(NotifyVarPtr); ok {
469+ NotifyVarRef = cbRefPtr
470+ } else {
471+ fcb := func(arg0 uintptr) {
472+ cbFn := *NotifyVar
473+ cbFn(arg0)
474+ }
475+ NotifyVarRef = purego.NewCallback(fcb)
476+ glib.SaveCallback(NotifyVarPtr, NotifyVarRef)
477+ }
478+ }
479+
480+ xIOSchedulerJobSendToMainloopAsync(x.GoPointer(), FuncVarRef, UserDataVar, NotifyVarRef)
421481
422482 }
423483
M v4/gio/gliststore.go +64 -4
@@ -100,7 +100,22 @@ 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- cret := xListStoreFindWithEqualFunc(x.GoPointer(), ItemVar.GoPointer(), glib.NewCallback(EqualFuncVar), PositionVar)
103+ var EqualFuncVarRef uintptr
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)
115+ }
116+ }
117+
118+ cret := xListStoreFindWithEqualFunc(x.GoPointer(), ItemVar.GoPointer(), EqualFuncVarRef, PositionVar)
104119 return cret
105120 }
106121
@@ -114,7 +129,22 @@ var xListStoreFindWithEqualFuncFull func(uintptr, uintptr, uintptr, uintptr, *ui
114129 // Since GLib 2.76 it is possible to pass `NULL` for @item.
115130 func (x *ListStore) FindWithEqualFuncFull(ItemVar *gobject.Object, EqualFuncVar *glib.EqualFuncFull, UserDataVar uintptr, PositionVar *uint) bool {
116131
117- cret := xListStoreFindWithEqualFuncFull(x.GoPointer(), ItemVar.GoPointer(), glib.NewCallback(EqualFuncVar), UserDataVar, PositionVar)
132+ var EqualFuncVarRef uintptr
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)
144+ }
145+ }
146+
147+ cret := xListStoreFindWithEqualFuncFull(x.GoPointer(), ItemVar.GoPointer(), EqualFuncVarRef, UserDataVar, PositionVar)
118148 return cret
119149 }
120150
@@ -146,7 +176,22 @@ var xListStoreInsertSorted func(uintptr, uintptr, uintptr, uintptr) uint
146176 // This function takes a ref on @item.
147177 func (x *ListStore) InsertSorted(ItemVar *gobject.Object, CompareFuncVar *glib.CompareDataFunc, UserDataVar uintptr) uint {
148178
149- cret := xListStoreInsertSorted(x.GoPointer(), ItemVar.GoPointer(), glib.NewCallback(CompareFuncVar), UserDataVar)
179+ var CompareFuncVarRef uintptr
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)
191+ }
192+ }
193+
194+ cret := xListStoreInsertSorted(x.GoPointer(), ItemVar.GoPointer(), CompareFuncVarRef, UserDataVar)
150195 return cret
151196 }
152197
@@ -177,7 +222,22 @@ var xListStoreSort func(uintptr, uintptr, uintptr)
177222 // Sort the items in @store according to @compare_func.
178223 func (x *ListStore) Sort(CompareFuncVar *glib.CompareDataFunc, UserDataVar uintptr) {
179224
180- xListStoreSort(x.GoPointer(), glib.NewCallback(CompareFuncVar), UserDataVar)
225+ var CompareFuncVarRef uintptr
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)
237+ }
238+ }
239+
240+ xListStoreSort(x.GoPointer(), CompareFuncVarRef, UserDataVar)
181241
182242 }
183243
M v4/gio/gmemoryinputstream.go +32 -2
@@ -213,7 +213,22 @@ var xNewMemoryInputStreamFromData func([]byte, int, uintptr) uintptr
213213 func NewMemoryInputStreamFromData(DataVar []byte, LenVar int, DestroyVar *glib.DestroyNotify) *MemoryInputStream {
214214 var cls *MemoryInputStream
215215
216- cret := xNewMemoryInputStreamFromData(DataVar, LenVar, glib.NewCallbackNullable(DestroyVar))
216+ var DestroyVarRef uintptr
217+ if DestroyVar != nil {
218+ DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
219+ if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok {
220+ DestroyVarRef = cbRefPtr
221+ } else {
222+ fcb := func(arg0 uintptr) {
223+ cbFn := *DestroyVar
224+ cbFn(arg0)
225+ }
226+ DestroyVarRef = purego.NewCallback(fcb)
227+ glib.SaveCallback(DestroyVarPtr, DestroyVarRef)
228+ }
229+ }
230+
231+ cret := xNewMemoryInputStreamFromData(DataVar, LenVar, DestroyVarRef)
217232
218233 if cret == 0 {
219234 return nil
@@ -237,7 +252,22 @@ var xMemoryInputStreamAddData func(uintptr, []byte, int, uintptr)
237252 // Appends @data to data that can be read from the input stream
238253 func (x *MemoryInputStream) AddData(DataVar []byte, LenVar int, DestroyVar *glib.DestroyNotify) {
239254
240- xMemoryInputStreamAddData(x.GoPointer(), DataVar, LenVar, glib.NewCallbackNullable(DestroyVar))
255+ var DestroyVarRef uintptr
256+ if DestroyVar != nil {
257+ DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
258+ if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok {
259+ DestroyVarRef = cbRefPtr
260+ } else {
261+ fcb := func(arg0 uintptr) {
262+ cbFn := *DestroyVar
263+ cbFn(arg0)
264+ }
265+ DestroyVarRef = purego.NewCallback(fcb)
266+ glib.SaveCallback(DestroyVarPtr, DestroyVarRef)
267+ }
268+ }
269+
270+ xMemoryInputStreamAddData(x.GoPointer(), DataVar, LenVar, DestroyVarRef)
241271
242272 }
243273
M v4/gio/gmemoryoutputstream.go +31 -1
@@ -228,7 +228,37 @@ var xNewMemoryOutputStream func(uintptr, uint, uintptr, uintptr) uintptr
228228 func NewMemoryOutputStream(DataVar uintptr, SizeVar uint, ReallocFunctionVar *ReallocFunc, DestroyFunctionVar *glib.DestroyNotify) *MemoryOutputStream {
229229 var cls *MemoryOutputStream
230230
231- cret := xNewMemoryOutputStream(DataVar, SizeVar, glib.NewCallbackNullable(ReallocFunctionVar), glib.NewCallbackNullable(DestroyFunctionVar))
231+ var ReallocFunctionVarRef uintptr
232+ if ReallocFunctionVar != nil {
233+ ReallocFunctionVarPtr := uintptr(unsafe.Pointer(ReallocFunctionVar))
234+ if cbRefPtr, ok := glib.GetCallback(ReallocFunctionVarPtr); ok {
235+ ReallocFunctionVarRef = cbRefPtr
236+ } else {
237+ fcb := func(arg0 uintptr, arg1 uint) uintptr {
238+ cbFn := *ReallocFunctionVar
239+ return cbFn(arg0, arg1)
240+ }
241+ ReallocFunctionVarRef = purego.NewCallback(fcb)
242+ glib.SaveCallback(ReallocFunctionVarPtr, ReallocFunctionVarRef)
243+ }
244+ }
245+
246+ var DestroyFunctionVarRef uintptr
247+ if DestroyFunctionVar != nil {
248+ DestroyFunctionVarPtr := uintptr(unsafe.Pointer(DestroyFunctionVar))
249+ if cbRefPtr, ok := glib.GetCallback(DestroyFunctionVarPtr); ok {
250+ DestroyFunctionVarRef = cbRefPtr
251+ } else {
252+ fcb := func(arg0 uintptr) {
253+ cbFn := *DestroyFunctionVar
254+ cbFn(arg0)
255+ }
256+ DestroyFunctionVarRef = purego.NewCallback(fcb)
257+ glib.SaveCallback(DestroyFunctionVarPtr, DestroyFunctionVarRef)
258+ }
259+ }
260+
261+ cret := xNewMemoryOutputStream(DataVar, SizeVar, ReallocFunctionVarRef, DestroyFunctionVarRef)
232262
233263 if cret == 0 {
234264 return nil
M v4/gio/gmenu.go +48 -48
@@ -51,14 +51,14 @@ func NewMenu() *Menu {
5151 return cls
5252 }
5353
54-var xMenuAppend func(uintptr, string, string)
54+var xMenuAppend func(uintptr, uintptr, uintptr)
5555
5656 // Convenience function for appending a normal menu item to the end of
5757 // @menu. Combine g_menu_item_new() and g_menu_insert_item() for a more
5858 // flexible alternative.
59-func (x *Menu) Append(LabelVar string, DetailedActionVar string) {
59+func (x *Menu) Append(LabelVar *string, DetailedActionVar *string) {
6060
61- xMenuAppend(x.GoPointer(), LabelVar, DetailedActionVar)
61+ xMenuAppend(x.GoPointer(), core.NullableStringToPtr(LabelVar), core.NullableStringToPtr(DetailedActionVar))
6262
6363 }
6464
@@ -73,25 +73,25 @@ func (x *Menu) AppendItem(ItemVar *MenuItem) {
7373
7474 }
7575
76-var xMenuAppendSection func(uintptr, string, uintptr)
76+var xMenuAppendSection func(uintptr, uintptr, uintptr)
7777
7878 // Convenience function for appending a section menu item to the end of
7979 // @menu. Combine g_menu_item_new_section() and g_menu_insert_item() for a
8080 // more flexible alternative.
81-func (x *Menu) AppendSection(LabelVar string, SectionVar *MenuModel) {
81+func (x *Menu) AppendSection(LabelVar *string, SectionVar *MenuModel) {
8282
83- xMenuAppendSection(x.GoPointer(), LabelVar, SectionVar.GoPointer())
83+ xMenuAppendSection(x.GoPointer(), core.NullableStringToPtr(LabelVar), SectionVar.GoPointer())
8484
8585 }
8686
87-var xMenuAppendSubmenu func(uintptr, string, uintptr)
87+var xMenuAppendSubmenu func(uintptr, uintptr, uintptr)
8888
8989 // Convenience function for appending a submenu menu item to the end of
9090 // @menu. Combine g_menu_item_new_submenu() and g_menu_insert_item() for a
9191 // more flexible alternative.
92-func (x *Menu) AppendSubmenu(LabelVar string, SubmenuVar *MenuModel) {
92+func (x *Menu) AppendSubmenu(LabelVar *string, SubmenuVar *MenuModel) {
9393
94- xMenuAppendSubmenu(x.GoPointer(), LabelVar, SubmenuVar.GoPointer())
94+ xMenuAppendSubmenu(x.GoPointer(), core.NullableStringToPtr(LabelVar), SubmenuVar.GoPointer())
9595
9696 }
9797
@@ -111,14 +111,14 @@ func (x *Menu) Freeze() {
111111
112112 }
113113
114-var xMenuInsert func(uintptr, int, string, string)
114+var xMenuInsert func(uintptr, int, uintptr, uintptr)
115115
116116 // Convenience function for inserting a normal menu item into @menu.
117117 // Combine g_menu_item_new() and g_menu_insert_item() for a more flexible
118118 // alternative.
119-func (x *Menu) Insert(PositionVar int, LabelVar string, DetailedActionVar string) {
119+func (x *Menu) Insert(PositionVar int, LabelVar *string, DetailedActionVar *string) {
120120
121- xMenuInsert(x.GoPointer(), PositionVar, LabelVar, DetailedActionVar)
121+ xMenuInsert(x.GoPointer(), PositionVar, core.NullableStringToPtr(LabelVar), core.NullableStringToPtr(DetailedActionVar))
122122
123123 }
124124
@@ -147,36 +147,36 @@ func (x *Menu) InsertItem(PositionVar int, ItemVar *MenuItem) {
147147
148148 }
149149
150-var xMenuInsertSection func(uintptr, int, string, uintptr)
150+var xMenuInsertSection func(uintptr, int, uintptr, uintptr)
151151
152152 // Convenience function for inserting a section menu item into @menu.
153153 // Combine g_menu_item_new_section() and g_menu_insert_item() for a more
154154 // flexible alternative.
155-func (x *Menu) InsertSection(PositionVar int, LabelVar string, SectionVar *MenuModel) {
155+func (x *Menu) InsertSection(PositionVar int, LabelVar *string, SectionVar *MenuModel) {
156156
157- xMenuInsertSection(x.GoPointer(), PositionVar, LabelVar, SectionVar.GoPointer())
157+ xMenuInsertSection(x.GoPointer(), PositionVar, core.NullableStringToPtr(LabelVar), SectionVar.GoPointer())
158158
159159 }
160160
161-var xMenuInsertSubmenu func(uintptr, int, string, uintptr)
161+var xMenuInsertSubmenu func(uintptr, int, uintptr, uintptr)
162162
163163 // Convenience function for inserting a submenu menu item into @menu.
164164 // Combine g_menu_item_new_submenu() and g_menu_insert_item() for a more
165165 // flexible alternative.
166-func (x *Menu) InsertSubmenu(PositionVar int, LabelVar string, SubmenuVar *MenuModel) {
166+func (x *Menu) InsertSubmenu(PositionVar int, LabelVar *string, SubmenuVar *MenuModel) {
167167
168- xMenuInsertSubmenu(x.GoPointer(), PositionVar, LabelVar, SubmenuVar.GoPointer())
168+ xMenuInsertSubmenu(x.GoPointer(), PositionVar, core.NullableStringToPtr(LabelVar), SubmenuVar.GoPointer())
169169
170170 }
171171
172-var xMenuPrepend func(uintptr, string, string)
172+var xMenuPrepend func(uintptr, uintptr, uintptr)
173173
174174 // Convenience function for prepending a normal menu item to the start
175175 // of @menu. Combine g_menu_item_new() and g_menu_insert_item() for a more
176176 // flexible alternative.
177-func (x *Menu) Prepend(LabelVar string, DetailedActionVar string) {
177+func (x *Menu) Prepend(LabelVar *string, DetailedActionVar *string) {
178178
179- xMenuPrepend(x.GoPointer(), LabelVar, DetailedActionVar)
179+ xMenuPrepend(x.GoPointer(), core.NullableStringToPtr(LabelVar), core.NullableStringToPtr(DetailedActionVar))
180180
181181 }
182182
@@ -191,25 +191,25 @@ func (x *Menu) PrependItem(ItemVar *MenuItem) {
191191
192192 }
193193
194-var xMenuPrependSection func(uintptr, string, uintptr)
194+var xMenuPrependSection func(uintptr, uintptr, uintptr)
195195
196196 // Convenience function for prepending a section menu item to the start
197197 // of @menu. Combine g_menu_item_new_section() and g_menu_insert_item() for
198198 // a more flexible alternative.
199-func (x *Menu) PrependSection(LabelVar string, SectionVar *MenuModel) {
199+func (x *Menu) PrependSection(LabelVar *string, SectionVar *MenuModel) {
200200
201- xMenuPrependSection(x.GoPointer(), LabelVar, SectionVar.GoPointer())
201+ xMenuPrependSection(x.GoPointer(), core.NullableStringToPtr(LabelVar), SectionVar.GoPointer())
202202
203203 }
204204
205-var xMenuPrependSubmenu func(uintptr, string, uintptr)
205+var xMenuPrependSubmenu func(uintptr, uintptr, uintptr)
206206
207207 // Convenience function for prepending a submenu menu item to the start
208208 // of @menu. Combine g_menu_item_new_submenu() and g_menu_insert_item() for
209209 // a more flexible alternative.
210-func (x *Menu) PrependSubmenu(LabelVar string, SubmenuVar *MenuModel) {
210+func (x *Menu) PrependSubmenu(LabelVar *string, SubmenuVar *MenuModel) {
211211
212- xMenuPrependSubmenu(x.GoPointer(), LabelVar, SubmenuVar.GoPointer())
212+ xMenuPrependSubmenu(x.GoPointer(), core.NullableStringToPtr(LabelVar), SubmenuVar.GoPointer())
213213
214214 }
215215
@@ -269,7 +269,7 @@ func MenuItemNewFromInternalPtr(ptr uintptr) *MenuItem {
269269 return cls
270270 }
271271
272-var xNewMenuItem func(string, string) uintptr
272+var xNewMenuItem func(uintptr, uintptr) uintptr
273273
274274 // Creates a new #GMenuItem.
275275 //
@@ -279,10 +279,10 @@ var xNewMenuItem func(string, string) uintptr
279279 // If @detailed_action is non-%NULL it is used to set the "action" and
280280 // possibly the "target" attribute of the new item. See
281281 // g_menu_item_set_detailed_action() for more information.
282-func NewMenuItem(LabelVar string, DetailedActionVar string) *MenuItem {
282+func NewMenuItem(LabelVar *string, DetailedActionVar *string) *MenuItem {
283283 var cls *MenuItem
284284
285- cret := xNewMenuItem(LabelVar, DetailedActionVar)
285+ cret := xNewMenuItem(core.NullableStringToPtr(LabelVar), core.NullableStringToPtr(DetailedActionVar))
286286
287287 if cret == 0 {
288288 return nil
@@ -312,7 +312,7 @@ func NewMenuItemFromModel(ModelVar *MenuModel, ItemIndexVar int) *MenuItem {
312312 return cls
313313 }
314314
315-var xNewMenuItemSection func(string, uintptr) uintptr
315+var xNewMenuItemSection func(uintptr, uintptr) uintptr
316316
317317 // Creates a new #GMenuItem representing a section.
318318 //
@@ -378,10 +378,10 @@ var xNewMenuItemSection func(string, uintptr) uintptr
378378 //
379379 // &lt;/menu&gt;
380380 // ]|
381-func NewMenuItemSection(LabelVar string, SectionVar *MenuModel) *MenuItem {
381+func NewMenuItemSection(LabelVar *string, SectionVar *MenuModel) *MenuItem {
382382 var cls *MenuItem
383383
384- cret := xNewMenuItemSection(LabelVar, SectionVar.GoPointer())
384+ cret := xNewMenuItemSection(core.NullableStringToPtr(LabelVar), SectionVar.GoPointer())
385385
386386 if cret == 0 {
387387 return nil
@@ -391,16 +391,16 @@ func NewMenuItemSection(LabelVar string, SectionVar *MenuModel) *MenuItem {
391391 return cls
392392 }
393393
394-var xNewMenuItemSubmenu func(string, uintptr) uintptr
394+var xNewMenuItemSubmenu func(uintptr, uintptr) uintptr
395395
396396 // Creates a new #GMenuItem representing a submenu.
397397 //
398398 // This is a convenience API around g_menu_item_new() and
399399 // g_menu_item_set_submenu().
400-func NewMenuItemSubmenu(LabelVar string, SubmenuVar *MenuModel) *MenuItem {
400+func NewMenuItemSubmenu(LabelVar *string, SubmenuVar *MenuModel) *MenuItem {
401401 var cls *MenuItem
402402
403- cret := xNewMenuItemSubmenu(LabelVar, SubmenuVar.GoPointer())
403+ cret := xNewMenuItemSubmenu(core.NullableStringToPtr(LabelVar), SubmenuVar.GoPointer())
404404
405405 if cret == 0 {
406406 return nil
@@ -456,7 +456,7 @@ func (x *MenuItem) GetLink(LinkVar string) *MenuModel {
456456 return cls
457457 }
458458
459-var xMenuItemSetActionAndTarget func(uintptr, string, string, ...interface{})
459+var xMenuItemSetActionAndTarget func(uintptr, uintptr, uintptr, ...interface{})
460460
461461 // Sets or unsets the "action" and "target" attributes of @menu_item.
462462 //
@@ -477,13 +477,13 @@ var xMenuItemSetActionAndTarget func(uintptr, string, string, ...interface{})
477477 //
478478 // See also g_menu_item_set_action_and_target_value() for a
479479 // description of the semantics of the action and target attributes.
480-func (x *MenuItem) SetActionAndTarget(ActionVar string, FormatStringVar string, varArgs ...interface{}) {
480+func (x *MenuItem) SetActionAndTarget(ActionVar *string, FormatStringVar *string, varArgs ...interface{}) {
481481
482- xMenuItemSetActionAndTarget(x.GoPointer(), ActionVar, FormatStringVar, varArgs...)
482+ xMenuItemSetActionAndTarget(x.GoPointer(), core.NullableStringToPtr(ActionVar), core.NullableStringToPtr(FormatStringVar), varArgs...)
483483
484484 }
485485
486-var xMenuItemSetActionAndTargetValue func(uintptr, string, *glib.Variant)
486+var xMenuItemSetActionAndTargetValue func(uintptr, uintptr, *glib.Variant)
487487
488488 // Sets or unsets the "action" and "target" attributes of @menu_item.
489489 //
@@ -521,13 +521,13 @@ var xMenuItemSetActionAndTargetValue func(uintptr, string, *glib.Variant)
521521 // See g_menu_item_set_action_and_target() or
522522 // g_menu_item_set_detailed_action() for two equivalent calls that are
523523 // probably more convenient for most uses.
524-func (x *MenuItem) SetActionAndTargetValue(ActionVar string, TargetValueVar *glib.Variant) {
524+func (x *MenuItem) SetActionAndTargetValue(ActionVar *string, TargetValueVar *glib.Variant) {
525525
526- xMenuItemSetActionAndTargetValue(x.GoPointer(), ActionVar, TargetValueVar)
526+ xMenuItemSetActionAndTargetValue(x.GoPointer(), core.NullableStringToPtr(ActionVar), TargetValueVar)
527527
528528 }
529529
530-var xMenuItemSetAttribute func(uintptr, string, string, ...interface{})
530+var xMenuItemSetAttribute func(uintptr, string, uintptr, ...interface{})
531531
532532 // Sets or unsets an attribute on @menu_item.
533533 //
@@ -546,9 +546,9 @@ var xMenuItemSetAttribute func(uintptr, string, string, ...interface{})
546546 //
547547 // See also g_menu_item_set_attribute_value() for an equivalent call
548548 // that directly accepts a #GVariant.
549-func (x *MenuItem) SetAttribute(AttributeVar string, FormatStringVar string, varArgs ...interface{}) {
549+func (x *MenuItem) SetAttribute(AttributeVar string, FormatStringVar *string, varArgs ...interface{}) {
550550
551- xMenuItemSetAttribute(x.GoPointer(), AttributeVar, FormatStringVar, varArgs...)
551+ xMenuItemSetAttribute(x.GoPointer(), AttributeVar, core.NullableStringToPtr(FormatStringVar), varArgs...)
552552
553553 }
554554
@@ -618,15 +618,15 @@ func (x *MenuItem) SetIcon(IconVar Icon) {
618618
619619 }
620620
621-var xMenuItemSetLabel func(uintptr, string)
621+var xMenuItemSetLabel func(uintptr, uintptr)
622622
623623 // Sets or unsets the "label" attribute of @menu_item.
624624 //
625625 // If @label is non-%NULL it is used as the label for the menu item. If
626626 // it is %NULL then the label attribute is unset.
627-func (x *MenuItem) SetLabel(LabelVar string) {
627+func (x *MenuItem) SetLabel(LabelVar *string) {
628628
629- xMenuItemSetLabel(x.GoPointer(), LabelVar)
629+ xMenuItemSetLabel(x.GoPointer(), core.NullableStringToPtr(LabelVar))
630630
631631 }
632632
M v4/gio/gmountoperation.go +12 -12
@@ -570,12 +570,12 @@ func (x *MountOperation) SetChoice(ChoiceVar int) {
570570
571571 }
572572
573-var xMountOperationSetDomain func(uintptr, string)
573+var xMountOperationSetDomain func(uintptr, uintptr)
574574
575575 // Sets the mount operation's domain.
576-func (x *MountOperation) SetDomain(DomainVar string) {
576+func (x *MountOperation) SetDomain(DomainVar *string) {
577577
578- xMountOperationSetDomain(x.GoPointer(), DomainVar)
578+ xMountOperationSetDomain(x.GoPointer(), core.NullableStringToPtr(DomainVar))
579579
580580 }
581581
@@ -597,12 +597,12 @@ func (x *MountOperation) SetIsTcryptSystemVolume(SystemVolumeVar bool) {
597597
598598 }
599599
600-var xMountOperationSetPassword func(uintptr, string)
600+var xMountOperationSetPassword func(uintptr, uintptr)
601601
602602 // Sets the mount operation's password to @password.
603-func (x *MountOperation) SetPassword(PasswordVar string) {
603+func (x *MountOperation) SetPassword(PasswordVar *string) {
604604
605- xMountOperationSetPassword(x.GoPointer(), PasswordVar)
605+ xMountOperationSetPassword(x.GoPointer(), core.NullableStringToPtr(PasswordVar))
606606
607607 }
608608
@@ -624,12 +624,12 @@ func (x *MountOperation) SetPim(PimVar uint) {
624624
625625 }
626626
627-var xMountOperationSetUsername func(uintptr, string)
627+var xMountOperationSetUsername func(uintptr, uintptr)
628628
629629 // Sets the user name within @op to @username.
630-func (x *MountOperation) SetUsername(UsernameVar string) {
630+func (x *MountOperation) SetUsername(UsernameVar *string) {
631631
632- xMountOperationSetUsername(x.GoPointer(), UsernameVar)
632+ xMountOperationSetUsername(x.GoPointer(), core.NullableStringToPtr(UsernameVar))
633633
634634 }
635635
@@ -685,7 +685,7 @@ func (x *MountOperation) GetPropertyChoice() int {
685685 func (x *MountOperation) SetPropertyDomain(value string) {
686686 var v gobject.Value
687687 v.Init(gobject.TypeStringVal)
688- v.SetString(value)
688+ v.SetString(&value)
689689 x.SetProperty("domain", &v)
690690 }
691691
@@ -747,7 +747,7 @@ func (x *MountOperation) GetPropertyIsTcryptSystemVolume() bool {
747747 func (x *MountOperation) SetPropertyPassword(value string) {
748748 var v gobject.Value
749749 v.Init(gobject.TypeStringVal)
750- v.SetString(value)
750+ v.SetString(&value)
751751 x.SetProperty("password", &v)
752752 }
753753
@@ -785,7 +785,7 @@ func (x *MountOperation) GetPropertyPim() uint {
785785 func (x *MountOperation) SetPropertyUsername(value string) {
786786 var v gobject.Value
787787 v.Init(gobject.TypeStringVal)
788- v.SetString(value)
788+ v.SetString(&value)
789789 x.SetProperty("username", &v)
790790 }
791791
M v4/gio/gnetworkaddress.go +2 -2
@@ -150,7 +150,7 @@ func (c *NetworkAddress) SetGoPointer(ptr uintptr) {
150150 func (x *NetworkAddress) SetPropertyHostname(value string) {
151151 var v gobject.Value
152152 v.Init(gobject.TypeStringVal)
153- v.SetString(value)
153+ v.SetString(&value)
154154 x.SetProperty("hostname", &v)
155155 }
156156
@@ -184,7 +184,7 @@ func (x *NetworkAddress) GetPropertyPort() uint {
184184 func (x *NetworkAddress) SetPropertyScheme(value string) {
185185 var v gobject.Value
186186 v.Init(gobject.TypeStringVal)
187- v.SetString(value)
187+ v.SetString(&value)
188188 x.SetProperty("scheme", &v)
189189 }
190190
M v4/gio/gnetworkservice.go +4 -4
@@ -136,7 +136,7 @@ func (c *NetworkService) SetGoPointer(ptr uintptr) {
136136 func (x *NetworkService) SetPropertyDomain(value string) {
137137 var v gobject.Value
138138 v.Init(gobject.TypeStringVal)
139- v.SetString(value)
139+ v.SetString(&value)
140140 x.SetProperty("domain", &v)
141141 }
142142
@@ -153,7 +153,7 @@ func (x *NetworkService) GetPropertyDomain() string {
153153 func (x *NetworkService) SetPropertyProtocol(value string) {
154154 var v gobject.Value
155155 v.Init(gobject.TypeStringVal)
156- v.SetString(value)
156+ v.SetString(&value)
157157 x.SetProperty("protocol", &v)
158158 }
159159
@@ -170,7 +170,7 @@ func (x *NetworkService) GetPropertyProtocol() string {
170170 func (x *NetworkService) SetPropertyScheme(value string) {
171171 var v gobject.Value
172172 v.Init(gobject.TypeStringVal)
173- v.SetString(value)
173+ v.SetString(&value)
174174 x.SetProperty("scheme", &v)
175175 }
176176
@@ -187,7 +187,7 @@ func (x *NetworkService) GetPropertyScheme() string {
187187 func (x *NetworkService) SetPropertyService(value string) {
188188 var v gobject.Value
189189 v.Init(gobject.TypeStringVal)
190- v.SetString(value)
190+ v.SetString(&value)
191191 x.SetProperty("service", &v)
192192 }
193193
M v4/gio/gnotification.go +12 -12
@@ -107,7 +107,7 @@ func (x *Notification) AddButton(LabelVar string, DetailedActionVar string) {
107107
108108 }
109109
110-var xNotificationAddButtonWithTarget func(uintptr, string, string, string, ...interface{})
110+var xNotificationAddButtonWithTarget func(uintptr, string, string, uintptr, ...interface{})
111111
112112 // Adds a button to @notification that activates @action when clicked.
113113 // @action must be an application-wide action (it must start with "app.").
@@ -116,9 +116,9 @@ var xNotificationAddButtonWithTarget func(uintptr, string, string, string, ...in
116116 // positional parameters into a #GVariant instance, similar to
117117 // g_variant_new(). @action will be activated with that #GVariant as its
118118 // parameter.
119-func (x *Notification) AddButtonWithTarget(LabelVar string, ActionVar string, TargetFormatVar string, varArgs ...interface{}) {
119+func (x *Notification) AddButtonWithTarget(LabelVar string, ActionVar string, TargetFormatVar *string, varArgs ...interface{}) {
120120
121- xNotificationAddButtonWithTarget(x.GoPointer(), LabelVar, ActionVar, TargetFormatVar, varArgs...)
121+ xNotificationAddButtonWithTarget(x.GoPointer(), LabelVar, ActionVar, core.NullableStringToPtr(TargetFormatVar), varArgs...)
122122
123123 }
124124
@@ -135,16 +135,16 @@ func (x *Notification) AddButtonWithTargetValue(LabelVar string, ActionVar strin
135135
136136 }
137137
138-var xNotificationSetBody func(uintptr, string)
138+var xNotificationSetBody func(uintptr, uintptr)
139139
140140 // Sets the body of @notification to @body.
141-func (x *Notification) SetBody(BodyVar string) {
141+func (x *Notification) SetBody(BodyVar *string) {
142142
143- xNotificationSetBody(x.GoPointer(), BodyVar)
143+ xNotificationSetBody(x.GoPointer(), core.NullableStringToPtr(BodyVar))
144144
145145 }
146146
147-var xNotificationSetCategory func(uintptr, string)
147+var xNotificationSetCategory func(uintptr, uintptr)
148148
149149 // Sets the type of @notification to @category. Categories have a main
150150 // type like `email`, `im` or `device` and can have a detail separated
@@ -152,9 +152,9 @@ var xNotificationSetCategory func(uintptr, string)
152152 // helps the notification server to select proper feedback to the user.
153153 //
154154 // Standard categories are [listed in the specification](https://specifications.freedesktop.org/notification-spec/latest/ar01s06.html).
155-func (x *Notification) SetCategory(CategoryVar string) {
155+func (x *Notification) SetCategory(CategoryVar *string) {
156156
157- xNotificationSetCategory(x.GoPointer(), CategoryVar)
157+ xNotificationSetCategory(x.GoPointer(), core.NullableStringToPtr(CategoryVar))
158158
159159 }
160160
@@ -177,7 +177,7 @@ func (x *Notification) SetDefaultAction(DetailedActionVar string) {
177177
178178 }
179179
180-var xNotificationSetDefaultActionAndTarget func(uintptr, string, string, ...interface{})
180+var xNotificationSetDefaultActionAndTarget func(uintptr, string, uintptr, ...interface{})
181181
182182 // Sets the default action of @notification to @action. This action is
183183 // activated when the notification is clicked on. It must be an
@@ -190,9 +190,9 @@ var xNotificationSetDefaultActionAndTarget func(uintptr, string, string, ...inte
190190 //
191191 // When no default action is set, the application that the notification
192192 // was sent on is activated.
193-func (x *Notification) SetDefaultActionAndTarget(ActionVar string, TargetFormatVar string, varArgs ...interface{}) {
193+func (x *Notification) SetDefaultActionAndTarget(ActionVar string, TargetFormatVar *string, varArgs ...interface{}) {
194194
195- xNotificationSetDefaultActionAndTarget(x.GoPointer(), ActionVar, TargetFormatVar, varArgs...)
195+ xNotificationSetDefaultActionAndTarget(x.GoPointer(), ActionVar, core.NullableStringToPtr(TargetFormatVar), varArgs...)
196196
197197 }
198198
M v4/gio/goutputstream.go +128 -8
@@ -628,7 +628,22 @@ var xOutputStreamCloseAsync func(uintptr, int, uintptr, uintptr, uintptr)
628628 // classes. However, if you override one you must override all.
629629 func (x *OutputStream) CloseAsync(IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
630630
631- xOutputStreamCloseAsync(x.GoPointer(), IoPriorityVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
631+ var CallbackVarRef uintptr
632+ if CallbackVar != nil {
633+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
634+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
635+ CallbackVarRef = cbRefPtr
636+ } else {
637+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
638+ cbFn := *CallbackVar
639+ cbFn(arg0, arg1, arg2)
640+ }
641+ CallbackVarRef = purego.NewCallback(fcb)
642+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
643+ }
644+ }
645+
646+ xOutputStreamCloseAsync(x.GoPointer(), IoPriorityVar, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
632647
633648 }
634649
@@ -679,7 +694,22 @@ var xOutputStreamFlushAsync func(uintptr, int, uintptr, uintptr, uintptr)
679694 // result of the operation.
680695 func (x *OutputStream) FlushAsync(IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
681696
682- xOutputStreamFlushAsync(x.GoPointer(), IoPriorityVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
697+ var CallbackVarRef uintptr
698+ if CallbackVar != nil {
699+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
700+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
701+ CallbackVarRef = cbRefPtr
702+ } else {
703+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
704+ cbFn := *CallbackVar
705+ cbFn(arg0, arg1, arg2)
706+ }
707+ CallbackVarRef = purego.NewCallback(fcb)
708+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
709+ }
710+ }
711+
712+ xOutputStreamFlushAsync(x.GoPointer(), IoPriorityVar, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
683713
684714 }
685715
@@ -788,7 +818,22 @@ var xOutputStreamSpliceAsync func(uintptr, uintptr, OutputStreamSpliceFlags, int
788818 // g_output_stream_splice().
789819 func (x *OutputStream) SpliceAsync(SourceVar *InputStream, FlagsVar OutputStreamSpliceFlags, IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
790820
791- xOutputStreamSpliceAsync(x.GoPointer(), SourceVar.GoPointer(), FlagsVar, IoPriorityVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
821+ var CallbackVarRef uintptr
822+ if CallbackVar != nil {
823+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
824+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
825+ CallbackVarRef = cbRefPtr
826+ } else {
827+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
828+ cbFn := *CallbackVar
829+ cbFn(arg0, arg1, arg2)
830+ }
831+ CallbackVarRef = purego.NewCallback(fcb)
832+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
833+ }
834+ }
835+
836+ xOutputStreamSpliceAsync(x.GoPointer(), SourceVar.GoPointer(), FlagsVar, IoPriorityVar, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
792837
793838 }
794839
@@ -910,7 +955,22 @@ var xOutputStreamWriteAllAsync func(uintptr, []byte, uint, int, uintptr, uintptr
910955 // until @callback is called.
911956 func (x *OutputStream) WriteAllAsync(BufferVar []byte, CountVar uint, IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
912957
913- xOutputStreamWriteAllAsync(x.GoPointer(), BufferVar, CountVar, IoPriorityVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
958+ var CallbackVarRef uintptr
959+ if CallbackVar != nil {
960+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
961+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
962+ CallbackVarRef = cbRefPtr
963+ } else {
964+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
965+ cbFn := *CallbackVar
966+ cbFn(arg0, arg1, arg2)
967+ }
968+ CallbackVarRef = purego.NewCallback(fcb)
969+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
970+ }
971+ }
972+
973+ xOutputStreamWriteAllAsync(x.GoPointer(), BufferVar, CountVar, IoPriorityVar, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
914974
915975 }
916976
@@ -976,7 +1036,22 @@ var xOutputStreamWriteAsync func(uintptr, []byte, uint, int, uintptr, uintptr, u
9761036 // the contents (without copying) for the duration of the call.
9771037 func (x *OutputStream) WriteAsync(BufferVar []byte, CountVar uint, IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
9781038
979- xOutputStreamWriteAsync(x.GoPointer(), BufferVar, CountVar, IoPriorityVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
1039+ var CallbackVarRef uintptr
1040+ if CallbackVar != nil {
1041+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
1042+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
1043+ CallbackVarRef = cbRefPtr
1044+ } else {
1045+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
1046+ cbFn := *CallbackVar
1047+ cbFn(arg0, arg1, arg2)
1048+ }
1049+ CallbackVarRef = purego.NewCallback(fcb)
1050+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
1051+ }
1052+ }
1053+
1054+ xOutputStreamWriteAsync(x.GoPointer(), BufferVar, CountVar, IoPriorityVar, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
9801055
9811056 }
9821057
@@ -1021,7 +1096,22 @@ var xOutputStreamWriteBytesAsync func(uintptr, *glib.Bytes, int, uintptr, uintpt
10211096 // g_output_stream_write_bytes().
10221097 func (x *OutputStream) WriteBytesAsync(BytesVar *glib.Bytes, IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
10231098
1024- xOutputStreamWriteBytesAsync(x.GoPointer(), BytesVar, IoPriorityVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
1099+ var CallbackVarRef uintptr
1100+ if CallbackVar != nil {
1101+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
1102+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
1103+ CallbackVarRef = cbRefPtr
1104+ } else {
1105+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
1106+ cbFn := *CallbackVar
1107+ cbFn(arg0, arg1, arg2)
1108+ }
1109+ CallbackVarRef = purego.NewCallback(fcb)
1110+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
1111+ }
1112+ }
1113+
1114+ xOutputStreamWriteBytesAsync(x.GoPointer(), BytesVar, IoPriorityVar, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
10251115
10261116 }
10271117
@@ -1144,7 +1234,22 @@ var xOutputStreamWritevAllAsync func(uintptr, []OutputVector, uint, int, uintptr
11441234 // of @vectors might be changed by this function.
11451235 func (x *OutputStream) WritevAllAsync(VectorsVar []OutputVector, NVectorsVar uint, IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
11461236
1147- xOutputStreamWritevAllAsync(x.GoPointer(), VectorsVar, NVectorsVar, IoPriorityVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
1237+ var CallbackVarRef uintptr
1238+ if CallbackVar != nil {
1239+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
1240+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
1241+ CallbackVarRef = cbRefPtr
1242+ } else {
1243+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
1244+ cbFn := *CallbackVar
1245+ cbFn(arg0, arg1, arg2)
1246+ }
1247+ CallbackVarRef = purego.NewCallback(fcb)
1248+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
1249+ }
1250+ }
1251+
1252+ xOutputStreamWritevAllAsync(x.GoPointer(), VectorsVar, NVectorsVar, IoPriorityVar, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
11481253
11491254 }
11501255
@@ -1205,7 +1310,22 @@ var xOutputStreamWritevAsync func(uintptr, []OutputVector, uint, int, uintptr, u
12051310 // until @callback is called.
12061311 func (x *OutputStream) WritevAsync(VectorsVar []OutputVector, NVectorsVar uint, IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
12071312
1208- xOutputStreamWritevAsync(x.GoPointer(), VectorsVar, NVectorsVar, IoPriorityVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
1313+ var CallbackVarRef uintptr
1314+ if CallbackVar != nil {
1315+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
1316+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
1317+ CallbackVarRef = cbRefPtr
1318+ } else {
1319+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
1320+ cbFn := *CallbackVar
1321+ cbFn(arg0, arg1, arg2)
1322+ }
1323+ CallbackVarRef = purego.NewCallback(fcb)
1324+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
1325+ }
1326+ }
1327+
1328+ xOutputStreamWritevAsync(x.GoPointer(), VectorsVar, NVectorsVar, IoPriorityVar, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
12091329
12101330 }
12111331
M v4/gio/gpermission.go +32 -2
@@ -249,7 +249,22 @@ var xPermissionAcquireAsync func(uintptr, uintptr, uintptr, uintptr)
249249 // g_permission_acquire().
250250 func (x *Permission) AcquireAsync(CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
251251
252- xPermissionAcquireAsync(x.GoPointer(), CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
252+ var CallbackVarRef uintptr
253+ if CallbackVar != nil {
254+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
255+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
256+ CallbackVarRef = cbRefPtr
257+ } else {
258+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
259+ cbFn := *CallbackVar
260+ cbFn(arg0, arg1, arg2)
261+ }
262+ CallbackVarRef = purego.NewCallback(fcb)
263+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
264+ }
265+ }
266+
267+ xPermissionAcquireAsync(x.GoPointer(), CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
253268
254269 }
255270
@@ -353,7 +368,22 @@ var xPermissionReleaseAsync func(uintptr, uintptr, uintptr, uintptr)
353368 // g_permission_release().
354369 func (x *Permission) ReleaseAsync(CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
355370
356- xPermissionReleaseAsync(x.GoPointer(), CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
371+ var CallbackVarRef uintptr
372+ if CallbackVar != nil {
373+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
374+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
375+ CallbackVarRef = cbRefPtr
376+ } else {
377+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
378+ cbFn := *CallbackVar
379+ cbFn(arg0, arg1, arg2)
380+ }
381+ CallbackVarRef = purego.NewCallback(fcb)
382+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
383+ }
384+ }
385+
386+ xPermissionReleaseAsync(x.GoPointer(), CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
357387
358388 }
359389
M v4/gio/gpropertyaction.go +2 -2
@@ -147,7 +147,7 @@ func (x *PropertyAction) GetPropertyInvertBoolean() bool {
147147 func (x *PropertyAction) SetPropertyName(value string) {
148148 var v gobject.Value
149149 v.Init(gobject.TypeStringVal)
150- v.SetString(value)
150+ v.SetString(&value)
151151 x.SetProperty("name", &v)
152152 }
153153
@@ -177,7 +177,7 @@ func (x *PropertyAction) GetPropertyParameterType() uintptr {
177177 func (x *PropertyAction) SetPropertyPropertyName(value string) {
178178 var v gobject.Value
179179 v.Init(gobject.TypeStringVal)
180- v.SetString(value)
180+ v.SetString(&value)
181181 x.SetProperty("property-name", &v)
182182 }
183183
M v4/gio/gproxyaddress.go +9 -9
@@ -47,7 +47,7 @@ func ProxyAddressNewFromInternalPtr(ptr uintptr) *ProxyAddress {
4747 return cls
4848 }
4949
50-var xNewProxyAddress func(uintptr, uint16, string, string, uint16, string, string) uintptr
50+var xNewProxyAddress func(uintptr, uint16, string, string, uint16, uintptr, uintptr) uintptr
5151
5252 // Creates a new #GProxyAddress for @inetaddr with @protocol that should
5353 // tunnel through @dest_hostname and @dest_port.
@@ -55,10 +55,10 @@ var xNewProxyAddress func(uintptr, uint16, string, string, uint16, string, strin
5555 // (Note that this method doesn't set the #GProxyAddress:uri or
5656 // #GProxyAddress:destination-protocol fields; use g_object_new()
5757 // directly if you want to set those.)
58-func NewProxyAddress(InetaddrVar *InetAddress, PortVar uint16, ProtocolVar string, DestHostnameVar string, DestPortVar uint16, UsernameVar string, PasswordVar string) *ProxyAddress {
58+func NewProxyAddress(InetaddrVar *InetAddress, PortVar uint16, ProtocolVar string, DestHostnameVar string, DestPortVar uint16, UsernameVar *string, PasswordVar *string) *ProxyAddress {
5959 var cls *ProxyAddress
6060
61- cret := xNewProxyAddress(InetaddrVar.GoPointer(), PortVar, ProtocolVar, DestHostnameVar, DestPortVar, UsernameVar, PasswordVar)
61+ cret := xNewProxyAddress(InetaddrVar.GoPointer(), PortVar, ProtocolVar, DestHostnameVar, DestPortVar, core.NullableStringToPtr(UsernameVar), core.NullableStringToPtr(PasswordVar))
6262
6363 if cret == 0 {
6464 return nil
@@ -152,7 +152,7 @@ func (c *ProxyAddress) SetGoPointer(ptr uintptr) {
152152 func (x *ProxyAddress) SetPropertyDestinationHostname(value string) {
153153 var v gobject.Value
154154 v.Init(gobject.TypeStringVal)
155- v.SetString(value)
155+ v.SetString(&value)
156156 x.SetProperty("destination-hostname", &v)
157157 }
158158
@@ -187,7 +187,7 @@ func (x *ProxyAddress) GetPropertyDestinationPort() uint {
187187 func (x *ProxyAddress) SetPropertyDestinationProtocol(value string) {
188188 var v gobject.Value
189189 v.Init(gobject.TypeStringVal)
190- v.SetString(value)
190+ v.SetString(&value)
191191 x.SetProperty("destination-protocol", &v)
192192 }
193193
@@ -205,7 +205,7 @@ func (x *ProxyAddress) GetPropertyDestinationProtocol() string {
205205 func (x *ProxyAddress) SetPropertyPassword(value string) {
206206 var v gobject.Value
207207 v.Init(gobject.TypeStringVal)
208- v.SetString(value)
208+ v.SetString(&value)
209209 x.SetProperty("password", &v)
210210 }
211211
@@ -222,7 +222,7 @@ func (x *ProxyAddress) GetPropertyPassword() string {
222222 func (x *ProxyAddress) SetPropertyProtocol(value string) {
223223 var v gobject.Value
224224 v.Init(gobject.TypeStringVal)
225- v.SetString(value)
225+ v.SetString(&value)
226226 x.SetProperty("protocol", &v)
227227 }
228228
@@ -240,7 +240,7 @@ func (x *ProxyAddress) GetPropertyProtocol() string {
240240 func (x *ProxyAddress) SetPropertyUri(value string) {
241241 var v gobject.Value
242242 v.Init(gobject.TypeStringVal)
243- v.SetString(value)
243+ v.SetString(&value)
244244 x.SetProperty("uri", &v)
245245 }
246246
@@ -258,7 +258,7 @@ func (x *ProxyAddress) GetPropertyUri() string {
258258 func (x *ProxyAddress) SetPropertyUsername(value string) {
259259 var v gobject.Value
260260 v.Init(gobject.TypeStringVal)
261- v.SetString(value)
261+ v.SetString(&value)
262262 x.SetProperty("username", &v)
263263 }
264264
M v4/gio/gproxyaddressenumerator.go +1 -1
@@ -265,7 +265,7 @@ func (x *ProxyAddressEnumerator) GetPropertyDefaultPort() uint {
265265 func (x *ProxyAddressEnumerator) SetPropertyUri(value string) {
266266 var v gobject.Value
267267 v.Init(gobject.TypeStringVal)
268- v.SetString(value)
268+ v.SetString(&value)
269269 x.SetProperty("uri", &v)
270270 }
271271
M v4/gio/gresolver.go +80 -5
@@ -531,7 +531,22 @@ var xResolverLookupByAddressAsync func(uintptr, uintptr, uintptr, uintptr, uintp
531531 // call g_resolver_lookup_by_address_finish() to get the final result.
532532 func (x *Resolver) LookupByAddressAsync(AddressVar *InetAddress, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
533533
534- xResolverLookupByAddressAsync(x.GoPointer(), AddressVar.GoPointer(), CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
534+ var CallbackVarRef uintptr
535+ if CallbackVar != nil {
536+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
537+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
538+ CallbackVarRef = cbRefPtr
539+ } else {
540+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
541+ cbFn := *CallbackVar
542+ cbFn(arg0, arg1, arg2)
543+ }
544+ CallbackVarRef = purego.NewCallback(fcb)
545+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
546+ }
547+ }
548+
549+ xResolverLookupByAddressAsync(x.GoPointer(), AddressVar.GoPointer(), CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
535550
536551 }
537552
@@ -598,7 +613,22 @@ var xResolverLookupByNameAsync func(uintptr, string, uintptr, uintptr, uintptr)
598613 // See g_resolver_lookup_by_name() for more details.
599614 func (x *Resolver) LookupByNameAsync(HostnameVar string, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
600615
601- xResolverLookupByNameAsync(x.GoPointer(), HostnameVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
616+ var CallbackVarRef uintptr
617+ if CallbackVar != nil {
618+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
619+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
620+ CallbackVarRef = cbRefPtr
621+ } else {
622+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
623+ cbFn := *CallbackVar
624+ cbFn(arg0, arg1, arg2)
625+ }
626+ CallbackVarRef = purego.NewCallback(fcb)
627+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
628+ }
629+ }
630+
631+ xResolverLookupByNameAsync(x.GoPointer(), HostnameVar, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
602632
603633 }
604634
@@ -645,7 +675,22 @@ var xResolverLookupByNameWithFlagsAsync func(uintptr, string, ResolverNameLookup
645675 // See g_resolver_lookup_by_name() for more details.
646676 func (x *Resolver) LookupByNameWithFlagsAsync(HostnameVar string, FlagsVar ResolverNameLookupFlags, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
647677
648- xResolverLookupByNameWithFlagsAsync(x.GoPointer(), HostnameVar, FlagsVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
678+ var CallbackVarRef uintptr
679+ if CallbackVar != nil {
680+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
681+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
682+ CallbackVarRef = cbRefPtr
683+ } else {
684+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
685+ cbFn := *CallbackVar
686+ cbFn(arg0, arg1, arg2)
687+ }
688+ CallbackVarRef = purego.NewCallback(fcb)
689+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
690+ }
691+ }
692+
693+ xResolverLookupByNameWithFlagsAsync(x.GoPointer(), HostnameVar, FlagsVar, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
649694
650695 }
651696
@@ -699,7 +744,22 @@ var xResolverLookupRecordsAsync func(uintptr, string, ResolverRecordType, uintpt
699744 // g_resolver_lookup_records() for more details.
700745 func (x *Resolver) LookupRecordsAsync(RrnameVar string, RecordTypeVar ResolverRecordType, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
701746
702- xResolverLookupRecordsAsync(x.GoPointer(), RrnameVar, RecordTypeVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
747+ var CallbackVarRef uintptr
748+ if CallbackVar != nil {
749+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
750+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
751+ CallbackVarRef = cbRefPtr
752+ } else {
753+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
754+ cbFn := *CallbackVar
755+ cbFn(arg0, arg1, arg2)
756+ }
757+ CallbackVarRef = purego.NewCallback(fcb)
758+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
759+ }
760+ }
761+
762+ xResolverLookupRecordsAsync(x.GoPointer(), RrnameVar, RecordTypeVar, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
703763
704764 }
705765
@@ -767,7 +827,22 @@ var xResolverLookupServiceAsync func(uintptr, string, string, string, uintptr, u
767827 // details.
768828 func (x *Resolver) LookupServiceAsync(ServiceVar string, ProtocolVar string, DomainVar string, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
769829
770- xResolverLookupServiceAsync(x.GoPointer(), ServiceVar, ProtocolVar, DomainVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
830+ var CallbackVarRef uintptr
831+ if CallbackVar != nil {
832+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
833+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
834+ CallbackVarRef = cbRefPtr
835+ } else {
836+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
837+ cbFn := *CallbackVar
838+ cbFn(arg0, arg1, arg2)
839+ }
840+ CallbackVarRef = purego.NewCallback(fcb)
841+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
842+ }
843+ }
844+
845+ xResolverLookupServiceAsync(x.GoPointer(), ServiceVar, ProtocolVar, DomainVar, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
771846
772847 }
773848
M v4/gio/gsettings.go +113 -8
@@ -2,6 +2,7 @@
22 package gio
33
44 import (
5+ "fmt"
56 "structs"
67 "unsafe"
78
@@ -629,7 +630,7 @@ func NewSettings(SchemaIdVar string) *Settings {
629630 return cls
630631 }
631632
632-var xNewSettingsFull func(*SettingsSchema, uintptr, string) uintptr
633+var xNewSettingsFull func(*SettingsSchema, uintptr, uintptr) uintptr
633634
634635 // Creates a new [class@Gio.Settings] object with a given schema, backend and
635636 // path.
@@ -654,10 +655,10 @@ var xNewSettingsFull func(*SettingsSchema, uintptr, string) uintptr
654655 // error if @path is `NULL` and the schema has no path of its own or if
655656 // @path is non-`NULL` and not equal to the path that the schema does
656657 // have.
657-func NewSettingsFull(SchemaVar *SettingsSchema, BackendVar *SettingsBackend, PathVar string) *Settings {
658+func NewSettingsFull(SchemaVar *SettingsSchema, BackendVar *SettingsBackend, PathVar *string) *Settings {
658659 var cls *Settings
659660
660- cret := xNewSettingsFull(SchemaVar, BackendVar.GoPointer(), PathVar)
661+ cret := xNewSettingsFull(SchemaVar, BackendVar.GoPointer(), core.NullableStringToPtr(PathVar))
661662
662663 if cret == 0 {
663664 return nil
@@ -793,7 +794,52 @@ var xSettingsBindWithMapping func(uintptr, string, uintptr, string, SettingsBind
793794 // binding overrides the first one.
794795 func (x *Settings) BindWithMapping(KeyVar string, ObjectVar *gobject.Object, PropertyVar string, FlagsVar SettingsBindFlags, GetMappingVar *SettingsBindGetMapping, SetMappingVar *SettingsBindSetMapping, UserDataVar uintptr, DestroyVar *glib.DestroyNotify) {
795796
796- xSettingsBindWithMapping(x.GoPointer(), KeyVar, ObjectVar.GoPointer(), PropertyVar, FlagsVar, glib.NewCallbackNullable(GetMappingVar), glib.NewCallbackNullable(SetMappingVar), UserDataVar, glib.NewCallback(DestroyVar))
797+ var GetMappingVarRef uintptr
798+ if GetMappingVar != nil {
799+ GetMappingVarPtr := uintptr(unsafe.Pointer(GetMappingVar))
800+ if cbRefPtr, ok := glib.GetCallback(GetMappingVarPtr); ok {
801+ GetMappingVarRef = cbRefPtr
802+ } else {
803+ fcb := func(arg0 *gobject.Value, arg1 *glib.Variant, arg2 uintptr) bool {
804+ cbFn := *GetMappingVar
805+ return cbFn(arg0, arg1, arg2)
806+ }
807+ GetMappingVarRef = purego.NewCallback(fcb)
808+ glib.SaveCallback(GetMappingVarPtr, GetMappingVarRef)
809+ }
810+ }
811+
812+ var SetMappingVarRef uintptr
813+ if SetMappingVar != nil {
814+ SetMappingVarPtr := uintptr(unsafe.Pointer(SetMappingVar))
815+ if cbRefPtr, ok := glib.GetCallback(SetMappingVarPtr); ok {
816+ SetMappingVarRef = cbRefPtr
817+ } else {
818+ fcb := func(arg0 *gobject.Value, arg1 *glib.VariantType, arg2 uintptr) *glib.Variant {
819+ cbFn := *SetMappingVar
820+ return cbFn(arg0, arg1, arg2)
821+ }
822+ SetMappingVarRef = purego.NewCallback(fcb)
823+ glib.SaveCallback(SetMappingVarPtr, SetMappingVarRef)
824+ }
825+ }
826+
827+ var DestroyVarRef uintptr
828+ if DestroyVar != nil {
829+ DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
830+ if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok {
831+ DestroyVarRef = cbRefPtr
832+ } else {
833+ fcb := func(arg0 uintptr) {
834+ cbFn := *DestroyVar
835+ cbFn(arg0)
836+ }
837+ DestroyVarRef = purego.NewCallback(fcb)
838+ glib.SaveCallback(DestroyVarPtr, DestroyVarRef)
839+ }
840+ }
841+
842+ xSettingsBindWithMapping(x.GoPointer(), KeyVar, ObjectVar.GoPointer(), PropertyVar, FlagsVar, GetMappingVarRef, SetMappingVarRef, UserDataVar, DestroyVarRef)
797843
798844 }
799845
@@ -1085,7 +1131,22 @@ var xSettingsGetMapped func(uintptr, string, uintptr, uintptr) uintptr
10851131 // just as any other value would be.
10861132 func (x *Settings) GetMapped(KeyVar string, MappingVar *SettingsGetMapping, UserDataVar uintptr) uintptr {
10871133
1088- cret := xSettingsGetMapped(x.GoPointer(), KeyVar, glib.NewCallback(MappingVar), UserDataVar)
1134+ var MappingVarRef uintptr
1135+ if MappingVar != nil {
1136+ MappingVarPtr := uintptr(unsafe.Pointer(MappingVar))
1137+ if cbRefPtr, ok := glib.GetCallback(MappingVarPtr); ok {
1138+ MappingVarRef = cbRefPtr
1139+ } else {
1140+ fcb := func(arg0 *glib.Variant, arg1 *uintptr, arg2 uintptr) bool {
1141+ cbFn := *MappingVar
1142+ return cbFn(arg0, arg1, arg2)
1143+ }
1144+ MappingVarRef = purego.NewCallback(fcb)
1145+ glib.SaveCallback(MappingVarPtr, MappingVarRef)
1146+ }
1147+ }
1148+
1149+ cret := xSettingsGetMapped(x.GoPointer(), KeyVar, MappingVarRef, UserDataVar)
10891150 return cret
10901151 }
10911152
@@ -1492,7 +1553,7 @@ func (x *Settings) GetPropertyHasUnapplied() bool {
14921553 func (x *Settings) SetPropertyPath(value string) {
14931554 var v gobject.Value
14941555 v.Init(gobject.TypeStringVal)
1495- v.SetString(value)
1556+ v.SetString(&value)
14961557 x.SetProperty("path", &v)
14971558 }
14981559
@@ -1517,7 +1578,7 @@ func (x *Settings) GetPropertyPath() string {
15171578 func (x *Settings) SetPropertySchema(value string) {
15181579 var v gobject.Value
15191580 v.Init(gobject.TypeStringVal)
1520- v.SetString(value)
1581+ v.SetString(&value)
15211582 x.SetProperty("schema", &v)
15221583 }
15231584
@@ -1543,7 +1604,7 @@ func (x *Settings) GetPropertySchema() string {
15431604 func (x *Settings) SetPropertySchemaId(value string) {
15441605 var v gobject.Value
15451606 v.Init(gobject.TypeStringVal)
1546- v.SetString(value)
1607+ v.SetString(&value)
15471608 x.SetProperty("schema-id", &v)
15481609 }
15491610
@@ -1652,6 +1713,28 @@ func (x *Settings) ConnectChanged(cb *func(Settings, string)) uint32 {
16521713 return gobject.SignalConnect(x.GoPointer(), "changed", cbRefPtr)
16531714 }
16541715
1716+// ConnectChangedWithDetail connects to the "changed" signal with a detail string.
1717+// The detail is appended as "changed::<detail>".
1718+func (x *Settings) ConnectChangedWithDetail(detail string, cb *func(Settings, string)) uint32 {
1719+ cbPtr := uintptr(unsafe.Pointer(cb))
1720+ signalName := fmt.Sprintf("changed::%s", detail)
1721+ if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1722+ return gobject.SignalConnect(x.GoPointer(), signalName, cbRefPtr)
1723+ }
1724+
1725+ fcb := func(clsPtr uintptr, KeyVarp string) {
1726+ fa := Settings{}
1727+ fa.Ptr = clsPtr
1728+ cbFn := *cb
1729+
1730+ cbFn(fa, KeyVarp)
1731+
1732+ }
1733+ cbRefPtr := purego.NewCallback(fcb)
1734+ glib.SaveCallback(cbPtr, cbRefPtr)
1735+ return gobject.SignalConnect(x.GoPointer(), signalName, cbRefPtr)
1736+}
1737+
16551738 // Emitted once per writability change event that affects this settings object.
16561739 //
16571740 // You should connect
@@ -1717,6 +1800,28 @@ func (x *Settings) ConnectWritableChanged(cb *func(Settings, string)) uint32 {
17171800 return gobject.SignalConnect(x.GoPointer(), "writable-changed", cbRefPtr)
17181801 }
17191802
1803+// ConnectWritableChangedWithDetail connects to the "writable-changed" signal with a detail string.
1804+// The detail is appended as "writable-changed::<detail>".
1805+func (x *Settings) ConnectWritableChangedWithDetail(detail string, cb *func(Settings, string)) uint32 {
1806+ cbPtr := uintptr(unsafe.Pointer(cb))
1807+ signalName := fmt.Sprintf("writable-changed::%s", detail)
1808+ if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1809+ return gobject.SignalConnect(x.GoPointer(), signalName, cbRefPtr)
1810+ }
1811+
1812+ fcb := func(clsPtr uintptr, KeyVarp string) {
1813+ fa := Settings{}
1814+ fa.Ptr = clsPtr
1815+ cbFn := *cb
1816+
1817+ cbFn(fa, KeyVarp)
1818+
1819+ }
1820+ cbRefPtr := purego.NewCallback(fcb)
1821+ glib.SaveCallback(cbPtr, cbRefPtr)
1822+ return gobject.SignalConnect(x.GoPointer(), signalName, cbRefPtr)
1823+}
1824+
17201825 var xSettingsListRelocatableSchemas func() []string
17211826
17221827 // Deprecated.
M v4/gio/gsettingsbackend.go +3 -3
@@ -318,7 +318,7 @@ const (
318318 SETTINGS_BACKEND_EXTENSION_POINT_NAME string = "gsettings-backend"
319319 )
320320
321-var xKeyfileSettingsBackendNew func(string, string, string) uintptr
321+var xKeyfileSettingsBackendNew func(string, string, uintptr) uintptr
322322
323323 // Creates a keyfile-backed [class@Gio.SettingsBackend].
324324 //
@@ -369,10 +369,10 @@ var xKeyfileSettingsBackendNew func(string, string, string) uintptr
369369 // the directory specified by the `GKeyfileSettingsBackend:defaults-dir`
370370 // property, and a list of locked keys from a text file with the name `locks` in
371371 // the same location.
372-func KeyfileSettingsBackendNew(FilenameVar string, RootPathVar string, RootGroupVar string) *SettingsBackend {
372+func KeyfileSettingsBackendNew(FilenameVar string, RootPathVar string, RootGroupVar *string) *SettingsBackend {
373373 var cls *SettingsBackend
374374
375- cret := xKeyfileSettingsBackendNew(FilenameVar, RootPathVar, RootGroupVar)
375+ cret := xKeyfileSettingsBackendNew(FilenameVar, RootPathVar, core.NullableStringToPtr(RootGroupVar))
376376
377377 if cret == 0 {
378378 return nil
M v4/gio/gsimpleaction.go +1 -1
@@ -155,7 +155,7 @@ func (x *SimpleAction) GetPropertyEnabled() bool {
155155 func (x *SimpleAction) SetPropertyName(value string) {
156156 var v gobject.Value
157157 v.Init(gobject.TypeStringVal)
158- v.SetString(value)
158+ v.SetString(&value)
159159 x.SetProperty("name", &v)
160160 }
161161
M v4/gio/gsimpleasyncresult.go +144 -9
@@ -27,7 +27,22 @@ var xSimpleAsyncReportErrorInIdle func(uintptr, uintptr, uintptr, glib.Quark, in
2727 // information.
2828 func SimpleAsyncReportErrorInIdle(ObjectVar *gobject.Object, CallbackVar *AsyncReadyCallback, UserDataVar uintptr, DomainVar glib.Quark, CodeVar int, FormatVar string, varArgs ...interface{}) {
2929
30- xSimpleAsyncReportErrorInIdle(ObjectVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar, DomainVar, CodeVar, FormatVar, varArgs...)
30+ var CallbackVarRef uintptr
31+ if CallbackVar != nil {
32+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
33+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
34+ CallbackVarRef = cbRefPtr
35+ } else {
36+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
37+ cbFn := *CallbackVar
38+ cbFn(arg0, arg1, arg2)
39+ }
40+ CallbackVarRef = purego.NewCallback(fcb)
41+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
42+ }
43+ }
44+
45+ xSimpleAsyncReportErrorInIdle(ObjectVar.GoPointer(), CallbackVarRef, UserDataVar, DomainVar, CodeVar, FormatVar, varArgs...)
3146
3247 }
3348
@@ -38,7 +53,22 @@ var xSimpleAsyncReportGerrorInIdle func(uintptr, uintptr, uintptr, *glib.Error)
3853 // than building a new one.
3954 func SimpleAsyncReportGerrorInIdle(ObjectVar *gobject.Object, CallbackVar *AsyncReadyCallback, UserDataVar uintptr, ErrorVar *glib.Error) {
4055
41- xSimpleAsyncReportGerrorInIdle(ObjectVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar, ErrorVar)
56+ var CallbackVarRef uintptr
57+ if CallbackVar != nil {
58+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
59+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
60+ CallbackVarRef = cbRefPtr
61+ } else {
62+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
63+ cbFn := *CallbackVar
64+ cbFn(arg0, arg1, arg2)
65+ }
66+ CallbackVarRef = purego.NewCallback(fcb)
67+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
68+ }
69+ }
70+
71+ xSimpleAsyncReportGerrorInIdle(ObjectVar.GoPointer(), CallbackVarRef, UserDataVar, ErrorVar)
4272
4373 }
4474
@@ -49,7 +79,22 @@ var xSimpleAsyncReportTakeGerrorInIdle func(uintptr, uintptr, uintptr, *glib.Err
4979 // ownership of @error, so the caller does not have to free it any more.
5080 func SimpleAsyncReportTakeGerrorInIdle(ObjectVar *gobject.Object, CallbackVar *AsyncReadyCallback, UserDataVar uintptr, ErrorVar *glib.Error) {
5181
52- xSimpleAsyncReportTakeGerrorInIdle(ObjectVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar, ErrorVar)
82+ var CallbackVarRef uintptr
83+ if CallbackVar != nil {
84+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
85+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
86+ CallbackVarRef = cbRefPtr
87+ } else {
88+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
89+ cbFn := *CallbackVar
90+ cbFn(arg0, arg1, arg2)
91+ }
92+ CallbackVarRef = purego.NewCallback(fcb)
93+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
94+ }
95+ }
96+
97+ xSimpleAsyncReportTakeGerrorInIdle(ObjectVar.GoPointer(), CallbackVarRef, UserDataVar, ErrorVar)
5398
5499 }
55100
@@ -257,7 +302,22 @@ var xNewSimpleAsyncResult func(uintptr, uintptr, uintptr, uintptr) uintptr
257302 func NewSimpleAsyncResult(SourceObjectVar *gobject.Object, CallbackVar *AsyncReadyCallback, UserDataVar uintptr, SourceTagVar uintptr) *SimpleAsyncResult {
258303 var cls *SimpleAsyncResult
259304
260- cret := xNewSimpleAsyncResult(SourceObjectVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar, SourceTagVar)
305+ var CallbackVarRef uintptr
306+ if CallbackVar != nil {
307+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
308+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
309+ CallbackVarRef = cbRefPtr
310+ } else {
311+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
312+ cbFn := *CallbackVar
313+ cbFn(arg0, arg1, arg2)
314+ }
315+ CallbackVarRef = purego.NewCallback(fcb)
316+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
317+ }
318+ }
319+
320+ cret := xNewSimpleAsyncResult(SourceObjectVar.GoPointer(), CallbackVarRef, UserDataVar, SourceTagVar)
261321
262322 if cret == 0 {
263323 return nil
@@ -273,7 +333,22 @@ var xNewSimpleAsyncResultError func(uintptr, uintptr, uintptr, glib.Quark, int,
273333 func NewSimpleAsyncResultError(SourceObjectVar *gobject.Object, CallbackVar *AsyncReadyCallback, UserDataVar uintptr, DomainVar glib.Quark, CodeVar int, FormatVar string, varArgs ...interface{}) *SimpleAsyncResult {
274334 var cls *SimpleAsyncResult
275335
276- cret := xNewSimpleAsyncResultError(SourceObjectVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar, DomainVar, CodeVar, FormatVar, varArgs...)
336+ var CallbackVarRef uintptr
337+ if CallbackVar != nil {
338+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
339+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
340+ CallbackVarRef = cbRefPtr
341+ } else {
342+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
343+ cbFn := *CallbackVar
344+ cbFn(arg0, arg1, arg2)
345+ }
346+ CallbackVarRef = purego.NewCallback(fcb)
347+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
348+ }
349+ }
350+
351+ cret := xNewSimpleAsyncResultError(SourceObjectVar.GoPointer(), CallbackVarRef, UserDataVar, DomainVar, CodeVar, FormatVar, varArgs...)
277352
278353 if cret == 0 {
279354 return nil
@@ -289,7 +364,22 @@ var xNewSimpleAsyncResultFromError func(uintptr, uintptr, uintptr, *glib.Error)
289364 func NewSimpleAsyncResultFromError(SourceObjectVar *gobject.Object, CallbackVar *AsyncReadyCallback, UserDataVar uintptr, ErrorVar *glib.Error) *SimpleAsyncResult {
290365 var cls *SimpleAsyncResult
291366
292- cret := xNewSimpleAsyncResultFromError(SourceObjectVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar, ErrorVar)
367+ var CallbackVarRef uintptr
368+ if CallbackVar != nil {
369+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
370+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
371+ CallbackVarRef = cbRefPtr
372+ } else {
373+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
374+ cbFn := *CallbackVar
375+ cbFn(arg0, arg1, arg2)
376+ }
377+ CallbackVarRef = purego.NewCallback(fcb)
378+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
379+ }
380+ }
381+
382+ cret := xNewSimpleAsyncResultFromError(SourceObjectVar.GoPointer(), CallbackVarRef, UserDataVar, ErrorVar)
293383
294384 if cret == 0 {
295385 return nil
@@ -306,7 +396,22 @@ var xNewSimpleAsyncResultTakeError func(uintptr, uintptr, uintptr, *glib.Error)
306396 func NewSimpleAsyncResultTakeError(SourceObjectVar *gobject.Object, CallbackVar *AsyncReadyCallback, UserDataVar uintptr, ErrorVar *glib.Error) *SimpleAsyncResult {
307397 var cls *SimpleAsyncResult
308398
309- cret := xNewSimpleAsyncResultTakeError(SourceObjectVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar, ErrorVar)
399+ var CallbackVarRef uintptr
400+ if CallbackVar != nil {
401+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
402+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
403+ CallbackVarRef = cbRefPtr
404+ } else {
405+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
406+ cbFn := *CallbackVar
407+ cbFn(arg0, arg1, arg2)
408+ }
409+ CallbackVarRef = purego.NewCallback(fcb)
410+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
411+ }
412+ }
413+
414+ cret := xNewSimpleAsyncResultTakeError(SourceObjectVar.GoPointer(), CallbackVarRef, UserDataVar, ErrorVar)
310415
311416 if cret == 0 {
312417 return nil
@@ -411,7 +516,22 @@ var xSimpleAsyncResultRunInThread func(uintptr, uintptr, int, uintptr)
411516 // is needed to run the job and report its completion.
412517 func (x *SimpleAsyncResult) RunInThread(FuncVar *SimpleAsyncThreadFunc, IoPriorityVar int, CancellableVar *Cancellable) {
413518
414- xSimpleAsyncResultRunInThread(x.GoPointer(), glib.NewCallback(FuncVar), IoPriorityVar, CancellableVar.GoPointer())
519+ var FuncVarRef uintptr
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)
531+ }
532+ }
533+
534+ xSimpleAsyncResultRunInThread(x.GoPointer(), FuncVarRef, IoPriorityVar, CancellableVar.GoPointer())
415535
416536 }
417537
@@ -493,7 +613,22 @@ var xSimpleAsyncResultSetOpResGpointer func(uintptr, uintptr, uintptr)
493613 // Sets the operation result within the asynchronous result to a pointer.
494614 func (x *SimpleAsyncResult) SetOpResGpointer(OpResVar uintptr, DestroyOpResVar *glib.DestroyNotify) {
495615
496- xSimpleAsyncResultSetOpResGpointer(x.GoPointer(), OpResVar, glib.NewCallback(DestroyOpResVar))
616+ var DestroyOpResVarRef uintptr
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)
628+ }
629+ }
630+
631+ xSimpleAsyncResultSetOpResGpointer(x.GoPointer(), OpResVar, DestroyOpResVarRef)
497632
498633 }
499634
M v4/gio/gsimpleproxyresolver.go +7 -7
@@ -179,7 +179,7 @@ func SimpleProxyResolverNewFromInternalPtr(ptr uintptr) *SimpleProxyResolver {
179179 return cls
180180 }
181181
182-var xSimpleProxyResolverSetDefaultProxy func(uintptr, string)
182+var xSimpleProxyResolverSetDefaultProxy func(uintptr, uintptr)
183183
184184 // Sets the default proxy on @resolver, to be used for any URIs that
185185 // don't match #GSimpleProxyResolver:ignore-hosts or a proxy set
@@ -188,9 +188,9 @@ var xSimpleProxyResolverSetDefaultProxy func(uintptr, string)
188188 // If @default_proxy starts with "socks://",
189189 // #GSimpleProxyResolver will treat it as referring to all three of
190190 // the socks5, socks4a, and socks4 proxy types.
191-func (x *SimpleProxyResolver) SetDefaultProxy(DefaultProxyVar string) {
191+func (x *SimpleProxyResolver) SetDefaultProxy(DefaultProxyVar *string) {
192192
193- xSimpleProxyResolverSetDefaultProxy(x.GoPointer(), DefaultProxyVar)
193+ xSimpleProxyResolverSetDefaultProxy(x.GoPointer(), core.NullableStringToPtr(DefaultProxyVar))
194194
195195 }
196196
@@ -244,7 +244,7 @@ func (c *SimpleProxyResolver) SetGoPointer(ptr uintptr) {
244244 func (x *SimpleProxyResolver) SetPropertyDefaultProxy(value string) {
245245 var v gobject.Value
246246 v.Init(gobject.TypeStringVal)
247- v.SetString(value)
247+ v.SetString(&value)
248248 x.SetProperty("default-proxy", &v)
249249 }
250250
@@ -402,16 +402,16 @@ func (x *SimpleProxyResolver) LookupFinish(ResultVar AsyncResult) ([]string, err
402402
403403 }
404404
405-var xSimpleProxyResolverNew func(string, []string) uintptr
405+var xSimpleProxyResolverNew func(uintptr, []string) uintptr
406406
407407 // Creates a new #GSimpleProxyResolver. See
408408 // #GSimpleProxyResolver:default-proxy and
409409 // #GSimpleProxyResolver:ignore-hosts for more details on how the
410410 // arguments are interpreted.
411-func SimpleProxyResolverNew(DefaultProxyVar string, IgnoreHostsVar []string) *ProxyResolverBase {
411+func SimpleProxyResolverNew(DefaultProxyVar *string, IgnoreHostsVar []string) *ProxyResolverBase {
412412 var cls *ProxyResolverBase
413413
414- cret := xSimpleProxyResolverNew(DefaultProxyVar, IgnoreHostsVar)
414+ cret := xSimpleProxyResolverNew(core.NullableStringToPtr(DefaultProxyVar), IgnoreHostsVar)
415415
416416 if cret == 0 {
417417 return nil
M v4/gio/gsocket.go +12 -12
@@ -987,7 +987,7 @@ func (x *Socket) IsConnected() bool {
987987 return cret
988988 }
989989
990-var xSocketJoinMulticastGroup func(uintptr, uintptr, bool, string, **glib.Error) bool
990+var xSocketJoinMulticastGroup func(uintptr, uintptr, bool, uintptr, **glib.Error) bool
991991
992992 // Registers @socket to receive multicast messages sent to @group.
993993 // @socket must be a %G_SOCKET_TYPE_DATAGRAM socket, and must have
@@ -1003,10 +1003,10 @@ var xSocketJoinMulticastGroup func(uintptr, uintptr, bool, string, **glib.Error)
10031003 //
10041004 // To bind to a given source-specific multicast address, use
10051005 // g_socket_join_multicast_group_ssm() instead.
1006-func (x *Socket) JoinMulticastGroup(GroupVar *InetAddress, SourceSpecificVar bool, IfaceVar string) (bool, error) {
1006+func (x *Socket) JoinMulticastGroup(GroupVar *InetAddress, SourceSpecificVar bool, IfaceVar *string) (bool, error) {
10071007 var cerr *glib.Error
10081008
1009- cret := xSocketJoinMulticastGroup(x.GoPointer(), GroupVar.GoPointer(), SourceSpecificVar, IfaceVar, &cerr)
1009+ cret := xSocketJoinMulticastGroup(x.GoPointer(), GroupVar.GoPointer(), SourceSpecificVar, core.NullableStringToPtr(IfaceVar), &cerr)
10101010 if cerr == nil {
10111011 return cret, nil
10121012 }
@@ -1014,7 +1014,7 @@ func (x *Socket) JoinMulticastGroup(GroupVar *InetAddress, SourceSpecificVar boo
10141014
10151015 }
10161016
1017-var xSocketJoinMulticastGroupSsm func(uintptr, uintptr, uintptr, string, **glib.Error) bool
1017+var xSocketJoinMulticastGroupSsm func(uintptr, uintptr, uintptr, uintptr, **glib.Error) bool
10181018
10191019 // Registers @socket to receive multicast messages sent to @group.
10201020 // @socket must be a %G_SOCKET_TYPE_DATAGRAM socket, and must have
@@ -1031,10 +1031,10 @@ var xSocketJoinMulticastGroupSsm func(uintptr, uintptr, uintptr, string, **glib.
10311031 // Note that this function can be called multiple times for the same
10321032 // @group with different @source_specific in order to receive multicast
10331033 // packets from more than one source.
1034-func (x *Socket) JoinMulticastGroupSsm(GroupVar *InetAddress, SourceSpecificVar *InetAddress, IfaceVar string) (bool, error) {
1034+func (x *Socket) JoinMulticastGroupSsm(GroupVar *InetAddress, SourceSpecificVar *InetAddress, IfaceVar *string) (bool, error) {
10351035 var cerr *glib.Error
10361036
1037- cret := xSocketJoinMulticastGroupSsm(x.GoPointer(), GroupVar.GoPointer(), SourceSpecificVar.GoPointer(), IfaceVar, &cerr)
1037+ cret := xSocketJoinMulticastGroupSsm(x.GoPointer(), GroupVar.GoPointer(), SourceSpecificVar.GoPointer(), core.NullableStringToPtr(IfaceVar), &cerr)
10381038 if cerr == nil {
10391039 return cret, nil
10401040 }
@@ -1042,7 +1042,7 @@ func (x *Socket) JoinMulticastGroupSsm(GroupVar *InetAddress, SourceSpecificVar
10421042
10431043 }
10441044
1045-var xSocketLeaveMulticastGroup func(uintptr, uintptr, bool, string, **glib.Error) bool
1045+var xSocketLeaveMulticastGroup func(uintptr, uintptr, bool, uintptr, **glib.Error) bool
10461046
10471047 // Removes @socket from the multicast group defined by @group, @iface,
10481048 // and @source_specific (which must all have the same values they had
@@ -1053,10 +1053,10 @@ var xSocketLeaveMulticastGroup func(uintptr, uintptr, bool, string, **glib.Error
10531053 //
10541054 // To unbind to a given source-specific multicast address, use
10551055 // g_socket_leave_multicast_group_ssm() instead.
1056-func (x *Socket) LeaveMulticastGroup(GroupVar *InetAddress, SourceSpecificVar bool, IfaceVar string) (bool, error) {
1056+func (x *Socket) LeaveMulticastGroup(GroupVar *InetAddress, SourceSpecificVar bool, IfaceVar *string) (bool, error) {
10571057 var cerr *glib.Error
10581058
1059- cret := xSocketLeaveMulticastGroup(x.GoPointer(), GroupVar.GoPointer(), SourceSpecificVar, IfaceVar, &cerr)
1059+ cret := xSocketLeaveMulticastGroup(x.GoPointer(), GroupVar.GoPointer(), SourceSpecificVar, core.NullableStringToPtr(IfaceVar), &cerr)
10601060 if cerr == nil {
10611061 return cret, nil
10621062 }
@@ -1064,7 +1064,7 @@ func (x *Socket) LeaveMulticastGroup(GroupVar *InetAddress, SourceSpecificVar bo
10641064
10651065 }
10661066
1067-var xSocketLeaveMulticastGroupSsm func(uintptr, uintptr, uintptr, string, **glib.Error) bool
1067+var xSocketLeaveMulticastGroupSsm func(uintptr, uintptr, uintptr, uintptr, **glib.Error) bool
10681068
10691069 // Removes @socket from the multicast group defined by @group, @iface,
10701070 // and @source_specific (which must all have the same values they had
@@ -1072,10 +1072,10 @@ var xSocketLeaveMulticastGroupSsm func(uintptr, uintptr, uintptr, string, **glib
10721072 //
10731073 // @socket remains bound to its address and port, and can still receive
10741074 // unicast messages after calling this.
1075-func (x *Socket) LeaveMulticastGroupSsm(GroupVar *InetAddress, SourceSpecificVar *InetAddress, IfaceVar string) (bool, error) {
1075+func (x *Socket) LeaveMulticastGroupSsm(GroupVar *InetAddress, SourceSpecificVar *InetAddress, IfaceVar *string) (bool, error) {
10761076 var cerr *glib.Error
10771077
1078- cret := xSocketLeaveMulticastGroupSsm(x.GoPointer(), GroupVar.GoPointer(), SourceSpecificVar.GoPointer(), IfaceVar, &cerr)
1078+ cret := xSocketLeaveMulticastGroupSsm(x.GoPointer(), GroupVar.GoPointer(), SourceSpecificVar.GoPointer(), core.NullableStringToPtr(IfaceVar), &cerr)
10791079 if cerr == nil {
10801080 return cret, nil
10811081 }
M v4/gio/gsocketaddressenumerator.go +16 -1
@@ -197,7 +197,22 @@ var xSocketAddressEnumeratorNextAsync func(uintptr, uintptr, uintptr, uintptr)
197197 // It is an error to call this multiple times before the previous callback has finished.
198198 func (x *SocketAddressEnumerator) NextAsync(CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
199199
200- xSocketAddressEnumeratorNextAsync(x.GoPointer(), CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
200+ var CallbackVarRef uintptr
201+ if CallbackVar != nil {
202+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
203+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
204+ CallbackVarRef = cbRefPtr
205+ } else {
206+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
207+ cbFn := *CallbackVar
208+ cbFn(arg0, arg1, arg2)
209+ }
210+ CallbackVarRef = purego.NewCallback(fcb)
211+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
212+ }
213+ }
214+
215+ xSocketAddressEnumeratorNextAsync(x.GoPointer(), CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
201216
202217 }
203218
M v4/gio/gsocketclient.go +64 -4
@@ -283,7 +283,22 @@ var xSocketClientConnectAsync func(uintptr, uintptr, uintptr, uintptr, uintptr)
283283 // the result of the operation.
284284 func (x *SocketClient) ConnectAsync(ConnectableVar SocketConnectable, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
285285
286- xSocketClientConnectAsync(x.GoPointer(), ConnectableVar.GoPointer(), CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
286+ var CallbackVarRef uintptr
287+ if CallbackVar != nil {
288+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
289+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
290+ CallbackVarRef = cbRefPtr
291+ } else {
292+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
293+ cbFn := *CallbackVar
294+ cbFn(arg0, arg1, arg2)
295+ }
296+ CallbackVarRef = purego.NewCallback(fcb)
297+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
298+ }
299+ }
300+
301+ xSocketClientConnectAsync(x.GoPointer(), ConnectableVar.GoPointer(), CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
287302
288303 }
289304
@@ -367,7 +382,22 @@ var xSocketClientConnectToHostAsync func(uintptr, string, uint16, uintptr, uintp
367382 // the result of the operation.
368383 func (x *SocketClient) ConnectToHostAsync(HostAndPortVar string, DefaultPortVar uint16, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
369384
370- xSocketClientConnectToHostAsync(x.GoPointer(), HostAndPortVar, DefaultPortVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
385+ var CallbackVarRef uintptr
386+ if CallbackVar != nil {
387+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
388+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
389+ CallbackVarRef = cbRefPtr
390+ } else {
391+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
392+ cbFn := *CallbackVar
393+ cbFn(arg0, arg1, arg2)
394+ }
395+ CallbackVarRef = purego.NewCallback(fcb)
396+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
397+ }
398+ }
399+
400+ xSocketClientConnectToHostAsync(x.GoPointer(), HostAndPortVar, DefaultPortVar, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
371401
372402 }
373403
@@ -432,7 +462,22 @@ var xSocketClientConnectToServiceAsync func(uintptr, string, string, uintptr, ui
432462 // g_socket_client_connect_to_service().
433463 func (x *SocketClient) ConnectToServiceAsync(DomainVar string, ServiceVar string, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
434464
435- xSocketClientConnectToServiceAsync(x.GoPointer(), DomainVar, ServiceVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
465+ var CallbackVarRef uintptr
466+ if CallbackVar != nil {
467+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
468+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
469+ CallbackVarRef = cbRefPtr
470+ } else {
471+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
472+ cbFn := *CallbackVar
473+ cbFn(arg0, arg1, arg2)
474+ }
475+ CallbackVarRef = purego.NewCallback(fcb)
476+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
477+ }
478+ }
479+
480+ xSocketClientConnectToServiceAsync(x.GoPointer(), DomainVar, ServiceVar, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
436481
437482 }
438483
@@ -507,7 +552,22 @@ var xSocketClientConnectToUriAsync func(uintptr, string, uint16, uintptr, uintpt
507552 // the result of the operation.
508553 func (x *SocketClient) ConnectToUriAsync(UriVar string, DefaultPortVar uint16, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
509554
510- xSocketClientConnectToUriAsync(x.GoPointer(), UriVar, DefaultPortVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
555+ var CallbackVarRef uintptr
556+ if CallbackVar != nil {
557+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
558+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
559+ CallbackVarRef = cbRefPtr
560+ } else {
561+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
562+ cbFn := *CallbackVar
563+ cbFn(arg0, arg1, arg2)
564+ }
565+ CallbackVarRef = purego.NewCallback(fcb)
566+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
567+ }
568+ }
569+
570+ xSocketClientConnectToUriAsync(x.GoPointer(), UriVar, DefaultPortVar, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
511571
512572 }
513573
M v4/gio/gsocketconnection.go +16 -1
@@ -240,7 +240,22 @@ var xSocketConnectionConnectAsync func(uintptr, uintptr, uintptr, uintptr, uintp
240240 // Use g_socket_connection_connect_finish() to retrieve the result.
241241 func (x *SocketConnection) ConnectAsync(AddressVar *SocketAddress, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
242242
243- xSocketConnectionConnectAsync(x.GoPointer(), AddressVar.GoPointer(), CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
243+ var CallbackVarRef uintptr
244+ if CallbackVar != nil {
245+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
246+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
247+ CallbackVarRef = cbRefPtr
248+ } else {
249+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
250+ cbFn := *CallbackVar
251+ cbFn(arg0, arg1, arg2)
252+ }
253+ CallbackVarRef = purego.NewCallback(fcb)
254+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
255+ }
256+ }
257+
258+ xSocketConnectionConnectAsync(x.GoPointer(), AddressVar.GoPointer(), CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
244259
245260 }
246261
M v4/gio/gsocketlistener.go +32 -2
@@ -297,7 +297,22 @@ var xSocketListenerAcceptAsync func(uintptr, uintptr, uintptr, uintptr)
297297 // to get the result of the operation.
298298 func (x *SocketListener) AcceptAsync(CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
299299
300- xSocketListenerAcceptAsync(x.GoPointer(), CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
300+ var CallbackVarRef uintptr
301+ if CallbackVar != nil {
302+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
303+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
304+ CallbackVarRef = cbRefPtr
305+ } else {
306+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
307+ cbFn := *CallbackVar
308+ cbFn(arg0, arg1, arg2)
309+ }
310+ CallbackVarRef = purego.NewCallback(fcb)
311+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
312+ }
313+ }
314+
315+ xSocketListenerAcceptAsync(x.GoPointer(), CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
301316
302317 }
303318
@@ -365,7 +380,22 @@ var xSocketListenerAcceptSocketAsync func(uintptr, uintptr, uintptr, uintptr)
365380 // to get the result of the operation.
366381 func (x *SocketListener) AcceptSocketAsync(CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
367382
368- xSocketListenerAcceptSocketAsync(x.GoPointer(), CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
383+ var CallbackVarRef uintptr
384+ if CallbackVar != nil {
385+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
386+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
387+ CallbackVarRef = cbRefPtr
388+ } else {
389+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
390+ cbFn := *CallbackVar
391+ cbFn(arg0, arg1, arg2)
392+ }
393+ CallbackVarRef = purego.NewCallback(fcb)
394+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
395+ }
396+ }
397+
398+ xSocketListenerAcceptSocketAsync(x.GoPointer(), CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
369399
370400 }
371401
M v4/gio/gsubprocess.go +69 -9
@@ -195,7 +195,22 @@ var xSubprocessCommunicateAsync func(uintptr, *glib.Bytes, uintptr, uintptr, uin
195195 // invocation with g_subprocess_communicate_finish().
196196 func (x *Subprocess) CommunicateAsync(StdinBufVar *glib.Bytes, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
197197
198- xSubprocessCommunicateAsync(x.GoPointer(), StdinBufVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
198+ var CallbackVarRef uintptr
199+ if CallbackVar != nil {
200+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
201+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
202+ CallbackVarRef = cbRefPtr
203+ } else {
204+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
205+ cbFn := *CallbackVar
206+ cbFn(arg0, arg1, arg2)
207+ }
208+ CallbackVarRef = purego.NewCallback(fcb)
209+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
210+ }
211+ }
212+
213+ xSubprocessCommunicateAsync(x.GoPointer(), StdinBufVar, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
199214
200215 }
201216
@@ -213,17 +228,17 @@ func (x *Subprocess) CommunicateFinish(ResultVar AsyncResult, StdoutBufVar **gli
213228
214229 }
215230
216-var xSubprocessCommunicateUtf8 func(uintptr, string, uintptr, *string, *string, **glib.Error) bool
231+var xSubprocessCommunicateUtf8 func(uintptr, uintptr, uintptr, *string, *string, **glib.Error) bool
217232
218233 // Like g_subprocess_communicate(), but validates the output of the
219234 // process as UTF-8, and returns it as a regular NUL terminated string.
220235 //
221236 // On error, @stdout_buf and @stderr_buf will be set to undefined values and
222237 // should not be used.
223-func (x *Subprocess) CommunicateUtf8(StdinBufVar string, CancellableVar *Cancellable, StdoutBufVar *string, StderrBufVar *string) (bool, error) {
238+func (x *Subprocess) CommunicateUtf8(StdinBufVar *string, CancellableVar *Cancellable, StdoutBufVar *string, StderrBufVar *string) (bool, error) {
224239 var cerr *glib.Error
225240
226- cret := xSubprocessCommunicateUtf8(x.GoPointer(), StdinBufVar, CancellableVar.GoPointer(), StdoutBufVar, StderrBufVar, &cerr)
241+ cret := xSubprocessCommunicateUtf8(x.GoPointer(), core.NullableStringToPtr(StdinBufVar), CancellableVar.GoPointer(), StdoutBufVar, StderrBufVar, &cerr)
227242 if cerr == nil {
228243 return cret, nil
229244 }
@@ -231,13 +246,28 @@ func (x *Subprocess) CommunicateUtf8(StdinBufVar string, CancellableVar *Cancell
231246
232247 }
233248
234-var xSubprocessCommunicateUtf8Async func(uintptr, string, uintptr, uintptr, uintptr)
249+var xSubprocessCommunicateUtf8Async func(uintptr, uintptr, uintptr, uintptr, uintptr)
235250
236251 // Asynchronous version of g_subprocess_communicate_utf8(). Complete
237252 // invocation with g_subprocess_communicate_utf8_finish().
238-func (x *Subprocess) CommunicateUtf8Async(StdinBufVar string, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
253+func (x *Subprocess) CommunicateUtf8Async(StdinBufVar *string, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
254+
255+ var CallbackVarRef uintptr
256+ if CallbackVar != nil {
257+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
258+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
259+ CallbackVarRef = cbRefPtr
260+ } else {
261+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
262+ cbFn := *CallbackVar
263+ cbFn(arg0, arg1, arg2)
264+ }
265+ CallbackVarRef = purego.NewCallback(fcb)
266+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
267+ }
268+ }
239269
240- xSubprocessCommunicateUtf8Async(x.GoPointer(), StdinBufVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
270+ xSubprocessCommunicateUtf8Async(x.GoPointer(), core.NullableStringToPtr(StdinBufVar), CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
241271
242272 }
243273
@@ -483,7 +513,22 @@ var xSubprocessWaitAsync func(uintptr, uintptr, uintptr, uintptr)
483513 // This is the asynchronous version of g_subprocess_wait().
484514 func (x *Subprocess) WaitAsync(CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
485515
486- xSubprocessWaitAsync(x.GoPointer(), CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
516+ var CallbackVarRef uintptr
517+ if CallbackVar != nil {
518+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
519+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
520+ CallbackVarRef = cbRefPtr
521+ } else {
522+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
523+ cbFn := *CallbackVar
524+ cbFn(arg0, arg1, arg2)
525+ }
526+ CallbackVarRef = purego.NewCallback(fcb)
527+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
528+ }
529+ }
530+
531+ xSubprocessWaitAsync(x.GoPointer(), CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
487532
488533 }
489534
@@ -508,7 +553,22 @@ var xSubprocessWaitCheckAsync func(uintptr, uintptr, uintptr, uintptr)
508553 // This is the asynchronous version of g_subprocess_wait_check().
509554 func (x *Subprocess) WaitCheckAsync(CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
510555
511- xSubprocessWaitCheckAsync(x.GoPointer(), CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
556+ var CallbackVarRef uintptr
557+ if CallbackVar != nil {
558+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
559+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
560+ CallbackVarRef = cbRefPtr
561+ } else {
562+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
563+ cbFn := *CallbackVar
564+ cbFn(arg0, arg1, arg2)
565+ }
566+ CallbackVarRef = purego.NewCallback(fcb)
567+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
568+ }
569+ }
570+
571+ xSubprocessWaitCheckAsync(x.GoPointer(), CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
512572
513573 }
514574
M v4/gio/gsubprocesslauncher.go +42 -10
@@ -2,6 +2,8 @@
22 package gio
33
44 import (
5+ "unsafe"
6+
57 "github.com/jwijenbergh/purego"
68 "github.com/jwijenbergh/puregotk/pkg/core"
79 "github.com/jwijenbergh/puregotk/v4/glib"
@@ -101,7 +103,37 @@ var xSubprocessLauncherSetChildSetup func(uintptr, uintptr, uintptr, uintptr)
101103 // Child setup functions are only available on UNIX.
102104 func (x *SubprocessLauncher) SetChildSetup(ChildSetupVar *glib.SpawnChildSetupFunc, UserDataVar uintptr, DestroyNotifyVar *glib.DestroyNotify) {
103105
104- xSubprocessLauncherSetChildSetup(x.GoPointer(), glib.NewCallback(ChildSetupVar), UserDataVar, glib.NewCallback(DestroyNotifyVar))
106+ var ChildSetupVarRef uintptr
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)
118+ }
119+ }
120+
121+ var DestroyNotifyVarRef uintptr
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)
133+ }
134+ }
135+
136+ xSubprocessLauncherSetChildSetup(x.GoPointer(), ChildSetupVarRef, UserDataVar, DestroyNotifyVarRef)
105137
106138 }
107139
@@ -165,7 +197,7 @@ func (x *SubprocessLauncher) SetFlags(FlagsVar SubprocessFlags) {
165197
166198 }
167199
168-var xSubprocessLauncherSetStderrFilePath func(uintptr, string)
200+var xSubprocessLauncherSetStderrFilePath func(uintptr, uintptr)
169201
170202 // Sets the file path to use as the stderr for spawned processes.
171203 //
@@ -181,13 +213,13 @@ var xSubprocessLauncherSetStderrFilePath func(uintptr, string)
181213 // if the launcher flags contain any flags directing stderr elsewhere.
182214 //
183215 // This feature is only available on UNIX.
184-func (x *SubprocessLauncher) SetStderrFilePath(PathVar string) {
216+func (x *SubprocessLauncher) SetStderrFilePath(PathVar *string) {
185217
186- xSubprocessLauncherSetStderrFilePath(x.GoPointer(), PathVar)
218+ xSubprocessLauncherSetStderrFilePath(x.GoPointer(), core.NullableStringToPtr(PathVar))
187219
188220 }
189221
190-var xSubprocessLauncherSetStdinFilePath func(uintptr, string)
222+var xSubprocessLauncherSetStdinFilePath func(uintptr, uintptr)
191223
192224 // Sets the file path to use as the stdin for spawned processes.
193225 //
@@ -199,13 +231,13 @@ var xSubprocessLauncherSetStdinFilePath func(uintptr, string)
199231 // the launcher flags contain any flags directing stdin elsewhere.
200232 //
201233 // This feature is only available on UNIX.
202-func (x *SubprocessLauncher) SetStdinFilePath(PathVar string) {
234+func (x *SubprocessLauncher) SetStdinFilePath(PathVar *string) {
203235
204- xSubprocessLauncherSetStdinFilePath(x.GoPointer(), PathVar)
236+ xSubprocessLauncherSetStdinFilePath(x.GoPointer(), core.NullableStringToPtr(PathVar))
205237
206238 }
207239
208-var xSubprocessLauncherSetStdoutFilePath func(uintptr, string)
240+var xSubprocessLauncherSetStdoutFilePath func(uintptr, uintptr)
209241
210242 // Sets the file path to use as the stdout for spawned processes.
211243 //
@@ -218,9 +250,9 @@ var xSubprocessLauncherSetStdoutFilePath func(uintptr, string)
218250 // if the launcher flags contain any flags directing stdout elsewhere.
219251 //
220252 // This feature is only available on UNIX.
221-func (x *SubprocessLauncher) SetStdoutFilePath(PathVar string) {
253+func (x *SubprocessLauncher) SetStdoutFilePath(PathVar *string) {
222254
223- xSubprocessLauncherSetStdoutFilePath(x.GoPointer(), PathVar)
255+ xSubprocessLauncherSetStdoutFilePath(x.GoPointer(), core.NullableStringToPtr(PathVar))
224256
225257 }
226258
M v4/gio/gtask.go +134 -14
@@ -633,7 +633,22 @@ var xNewTask func(uintptr, uintptr, uintptr, uintptr) uintptr
633633 func NewTask(SourceObjectVar *gobject.Object, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, CallbackDataVar uintptr) *Task {
634634 var cls *Task
635635
636- cret := xNewTask(SourceObjectVar.GoPointer(), CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), CallbackDataVar)
636+ var CallbackVarRef uintptr
637+ if CallbackVar != nil {
638+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
639+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
640+ CallbackVarRef = cbRefPtr
641+ } else {
642+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
643+ cbFn := *CallbackVar
644+ cbFn(arg0, arg1, arg2)
645+ }
646+ CallbackVarRef = purego.NewCallback(fcb)
647+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
648+ }
649+ }
650+
651+ cret := xNewTask(SourceObjectVar.GoPointer(), CancellableVar.GoPointer(), CallbackVarRef, CallbackDataVar)
637652
638653 if cret == 0 {
639654 return nil
@@ -658,7 +673,22 @@ var xTaskAttachSource func(uintptr, *glib.Source, uintptr)
658673 // This takes a reference on @task until @source is destroyed.
659674 func (x *Task) AttachSource(SourceVar *glib.Source, CallbackVar *glib.SourceFunc) {
660675
661- xTaskAttachSource(x.GoPointer(), SourceVar, glib.NewCallback(CallbackVar))
676+ var CallbackVarRef uintptr
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)
688+ }
689+ }
690+
691+ xTaskAttachSource(x.GoPointer(), SourceVar, CallbackVarRef)
662692
663693 }
664694
@@ -977,7 +1007,22 @@ var xTaskReturnPointer func(uintptr, uintptr, uintptr)
9771007 // reference on it.
9781008 func (x *Task) ReturnPointer(ResultVar uintptr, ResultDestroyVar *glib.DestroyNotify) {
9791009
980- xTaskReturnPointer(x.GoPointer(), ResultVar, glib.NewCallbackNullable(ResultDestroyVar))
1010+ var ResultDestroyVarRef uintptr
1011+ if ResultDestroyVar != nil {
1012+ ResultDestroyVarPtr := uintptr(unsafe.Pointer(ResultDestroyVar))
1013+ if cbRefPtr, ok := glib.GetCallback(ResultDestroyVarPtr); ok {
1014+ ResultDestroyVarRef = cbRefPtr
1015+ } else {
1016+ fcb := func(arg0 uintptr) {
1017+ cbFn := *ResultDestroyVar
1018+ cbFn(arg0)
1019+ }
1020+ ResultDestroyVarRef = purego.NewCallback(fcb)
1021+ glib.SaveCallback(ResultDestroyVarPtr, ResultDestroyVarRef)
1022+ }
1023+ }
1024+
1025+ xTaskReturnPointer(x.GoPointer(), ResultVar, ResultDestroyVarRef)
9811026
9821027 }
9831028
@@ -1040,7 +1085,22 @@ var xTaskRunInThread func(uintptr, uintptr)
10401085 // g_task_run_in_thread().
10411086 func (x *Task) RunInThread(TaskFuncVar *TaskThreadFunc) {
10421087
1043- xTaskRunInThread(x.GoPointer(), glib.NewCallback(TaskFuncVar))
1088+ var TaskFuncVarRef uintptr
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)
1100+ }
1101+ }
1102+
1103+ xTaskRunInThread(x.GoPointer(), TaskFuncVarRef)
10441104
10451105 }
10461106
@@ -1064,7 +1124,22 @@ var xTaskRunInThreadSync func(uintptr, uintptr)
10641124 // limited number of them at a time.
10651125 func (x *Task) RunInThreadSync(TaskFuncVar *TaskThreadFunc) {
10661126
1067- xTaskRunInThreadSync(x.GoPointer(), glib.NewCallback(TaskFuncVar))
1127+ var TaskFuncVarRef uintptr
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)
1139+ }
1140+ }
1141+
1142+ xTaskRunInThreadSync(x.GoPointer(), TaskFuncVarRef)
10681143
10691144 }
10701145
@@ -1090,7 +1165,7 @@ func (x *Task) SetCheckCancellable(CheckCancellableVar bool) {
10901165
10911166 }
10921167
1093-var xTaskSetName func(uintptr, string)
1168+var xTaskSetName func(uintptr, uintptr)
10941169
10951170 // Sets @task’s name, used in debugging and profiling. The name defaults to
10961171 // %NULL.
@@ -1101,9 +1176,9 @@ var xTaskSetName func(uintptr, string)
11011176 //
11021177 // This function may only be called before the @task is first used in a thread
11031178 // other than the one it was constructed in.
1104-func (x *Task) SetName(NameVar string) {
1179+func (x *Task) SetName(NameVar *string) {
11051180
1106- xTaskSetName(x.GoPointer(), NameVar)
1181+ xTaskSetName(x.GoPointer(), core.NullableStringToPtr(NameVar))
11071182
11081183 }
11091184
@@ -1178,7 +1253,7 @@ func (x *Task) SetSourceTag(SourceTagVar uintptr) {
11781253
11791254 }
11801255
1181-var xTaskSetStaticName func(uintptr, string)
1256+var xTaskSetStaticName func(uintptr, uintptr)
11821257
11831258 // Sets @task’s name, used in debugging and profiling.
11841259 //
@@ -1186,9 +1261,9 @@ var xTaskSetStaticName func(uintptr, string)
11861261 //
11871262 // This function is called automatically by [method@Gio.Task.set_source_tag]
11881263 // unless a name is set.
1189-func (x *Task) SetStaticName(NameVar string) {
1264+func (x *Task) SetStaticName(NameVar *string) {
11901265
1191- xTaskSetStaticName(x.GoPointer(), NameVar)
1266+ xTaskSetStaticName(x.GoPointer(), core.NullableStringToPtr(NameVar))
11921267
11931268 }
11941269
@@ -1197,7 +1272,22 @@ var xTaskSetTaskData func(uintptr, uintptr, uintptr)
11971272 // Sets @task's task data (freeing the existing task data, if any).
11981273 func (x *Task) SetTaskData(TaskDataVar uintptr, TaskDataDestroyVar *glib.DestroyNotify) {
11991274
1200- xTaskSetTaskData(x.GoPointer(), TaskDataVar, glib.NewCallbackNullable(TaskDataDestroyVar))
1275+ var TaskDataDestroyVarRef uintptr
1276+ if TaskDataDestroyVar != nil {
1277+ TaskDataDestroyVarPtr := uintptr(unsafe.Pointer(TaskDataDestroyVar))
1278+ if cbRefPtr, ok := glib.GetCallback(TaskDataDestroyVarPtr); ok {
1279+ TaskDataDestroyVarRef = cbRefPtr
1280+ } else {
1281+ fcb := func(arg0 uintptr) {
1282+ cbFn := *TaskDataDestroyVar
1283+ cbFn(arg0)
1284+ }
1285+ TaskDataDestroyVarRef = purego.NewCallback(fcb)
1286+ glib.SaveCallback(TaskDataDestroyVarPtr, TaskDataDestroyVarRef)
1287+ }
1288+ }
1289+
1290+ xTaskSetTaskData(x.GoPointer(), TaskDataVar, TaskDataDestroyVarRef)
12011291
12021292 }
12031293
@@ -1296,7 +1386,22 @@ var xTaskReportError func(uintptr, uintptr, uintptr, uintptr, *glib.Error)
12961386 // See also g_task_report_new_error().
12971387 func TaskReportError(SourceObjectVar *gobject.Object, CallbackVar *AsyncReadyCallback, CallbackDataVar uintptr, SourceTagVar uintptr, ErrorVar *glib.Error) {
12981388
1299- xTaskReportError(SourceObjectVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), CallbackDataVar, SourceTagVar, ErrorVar)
1389+ var CallbackVarRef uintptr
1390+ if CallbackVar != nil {
1391+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
1392+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
1393+ CallbackVarRef = cbRefPtr
1394+ } else {
1395+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
1396+ cbFn := *CallbackVar
1397+ cbFn(arg0, arg1, arg2)
1398+ }
1399+ CallbackVarRef = purego.NewCallback(fcb)
1400+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
1401+ }
1402+ }
1403+
1404+ xTaskReportError(SourceObjectVar.GoPointer(), CallbackVarRef, CallbackDataVar, SourceTagVar, ErrorVar)
13001405
13011406 }
13021407
@@ -1313,7 +1418,22 @@ var xTaskReportNewError func(uintptr, uintptr, uintptr, uintptr, glib.Quark, int
13131418 // See also g_task_report_error().
13141419 func TaskReportNewError(SourceObjectVar *gobject.Object, CallbackVar *AsyncReadyCallback, CallbackDataVar uintptr, SourceTagVar uintptr, DomainVar glib.Quark, CodeVar int, FormatVar string, varArgs ...interface{}) {
13151420
1316- xTaskReportNewError(SourceObjectVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), CallbackDataVar, SourceTagVar, DomainVar, CodeVar, FormatVar, varArgs...)
1421+ var CallbackVarRef uintptr
1422+ if CallbackVar != nil {
1423+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
1424+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
1425+ CallbackVarRef = cbRefPtr
1426+ } else {
1427+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
1428+ cbFn := *CallbackVar
1429+ cbFn(arg0, arg1, arg2)
1430+ }
1431+ CallbackVarRef = purego.NewCallback(fcb)
1432+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
1433+ }
1434+ }
1435+
1436+ xTaskReportNewError(SourceObjectVar.GoPointer(), CallbackVarRef, CallbackDataVar, SourceTagVar, DomainVar, CodeVar, FormatVar, varArgs...)
13171437
13181438 }
13191439
M v4/gio/gthemedicon.go +1 -1
@@ -157,7 +157,7 @@ func (c *ThemedIcon) SetGoPointer(ptr uintptr) {
157157 func (x *ThemedIcon) SetPropertyName(value string) {
158158 var v gobject.Value
159159 v.Init(gobject.TypeStringVal)
160- v.SetString(value)
160+ v.SetString(&value)
161161 x.SetProperty("name", &v)
162162 }
163163
M v4/gio/gtlscertificate.go +11 -11
@@ -203,7 +203,7 @@ func NewTlsCertificateFromPem(DataVar string, LengthVar int) (*TlsCertificate, e
203203
204204 }
205205
206-var xNewTlsCertificateFromPkcs11Uris func(string, string, **glib.Error) uintptr
206+var xNewTlsCertificateFromPkcs11Uris func(string, uintptr, **glib.Error) uintptr
207207
208208 // Creates a #GTlsCertificate from a
209209 // [PKCS \#11](https://docs.oasis-open.org/pkcs11/pkcs11-base/v3.0/os/pkcs11-base-v3.0-os.html) URI.
@@ -232,11 +232,11 @@ var xNewTlsCertificateFromPkcs11Uris func(string, string, **glib.Error) uintptr
232232 // @private_key_pkcs11_uri allows using a private key exposed under a different URI.
233233 //
234234 // Note that the private key is not accessed until usage and may fail or require a PIN later.
235-func NewTlsCertificateFromPkcs11Uris(Pkcs11UriVar string, PrivateKeyPkcs11UriVar string) (*TlsCertificate, error) {
235+func NewTlsCertificateFromPkcs11Uris(Pkcs11UriVar string, PrivateKeyPkcs11UriVar *string) (*TlsCertificate, error) {
236236 var cls *TlsCertificate
237237 var cerr *glib.Error
238238
239- cret := xNewTlsCertificateFromPkcs11Uris(Pkcs11UriVar, PrivateKeyPkcs11UriVar, &cerr)
239+ cret := xNewTlsCertificateFromPkcs11Uris(Pkcs11UriVar, core.NullableStringToPtr(PrivateKeyPkcs11UriVar), &cerr)
240240
241241 if cret == 0 {
242242 return nil, cerr
@@ -250,7 +250,7 @@ func NewTlsCertificateFromPkcs11Uris(Pkcs11UriVar string, PrivateKeyPkcs11UriVar
250250
251251 }
252252
253-var xNewTlsCertificateFromPkcs12 func([]byte, uint, string, **glib.Error) uintptr
253+var xNewTlsCertificateFromPkcs12 func([]byte, uint, uintptr, **glib.Error) uintptr
254254
255255 // Creates a #GTlsCertificate from the data in @data. It must contain
256256 // a certificate and matching private key.
@@ -269,11 +269,11 @@ var xNewTlsCertificateFromPkcs12 func([]byte, uint, string, **glib.Error) uintpt
269269 // %G_IO_ERROR_NOT_SUPPORTED.
270270 //
271271 // Other parsing failures will error with %G_TLS_ERROR_BAD_CERTIFICATE.
272-func NewTlsCertificateFromPkcs12(DataVar []byte, LengthVar uint, PasswordVar string) (*TlsCertificate, error) {
272+func NewTlsCertificateFromPkcs12(DataVar []byte, LengthVar uint, PasswordVar *string) (*TlsCertificate, error) {
273273 var cls *TlsCertificate
274274 var cerr *glib.Error
275275
276- cret := xNewTlsCertificateFromPkcs12(DataVar, LengthVar, PasswordVar, &cerr)
276+ cret := xNewTlsCertificateFromPkcs12(DataVar, LengthVar, core.NullableStringToPtr(PasswordVar), &cerr)
277277
278278 if cret == 0 {
279279 return nil, cerr
@@ -455,7 +455,7 @@ func (x *TlsCertificate) GetPropertyCertificate() []byte {
455455 func (x *TlsCertificate) SetPropertyCertificatePem(value string) {
456456 var v gobject.Value
457457 v.Init(gobject.TypeStringVal)
458- v.SetString(value)
458+ v.SetString(&value)
459459 x.SetProperty("certificate-pem", &v)
460460 }
461461
@@ -527,7 +527,7 @@ func (x *TlsCertificate) GetPropertyNotValidBefore() uintptr {
527527 func (x *TlsCertificate) SetPropertyPassword(value string) {
528528 var v gobject.Value
529529 v.Init(gobject.TypeStringVal)
530- v.SetString(value)
530+ v.SetString(&value)
531531 x.SetProperty("password", &v)
532532 }
533533
@@ -540,7 +540,7 @@ func (x *TlsCertificate) SetPropertyPassword(value string) {
540540 func (x *TlsCertificate) SetPropertyPkcs11Uri(value string) {
541541 var v gobject.Value
542542 v.Init(gobject.TypeStringVal)
543- v.SetString(value)
543+ v.SetString(&value)
544544 x.SetProperty("pkcs11-uri", &v)
545545 }
546546
@@ -642,7 +642,7 @@ func (x *TlsCertificate) GetPropertyPrivateKey() []byte {
642642 func (x *TlsCertificate) SetPropertyPrivateKeyPem(value string) {
643643 var v gobject.Value
644644 v.Init(gobject.TypeStringVal)
645- v.SetString(value)
645+ v.SetString(&value)
646646 x.SetProperty("private-key-pem", &v)
647647 }
648648
@@ -677,7 +677,7 @@ func (x *TlsCertificate) GetPropertyPrivateKeyPem() string {
677677 func (x *TlsCertificate) SetPropertyPrivateKeyPkcs11Uri(value string) {
678678 var v gobject.Value
679679 v.Init(gobject.TypeStringVal)
680- v.SetString(value)
680+ v.SetString(&value)
681681 x.SetProperty("private-key-pkcs11-uri", &v)
682682 }
683683
M v4/gio/gtlsconnection.go +16 -1
@@ -483,7 +483,22 @@ var xTlsConnectionHandshakeAsync func(uintptr, int, uintptr, uintptr, uintptr)
483483 // g_tls_connection_handshake() for more information.
484484 func (x *TlsConnection) HandshakeAsync(IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
485485
486- xTlsConnectionHandshakeAsync(x.GoPointer(), IoPriorityVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
486+ var CallbackVarRef uintptr
487+ if CallbackVar != nil {
488+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
489+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
490+ CallbackVarRef = cbRefPtr
491+ } else {
492+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
493+ cbFn := *CallbackVar
494+ cbFn(arg0, arg1, arg2)
495+ }
496+ CallbackVarRef = purego.NewCallback(fcb)
497+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
498+ }
499+ }
500+
501+ xTlsConnectionHandshakeAsync(x.GoPointer(), IoPriorityVar, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
487502
488503 }
489504
M v4/gio/gtlsdatabase.go +64 -4
@@ -566,7 +566,22 @@ var xTlsDatabaseLookupCertificateForHandleAsync func(uintptr, string, uintptr, T
566566 // g_tls_database_lookup_certificate_for_handle() for more information.
567567 func (x *TlsDatabase) LookupCertificateForHandleAsync(HandleVar string, InteractionVar *TlsInteraction, FlagsVar TlsDatabaseLookupFlags, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
568568
569- xTlsDatabaseLookupCertificateForHandleAsync(x.GoPointer(), HandleVar, InteractionVar.GoPointer(), FlagsVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
569+ var CallbackVarRef uintptr
570+ if CallbackVar != nil {
571+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
572+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
573+ CallbackVarRef = cbRefPtr
574+ } else {
575+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
576+ cbFn := *CallbackVar
577+ cbFn(arg0, arg1, arg2)
578+ }
579+ CallbackVarRef = purego.NewCallback(fcb)
580+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
581+ }
582+ }
583+
584+ xTlsDatabaseLookupCertificateForHandleAsync(x.GoPointer(), HandleVar, InteractionVar.GoPointer(), FlagsVar, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
570585
571586 }
572587
@@ -641,7 +656,22 @@ var xTlsDatabaseLookupCertificateIssuerAsync func(uintptr, uintptr, uintptr, Tls
641656 // g_tls_database_lookup_certificate_issuer() for more information.
642657 func (x *TlsDatabase) LookupCertificateIssuerAsync(CertificateVar *TlsCertificate, InteractionVar *TlsInteraction, FlagsVar TlsDatabaseLookupFlags, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
643658
644- xTlsDatabaseLookupCertificateIssuerAsync(x.GoPointer(), CertificateVar.GoPointer(), InteractionVar.GoPointer(), FlagsVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
659+ var CallbackVarRef uintptr
660+ if CallbackVar != nil {
661+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
662+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
663+ CallbackVarRef = cbRefPtr
664+ } else {
665+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
666+ cbFn := *CallbackVar
667+ cbFn(arg0, arg1, arg2)
668+ }
669+ CallbackVarRef = purego.NewCallback(fcb)
670+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
671+ }
672+ }
673+
674+ xTlsDatabaseLookupCertificateIssuerAsync(x.GoPointer(), CertificateVar.GoPointer(), InteractionVar.GoPointer(), FlagsVar, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
645675
646676 }
647677
@@ -694,7 +724,22 @@ var xTlsDatabaseLookupCertificatesIssuedByAsync func(uintptr, []byte, uintptr, T
694724 // this time.
695725 func (x *TlsDatabase) LookupCertificatesIssuedByAsync(IssuerRawDnVar []byte, InteractionVar *TlsInteraction, FlagsVar TlsDatabaseLookupFlags, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
696726
697- xTlsDatabaseLookupCertificatesIssuedByAsync(x.GoPointer(), IssuerRawDnVar, InteractionVar.GoPointer(), FlagsVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
727+ var CallbackVarRef uintptr
728+ if CallbackVar != nil {
729+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
730+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
731+ CallbackVarRef = cbRefPtr
732+ } else {
733+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
734+ cbFn := *CallbackVar
735+ cbFn(arg0, arg1, arg2)
736+ }
737+ CallbackVarRef = purego.NewCallback(fcb)
738+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
739+ }
740+ }
741+
742+ xTlsDatabaseLookupCertificatesIssuedByAsync(x.GoPointer(), IssuerRawDnVar, InteractionVar.GoPointer(), FlagsVar, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
698743
699744 }
700745
@@ -793,7 +838,22 @@ var xTlsDatabaseVerifyChainAsync func(uintptr, uintptr, string, uintptr, uintptr
793838 // g_tls_database_verify_chain() for more information.
794839 func (x *TlsDatabase) VerifyChainAsync(ChainVar *TlsCertificate, PurposeVar string, IdentityVar SocketConnectable, InteractionVar *TlsInteraction, FlagsVar TlsDatabaseVerifyFlags, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
795840
796- xTlsDatabaseVerifyChainAsync(x.GoPointer(), ChainVar.GoPointer(), PurposeVar, IdentityVar.GoPointer(), InteractionVar.GoPointer(), FlagsVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
841+ var CallbackVarRef uintptr
842+ if CallbackVar != nil {
843+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
844+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
845+ CallbackVarRef = cbRefPtr
846+ } else {
847+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
848+ cbFn := *CallbackVar
849+ cbFn(arg0, arg1, arg2)
850+ }
851+ CallbackVarRef = purego.NewCallback(fcb)
852+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
853+ }
854+ }
855+
856+ xTlsDatabaseVerifyChainAsync(x.GoPointer(), ChainVar.GoPointer(), PurposeVar, IdentityVar.GoPointer(), InteractionVar.GoPointer(), FlagsVar, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
797857
798858 }
799859
M v4/gio/gtlsfiledatabase.go +1 -1
@@ -64,7 +64,7 @@ func (x *TlsFileDatabaseBase) SetPropertyAnchors(value string) {
6464 obj.Ptr = x.GoPointer()
6565 var v gobject.Value
6666 v.Init(gobject.TypeStringVal)
67- v.SetString(value)
67+ v.SetString(&value)
6868 obj.SetProperty("anchors", &v)
6969 }
7070
M v4/gio/gtlsinteraction.go +32 -2
@@ -321,7 +321,22 @@ var xTlsInteractionAskPasswordAsync func(uintptr, uintptr, uintptr, uintptr, uin
321321 // Certain implementations may not support immediate cancellation.
322322 func (x *TlsInteraction) AskPasswordAsync(PasswordVar *TlsPassword, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
323323
324- xTlsInteractionAskPasswordAsync(x.GoPointer(), PasswordVar.GoPointer(), CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
324+ var CallbackVarRef uintptr
325+ if CallbackVar != nil {
326+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
327+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
328+ CallbackVarRef = cbRefPtr
329+ } else {
330+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
331+ cbFn := *CallbackVar
332+ cbFn(arg0, arg1, arg2)
333+ }
334+ CallbackVarRef = purego.NewCallback(fcb)
335+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
336+ }
337+ }
338+
339+ xTlsInteractionAskPasswordAsync(x.GoPointer(), PasswordVar.GoPointer(), CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
325340
326341 }
327342
@@ -453,7 +468,22 @@ var xTlsInteractionRequestCertificateAsync func(uintptr, uintptr, TlsCertificate
453468 // request, which will usually abort the TLS connection.
454469 func (x *TlsInteraction) RequestCertificateAsync(ConnectionVar *TlsConnection, FlagsVar TlsCertificateRequestFlags, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
455470
456- xTlsInteractionRequestCertificateAsync(x.GoPointer(), ConnectionVar.GoPointer(), FlagsVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
471+ var CallbackVarRef uintptr
472+ if CallbackVar != nil {
473+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
474+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
475+ CallbackVarRef = cbRefPtr
476+ } else {
477+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
478+ cbFn := *CallbackVar
479+ cbFn(arg0, arg1, arg2)
480+ }
481+ CallbackVarRef = purego.NewCallback(fcb)
482+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
483+ }
484+ }
485+
486+ xTlsInteractionRequestCertificateAsync(x.GoPointer(), ConnectionVar.GoPointer(), FlagsVar, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
457487
458488 }
459489
M v4/gio/gtlspassword.go +18 -3
@@ -240,7 +240,22 @@ var xTlsPasswordSetValueFull func(uintptr, []byte, int, uintptr)
240240 // considered part of the password in this case.)
241241 func (x *TlsPassword) SetValueFull(ValueVar []byte, LengthVar int, DestroyVar *glib.DestroyNotify) {
242242
243- xTlsPasswordSetValueFull(x.GoPointer(), ValueVar, LengthVar, glib.NewCallbackNullable(DestroyVar))
243+ var DestroyVarRef uintptr
244+ if DestroyVar != nil {
245+ DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
246+ if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok {
247+ DestroyVarRef = cbRefPtr
248+ } else {
249+ fcb := func(arg0 uintptr) {
250+ cbFn := *DestroyVar
251+ cbFn(arg0)
252+ }
253+ DestroyVarRef = purego.NewCallback(fcb)
254+ glib.SaveCallback(DestroyVarPtr, DestroyVarRef)
255+ }
256+ }
257+
258+ xTlsPasswordSetValueFull(x.GoPointer(), ValueVar, LengthVar, DestroyVarRef)
244259
245260 }
246261
@@ -271,7 +286,7 @@ func (c *TlsPassword) SetGoPointer(ptr uintptr) {
271286 func (x *TlsPassword) SetPropertyDescription(value string) {
272287 var v gobject.Value
273288 v.Init(gobject.TypeStringVal)
274- v.SetString(value)
289+ v.SetString(&value)
275290 x.SetProperty("description", &v)
276291 }
277292
@@ -288,7 +303,7 @@ func (x *TlsPassword) GetPropertyDescription() string {
288303 func (x *TlsPassword) SetPropertyWarning(value string) {
289304 var v gobject.Value
290305 v.Init(gobject.TypeStringVal)
291- v.SetString(value)
306+ v.SetString(&value)
292307 x.SetProperty("warning", &v)
293308 }
294309
M v4/gio/gunixconnection.go +32 -2
@@ -106,7 +106,22 @@ var xUnixConnectionReceiveCredentialsAsync func(uintptr, uintptr, uintptr, uintp
106106 // g_unix_connection_receive_credentials_finish() to get the result of the operation.
107107 func (x *UnixConnection) ReceiveCredentialsAsync(CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
108108
109- xUnixConnectionReceiveCredentialsAsync(x.GoPointer(), CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
109+ var CallbackVarRef uintptr
110+ if CallbackVar != nil {
111+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
112+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
113+ CallbackVarRef = cbRefPtr
114+ } else {
115+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
116+ cbFn := *CallbackVar
117+ cbFn(arg0, arg1, arg2)
118+ }
119+ CallbackVarRef = purego.NewCallback(fcb)
120+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
121+ }
122+ }
123+
124+ xUnixConnectionReceiveCredentialsAsync(x.GoPointer(), CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
110125
111126 }
112127
@@ -195,7 +210,22 @@ var xUnixConnectionSendCredentialsAsync func(uintptr, uintptr, uintptr, uintptr)
195210 // g_unix_connection_send_credentials_finish() to get the result of the operation.
196211 func (x *UnixConnection) SendCredentialsAsync(CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) {
197212
198- xUnixConnectionSendCredentialsAsync(x.GoPointer(), CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
213+ var CallbackVarRef uintptr
214+ if CallbackVar != nil {
215+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
216+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
217+ CallbackVarRef = cbRefPtr
218+ } else {
219+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
220+ cbFn := *CallbackVar
221+ cbFn(arg0, arg1, arg2)
222+ }
223+ CallbackVarRef = purego.NewCallback(fcb)
224+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
225+ }
226+ }
227+
228+ xUnixConnectionSendCredentialsAsync(x.GoPointer(), CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
199229
200230 }
201231
M v4/gio/gunixsocketaddress.go +1 -1
@@ -223,7 +223,7 @@ func (x *UnixSocketAddress) GetPropertyAbstract() bool {
223223 func (x *UnixSocketAddress) SetPropertyPath(value string) {
224224 var v gobject.Value
225225 v.Init(gobject.TypeStringVal)
226- v.SetString(value)
226+ v.SetString(&value)
227227 x.SetProperty("path", &v)
228228 }
229229
M v4/gio/gvfs.go +61 -1
@@ -614,7 +614,67 @@ var xVfsRegisterUriScheme func(uintptr, string, uintptr, uintptr, uintptr, uintp
614614 // a custom URI scheme, use g_vfs_unregister_uri_scheme().
615615 func (x *Vfs) RegisterUriScheme(SchemeVar string, UriFuncVar *VfsFileLookupFunc, UriDataVar uintptr, UriDestroyVar *glib.DestroyNotify, ParseNameFuncVar *VfsFileLookupFunc, ParseNameDataVar uintptr, ParseNameDestroyVar *glib.DestroyNotify) bool {
616616
617- cret := xVfsRegisterUriScheme(x.GoPointer(), SchemeVar, glib.NewCallbackNullable(UriFuncVar), UriDataVar, glib.NewCallbackNullable(UriDestroyVar), glib.NewCallbackNullable(ParseNameFuncVar), ParseNameDataVar, glib.NewCallbackNullable(ParseNameDestroyVar))
617+ var UriFuncVarRef uintptr
618+ if UriFuncVar != nil {
619+ UriFuncVarPtr := uintptr(unsafe.Pointer(UriFuncVar))
620+ if cbRefPtr, ok := glib.GetCallback(UriFuncVarPtr); ok {
621+ UriFuncVarRef = cbRefPtr
622+ } else {
623+ fcb := func(arg0 uintptr, arg1 string, arg2 uintptr) uintptr {
624+ cbFn := *UriFuncVar
625+ return cbFn(arg0, arg1, arg2)
626+ }
627+ UriFuncVarRef = purego.NewCallback(fcb)
628+ glib.SaveCallback(UriFuncVarPtr, UriFuncVarRef)
629+ }
630+ }
631+
632+ var UriDestroyVarRef uintptr
633+ if UriDestroyVar != nil {
634+ UriDestroyVarPtr := uintptr(unsafe.Pointer(UriDestroyVar))
635+ if cbRefPtr, ok := glib.GetCallback(UriDestroyVarPtr); ok {
636+ UriDestroyVarRef = cbRefPtr
637+ } else {
638+ fcb := func(arg0 uintptr) {
639+ cbFn := *UriDestroyVar
640+ cbFn(arg0)
641+ }
642+ UriDestroyVarRef = purego.NewCallback(fcb)
643+ glib.SaveCallback(UriDestroyVarPtr, UriDestroyVarRef)
644+ }
645+ }
646+
647+ var ParseNameFuncVarRef uintptr
648+ if ParseNameFuncVar != nil {
649+ ParseNameFuncVarPtr := uintptr(unsafe.Pointer(ParseNameFuncVar))
650+ if cbRefPtr, ok := glib.GetCallback(ParseNameFuncVarPtr); ok {
651+ ParseNameFuncVarRef = cbRefPtr
652+ } else {
653+ fcb := func(arg0 uintptr, arg1 string, arg2 uintptr) uintptr {
654+ cbFn := *ParseNameFuncVar
655+ return cbFn(arg0, arg1, arg2)
656+ }
657+ ParseNameFuncVarRef = purego.NewCallback(fcb)
658+ glib.SaveCallback(ParseNameFuncVarPtr, ParseNameFuncVarRef)
659+ }
660+ }
661+
662+ var ParseNameDestroyVarRef uintptr
663+ if ParseNameDestroyVar != nil {
664+ ParseNameDestroyVarPtr := uintptr(unsafe.Pointer(ParseNameDestroyVar))
665+ if cbRefPtr, ok := glib.GetCallback(ParseNameDestroyVarPtr); ok {
666+ ParseNameDestroyVarRef = cbRefPtr
667+ } else {
668+ fcb := func(arg0 uintptr) {
669+ cbFn := *ParseNameDestroyVar
670+ cbFn(arg0)
671+ }
672+ ParseNameDestroyVarRef = purego.NewCallback(fcb)
673+ glib.SaveCallback(ParseNameDestroyVarPtr, ParseNameDestroyVarRef)
674+ }
675+ }
676+
677+ cret := xVfsRegisterUriScheme(x.GoPointer(), SchemeVar, UriFuncVarRef, UriDataVar, UriDestroyVarRef, ParseNameFuncVarRef, ParseNameDataVar, ParseNameDestroyVarRef)
618678 return cret
619679 }
620680
M v4/glib/garray.go +158 -8
@@ -147,7 +147,22 @@ 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- cret := xNewBytesWithFreeFunc(DataVar, SizeVar, NewCallback(FreeFuncVar), UserDataVar)
150+ var FreeFuncVarRef uintptr
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)
162+ }
163+ }
164+
165+ cret := xNewBytesWithFreeFunc(DataVar, SizeVar, FreeFuncVarRef, UserDataVar)
151166 return cret
152167 }
153168
@@ -553,7 +568,22 @@ var xByteArraySort func([]byte, uintptr)
553568 // their addresses.
554569 func ByteArraySort(ArrayVar []byte, CompareFuncVar *CompareFunc) {
555570
556- xByteArraySort(ArrayVar, NewCallback(CompareFuncVar))
571+ var CompareFuncVarRef uintptr
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)
583+ }
584+ }
585+
586+ xByteArraySort(ArrayVar, CompareFuncVarRef)
557587
558588 }
559589
@@ -563,7 +593,22 @@ var xByteArraySortWithData func([]byte, uintptr, uintptr)
563593 // user data argument.
564594 func ByteArraySortWithData(ArrayVar []byte, CompareFuncVar *CompareDataFunc, UserDataVar uintptr) {
565595
566- xByteArraySortWithData(ArrayVar, NewCallback(CompareFuncVar), UserDataVar)
596+ var CompareFuncVarRef uintptr
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)
608+ }
609+ }
610+
611+ xByteArraySortWithData(ArrayVar, CompareFuncVarRef, UserDataVar)
567612
568613 }
569614
@@ -619,7 +664,22 @@ var xPtrArrayFindWithEqualFunc func([]uintptr, uintptr, uintptr, *uint) bool
619664 // equality is used.
620665 func PtrArrayFindWithEqualFunc(HaystackVar []uintptr, NeedleVar uintptr, EqualFuncVar *EqualFunc, IndexVar *uint) bool {
621666
622- cret := xPtrArrayFindWithEqualFunc(HaystackVar, NeedleVar, NewCallbackNullable(EqualFuncVar), IndexVar)
667+ var EqualFuncVarRef uintptr
668+ if EqualFuncVar != nil {
669+ EqualFuncVarPtr := uintptr(unsafe.Pointer(EqualFuncVar))
670+ if cbRefPtr, ok := GetCallback(EqualFuncVarPtr); ok {
671+ EqualFuncVarRef = cbRefPtr
672+ } else {
673+ fcb := func(arg0 uintptr, arg1 uintptr) bool {
674+ cbFn := *EqualFuncVar
675+ return cbFn(arg0, arg1)
676+ }
677+ EqualFuncVarRef = purego.NewCallback(fcb)
678+ SaveCallback(EqualFuncVarPtr, EqualFuncVarRef)
679+ }
680+ }
681+
682+ cret := xPtrArrayFindWithEqualFunc(HaystackVar, NeedleVar, EqualFuncVarRef, IndexVar)
623683 return cret
624684 }
625685
@@ -644,7 +704,37 @@ var xPtrArrayNewFromArray func([]uintptr, uint, uintptr, uintptr, uintptr) uintp
644704 // than `gsize`.
645705 func PtrArrayNewFromArray(DataVar []uintptr, LenVar uint, CopyFuncVar *CopyFunc, CopyFuncUserDataVar uintptr, ElementFreeFuncVar *DestroyNotify) uintptr {
646706
647- cret := xPtrArrayNewFromArray(DataVar, LenVar, NewCallbackNullable(CopyFuncVar), CopyFuncUserDataVar, NewCallbackNullable(ElementFreeFuncVar))
707+ var CopyFuncVarRef uintptr
708+ if CopyFuncVar != nil {
709+ CopyFuncVarPtr := uintptr(unsafe.Pointer(CopyFuncVar))
710+ if cbRefPtr, ok := GetCallback(CopyFuncVarPtr); ok {
711+ CopyFuncVarRef = cbRefPtr
712+ } else {
713+ fcb := func(arg0 uintptr, arg1 uintptr) uintptr {
714+ cbFn := *CopyFuncVar
715+ return cbFn(arg0, arg1)
716+ }
717+ CopyFuncVarRef = purego.NewCallback(fcb)
718+ SaveCallback(CopyFuncVarPtr, CopyFuncVarRef)
719+ }
720+ }
721+
722+ var ElementFreeFuncVarRef uintptr
723+ if ElementFreeFuncVar != nil {
724+ ElementFreeFuncVarPtr := uintptr(unsafe.Pointer(ElementFreeFuncVar))
725+ if cbRefPtr, ok := GetCallback(ElementFreeFuncVarPtr); ok {
726+ ElementFreeFuncVarRef = cbRefPtr
727+ } else {
728+ fcb := func(arg0 uintptr) {
729+ cbFn := *ElementFreeFuncVar
730+ cbFn(arg0)
731+ }
732+ ElementFreeFuncVarRef = purego.NewCallback(fcb)
733+ SaveCallback(ElementFreeFuncVarPtr, ElementFreeFuncVarRef)
734+ }
735+ }
736+
737+ cret := xPtrArrayNewFromArray(DataVar, LenVar, CopyFuncVarRef, CopyFuncUserDataVar, ElementFreeFuncVarRef)
648738 return cret
649739 }
650740
@@ -665,7 +755,37 @@ var xPtrArrayNewFromNullTerminatedArray func([]uintptr, uintptr, uintptr, uintpt
665755 // shorter than `gsize`.
666756 func PtrArrayNewFromNullTerminatedArray(DataVar []uintptr, CopyFuncVar *CopyFunc, CopyFuncUserDataVar uintptr, ElementFreeFuncVar *DestroyNotify) uintptr {
667757
668- cret := xPtrArrayNewFromNullTerminatedArray(DataVar, NewCallbackNullable(CopyFuncVar), CopyFuncUserDataVar, NewCallbackNullable(ElementFreeFuncVar))
758+ var CopyFuncVarRef uintptr
759+ if CopyFuncVar != nil {
760+ CopyFuncVarPtr := uintptr(unsafe.Pointer(CopyFuncVar))
761+ if cbRefPtr, ok := GetCallback(CopyFuncVarPtr); ok {
762+ CopyFuncVarRef = cbRefPtr
763+ } else {
764+ fcb := func(arg0 uintptr, arg1 uintptr) uintptr {
765+ cbFn := *CopyFuncVar
766+ return cbFn(arg0, arg1)
767+ }
768+ CopyFuncVarRef = purego.NewCallback(fcb)
769+ SaveCallback(CopyFuncVarPtr, CopyFuncVarRef)
770+ }
771+ }
772+
773+ var ElementFreeFuncVarRef uintptr
774+ if ElementFreeFuncVar != nil {
775+ ElementFreeFuncVarPtr := uintptr(unsafe.Pointer(ElementFreeFuncVar))
776+ if cbRefPtr, ok := GetCallback(ElementFreeFuncVarPtr); ok {
777+ ElementFreeFuncVarRef = cbRefPtr
778+ } else {
779+ fcb := func(arg0 uintptr) {
780+ cbFn := *ElementFreeFuncVar
781+ cbFn(arg0)
782+ }
783+ ElementFreeFuncVarRef = purego.NewCallback(fcb)
784+ SaveCallback(ElementFreeFuncVarPtr, ElementFreeFuncVarRef)
785+ }
786+ }
787+
788+ cret := xPtrArrayNewFromNullTerminatedArray(DataVar, CopyFuncVarRef, CopyFuncUserDataVar, ElementFreeFuncVarRef)
669789 return cret
670790 }
671791
@@ -689,7 +809,22 @@ var xPtrArrayNewTake func([]uintptr, uint, uintptr) uintptr
689809 // than `gsize`.
690810 func PtrArrayNewTake(DataVar []uintptr, LenVar uint, ElementFreeFuncVar *DestroyNotify) uintptr {
691811
692- cret := xPtrArrayNewTake(DataVar, LenVar, NewCallbackNullable(ElementFreeFuncVar))
812+ var ElementFreeFuncVarRef uintptr
813+ if ElementFreeFuncVar != nil {
814+ ElementFreeFuncVarPtr := uintptr(unsafe.Pointer(ElementFreeFuncVar))
815+ if cbRefPtr, ok := GetCallback(ElementFreeFuncVarPtr); ok {
816+ ElementFreeFuncVarRef = cbRefPtr
817+ } else {
818+ fcb := func(arg0 uintptr) {
819+ cbFn := *ElementFreeFuncVar
820+ cbFn(arg0)
821+ }
822+ ElementFreeFuncVarRef = purego.NewCallback(fcb)
823+ SaveCallback(ElementFreeFuncVarPtr, ElementFreeFuncVarRef)
824+ }
825+ }
826+
827+ cret := xPtrArrayNewTake(DataVar, LenVar, ElementFreeFuncVarRef)
693828 return cret
694829 }
695830
@@ -716,7 +851,22 @@ var xPtrArrayNewTakeNullTerminated func([]uintptr, uintptr) uintptr
716851 // in `guint`, which may be shorter than `gsize`.
717852 func PtrArrayNewTakeNullTerminated(DataVar []uintptr, ElementFreeFuncVar *DestroyNotify) uintptr {
718853
719- cret := xPtrArrayNewTakeNullTerminated(DataVar, NewCallbackNullable(ElementFreeFuncVar))
854+ var ElementFreeFuncVarRef uintptr
855+ if ElementFreeFuncVar != nil {
856+ ElementFreeFuncVarPtr := uintptr(unsafe.Pointer(ElementFreeFuncVar))
857+ if cbRefPtr, ok := GetCallback(ElementFreeFuncVarPtr); ok {
858+ ElementFreeFuncVarRef = cbRefPtr
859+ } else {
860+ fcb := func(arg0 uintptr) {
861+ cbFn := *ElementFreeFuncVar
862+ cbFn(arg0)
863+ }
864+ ElementFreeFuncVarRef = purego.NewCallback(fcb)
865+ SaveCallback(ElementFreeFuncVarPtr, ElementFreeFuncVarRef)
866+ }
867+ }
868+
869+ cret := xPtrArrayNewTakeNullTerminated(DataVar, ElementFreeFuncVarRef)
720870 return cret
721871 }
722872
M v4/glib/gasyncqueue.go +80 -5
@@ -144,7 +144,22 @@ 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- xAsyncQueuePushSorted(x.GoPointer(), DataVar, NewCallback(FuncVar), UserDataVar)
147+ var FuncVarRef uintptr
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)
159+ }
160+ }
161+
162+ xAsyncQueuePushSorted(x.GoPointer(), DataVar, FuncVarRef, UserDataVar)
148163
149164 }
150165
@@ -167,7 +182,22 @@ var xAsyncQueuePushSortedUnlocked func(uintptr, uintptr, uintptr, uintptr)
167182 // For an example of @func see g_async_queue_sort().
168183 func (x *AsyncQueue) PushSortedUnlocked(DataVar uintptr, FuncVar *CompareDataFunc, UserDataVar uintptr) {
169184
170- xAsyncQueuePushSortedUnlocked(x.GoPointer(), DataVar, NewCallback(FuncVar), UserDataVar)
185+ var FuncVarRef uintptr
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)
197+ }
198+ }
199+
200+ xAsyncQueuePushSortedUnlocked(x.GoPointer(), DataVar, FuncVarRef, UserDataVar)
171201
172202 }
173203
@@ -251,7 +281,22 @@ var xAsyncQueueSort func(uintptr, uintptr, uintptr)
251281 // ]|
252282 func (x *AsyncQueue) Sort(FuncVar *CompareDataFunc, UserDataVar uintptr) {
253283
254- xAsyncQueueSort(x.GoPointer(), NewCallback(FuncVar), UserDataVar)
284+ var FuncVarRef uintptr
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)
296+ }
297+ }
298+
299+ xAsyncQueueSort(x.GoPointer(), FuncVarRef, UserDataVar)
255300
256301 }
257302
@@ -268,7 +313,22 @@ var xAsyncQueueSortUnlocked func(uintptr, uintptr, uintptr)
268313 // This function must be called while holding the @queue's lock.
269314 func (x *AsyncQueue) SortUnlocked(FuncVar *CompareDataFunc, UserDataVar uintptr) {
270315
271- xAsyncQueueSortUnlocked(x.GoPointer(), NewCallback(FuncVar), UserDataVar)
316+ var FuncVarRef uintptr
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)
328+ }
329+ }
330+
331+ xAsyncQueueSortUnlocked(x.GoPointer(), FuncVarRef, UserDataVar)
272332
273333 }
274334
@@ -407,7 +467,22 @@ var xAsyncQueueNewFull func(uintptr) *AsyncQueue
407467 // the queue is destroyed after the final unref.
408468 func AsyncQueueNewFull(ItemFreeFuncVar *DestroyNotify) *AsyncQueue {
409469
410- cret := xAsyncQueueNewFull(NewCallbackNullable(ItemFreeFuncVar))
470+ var ItemFreeFuncVarRef uintptr
471+ if ItemFreeFuncVar != nil {
472+ ItemFreeFuncVarPtr := uintptr(unsafe.Pointer(ItemFreeFuncVar))
473+ if cbRefPtr, ok := GetCallback(ItemFreeFuncVarPtr); ok {
474+ ItemFreeFuncVarRef = cbRefPtr
475+ } else {
476+ fcb := func(arg0 uintptr) {
477+ cbFn := *ItemFreeFuncVar
478+ cbFn(arg0)
479+ }
480+ ItemFreeFuncVarRef = purego.NewCallback(fcb)
481+ SaveCallback(ItemFreeFuncVarPtr, ItemFreeFuncVarRef)
482+ }
483+ }
484+
485+ cret := xAsyncQueueNewFull(ItemFreeFuncVarRef)
411486 return cret
412487 }
413488
M v4/glib/gbacktrace.go +3 -3
@@ -64,7 +64,7 @@ func OnErrorQuery(PrgNameVar string) {
6464
6565 }
6666
67-var xOnErrorStackTrace func(string)
67+var xOnErrorStackTrace func(uintptr)
6868
6969 // Invokes gdb, which attaches to the current process and shows a
7070 // stack trace. Called by g_on_error_query() when the "[S]tack trace"
@@ -79,9 +79,9 @@ var xOnErrorStackTrace func(string)
7979 // exception, which will crash the program. If the `G_DEBUGGER` environment
8080 // variable is set, a debugger will be invoked to attach and
8181 // handle that exception (see [Running GLib Applications](running.html)).
82-func OnErrorStackTrace(PrgNameVar string) {
82+func OnErrorStackTrace(PrgNameVar *string) {
8383
84- xOnErrorStackTrace(PrgNameVar)
84+ xOnErrorStackTrace(core.NullableStringToPtr(PrgNameVar))
8585
8686 }
8787
M v4/glib/gbookmarkfile.go +18 -18
@@ -74,7 +74,7 @@ func NewBookmarkFile() *BookmarkFile {
7474 return cret
7575 }
7676
77-var xBookmarkFileAddApplication func(uintptr, string, string, string)
77+var xBookmarkFileAddApplication func(uintptr, string, uintptr, uintptr)
7878
7979 // Adds the application with @name and @exec to the list of
8080 // applications that have registered a bookmark for @uri into
@@ -98,9 +98,9 @@ var xBookmarkFileAddApplication func(uintptr, string, string, string)
9898 // @uri inside @bookmark.
9999 //
100100 // If no bookmark for @uri is found, one is created.
101-func (x *BookmarkFile) AddApplication(UriVar string, NameVar string, ExecVar string) {
101+func (x *BookmarkFile) AddApplication(UriVar string, NameVar *string, ExecVar *string) {
102102
103- xBookmarkFileAddApplication(x.GoPointer(), UriVar, NameVar, ExecVar)
103+ xBookmarkFileAddApplication(x.GoPointer(), UriVar, core.NullableStringToPtr(NameVar), core.NullableStringToPtr(ExecVar))
104104
105105 }
106106
@@ -373,7 +373,7 @@ func (x *BookmarkFile) GetSize() int {
373373 return cret
374374 }
375375
376-var xBookmarkFileGetTitle func(uintptr, string, **Error) string
376+var xBookmarkFileGetTitle func(uintptr, uintptr, **Error) string
377377
378378 // Returns the title of the bookmark for @uri.
379379 //
@@ -381,10 +381,10 @@ var xBookmarkFileGetTitle func(uintptr, string, **Error) string
381381 //
382382 // In the event the URI cannot be found, %NULL is returned and
383383 // @error is set to %G_BOOKMARK_FILE_ERROR_URI_NOT_FOUND.
384-func (x *BookmarkFile) GetTitle(UriVar string) (string, error) {
384+func (x *BookmarkFile) GetTitle(UriVar *string) (string, error) {
385385 var cerr *Error
386386
387- cret := xBookmarkFileGetTitle(x.GoPointer(), UriVar, &cerr)
387+ cret := xBookmarkFileGetTitle(x.GoPointer(), core.NullableStringToPtr(UriVar), &cerr)
388388 if cerr == nil {
389389 return cret, nil
390390 }
@@ -532,7 +532,7 @@ func (x *BookmarkFile) LoadFromFile(FilenameVar string) (bool, error) {
532532
533533 }
534534
535-var xBookmarkFileMoveItem func(uintptr, string, string, **Error) bool
535+var xBookmarkFileMoveItem func(uintptr, string, uintptr, **Error) bool
536536
537537 // Changes the URI of a bookmark item from @old_uri to @new_uri. Any
538538 // existing bookmark for @new_uri will be overwritten. If @new_uri is
@@ -540,10 +540,10 @@ var xBookmarkFileMoveItem func(uintptr, string, string, **Error) bool
540540 //
541541 // In the event the URI cannot be found, %FALSE is returned and
542542 // @error is set to %G_BOOKMARK_FILE_ERROR_URI_NOT_FOUND.
543-func (x *BookmarkFile) MoveItem(OldUriVar string, NewUriVar string) (bool, error) {
543+func (x *BookmarkFile) MoveItem(OldUriVar string, NewUriVar *string) (bool, error) {
544544 var cerr *Error
545545
546- cret := xBookmarkFileMoveItem(x.GoPointer(), OldUriVar, NewUriVar, &cerr)
546+ cret := xBookmarkFileMoveItem(x.GoPointer(), OldUriVar, core.NullableStringToPtr(NewUriVar), &cerr)
547547 if cerr == nil {
548548 return cret, nil
549549 }
@@ -709,16 +709,16 @@ func (x *BookmarkFile) SetApplicationInfo(UriVar string, NameVar string, ExecVar
709709
710710 }
711711
712-var xBookmarkFileSetDescription func(uintptr, string, string)
712+var xBookmarkFileSetDescription func(uintptr, uintptr, string)
713713
714714 // Sets @description as the description of the bookmark for @uri.
715715 //
716716 // If @uri is %NULL, the description of @bookmark is set.
717717 //
718718 // If a bookmark for @uri cannot be found then it is created.
719-func (x *BookmarkFile) SetDescription(UriVar string, DescriptionVar string) {
719+func (x *BookmarkFile) SetDescription(UriVar *string, DescriptionVar string) {
720720
721- xBookmarkFileSetDescription(x.GoPointer(), UriVar, DescriptionVar)
721+ xBookmarkFileSetDescription(x.GoPointer(), core.NullableStringToPtr(UriVar), DescriptionVar)
722722
723723 }
724724
@@ -734,16 +734,16 @@ func (x *BookmarkFile) SetGroups(UriVar string, GroupsVar []string, LengthVar ui
734734
735735 }
736736
737-var xBookmarkFileSetIcon func(uintptr, string, string, string)
737+var xBookmarkFileSetIcon func(uintptr, string, uintptr, string)
738738
739739 // Sets the icon for the bookmark for @uri. If @href is %NULL, unsets
740740 // the currently set icon. @href can either be a full URL for the icon
741741 // file or the icon name following the Icon Naming specification.
742742 //
743743 // If no bookmark for @uri is found one is created.
744-func (x *BookmarkFile) SetIcon(UriVar string, HrefVar string, MimeTypeVar string) {
744+func (x *BookmarkFile) SetIcon(UriVar string, HrefVar *string, MimeTypeVar string) {
745745
746- xBookmarkFileSetIcon(x.GoPointer(), UriVar, HrefVar, MimeTypeVar)
746+ xBookmarkFileSetIcon(x.GoPointer(), UriVar, core.NullableStringToPtr(HrefVar), MimeTypeVar)
747747
748748 }
749749
@@ -801,7 +801,7 @@ func (x *BookmarkFile) SetModifiedDateTime(UriVar string, ModifiedVar *DateTime)
801801
802802 }
803803
804-var xBookmarkFileSetTitle func(uintptr, string, string)
804+var xBookmarkFileSetTitle func(uintptr, uintptr, string)
805805
806806 // Sets @title as the title of the bookmark for @uri inside the
807807 // bookmark file @bookmark.
@@ -809,9 +809,9 @@ var xBookmarkFileSetTitle func(uintptr, string, string)
809809 // If @uri is %NULL, the title of @bookmark is set.
810810 //
811811 // If a bookmark for @uri cannot be found then it is created.
812-func (x *BookmarkFile) SetTitle(UriVar string, TitleVar string) {
812+func (x *BookmarkFile) SetTitle(UriVar *string, TitleVar string) {
813813
814- xBookmarkFileSetTitle(x.GoPointer(), UriVar, TitleVar)
814+ xBookmarkFileSetTitle(x.GoPointer(), core.NullableStringToPtr(UriVar), TitleVar)
815815
816816 }
817817
M v4/glib/gcache.go +32 -2
@@ -80,7 +80,22 @@ var xCacheKeyForeach func(uintptr, uintptr, uintptr)
8080 // pairs to its callback function !
8181 func (x *Cache) KeyForeach(FuncVar *HFunc, UserDataVar uintptr) {
8282
83- xCacheKeyForeach(x.GoPointer(), NewCallback(FuncVar), UserDataVar)
83+ var FuncVarRef uintptr
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)
95+ }
96+ }
97+
98+ xCacheKeyForeach(x.GoPointer(), FuncVarRef, UserDataVar)
8499
85100 }
86101
@@ -100,7 +115,22 @@ var xCacheValueForeach func(uintptr, uintptr, uintptr)
100115 // Calls the given function for each of the values in the #GCache.
101116 func (x *Cache) ValueForeach(FuncVar *HFunc, UserDataVar uintptr) {
102117
103- xCacheValueForeach(x.GoPointer(), NewCallback(FuncVar), UserDataVar)
118+ var FuncVarRef uintptr
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)
130+ }
131+ }
132+
133+ xCacheValueForeach(x.GoPointer(), FuncVarRef, UserDataVar)
104134
105135 }
106136
M v4/glib/gcompletion.go +16 -1
@@ -131,7 +131,22 @@ var xCompletionSetCompare func(uintptr, uintptr)
131131 // comparison function is strncmp().
132132 func (x *Completion) SetCompare(StrncmpFuncVar *CompletionStrncmpFunc) {
133133
134- xCompletionSetCompare(x.GoPointer(), NewCallback(StrncmpFuncVar))
134+ var StrncmpFuncVarRef uintptr
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)
146+ }
147+ }
148+
149+ xCompletionSetCompare(x.GoPointer(), StrncmpFuncVarRef)
135150
136151 }
137152
M v4/glib/gconvert.go +3 -3
@@ -266,14 +266,14 @@ func FilenameFromUtf8(Utf8stringVar string, LenVar int, BytesReadVar *uint, Byte
266266
267267 }
268268
269-var xFilenameToUri func(string, string, **Error) string
269+var xFilenameToUri func(string, uintptr, **Error) string
270270
271271 // Converts an absolute filename to an escaped ASCII-encoded URI, with the path
272272 // component following Section 3.3. of RFC 2396.
273-func FilenameToUri(FilenameVar string, HostnameVar string) (string, error) {
273+func FilenameToUri(FilenameVar string, HostnameVar *string) (string, error) {
274274 var cerr *Error
275275
276- cret := xFilenameToUri(FilenameVar, HostnameVar, &cerr)
276+ cret := xFilenameToUri(FilenameVar, core.NullableStringToPtr(HostnameVar), &cerr)
277277 if cerr == nil {
278278 return cret, nil
279279 }
M v4/glib/gdataset.go +96 -6
@@ -63,7 +63,22 @@ 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- xDatalistForeach(DatalistVar, NewCallback(FuncVar), UserDataVar)
66+ var FuncVarRef uintptr
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)
78+ }
79+ }
80+
81+ xDatalistForeach(DatalistVar, FuncVarRef, UserDataVar)
6782
6883 }
6984
@@ -104,7 +119,22 @@ var xDatalistIdDupData func(**Data, Quark, uintptr, uintptr) uintptr
104119 // threads are using the same datalist and the same key.
105120 func DatalistIdDupData(DatalistVar **Data, KeyIdVar Quark, DupFuncVar *DuplicateFunc, UserDataVar uintptr) uintptr {
106121
107- cret := xDatalistIdDupData(DatalistVar, KeyIdVar, NewCallbackNullable(DupFuncVar), UserDataVar)
122+ var DupFuncVarRef uintptr
123+ if DupFuncVar != nil {
124+ DupFuncVarPtr := uintptr(unsafe.Pointer(DupFuncVar))
125+ if cbRefPtr, ok := GetCallback(DupFuncVarPtr); ok {
126+ DupFuncVarRef = cbRefPtr
127+ } else {
128+ fcb := func(arg0 uintptr, arg1 uintptr) uintptr {
129+ cbFn := *DupFuncVar
130+ return cbFn(arg0, arg1)
131+ }
132+ DupFuncVarRef = purego.NewCallback(fcb)
133+ SaveCallback(DupFuncVarPtr, DupFuncVarRef)
134+ }
135+ }
136+
137+ cret := xDatalistIdDupData(DatalistVar, KeyIdVar, DupFuncVarRef, UserDataVar)
108138 return cret
109139 }
110140
@@ -159,7 +189,22 @@ var xDatalistIdReplaceData func(**Data, Quark, uintptr, uintptr, uintptr, *Destr
159189 // should not destroy the object in the normal way.
160190 func DatalistIdReplaceData(DatalistVar **Data, KeyIdVar Quark, OldvalVar uintptr, NewvalVar uintptr, DestroyVar *DestroyNotify, OldDestroyVar *DestroyNotify) bool {
161191
162- cret := xDatalistIdReplaceData(DatalistVar, KeyIdVar, OldvalVar, NewvalVar, NewCallbackNullable(DestroyVar), OldDestroyVar)
192+ var DestroyVarRef uintptr
193+ if DestroyVar != nil {
194+ DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
195+ if cbRefPtr, ok := GetCallback(DestroyVarPtr); ok {
196+ DestroyVarRef = cbRefPtr
197+ } else {
198+ fcb := func(arg0 uintptr) {
199+ cbFn := *DestroyVar
200+ cbFn(arg0)
201+ }
202+ DestroyVarRef = purego.NewCallback(fcb)
203+ SaveCallback(DestroyVarPtr, DestroyVarRef)
204+ }
205+ }
206+
207+ cret := xDatalistIdReplaceData(DatalistVar, KeyIdVar, OldvalVar, NewvalVar, DestroyVarRef, OldDestroyVar)
163208 return cret
164209 }
165210
@@ -171,7 +216,22 @@ var xDatalistIdSetDataFull func(**Data, Quark, uintptr, uintptr)
171216 // function is called.
172217 func DatalistIdSetDataFull(DatalistVar **Data, KeyIdVar Quark, DataVar uintptr, DestroyFuncVar *DestroyNotify) {
173218
174- xDatalistIdSetDataFull(DatalistVar, KeyIdVar, DataVar, NewCallbackNullable(DestroyFuncVar))
219+ var DestroyFuncVarRef uintptr
220+ if DestroyFuncVar != nil {
221+ DestroyFuncVarPtr := uintptr(unsafe.Pointer(DestroyFuncVar))
222+ if cbRefPtr, ok := GetCallback(DestroyFuncVarPtr); ok {
223+ DestroyFuncVarRef = cbRefPtr
224+ } else {
225+ fcb := func(arg0 uintptr) {
226+ cbFn := *DestroyFuncVar
227+ cbFn(arg0)
228+ }
229+ DestroyFuncVarRef = purego.NewCallback(fcb)
230+ SaveCallback(DestroyFuncVarPtr, DestroyFuncVarRef)
231+ }
232+ }
233+
234+ xDatalistIdSetDataFull(DatalistVar, KeyIdVar, DataVar, DestroyFuncVarRef)
175235
176236 }
177237
@@ -230,7 +290,22 @@ var xDatasetForeach func(uintptr, uintptr, uintptr)
230290 // than skipping over elements that are removed.
231291 func DatasetForeach(DatasetLocationVar uintptr, FuncVar *DataForeachFunc, UserDataVar uintptr) {
232292
233- xDatasetForeach(DatasetLocationVar, NewCallback(FuncVar), UserDataVar)
293+ var FuncVarRef uintptr
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)
305+ }
306+ }
307+
308+ xDatasetForeach(DatasetLocationVar, FuncVarRef, UserDataVar)
234309
235310 }
236311
@@ -261,7 +336,22 @@ var xDatasetIdSetDataFull func(uintptr, Quark, uintptr, uintptr)
261336 // is called.
262337 func DatasetIdSetDataFull(DatasetLocationVar uintptr, KeyIdVar Quark, DataVar uintptr, DestroyFuncVar *DestroyNotify) {
263338
264- xDatasetIdSetDataFull(DatasetLocationVar, KeyIdVar, DataVar, NewCallback(DestroyFuncVar))
339+ var DestroyFuncVarRef uintptr
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)
351+ }
352+ }
353+
354+ xDatasetIdSetDataFull(DatasetLocationVar, KeyIdVar, DataVar, DestroyFuncVarRef)
265355
266356 }
267357
M v4/glib/gerror.go +92 -2
@@ -149,7 +149,52 @@ 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- cret := xErrorDomainRegister(ErrorTypeNameVar, ErrorTypePrivateSizeVar, NewCallback(ErrorTypeInitVar), NewCallback(ErrorTypeCopyVar), NewCallback(ErrorTypeClearVar))
152+ var ErrorTypeInitVarRef uintptr
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)
164+ }
165+ }
166+
167+ var ErrorTypeCopyVarRef uintptr
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)
179+ }
180+ }
181+
182+ var ErrorTypeClearVarRef uintptr
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)
194+ }
195+ }
196+
197+ cret := xErrorDomainRegister(ErrorTypeNameVar, ErrorTypePrivateSizeVar, ErrorTypeInitVarRef, ErrorTypeCopyVarRef, ErrorTypeClearVarRef)
153198 return cret
154199 }
155200
@@ -174,7 +219,52 @@ var xErrorDomainRegisterStatic func(string, uint, uintptr, uintptr, uintptr) Qua
174219 // already takes care of passing valid information to this function.
175220 func ErrorDomainRegisterStatic(ErrorTypeNameVar string, ErrorTypePrivateSizeVar uint, ErrorTypeInitVar *ErrorInitFunc, ErrorTypeCopyVar *ErrorCopyFunc, ErrorTypeClearVar *ErrorClearFunc) Quark {
176221
177- cret := xErrorDomainRegisterStatic(ErrorTypeNameVar, ErrorTypePrivateSizeVar, NewCallback(ErrorTypeInitVar), NewCallback(ErrorTypeCopyVar), NewCallback(ErrorTypeClearVar))
222+ var ErrorTypeInitVarRef uintptr
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)
234+ }
235+ }
236+
237+ var ErrorTypeCopyVarRef uintptr
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)
249+ }
250+ }
251+
252+ var ErrorTypeClearVarRef uintptr
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)
264+ }
265+ }
266+
267+ cret := xErrorDomainRegisterStatic(ErrorTypeNameVar, ErrorTypePrivateSizeVar, ErrorTypeInitVarRef, ErrorTypeCopyVarRef, ErrorTypeClearVarRef)
178268 return cret
179269 }
180270
M v4/glib/gfileutils.go +9 -9
@@ -282,7 +282,7 @@ func BuildPathv(SeparatorVar string, ArgsVar []string) string {
282282 return cret
283283 }
284284
285-var xCanonicalizeFilename func(string, string) string
285+var xCanonicalizeFilename func(string, uintptr) string
286286
287287 // Gets the canonical file name from @filename. All triple slashes are turned into
288288 // single slashes, and all `..` and `.`s resolved against @relative_to.
@@ -298,13 +298,13 @@ var xCanonicalizeFilename func(string, string) string
298298 // exist.
299299 //
300300 // No file system I/O is done.
301-func CanonicalizeFilename(FilenameVar string, RelativeToVar string) string {
301+func CanonicalizeFilename(FilenameVar string, RelativeToVar *string) string {
302302
303- cret := xCanonicalizeFilename(FilenameVar, RelativeToVar)
303+ cret := xCanonicalizeFilename(FilenameVar, core.NullableStringToPtr(RelativeToVar))
304304 return cret
305305 }
306306
307-var xDirMakeTmp func(string, **Error) string
307+var xDirMakeTmp func(uintptr, **Error) string
308308
309309 // Creates a subdirectory in the preferred directory for temporary
310310 // files (as returned by g_get_tmp_dir()).
@@ -317,10 +317,10 @@ var xDirMakeTmp func(string, **Error) string
317317 //
318318 // Note that in contrast to g_mkdtemp() (and mkdtemp()) @tmpl is not
319319 // modified, and might thus be a read-only literal string.
320-func DirMakeTmp(TmplVar string) (string, error) {
320+func DirMakeTmp(TmplVar *string) (string, error) {
321321 var cerr *Error
322322
323- cret := xDirMakeTmp(TmplVar, &cerr)
323+ cret := xDirMakeTmp(core.NullableStringToPtr(TmplVar), &cerr)
324324 if cerr == nil {
325325 return cret, nil
326326 }
@@ -368,7 +368,7 @@ func FileGetContents(FilenameVar string, ContentsVar *[]byte, LengthVar *uint) (
368368
369369 }
370370
371-var xFileOpenTmp func(string, *string, **Error) int
371+var xFileOpenTmp func(uintptr, *string, **Error) int
372372
373373 // Opens a file for writing in the preferred directory for temporary
374374 // files (as returned by g_get_tmp_dir()).
@@ -386,10 +386,10 @@ var xFileOpenTmp func(string, *string, **Error) int
386386 // is returned in @name_used. This string should be freed with g_free()
387387 // when not needed any longer. The returned name is in the GLib file
388388 // name encoding.
389-func FileOpenTmp(TmplVar string, NameUsedVar *string) (int, error) {
389+func FileOpenTmp(TmplVar *string, NameUsedVar *string) (int, error) {
390390 var cerr *Error
391391
392- cret := xFileOpenTmp(TmplVar, NameUsedVar, &cerr)
392+ cret := xFileOpenTmp(core.NullableStringToPtr(TmplVar), NameUsedVar, &cerr)
393393 if cerr == nil {
394394 return cret, nil
395395 }
M v4/glib/ggettext.go +15 -15
@@ -6,19 +6,19 @@ import (
66 "github.com/jwijenbergh/puregotk/pkg/core"
77 )
88
9-var xDcgettext func(string, string, int) string
9+var xDcgettext func(uintptr, string, int) string
1010
1111 // This is a variant of g_dgettext() that allows specifying a locale
1212 // category instead of always using `LC_MESSAGES`. See g_dgettext() for
1313 // more information about how this functions differs from calling
1414 // dcgettext() directly.
15-func Dcgettext(DomainVar string, MsgidVar string, CategoryVar int) string {
15+func Dcgettext(DomainVar *string, MsgidVar string, CategoryVar int) string {
1616
17- cret := xDcgettext(DomainVar, MsgidVar, CategoryVar)
17+ cret := xDcgettext(core.NullableStringToPtr(DomainVar), MsgidVar, CategoryVar)
1818 return cret
1919 }
2020
21-var xDgettext func(string, string) string
21+var xDgettext func(uintptr, string) string
2222
2323 // This function is a wrapper of dgettext() which does not translate
2424 // the message if the default domain as set with textdomain() has no
@@ -52,13 +52,13 @@ var xDgettext func(string, string) string
5252 //
5353 // Applications should normally not use this function directly,
5454 // but use the _() macro for translations.
55-func Dgettext(DomainVar string, MsgidVar string) string {
55+func Dgettext(DomainVar *string, MsgidVar string) string {
5656
57- cret := xDgettext(DomainVar, MsgidVar)
57+ cret := xDgettext(core.NullableStringToPtr(DomainVar), MsgidVar)
5858 return cret
5959 }
6060
61-var xDngettext func(string, string, string, uint32) string
61+var xDngettext func(uintptr, string, string, uint32) string
6262
6363 // This function is a wrapper of dngettext() which does not translate
6464 // the message if the default domain as set with textdomain() has no
@@ -66,13 +66,13 @@ var xDngettext func(string, string, string, uint32) string
6666 //
6767 // See g_dgettext() for details of how this differs from dngettext()
6868 // proper.
69-func Dngettext(DomainVar string, MsgidVar string, MsgidPluralVar string, NVar uint32) string {
69+func Dngettext(DomainVar *string, MsgidVar string, MsgidPluralVar string, NVar uint32) string {
7070
71- cret := xDngettext(DomainVar, MsgidVar, MsgidPluralVar, NVar)
71+ cret := xDngettext(core.NullableStringToPtr(DomainVar), MsgidVar, MsgidPluralVar, NVar)
7272 return cret
7373 }
7474
75-var xDpgettext func(string, string, uint) string
75+var xDpgettext func(uintptr, string, uint) string
7676
7777 // This function is a variant of g_dgettext() which supports
7878 // a disambiguating message context. GNU gettext uses the
@@ -87,13 +87,13 @@ var xDpgettext func(string, string, uint) string
8787 //
8888 // Applications should normally not use this function directly,
8989 // but use the C_() macro for translations with context.
90-func Dpgettext(DomainVar string, MsgctxtidVar string, MsgidoffsetVar uint) string {
90+func Dpgettext(DomainVar *string, MsgctxtidVar string, MsgidoffsetVar uint) string {
9191
92- cret := xDpgettext(DomainVar, MsgctxtidVar, MsgidoffsetVar)
92+ cret := xDpgettext(core.NullableStringToPtr(DomainVar), MsgctxtidVar, MsgidoffsetVar)
9393 return cret
9494 }
9595
96-var xDpgettext2 func(string, string, string) string
96+var xDpgettext2 func(uintptr, string, string) string
9797
9898 // This function is a variant of g_dgettext() which supports
9999 // a disambiguating message context. GNU gettext uses the
@@ -105,9 +105,9 @@ var xDpgettext2 func(string, string, string) string
105105 //
106106 // This function differs from C_() in that it is not a macro and
107107 // thus you may use non-string-literals as context and msgid arguments.
108-func Dpgettext2(DomainVar string, ContextVar string, MsgidVar string) string {
108+func Dpgettext2(DomainVar *string, ContextVar string, MsgidVar string) string {
109109
110- cret := xDpgettext2(DomainVar, ContextVar, MsgidVar)
110+ cret := xDpgettext2(core.NullableStringToPtr(DomainVar), ContextVar, MsgidVar)
111111 return cret
112112 }
113113
M v4/glib/ghash.go +64 -4
@@ -286,7 +286,22 @@ 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- cret := xHashTableFind(HashTableVar, NewCallback(PredicateVar), UserDataVar)
289+ var PredicateVarRef uintptr
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)
301+ }
302+ }
303+
304+ cret := xHashTableFind(HashTableVar, PredicateVarRef, UserDataVar)
290305 return cret
291306 }
292307
@@ -306,7 +321,22 @@ var xHashTableForeach func(*HashTable, uintptr, uintptr)
306321 // order searches in contrast to g_hash_table_lookup().
307322 func HashTableForeach(HashTableVar *HashTable, FuncVar *HFunc, UserDataVar uintptr) {
308323
309- xHashTableForeach(HashTableVar, NewCallback(FuncVar), UserDataVar)
324+ var FuncVarRef uintptr
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)
336+ }
337+ }
338+
339+ xHashTableForeach(HashTableVar, FuncVarRef, UserDataVar)
310340
311341 }
312342
@@ -322,7 +352,22 @@ var xHashTableForeachRemove func(*HashTable, uintptr, uintptr) uint
322352 // key/value pairs in the hash table.
323353 func HashTableForeachRemove(HashTableVar *HashTable, FuncVar *HRFunc, UserDataVar uintptr) uint {
324354
325- cret := xHashTableForeachRemove(HashTableVar, NewCallback(FuncVar), UserDataVar)
355+ var FuncVarRef uintptr
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)
367+ }
368+ }
369+
370+ cret := xHashTableForeachRemove(HashTableVar, FuncVarRef, UserDataVar)
326371 return cret
327372 }
328373
@@ -337,7 +382,22 @@ var xHashTableForeachSteal func(*HashTable, uintptr, uintptr) uint
337382 // key/value pairs in the hash table.
338383 func HashTableForeachSteal(HashTableVar *HashTable, FuncVar *HRFunc, UserDataVar uintptr) uint {
339384
340- cret := xHashTableForeachSteal(HashTableVar, NewCallback(FuncVar), UserDataVar)
385+ var FuncVarRef uintptr
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)
397+ }
398+ }
399+
400+ cret := xHashTableForeachSteal(HashTableVar, FuncVarRef, UserDataVar)
341401 return cret
342402 }
343403
M v4/glib/ghook.go +48 -3
@@ -135,7 +135,22 @@ 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- xHookListMarshal(x.GoPointer(), MayRecurseVar, NewCallback(MarshallerVar), MarshalDataVar)
138+ var MarshallerVarRef uintptr
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)
150+ }
151+ }
152+
153+ xHookListMarshal(x.GoPointer(), MayRecurseVar, MarshallerVarRef, MarshalDataVar)
139154
140155 }
141156
@@ -145,7 +160,22 @@ var xHookListMarshalCheck func(uintptr, bool, uintptr, uintptr)
145160 // function returns %FALSE.
146161 func (x *HookList) MarshalCheck(MayRecurseVar bool, MarshallerVar *HookCheckMarshaller, MarshalDataVar uintptr) {
147162
148- xHookListMarshalCheck(x.GoPointer(), MayRecurseVar, NewCallback(MarshallerVar), MarshalDataVar)
163+ var MarshallerVarRef uintptr
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)
175+ }
176+ }
177+
178+ xHookListMarshalCheck(x.GoPointer(), MayRecurseVar, MarshallerVarRef, MarshalDataVar)
149179
150180 }
151181
@@ -214,7 +244,22 @@ var xHookInsertSorted func(*HookList, *Hook, uintptr)
214244 // Inserts a #GHook into a #GHookList, sorted by the given function.
215245 func HookInsertSorted(HookListVar *HookList, HookVar *Hook, FuncVar *HookCompareFunc) {
216246
217- xHookInsertSorted(HookListVar, HookVar, NewCallback(FuncVar))
247+ var FuncVarRef uintptr
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)
259+ }
260+ }
261+
262+ xHookInsertSorted(HookListVar, HookVar, FuncVarRef)
218263
219264 }
220265
M v4/glib/giochannel.go +53 -8
@@ -438,7 +438,7 @@ func (x *IOChannel) SetCloseOnUnref(DoCloseVar bool) {
438438
439439 }
440440
441-var xIOChannelSetEncoding func(uintptr, string, **Error) IOStatus
441+var xIOChannelSetEncoding func(uintptr, uintptr, **Error) IOStatus
442442
443443 // Sets the encoding for the input/output of the channel.
444444 // The internal encoding is always UTF-8. The default encoding
@@ -474,10 +474,10 @@ var xIOChannelSetEncoding func(uintptr, string, **Error) IOStatus
474474 // g_io_channel_seek_position() with an offset of %G_SEEK_CUR, and, if
475475 // they are "seekable", cannot call g_io_channel_write_chars() after
476476 // calling one of the API "read" functions.
477-func (x *IOChannel) SetEncoding(EncodingVar string) (IOStatus, error) {
477+func (x *IOChannel) SetEncoding(EncodingVar *string) (IOStatus, error) {
478478 var cerr *Error
479479
480- cret := xIOChannelSetEncoding(x.GoPointer(), EncodingVar, &cerr)
480+ cret := xIOChannelSetEncoding(x.GoPointer(), core.NullableStringToPtr(EncodingVar), &cerr)
481481 if cerr == nil {
482482 return cret, nil
483483 }
@@ -499,13 +499,13 @@ func (x *IOChannel) SetFlags(FlagsVar IOFlags) (IOStatus, error) {
499499
500500 }
501501
502-var xIOChannelSetLineTerm func(uintptr, string, int)
502+var xIOChannelSetLineTerm func(uintptr, uintptr, int)
503503
504504 // This sets the string that #GIOChannel uses to determine
505505 // where in the file a line break occurs.
506-func (x *IOChannel) SetLineTerm(LineTermVar string, LengthVar int) {
506+func (x *IOChannel) SetLineTerm(LineTermVar *string, LengthVar int) {
507507
508- xIOChannelSetLineTerm(x.GoPointer(), LineTermVar, LengthVar)
508+ xIOChannelSetLineTerm(x.GoPointer(), core.NullableStringToPtr(LineTermVar), LengthVar)
509509
510510 }
511511
@@ -1018,7 +1018,22 @@ 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- cret := xIoAddWatch(ChannelVar, ConditionVar, NewCallback(FuncVar), UserDataVar)
1021+ var FuncVarRef uintptr
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)
1033+ }
1034+ }
1035+
1036+ cret := xIoAddWatch(ChannelVar, ConditionVar, FuncVarRef, UserDataVar)
10221037 return cret
10231038 }
10241039
@@ -1032,7 +1047,37 @@ var xIoAddWatchFull func(*IOChannel, int, IOCondition, uintptr, uintptr, uintptr
10321047 // You can do these steps manually if you need greater control.
10331048 func IoAddWatchFull(ChannelVar *IOChannel, PriorityVar int, ConditionVar IOCondition, FuncVar *IOFunc, UserDataVar uintptr, NotifyVar *DestroyNotify) uint {
10341049
1035- cret := xIoAddWatchFull(ChannelVar, PriorityVar, ConditionVar, NewCallback(FuncVar), UserDataVar, NewCallback(NotifyVar))
1050+ var FuncVarRef uintptr
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)
1062+ }
1063+ }
1064+
1065+ var NotifyVarRef uintptr
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)
1077+ }
1078+ }
1079+
1080+ cret := xIoAddWatchFull(ChannelVar, PriorityVar, ConditionVar, FuncVarRef, UserDataVar, NotifyVarRef)
10361081 return cret
10371082 }
10381083
M v4/glib/gkeyfile.go +18 -18
@@ -230,7 +230,7 @@ func (x *KeyFile) GetBooleanList(GroupNameVar string, KeyVar string, LengthVar *
230230
231231 }
232232
233-var xKeyFileGetComment func(uintptr, string, string, **Error) string
233+var xKeyFileGetComment func(uintptr, uintptr, uintptr, **Error) string
234234
235235 // Retrieves a comment above @key from @group_name.
236236 //
@@ -241,10 +241,10 @@ var xKeyFileGetComment func(uintptr, string, string, **Error) string
241241 // Note that the returned string does not include the `#` comment markers,
242242 // but does include any whitespace after them (on each line). It includes
243243 // the line breaks between lines, but does not include the final line break.
244-func (x *KeyFile) GetComment(GroupNameVar string, KeyVar string) (string, error) {
244+func (x *KeyFile) GetComment(GroupNameVar *string, KeyVar *string) (string, error) {
245245 var cerr *Error
246246
247- cret := xKeyFileGetComment(x.GoPointer(), GroupNameVar, KeyVar, &cerr)
247+ cret := xKeyFileGetComment(x.GoPointer(), core.NullableStringToPtr(GroupNameVar), core.NullableStringToPtr(KeyVar), &cerr)
248248 if cerr == nil {
249249 return cret, nil
250250 }
@@ -377,7 +377,7 @@ func (x *KeyFile) GetKeys(GroupNameVar string, LengthVar *uint) ([]string, error
377377
378378 }
379379
380-var xKeyFileGetLocaleForKey func(uintptr, string, string, string) string
380+var xKeyFileGetLocaleForKey func(uintptr, string, string, uintptr) string
381381
382382 // Returns the actual locale which the result of
383383 // [method@GLib.KeyFile.get_locale_string] or
@@ -388,13 +388,13 @@ var xKeyFileGetLocaleForKey func(uintptr, string, string, string) string
388388 // @group_name, @key and @locale, the result of those functions will
389389 // have originally been tagged with the locale that is the result of
390390 // this function.
391-func (x *KeyFile) GetLocaleForKey(GroupNameVar string, KeyVar string, LocaleVar string) string {
391+func (x *KeyFile) GetLocaleForKey(GroupNameVar string, KeyVar string, LocaleVar *string) string {
392392
393- cret := xKeyFileGetLocaleForKey(x.GoPointer(), GroupNameVar, KeyVar, LocaleVar)
393+ cret := xKeyFileGetLocaleForKey(x.GoPointer(), GroupNameVar, KeyVar, core.NullableStringToPtr(LocaleVar))
394394 return cret
395395 }
396396
397-var xKeyFileGetLocaleString func(uintptr, string, string, string, **Error) string
397+var xKeyFileGetLocaleString func(uintptr, string, string, uintptr, **Error) string
398398
399399 // Returns the value associated with @key under @group_name
400400 // translated in the given @locale if available.
@@ -412,10 +412,10 @@ var xKeyFileGetLocaleString func(uintptr, string, string, string, **Error) strin
412412 // returned. If the value associated
413413 // with @key cannot be interpreted or no suitable translation can
414414 // be found then the untranslated value is returned.
415-func (x *KeyFile) GetLocaleString(GroupNameVar string, KeyVar string, LocaleVar string) (string, error) {
415+func (x *KeyFile) GetLocaleString(GroupNameVar string, KeyVar string, LocaleVar *string) (string, error) {
416416 var cerr *Error
417417
418- cret := xKeyFileGetLocaleString(x.GoPointer(), GroupNameVar, KeyVar, LocaleVar, &cerr)
418+ cret := xKeyFileGetLocaleString(x.GoPointer(), GroupNameVar, KeyVar, core.NullableStringToPtr(LocaleVar), &cerr)
419419 if cerr == nil {
420420 return cret, nil
421421 }
@@ -423,7 +423,7 @@ func (x *KeyFile) GetLocaleString(GroupNameVar string, KeyVar string, LocaleVar
423423
424424 }
425425
426-var xKeyFileGetLocaleStringList func(uintptr, string, string, string, *uint, **Error) []string
426+var xKeyFileGetLocaleStringList func(uintptr, string, string, uintptr, *uint, **Error) []string
427427
428428 // Returns the values associated with @key under @group_name
429429 // translated in the given @locale if available.
@@ -443,10 +443,10 @@ var xKeyFileGetLocaleStringList func(uintptr, string, string, string, *uint, **E
443443 // can be found then the untranslated values are returned. The
444444 // returned array is `NULL`-terminated, so @length may optionally
445445 // be `NULL`.
446-func (x *KeyFile) GetLocaleStringList(GroupNameVar string, KeyVar string, LocaleVar string, LengthVar *uint) ([]string, error) {
446+func (x *KeyFile) GetLocaleStringList(GroupNameVar string, KeyVar string, LocaleVar *string, LengthVar *uint) ([]string, error) {
447447 var cerr *Error
448448
449- cret := xKeyFileGetLocaleStringList(x.GoPointer(), GroupNameVar, KeyVar, LocaleVar, LengthVar, &cerr)
449+ cret := xKeyFileGetLocaleStringList(x.GoPointer(), GroupNameVar, KeyVar, core.NullableStringToPtr(LocaleVar), LengthVar, &cerr)
450450 if cerr == nil {
451451 return cret, nil
452452 }
@@ -686,17 +686,17 @@ func (x *KeyFile) Ref() *KeyFile {
686686 return cret
687687 }
688688
689-var xKeyFileRemoveComment func(uintptr, string, string, **Error) bool
689+var xKeyFileRemoveComment func(uintptr, uintptr, uintptr, **Error) bool
690690
691691 // Removes a comment above @key from @group_name.
692692 //
693693 // If @key is `NULL` then @comment will be removed above @group_name.
694694 // If both @key and @group_name are `NULL`, then @comment will
695695 // be removed above the first group in the file.
696-func (x *KeyFile) RemoveComment(GroupNameVar string, KeyVar string) (bool, error) {
696+func (x *KeyFile) RemoveComment(GroupNameVar *string, KeyVar *string) (bool, error) {
697697 var cerr *Error
698698
699- cret := xKeyFileRemoveComment(x.GoPointer(), GroupNameVar, KeyVar, &cerr)
699+ cret := xKeyFileRemoveComment(x.GoPointer(), core.NullableStringToPtr(GroupNameVar), core.NullableStringToPtr(KeyVar), &cerr)
700700 if cerr == nil {
701701 return cret, nil
702702 }
@@ -778,7 +778,7 @@ func (x *KeyFile) SetBooleanList(GroupNameVar string, KeyVar string, ListVar []b
778778
779779 }
780780
781-var xKeyFileSetComment func(uintptr, string, string, string, **Error) bool
781+var xKeyFileSetComment func(uintptr, uintptr, uintptr, string, **Error) bool
782782
783783 // Places a comment above @key from @group_name.
784784 //
@@ -793,10 +793,10 @@ var xKeyFileSetComment func(uintptr, string, string, string, **Error) bool
793793 //
794794 // Note that this function prepends a `#` comment marker to
795795 // each line of @comment.
796-func (x *KeyFile) SetComment(GroupNameVar string, KeyVar string, CommentVar string) (bool, error) {
796+func (x *KeyFile) SetComment(GroupNameVar *string, KeyVar *string, CommentVar string) (bool, error) {
797797 var cerr *Error
798798
799- cret := xKeyFileSetComment(x.GoPointer(), GroupNameVar, KeyVar, CommentVar, &cerr)
799+ cret := xKeyFileSetComment(x.GoPointer(), core.NullableStringToPtr(GroupNameVar), core.NullableStringToPtr(KeyVar), CommentVar, &cerr)
800800 if cerr == nil {
801801 return cret, nil
802802 }
M v4/glib/glib-unix.go +94 -4
@@ -99,7 +99,22 @@ 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- cret := xUnixFdAdd(FdVar, ConditionVar, NewCallback(FunctionVar), UserDataVar)
102+ var FunctionVarRef uintptr
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)
114+ }
115+ }
116+
117+ cret := xUnixFdAdd(FdVar, ConditionVar, FunctionVarRef, UserDataVar)
103118 return cret
104119 }
105120
@@ -113,7 +128,37 @@ var xUnixFdAddFull func(int, int, IOCondition, uintptr, uintptr, uintptr) uint
113128 // @user_data.
114129 func UnixFdAddFull(PriorityVar int, FdVar int, ConditionVar IOCondition, FunctionVar *UnixFDSourceFunc, UserDataVar uintptr, NotifyVar *DestroyNotify) uint {
115130
116- cret := xUnixFdAddFull(PriorityVar, FdVar, ConditionVar, NewCallback(FunctionVar), UserDataVar, NewCallback(NotifyVar))
131+ var FunctionVarRef uintptr
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)
143+ }
144+ }
145+
146+ var NotifyVarRef uintptr
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)
158+ }
159+ }
160+
161+ cret := xUnixFdAddFull(PriorityVar, FdVar, ConditionVar, FunctionVarRef, UserDataVar, NotifyVarRef)
117162 return cret
118163 }
119164
@@ -211,7 +256,22 @@ var xUnixSignalAdd func(int, uintptr, uintptr) uint
211256 // using g_source_remove().
212257 func UnixSignalAdd(SignumVar int, HandlerVar *SourceFunc, UserDataVar uintptr) uint {
213258
214- cret := xUnixSignalAdd(SignumVar, NewCallback(HandlerVar), UserDataVar)
259+ var HandlerVarRef uintptr
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)
271+ }
272+ }
273+
274+ cret := xUnixSignalAdd(SignumVar, HandlerVarRef, UserDataVar)
215275 return cret
216276 }
217277
@@ -222,7 +282,37 @@ var xUnixSignalAddFull func(int, int, uintptr, uintptr, uintptr) uint
222282 // using g_source_remove().
223283 func UnixSignalAddFull(PriorityVar int, SignumVar int, HandlerVar *SourceFunc, UserDataVar uintptr, NotifyVar *DestroyNotify) uint {
224284
225- cret := xUnixSignalAddFull(PriorityVar, SignumVar, NewCallback(HandlerVar), UserDataVar, NewCallback(NotifyVar))
285+ var HandlerVarRef uintptr
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)
297+ }
298+ }
299+
300+ var NotifyVarRef uintptr
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)
312+ }
313+ }
314+
315+ cret := xUnixSignalAddFull(PriorityVar, SignumVar, HandlerVarRef, UserDataVar, NotifyVarRef)
226316 return cret
227317 }
228318
M v4/glib/glist.go +16 -1
@@ -31,7 +31,22 @@ var xClearList func(**List, uintptr)
3131 // @list_ptr must be a valid pointer. If @list_ptr points to a null #GList, this does nothing.
3232 func ClearList(ListPtrVar **List, DestroyVar *DestroyNotify) {
3333
34- xClearList(ListPtrVar, NewCallbackNullable(DestroyVar))
34+ var DestroyVarRef uintptr
35+ if DestroyVar != nil {
36+ DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
37+ if cbRefPtr, ok := GetCallback(DestroyVarPtr); ok {
38+ DestroyVarRef = cbRefPtr
39+ } else {
40+ fcb := func(arg0 uintptr) {
41+ cbFn := *DestroyVar
42+ cbFn(arg0)
43+ }
44+ DestroyVarRef = purego.NewCallback(fcb)
45+ SaveCallback(DestroyVarPtr, DestroyVarRef)
46+ }
47+ }
48+
49+ xClearList(ListPtrVar, DestroyVarRef)
3550
3651 }
3752
M v4/glib/gmain.go +362 -17
@@ -279,7 +279,22 @@ 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- xMainContextInvoke(x.GoPointer(), NewCallback(FunctionVar), DataVar)
282+ var FunctionVarRef uintptr
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)
294+ }
295+ }
296+
297+ xMainContextInvoke(x.GoPointer(), FunctionVarRef, DataVar)
283298
284299 }
285300
@@ -297,7 +312,37 @@ var xMainContextInvokeFull func(uintptr, int, uintptr, uintptr, uintptr)
297312 // thread or with any particular context acquired.
298313 func (x *MainContext) InvokeFull(PriorityVar int, FunctionVar *SourceFunc, DataVar uintptr, NotifyVar *DestroyNotify) {
299314
300- xMainContextInvokeFull(x.GoPointer(), PriorityVar, NewCallback(FunctionVar), DataVar, NewCallbackNullable(NotifyVar))
315+ var FunctionVarRef uintptr
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)
327+ }
328+ }
329+
330+ var NotifyVarRef uintptr
331+ if NotifyVar != nil {
332+ NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
333+ if cbRefPtr, ok := GetCallback(NotifyVarPtr); ok {
334+ NotifyVarRef = cbRefPtr
335+ } else {
336+ fcb := func(arg0 uintptr) {
337+ cbFn := *NotifyVar
338+ cbFn(arg0)
339+ }
340+ NotifyVarRef = purego.NewCallback(fcb)
341+ SaveCallback(NotifyVarPtr, NotifyVarRef)
342+ }
343+ }
344+
345+ xMainContextInvokeFull(x.GoPointer(), PriorityVar, FunctionVarRef, DataVar, NotifyVarRef)
301346
302347 }
303348
@@ -530,7 +575,22 @@ var xMainContextSetPollFunc func(uintptr, uintptr)
530575 // loop with an external event loop.
531576 func (x *MainContext) SetPollFunc(FuncVar *PollFunc) {
532577
533- xMainContextSetPollFunc(x.GoPointer(), NewCallback(FuncVar))
578+ var FuncVarRef uintptr
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)
590+ }
591+ }
592+
593+ xMainContextSetPollFunc(x.GoPointer(), FuncVarRef)
534594
535595 }
536596
@@ -1196,7 +1256,37 @@ var xSourceSetCallback func(uintptr, uintptr, uintptr, uintptr)
11961256 // of also unsetting the callback.
11971257 func (x *Source) SetCallback(FuncVar *SourceFunc, DataVar uintptr, NotifyVar *DestroyNotify) {
11981258
1199- xSourceSetCallback(x.GoPointer(), NewCallback(FuncVar), DataVar, NewCallbackNullable(NotifyVar))
1259+ var FuncVarRef uintptr
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)
1271+ }
1272+ }
1273+
1274+ var NotifyVarRef uintptr
1275+ if NotifyVar != nil {
1276+ NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
1277+ if cbRefPtr, ok := GetCallback(NotifyVarPtr); ok {
1278+ NotifyVarRef = cbRefPtr
1279+ } else {
1280+ fcb := func(arg0 uintptr) {
1281+ cbFn := *NotifyVar
1282+ cbFn(arg0)
1283+ }
1284+ NotifyVarRef = purego.NewCallback(fcb)
1285+ SaveCallback(NotifyVarPtr, NotifyVarRef)
1286+ }
1287+ }
1288+
1289+ xSourceSetCallback(x.GoPointer(), FuncVarRef, DataVar, NotifyVarRef)
12001290
12011291 }
12021292
@@ -1257,7 +1347,22 @@ var xSourceSetDisposeFunction func(uintptr, uintptr)
12571347 // This should only ever be called from [struct@GLib.Source] implementations.
12581348 func (x *Source) SetDisposeFunction(DisposeVar *SourceDisposeFunc) {
12591349
1260- xSourceSetDisposeFunction(x.GoPointer(), NewCallback(DisposeVar))
1350+ var DisposeVarRef uintptr
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)
1362+ }
1363+ }
1364+
1365+ xSourceSetDisposeFunction(x.GoPointer(), DisposeVarRef)
12611366
12621367 }
12631368
@@ -1595,7 +1700,22 @@ var xChildWatchAdd func(Pid, uintptr, uintptr) uint
15951700 // need greater control.
15961701 func ChildWatchAdd(PidVar Pid, FunctionVar *ChildWatchFunc, DataVar uintptr) uint {
15971702
1598- cret := xChildWatchAdd(PidVar, NewCallback(FunctionVar), DataVar)
1703+ var FunctionVarRef uintptr
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)
1715+ }
1716+ }
1717+
1718+ cret := xChildWatchAdd(PidVar, FunctionVarRef, DataVar)
15991719 return cret
16001720 }
16011721
@@ -1628,7 +1748,37 @@ var xChildWatchAddFull func(int, Pid, uintptr, uintptr, uintptr) uint
16281748 // need greater control.
16291749 func ChildWatchAddFull(PriorityVar int, PidVar Pid, FunctionVar *ChildWatchFunc, DataVar uintptr, NotifyVar *DestroyNotify) uint {
16301750
1631- cret := xChildWatchAddFull(PriorityVar, PidVar, NewCallback(FunctionVar), DataVar, NewCallbackNullable(NotifyVar))
1751+ var FunctionVarRef uintptr
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)
1763+ }
1764+ }
1765+
1766+ var NotifyVarRef uintptr
1767+ if NotifyVar != nil {
1768+ NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
1769+ if cbRefPtr, ok := GetCallback(NotifyVarPtr); ok {
1770+ NotifyVarRef = cbRefPtr
1771+ } else {
1772+ fcb := func(arg0 uintptr) {
1773+ cbFn := *NotifyVar
1774+ cbFn(arg0)
1775+ }
1776+ NotifyVarRef = purego.NewCallback(fcb)
1777+ SaveCallback(NotifyVarPtr, NotifyVarRef)
1778+ }
1779+ }
1780+
1781+ cret := xChildWatchAddFull(PriorityVar, PidVar, FunctionVarRef, DataVar, NotifyVarRef)
16321782 return cret
16331783 }
16341784
@@ -1694,7 +1844,22 @@ var xClearHandleId func(uint, uintptr)
16941844 // pointer casts.
16951845 func ClearHandleId(TagPtrVar uint, ClearFuncVar *ClearHandleFunc) {
16961846
1697- xClearHandleId(TagPtrVar, NewCallback(ClearFuncVar))
1847+ var ClearFuncVarRef uintptr
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)
1859+ }
1860+ }
1861+
1862+ xClearHandleId(TagPtrVar, ClearFuncVarRef)
16981863
16991864 }
17001865
@@ -1767,7 +1932,22 @@ var xIdleAdd func(uintptr, uintptr) uint
17671932 // need greater control or to use a custom main context.
17681933 func IdleAdd(FunctionVar *SourceFunc, DataVar uintptr) uint {
17691934
1770- cret := xIdleAdd(NewCallback(FunctionVar), DataVar)
1935+ var FunctionVarRef uintptr
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)
1947+ }
1948+ }
1949+
1950+ cret := xIdleAdd(FunctionVarRef, DataVar)
17711951 return cret
17721952 }
17731953
@@ -1789,7 +1969,37 @@ var xIdleAddFull func(int, uintptr, uintptr, uintptr) uint
17891969 // need greater control or to use a custom main context.
17901970 func IdleAddFull(PriorityVar int, FunctionVar *SourceFunc, DataVar uintptr, NotifyVar *DestroyNotify) uint {
17911971
1792- cret := xIdleAddFull(PriorityVar, NewCallback(FunctionVar), DataVar, NewCallbackNullable(NotifyVar))
1972+ var FunctionVarRef uintptr
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)
1984+ }
1985+ }
1986+
1987+ var NotifyVarRef uintptr
1988+ if NotifyVar != nil {
1989+ NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
1990+ if cbRefPtr, ok := GetCallback(NotifyVarPtr); ok {
1991+ NotifyVarRef = cbRefPtr
1992+ } else {
1993+ fcb := func(arg0 uintptr) {
1994+ cbFn := *NotifyVar
1995+ cbFn(arg0)
1996+ }
1997+ NotifyVarRef = purego.NewCallback(fcb)
1998+ SaveCallback(NotifyVarPtr, NotifyVarRef)
1999+ }
2000+ }
2001+
2002+ cret := xIdleAddFull(PriorityVar, FunctionVarRef, DataVar, NotifyVarRef)
17932003 return cret
17942004 }
17952005
@@ -1807,7 +2017,22 @@ var xIdleAddOnce func(uintptr, uintptr) uint
18072017 // This function otherwise behaves like [func@GLib.idle_add].
18082018 func IdleAddOnce(FunctionVar *SourceOnceFunc, DataVar uintptr) uint {
18092019
1810- cret := xIdleAddOnce(NewCallback(FunctionVar), DataVar)
2020+ var FunctionVarRef uintptr
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)
2032+ }
2033+ }
2034+
2035+ cret := xIdleAddOnce(FunctionVarRef, DataVar)
18112036 return cret
18122037 }
18132038
@@ -2130,7 +2355,22 @@ var xTimeoutAdd func(uint, uintptr, uintptr) uint
21302355 // time. See [func@GLib.get_monotonic_time].
21312356 func TimeoutAdd(IntervalVar uint, FunctionVar *SourceFunc, DataVar uintptr) uint {
21322357
2133- cret := xTimeoutAdd(IntervalVar, NewCallback(FunctionVar), DataVar)
2358+ var FunctionVarRef uintptr
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)
2370+ }
2371+ }
2372+
2373+ cret := xTimeoutAdd(IntervalVar, FunctionVarRef, DataVar)
21342374 return cret
21352375 }
21362376
@@ -2166,7 +2406,37 @@ var xTimeoutAddFull func(int, uint, uintptr, uintptr, uintptr) uint
21662406 // See [func@GLib.get_monotonic_time].
21672407 func TimeoutAddFull(PriorityVar int, IntervalVar uint, FunctionVar *SourceFunc, DataVar uintptr, NotifyVar *DestroyNotify) uint {
21682408
2169- cret := xTimeoutAddFull(PriorityVar, IntervalVar, NewCallback(FunctionVar), DataVar, NewCallbackNullable(NotifyVar))
2409+ var FunctionVarRef uintptr
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)
2421+ }
2422+ }
2423+
2424+ var NotifyVarRef uintptr
2425+ if NotifyVar != nil {
2426+ NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
2427+ if cbRefPtr, ok := GetCallback(NotifyVarPtr); ok {
2428+ NotifyVarRef = cbRefPtr
2429+ } else {
2430+ fcb := func(arg0 uintptr) {
2431+ cbFn := *NotifyVar
2432+ cbFn(arg0)
2433+ }
2434+ NotifyVarRef = purego.NewCallback(fcb)
2435+ SaveCallback(NotifyVarPtr, NotifyVarRef)
2436+ }
2437+ }
2438+
2439+ cret := xTimeoutAddFull(PriorityVar, IntervalVar, FunctionVarRef, DataVar, NotifyVarRef)
21702440 return cret
21712441 }
21722442
@@ -2181,7 +2451,22 @@ var xTimeoutAddOnce func(uint, uintptr, uintptr) uint
21812451 // This function otherwise behaves like [func@GLib.timeout_add].
21822452 func TimeoutAddOnce(IntervalVar uint, FunctionVar *SourceOnceFunc, DataVar uintptr) uint {
21832453
2184- cret := xTimeoutAddOnce(IntervalVar, NewCallback(FunctionVar), DataVar)
2454+ var FunctionVarRef uintptr
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)
2466+ }
2467+ }
2468+
2469+ cret := xTimeoutAddOnce(IntervalVar, FunctionVarRef, DataVar)
21852470 return cret
21862471 }
21872472
@@ -2212,7 +2497,22 @@ var xTimeoutAddSeconds func(uint, uintptr, uintptr) uint
22122497 // time. See [func@GLib.get_monotonic_time].
22132498 func TimeoutAddSeconds(IntervalVar uint, FunctionVar *SourceFunc, DataVar uintptr) uint {
22142499
2215- cret := xTimeoutAddSeconds(IntervalVar, NewCallback(FunctionVar), DataVar)
2500+ var FunctionVarRef uintptr
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)
2512+ }
2513+ }
2514+
2515+ cret := xTimeoutAddSeconds(IntervalVar, FunctionVarRef, DataVar)
22162516 return cret
22172517 }
22182518
@@ -2260,7 +2560,37 @@ var xTimeoutAddSecondsFull func(int, uint, uintptr, uintptr, uintptr) uint
22602560 // time. See [func@GLib.get_monotonic_time].
22612561 func TimeoutAddSecondsFull(PriorityVar int, IntervalVar uint, FunctionVar *SourceFunc, DataVar uintptr, NotifyVar *DestroyNotify) uint {
22622562
2263- cret := xTimeoutAddSecondsFull(PriorityVar, IntervalVar, NewCallback(FunctionVar), DataVar, NewCallbackNullable(NotifyVar))
2563+ var FunctionVarRef uintptr
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)
2575+ }
2576+ }
2577+
2578+ var NotifyVarRef uintptr
2579+ if NotifyVar != nil {
2580+ NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
2581+ if cbRefPtr, ok := GetCallback(NotifyVarPtr); ok {
2582+ NotifyVarRef = cbRefPtr
2583+ } else {
2584+ fcb := func(arg0 uintptr) {
2585+ cbFn := *NotifyVar
2586+ cbFn(arg0)
2587+ }
2588+ NotifyVarRef = purego.NewCallback(fcb)
2589+ SaveCallback(NotifyVarPtr, NotifyVarRef)
2590+ }
2591+ }
2592+
2593+ cret := xTimeoutAddSecondsFull(PriorityVar, IntervalVar, FunctionVarRef, DataVar, NotifyVarRef)
22642594 return cret
22652595 }
22662596
@@ -2270,7 +2600,22 @@ var xTimeoutAddSecondsOnce func(uint, uintptr, uintptr) uint
22702600 // seconds.
22712601 func TimeoutAddSecondsOnce(IntervalVar uint, FunctionVar *SourceOnceFunc, DataVar uintptr) uint {
22722602
2273- cret := xTimeoutAddSecondsOnce(IntervalVar, NewCallback(FunctionVar), DataVar)
2603+ var FunctionVarRef uintptr
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)
2615+ }
2616+ }
2617+
2618+ cret := xTimeoutAddSecondsOnce(IntervalVar, FunctionVarRef, DataVar)
22742619 return cret
22752620 }
22762621
M v4/glib/gmarkup.go +16 -1
@@ -38,7 +38,22 @@ 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- cret := xNewMarkupParseContext(ParserVar, FlagsVar, UserDataVar, NewCallback(UserDataDnotifyVar))
41+ var UserDataDnotifyVarRef uintptr
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)
53+ }
54+ }
55+
56+ cret := xNewMarkupParseContext(ParserVar, FlagsVar, UserDataVar, UserDataDnotifyVarRef)
4257 return cret
4358 }
4459
M v4/glib/gmem.go +16 -1
@@ -279,7 +279,22 @@ var xClearPointer func(uintptr, uintptr)
279279 // ```
280280 func ClearPointer(PpVar uintptr, DestroyVar *DestroyNotify) {
281281
282- xClearPointer(PpVar, NewCallback(DestroyVar))
282+ var DestroyVarRef uintptr
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)
294+ }
295+ }
296+
297+ xClearPointer(PpVar, DestroyVarRef)
283298
284299 }
285300
M v4/glib/gmessages.go +154 -34
@@ -159,7 +159,7 @@ func AssertWarning(LogDomainVar string, FileVar string, LineVar int, PrettyFunct
159159
160160 }
161161
162-var xLog func(string, LogLevelFlags, string, ...interface{})
162+var xLog func(uintptr, LogLevelFlags, string, ...interface{})
163163
164164 // Logs an error or debugging message.
165165 //
@@ -173,13 +173,13 @@ var xLog func(string, LogLevelFlags, string, ...interface{})
173173 //
174174 // If [structured logging is enabled](logging.html#using-structured-logging) this will
175175 // output via the structured log writer function (see [func@GLib.log_set_writer_func]).
176-func Log(LogDomainVar string, LogLevelVar LogLevelFlags, FormatVar string, varArgs ...interface{}) {
176+func Log(LogDomainVar *string, LogLevelVar LogLevelFlags, FormatVar string, varArgs ...interface{}) {
177177
178- xLog(LogDomainVar, LogLevelVar, FormatVar, varArgs...)
178+ xLog(core.NullableStringToPtr(LogDomainVar), LogLevelVar, FormatVar, varArgs...)
179179
180180 }
181181
182-var xLogDefaultHandler func(string, LogLevelFlags, string, uintptr)
182+var xLogDefaultHandler func(uintptr, LogLevelFlags, uintptr, uintptr)
183183
184184 // The default log handler set up by GLib; [func@GLib.log_set_default_handler]
185185 // allows to install an alternate default log handler.
@@ -212,9 +212,9 @@ var xLogDefaultHandler func(string, LogLevelFlags, string, uintptr)
212212 //
213213 // This has no effect if structured logging is enabled; see
214214 // [Using Structured Logging](logging.html#using-structured-logging).
215-func LogDefaultHandler(LogDomainVar string, LogLevelVar LogLevelFlags, MessageVar string, UnusedDataVar uintptr) {
215+func LogDefaultHandler(LogDomainVar *string, LogLevelVar LogLevelFlags, MessageVar *string, UnusedDataVar uintptr) {
216216
217- xLogDefaultHandler(LogDomainVar, LogLevelVar, MessageVar, UnusedDataVar)
217+ xLogDefaultHandler(core.NullableStringToPtr(LogDomainVar), LogLevelVar, core.NullableStringToPtr(MessageVar), UnusedDataVar)
218218
219219 }
220220
@@ -339,7 +339,22 @@ 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- cret := xLogSetDefaultHandler(NewCallback(LogFuncVar), UserDataVar)
342+ var LogFuncVarRef uintptr
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)
354+ }
355+ }
356+
357+ cret := xLogSetDefaultHandler(LogFuncVarRef, UserDataVar)
343358 return cret
344359 }
345360
@@ -365,7 +380,7 @@ func LogSetFatalMask(LogDomainVar string, FatalMaskVar LogLevelFlags) LogLevelFl
365380 return cret
366381 }
367382
368-var xLogSetHandler func(string, LogLevelFlags, uintptr, uintptr) uint
383+var xLogSetHandler func(uintptr, LogLevelFlags, uintptr, uintptr) uint
369384
370385 // Sets the log handler for a domain and a set of log levels.
371386 //
@@ -410,13 +425,28 @@ var xLogSetHandler func(string, LogLevelFlags, uintptr, uintptr) uint
410425 // | G_LOG_FLAG_RECURSION, my_log_handler, NULL);
411426 //
412427 // ```
413-func LogSetHandler(LogDomainVar string, LogLevelsVar LogLevelFlags, LogFuncVar *LogFunc, UserDataVar uintptr) uint {
428+func LogSetHandler(LogDomainVar *string, LogLevelsVar LogLevelFlags, LogFuncVar *LogFunc, UserDataVar uintptr) uint {
429+
430+ var LogFuncVarRef uintptr
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)
442+ }
443+ }
414444
415- cret := xLogSetHandler(LogDomainVar, LogLevelsVar, NewCallback(LogFuncVar), UserDataVar)
445+ cret := xLogSetHandler(core.NullableStringToPtr(LogDomainVar), LogLevelsVar, LogFuncVarRef, UserDataVar)
416446 return cret
417447 }
418448
419-var xLogSetHandlerFull func(string, LogLevelFlags, uintptr, uintptr, uintptr) uint
449+var xLogSetHandlerFull func(uintptr, LogLevelFlags, uintptr, uintptr, uintptr) uint
420450
421451 // Like [func@GLib.log_set_handler], but takes a destroy notify for the @user_data.
422452 //
@@ -425,9 +455,39 @@ var xLogSetHandlerFull func(string, LogLevelFlags, uintptr, uintptr, uintptr) ui
425455 //
426456 // The `log_domain` parameter can be set to `NULL` or an empty string to use the default
427457 // application domain.
428-func LogSetHandlerFull(LogDomainVar string, LogLevelsVar LogLevelFlags, LogFuncVar *LogFunc, UserDataVar uintptr, DestroyVar *DestroyNotify) uint {
458+func LogSetHandlerFull(LogDomainVar *string, LogLevelsVar LogLevelFlags, LogFuncVar *LogFunc, UserDataVar uintptr, DestroyVar *DestroyNotify) uint {
459+
460+ var LogFuncVarRef uintptr
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)
472+ }
473+ }
429474
430- cret := xLogSetHandlerFull(LogDomainVar, LogLevelsVar, NewCallback(LogFuncVar), UserDataVar, NewCallback(DestroyVar))
475+ var DestroyVarRef uintptr
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)
487+ }
488+ }
489+
490+ cret := xLogSetHandlerFull(core.NullableStringToPtr(LogDomainVar), LogLevelsVar, LogFuncVarRef, UserDataVar, DestroyVarRef)
431491 return cret
432492 }
433493
@@ -446,7 +506,37 @@ var xLogSetWriterFunc func(uintptr, uintptr, uintptr)
446506 // There can only be one writer function. It is an error to set more than one.
447507 func LogSetWriterFunc(FuncVar *LogWriterFunc, UserDataVar uintptr, UserDataFreeVar *DestroyNotify) {
448508
449- xLogSetWriterFunc(NewCallback(FuncVar), UserDataVar, NewCallback(UserDataFreeVar))
509+ var FuncVarRef uintptr
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)
521+ }
522+ }
523+
524+ var UserDataFreeVarRef uintptr
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)
536+ }
537+ }
538+
539+ xLogSetWriterFunc(FuncVarRef, UserDataVar, UserDataFreeVarRef)
450540
451541 }
452542
@@ -578,7 +668,7 @@ func LogStructuredStandard(LogDomainVar string, LogLevelVar LogLevelFlags, FileV
578668
579669 }
580670
581-var xLogVariant func(string, LogLevelFlags, *Variant)
671+var xLogVariant func(uintptr, LogLevelFlags, *Variant)
582672
583673 // Log a message with structured data, accepting the data within a [type@GLib.Variant].
584674 //
@@ -595,9 +685,9 @@ var xLogVariant func(string, LogLevelFlags, *Variant)
595685 // [method@GLib.Variant.print] will be used to convert the value into a string.
596686 //
597687 // For more details on its usage and about the parameters, see [func@GLib.log_structured].
598-func LogVariant(LogDomainVar string, LogLevelVar LogLevelFlags, FieldsVar *Variant) {
688+func LogVariant(LogDomainVar *string, LogLevelVar LogLevelFlags, FieldsVar *Variant) {
599689
600- xLogVariant(LogDomainVar, LogLevelVar, FieldsVar)
690+ xLogVariant(core.NullableStringToPtr(LogDomainVar), LogLevelVar, FieldsVar)
601691
602692 }
603693
@@ -631,15 +721,15 @@ func LogWriterDefault(LogLevelVar LogLevelFlags, FieldsVar []LogField, NFieldsVa
631721 return cret
632722 }
633723
634-var xLogWriterDefaultSetDebugDomains func(string)
724+var xLogWriterDefaultSetDebugDomains func(uintptr)
635725
636726 // Reset the list of domains to be logged, that might be initially set by the
637727 // `G_MESSAGES_DEBUG` or `DEBUG_INVOCATION` environment variables.
638728 //
639729 // This function is thread-safe.
640-func LogWriterDefaultSetDebugDomains(DomainsVar string) {
730+func LogWriterDefaultSetDebugDomains(DomainsVar *string) {
641731
642- xLogWriterDefaultSetDebugDomains(DomainsVar)
732+ xLogWriterDefaultSetDebugDomains(core.NullableStringToPtr(DomainsVar))
643733
644734 }
645735
@@ -666,7 +756,7 @@ func LogWriterDefaultSetUseStderr(UseStderrVar bool) {
666756
667757 }
668758
669-var xLogWriterDefaultWouldDrop func(LogLevelFlags, string) bool
759+var xLogWriterDefaultWouldDrop func(LogLevelFlags, uintptr) bool
670760
671761 // Check whether [func@GLib.log_writer_default] and [func@GLib.log_default_handler] would
672762 // ignore a message with the given domain and level.
@@ -699,9 +789,9 @@ var xLogWriterDefaultWouldDrop func(LogLevelFlags, string) bool
699789 // }
700790 //
701791 // ```
702-func LogWriterDefaultWouldDrop(LogLevelVar LogLevelFlags, LogDomainVar string) bool {
792+func LogWriterDefaultWouldDrop(LogLevelVar LogLevelFlags, LogDomainVar *string) bool {
703793
704- cret := xLogWriterDefaultWouldDrop(LogLevelVar, LogDomainVar)
794+ cret := xLogWriterDefaultWouldDrop(LogLevelVar, core.NullableStringToPtr(LogDomainVar))
705795 return cret
706796 }
707797
@@ -817,7 +907,7 @@ func LogWriterSyslog(LogLevelVar LogLevelFlags, FieldsVar []LogField, NFieldsVar
817907 return cret
818908 }
819909
820-var xLogv func(string, LogLevelFlags, string, []interface{})
910+var xLogv func(uintptr, LogLevelFlags, string, []interface{})
821911
822912 // Logs an error or debugging message.
823913 //
@@ -834,9 +924,9 @@ var xLogv func(string, LogLevelFlags, string, []interface{})
834924 //
835925 // The `log_domain` parameter can be set to `NULL` or an empty string to use the default
836926 // application domain.
837-func Logv(LogDomainVar string, LogLevelVar LogLevelFlags, FormatVar string, ArgsVar []interface{}) {
927+func Logv(LogDomainVar *string, LogLevelVar LogLevelFlags, FormatVar string, ArgsVar []interface{}) {
838928
839- xLogv(LogDomainVar, LogLevelVar, FormatVar, ArgsVar)
929+ xLogv(core.NullableStringToPtr(LogDomainVar), LogLevelVar, FormatVar, ArgsVar)
840930
841931 }
842932
@@ -894,13 +984,13 @@ func PrintfStringUpperBound(FormatVar string, ArgsVar []interface{}) uint {
894984 return cret
895985 }
896986
897-var xReturnIfFailWarning func(string, string, string)
987+var xReturnIfFailWarning func(uintptr, string, uintptr)
898988
899989 // Internal function used to print messages from the public [func@GLib.return_if_fail]
900990 // and [func@GLib.return_val_if_fail] macros.
901-func ReturnIfFailWarning(LogDomainVar string, PrettyFunctionVar string, ExpressionVar string) {
991+func ReturnIfFailWarning(LogDomainVar *string, PrettyFunctionVar string, ExpressionVar *string) {
902992
903- xReturnIfFailWarning(LogDomainVar, PrettyFunctionVar, ExpressionVar)
993+ xReturnIfFailWarning(core.NullableStringToPtr(LogDomainVar), PrettyFunctionVar, core.NullableStringToPtr(ExpressionVar))
904994
905995 }
906996
@@ -923,7 +1013,22 @@ var xSetPrintHandler func(uintptr) uintptr
9231013 // in all platforms. Before GLib 2.76, this was `NULL`.
9241014 func SetPrintHandler(FuncVar *PrintFunc) uintptr {
9251015
926- cret := xSetPrintHandler(NewCallbackNullable(FuncVar))
1016+ var FuncVarRef uintptr
1017+ if FuncVar != nil {
1018+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
1019+ if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
1020+ FuncVarRef = cbRefPtr
1021+ } else {
1022+ fcb := func(arg0 string) {
1023+ cbFn := *FuncVar
1024+ cbFn(arg0)
1025+ }
1026+ FuncVarRef = purego.NewCallback(fcb)
1027+ SaveCallback(FuncVarPtr, FuncVarRef)
1028+ }
1029+ }
1030+
1031+ cret := xSetPrintHandler(FuncVarRef)
9271032 return cret
9281033 }
9291034
@@ -946,17 +1051,32 @@ var xSetPrinterrHandler func(uintptr) uintptr
9461051 // Before GLib 2.76, this was `NULL`.
9471052 func SetPrinterrHandler(FuncVar *PrintFunc) uintptr {
9481053
949- cret := xSetPrinterrHandler(NewCallbackNullable(FuncVar))
1054+ var FuncVarRef uintptr
1055+ if FuncVar != nil {
1056+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
1057+ if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
1058+ FuncVarRef = cbRefPtr
1059+ } else {
1060+ fcb := func(arg0 string) {
1061+ cbFn := *FuncVar
1062+ cbFn(arg0)
1063+ }
1064+ FuncVarRef = purego.NewCallback(fcb)
1065+ SaveCallback(FuncVarPtr, FuncVarRef)
1066+ }
1067+ }
1068+
1069+ cret := xSetPrinterrHandler(FuncVarRef)
9501070 return cret
9511071 }
9521072
953-var xWarnMessage func(string, string, int, string, string)
1073+var xWarnMessage func(uintptr, string, int, string, uintptr)
9541074
9551075 // Internal function used to print messages from the public [func@GLib.warn_if_reached]
9561076 // and [func@GLib.warn_if_fail] macros.
957-func WarnMessage(DomainVar string, FileVar string, LineVar int, FuncVar string, WarnexprVar string) {
1077+func WarnMessage(DomainVar *string, FileVar string, LineVar int, FuncVar string, WarnexprVar *string) {
9581078
959- xWarnMessage(DomainVar, FileVar, LineVar, FuncVar, WarnexprVar)
1079+ xWarnMessage(core.NullableStringToPtr(DomainVar), FileVar, LineVar, FuncVar, core.NullableStringToPtr(WarnexprVar))
9601080
9611081 }
9621082
M v4/glib/gnode.go +48 -3
@@ -67,7 +67,22 @@ 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- xNodeChildrenForeach(x.GoPointer(), FlagsVar, NewCallback(FuncVar), DataVar)
70+ var FuncVarRef uintptr
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)
82+ }
83+ }
84+
85+ xNodeChildrenForeach(x.GoPointer(), FlagsVar, FuncVarRef, DataVar)
7186
7287 }
7388
@@ -86,7 +101,22 @@ var xNodeCopyDeep func(uintptr, uintptr, uintptr) *Node
86101 // Recursively copies a #GNode and its data.
87102 func (x *Node) CopyDeep(CopyFuncVar *CopyFunc, DataVar uintptr) *Node {
88103
89- cret := xNodeCopyDeep(x.GoPointer(), NewCallback(CopyFuncVar), DataVar)
104+ var CopyFuncVarRef uintptr
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)
116+ }
117+ }
118+
119+ cret := xNodeCopyDeep(x.GoPointer(), CopyFuncVarRef, DataVar)
90120 return cret
91121 }
92122
@@ -275,7 +305,22 @@ var xNodeTraverse func(uintptr, TraverseType, TraverseFlags, int, uintptr, uintp
275305 // @func must not do anything that would modify the structure of the tree.
276306 func (x *Node) Traverse(OrderVar TraverseType, FlagsVar TraverseFlags, MaxDepthVar int, FuncVar *NodeTraverseFunc, DataVar uintptr) {
277307
278- xNodeTraverse(x.GoPointer(), OrderVar, FlagsVar, MaxDepthVar, NewCallback(FuncVar), DataVar)
308+ var FuncVarRef uintptr
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)
320+ }
321+ }
322+
323+ xNodeTraverse(x.GoPointer(), OrderVar, FlagsVar, MaxDepthVar, FuncVarRef, DataVar)
279324
280325 }
281326
M v4/glib/goption.go +134 -14
@@ -42,13 +42,13 @@ func (x *OptionContext) AddGroup(GroupVar *OptionGroup) {
4242
4343 }
4444
45-var xOptionContextAddMainEntries func(uintptr, []OptionEntry, string)
45+var xOptionContextAddMainEntries func(uintptr, []OptionEntry, uintptr)
4646
4747 // A convenience function which creates a main group if it doesn't
4848 // exist, adds the @entries to it and sets the translation domain.
49-func (x *OptionContext) AddMainEntries(EntriesVar []OptionEntry, TranslationDomainVar string) {
49+func (x *OptionContext) AddMainEntries(EntriesVar []OptionEntry, TranslationDomainVar *string) {
5050
51- xOptionContextAddMainEntries(x.GoPointer(), EntriesVar, TranslationDomainVar)
51+ xOptionContextAddMainEntries(x.GoPointer(), EntriesVar, core.NullableStringToPtr(TranslationDomainVar))
5252
5353 }
5454
@@ -201,16 +201,16 @@ func (x *OptionContext) ParseStrv(ArgumentsVar []string) (bool, error) {
201201
202202 }
203203
204-var xOptionContextSetDescription func(uintptr, string)
204+var xOptionContextSetDescription func(uintptr, uintptr)
205205
206206 // Adds a string to be displayed in `--help` output after the list
207207 // of options. This text often includes a bug reporting address.
208208 //
209209 // Note that the summary is translated (see
210210 // g_option_context_set_translate_func()).
211-func (x *OptionContext) SetDescription(DescriptionVar string) {
211+func (x *OptionContext) SetDescription(DescriptionVar *string) {
212212
213- xOptionContextSetDescription(x.GoPointer(), DescriptionVar)
213+ xOptionContextSetDescription(x.GoPointer(), core.NullableStringToPtr(DescriptionVar))
214214
215215 }
216216
@@ -285,7 +285,7 @@ func (x *OptionContext) SetStrictPosix(StrictPosixVar bool) {
285285
286286 }
287287
288-var xOptionContextSetSummary func(uintptr, string)
288+var xOptionContextSetSummary func(uintptr, uintptr)
289289
290290 // Adds a string to be displayed in `--help` output before the list
291291 // of options. This is typically a summary of the program functionality.
@@ -293,9 +293,9 @@ var xOptionContextSetSummary func(uintptr, string)
293293 // Note that the summary is translated (see
294294 // g_option_context_set_translate_func() and
295295 // g_option_context_set_translation_domain()).
296-func (x *OptionContext) SetSummary(SummaryVar string) {
296+func (x *OptionContext) SetSummary(SummaryVar *string) {
297297
298- xOptionContextSetSummary(x.GoPointer(), SummaryVar)
298+ xOptionContextSetSummary(x.GoPointer(), core.NullableStringToPtr(SummaryVar))
299299
300300 }
301301
@@ -314,7 +314,37 @@ var xOptionContextSetTranslateFunc func(uintptr, uintptr, uintptr, uintptr)
314314 // domain, see g_option_context_set_translation_domain().
315315 func (x *OptionContext) SetTranslateFunc(FuncVar *TranslateFunc, DataVar uintptr, DestroyNotifyVar *DestroyNotify) {
316316
317- xOptionContextSetTranslateFunc(x.GoPointer(), NewCallbackNullable(FuncVar), DataVar, NewCallbackNullable(DestroyNotifyVar))
317+ var FuncVarRef uintptr
318+ if FuncVar != nil {
319+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
320+ if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
321+ FuncVarRef = cbRefPtr
322+ } else {
323+ fcb := func(arg0 string, arg1 uintptr) string {
324+ cbFn := *FuncVar
325+ return cbFn(arg0, arg1)
326+ }
327+ FuncVarRef = purego.NewCallback(fcb)
328+ SaveCallback(FuncVarPtr, FuncVarRef)
329+ }
330+ }
331+
332+ var DestroyNotifyVarRef uintptr
333+ if DestroyNotifyVar != nil {
334+ DestroyNotifyVarPtr := uintptr(unsafe.Pointer(DestroyNotifyVar))
335+ if cbRefPtr, ok := GetCallback(DestroyNotifyVarPtr); ok {
336+ DestroyNotifyVarRef = cbRefPtr
337+ } else {
338+ fcb := func(arg0 uintptr) {
339+ cbFn := *DestroyNotifyVar
340+ cbFn(arg0)
341+ }
342+ DestroyNotifyVarRef = purego.NewCallback(fcb)
343+ SaveCallback(DestroyNotifyVarPtr, DestroyNotifyVarRef)
344+ }
345+ }
346+
347+ xOptionContextSetTranslateFunc(x.GoPointer(), FuncVarRef, DataVar, DestroyNotifyVarRef)
318348
319349 }
320350
@@ -404,7 +434,22 @@ var xNewOptionGroup func(string, string, string, uintptr, uintptr) *OptionGroup
404434 // ‘Application Options:’.
405435 func NewOptionGroup(NameVar string, DescriptionVar string, HelpDescriptionVar string, UserDataVar uintptr, DestroyVar *DestroyNotify) *OptionGroup {
406436
407- cret := xNewOptionGroup(NameVar, DescriptionVar, HelpDescriptionVar, UserDataVar, NewCallbackNullable(DestroyVar))
437+ var DestroyVarRef uintptr
438+ if DestroyVar != nil {
439+ DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
440+ if cbRefPtr, ok := GetCallback(DestroyVarPtr); ok {
441+ DestroyVarRef = cbRefPtr
442+ } else {
443+ fcb := func(arg0 uintptr) {
444+ cbFn := *DestroyVar
445+ cbFn(arg0)
446+ }
447+ DestroyVarRef = purego.NewCallback(fcb)
448+ SaveCallback(DestroyVarPtr, DestroyVarRef)
449+ }
450+ }
451+
452+ cret := xNewOptionGroup(NameVar, DescriptionVar, HelpDescriptionVar, UserDataVar, DestroyVarRef)
408453 return cret
409454 }
410455
@@ -445,7 +490,22 @@ var xOptionGroupSetErrorHook func(uintptr, uintptr)
445490 // specified when constructing the group with g_option_group_new().
446491 func (x *OptionGroup) SetErrorHook(ErrorFuncVar *OptionErrorFunc) {
447492
448- xOptionGroupSetErrorHook(x.GoPointer(), NewCallback(ErrorFuncVar))
493+ var ErrorFuncVarRef uintptr
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)
505+ }
506+ }
507+
508+ xOptionGroupSetErrorHook(x.GoPointer(), ErrorFuncVarRef)
449509
450510 }
451511
@@ -460,7 +520,37 @@ var xOptionGroupSetParseHooks func(uintptr, uintptr, uintptr)
460520 // with g_option_group_new().
461521 func (x *OptionGroup) SetParseHooks(PreParseFuncVar *OptionParseFunc, PostParseFuncVar *OptionParseFunc) {
462522
463- xOptionGroupSetParseHooks(x.GoPointer(), NewCallbackNullable(PreParseFuncVar), NewCallbackNullable(PostParseFuncVar))
523+ var PreParseFuncVarRef uintptr
524+ if PreParseFuncVar != nil {
525+ PreParseFuncVarPtr := uintptr(unsafe.Pointer(PreParseFuncVar))
526+ if cbRefPtr, ok := GetCallback(PreParseFuncVarPtr); ok {
527+ PreParseFuncVarRef = cbRefPtr
528+ } else {
529+ fcb := func(arg0 *OptionContext, arg1 *OptionGroup, arg2 uintptr, arg3 **Error) bool {
530+ cbFn := *PreParseFuncVar
531+ return cbFn(arg0, arg1, arg2, arg3)
532+ }
533+ PreParseFuncVarRef = purego.NewCallback(fcb)
534+ SaveCallback(PreParseFuncVarPtr, PreParseFuncVarRef)
535+ }
536+ }
537+
538+ var PostParseFuncVarRef uintptr
539+ if PostParseFuncVar != nil {
540+ PostParseFuncVarPtr := uintptr(unsafe.Pointer(PostParseFuncVar))
541+ if cbRefPtr, ok := GetCallback(PostParseFuncVarPtr); ok {
542+ PostParseFuncVarRef = cbRefPtr
543+ } else {
544+ fcb := func(arg0 *OptionContext, arg1 *OptionGroup, arg2 uintptr, arg3 **Error) bool {
545+ cbFn := *PostParseFuncVar
546+ return cbFn(arg0, arg1, arg2, arg3)
547+ }
548+ PostParseFuncVarRef = purego.NewCallback(fcb)
549+ SaveCallback(PostParseFuncVarPtr, PostParseFuncVarRef)
550+ }
551+ }
552+
553+ xOptionGroupSetParseHooks(x.GoPointer(), PreParseFuncVarRef, PostParseFuncVarRef)
464554
465555 }
466556
@@ -474,7 +564,37 @@ var xOptionGroupSetTranslateFunc func(uintptr, uintptr, uintptr, uintptr)
474564 // domain, see g_option_group_set_translation_domain().
475565 func (x *OptionGroup) SetTranslateFunc(FuncVar *TranslateFunc, DataVar uintptr, DestroyNotifyVar *DestroyNotify) {
476566
477- xOptionGroupSetTranslateFunc(x.GoPointer(), NewCallbackNullable(FuncVar), DataVar, NewCallbackNullable(DestroyNotifyVar))
567+ var FuncVarRef uintptr
568+ if FuncVar != nil {
569+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
570+ if cbRefPtr, ok := GetCallback(FuncVarPtr); ok {
571+ FuncVarRef = cbRefPtr
572+ } else {
573+ fcb := func(arg0 string, arg1 uintptr) string {
574+ cbFn := *FuncVar
575+ return cbFn(arg0, arg1)
576+ }
577+ FuncVarRef = purego.NewCallback(fcb)
578+ SaveCallback(FuncVarPtr, FuncVarRef)
579+ }
580+ }
581+
582+ var DestroyNotifyVarRef uintptr
583+ if DestroyNotifyVar != nil {
584+ DestroyNotifyVarPtr := uintptr(unsafe.Pointer(DestroyNotifyVar))
585+ if cbRefPtr, ok := GetCallback(DestroyNotifyVarPtr); ok {
586+ DestroyNotifyVarRef = cbRefPtr
587+ } else {
588+ fcb := func(arg0 uintptr) {
589+ cbFn := *DestroyNotifyVar
590+ cbFn(arg0)
591+ }
592+ DestroyNotifyVarRef = purego.NewCallback(fcb)
593+ SaveCallback(DestroyNotifyVarPtr, DestroyNotifyVarRef)
594+ }
595+ }
596+
597+ xOptionGroupSetTranslateFunc(x.GoPointer(), FuncVarRef, DataVar, DestroyNotifyVarRef)
478598
479599 }
480600
M v4/glib/gpathbuf.go +6 -6
@@ -116,12 +116,12 @@ func (x *PathBuf) Init() *PathBuf {
116116 return cret
117117 }
118118
119-var xPathBufInitFromPath func(uintptr, string) *PathBuf
119+var xPathBufInitFromPath func(uintptr, uintptr) *PathBuf
120120
121121 // Initializes a `GPathBuf` instance with the given path.
122-func (x *PathBuf) InitFromPath(PathVar string) *PathBuf {
122+func (x *PathBuf) InitFromPath(PathVar *string) *PathBuf {
123123
124- cret := xPathBufInitFromPath(x.GoPointer(), PathVar)
124+ cret := xPathBufInitFromPath(x.GoPointer(), core.NullableStringToPtr(PathVar))
125125 return cret
126126 }
127127
@@ -191,7 +191,7 @@ func (x *PathBuf) Push(PathVar string) *PathBuf {
191191 return cret
192192 }
193193
194-var xPathBufSetExtension func(uintptr, string) bool
194+var xPathBufSetExtension func(uintptr, uintptr) bool
195195
196196 // Adds an extension to the file name in the path buffer.
197197 //
@@ -199,9 +199,9 @@ var xPathBufSetExtension func(uintptr, string) bool
199199 //
200200 // If the path buffer does not have a file name set, this function returns
201201 // `FALSE` and leaves the path buffer unmodified.
202-func (x *PathBuf) SetExtension(ExtensionVar string) bool {
202+func (x *PathBuf) SetExtension(ExtensionVar *string) bool {
203203
204- cret := xPathBufSetExtension(x.GoPointer(), ExtensionVar)
204+ cret := xPathBufSetExtension(x.GoPointer(), core.NullableStringToPtr(ExtensionVar))
205205 return cret
206206 }
207207
M v4/glib/gpattern.go +6 -6
@@ -77,7 +77,7 @@ func (x *PatternSpec) Free() {
7777
7878 }
7979
80-var xPatternSpecMatch func(uintptr, uint, string, string) bool
80+var xPatternSpecMatch func(uintptr, uint, string, uintptr) bool
8181
8282 // Matches a string against a compiled pattern.
8383 //
@@ -98,9 +98,9 @@ var xPatternSpecMatch func(uintptr, uint, string, string) bool
9898 // not be obtained by [func@GLib.strreverse]. This works only if the string
9999 // does not contain any multibyte characters. GLib offers the
100100 // [func@GLib.utf8_strreverse] function to reverse UTF-8 encoded strings.
101-func (x *PatternSpec) Match(StringLengthVar uint, StringVar string, StringReversedVar string) bool {
101+func (x *PatternSpec) Match(StringLengthVar uint, StringVar string, StringReversedVar *string) bool {
102102
103- cret := xPatternSpecMatch(x.GoPointer(), StringLengthVar, StringVar, StringReversedVar)
103+ cret := xPatternSpecMatch(x.GoPointer(), StringLengthVar, StringVar, core.NullableStringToPtr(StringReversedVar))
104104 return cret
105105 }
106106
@@ -117,7 +117,7 @@ func (x *PatternSpec) MatchString(StringVar string) bool {
117117 return cret
118118 }
119119
120-var xPatternMatch func(*PatternSpec, uint, string, string) bool
120+var xPatternMatch func(*PatternSpec, uint, string, uintptr) bool
121121
122122 // Matches a string against a compiled pattern.
123123 //
@@ -138,9 +138,9 @@ var xPatternMatch func(*PatternSpec, uint, string, string) bool
138138 // not be obtained by [func@GLib.strreverse]. This works only if the string
139139 // does not contain any multibyte characters. GLib offers the
140140 // [func@GLib.utf8_strreverse] function to reverse UTF-8 encoded strings.
141-func PatternMatch(PspecVar *PatternSpec, StringLengthVar uint, StringVar string, StringReversedVar string) bool {
141+func PatternMatch(PspecVar *PatternSpec, StringLengthVar uint, StringVar string, StringReversedVar *string) bool {
142142
143- cret := xPatternMatch(PspecVar, StringLengthVar, StringVar, StringReversedVar)
143+ cret := xPatternMatch(PspecVar, StringLengthVar, StringVar, core.NullableStringToPtr(StringReversedVar))
144144 return cret
145145 }
146146
M v4/glib/gqsort.go +34 -2
@@ -2,6 +2,8 @@
22 package glib
33
44 import (
5+ "unsafe"
6+
57 "github.com/jwijenbergh/purego"
68 "github.com/jwijenbergh/puregotk/pkg/core"
79 )
@@ -15,7 +17,22 @@ var xQsortWithData func(uintptr, int, uint, uintptr, uintptr)
1517 // Unlike `qsort()`, this is guaranteed to be a stable sort (since GLib 2.32).
1618 func QsortWithData(PbaseVar uintptr, TotalElemsVar int, SizeVar uint, CompareFuncVar *CompareDataFunc, UserDataVar uintptr) {
1719
18- xQsortWithData(PbaseVar, TotalElemsVar, SizeVar, NewCallback(CompareFuncVar), UserDataVar)
20+ var CompareFuncVarRef uintptr
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)
32+ }
33+ }
34+
35+ xQsortWithData(PbaseVar, TotalElemsVar, SizeVar, CompareFuncVarRef, UserDataVar)
1936
2037 }
2138
@@ -28,7 +45,22 @@ var xSortArray func([]uintptr, uint, uint, uintptr, uintptr)
2845 // Unlike `qsort()`, this is guaranteed to be a stable sort.
2946 func SortArray(ArrayVar []uintptr, NElementsVar uint, ElementSizeVar uint, CompareFuncVar *CompareDataFunc, UserDataVar uintptr) {
3047
31- xSortArray(ArrayVar, NElementsVar, ElementSizeVar, NewCallback(CompareFuncVar), UserDataVar)
48+ var CompareFuncVarRef uintptr
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)
60+ }
61+ }
62+
63+ xSortArray(ArrayVar, NElementsVar, ElementSizeVar, CompareFuncVarRef, UserDataVar)
3264
3365 }
3466
M v4/glib/gquark.go +15 -15
@@ -34,7 +34,7 @@ import (
3434 // pointer comparison, rather than using `strcmp()`.
3535 type Quark = uint32
3636
37-var xInternStaticString func(string) string
37+var xInternStaticString func(uintptr) string
3838
3939 // Returns a canonical representation for @string. Interned strings
4040 // can be compared for equality by comparing the pointers, instead of
@@ -44,13 +44,13 @@ var xInternStaticString func(string) string
4444 // This function must not be used before library constructors have finished
4545 // running. In particular, this means it cannot be used to initialize global
4646 // variables in C++.
47-func InternStaticString(StringVar string) string {
47+func InternStaticString(StringVar *string) string {
4848
49- cret := xInternStaticString(StringVar)
49+ cret := xInternStaticString(core.NullableStringToPtr(StringVar))
5050 return cret
5151 }
5252
53-var xInternString func(string) string
53+var xInternString func(uintptr) string
5454
5555 // Returns a canonical representation for @string. Interned strings
5656 // can be compared for equality by comparing the pointers, instead of
@@ -59,13 +59,13 @@ var xInternString func(string) string
5959 // This function must not be used before library constructors have finished
6060 // running. In particular, this means it cannot be used to initialize global
6161 // variables in C++.
62-func InternString(StringVar string) string {
62+func InternString(StringVar *string) string {
6363
64- cret := xInternString(StringVar)
64+ cret := xInternString(core.NullableStringToPtr(StringVar))
6565 return cret
6666 }
6767
68-var xQuarkFromStaticString func(string) Quark
68+var xQuarkFromStaticString func(uintptr) Quark
6969
7070 // Gets the #GQuark identifying the given (static) string. If the
7171 // string does not currently have an associated #GQuark, a new #GQuark
@@ -83,13 +83,13 @@ var xQuarkFromStaticString func(string) Quark
8383 // This function must not be used before library constructors have finished
8484 // running. In particular, this means it cannot be used to initialize global
8585 // variables in C++.
86-func QuarkFromStaticString(StringVar string) Quark {
86+func QuarkFromStaticString(StringVar *string) Quark {
8787
88- cret := xQuarkFromStaticString(StringVar)
88+ cret := xQuarkFromStaticString(core.NullableStringToPtr(StringVar))
8989 return cret
9090 }
9191
92-var xQuarkFromString func(string) Quark
92+var xQuarkFromString func(uintptr) Quark
9393
9494 // Gets the #GQuark identifying the given string. If the string does
9595 // not currently have an associated #GQuark, a new #GQuark is created,
@@ -98,9 +98,9 @@ var xQuarkFromString func(string) Quark
9898 // This function must not be used before library constructors have finished
9999 // running. In particular, this means it cannot be used to initialize global
100100 // variables in C++.
101-func QuarkFromString(StringVar string) Quark {
101+func QuarkFromString(StringVar *string) Quark {
102102
103- cret := xQuarkFromString(StringVar)
103+ cret := xQuarkFromString(core.NullableStringToPtr(StringVar))
104104 return cret
105105 }
106106
@@ -113,7 +113,7 @@ func QuarkToString(QuarkVar Quark) string {
113113 return cret
114114 }
115115
116-var xQuarkTryString func(string) Quark
116+var xQuarkTryString func(uintptr) Quark
117117
118118 // Gets the #GQuark associated with the given string, or 0 if string is
119119 // %NULL or it has no associated #GQuark.
@@ -123,9 +123,9 @@ var xQuarkTryString func(string) Quark
123123 //
124124 // This function must not be used before library constructors have finished
125125 // running.
126-func QuarkTryString(StringVar string) Quark {
126+func QuarkTryString(StringVar *string) Quark {
127127
128- cret := xQuarkTryString(StringVar)
128+ cret := xQuarkTryString(core.NullableStringToPtr(StringVar))
129129 return cret
130130 }
131131
M v4/glib/gqueue.go +96 -6
@@ -41,7 +41,22 @@ var xQueueClearFull func(uintptr, uintptr)
4141 // and calls the provided @free_func on each item in the #GQueue.
4242 func (x *Queue) ClearFull(FreeFuncVar *DestroyNotify) {
4343
44- xQueueClearFull(x.GoPointer(), NewCallbackNullable(FreeFuncVar))
44+ var FreeFuncVarRef uintptr
45+ if FreeFuncVar != nil {
46+ FreeFuncVarPtr := uintptr(unsafe.Pointer(FreeFuncVar))
47+ if cbRefPtr, ok := GetCallback(FreeFuncVarPtr); ok {
48+ FreeFuncVarRef = cbRefPtr
49+ } else {
50+ fcb := func(arg0 uintptr) {
51+ cbFn := *FreeFuncVar
52+ cbFn(arg0)
53+ }
54+ FreeFuncVarRef = purego.NewCallback(fcb)
55+ SaveCallback(FreeFuncVarPtr, FreeFuncVarRef)
56+ }
57+ }
58+
59+ xQueueClearFull(x.GoPointer(), FreeFuncVarRef)
4560
4661 }
4762
@@ -85,7 +100,22 @@ var xQueueFindCustom func(uintptr, uintptr, uintptr) *List
85100 // first argument and the given user data as the second argument.
86101 func (x *Queue) FindCustom(DataVar uintptr, FuncVar *CompareFunc) *List {
87102
88- cret := xQueueFindCustom(x.GoPointer(), DataVar, NewCallback(FuncVar))
103+ var FuncVarRef uintptr
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)
115+ }
116+ }
117+
118+ cret := xQueueFindCustom(x.GoPointer(), DataVar, FuncVarRef)
89119 return cret
90120 }
91121
@@ -98,7 +128,22 @@ var xQueueForeach func(uintptr, uintptr, uintptr)
98128 // not modify any part of the queue after that element.
99129 func (x *Queue) Foreach(FuncVar *Func, UserDataVar uintptr) {
100130
101- xQueueForeach(x.GoPointer(), NewCallback(FuncVar), UserDataVar)
131+ var FuncVarRef uintptr
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)
143+ }
144+ }
145+
146+ xQueueForeach(x.GoPointer(), FuncVarRef, UserDataVar)
102147
103148 }
104149
@@ -125,7 +170,22 @@ var xQueueFreeFull func(uintptr, uintptr)
125170 // element from it).
126171 func (x *Queue) FreeFull(FreeFuncVar *DestroyNotify) {
127172
128- xQueueFreeFull(x.GoPointer(), NewCallback(FreeFuncVar))
173+ var FreeFuncVarRef uintptr
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)
185+ }
186+ }
187+
188+ xQueueFreeFull(x.GoPointer(), FreeFuncVarRef)
129189
130190 }
131191
@@ -210,7 +270,22 @@ var xQueueInsertSorted func(uintptr, uintptr, uintptr, uintptr)
210270 // Inserts @data into @queue using @func to determine the new position.
211271 func (x *Queue) InsertSorted(DataVar uintptr, FuncVar *CompareDataFunc, UserDataVar uintptr) {
212272
213- xQueueInsertSorted(x.GoPointer(), DataVar, NewCallback(FuncVar), UserDataVar)
273+ var FuncVarRef uintptr
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)
285+ }
286+ }
287+
288+ xQueueInsertSorted(x.GoPointer(), DataVar, FuncVarRef, UserDataVar)
214289
215290 }
216291
@@ -426,7 +501,22 @@ var xQueueSort func(uintptr, uintptr, uintptr)
426501 // Sorts @queue using @compare_func.
427502 func (x *Queue) Sort(CompareFuncVar *CompareDataFunc, UserDataVar uintptr) {
428503
429- xQueueSort(x.GoPointer(), NewCallback(CompareFuncVar), UserDataVar)
504+ var CompareFuncVarRef uintptr
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)
516+ }
517+ }
518+
519+ xQueueSort(x.GoPointer(), CompareFuncVarRef, UserDataVar)
430520
431521 }
432522
M v4/glib/grcbox.go +34 -2
@@ -2,6 +2,8 @@
22 package glib
33
44 import (
5+ "unsafe"
6+
57 "github.com/jwijenbergh/purego"
68 "github.com/jwijenbergh/puregotk/pkg/core"
79 )
@@ -95,7 +97,22 @@ var xAtomicRcBoxReleaseFull func(uintptr, uintptr)
9597 // when the callback is called and will be freed.
9698 func AtomicRcBoxReleaseFull(MemBlockVar uintptr, ClearFuncVar *DestroyNotify) {
9799
98- xAtomicRcBoxReleaseFull(MemBlockVar, NewCallback(ClearFuncVar))
100+ var ClearFuncVarRef uintptr
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)
112+ }
113+ }
114+
115+ xAtomicRcBoxReleaseFull(MemBlockVar, ClearFuncVarRef)
99116
100117 }
101118
@@ -183,7 +200,22 @@ var xRcBoxReleaseFull func(uintptr, uintptr)
183200 // resources allocated for @mem_block.
184201 func RcBoxReleaseFull(MemBlockVar uintptr, ClearFuncVar *DestroyNotify) {
185202
186- xRcBoxReleaseFull(MemBlockVar, NewCallback(ClearFuncVar))
203+ var ClearFuncVarRef uintptr
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)
215+ }
216+ }
217+
218+ xRcBoxReleaseFull(MemBlockVar, ClearFuncVarRef)
187219
188220 }
189221
M v4/glib/gregex.go +16 -1
@@ -1028,7 +1028,22 @@ 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- cret := xRegexReplaceEval(x.GoPointer(), StringVar, StringLenVar, StartPositionVar, MatchOptionsVar, NewCallback(EvalVar), UserDataVar, &cerr)
1031+ var EvalVarRef uintptr
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)
1043+ }
1044+ }
1045+
1046+ cret := xRegexReplaceEval(x.GoPointer(), StringVar, StringLenVar, StartPositionVar, MatchOptionsVar, EvalVarRef, UserDataVar, &cerr)
10321047 if cerr == nil {
10331048 return cret, nil
10341049 }
M v4/glib/grel.go +31 -1
@@ -104,7 +104,37 @@ 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- xRelationIndex(x.GoPointer(), FieldVar, NewCallback(HashFuncVar), NewCallback(KeyEqualFuncVar))
107+ var HashFuncVarRef uintptr
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)
119+ }
120+ }
121+
122+ var KeyEqualFuncVarRef uintptr
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)
134+ }
135+ }
136+
137+ xRelationIndex(x.GoPointer(), FieldVar, HashFuncVarRef, KeyEqualFuncVarRef)
108138
109139 }
110140
M v4/glib/gscanner.go +16 -1
@@ -223,7 +223,22 @@ var xScannerScopeForeachSymbol func(uintptr, uint, uintptr, uintptr)
223223 // parameter.
224224 func (x *Scanner) ScopeForeachSymbol(ScopeIdVar uint, FuncVar *HFunc, UserDataVar uintptr) {
225225
226- xScannerScopeForeachSymbol(x.GoPointer(), ScopeIdVar, NewCallback(FuncVar), UserDataVar)
226+ var FuncVarRef uintptr
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)
238+ }
239+ }
240+
241+ xScannerScopeForeachSymbol(x.GoPointer(), ScopeIdVar, FuncVarRef, UserDataVar)
227242
228243 }
229244
M v4/glib/gsequence.go +192 -12
@@ -39,7 +39,22 @@ 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- xSequenceForeach(x.GoPointer(), NewCallback(FuncVar), UserDataVar)
42+ var FuncVarRef uintptr
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)
54+ }
55+ }
56+
57+ xSequenceForeach(x.GoPointer(), FuncVarRef, UserDataVar)
4358
4459 }
4560
@@ -109,7 +124,22 @@ var xSequenceInsertSorted func(uintptr, uintptr, uintptr, uintptr) *SequenceIter
109124 // g_sequence_sort() or g_sequence_sort_iter().
110125 func (x *Sequence) InsertSorted(DataVar uintptr, CmpFuncVar *CompareDataFunc, CmpDataVar uintptr) *SequenceIter {
111126
112- cret := xSequenceInsertSorted(x.GoPointer(), DataVar, NewCallback(CmpFuncVar), CmpDataVar)
127+ var CmpFuncVarRef uintptr
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)
139+ }
140+ }
141+
142+ cret := xSequenceInsertSorted(x.GoPointer(), DataVar, CmpFuncVarRef, CmpDataVar)
113143 return cret
114144 }
115145
@@ -129,7 +159,22 @@ var xSequenceInsertSortedIter func(uintptr, uintptr, uintptr, uintptr) *Sequence
129159 // g_sequence_sort() or g_sequence_sort_iter().
130160 func (x *Sequence) InsertSortedIter(DataVar uintptr, IterCmpVar *SequenceIterCompareFunc, CmpDataVar uintptr) *SequenceIter {
131161
132- cret := xSequenceInsertSortedIter(x.GoPointer(), DataVar, NewCallback(IterCmpVar), CmpDataVar)
162+ var IterCmpVarRef uintptr
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)
174+ }
175+ }
176+
177+ cret := xSequenceInsertSortedIter(x.GoPointer(), DataVar, IterCmpVarRef, CmpDataVar)
133178 return cret
134179 }
135180
@@ -163,7 +208,22 @@ var xSequenceLookup func(uintptr, uintptr, uintptr, uintptr) *SequenceIter
163208 // unsorted.
164209 func (x *Sequence) Lookup(DataVar uintptr, CmpFuncVar *CompareDataFunc, CmpDataVar uintptr) *SequenceIter {
165210
166- cret := xSequenceLookup(x.GoPointer(), DataVar, NewCallback(CmpFuncVar), CmpDataVar)
211+ var CmpFuncVarRef uintptr
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)
223+ }
224+ }
225+
226+ cret := xSequenceLookup(x.GoPointer(), DataVar, CmpFuncVarRef, CmpDataVar)
167227 return cret
168228 }
169229
@@ -181,7 +241,22 @@ var xSequenceLookupIter func(uintptr, uintptr, uintptr, uintptr) *SequenceIter
181241 // unsorted.
182242 func (x *Sequence) LookupIter(DataVar uintptr, IterCmpVar *SequenceIterCompareFunc, CmpDataVar uintptr) *SequenceIter {
183243
184- cret := xSequenceLookupIter(x.GoPointer(), DataVar, NewCallback(IterCmpVar), CmpDataVar)
244+ var IterCmpVarRef uintptr
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)
256+ }
257+ }
258+
259+ cret := xSequenceLookupIter(x.GoPointer(), DataVar, IterCmpVarRef, CmpDataVar)
185260 return cret
186261 }
187262
@@ -211,7 +286,22 @@ var xSequenceSearch func(uintptr, uintptr, uintptr, uintptr) *SequenceIter
211286 // unsorted.
212287 func (x *Sequence) Search(DataVar uintptr, CmpFuncVar *CompareDataFunc, CmpDataVar uintptr) *SequenceIter {
213288
214- cret := xSequenceSearch(x.GoPointer(), DataVar, NewCallback(CmpFuncVar), CmpDataVar)
289+ var CmpFuncVarRef uintptr
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)
301+ }
302+ }
303+
304+ cret := xSequenceSearch(x.GoPointer(), DataVar, CmpFuncVarRef, CmpDataVar)
215305 return cret
216306 }
217307
@@ -232,7 +322,22 @@ var xSequenceSearchIter func(uintptr, uintptr, uintptr, uintptr) *SequenceIter
232322 // unsorted.
233323 func (x *Sequence) SearchIter(DataVar uintptr, IterCmpVar *SequenceIterCompareFunc, CmpDataVar uintptr) *SequenceIter {
234324
235- cret := xSequenceSearchIter(x.GoPointer(), DataVar, NewCallback(IterCmpVar), CmpDataVar)
325+ var IterCmpVarRef uintptr
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)
337+ }
338+ }
339+
340+ cret := xSequenceSearchIter(x.GoPointer(), DataVar, IterCmpVarRef, CmpDataVar)
236341 return cret
237342 }
238343
@@ -246,7 +351,22 @@ var xSequenceSort func(uintptr, uintptr, uintptr)
246351 // if the second comes before the first.
247352 func (x *Sequence) Sort(CmpFuncVar *CompareDataFunc, CmpDataVar uintptr) {
248353
249- xSequenceSort(x.GoPointer(), NewCallback(CmpFuncVar), CmpDataVar)
354+ var CmpFuncVarRef uintptr
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)
366+ }
367+ }
368+
369+ xSequenceSort(x.GoPointer(), CmpFuncVarRef, CmpDataVar)
250370
251371 }
252372
@@ -261,7 +381,22 @@ var xSequenceSortIter func(uintptr, uintptr, uintptr)
261381 // iterator comes before the first.
262382 func (x *Sequence) SortIter(CmpFuncVar *SequenceIterCompareFunc, CmpDataVar uintptr) {
263383
264- xSequenceSortIter(x.GoPointer(), NewCallback(CmpFuncVar), CmpDataVar)
384+ var CmpFuncVarRef uintptr
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)
396+ }
397+ }
398+
399+ xSequenceSortIter(x.GoPointer(), CmpFuncVarRef, CmpDataVar)
265400
266401 }
267402
@@ -362,7 +497,22 @@ var xSequenceForeachRange func(*SequenceIter, *SequenceIter, uintptr, uintptr)
362497 // itself.
363498 func SequenceForeachRange(BeginVar *SequenceIter, EndVar *SequenceIter, FuncVar *Func, UserDataVar uintptr) {
364499
365- xSequenceForeachRange(BeginVar, EndVar, NewCallback(FuncVar), UserDataVar)
500+ var FuncVarRef uintptr
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)
512+ }
513+ }
514+
515+ xSequenceForeachRange(BeginVar, EndVar, FuncVarRef, UserDataVar)
366516
367517 }
368518
@@ -476,7 +626,22 @@ var xSequenceSortChanged func(*SequenceIter, uintptr, uintptr)
476626 // the second item comes before the first.
477627 func SequenceSortChanged(IterVar *SequenceIter, CmpFuncVar *CompareDataFunc, CmpDataVar uintptr) {
478628
479- xSequenceSortChanged(IterVar, NewCallback(CmpFuncVar), CmpDataVar)
629+ var CmpFuncVarRef uintptr
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)
641+ }
642+ }
643+
644+ xSequenceSortChanged(IterVar, CmpFuncVarRef, CmpDataVar)
480645
481646 }
482647
@@ -493,7 +658,22 @@ var xSequenceSortChangedIter func(*SequenceIter, uintptr, uintptr)
493658 // iterator comes before the first.
494659 func SequenceSortChangedIter(IterVar *SequenceIter, IterCmpVar *SequenceIterCompareFunc, CmpDataVar uintptr) {
495660
496- xSequenceSortChangedIter(IterVar, NewCallback(IterCmpVar), CmpDataVar)
661+ var IterCmpVarRef uintptr
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)
673+ }
674+ }
675+
676+ xSequenceSortChangedIter(IterVar, IterCmpVarRef, CmpDataVar)
497677
498678 }
499679
M v4/glib/gslist.go +16 -1
@@ -30,7 +30,22 @@ var xClearSlist func(**SList, uintptr)
3030 // @slist_ptr must be a valid pointer. If @slist_ptr points to a null #GSList, this does nothing.
3131 func ClearSlist(SlistPtrVar **SList, DestroyVar *DestroyNotify) {
3232
33- xClearSlist(SlistPtrVar, NewCallbackNullable(DestroyVar))
33+ var DestroyVarRef uintptr
34+ if DestroyVar != nil {
35+ DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
36+ if cbRefPtr, ok := GetCallback(DestroyVarPtr); ok {
37+ DestroyVarRef = cbRefPtr
38+ } else {
39+ fcb := func(arg0 uintptr) {
40+ cbFn := *DestroyVar
41+ cbFn(arg0)
42+ }
43+ DestroyVarRef = purego.NewCallback(fcb)
44+ SaveCallback(DestroyVarPtr, DestroyVarRef)
45+ }
46+ }
47+
48+ xClearSlist(SlistPtrVar, DestroyVarRef)
3449
3550 }
3651
M v4/glib/gspawn.go +92 -15
@@ -2,6 +2,8 @@
22 package glib
33
44 import (
5+ "unsafe"
6+
57 "github.com/jwijenbergh/purego"
68 "github.com/jwijenbergh/puregotk/pkg/core"
79 )
@@ -134,7 +136,7 @@ const (
134136 GSpawnErrorFailedValue SpawnError = 19
135137 )
136138
137-var xSpawnAsync func(string, []string, []string, SpawnFlags, uintptr, uintptr, *Pid, **Error) bool
139+var xSpawnAsync func(uintptr, []string, []string, SpawnFlags, uintptr, uintptr, *Pid, **Error) bool
138140
139141 // Executes a child program asynchronously.
140142 //
@@ -153,10 +155,25 @@ var xSpawnAsync func(string, []string, []string, SpawnFlags, uintptr, uintptr, *
153155 // Note that the returned @child_pid on Windows is a handle to the child
154156 // process and not its identifier. Process handles and process identifiers
155157 // are different concepts on Windows.
156-func SpawnAsync(WorkingDirectoryVar string, ArgvVar []string, EnvpVar []string, FlagsVar SpawnFlags, ChildSetupVar *SpawnChildSetupFunc, UserDataVar uintptr, ChildPidVar *Pid) (bool, error) {
158+func SpawnAsync(WorkingDirectoryVar *string, ArgvVar []string, EnvpVar []string, FlagsVar SpawnFlags, ChildSetupVar *SpawnChildSetupFunc, UserDataVar uintptr, ChildPidVar *Pid) (bool, error) {
157159 var cerr *Error
158160
159- cret := xSpawnAsync(WorkingDirectoryVar, ArgvVar, EnvpVar, FlagsVar, NewCallbackNullable(ChildSetupVar), UserDataVar, ChildPidVar, &cerr)
161+ var ChildSetupVarRef uintptr
162+ if ChildSetupVar != nil {
163+ ChildSetupVarPtr := uintptr(unsafe.Pointer(ChildSetupVar))
164+ if cbRefPtr, ok := GetCallback(ChildSetupVarPtr); ok {
165+ ChildSetupVarRef = cbRefPtr
166+ } else {
167+ fcb := func(arg0 uintptr) {
168+ cbFn := *ChildSetupVar
169+ cbFn(arg0)
170+ }
171+ ChildSetupVarRef = purego.NewCallback(fcb)
172+ SaveCallback(ChildSetupVarPtr, ChildSetupVarRef)
173+ }
174+ }
175+
176+ cret := xSpawnAsync(core.NullableStringToPtr(WorkingDirectoryVar), ArgvVar, EnvpVar, FlagsVar, ChildSetupVarRef, UserDataVar, ChildPidVar, &cerr)
160177 if cerr == nil {
161178 return cret, nil
162179 }
@@ -164,16 +181,31 @@ func SpawnAsync(WorkingDirectoryVar string, ArgvVar []string, EnvpVar []string,
164181
165182 }
166183
167-var xSpawnAsyncWithFds func(string, []string, []string, SpawnFlags, uintptr, uintptr, *Pid, int, int, int, **Error) bool
184+var xSpawnAsyncWithFds func(uintptr, []string, []string, SpawnFlags, uintptr, uintptr, *Pid, int, int, int, **Error) bool
168185
169186 // Executes a child program asynchronously.
170187 //
171188 // Identical to g_spawn_async_with_pipes_and_fds() but with `n_fds` set to zero,
172189 // so no FD assignments are used.
173-func SpawnAsyncWithFds(WorkingDirectoryVar string, ArgvVar []string, EnvpVar []string, FlagsVar SpawnFlags, ChildSetupVar *SpawnChildSetupFunc, UserDataVar uintptr, ChildPidVar *Pid, StdinFdVar int, StdoutFdVar int, StderrFdVar int) (bool, error) {
190+func SpawnAsyncWithFds(WorkingDirectoryVar *string, ArgvVar []string, EnvpVar []string, FlagsVar SpawnFlags, ChildSetupVar *SpawnChildSetupFunc, UserDataVar uintptr, ChildPidVar *Pid, StdinFdVar int, StdoutFdVar int, StderrFdVar int) (bool, error) {
174191 var cerr *Error
175192
176- cret := xSpawnAsyncWithFds(WorkingDirectoryVar, ArgvVar, EnvpVar, FlagsVar, NewCallbackNullable(ChildSetupVar), UserDataVar, ChildPidVar, StdinFdVar, StdoutFdVar, StderrFdVar, &cerr)
193+ var ChildSetupVarRef uintptr
194+ if ChildSetupVar != nil {
195+ ChildSetupVarPtr := uintptr(unsafe.Pointer(ChildSetupVar))
196+ if cbRefPtr, ok := GetCallback(ChildSetupVarPtr); ok {
197+ ChildSetupVarRef = cbRefPtr
198+ } else {
199+ fcb := func(arg0 uintptr) {
200+ cbFn := *ChildSetupVar
201+ cbFn(arg0)
202+ }
203+ ChildSetupVarRef = purego.NewCallback(fcb)
204+ SaveCallback(ChildSetupVarPtr, ChildSetupVarRef)
205+ }
206+ }
207+
208+ cret := xSpawnAsyncWithFds(core.NullableStringToPtr(WorkingDirectoryVar), ArgvVar, EnvpVar, FlagsVar, ChildSetupVarRef, UserDataVar, ChildPidVar, StdinFdVar, StdoutFdVar, StderrFdVar, &cerr)
177209 if cerr == nil {
178210 return cret, nil
179211 }
@@ -181,14 +213,29 @@ func SpawnAsyncWithFds(WorkingDirectoryVar string, ArgvVar []string, EnvpVar []s
181213
182214 }
183215
184-var xSpawnAsyncWithPipes func(string, []string, []string, SpawnFlags, uintptr, uintptr, *Pid, *int, *int, *int, **Error) bool
216+var xSpawnAsyncWithPipes func(uintptr, []string, []string, SpawnFlags, uintptr, uintptr, *Pid, *int, *int, *int, **Error) bool
185217
186218 // Identical to g_spawn_async_with_pipes_and_fds() but with `n_fds` set to zero,
187219 // so no FD assignments are used.
188-func SpawnAsyncWithPipes(WorkingDirectoryVar string, ArgvVar []string, EnvpVar []string, FlagsVar SpawnFlags, ChildSetupVar *SpawnChildSetupFunc, UserDataVar uintptr, ChildPidVar *Pid, StandardInputVar *int, StandardOutputVar *int, StandardErrorVar *int) (bool, error) {
220+func SpawnAsyncWithPipes(WorkingDirectoryVar *string, ArgvVar []string, EnvpVar []string, FlagsVar SpawnFlags, ChildSetupVar *SpawnChildSetupFunc, UserDataVar uintptr, ChildPidVar *Pid, StandardInputVar *int, StandardOutputVar *int, StandardErrorVar *int) (bool, error) {
189221 var cerr *Error
190222
191- cret := xSpawnAsyncWithPipes(WorkingDirectoryVar, ArgvVar, EnvpVar, FlagsVar, NewCallbackNullable(ChildSetupVar), UserDataVar, ChildPidVar, StandardInputVar, StandardOutputVar, StandardErrorVar, &cerr)
223+ var ChildSetupVarRef uintptr
224+ if ChildSetupVar != nil {
225+ ChildSetupVarPtr := uintptr(unsafe.Pointer(ChildSetupVar))
226+ if cbRefPtr, ok := GetCallback(ChildSetupVarPtr); ok {
227+ ChildSetupVarRef = cbRefPtr
228+ } else {
229+ fcb := func(arg0 uintptr) {
230+ cbFn := *ChildSetupVar
231+ cbFn(arg0)
232+ }
233+ ChildSetupVarRef = purego.NewCallback(fcb)
234+ SaveCallback(ChildSetupVarPtr, ChildSetupVarRef)
235+ }
236+ }
237+
238+ cret := xSpawnAsyncWithPipes(core.NullableStringToPtr(WorkingDirectoryVar), ArgvVar, EnvpVar, FlagsVar, ChildSetupVarRef, UserDataVar, ChildPidVar, StandardInputVar, StandardOutputVar, StandardErrorVar, &cerr)
192239 if cerr == nil {
193240 return cret, nil
194241 }
@@ -196,7 +243,7 @@ func SpawnAsyncWithPipes(WorkingDirectoryVar string, ArgvVar []string, EnvpVar [
196243
197244 }
198245
199-var xSpawnAsyncWithPipesAndFds func(string, []string, []string, SpawnFlags, uintptr, uintptr, int, int, int, []int, []int, uint, *Pid, *int, *int, *int, **Error) bool
246+var xSpawnAsyncWithPipesAndFds func(uintptr, []string, []string, SpawnFlags, uintptr, uintptr, int, int, int, []int, []int, uint, *Pid, *int, *int, *int, **Error) bool
200247
201248 // Executes a child program asynchronously (your program will not
202249 // block waiting for the child to exit).
@@ -392,10 +439,25 @@ var xSpawnAsyncWithPipesAndFds func(string, []string, []string, SpawnFlags, uint
392439 // graphical application too, then to ensure that the spawned program opens its
393440 // windows on the right screen, you may want to use #GdkAppLaunchContext,
394441 // #GAppLaunchContext, or set the `DISPLAY` environment variable.
395-func SpawnAsyncWithPipesAndFds(WorkingDirectoryVar string, ArgvVar []string, EnvpVar []string, FlagsVar SpawnFlags, ChildSetupVar *SpawnChildSetupFunc, UserDataVar uintptr, StdinFdVar int, StdoutFdVar int, StderrFdVar int, SourceFdsVar []int, TargetFdsVar []int, NFdsVar uint, ChildPidOutVar *Pid, StdinPipeOutVar *int, StdoutPipeOutVar *int, StderrPipeOutVar *int) (bool, error) {
442+func SpawnAsyncWithPipesAndFds(WorkingDirectoryVar *string, ArgvVar []string, EnvpVar []string, FlagsVar SpawnFlags, ChildSetupVar *SpawnChildSetupFunc, UserDataVar uintptr, StdinFdVar int, StdoutFdVar int, StderrFdVar int, SourceFdsVar []int, TargetFdsVar []int, NFdsVar uint, ChildPidOutVar *Pid, StdinPipeOutVar *int, StdoutPipeOutVar *int, StderrPipeOutVar *int) (bool, error) {
396443 var cerr *Error
397444
398- cret := xSpawnAsyncWithPipesAndFds(WorkingDirectoryVar, ArgvVar, EnvpVar, FlagsVar, NewCallbackNullable(ChildSetupVar), UserDataVar, StdinFdVar, StdoutFdVar, StderrFdVar, SourceFdsVar, TargetFdsVar, NFdsVar, ChildPidOutVar, StdinPipeOutVar, StdoutPipeOutVar, StderrPipeOutVar, &cerr)
445+ var ChildSetupVarRef uintptr
446+ if ChildSetupVar != nil {
447+ ChildSetupVarPtr := uintptr(unsafe.Pointer(ChildSetupVar))
448+ if cbRefPtr, ok := GetCallback(ChildSetupVarPtr); ok {
449+ ChildSetupVarRef = cbRefPtr
450+ } else {
451+ fcb := func(arg0 uintptr) {
452+ cbFn := *ChildSetupVar
453+ cbFn(arg0)
454+ }
455+ ChildSetupVarRef = purego.NewCallback(fcb)
456+ SaveCallback(ChildSetupVarPtr, ChildSetupVarRef)
457+ }
458+ }
459+
460+ cret := xSpawnAsyncWithPipesAndFds(core.NullableStringToPtr(WorkingDirectoryVar), ArgvVar, EnvpVar, FlagsVar, ChildSetupVarRef, UserDataVar, StdinFdVar, StdoutFdVar, StderrFdVar, SourceFdsVar, TargetFdsVar, NFdsVar, ChildPidOutVar, StdinPipeOutVar, StdoutPipeOutVar, StderrPipeOutVar, &cerr)
399461 if cerr == nil {
400462 return cret, nil
401463 }
@@ -553,7 +615,7 @@ func SpawnCommandLineSync(CommandLineVar string, StandardOutputVar *[]byte, Stan
553615
554616 }
555617
556-var xSpawnSync func(string, []string, []string, SpawnFlags, uintptr, uintptr, *[]byte, *[]byte, *int, **Error) bool
618+var xSpawnSync func(uintptr, []string, []string, SpawnFlags, uintptr, uintptr, *[]byte, *[]byte, *int, **Error) bool
557619
558620 // Executes a child synchronously (waits for the child to exit before returning).
559621 //
@@ -578,10 +640,25 @@ var xSpawnSync func(string, []string, []string, SpawnFlags, uintptr, uintptr, *[
578640 // This function calls g_spawn_async_with_pipes() internally; see that
579641 // function for full details on the other parameters and details on
580642 // how these functions work on Windows.
581-func SpawnSync(WorkingDirectoryVar string, ArgvVar []string, EnvpVar []string, FlagsVar SpawnFlags, ChildSetupVar *SpawnChildSetupFunc, UserDataVar uintptr, StandardOutputVar *[]byte, StandardErrorVar *[]byte, WaitStatusVar *int) (bool, error) {
643+func SpawnSync(WorkingDirectoryVar *string, ArgvVar []string, EnvpVar []string, FlagsVar SpawnFlags, ChildSetupVar *SpawnChildSetupFunc, UserDataVar uintptr, StandardOutputVar *[]byte, StandardErrorVar *[]byte, WaitStatusVar *int) (bool, error) {
582644 var cerr *Error
583645
584- cret := xSpawnSync(WorkingDirectoryVar, ArgvVar, EnvpVar, FlagsVar, NewCallbackNullable(ChildSetupVar), UserDataVar, StandardOutputVar, StandardErrorVar, WaitStatusVar, &cerr)
646+ var ChildSetupVarRef uintptr
647+ if ChildSetupVar != nil {
648+ ChildSetupVarPtr := uintptr(unsafe.Pointer(ChildSetupVar))
649+ if cbRefPtr, ok := GetCallback(ChildSetupVarPtr); ok {
650+ ChildSetupVarRef = cbRefPtr
651+ } else {
652+ fcb := func(arg0 uintptr) {
653+ cbFn := *ChildSetupVar
654+ cbFn(arg0)
655+ }
656+ ChildSetupVarRef = purego.NewCallback(fcb)
657+ SaveCallback(ChildSetupVarPtr, ChildSetupVarRef)
658+ }
659+ }
660+
661+ cret := xSpawnSync(core.NullableStringToPtr(WorkingDirectoryVar), ArgvVar, EnvpVar, FlagsVar, ChildSetupVarRef, UserDataVar, StandardOutputVar, StandardErrorVar, WaitStatusVar, &cerr)
585662 if cerr == nil {
586663 return cret, nil
587664 }
M v4/glib/gstrfuncs.go +24 -24
@@ -480,7 +480,7 @@ func StrMatchString(SearchTermVar string, PotentialHitVar string, AcceptAlternat
480480 return cret
481481 }
482482
483-var xStrToAscii func(string, string) string
483+var xStrToAscii func(string, uintptr) string
484484
485485 // Transliterate @str to plain ASCII.
486486 //
@@ -500,13 +500,13 @@ var xStrToAscii func(string, string) string
500500 // If you want to do translation for no specific locale, and you want it
501501 // to be done independently of the currently locale, specify `"C"` for
502502 // @from_locale.
503-func StrToAscii(StrVar string, FromLocaleVar string) string {
503+func StrToAscii(StrVar string, FromLocaleVar *string) string {
504504
505- cret := xStrToAscii(StrVar, FromLocaleVar)
505+ cret := xStrToAscii(StrVar, core.NullableStringToPtr(FromLocaleVar))
506506 return cret
507507 }
508508
509-var xStrTokenizeAndFold func(string, string, *[]string) []string
509+var xStrTokenizeAndFold func(string, uintptr, *[]string) []string
510510
511511 // Tokenizes @string and performs folding on each token.
512512 //
@@ -523,9 +523,9 @@ var xStrTokenizeAndFold func(string, string, *[]string) []string
523523 // for doing so is unspecified, but @translit_locale (if specified) may
524524 // improve the transliteration if the language of the source string is
525525 // known.
526-func StrTokenizeAndFold(StringVar string, TranslitLocaleVar string, AsciiAlternatesVar *[]string) []string {
526+func StrTokenizeAndFold(StringVar string, TranslitLocaleVar *string, AsciiAlternatesVar *[]string) []string {
527527
528- cret := xStrTokenizeAndFold(StringVar, TranslitLocaleVar, AsciiAlternatesVar)
528+ cret := xStrTokenizeAndFold(StringVar, core.NullableStringToPtr(TranslitLocaleVar), AsciiAlternatesVar)
529529 return cret
530530 }
531531
@@ -635,7 +635,7 @@ func Strconcat(String1Var string, varArgs ...interface{}) string {
635635 return cret
636636 }
637637
638-var xStrdelimit func(string, string, byte) string
638+var xStrdelimit func(string, uintptr, byte) string
639639
640640 // Converts any delimiter characters in @string to @new_delimiter.
641641 //
@@ -654,9 +654,9 @@ var xStrdelimit func(string, string, byte) string
654654 // …
655655 // g_free (reformatted);
656656 // ```
657-func Strdelimit(StringVar string, DelimitersVar string, NewDelimiterVar byte) string {
657+func Strdelimit(StringVar string, DelimitersVar *string, NewDelimiterVar byte) string {
658658
659- cret := xStrdelimit(StringVar, DelimitersVar, NewDelimiterVar)
659+ cret := xStrdelimit(StringVar, core.NullableStringToPtr(DelimitersVar), NewDelimiterVar)
660660 return cret
661661 }
662662
@@ -669,12 +669,12 @@ func Strdown(StringVar string) string {
669669 return cret
670670 }
671671
672-var xStrdup func(string) string
672+var xStrdup func(uintptr) string
673673
674674 // Duplicates a string. If @str is `NULL` it returns `NULL`.
675-func Strdup(StrVar string) string {
675+func Strdup(StrVar *string) string {
676676
677- cret := xStrdup(StrVar)
677+ cret := xStrdup(core.NullableStringToPtr(StrVar))
678678 return cret
679679 }
680680
@@ -752,7 +752,7 @@ func Strerror(ErrnumVar int) string {
752752 return cret
753753 }
754754
755-var xStrescape func(string, string) string
755+var xStrescape func(string, uintptr) string
756756
757757 // It replaces the following special characters in the string @source
758758 // with their corresponding C escape sequence:
@@ -773,9 +773,9 @@ var xStrescape func(string, string) string
773773 // Characters supplied in @exceptions are not escaped.
774774 //
775775 // [func@GLib.strcompress] does the reverse conversion.
776-func Strescape(SourceVar string, ExceptionsVar string) string {
776+func Strescape(SourceVar string, ExceptionsVar *string) string {
777777
778- cret := xStrescape(SourceVar, ExceptionsVar)
778+ cret := xStrescape(SourceVar, core.NullableStringToPtr(ExceptionsVar))
779779 return cret
780780 }
781781
@@ -790,17 +790,17 @@ func Strfreev(StrArrayVar []string) {
790790
791791 }
792792
793-var xStrjoin func(string, ...interface{}) string
793+var xStrjoin func(uintptr, ...interface{}) string
794794
795795 // Joins a number of strings together to form one long string, with the
796796 // optional @separator inserted between each of them.
797-func Strjoin(SeparatorVar string, varArgs ...interface{}) string {
797+func Strjoin(SeparatorVar *string, varArgs ...interface{}) string {
798798
799- cret := xStrjoin(SeparatorVar, varArgs...)
799+ cret := xStrjoin(core.NullableStringToPtr(SeparatorVar), varArgs...)
800800 return cret
801801 }
802802
803-var xStrjoinv func(string, []string) string
803+var xStrjoinv func(uintptr, []string) string
804804
805805 // Joins an array of strings together to form one long string, with the
806806 // optional @separator inserted between each of them.
@@ -808,9 +808,9 @@ var xStrjoinv func(string, []string) string
808808 // If @str_array has no items, the return value will be an
809809 // empty string. If @str_array contains a single item, @separator will not
810810 // appear in the resulting string.
811-func Strjoinv(SeparatorVar string, StrArrayVar []string) string {
811+func Strjoinv(SeparatorVar *string, StrArrayVar []string) string {
812812
813- cret := xStrjoinv(SeparatorVar, StrArrayVar)
813+ cret := xStrjoinv(core.NullableStringToPtr(SeparatorVar), StrArrayVar)
814814 return cret
815815 }
816816
@@ -869,7 +869,7 @@ func Strncasecmp(S1Var string, S2Var string, NVar uint) int {
869869 return cret
870870 }
871871
872-var xStrndup func(string, uint) string
872+var xStrndup func(uintptr, uint) string
873873
874874 // Duplicates the first @n bytes of a string, returning a newly-allocated
875875 // buffer @n + 1 bytes long which will always be nul-terminated. If @str
@@ -878,9 +878,9 @@ var xStrndup func(string, uint) string
878878 //
879879 // To copy a number of characters from a UTF-8 encoded string,
880880 // use [func@GLib.utf8_strncpy] instead.
881-func Strndup(StrVar string, NVar uint) string {
881+func Strndup(StrVar *string, NVar uint) string {
882882
883- cret := xStrndup(StrVar, NVar)
883+ cret := xStrndup(core.NullableStringToPtr(StrVar), NVar)
884884 return cret
885885 }
886886
M v4/glib/gstring.go +6 -6
@@ -40,12 +40,12 @@ func (x *String) GoPointer() uintptr {
4040 return uintptr(unsafe.Pointer(x))
4141 }
4242
43-var xNewString func(string) *String
43+var xNewString func(uintptr) *String
4444
4545 // Creates a new #GString, initialized with the given string.
46-func NewString(InitVar string) *String {
46+func NewString(InitVar *string) *String {
4747
48- cret := xNewString(InitVar)
48+ cret := xNewString(core.NullableStringToPtr(InitVar))
4949 return cret
5050 }
5151
@@ -64,16 +64,16 @@ func NewStringLen(InitVar string, LenVar int) *String {
6464 return cret
6565 }
6666
67-var xNewStringTake func(string) *String
67+var xNewStringTake func(uintptr) *String
6868
6969 // Creates a new #GString, initialized with the given string.
7070 //
7171 // After this call, @init belongs to the #GString and may no longer be
7272 // modified by the caller. The memory of @init has to be dynamically
7373 // allocated and will eventually be freed with g_free().
74-func NewStringTake(InitVar string) *String {
74+func NewStringTake(InitVar *string) *String {
7575
76- cret := xNewStringTake(InitVar)
76+ cret := xNewStringTake(core.NullableStringToPtr(InitVar))
7777 return cret
7878 }
7979
M v4/glib/gtestutils.go +208 -28
@@ -379,25 +379,25 @@ func AssertionMessageError(DomainVar string, FileVar string, LineVar int, FuncVa
379379
380380 }
381381
382-var xAssertionMessageExpr func(string, string, int, string, string)
382+var xAssertionMessageExpr func(uintptr, string, int, string, uintptr)
383383
384384 // Internal function used to print messages from the public
385385 // g_assert() and g_assert_not_reached() macros.
386-func AssertionMessageExpr(DomainVar string, FileVar string, LineVar int, FuncVar string, ExprVar string) {
386+func AssertionMessageExpr(DomainVar *string, FileVar string, LineVar int, FuncVar string, ExprVar *string) {
387387
388- xAssertionMessageExpr(DomainVar, FileVar, LineVar, FuncVar, ExprVar)
388+ xAssertionMessageExpr(core.NullableStringToPtr(DomainVar), FileVar, LineVar, FuncVar, core.NullableStringToPtr(ExprVar))
389389
390390 }
391391
392-var xStrcmp0 func(string, string) int
392+var xStrcmp0 func(uintptr, uintptr) int
393393
394394 // Compares @str1 and @str2 like `strcmp()`.
395395 //
396396 // Handles `NULL` gracefully by sorting it before non-`NULL` strings.
397397 // Comparing two `NULL` pointers returns 0.
398-func Strcmp0(Str1Var string, Str2Var string) int {
398+func Strcmp0(Str1Var *string, Str2Var *string) int {
399399
400- cret := xStrcmp0(Str1Var, Str2Var)
400+ cret := xStrcmp0(core.NullableStringToPtr(Str1Var), core.NullableStringToPtr(Str2Var))
401401 return cret
402402 }
403403
@@ -420,7 +420,22 @@ 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- xTestAddDataFunc(TestpathVar, TestDataVar, NewCallback(TestFuncVar))
423+ var TestFuncVarRef uintptr
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)
435+ }
436+ }
437+
438+ xTestAddDataFunc(TestpathVar, TestDataVar, TestFuncVarRef)
424439
425440 }
426441
@@ -432,7 +447,37 @@ var xTestAddDataFuncFull func(string, uintptr, uintptr, uintptr)
432447 // is freeing @test_data after the test run is complete.
433448 func TestAddDataFuncFull(TestpathVar string, TestDataVar uintptr, TestFuncVar *TestDataFunc, DataFreeFuncVar *DestroyNotify) {
434449
435- xTestAddDataFuncFull(TestpathVar, TestDataVar, NewCallback(TestFuncVar), NewCallback(DataFreeFuncVar))
450+ var TestFuncVarRef uintptr
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)
462+ }
463+ }
464+
465+ var DataFreeFuncVarRef uintptr
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)
477+ }
478+ }
479+
480+ xTestAddDataFuncFull(TestpathVar, TestDataVar, TestFuncVarRef, DataFreeFuncVarRef)
436481
437482 }
438483
@@ -454,7 +499,22 @@ var xTestAddFunc func(string, uintptr)
454499 // it is recommended to do so even if it isn’t.
455500 func TestAddFunc(TestpathVar string, TestFuncVar *TestFunc) {
456501
457- xTestAddFunc(TestpathVar, NewCallback(TestFuncVar))
502+ var TestFuncVarRef uintptr
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)
514+ }
515+ }
516+
517+ xTestAddFunc(TestpathVar, TestFuncVarRef)
458518
459519 }
460520
@@ -462,7 +522,52 @@ var xTestAddVtable func(string, uint, uintptr, uintptr, uintptr, uintptr)
462522
463523 func TestAddVtable(TestpathVar string, DataSizeVar uint, TestDataVar uintptr, DataSetupVar *TestFixtureFunc, DataTestVar *TestFixtureFunc, DataTeardownVar *TestFixtureFunc) {
464524
465- xTestAddVtable(TestpathVar, DataSizeVar, TestDataVar, NewCallback(DataSetupVar), NewCallback(DataTestVar), NewCallback(DataTeardownVar))
525+ var DataSetupVarRef uintptr
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)
537+ }
538+ }
539+
540+ var DataTestVarRef uintptr
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)
552+ }
553+ }
554+
555+ var DataTeardownVarRef uintptr
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)
567+ }
568+ }
569+
570+ xTestAddVtable(TestpathVar, DataSizeVar, TestDataVar, DataSetupVarRef, DataTestVarRef, DataTeardownVarRef)
466571
467572 }
468573
@@ -566,7 +671,52 @@ var xTestCreateCase func(string, uint, uintptr, uintptr, uintptr, uintptr) *Test
566671 // varying @test_name and @data_test arguments.
567672 func TestCreateCase(TestNameVar string, DataSizeVar uint, TestDataVar uintptr, DataSetupVar *TestFixtureFunc, DataTestVar *TestFixtureFunc, DataTeardownVar *TestFixtureFunc) *TestCase {
568673
569- cret := xTestCreateCase(TestNameVar, DataSizeVar, TestDataVar, NewCallback(DataSetupVar), NewCallback(DataTestVar), NewCallback(DataTeardownVar))
674+ var DataSetupVarRef uintptr
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)
686+ }
687+ }
688+
689+ var DataTestVarRef uintptr
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)
701+ }
702+ }
703+
704+ var DataTeardownVarRef uintptr
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)
716+ }
717+ }
718+
719+ cret := xTestCreateCase(TestNameVar, DataSizeVar, TestDataVar, DataSetupVarRef, DataTestVarRef, DataTeardownVarRef)
570720 return cret
571721 }
572722
@@ -592,7 +742,7 @@ func TestDisableCrashReporting() {
592742
593743 }
594744
595-var xTestExpectMessage func(string, LogLevelFlags, string)
745+var xTestExpectMessage func(uintptr, LogLevelFlags, string)
596746
597747 // Indicates that a message with the given @log_domain and @log_level,
598748 // with text matching @pattern, is expected to be logged.
@@ -631,9 +781,9 @@ var xTestExpectMessage func(string, LogLevelFlags, string)
631781 //
632782 // If messages at [flags@GLib.LogLevelFlags.LEVEL_DEBUG] are emitted, but not explicitly
633783 // expected via [func@GLib.test_expect_message] then they will be ignored.
634-func TestExpectMessage(LogDomainVar string, LogLevelVar LogLevelFlags, PatternVar string) {
784+func TestExpectMessage(LogDomainVar *string, LogLevelVar LogLevelFlags, PatternVar string) {
635785
636- xTestExpectMessage(LogDomainVar, LogLevelVar, PatternVar)
786+ xTestExpectMessage(core.NullableStringToPtr(LogDomainVar), LogLevelVar, PatternVar)
637787
638788 }
639789
@@ -755,7 +905,7 @@ func TestGetRoot() *TestSuite {
755905 return cret
756906 }
757907
758-var xTestIncomplete func(string)
908+var xTestIncomplete func(uintptr)
759909
760910 // Indicates that a test failed because of some incomplete
761911 // functionality.
@@ -768,9 +918,9 @@ var xTestIncomplete func(string)
768918 // the test.
769919 //
770920 // If not called from inside a test, this function does nothing.
771-func TestIncomplete(MsgVar string) {
921+func TestIncomplete(MsgVar *string) {
772922
773- xTestIncomplete(MsgVar)
923+ xTestIncomplete(core.NullableStringToPtr(MsgVar))
774924
775925 }
776926
@@ -879,7 +1029,22 @@ var xTestLogSetFatalHandler func(uintptr, uintptr)
8791029 // [Using Structured Logging](logging.html#using-structured-logging).
8801030 func TestLogSetFatalHandler(LogFuncVar *TestLogFatalFunc, UserDataVar uintptr) {
8811031
882- xTestLogSetFatalHandler(NewCallback(LogFuncVar), UserDataVar)
1032+ var LogFuncVarRef uintptr
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)
1044+ }
1045+ }
1046+
1047+ xTestLogSetFatalHandler(LogFuncVarRef, UserDataVar)
8831048
8841049 }
8851050
@@ -939,7 +1104,22 @@ var xTestQueueDestroy func(uintptr, uintptr)
9391104 // before `A()` during teardown.
9401105 func TestQueueDestroy(DestroyFuncVar *DestroyNotify, DestroyDataVar uintptr) {
9411106
942- xTestQueueDestroy(NewCallback(DestroyFuncVar), DestroyDataVar)
1107+ var DestroyFuncVarRef uintptr
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)
1119+ }
1120+ }
1121+
1122+ xTestQueueDestroy(DestroyFuncVarRef, DestroyDataVar)
9431123
9441124 }
9451125
@@ -1088,7 +1268,7 @@ func TestSetNonfatalAssertions() {
10881268
10891269 }
10901270
1091-var xTestSkip func(string)
1271+var xTestSkip func(uintptr)
10921272
10931273 // Indicates that a test was skipped.
10941274 //
@@ -1098,9 +1278,9 @@ var xTestSkip func(string)
10981278 // the test.
10991279 //
11001280 // If not called from inside a test, this function does nothing.
1101-func TestSkip(MsgVar string) {
1281+func TestSkip(MsgVar *string) {
11021282
1103- xTestSkip(MsgVar)
1283+ xTestSkip(core.NullableStringToPtr(MsgVar))
11041284
11051285 }
11061286
@@ -1259,20 +1439,20 @@ func TestTrapReachedTimeout() bool {
12591439 return cret
12601440 }
12611441
1262-var xTestTrapSubprocess func(string, uint64, TestSubprocessFlags)
1442+var xTestTrapSubprocess func(uintptr, uint64, TestSubprocessFlags)
12631443
12641444 // Respawns the test program to run only @test_path in a subprocess.
12651445 //
12661446 // This is equivalent to calling [func@GLib.test_trap_subprocess_with_envp]
12671447 // with `envp` set to `NULL`. See the documentation for that function
12681448 // for full details.
1269-func TestTrapSubprocess(TestPathVar string, UsecTimeoutVar uint64, TestFlagsVar TestSubprocessFlags) {
1449+func TestTrapSubprocess(TestPathVar *string, UsecTimeoutVar uint64, TestFlagsVar TestSubprocessFlags) {
12701450
1271- xTestTrapSubprocess(TestPathVar, UsecTimeoutVar, TestFlagsVar)
1451+ xTestTrapSubprocess(core.NullableStringToPtr(TestPathVar), UsecTimeoutVar, TestFlagsVar)
12721452
12731453 }
12741454
1275-var xTestTrapSubprocessWithEnvp func(string, []string, uint64, TestSubprocessFlags)
1455+var xTestTrapSubprocessWithEnvp func(uintptr, []string, uint64, TestSubprocessFlags)
12761456
12771457 // Respawns the test program to run only @test_path in a subprocess with
12781458 // a given environment.
@@ -1365,9 +1545,9 @@ var xTestTrapSubprocessWithEnvp func(string, []string, uint64, TestSubprocessFla
13651545 // }
13661546 //
13671547 // ```
1368-func TestTrapSubprocessWithEnvp(TestPathVar string, EnvpVar []string, UsecTimeoutVar uint64, TestFlagsVar TestSubprocessFlags) {
1548+func TestTrapSubprocessWithEnvp(TestPathVar *string, EnvpVar []string, UsecTimeoutVar uint64, TestFlagsVar TestSubprocessFlags) {
13691549
1370- xTestTrapSubprocessWithEnvp(TestPathVar, EnvpVar, UsecTimeoutVar, TestFlagsVar)
1550+ xTestTrapSubprocessWithEnvp(core.NullableStringToPtr(TestPathVar), EnvpVar, UsecTimeoutVar, TestFlagsVar)
13711551
13721552 }
13731553
M v4/glib/gthread.go +132 -12
@@ -281,7 +281,22 @@ var xOnceImpl func(uintptr, uintptr, uintptr) uintptr
281281
282282 func (x *Once) Impl(FuncVar *ThreadFunc, ArgVar uintptr) uintptr {
283283
284- cret := xOnceImpl(x.GoPointer(), NewCallback(FuncVar), ArgVar)
284+ var FuncVarRef uintptr
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)
296+ }
297+ }
298+
299+ cret := xOnceImpl(x.GoPointer(), FuncVarRef, ArgVar)
285300 return cret
286301 }
287302
@@ -859,7 +874,22 @@ var xStaticPrivateSet func(uintptr, uintptr, uintptr)
859874 // @notify is used quite differently from @destructor in g_private_new().
860875 func (x *StaticPrivate) Set(DataVar uintptr, NotifyVar *DestroyNotify) {
861876
862- xStaticPrivateSet(x.GoPointer(), DataVar, NewCallback(NotifyVar))
877+ var NotifyVarRef uintptr
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)
889+ }
890+ }
891+
892+ xStaticPrivateSet(x.GoPointer(), DataVar, NotifyVarRef)
863893
864894 }
865895
@@ -1219,7 +1249,7 @@ func (x *Thread) GoPointer() uintptr {
12191249 return uintptr(unsafe.Pointer(x))
12201250 }
12211251
1222-var xNewThread func(string, uintptr, uintptr) *Thread
1252+var xNewThread func(uintptr, uintptr, uintptr) *Thread
12231253
12241254 // This function creates a new thread. The new thread starts by invoking
12251255 // @func with the argument data. The thread will run until @func returns
@@ -1248,23 +1278,53 @@ var xNewThread func(string, uintptr, uintptr) *Thread
12481278 // inheriting the thread priority but were spawned with the default priority.
12491279 // Starting with GLib 2.64 the behaviour is now consistent between Windows and
12501280 // POSIX and all threads inherit their parent thread's priority.
1251-func NewThread(NameVar string, FuncVar *ThreadFunc, DataVar uintptr) *Thread {
1281+func NewThread(NameVar *string, FuncVar *ThreadFunc, DataVar uintptr) *Thread {
1282+
1283+ var FuncVarRef uintptr
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)
1295+ }
1296+ }
12521297
1253- cret := xNewThread(NameVar, NewCallback(FuncVar), DataVar)
1298+ cret := xNewThread(core.NullableStringToPtr(NameVar), FuncVarRef, DataVar)
12541299 return cret
12551300 }
12561301
1257-var xThreadTryNew func(string, uintptr, uintptr, **Error) *Thread
1302+var xThreadTryNew func(uintptr, uintptr, uintptr, **Error) *Thread
12581303
12591304 // This function is the same as g_thread_new() except that
12601305 // it allows for the possibility of failure.
12611306 //
12621307 // If a thread can not be created (due to resource limits),
12631308 // @error is set and %NULL is returned.
1264-func ThreadTryNew(NameVar string, FuncVar *ThreadFunc, DataVar uintptr) (*Thread, error) {
1309+func ThreadTryNew(NameVar *string, FuncVar *ThreadFunc, DataVar uintptr) (*Thread, error) {
12651310 var cerr *Error
12661311
1267- cret := xThreadTryNew(NameVar, NewCallback(FuncVar), DataVar, &cerr)
1312+ var FuncVarRef uintptr
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)
1324+ }
1325+ }
1326+
1327+ cret := xThreadTryNew(core.NullableStringToPtr(NameVar), FuncVarRef, DataVar, &cerr)
12681328 if cerr == nil {
12691329 return cret, nil
12701330 }
@@ -2160,7 +2220,22 @@ var xPrivateNew func(uintptr) *Private
21602220 // Creates a new #GPrivate.
21612221 func PrivateNew(NotifyVar *DestroyNotify) *Private {
21622222
2163- cret := xPrivateNew(NewCallback(NotifyVar))
2223+ var NotifyVarRef uintptr
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)
2235+ }
2236+ }
2237+
2238+ cret := xPrivateNew(NotifyVarRef)
21642239 return cret
21652240 }
21662241
@@ -2181,7 +2256,22 @@ var xThreadCreate func(uintptr, uintptr, bool, **Error) *Thread
21812256 func ThreadCreate(FuncVar *ThreadFunc, DataVar uintptr, JoinableVar bool) (*Thread, error) {
21822257 var cerr *Error
21832258
2184- cret := xThreadCreate(NewCallback(FuncVar), DataVar, JoinableVar, &cerr)
2259+ var FuncVarRef uintptr
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)
2271+ }
2272+ }
2273+
2274+ cret := xThreadCreate(FuncVarRef, DataVar, JoinableVar, &cerr)
21852275 if cerr == nil {
21862276 return cret, nil
21872277 }
@@ -2195,7 +2285,22 @@ var xThreadCreateFull func(uintptr, uintptr, uint32, bool, bool, ThreadPriority,
21952285 func ThreadCreateFull(FuncVar *ThreadFunc, DataVar uintptr, StackSizeVar uint32, JoinableVar bool, BoundVar bool, PriorityVar ThreadPriority) (*Thread, error) {
21962286 var cerr *Error
21972287
2198- cret := xThreadCreateFull(NewCallback(FuncVar), DataVar, StackSizeVar, JoinableVar, BoundVar, PriorityVar, &cerr)
2288+ var FuncVarRef uintptr
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)
2300+ }
2301+ }
2302+
2303+ cret := xThreadCreateFull(FuncVarRef, DataVar, StackSizeVar, JoinableVar, BoundVar, PriorityVar, &cerr)
21992304 if cerr == nil {
22002305 return cret, nil
22012306 }
@@ -2239,7 +2344,22 @@ var xThreadForeach func(uintptr, uintptr)
22392344 // which is quadratic in the number of existing threads.
22402345 func ThreadForeach(ThreadFuncVar *Func, UserDataVar uintptr) {
22412346
2242- xThreadForeach(NewCallback(ThreadFuncVar), UserDataVar)
2347+ var ThreadFuncVarRef uintptr
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)
2359+ }
2360+ }
2361+
2362+ xThreadForeach(ThreadFuncVarRef, UserDataVar)
22432363
22442364 }
22452365
M v4/glib/gthreadpool.go +16 -1
@@ -172,7 +172,22 @@ var xThreadPoolSetSortFunction func(uintptr, uintptr, uintptr)
172172 // created.
173173 func (x *ThreadPool) SetSortFunction(FuncVar *CompareDataFunc, UserDataVar uintptr) {
174174
175- xThreadPoolSetSortFunction(x.GoPointer(), NewCallback(FuncVar), UserDataVar)
175+ var FuncVarRef uintptr
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)
187+ }
188+ }
189+
190+ xThreadPoolSetSortFunction(x.GoPointer(), FuncVarRef, UserDataVar)
176191
177192 }
178193
M v4/glib/gtimezone.go +6 -6
@@ -50,20 +50,20 @@ func (x *TimeZone) GoPointer() uintptr {
5050 return uintptr(unsafe.Pointer(x))
5151 }
5252
53-var xNewTimeZone func(string) *TimeZone
53+var xNewTimeZone func(uintptr) *TimeZone
5454
5555 // A version of g_time_zone_new_identifier() which returns the UTC time zone
5656 // if @identifier could not be parsed or loaded.
5757 //
5858 // If you need to check whether @identifier was loaded successfully, use
5959 // g_time_zone_new_identifier().
60-func NewTimeZone(IdentifierVar string) *TimeZone {
60+func NewTimeZone(IdentifierVar *string) *TimeZone {
6161
62- cret := xNewTimeZone(IdentifierVar)
62+ cret := xNewTimeZone(core.NullableStringToPtr(IdentifierVar))
6363 return cret
6464 }
6565
66-var xNewTimeZoneIdentifier func(string) *TimeZone
66+var xNewTimeZoneIdentifier func(uintptr) *TimeZone
6767
6868 // Creates a #GTimeZone corresponding to @identifier. If @identifier cannot be
6969 // parsed or loaded, %NULL is returned.
@@ -130,9 +130,9 @@ var xNewTimeZoneIdentifier func(string) *TimeZone
130130 //
131131 // You should release the return value by calling g_time_zone_unref()
132132 // when you are done with it.
133-func NewTimeZoneIdentifier(IdentifierVar string) *TimeZone {
133+func NewTimeZoneIdentifier(IdentifierVar *string) *TimeZone {
134134
135- cret := xNewTimeZoneIdentifier(IdentifierVar)
135+ cret := xNewTimeZoneIdentifier(core.NullableStringToPtr(IdentifierVar))
136136 return cret
137137 }
138138
M v4/glib/gtree.go +158 -8
@@ -44,7 +44,22 @@ var xNewTree func(uintptr) *Tree
4444 // Creates a new #GTree.
4545 func NewTree(KeyCompareFuncVar *CompareFunc) *Tree {
4646
47- cret := xNewTree(NewCallback(KeyCompareFuncVar))
47+ var KeyCompareFuncVarRef uintptr
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)
59+ }
60+ }
61+
62+ cret := xNewTree(KeyCompareFuncVarRef)
4863 return cret
4964 }
5065
@@ -55,7 +70,52 @@ var xNewTreeFull func(uintptr, uintptr, uintptr, uintptr) *Tree
5570 // removing the entry from the #GTree.
5671 func NewTreeFull(KeyCompareFuncVar *CompareDataFunc, KeyCompareDataVar uintptr, KeyDestroyFuncVar *DestroyNotify, ValueDestroyFuncVar *DestroyNotify) *Tree {
5772
58- cret := xNewTreeFull(NewCallback(KeyCompareFuncVar), KeyCompareDataVar, NewCallback(KeyDestroyFuncVar), NewCallback(ValueDestroyFuncVar))
73+ var KeyCompareFuncVarRef uintptr
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)
85+ }
86+ }
87+
88+ var KeyDestroyFuncVarRef uintptr
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)
100+ }
101+ }
102+
103+ var ValueDestroyFuncVarRef uintptr
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)
115+ }
116+ }
117+
118+ cret := xNewTreeFull(KeyCompareFuncVarRef, KeyCompareDataVar, KeyDestroyFuncVarRef, ValueDestroyFuncVarRef)
59119 return cret
60120 }
61121
@@ -65,7 +125,22 @@ var xNewTreeWithData func(uintptr, uintptr) *Tree
65125 // See g_tree_new() for more details.
66126 func NewTreeWithData(KeyCompareFuncVar *CompareDataFunc, KeyCompareDataVar uintptr) *Tree {
67127
68- cret := xNewTreeWithData(NewCallback(KeyCompareFuncVar), KeyCompareDataVar)
128+ var KeyCompareFuncVarRef uintptr
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)
140+ }
141+ }
142+
143+ cret := xNewTreeWithData(KeyCompareFuncVarRef, KeyCompareDataVar)
69144 return cret
70145 }
71146
@@ -95,7 +170,22 @@ var xTreeForeach func(uintptr, uintptr, uintptr)
95170 // the tree, then walk the list and remove each item.
96171 func (x *Tree) Foreach(FuncVar *TraverseFunc, UserDataVar uintptr) {
97172
98- xTreeForeach(x.GoPointer(), NewCallback(FuncVar), UserDataVar)
173+ var FuncVarRef uintptr
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)
185+ }
186+ }
187+
188+ xTreeForeach(x.GoPointer(), FuncVarRef, UserDataVar)
99189
100190 }
101191
@@ -111,7 +201,22 @@ var xTreeForeachNode func(uintptr, uintptr, uintptr)
111201 // the tree, then walk the list and remove each item.
112202 func (x *Tree) ForeachNode(FuncVar *TraverseNodeFunc, UserDataVar uintptr) {
113203
114- xTreeForeachNode(x.GoPointer(), NewCallback(FuncVar), UserDataVar)
204+ var FuncVarRef uintptr
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)
216+ }
217+ }
218+
219+ xTreeForeachNode(x.GoPointer(), FuncVarRef, UserDataVar)
115220
116221 }
117222
@@ -317,7 +422,22 @@ var xTreeSearch func(uintptr, uintptr, uintptr) uintptr
317422 // pairs that have a larger key.
318423 func (x *Tree) Search(SearchFuncVar *CompareFunc, UserDataVar uintptr) uintptr {
319424
320- cret := xTreeSearch(x.GoPointer(), NewCallback(SearchFuncVar), UserDataVar)
425+ var SearchFuncVarRef uintptr
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)
437+ }
438+ }
439+
440+ cret := xTreeSearch(x.GoPointer(), SearchFuncVarRef, UserDataVar)
321441 return cret
322442 }
323443
@@ -334,7 +454,22 @@ var xTreeSearchNode func(uintptr, uintptr, uintptr) *TreeNode
334454 // pairs that have a larger key.
335455 func (x *Tree) SearchNode(SearchFuncVar *CompareFunc, UserDataVar uintptr) *TreeNode {
336456
337- cret := xTreeSearchNode(x.GoPointer(), NewCallback(SearchFuncVar), UserDataVar)
457+ var SearchFuncVarRef uintptr
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)
469+ }
470+ }
471+
472+ cret := xTreeSearchNode(x.GoPointer(), SearchFuncVarRef, UserDataVar)
338473 return cret
339474 }
340475
@@ -355,7 +490,22 @@ var xTreeTraverse func(uintptr, uintptr, TraverseType, uintptr)
355490 // Calls the given function for each node in the #GTree.
356491 func (x *Tree) Traverse(TraverseFuncVar *TraverseFunc, TraverseTypeVar TraverseType, UserDataVar uintptr) {
357492
358- xTreeTraverse(x.GoPointer(), NewCallback(TraverseFuncVar), TraverseTypeVar, UserDataVar)
493+ var TraverseFuncVarRef uintptr
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)
505+ }
506+ }
507+
508+ xTreeTraverse(x.GoPointer(), TraverseFuncVarRef, TraverseTypeVar, UserDataVar)
359509
360510 }
361511
M v4/glib/gunicode.go +3 -3
@@ -1249,7 +1249,7 @@ func Utf8CollateKeyForFilename(StrVar string, LenVar int) string {
12491249 return cret
12501250 }
12511251
1252-var xUtf8FindNextChar func(string, string) string
1252+var xUtf8FindNextChar func(string, uintptr) string
12531253
12541254 // Finds the start of the next UTF-8 character in the string after @p.
12551255 //
@@ -1261,9 +1261,9 @@ var xUtf8FindNextChar func(string, string) string
12611261 // string is reached, a pointer to the terminating nul byte is returned. If
12621262 // @end is non-`NULL`, the return value will be `NULL` if the end of the string
12631263 // is reached.
1264-func Utf8FindNextChar(PVar string, EndVar string) string {
1264+func Utf8FindNextChar(PVar string, EndVar *string) string {
12651265
1266- cret := xUtf8FindNextChar(PVar, EndVar)
1266+ cret := xUtf8FindNextChar(PVar, core.NullableStringToPtr(EndVar))
12671267 return cret
12681268 }
12691269
M v4/glib/guri.go +30 -30
@@ -598,19 +598,19 @@ const (
598598 GUriErrorBadFragmentValue UriError = 9
599599 )
600600
601-var xUriBuild func(UriFlags, string, string, string, int, string, string, string) *Uri
601+var xUriBuild func(UriFlags, string, uintptr, uintptr, int, string, uintptr, uintptr) *Uri
602602
603603 // Creates a new #GUri from the given components according to @flags.
604604 //
605605 // See also g_uri_build_with_user(), which allows specifying the
606606 // components of the "userinfo" separately.
607-func UriBuild(FlagsVar UriFlags, SchemeVar string, UserinfoVar string, HostVar string, PortVar int, PathVar string, QueryVar string, FragmentVar string) *Uri {
607+func UriBuild(FlagsVar UriFlags, SchemeVar string, UserinfoVar *string, HostVar *string, PortVar int, PathVar string, QueryVar *string, FragmentVar *string) *Uri {
608608
609- cret := xUriBuild(FlagsVar, SchemeVar, UserinfoVar, HostVar, PortVar, PathVar, QueryVar, FragmentVar)
609+ cret := xUriBuild(FlagsVar, SchemeVar, core.NullableStringToPtr(UserinfoVar), core.NullableStringToPtr(HostVar), PortVar, PathVar, core.NullableStringToPtr(QueryVar), core.NullableStringToPtr(FragmentVar))
610610 return cret
611611 }
612612
613-var xUriBuildWithUser func(UriFlags, string, string, string, string, string, int, string, string, string) *Uri
613+var xUriBuildWithUser func(UriFlags, string, uintptr, uintptr, uintptr, uintptr, int, string, uintptr, uintptr) *Uri
614614
615615 // Creates a new #GUri from the given components according to @flags
616616 // (%G_URI_FLAGS_HAS_PASSWORD is added unconditionally). The @flags must be
@@ -620,13 +620,13 @@ var xUriBuildWithUser func(UriFlags, string, string, string, string, string, int
620620 // In contrast to g_uri_build(), this allows specifying the components
621621 // of the ‘userinfo’ field separately. Note that @user must be non-%NULL
622622 // if either @password or @auth_params is non-%NULL.
623-func UriBuildWithUser(FlagsVar UriFlags, SchemeVar string, UserVar string, PasswordVar string, AuthParamsVar string, HostVar string, PortVar int, PathVar string, QueryVar string, FragmentVar string) *Uri {
623+func UriBuildWithUser(FlagsVar UriFlags, SchemeVar string, UserVar *string, PasswordVar *string, AuthParamsVar *string, HostVar *string, PortVar int, PathVar string, QueryVar *string, FragmentVar *string) *Uri {
624624
625- cret := xUriBuildWithUser(FlagsVar, SchemeVar, UserVar, PasswordVar, AuthParamsVar, HostVar, PortVar, PathVar, QueryVar, FragmentVar)
625+ cret := xUriBuildWithUser(FlagsVar, SchemeVar, core.NullableStringToPtr(UserVar), core.NullableStringToPtr(PasswordVar), core.NullableStringToPtr(AuthParamsVar), core.NullableStringToPtr(HostVar), PortVar, PathVar, core.NullableStringToPtr(QueryVar), core.NullableStringToPtr(FragmentVar))
626626 return cret
627627 }
628628
629-var xUriEscapeBytes func([]byte, uint, string) string
629+var xUriEscapeBytes func([]byte, uint, uintptr) string
630630
631631 // Escapes arbitrary data for use in a URI.
632632 //
@@ -639,13 +639,13 @@ var xUriEscapeBytes func([]byte, uint, string) string
639639 //
640640 // Though technically incorrect, this will also allow escaping nul
641641 // bytes as `%“00`.
642-func UriEscapeBytes(UnescapedVar []byte, LengthVar uint, ReservedCharsAllowedVar string) string {
642+func UriEscapeBytes(UnescapedVar []byte, LengthVar uint, ReservedCharsAllowedVar *string) string {
643643
644- cret := xUriEscapeBytes(UnescapedVar, LengthVar, ReservedCharsAllowedVar)
644+ cret := xUriEscapeBytes(UnescapedVar, LengthVar, core.NullableStringToPtr(ReservedCharsAllowedVar))
645645 return cret
646646 }
647647
648-var xUriEscapeString func(string, string, bool) string
648+var xUriEscapeString func(string, uintptr, bool) string
649649
650650 // Escapes a string for use in a URI.
651651 //
@@ -655,9 +655,9 @@ var xUriEscapeString func(string, string, bool) string
655655 // they are not escaped. This is useful for the "reserved" characters
656656 // in the URI specification, since those are allowed unescaped in some
657657 // portions of a URI.
658-func UriEscapeString(UnescapedVar string, ReservedCharsAllowedVar string, AllowUtf8Var bool) string {
658+func UriEscapeString(UnescapedVar string, ReservedCharsAllowedVar *string, AllowUtf8Var bool) string {
659659
660- cret := xUriEscapeString(UnescapedVar, ReservedCharsAllowedVar, AllowUtf8Var)
660+ cret := xUriEscapeString(UnescapedVar, core.NullableStringToPtr(ReservedCharsAllowedVar), AllowUtf8Var)
661661 return cret
662662 }
663663
@@ -682,7 +682,7 @@ func UriIsValid(UriStringVar string, FlagsVar UriFlags) (bool, error) {
682682
683683 }
684684
685-var xUriJoin func(UriFlags, string, string, string, int, string, string, string) string
685+var xUriJoin func(UriFlags, uintptr, uintptr, uintptr, int, string, uintptr, uintptr) string
686686
687687 // Joins the given components together according to @flags to create
688688 // an absolute URI string. @path may not be %NULL (though it may be the empty
@@ -698,13 +698,13 @@ var xUriJoin func(UriFlags, string, string, string, int, string, string, string)
698698 //
699699 // %G_URI_FLAGS_HAS_PASSWORD and %G_URI_FLAGS_HAS_AUTH_PARAMS are ignored if set
700700 // in @flags.
701-func UriJoin(FlagsVar UriFlags, SchemeVar string, UserinfoVar string, HostVar string, PortVar int, PathVar string, QueryVar string, FragmentVar string) string {
701+func UriJoin(FlagsVar UriFlags, SchemeVar *string, UserinfoVar *string, HostVar *string, PortVar int, PathVar string, QueryVar *string, FragmentVar *string) string {
702702
703- cret := xUriJoin(FlagsVar, SchemeVar, UserinfoVar, HostVar, PortVar, PathVar, QueryVar, FragmentVar)
703+ cret := xUriJoin(FlagsVar, core.NullableStringToPtr(SchemeVar), core.NullableStringToPtr(UserinfoVar), core.NullableStringToPtr(HostVar), PortVar, PathVar, core.NullableStringToPtr(QueryVar), core.NullableStringToPtr(FragmentVar))
704704 return cret
705705 }
706706
707-var xUriJoinWithUser func(UriFlags, string, string, string, string, string, int, string, string, string) string
707+var xUriJoinWithUser func(UriFlags, uintptr, uintptr, uintptr, uintptr, uintptr, int, string, uintptr, uintptr) string
708708
709709 // Joins the given components together according to @flags to create
710710 // an absolute URI string. @path may not be %NULL (though it may be the empty
@@ -715,9 +715,9 @@ var xUriJoinWithUser func(UriFlags, string, string, string, string, string, int,
715715 //
716716 // %G_URI_FLAGS_HAS_PASSWORD and %G_URI_FLAGS_HAS_AUTH_PARAMS are ignored if set
717717 // in @flags.
718-func UriJoinWithUser(FlagsVar UriFlags, SchemeVar string, UserVar string, PasswordVar string, AuthParamsVar string, HostVar string, PortVar int, PathVar string, QueryVar string, FragmentVar string) string {
718+func UriJoinWithUser(FlagsVar UriFlags, SchemeVar *string, UserVar *string, PasswordVar *string, AuthParamsVar *string, HostVar *string, PortVar int, PathVar string, QueryVar *string, FragmentVar *string) string {
719719
720- cret := xUriJoinWithUser(FlagsVar, SchemeVar, UserVar, PasswordVar, AuthParamsVar, HostVar, PortVar, PathVar, QueryVar, FragmentVar)
720+ cret := xUriJoinWithUser(FlagsVar, core.NullableStringToPtr(SchemeVar), core.NullableStringToPtr(UserVar), core.NullableStringToPtr(PasswordVar), core.NullableStringToPtr(AuthParamsVar), core.NullableStringToPtr(HostVar), PortVar, PathVar, core.NullableStringToPtr(QueryVar), core.NullableStringToPtr(FragmentVar))
721721 return cret
722722 }
723723
@@ -807,7 +807,7 @@ func UriPeekScheme(UriVar string) string {
807807 return cret
808808 }
809809
810-var xUriResolveRelative func(string, string, UriFlags, **Error) string
810+var xUriResolveRelative func(uintptr, string, UriFlags, **Error) string
811811
812812 // Parses @uri_ref according to @flags and, if it is a
813813 // [relative URI](#relative-and-absolute-uris), resolves it relative to
@@ -816,10 +816,10 @@ var xUriResolveRelative func(string, string, UriFlags, **Error) string
816816 //
817817 // (If @base_uri_string is %NULL, this just returns @uri_ref, or
818818 // %NULL if @uri_ref is invalid or not absolute.)
819-func UriResolveRelative(BaseUriStringVar string, UriRefVar string, FlagsVar UriFlags) (string, error) {
819+func UriResolveRelative(BaseUriStringVar *string, UriRefVar string, FlagsVar UriFlags) (string, error) {
820820 var cerr *Error
821821
822- cret := xUriResolveRelative(BaseUriStringVar, UriRefVar, FlagsVar, &cerr)
822+ cret := xUriResolveRelative(core.NullableStringToPtr(BaseUriStringVar), UriRefVar, FlagsVar, &cerr)
823823 if cerr == nil {
824824 return cret, nil
825825 }
@@ -899,7 +899,7 @@ func UriSplitWithUser(UriRefVar string, FlagsVar UriFlags, SchemeVar *string, Us
899899
900900 }
901901
902-var xUriUnescapeBytes func(string, int, string, **Error) *Bytes
902+var xUriUnescapeBytes func(string, int, uintptr, **Error) *Bytes
903903
904904 // Unescapes a segment of an escaped string as binary data.
905905 //
@@ -911,10 +911,10 @@ var xUriUnescapeBytes func(string, int, string, **Error) *Bytes
911911 // returned. This is useful if you want to avoid for instance having a slash
912912 // being expanded in an escaped path element, which might confuse pathname
913913 // handling.
914-func UriUnescapeBytes(EscapedStringVar string, LengthVar int, IllegalCharactersVar string) (*Bytes, error) {
914+func UriUnescapeBytes(EscapedStringVar string, LengthVar int, IllegalCharactersVar *string) (*Bytes, error) {
915915 var cerr *Error
916916
917- cret := xUriUnescapeBytes(EscapedStringVar, LengthVar, IllegalCharactersVar, &cerr)
917+ cret := xUriUnescapeBytes(EscapedStringVar, LengthVar, core.NullableStringToPtr(IllegalCharactersVar), &cerr)
918918 if cerr == nil {
919919 return cret, nil
920920 }
@@ -922,7 +922,7 @@ func UriUnescapeBytes(EscapedStringVar string, LengthVar int, IllegalCharactersV
922922
923923 }
924924
925-var xUriUnescapeSegment func(string, string, string) string
925+var xUriUnescapeSegment func(uintptr, uintptr, uintptr) string
926926
927927 // Unescapes a segment of an escaped string.
928928 //
@@ -934,13 +934,13 @@ var xUriUnescapeSegment func(string, string, string) string
934934 //
935935 // Note: `NUL` byte is not accepted in the output, in contrast to
936936 // g_uri_unescape_bytes().
937-func UriUnescapeSegment(EscapedStringVar string, EscapedStringEndVar string, IllegalCharactersVar string) string {
937+func UriUnescapeSegment(EscapedStringVar *string, EscapedStringEndVar *string, IllegalCharactersVar *string) string {
938938
939- cret := xUriUnescapeSegment(EscapedStringVar, EscapedStringEndVar, IllegalCharactersVar)
939+ cret := xUriUnescapeSegment(core.NullableStringToPtr(EscapedStringVar), core.NullableStringToPtr(EscapedStringEndVar), core.NullableStringToPtr(IllegalCharactersVar))
940940 return cret
941941 }
942942
943-var xUriUnescapeString func(string, string) string
943+var xUriUnescapeString func(string, uintptr) string
944944
945945 // Unescapes a whole escaped string.
946946 //
@@ -949,9 +949,9 @@ var xUriUnescapeString func(string, string) string
949949 // that is an error and %NULL will be returned. This is useful if you
950950 // want to avoid for instance having a slash being expanded in an
951951 // escaped path element, which might confuse pathname handling.
952-func UriUnescapeString(EscapedStringVar string, IllegalCharactersVar string) string {
952+func UriUnescapeString(EscapedStringVar string, IllegalCharactersVar *string) string {
953953
954- cret := xUriUnescapeString(EscapedStringVar, IllegalCharactersVar)
954+ cret := xUriUnescapeString(EscapedStringVar, core.NullableStringToPtr(IllegalCharactersVar))
955955 return cret
956956 }
957957
M v4/glib/gutils.go +19 -4
@@ -121,7 +121,22 @@ var xAtexit func(uintptr)
121121 // program.
122122 func Atexit(FuncVar *VoidFunc) {
123123
124- xAtexit(NewCallback(FuncVar))
124+ var FuncVarRef uintptr
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)
136+ }
137+ }
138+
139+ xAtexit(FuncVarRef)
125140
126141 }
127142
@@ -596,7 +611,7 @@ func NullifyPointer(NullifyLocationVar uintptr) {
596611
597612 }
598613
599-var xParseDebugString func(string, []DebugKey, uint) uint
614+var xParseDebugString func(uintptr, []DebugKey, uint) uint
600615
601616 // Parses a string containing debugging options
602617 // into a %guint containing bit flags. This is used
@@ -610,9 +625,9 @@ var xParseDebugString func(string, []DebugKey, uint) uint
610625 //
611626 // If @string is equal to "help", all the available keys in @keys
612627 // are printed out to standard error.
613-func ParseDebugString(StringVar string, KeysVar []DebugKey, NkeysVar uint) uint {
628+func ParseDebugString(StringVar *string, KeysVar []DebugKey, NkeysVar uint) uint {
614629
615- cret := xParseDebugString(StringVar, KeysVar, NkeysVar)
630+ cret := xParseDebugString(core.NullableStringToPtr(StringVar), KeysVar, NkeysVar)
616631 return cret
617632 }
618633
M v4/glib/gvariant.go +25 -10
@@ -466,7 +466,22 @@ 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- cret := xNewVariantFromData(TypeVar, DataVar, SizeVar, TrustedVar, NewCallback(NotifyVar), UserDataVar)
469+ var NotifyVarRef uintptr
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)
481+ }
482+ }
483+
484+ cret := xNewVariantFromData(TypeVar, DataVar, SizeVar, TrustedVar, NotifyVarRef, UserDataVar)
470485 return cret
471486 }
472487
@@ -737,7 +752,7 @@ func NewVariantUint64(ValueVar uint64) *Variant {
737752 return cret
738753 }
739754
740-var xNewVariantVa func(string, string, []interface{}) *Variant
755+var xNewVariantVa func(string, uintptr, []interface{}) *Variant
741756
742757 // This function is intended to be used by libraries based on
743758 // #GVariant that want to provide g_variant_new()-like functionality
@@ -775,9 +790,9 @@ var xNewVariantVa func(string, string, []interface{}) *Variant
775790 // At this point, the caller will have their own full reference to the
776791 // result. This can also be done by adding the result to a container,
777792 // or by passing it to another g_variant_new() call.
778-func NewVariantVa(FormatStringVar string, EndptrVar string, AppVar []interface{}) *Variant {
793+func NewVariantVa(FormatStringVar string, EndptrVar *string, AppVar []interface{}) *Variant {
779794
780- cret := xNewVariantVa(FormatStringVar, EndptrVar, AppVar)
795+ cret := xNewVariantVa(FormatStringVar, core.NullableStringToPtr(EndptrVar), AppVar)
781796 return cret
782797 }
783798
@@ -1435,7 +1450,7 @@ func (x *Variant) GetUint64() uint64 {
14351450 return cret
14361451 }
14371452
1438-var xVariantGetVa func(uintptr, string, string, []interface{})
1453+var xVariantGetVa func(uintptr, string, uintptr, []interface{})
14391454
14401455 // This function is intended to be used by libraries based on #GVariant
14411456 // that want to provide g_variant_get()-like functionality to their
@@ -1461,9 +1476,9 @@ var xVariantGetVa func(uintptr, string, string, []interface{})
14611476 // the values and also determines if the values are copied or borrowed,
14621477 // see the section on
14631478 // [`GVariant` format strings](gvariant-format-strings.html#pointers).
1464-func (x *Variant) GetVa(FormatStringVar string, EndptrVar string, AppVar []interface{}) {
1479+func (x *Variant) GetVa(FormatStringVar string, EndptrVar *string, AppVar []interface{}) {
14651480
1466- xVariantGetVa(x.GoPointer(), FormatStringVar, EndptrVar, AppVar)
1481+ xVariantGetVa(x.GoPointer(), FormatStringVar, core.NullableStringToPtr(EndptrVar), AppVar)
14671482
14681483 }
14691484
@@ -2731,7 +2746,7 @@ func VariantIsSignature(StringVar string) bool {
27312746 return cret
27322747 }
27332748
2734-var xVariantParse func(*VariantType, string, string, string, **Error) *Variant
2749+var xVariantParse func(*VariantType, string, uintptr, uintptr, **Error) *Variant
27352750
27362751 // Parses a #GVariant from a text representation.
27372752 //
@@ -2769,10 +2784,10 @@ var xVariantParse func(*VariantType, string, string, string, **Error) *Variant
27692784 // There may be implementation specific restrictions on deeply nested values,
27702785 // which would result in a %G_VARIANT_PARSE_ERROR_RECURSION error. #GVariant is
27712786 // guaranteed to handle nesting up to at least 64 levels.
2772-func VariantParse(TypeVar *VariantType, TextVar string, LimitVar string, EndptrVar string) (*Variant, error) {
2787+func VariantParse(TypeVar *VariantType, TextVar string, LimitVar *string, EndptrVar *string) (*Variant, error) {
27732788 var cerr *Error
27742789
2775- cret := xVariantParse(TypeVar, TextVar, LimitVar, EndptrVar, &cerr)
2790+ cret := xVariantParse(TypeVar, TextVar, core.NullableStringToPtr(LimitVar), core.NullableStringToPtr(EndptrVar), &cerr)
27762791 if cerr == nil {
27772792 return cret, nil
27782793 }
M v4/glib/gvarianttype.go +3 -3
@@ -625,7 +625,7 @@ func VariantTypeStringIsValid(TypeStringVar string) bool {
625625 return cret
626626 }
627627
628-var xVariantTypeStringScan func(string, string, *string) bool
628+var xVariantTypeStringScan func(string, uintptr, *string) bool
629629
630630 // Scan for a single complete and valid GVariant type string in @string.
631631 //
@@ -641,9 +641,9 @@ var xVariantTypeStringScan func(string, string, *string) bool
641641 //
642642 // For the simple case of checking if a string is a valid type string,
643643 // see [func@GLib.VariantType.string_is_valid].
644-func VariantTypeStringScan(StringVar string, LimitVar string, EndptrVar *string) bool {
644+func VariantTypeStringScan(StringVar string, LimitVar *string, EndptrVar *string) bool {
645645
646- cret := xVariantTypeStringScan(StringVar, LimitVar, EndptrVar)
646+ cret := xVariantTypeStringScan(StringVar, core.NullableStringToPtr(LimitVar), EndptrVar)
647647 return cret
648648 }
649649
M v4/gmodule/gmodule.go +3 -3
@@ -107,7 +107,7 @@ const (
107107 GModuleErrorCheckFailedValue ModuleError = 1
108108 )
109109
110-var xModuleBuildPath func(string, string) string
110+var xModuleBuildPath func(uintptr, string) string
111111
112112 // A portable way to build the filename of a module. The platform-specific
113113 // prefix and suffix are added to the filename, if needed, and the result
@@ -122,9 +122,9 @@ var xModuleBuildPath func(string, string) string
122122 // @directory of `/lib` and a @module_name of "mylibrary" will return
123123 // `/lib/libmylibrary.so`. On a Windows system, using `\Windows` as the
124124 // directory it will return `\Windows\mylibrary.dll`.
125-func ModuleBuildPath(DirectoryVar string, ModuleNameVar string) string {
125+func ModuleBuildPath(DirectoryVar *string, ModuleNameVar string) string {
126126
127- cret := xModuleBuildPath(DirectoryVar, ModuleNameVar)
127+ cret := xModuleBuildPath(core.NullableStringToPtr(DirectoryVar), ModuleNameVar)
128128 return cret
129129 }
130130
M v4/gobject/gbinding.go +2 -2
@@ -306,7 +306,7 @@ func (c *Binding) SetGoPointer(ptr uintptr) {
306306 func (x *Binding) SetPropertySourceProperty(value string) {
307307 var v Value
308308 v.Init(TypeStringVal)
309- v.SetString(value)
309+ v.SetString(&value)
310310 x.SetProperty("source-property", &v)
311311 }
312312
@@ -331,7 +331,7 @@ func (x *Binding) GetPropertySourceProperty() string {
331331 func (x *Binding) SetPropertyTargetProperty(value string) {
332332 var v Value
333333 v.Init(TypeStringVal)
334- v.SetString(value)
334+ v.SetString(&value)
335335 x.SetProperty("target-property", &v)
336336 }
337337
M v4/gobject/gbindinggroup.go +48 -1
@@ -2,6 +2,8 @@
22 package gobject
33
44 import (
5+ "unsafe"
6+
57 "github.com/jwijenbergh/purego"
68 "github.com/jwijenbergh/puregotk/pkg/core"
79 "github.com/jwijenbergh/puregotk/v4/glib"
@@ -71,7 +73,52 @@ var xBindingGroupBindFull func(uintptr, string, uintptr, string, BindingFlags, u
7173 // See g_object_bind_property_full() for more information.
7274 func (x *BindingGroup) BindFull(SourcePropertyVar string, TargetVar *Object, TargetPropertyVar string, FlagsVar BindingFlags, TransformToVar *BindingTransformFunc, TransformFromVar *BindingTransformFunc, UserDataVar uintptr, UserDataDestroyVar *glib.DestroyNotify) {
7375
74- xBindingGroupBindFull(x.GoPointer(), SourcePropertyVar, TargetVar.GoPointer(), TargetPropertyVar, FlagsVar, glib.NewCallbackNullable(TransformToVar), glib.NewCallbackNullable(TransformFromVar), UserDataVar, glib.NewCallback(UserDataDestroyVar))
76+ var TransformToVarRef uintptr
77+ if TransformToVar != nil {
78+ TransformToVarPtr := uintptr(unsafe.Pointer(TransformToVar))
79+ if cbRefPtr, ok := glib.GetCallback(TransformToVarPtr); ok {
80+ TransformToVarRef = cbRefPtr
81+ } else {
82+ fcb := func(arg0 uintptr, arg1 *Value, arg2 *Value, arg3 uintptr) bool {
83+ cbFn := *TransformToVar
84+ return cbFn(arg0, arg1, arg2, arg3)
85+ }
86+ TransformToVarRef = purego.NewCallback(fcb)
87+ glib.SaveCallback(TransformToVarPtr, TransformToVarRef)
88+ }
89+ }
90+
91+ var TransformFromVarRef uintptr
92+ if TransformFromVar != nil {
93+ TransformFromVarPtr := uintptr(unsafe.Pointer(TransformFromVar))
94+ if cbRefPtr, ok := glib.GetCallback(TransformFromVarPtr); ok {
95+ TransformFromVarRef = cbRefPtr
96+ } else {
97+ fcb := func(arg0 uintptr, arg1 *Value, arg2 *Value, arg3 uintptr) bool {
98+ cbFn := *TransformFromVar
99+ return cbFn(arg0, arg1, arg2, arg3)
100+ }
101+ TransformFromVarRef = purego.NewCallback(fcb)
102+ glib.SaveCallback(TransformFromVarPtr, TransformFromVarRef)
103+ }
104+ }
105+
106+ var UserDataDestroyVarRef uintptr
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)
118+ }
119+ }
120+
121+ xBindingGroupBindFull(x.GoPointer(), SourcePropertyVar, TargetVar.GoPointer(), TargetPropertyVar, FlagsVar, TransformToVarRef, TransformFromVarRef, UserDataVar, UserDataDestroyVarRef)
75122
76123 }
77124
M v4/gobject/gboxed.go +33 -1
@@ -2,6 +2,8 @@
22 package gobject
33
44 import (
5+ "unsafe"
6+
57 "github.com/jwijenbergh/purego"
68 "github.com/jwijenbergh/puregotk/pkg/core"
79 "github.com/jwijenbergh/puregotk/v4/glib"
@@ -47,7 +49,37 @@ var xBoxedTypeRegisterStatic func(string, uintptr, uintptr) types.GType
4749 // will create the appropriate `*_get_type()` function for the boxed type.
4850 func BoxedTypeRegisterStatic(NameVar string, BoxedCopyVar *BoxedCopyFunc, BoxedFreeVar *BoxedFreeFunc) types.GType {
4951
50- cret := xBoxedTypeRegisterStatic(NameVar, glib.NewCallback(BoxedCopyVar), glib.NewCallback(BoxedFreeVar))
52+ var BoxedCopyVarRef uintptr
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)
64+ }
65+ }
66+
67+ var BoxedFreeVarRef uintptr
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)
79+ }
80+ }
81+
82+ cret := xBoxedTypeRegisterStatic(NameVar, BoxedCopyVarRef, BoxedFreeVarRef)
5183 return cret
5284 }
5385
M v4/gobject/gclosure.go +189 -9
@@ -203,7 +203,22 @@ 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- xClosureAddFinalizeNotifier(x.GoPointer(), NotifyDataVar, glib.NewCallback(NotifyFuncVar))
206+ var NotifyFuncVarRef uintptr
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)
218+ }
219+ }
220+
221+ xClosureAddFinalizeNotifier(x.GoPointer(), NotifyDataVar, NotifyFuncVarRef)
207222
208223 }
209224
@@ -216,7 +231,22 @@ var xClosureAddInvalidateNotifier func(uintptr, uintptr, uintptr)
216231 // in an unspecified order.
217232 func (x *Closure) AddInvalidateNotifier(NotifyDataVar uintptr, NotifyFuncVar *ClosureNotify) {
218233
219- xClosureAddInvalidateNotifier(x.GoPointer(), NotifyDataVar, glib.NewCallback(NotifyFuncVar))
234+ var NotifyFuncVarRef uintptr
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)
246+ }
247+ }
248+
249+ xClosureAddInvalidateNotifier(x.GoPointer(), NotifyDataVar, NotifyFuncVarRef)
220250
221251 }
222252
@@ -230,7 +260,37 @@ var xClosureAddMarshalGuards func(uintptr, uintptr, uintptr, uintptr, uintptr)
230260 // example of marshal guards.
231261 func (x *Closure) AddMarshalGuards(PreMarshalDataVar uintptr, PreMarshalNotifyVar *ClosureNotify, PostMarshalDataVar uintptr, PostMarshalNotifyVar *ClosureNotify) {
232262
233- xClosureAddMarshalGuards(x.GoPointer(), PreMarshalDataVar, glib.NewCallback(PreMarshalNotifyVar), PostMarshalDataVar, glib.NewCallback(PostMarshalNotifyVar))
263+ var PreMarshalNotifyVarRef uintptr
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)
275+ }
276+ }
277+
278+ var PostMarshalNotifyVarRef uintptr
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)
290+ }
291+ }
292+
293+ xClosureAddMarshalGuards(x.GoPointer(), PreMarshalDataVar, PreMarshalNotifyVarRef, PostMarshalDataVar, PostMarshalNotifyVarRef)
234294
235295 }
236296
@@ -283,7 +343,22 @@ var xClosureRemoveFinalizeNotifier func(uintptr, uintptr, uintptr)
283343 // Notice that notifiers are automatically removed after they are run.
284344 func (x *Closure) RemoveFinalizeNotifier(NotifyDataVar uintptr, NotifyFuncVar *ClosureNotify) {
285345
286- xClosureRemoveFinalizeNotifier(x.GoPointer(), NotifyDataVar, glib.NewCallback(NotifyFuncVar))
346+ var NotifyFuncVarRef uintptr
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)
358+ }
359+ }
360+
361+ xClosureRemoveFinalizeNotifier(x.GoPointer(), NotifyDataVar, NotifyFuncVarRef)
287362
288363 }
289364
@@ -294,7 +369,22 @@ var xClosureRemoveInvalidateNotifier func(uintptr, uintptr, uintptr)
294369 // Notice that notifiers are automatically removed after they are run.
295370 func (x *Closure) RemoveInvalidateNotifier(NotifyDataVar uintptr, NotifyFuncVar *ClosureNotify) {
296371
297- xClosureRemoveInvalidateNotifier(x.GoPointer(), NotifyDataVar, glib.NewCallback(NotifyFuncVar))
372+ var NotifyFuncVarRef uintptr
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)
384+ }
385+ }
386+
387+ xClosureRemoveInvalidateNotifier(x.GoPointer(), NotifyDataVar, NotifyFuncVarRef)
298388
299389 }
300390
@@ -312,7 +402,22 @@ var xClosureSetMarshal func(uintptr, uintptr)
312402 // See also: g_closure_set_meta_marshal()
313403 func (x *Closure) SetMarshal(MarshalVar *ClosureMarshal) {
314404
315- xClosureSetMarshal(x.GoPointer(), glib.NewCallback(MarshalVar))
405+ var MarshalVarRef uintptr
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)
417+ }
418+ }
419+
420+ xClosureSetMarshal(x.GoPointer(), MarshalVarRef)
316421
317422 }
318423
@@ -337,7 +442,22 @@ var xClosureSetMetaMarshal func(uintptr, uintptr, uintptr)
337442 // @marshal_data argument.
338443 func (x *Closure) SetMetaMarshal(MarshalDataVar uintptr, MetaMarshalVar *ClosureMarshal) {
339444
340- xClosureSetMetaMarshal(x.GoPointer(), MarshalDataVar, glib.NewCallback(MetaMarshalVar))
445+ var MetaMarshalVarRef uintptr
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)
457+ }
458+ }
459+
460+ xClosureSetMetaMarshal(x.GoPointer(), MarshalDataVar, MetaMarshalVarRef)
341461
342462 }
343463
@@ -467,7 +587,37 @@ var xCclosureNew func(uintptr, uintptr, uintptr) *Closure
467587 // @destroy_data will be called as a finalize notifier on the #GClosure.
468588 func CclosureNew(CallbackFuncVar *Callback, UserDataVar uintptr, DestroyDataVar *ClosureNotify) *Closure {
469589
470- cret := xCclosureNew(glib.NewCallback(CallbackFuncVar), UserDataVar, glib.NewCallback(DestroyDataVar))
590+ var CallbackFuncVarRef uintptr
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)
602+ }
603+ }
604+
605+ var DestroyDataVarRef uintptr
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)
617+ }
618+ }
619+
620+ cret := xCclosureNew(CallbackFuncVarRef, UserDataVar, DestroyDataVarRef)
471621 return cret
472622 }
473623
@@ -479,7 +629,37 @@ var xCclosureNewSwap func(uintptr, uintptr, uintptr) *Closure
479629 // @destroy_data will be called as a finalize notifier on the #GClosure.
480630 func CclosureNewSwap(CallbackFuncVar *Callback, UserDataVar uintptr, DestroyDataVar *ClosureNotify) *Closure {
481631
482- cret := xCclosureNewSwap(glib.NewCallback(CallbackFuncVar), UserDataVar, glib.NewCallback(DestroyDataVar))
632+ var CallbackFuncVarRef uintptr
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)
644+ }
645+ }
646+
647+ var DestroyDataVarRef uintptr
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)
659+ }
660+ }
661+
662+ cret := xCclosureNewSwap(CallbackFuncVarRef, UserDataVar, DestroyDataVarRef)
483663 return cret
484664 }
485665
M v4/gobject/gobject.go +277 -14
@@ -2,6 +2,7 @@
22 package gobject
33
44 import (
5+ "fmt"
56 "structs"
67 "unsafe"
78
@@ -931,7 +932,22 @@ var xCclosureNewObject func(uintptr, uintptr) *Closure
931932 // after the object is is freed.
932933 func CclosureNewObject(CallbackFuncVar *Callback, ObjectVar *Object) *Closure {
933934
934- cret := xCclosureNewObject(glib.NewCallback(CallbackFuncVar), ObjectVar.GoPointer())
935+ var CallbackFuncVarRef uintptr
936+ if CallbackFuncVar != nil {
937+ CallbackFuncVarPtr := uintptr(unsafe.Pointer(CallbackFuncVar))
938+ if cbRefPtr, ok := glib.GetCallback(CallbackFuncVarPtr); ok {
939+ CallbackFuncVarRef = cbRefPtr
940+ } else {
941+ fcb := func() {
942+ cbFn := *CallbackFuncVar
943+ cbFn()
944+ }
945+ CallbackFuncVarRef = purego.NewCallback(fcb)
946+ glib.SaveCallback(CallbackFuncVarPtr, CallbackFuncVarRef)
947+ }
948+ }
949+
950+ cret := xCclosureNewObject(CallbackFuncVarRef, ObjectVar.GoPointer())
935951 return cret
936952 }
937953
@@ -944,7 +960,22 @@ var xCclosureNewObjectSwap func(uintptr, uintptr) *Closure
944960 // after the object is is freed.
945961 func CclosureNewObjectSwap(CallbackFuncVar *Callback, ObjectVar *Object) *Closure {
946962
947- cret := xCclosureNewObjectSwap(glib.NewCallback(CallbackFuncVar), ObjectVar.GoPointer())
963+ var CallbackFuncVarRef uintptr
964+ if CallbackFuncVar != nil {
965+ CallbackFuncVarPtr := uintptr(unsafe.Pointer(CallbackFuncVar))
966+ if cbRefPtr, ok := glib.GetCallback(CallbackFuncVarPtr); ok {
967+ CallbackFuncVarRef = cbRefPtr
968+ } else {
969+ fcb := func() {
970+ cbFn := *CallbackFuncVar
971+ cbFn()
972+ }
973+ CallbackFuncVarRef = purego.NewCallback(fcb)
974+ glib.SaveCallback(CallbackFuncVarPtr, CallbackFuncVarRef)
975+ }
976+ }
977+
978+ cret := xCclosureNewObjectSwap(CallbackFuncVarRef, ObjectVar.GoPointer())
948979 return cret
949980 }
950981
@@ -986,7 +1017,22 @@ var xSignalConnectObject func(*TypeInstance, string, uintptr, uintptr, ConnectFl
9861017 // details.
9871018 func SignalConnectObject(InstanceVar *TypeInstance, DetailedSignalVar string, CHandlerVar *Callback, GobjectVar *Object, ConnectFlagsVar ConnectFlags) uint32 {
9881019
989- cret := xSignalConnectObject(InstanceVar, DetailedSignalVar, glib.NewCallback(CHandlerVar), GobjectVar.GoPointer(), ConnectFlagsVar)
1020+ var CHandlerVarRef uintptr
1021+ if CHandlerVar != nil {
1022+ CHandlerVarPtr := uintptr(unsafe.Pointer(CHandlerVar))
1023+ if cbRefPtr, ok := glib.GetCallback(CHandlerVarPtr); ok {
1024+ CHandlerVarRef = cbRefPtr
1025+ } else {
1026+ fcb := func() {
1027+ cbFn := *CHandlerVar
1028+ cbFn()
1029+ }
1030+ CHandlerVarRef = purego.NewCallback(fcb)
1031+ glib.SaveCallback(CHandlerVarPtr, CHandlerVarRef)
1032+ }
1033+ }
1034+
1035+ cret := xSignalConnectObject(InstanceVar, DetailedSignalVar, CHandlerVarRef, GobjectVar.GoPointer(), ConnectFlagsVar)
9901036 return cret
9911037 }
9921038
@@ -1198,7 +1244,22 @@ var xObjectAddToggleRef func(uintptr, uintptr, uintptr)
11981244 // A g_object_add_toggle_ref() must be released with g_object_remove_toggle_ref().
11991245 func (x *Object) AddToggleRef(NotifyVar *ToggleNotify, DataVar uintptr) {
12001246
1201- xObjectAddToggleRef(x.GoPointer(), glib.NewCallback(NotifyVar), DataVar)
1247+ var NotifyVarRef uintptr
1248+ if NotifyVar != nil {
1249+ NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
1250+ if cbRefPtr, ok := glib.GetCallback(NotifyVarPtr); ok {
1251+ NotifyVarRef = cbRefPtr
1252+ } else {
1253+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 bool) {
1254+ cbFn := *NotifyVar
1255+ cbFn(arg0, arg1, arg2)
1256+ }
1257+ NotifyVarRef = purego.NewCallback(fcb)
1258+ glib.SaveCallback(NotifyVarPtr, NotifyVarRef)
1259+ }
1260+ }
1261+
1262+ xObjectAddToggleRef(x.GoPointer(), NotifyVarRef, DataVar)
12021263
12031264 }
12041265
@@ -1298,7 +1359,52 @@ var xObjectBindPropertyFull func(uintptr, string, uintptr, string, BindingFlags,
12981359 func (x *Object) BindPropertyFull(SourcePropertyVar string, TargetVar *Object, TargetPropertyVar string, FlagsVar BindingFlags, TransformToVar *BindingTransformFunc, TransformFromVar *BindingTransformFunc, UserDataVar uintptr, NotifyVar *glib.DestroyNotify) *Binding {
12991360 var cls *Binding
13001361
1301- cret := xObjectBindPropertyFull(x.GoPointer(), SourcePropertyVar, TargetVar.GoPointer(), TargetPropertyVar, FlagsVar, glib.NewCallbackNullable(TransformToVar), glib.NewCallbackNullable(TransformFromVar), UserDataVar, glib.NewCallbackNullable(NotifyVar))
1362+ var TransformToVarRef uintptr
1363+ if TransformToVar != nil {
1364+ TransformToVarPtr := uintptr(unsafe.Pointer(TransformToVar))
1365+ if cbRefPtr, ok := glib.GetCallback(TransformToVarPtr); ok {
1366+ TransformToVarRef = cbRefPtr
1367+ } else {
1368+ fcb := func(arg0 uintptr, arg1 *Value, arg2 *Value, arg3 uintptr) bool {
1369+ cbFn := *TransformToVar
1370+ return cbFn(arg0, arg1, arg2, arg3)
1371+ }
1372+ TransformToVarRef = purego.NewCallback(fcb)
1373+ glib.SaveCallback(TransformToVarPtr, TransformToVarRef)
1374+ }
1375+ }
1376+
1377+ var TransformFromVarRef uintptr
1378+ if TransformFromVar != nil {
1379+ TransformFromVarPtr := uintptr(unsafe.Pointer(TransformFromVar))
1380+ if cbRefPtr, ok := glib.GetCallback(TransformFromVarPtr); ok {
1381+ TransformFromVarRef = cbRefPtr
1382+ } else {
1383+ fcb := func(arg0 uintptr, arg1 *Value, arg2 *Value, arg3 uintptr) bool {
1384+ cbFn := *TransformFromVar
1385+ return cbFn(arg0, arg1, arg2, arg3)
1386+ }
1387+ TransformFromVarRef = purego.NewCallback(fcb)
1388+ glib.SaveCallback(TransformFromVarPtr, TransformFromVarRef)
1389+ }
1390+ }
1391+
1392+ var NotifyVarRef uintptr
1393+ if NotifyVar != nil {
1394+ NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
1395+ if cbRefPtr, ok := glib.GetCallback(NotifyVarPtr); ok {
1396+ NotifyVarRef = cbRefPtr
1397+ } else {
1398+ fcb := func(arg0 uintptr) {
1399+ cbFn := *NotifyVar
1400+ cbFn(arg0)
1401+ }
1402+ NotifyVarRef = purego.NewCallback(fcb)
1403+ glib.SaveCallback(NotifyVarPtr, NotifyVarRef)
1404+ }
1405+ }
1406+
1407+ cret := xObjectBindPropertyFull(x.GoPointer(), SourcePropertyVar, TargetVar.GoPointer(), TargetPropertyVar, FlagsVar, TransformToVarRef, TransformFromVarRef, UserDataVar, NotifyVarRef)
13021408
13031409 if cret == 0 {
13041410 return nil
@@ -1407,7 +1513,22 @@ var xObjectDupData func(uintptr, string, uintptr, uintptr) uintptr
14071513 // object.
14081514 func (x *Object) DupData(KeyVar string, DupFuncVar *glib.DuplicateFunc, UserDataVar uintptr) uintptr {
14091515
1410- cret := xObjectDupData(x.GoPointer(), KeyVar, glib.NewCallbackNullable(DupFuncVar), UserDataVar)
1516+ var DupFuncVarRef uintptr
1517+ if DupFuncVar != nil {
1518+ DupFuncVarPtr := uintptr(unsafe.Pointer(DupFuncVar))
1519+ if cbRefPtr, ok := glib.GetCallback(DupFuncVarPtr); ok {
1520+ DupFuncVarRef = cbRefPtr
1521+ } else {
1522+ fcb := func(arg0 uintptr, arg1 uintptr) uintptr {
1523+ cbFn := *DupFuncVar
1524+ return cbFn(arg0, arg1)
1525+ }
1526+ DupFuncVarRef = purego.NewCallback(fcb)
1527+ glib.SaveCallback(DupFuncVarPtr, DupFuncVarRef)
1528+ }
1529+ }
1530+
1531+ cret := xObjectDupData(x.GoPointer(), KeyVar, DupFuncVarRef, UserDataVar)
14111532 return cret
14121533 }
14131534
@@ -1429,7 +1550,22 @@ var xObjectDupQdata func(uintptr, glib.Quark, uintptr, uintptr) uintptr
14291550 // object.
14301551 func (x *Object) DupQdata(QuarkVar glib.Quark, DupFuncVar *glib.DuplicateFunc, UserDataVar uintptr) uintptr {
14311552
1432- cret := xObjectDupQdata(x.GoPointer(), QuarkVar, glib.NewCallbackNullable(DupFuncVar), UserDataVar)
1553+ var DupFuncVarRef uintptr
1554+ if DupFuncVar != nil {
1555+ DupFuncVarPtr := uintptr(unsafe.Pointer(DupFuncVar))
1556+ if cbRefPtr, ok := glib.GetCallback(DupFuncVarPtr); ok {
1557+ DupFuncVarRef = cbRefPtr
1558+ } else {
1559+ fcb := func(arg0 uintptr, arg1 uintptr) uintptr {
1560+ cbFn := *DupFuncVar
1561+ return cbFn(arg0, arg1)
1562+ }
1563+ DupFuncVarRef = purego.NewCallback(fcb)
1564+ glib.SaveCallback(DupFuncVarPtr, DupFuncVarRef)
1565+ }
1566+ }
1567+
1568+ cret := xObjectDupQdata(x.GoPointer(), QuarkVar, DupFuncVarRef, UserDataVar)
14331569 return cret
14341570 }
14351571
@@ -1703,7 +1839,22 @@ var xObjectRemoveToggleRef func(uintptr, uintptr, uintptr)
17031839 // you must take care of that yourself.
17041840 func (x *Object) RemoveToggleRef(NotifyVar *ToggleNotify, DataVar uintptr) {
17051841
1706- xObjectRemoveToggleRef(x.GoPointer(), glib.NewCallback(NotifyVar), DataVar)
1842+ var NotifyVarRef uintptr
1843+ if NotifyVar != nil {
1844+ NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
1845+ if cbRefPtr, ok := glib.GetCallback(NotifyVarPtr); ok {
1846+ NotifyVarRef = cbRefPtr
1847+ } else {
1848+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 bool) {
1849+ cbFn := *NotifyVar
1850+ cbFn(arg0, arg1, arg2)
1851+ }
1852+ NotifyVarRef = purego.NewCallback(fcb)
1853+ glib.SaveCallback(NotifyVarPtr, NotifyVarRef)
1854+ }
1855+ }
1856+
1857+ xObjectRemoveToggleRef(x.GoPointer(), NotifyVarRef, DataVar)
17071858
17081859 }
17091860
@@ -1738,7 +1889,22 @@ var xObjectReplaceData func(uintptr, string, uintptr, uintptr, uintptr, *glib.De
17381889 // for @key.
17391890 func (x *Object) ReplaceData(KeyVar string, OldvalVar uintptr, NewvalVar uintptr, DestroyVar *glib.DestroyNotify, OldDestroyVar *glib.DestroyNotify) bool {
17401891
1741- cret := xObjectReplaceData(x.GoPointer(), KeyVar, OldvalVar, NewvalVar, glib.NewCallbackNullable(DestroyVar), OldDestroyVar)
1892+ var DestroyVarRef uintptr
1893+ if DestroyVar != nil {
1894+ DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
1895+ if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok {
1896+ DestroyVarRef = cbRefPtr
1897+ } else {
1898+ fcb := func(arg0 uintptr) {
1899+ cbFn := *DestroyVar
1900+ cbFn(arg0)
1901+ }
1902+ DestroyVarRef = purego.NewCallback(fcb)
1903+ glib.SaveCallback(DestroyVarPtr, DestroyVarRef)
1904+ }
1905+ }
1906+
1907+ cret := xObjectReplaceData(x.GoPointer(), KeyVar, OldvalVar, NewvalVar, DestroyVarRef, OldDestroyVar)
17421908 return cret
17431909 }
17441910
@@ -1759,7 +1925,22 @@ var xObjectReplaceQdata func(uintptr, glib.Quark, uintptr, uintptr, uintptr, *gl
17591925 // should not destroy the object in the normal way.
17601926 func (x *Object) ReplaceQdata(QuarkVar glib.Quark, OldvalVar uintptr, NewvalVar uintptr, DestroyVar *glib.DestroyNotify, OldDestroyVar *glib.DestroyNotify) bool {
17611927
1762- cret := xObjectReplaceQdata(x.GoPointer(), QuarkVar, OldvalVar, NewvalVar, glib.NewCallbackNullable(DestroyVar), OldDestroyVar)
1928+ var DestroyVarRef uintptr
1929+ if DestroyVar != nil {
1930+ DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
1931+ if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok {
1932+ DestroyVarRef = cbRefPtr
1933+ } else {
1934+ fcb := func(arg0 uintptr) {
1935+ cbFn := *DestroyVar
1936+ cbFn(arg0)
1937+ }
1938+ DestroyVarRef = purego.NewCallback(fcb)
1939+ glib.SaveCallback(DestroyVarPtr, DestroyVarRef)
1940+ }
1941+ }
1942+
1943+ cret := xObjectReplaceQdata(x.GoPointer(), QuarkVar, OldvalVar, NewvalVar, DestroyVarRef, OldDestroyVar)
17631944 return cret
17641945 }
17651946
@@ -1820,7 +2001,22 @@ var xObjectSetDataFull func(uintptr, string, uintptr, uintptr)
18202001 // Note that the @destroy callback is not called if @data is %NULL.
18212002 func (x *Object) SetDataFull(KeyVar string, DataVar uintptr, DestroyVar *glib.DestroyNotify) {
18222003
1823- xObjectSetDataFull(x.GoPointer(), KeyVar, DataVar, glib.NewCallbackNullable(DestroyVar))
2004+ var DestroyVarRef uintptr
2005+ if DestroyVar != nil {
2006+ DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
2007+ if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok {
2008+ DestroyVarRef = cbRefPtr
2009+ } else {
2010+ fcb := func(arg0 uintptr) {
2011+ cbFn := *DestroyVar
2012+ cbFn(arg0)
2013+ }
2014+ DestroyVarRef = purego.NewCallback(fcb)
2015+ glib.SaveCallback(DestroyVarPtr, DestroyVarRef)
2016+ }
2017+ }
2018+
2019+ xObjectSetDataFull(x.GoPointer(), KeyVar, DataVar, DestroyVarRef)
18242020
18252021 }
18262022
@@ -1858,7 +2054,22 @@ var xObjectSetQdataFull func(uintptr, glib.Quark, uintptr, uintptr)
18582054 // with the same @quark.
18592055 func (x *Object) SetQdataFull(QuarkVar glib.Quark, DataVar uintptr, DestroyVar *glib.DestroyNotify) {
18602056
1861- xObjectSetQdataFull(x.GoPointer(), QuarkVar, DataVar, glib.NewCallbackNullable(DestroyVar))
2057+ var DestroyVarRef uintptr
2058+ if DestroyVar != nil {
2059+ DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
2060+ if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok {
2061+ DestroyVarRef = cbRefPtr
2062+ } else {
2063+ fcb := func(arg0 uintptr) {
2064+ cbFn := *DestroyVar
2065+ cbFn(arg0)
2066+ }
2067+ DestroyVarRef = purego.NewCallback(fcb)
2068+ glib.SaveCallback(DestroyVarPtr, DestroyVarRef)
2069+ }
2070+ }
2071+
2072+ xObjectSetQdataFull(x.GoPointer(), QuarkVar, DataVar, DestroyVarRef)
18622073
18632074 }
18642075
@@ -2054,7 +2265,22 @@ var xObjectWeakRef func(uintptr, uintptr, uintptr)
20542265 // Use #GWeakRef if thread-safety is required.
20552266 func (x *Object) WeakRef(NotifyVar *WeakNotify, DataVar uintptr) {
20562267
2057- xObjectWeakRef(x.GoPointer(), glib.NewCallback(NotifyVar), DataVar)
2268+ var NotifyVarRef uintptr
2269+ if NotifyVar != nil {
2270+ NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
2271+ if cbRefPtr, ok := glib.GetCallback(NotifyVarPtr); ok {
2272+ NotifyVarRef = cbRefPtr
2273+ } else {
2274+ fcb := func(arg0 uintptr, arg1 uintptr) {
2275+ cbFn := *NotifyVar
2276+ cbFn(arg0, arg1)
2277+ }
2278+ NotifyVarRef = purego.NewCallback(fcb)
2279+ glib.SaveCallback(NotifyVarPtr, NotifyVarRef)
2280+ }
2281+ }
2282+
2283+ xObjectWeakRef(x.GoPointer(), NotifyVarRef, DataVar)
20582284
20592285 }
20602286
@@ -2063,7 +2289,22 @@ var xObjectWeakUnref func(uintptr, uintptr, uintptr)
20632289 // Removes a weak reference callback to an object.
20642290 func (x *Object) WeakUnref(NotifyVar *WeakNotify, DataVar uintptr) {
20652291
2066- xObjectWeakUnref(x.GoPointer(), glib.NewCallback(NotifyVar), DataVar)
2292+ var NotifyVarRef uintptr
2293+ if NotifyVar != nil {
2294+ NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar))
2295+ if cbRefPtr, ok := glib.GetCallback(NotifyVarPtr); ok {
2296+ NotifyVarRef = cbRefPtr
2297+ } else {
2298+ fcb := func(arg0 uintptr, arg1 uintptr) {
2299+ cbFn := *NotifyVar
2300+ cbFn(arg0, arg1)
2301+ }
2302+ NotifyVarRef = purego.NewCallback(fcb)
2303+ glib.SaveCallback(NotifyVarPtr, NotifyVarRef)
2304+ }
2305+ }
2306+
2307+ xObjectWeakUnref(x.GoPointer(), NotifyVarRef, DataVar)
20672308
20682309 }
20692310
@@ -2124,6 +2365,28 @@ func (x *Object) ConnectNotify(cb *func(Object, uintptr)) uint32 {
21242365 return SignalConnect(x.GoPointer(), "notify", cbRefPtr)
21252366 }
21262367
2368+// ConnectNotifyWithDetail connects to the "notify" signal with a detail string.
2369+// The detail is appended as "notify::<detail>".
2370+func (x *Object) ConnectNotifyWithDetail(detail string, cb *func(Object, uintptr)) uint32 {
2371+ cbPtr := uintptr(unsafe.Pointer(cb))
2372+ signalName := fmt.Sprintf("notify::%s", detail)
2373+ if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
2374+ return SignalConnect(x.GoPointer(), signalName, cbRefPtr)
2375+ }
2376+
2377+ fcb := func(clsPtr uintptr, PspecVarp uintptr) {
2378+ fa := Object{}
2379+ fa.Ptr = clsPtr
2380+ cbFn := *cb
2381+
2382+ cbFn(fa, PspecVarp)
2383+
2384+ }
2385+ cbRefPtr := purego.NewCallback(fcb)
2386+ glib.SaveCallback(cbPtr, cbRefPtr)
2387+ return SignalConnect(x.GoPointer(), signalName, cbRefPtr)
2388+}
2389+
21272390 var xObjectCompatControl func(uint, uintptr) uint
21282391
21292392 func ObjectCompatControl(WhatVar uint, DataVar uintptr) uint {
M v4/gobject/gparam.go +19 -4
@@ -770,7 +770,22 @@ var xParamSpecSetQdataFull func(uintptr, glib.Quark, uintptr, uintptr)
770770 // g_param_spec_set_qdata() with the same @quark.
771771 func (x *ParamSpec) SetQdataFull(QuarkVar glib.Quark, DataVar uintptr, DestroyVar *glib.DestroyNotify) {
772772
773- xParamSpecSetQdataFull(x.GoPointer(), QuarkVar, DataVar, glib.NewCallbackNullable(DestroyVar))
773+ var DestroyVarRef uintptr
774+ if DestroyVar != nil {
775+ DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
776+ if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok {
777+ DestroyVarRef = cbRefPtr
778+ } else {
779+ fcb := func(arg0 uintptr) {
780+ cbFn := *DestroyVar
781+ cbFn(arg0)
782+ }
783+ DestroyVarRef = purego.NewCallback(fcb)
784+ glib.SaveCallback(DestroyVarPtr, DestroyVarRef)
785+ }
786+ }
787+
788+ xParamSpecSetQdataFull(x.GoPointer(), QuarkVar, DataVar, DestroyVarRef)
774789
775790 }
776791
@@ -821,7 +836,7 @@ func (c *ParamSpec) SetGoPointer(ptr uintptr) {
821836 c.Ptr = ptr
822837 }
823838
824-var xParamSpecInternal func(types.GType, string, string, string, ParamFlags) uintptr
839+var xParamSpecInternal func(types.GType, string, uintptr, uintptr, ParamFlags) uintptr
825840
826841 // Creates a new #GParamSpec instance.
827842 //
@@ -835,10 +850,10 @@ var xParamSpecInternal func(types.GType, string, string, string, ParamFlags) uin
835850 // omitted, while for other libraries such as GStreamer and its plugins they
836851 // are essential. When in doubt, follow the conventions used in the
837852 // surrounding code and supporting libraries.
838-func ParamSpecInternal(ParamTypeVar types.GType, NameVar string, NickVar string, BlurbVar string, FlagsVar ParamFlags) *ParamSpec {
853+func ParamSpecInternal(ParamTypeVar types.GType, NameVar string, NickVar *string, BlurbVar *string, FlagsVar ParamFlags) *ParamSpec {
839854 var cls *ParamSpec
840855
841- cret := xParamSpecInternal(ParamTypeVar, NameVar, NickVar, BlurbVar, FlagsVar)
856+ cret := xParamSpecInternal(ParamTypeVar, NameVar, core.NullableStringToPtr(NickVar), core.NullableStringToPtr(BlurbVar), FlagsVar)
842857
843858 if cret == 0 {
844859 return nil
M v4/gobject/gparamspecs.go +66 -66
@@ -8,7 +8,7 @@ import (
88 "github.com/jwijenbergh/puregotk/v4/gobject/types"
99 )
1010
11-var xNewParamSpecBoolean func(string, string, string, bool, ParamFlags) uintptr
11+var xNewParamSpecBoolean func(string, uintptr, uintptr, bool, ParamFlags) uintptr
1212
1313 // Creates a new #GParamSpecBoolean instance specifying a %G_TYPE_BOOLEAN
1414 // property. In many cases, it may be more appropriate to use an enum with
@@ -17,10 +17,10 @@ var xNewParamSpecBoolean func(string, string, string, bool, ParamFlags) uintptr
1717 // API.
1818 //
1919 // See g_param_spec_internal() for details on property names.
20-func NewParamSpecBoolean(NameVar string, NickVar string, BlurbVar string, DefaultValueVar bool, FlagsVar ParamFlags) *ParamSpec {
20+func NewParamSpecBoolean(NameVar string, NickVar *string, BlurbVar *string, DefaultValueVar bool, FlagsVar ParamFlags) *ParamSpec {
2121 var cls *ParamSpec
2222
23- cret := xNewParamSpecBoolean(NameVar, NickVar, BlurbVar, DefaultValueVar, FlagsVar)
23+ cret := xNewParamSpecBoolean(NameVar, core.NullableStringToPtr(NickVar), core.NullableStringToPtr(BlurbVar), DefaultValueVar, FlagsVar)
2424
2525 if cret == 0 {
2626 return nil
@@ -30,16 +30,16 @@ func NewParamSpecBoolean(NameVar string, NickVar string, BlurbVar string, Defaul
3030 return cls
3131 }
3232
33-var xNewParamSpecBoxed func(string, string, string, types.GType, ParamFlags) uintptr
33+var xNewParamSpecBoxed func(string, uintptr, uintptr, types.GType, ParamFlags) uintptr
3434
3535 // Creates a new #GParamSpecBoxed instance specifying a %G_TYPE_BOXED
3636 // derived property.
3737 //
3838 // See g_param_spec_internal() for details on property names.
39-func NewParamSpecBoxed(NameVar string, NickVar string, BlurbVar string, BoxedTypeVar types.GType, FlagsVar ParamFlags) *ParamSpec {
39+func NewParamSpecBoxed(NameVar string, NickVar *string, BlurbVar *string, BoxedTypeVar types.GType, FlagsVar ParamFlags) *ParamSpec {
4040 var cls *ParamSpec
4141
42- cret := xNewParamSpecBoxed(NameVar, NickVar, BlurbVar, BoxedTypeVar, FlagsVar)
42+ cret := xNewParamSpecBoxed(NameVar, core.NullableStringToPtr(NickVar), core.NullableStringToPtr(BlurbVar), BoxedTypeVar, FlagsVar)
4343
4444 if cret == 0 {
4545 return nil
@@ -49,13 +49,13 @@ func NewParamSpecBoxed(NameVar string, NickVar string, BlurbVar string, BoxedTyp
4949 return cls
5050 }
5151
52-var xNewParamSpecChar func(string, string, string, int8, int8, int8, ParamFlags) uintptr
52+var xNewParamSpecChar func(string, uintptr, uintptr, int8, int8, int8, ParamFlags) uintptr
5353
5454 // Creates a new #GParamSpecChar instance specifying a %G_TYPE_CHAR property.
55-func NewParamSpecChar(NameVar string, NickVar string, BlurbVar string, MinimumVar int8, MaximumVar int8, DefaultValueVar int8, FlagsVar ParamFlags) *ParamSpec {
55+func NewParamSpecChar(NameVar string, NickVar *string, BlurbVar *string, MinimumVar int8, MaximumVar int8, DefaultValueVar int8, FlagsVar ParamFlags) *ParamSpec {
5656 var cls *ParamSpec
5757
58- cret := xNewParamSpecChar(NameVar, NickVar, BlurbVar, MinimumVar, MaximumVar, DefaultValueVar, FlagsVar)
58+ cret := xNewParamSpecChar(NameVar, core.NullableStringToPtr(NickVar), core.NullableStringToPtr(BlurbVar), MinimumVar, MaximumVar, DefaultValueVar, FlagsVar)
5959
6060 if cret == 0 {
6161 return nil
@@ -65,16 +65,16 @@ func NewParamSpecChar(NameVar string, NickVar string, BlurbVar string, MinimumVa
6565 return cls
6666 }
6767
68-var xNewParamSpecDouble func(string, string, string, float64, float64, float64, ParamFlags) uintptr
68+var xNewParamSpecDouble func(string, uintptr, uintptr, float64, float64, float64, ParamFlags) uintptr
6969
7070 // Creates a new #GParamSpecDouble instance specifying a %G_TYPE_DOUBLE
7171 // property.
7272 //
7373 // See g_param_spec_internal() for details on property names.
74-func NewParamSpecDouble(NameVar string, NickVar string, BlurbVar string, MinimumVar float64, MaximumVar float64, DefaultValueVar float64, FlagsVar ParamFlags) *ParamSpec {
74+func NewParamSpecDouble(NameVar string, NickVar *string, BlurbVar *string, MinimumVar float64, MaximumVar float64, DefaultValueVar float64, FlagsVar ParamFlags) *ParamSpec {
7575 var cls *ParamSpec
7676
77- cret := xNewParamSpecDouble(NameVar, NickVar, BlurbVar, MinimumVar, MaximumVar, DefaultValueVar, FlagsVar)
77+ cret := xNewParamSpecDouble(NameVar, core.NullableStringToPtr(NickVar), core.NullableStringToPtr(BlurbVar), MinimumVar, MaximumVar, DefaultValueVar, FlagsVar)
7878
7979 if cret == 0 {
8080 return nil
@@ -84,16 +84,16 @@ func NewParamSpecDouble(NameVar string, NickVar string, BlurbVar string, Minimum
8484 return cls
8585 }
8686
87-var xNewParamSpecEnum func(string, string, string, types.GType, int, ParamFlags) uintptr
87+var xNewParamSpecEnum func(string, uintptr, uintptr, types.GType, int, ParamFlags) uintptr
8888
8989 // Creates a new #GParamSpecEnum instance specifying a %G_TYPE_ENUM
9090 // property.
9191 //
9292 // See g_param_spec_internal() for details on property names.
93-func NewParamSpecEnum(NameVar string, NickVar string, BlurbVar string, EnumTypeVar types.GType, DefaultValueVar int, FlagsVar ParamFlags) *ParamSpec {
93+func NewParamSpecEnum(NameVar string, NickVar *string, BlurbVar *string, EnumTypeVar types.GType, DefaultValueVar int, FlagsVar ParamFlags) *ParamSpec {
9494 var cls *ParamSpec
9595
96- cret := xNewParamSpecEnum(NameVar, NickVar, BlurbVar, EnumTypeVar, DefaultValueVar, FlagsVar)
96+ cret := xNewParamSpecEnum(NameVar, core.NullableStringToPtr(NickVar), core.NullableStringToPtr(BlurbVar), EnumTypeVar, DefaultValueVar, FlagsVar)
9797
9898 if cret == 0 {
9999 return nil
@@ -103,16 +103,16 @@ func NewParamSpecEnum(NameVar string, NickVar string, BlurbVar string, EnumTypeV
103103 return cls
104104 }
105105
106-var xNewParamSpecFlags func(string, string, string, types.GType, uint, ParamFlags) uintptr
106+var xNewParamSpecFlags func(string, uintptr, uintptr, types.GType, uint, ParamFlags) uintptr
107107
108108 // Creates a new #GParamSpecFlags instance specifying a %G_TYPE_FLAGS
109109 // property.
110110 //
111111 // See g_param_spec_internal() for details on property names.
112-func NewParamSpecFlags(NameVar string, NickVar string, BlurbVar string, FlagsTypeVar types.GType, DefaultValueVar uint, FlagsVar ParamFlags) *ParamSpec {
112+func NewParamSpecFlags(NameVar string, NickVar *string, BlurbVar *string, FlagsTypeVar types.GType, DefaultValueVar uint, FlagsVar ParamFlags) *ParamSpec {
113113 var cls *ParamSpec
114114
115- cret := xNewParamSpecFlags(NameVar, NickVar, BlurbVar, FlagsTypeVar, DefaultValueVar, FlagsVar)
115+ cret := xNewParamSpecFlags(NameVar, core.NullableStringToPtr(NickVar), core.NullableStringToPtr(BlurbVar), FlagsTypeVar, DefaultValueVar, FlagsVar)
116116
117117 if cret == 0 {
118118 return nil
@@ -122,15 +122,15 @@ func NewParamSpecFlags(NameVar string, NickVar string, BlurbVar string, FlagsTyp
122122 return cls
123123 }
124124
125-var xNewParamSpecFloat func(string, string, string, float32, float32, float32, ParamFlags) uintptr
125+var xNewParamSpecFloat func(string, uintptr, uintptr, float32, float32, float32, ParamFlags) uintptr
126126
127127 // Creates a new #GParamSpecFloat instance specifying a %G_TYPE_FLOAT property.
128128 //
129129 // See g_param_spec_internal() for details on property names.
130-func NewParamSpecFloat(NameVar string, NickVar string, BlurbVar string, MinimumVar float32, MaximumVar float32, DefaultValueVar float32, FlagsVar ParamFlags) *ParamSpec {
130+func NewParamSpecFloat(NameVar string, NickVar *string, BlurbVar *string, MinimumVar float32, MaximumVar float32, DefaultValueVar float32, FlagsVar ParamFlags) *ParamSpec {
131131 var cls *ParamSpec
132132
133- cret := xNewParamSpecFloat(NameVar, NickVar, BlurbVar, MinimumVar, MaximumVar, DefaultValueVar, FlagsVar)
133+ cret := xNewParamSpecFloat(NameVar, core.NullableStringToPtr(NickVar), core.NullableStringToPtr(BlurbVar), MinimumVar, MaximumVar, DefaultValueVar, FlagsVar)
134134
135135 if cret == 0 {
136136 return nil
@@ -140,16 +140,16 @@ func NewParamSpecFloat(NameVar string, NickVar string, BlurbVar string, MinimumV
140140 return cls
141141 }
142142
143-var xParamSpecGtype func(string, string, string, types.GType, ParamFlags) uintptr
143+var xParamSpecGtype func(string, uintptr, uintptr, types.GType, ParamFlags) uintptr
144144
145145 // Creates a new #GParamSpecGType instance specifying a
146146 // %G_TYPE_GTYPE property.
147147 //
148148 // See g_param_spec_internal() for details on property names.
149-func ParamSpecGtype(NameVar string, NickVar string, BlurbVar string, IsATypeVar types.GType, FlagsVar ParamFlags) *ParamSpec {
149+func ParamSpecGtype(NameVar string, NickVar *string, BlurbVar *string, IsATypeVar types.GType, FlagsVar ParamFlags) *ParamSpec {
150150 var cls *ParamSpec
151151
152- cret := xParamSpecGtype(NameVar, NickVar, BlurbVar, IsATypeVar, FlagsVar)
152+ cret := xParamSpecGtype(NameVar, core.NullableStringToPtr(NickVar), core.NullableStringToPtr(BlurbVar), IsATypeVar, FlagsVar)
153153
154154 if cret == 0 {
155155 return nil
@@ -159,15 +159,15 @@ func ParamSpecGtype(NameVar string, NickVar string, BlurbVar string, IsATypeVar
159159 return cls
160160 }
161161
162-var xNewParamSpecInt func(string, string, string, int, int, int, ParamFlags) uintptr
162+var xNewParamSpecInt func(string, uintptr, uintptr, int, int, int, ParamFlags) uintptr
163163
164164 // Creates a new #GParamSpecInt instance specifying a %G_TYPE_INT property.
165165 //
166166 // See g_param_spec_internal() for details on property names.
167-func NewParamSpecInt(NameVar string, NickVar string, BlurbVar string, MinimumVar int, MaximumVar int, DefaultValueVar int, FlagsVar ParamFlags) *ParamSpec {
167+func NewParamSpecInt(NameVar string, NickVar *string, BlurbVar *string, MinimumVar int, MaximumVar int, DefaultValueVar int, FlagsVar ParamFlags) *ParamSpec {
168168 var cls *ParamSpec
169169
170- cret := xNewParamSpecInt(NameVar, NickVar, BlurbVar, MinimumVar, MaximumVar, DefaultValueVar, FlagsVar)
170+ cret := xNewParamSpecInt(NameVar, core.NullableStringToPtr(NickVar), core.NullableStringToPtr(BlurbVar), MinimumVar, MaximumVar, DefaultValueVar, FlagsVar)
171171
172172 if cret == 0 {
173173 return nil
@@ -177,15 +177,15 @@ func NewParamSpecInt(NameVar string, NickVar string, BlurbVar string, MinimumVar
177177 return cls
178178 }
179179
180-var xNewParamSpecInt64 func(string, string, string, int64, int64, int64, ParamFlags) uintptr
180+var xNewParamSpecInt64 func(string, uintptr, uintptr, int64, int64, int64, ParamFlags) uintptr
181181
182182 // Creates a new #GParamSpecInt64 instance specifying a %G_TYPE_INT64 property.
183183 //
184184 // See g_param_spec_internal() for details on property names.
185-func NewParamSpecInt64(NameVar string, NickVar string, BlurbVar string, MinimumVar int64, MaximumVar int64, DefaultValueVar int64, FlagsVar ParamFlags) *ParamSpec {
185+func NewParamSpecInt64(NameVar string, NickVar *string, BlurbVar *string, MinimumVar int64, MaximumVar int64, DefaultValueVar int64, FlagsVar ParamFlags) *ParamSpec {
186186 var cls *ParamSpec
187187
188- cret := xNewParamSpecInt64(NameVar, NickVar, BlurbVar, MinimumVar, MaximumVar, DefaultValueVar, FlagsVar)
188+ cret := xNewParamSpecInt64(NameVar, core.NullableStringToPtr(NickVar), core.NullableStringToPtr(BlurbVar), MinimumVar, MaximumVar, DefaultValueVar, FlagsVar)
189189
190190 if cret == 0 {
191191 return nil
@@ -195,15 +195,15 @@ func NewParamSpecInt64(NameVar string, NickVar string, BlurbVar string, MinimumV
195195 return cls
196196 }
197197
198-var xNewParamSpecLong func(string, string, string, int32, int32, int32, ParamFlags) uintptr
198+var xNewParamSpecLong func(string, uintptr, uintptr, int32, int32, int32, ParamFlags) uintptr
199199
200200 // Creates a new #GParamSpecLong instance specifying a %G_TYPE_LONG property.
201201 //
202202 // See g_param_spec_internal() for details on property names.
203-func NewParamSpecLong(NameVar string, NickVar string, BlurbVar string, MinimumVar int32, MaximumVar int32, DefaultValueVar int32, FlagsVar ParamFlags) *ParamSpec {
203+func NewParamSpecLong(NameVar string, NickVar *string, BlurbVar *string, MinimumVar int32, MaximumVar int32, DefaultValueVar int32, FlagsVar ParamFlags) *ParamSpec {
204204 var cls *ParamSpec
205205
206- cret := xNewParamSpecLong(NameVar, NickVar, BlurbVar, MinimumVar, MaximumVar, DefaultValueVar, FlagsVar)
206+ cret := xNewParamSpecLong(NameVar, core.NullableStringToPtr(NickVar), core.NullableStringToPtr(BlurbVar), MinimumVar, MaximumVar, DefaultValueVar, FlagsVar)
207207
208208 if cret == 0 {
209209 return nil
@@ -213,16 +213,16 @@ func NewParamSpecLong(NameVar string, NickVar string, BlurbVar string, MinimumVa
213213 return cls
214214 }
215215
216-var xNewParamSpecObject func(string, string, string, types.GType, ParamFlags) uintptr
216+var xNewParamSpecObject func(string, uintptr, uintptr, types.GType, ParamFlags) uintptr
217217
218218 // Creates a new #GParamSpecBoxed instance specifying a %G_TYPE_OBJECT
219219 // derived property.
220220 //
221221 // See g_param_spec_internal() for details on property names.
222-func NewParamSpecObject(NameVar string, NickVar string, BlurbVar string, ObjectTypeVar types.GType, FlagsVar ParamFlags) *ParamSpec {
222+func NewParamSpecObject(NameVar string, NickVar *string, BlurbVar *string, ObjectTypeVar types.GType, FlagsVar ParamFlags) *ParamSpec {
223223 var cls *ParamSpec
224224
225- cret := xNewParamSpecObject(NameVar, NickVar, BlurbVar, ObjectTypeVar, FlagsVar)
225+ cret := xNewParamSpecObject(NameVar, core.NullableStringToPtr(NickVar), core.NullableStringToPtr(BlurbVar), ObjectTypeVar, FlagsVar)
226226
227227 if cret == 0 {
228228 return nil
@@ -250,16 +250,16 @@ func NewParamSpecOverride(NameVar string, OverriddenVar *ParamSpec) *ParamSpec {
250250 return cls
251251 }
252252
253-var xNewParamSpecParam func(string, string, string, types.GType, ParamFlags) uintptr
253+var xNewParamSpecParam func(string, uintptr, uintptr, types.GType, ParamFlags) uintptr
254254
255255 // Creates a new #GParamSpecParam instance specifying a %G_TYPE_PARAM
256256 // property.
257257 //
258258 // See g_param_spec_internal() for details on property names.
259-func NewParamSpecParam(NameVar string, NickVar string, BlurbVar string, ParamTypeVar types.GType, FlagsVar ParamFlags) *ParamSpec {
259+func NewParamSpecParam(NameVar string, NickVar *string, BlurbVar *string, ParamTypeVar types.GType, FlagsVar ParamFlags) *ParamSpec {
260260 var cls *ParamSpec
261261
262- cret := xNewParamSpecParam(NameVar, NickVar, BlurbVar, ParamTypeVar, FlagsVar)
262+ cret := xNewParamSpecParam(NameVar, core.NullableStringToPtr(NickVar), core.NullableStringToPtr(BlurbVar), ParamTypeVar, FlagsVar)
263263
264264 if cret == 0 {
265265 return nil
@@ -269,17 +269,17 @@ func NewParamSpecParam(NameVar string, NickVar string, BlurbVar string, ParamTyp
269269 return cls
270270 }
271271
272-var xNewParamSpecPointer func(string, string, string, ParamFlags) uintptr
272+var xNewParamSpecPointer func(string, uintptr, uintptr, ParamFlags) uintptr
273273
274274 // Creates a new #GParamSpecPointer instance specifying a pointer property.
275275 // Where possible, it is better to use g_param_spec_object() or
276276 // g_param_spec_boxed() to expose memory management information.
277277 //
278278 // See g_param_spec_internal() for details on property names.
279-func NewParamSpecPointer(NameVar string, NickVar string, BlurbVar string, FlagsVar ParamFlags) *ParamSpec {
279+func NewParamSpecPointer(NameVar string, NickVar *string, BlurbVar *string, FlagsVar ParamFlags) *ParamSpec {
280280 var cls *ParamSpec
281281
282- cret := xNewParamSpecPointer(NameVar, NickVar, BlurbVar, FlagsVar)
282+ cret := xNewParamSpecPointer(NameVar, core.NullableStringToPtr(NickVar), core.NullableStringToPtr(BlurbVar), FlagsVar)
283283
284284 if cret == 0 {
285285 return nil
@@ -289,15 +289,15 @@ func NewParamSpecPointer(NameVar string, NickVar string, BlurbVar string, FlagsV
289289 return cls
290290 }
291291
292-var xNewParamSpecString func(string, string, string, string, ParamFlags) uintptr
292+var xNewParamSpecString func(string, uintptr, uintptr, uintptr, ParamFlags) uintptr
293293
294294 // Creates a new #GParamSpecString instance.
295295 //
296296 // See g_param_spec_internal() for details on property names.
297-func NewParamSpecString(NameVar string, NickVar string, BlurbVar string, DefaultValueVar string, FlagsVar ParamFlags) *ParamSpec {
297+func NewParamSpecString(NameVar string, NickVar *string, BlurbVar *string, DefaultValueVar *string, FlagsVar ParamFlags) *ParamSpec {
298298 var cls *ParamSpec
299299
300- cret := xNewParamSpecString(NameVar, NickVar, BlurbVar, DefaultValueVar, FlagsVar)
300+ cret := xNewParamSpecString(NameVar, core.NullableStringToPtr(NickVar), core.NullableStringToPtr(BlurbVar), core.NullableStringToPtr(DefaultValueVar), FlagsVar)
301301
302302 if cret == 0 {
303303 return nil
@@ -307,13 +307,13 @@ func NewParamSpecString(NameVar string, NickVar string, BlurbVar string, Default
307307 return cls
308308 }
309309
310-var xParamSpecUchar func(string, string, string, byte, byte, byte, ParamFlags) uintptr
310+var xParamSpecUchar func(string, uintptr, uintptr, byte, byte, byte, ParamFlags) uintptr
311311
312312 // Creates a new #GParamSpecUChar instance specifying a %G_TYPE_UCHAR property.
313-func ParamSpecUchar(NameVar string, NickVar string, BlurbVar string, MinimumVar byte, MaximumVar byte, DefaultValueVar byte, FlagsVar ParamFlags) *ParamSpec {
313+func ParamSpecUchar(NameVar string, NickVar *string, BlurbVar *string, MinimumVar byte, MaximumVar byte, DefaultValueVar byte, FlagsVar ParamFlags) *ParamSpec {
314314 var cls *ParamSpec
315315
316- cret := xParamSpecUchar(NameVar, NickVar, BlurbVar, MinimumVar, MaximumVar, DefaultValueVar, FlagsVar)
316+ cret := xParamSpecUchar(NameVar, core.NullableStringToPtr(NickVar), core.NullableStringToPtr(BlurbVar), MinimumVar, MaximumVar, DefaultValueVar, FlagsVar)
317317
318318 if cret == 0 {
319319 return nil
@@ -323,15 +323,15 @@ func ParamSpecUchar(NameVar string, NickVar string, BlurbVar string, MinimumVar
323323 return cls
324324 }
325325
326-var xParamSpecUint func(string, string, string, uint, uint, uint, ParamFlags) uintptr
326+var xParamSpecUint func(string, uintptr, uintptr, uint, uint, uint, ParamFlags) uintptr
327327
328328 // Creates a new #GParamSpecUInt instance specifying a %G_TYPE_UINT property.
329329 //
330330 // See g_param_spec_internal() for details on property names.
331-func ParamSpecUint(NameVar string, NickVar string, BlurbVar string, MinimumVar uint, MaximumVar uint, DefaultValueVar uint, FlagsVar ParamFlags) *ParamSpec {
331+func ParamSpecUint(NameVar string, NickVar *string, BlurbVar *string, MinimumVar uint, MaximumVar uint, DefaultValueVar uint, FlagsVar ParamFlags) *ParamSpec {
332332 var cls *ParamSpec
333333
334- cret := xParamSpecUint(NameVar, NickVar, BlurbVar, MinimumVar, MaximumVar, DefaultValueVar, FlagsVar)
334+ cret := xParamSpecUint(NameVar, core.NullableStringToPtr(NickVar), core.NullableStringToPtr(BlurbVar), MinimumVar, MaximumVar, DefaultValueVar, FlagsVar)
335335
336336 if cret == 0 {
337337 return nil
@@ -341,16 +341,16 @@ func ParamSpecUint(NameVar string, NickVar string, BlurbVar string, MinimumVar u
341341 return cls
342342 }
343343
344-var xParamSpecUint64 func(string, string, string, uint64, uint64, uint64, ParamFlags) uintptr
344+var xParamSpecUint64 func(string, uintptr, uintptr, uint64, uint64, uint64, ParamFlags) uintptr
345345
346346 // Creates a new #GParamSpecUInt64 instance specifying a %G_TYPE_UINT64
347347 // property.
348348 //
349349 // See g_param_spec_internal() for details on property names.
350-func ParamSpecUint64(NameVar string, NickVar string, BlurbVar string, MinimumVar uint64, MaximumVar uint64, DefaultValueVar uint64, FlagsVar ParamFlags) *ParamSpec {
350+func ParamSpecUint64(NameVar string, NickVar *string, BlurbVar *string, MinimumVar uint64, MaximumVar uint64, DefaultValueVar uint64, FlagsVar ParamFlags) *ParamSpec {
351351 var cls *ParamSpec
352352
353- cret := xParamSpecUint64(NameVar, NickVar, BlurbVar, MinimumVar, MaximumVar, DefaultValueVar, FlagsVar)
353+ cret := xParamSpecUint64(NameVar, core.NullableStringToPtr(NickVar), core.NullableStringToPtr(BlurbVar), MinimumVar, MaximumVar, DefaultValueVar, FlagsVar)
354354
355355 if cret == 0 {
356356 return nil
@@ -360,16 +360,16 @@ func ParamSpecUint64(NameVar string, NickVar string, BlurbVar string, MinimumVar
360360 return cls
361361 }
362362
363-var xParamSpecUlong func(string, string, string, uint32, uint32, uint32, ParamFlags) uintptr
363+var xParamSpecUlong func(string, uintptr, uintptr, uint32, uint32, uint32, ParamFlags) uintptr
364364
365365 // Creates a new #GParamSpecULong instance specifying a %G_TYPE_ULONG
366366 // property.
367367 //
368368 // See g_param_spec_internal() for details on property names.
369-func ParamSpecUlong(NameVar string, NickVar string, BlurbVar string, MinimumVar uint32, MaximumVar uint32, DefaultValueVar uint32, FlagsVar ParamFlags) *ParamSpec {
369+func ParamSpecUlong(NameVar string, NickVar *string, BlurbVar *string, MinimumVar uint32, MaximumVar uint32, DefaultValueVar uint32, FlagsVar ParamFlags) *ParamSpec {
370370 var cls *ParamSpec
371371
372- cret := xParamSpecUlong(NameVar, NickVar, BlurbVar, MinimumVar, MaximumVar, DefaultValueVar, FlagsVar)
372+ cret := xParamSpecUlong(NameVar, core.NullableStringToPtr(NickVar), core.NullableStringToPtr(BlurbVar), MinimumVar, MaximumVar, DefaultValueVar, FlagsVar)
373373
374374 if cret == 0 {
375375 return nil
@@ -379,17 +379,17 @@ func ParamSpecUlong(NameVar string, NickVar string, BlurbVar string, MinimumVar
379379 return cls
380380 }
381381
382-var xNewParamSpecUnichar func(string, string, string, uint32, ParamFlags) uintptr
382+var xNewParamSpecUnichar func(string, uintptr, uintptr, uint32, ParamFlags) uintptr
383383
384384 // Creates a new #GParamSpecUnichar instance specifying a %G_TYPE_UINT
385385 // property. #GValue structures for this property can be accessed with
386386 // g_value_set_uint() and g_value_get_uint().
387387 //
388388 // See g_param_spec_internal() for details on property names.
389-func NewParamSpecUnichar(NameVar string, NickVar string, BlurbVar string, DefaultValueVar uint32, FlagsVar ParamFlags) *ParamSpec {
389+func NewParamSpecUnichar(NameVar string, NickVar *string, BlurbVar *string, DefaultValueVar uint32, FlagsVar ParamFlags) *ParamSpec {
390390 var cls *ParamSpec
391391
392- cret := xNewParamSpecUnichar(NameVar, NickVar, BlurbVar, DefaultValueVar, FlagsVar)
392+ cret := xNewParamSpecUnichar(NameVar, core.NullableStringToPtr(NickVar), core.NullableStringToPtr(BlurbVar), DefaultValueVar, FlagsVar)
393393
394394 if cret == 0 {
395395 return nil
@@ -399,7 +399,7 @@ func NewParamSpecUnichar(NameVar string, NickVar string, BlurbVar string, Defaul
399399 return cls
400400 }
401401
402-var xNewParamSpecValueArray func(string, string, string, uintptr, ParamFlags) uintptr
402+var xNewParamSpecValueArray func(string, uintptr, uintptr, uintptr, ParamFlags) uintptr
403403
404404 // Creates a new #GParamSpecValueArray instance specifying a
405405 // %G_TYPE_VALUE_ARRAY property. %G_TYPE_VALUE_ARRAY is a
@@ -407,10 +407,10 @@ var xNewParamSpecValueArray func(string, string, string, uintptr, ParamFlags) ui
407407 // can be accessed with g_value_set_boxed() and g_value_get_boxed().
408408 //
409409 // See g_param_spec_internal() for details on property names.
410-func NewParamSpecValueArray(NameVar string, NickVar string, BlurbVar string, ElementSpecVar *ParamSpec, FlagsVar ParamFlags) *ParamSpec {
410+func NewParamSpecValueArray(NameVar string, NickVar *string, BlurbVar *string, ElementSpecVar *ParamSpec, FlagsVar ParamFlags) *ParamSpec {
411411 var cls *ParamSpec
412412
413- cret := xNewParamSpecValueArray(NameVar, NickVar, BlurbVar, ElementSpecVar.GoPointer(), FlagsVar)
413+ cret := xNewParamSpecValueArray(NameVar, core.NullableStringToPtr(NickVar), core.NullableStringToPtr(BlurbVar), ElementSpecVar.GoPointer(), FlagsVar)
414414
415415 if cret == 0 {
416416 return nil
@@ -420,7 +420,7 @@ func NewParamSpecValueArray(NameVar string, NickVar string, BlurbVar string, Ele
420420 return cls
421421 }
422422
423-var xNewParamSpecVariant func(string, string, string, *glib.VariantType, *glib.Variant, ParamFlags) uintptr
423+var xNewParamSpecVariant func(string, uintptr, uintptr, *glib.VariantType, *glib.Variant, ParamFlags) uintptr
424424
425425 // Creates a new #GParamSpecVariant instance specifying a #GVariant
426426 // property.
@@ -428,10 +428,10 @@ var xNewParamSpecVariant func(string, string, string, *glib.VariantType, *glib.V
428428 // If @default_value is floating, it is consumed.
429429 //
430430 // See g_param_spec_internal() for details on property names.
431-func NewParamSpecVariant(NameVar string, NickVar string, BlurbVar string, TypeVar *glib.VariantType, DefaultValueVar *glib.Variant, FlagsVar ParamFlags) *ParamSpec {
431+func NewParamSpecVariant(NameVar string, NickVar *string, BlurbVar *string, TypeVar *glib.VariantType, DefaultValueVar *glib.Variant, FlagsVar ParamFlags) *ParamSpec {
432432 var cls *ParamSpec
433433
434- cret := xNewParamSpecVariant(NameVar, NickVar, BlurbVar, TypeVar, DefaultValueVar, FlagsVar)
434+ cret := xNewParamSpecVariant(NameVar, core.NullableStringToPtr(NickVar), core.NullableStringToPtr(BlurbVar), TypeVar, DefaultValueVar, FlagsVar)
435435
436436 if cret == 0 {
437437 return nil
M v4/gobject/gsignal.go +157 -7
@@ -228,7 +228,37 @@ 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- cret := xSignalAddEmissionHook(SignalIdVar, DetailVar, glib.NewCallback(HookFuncVar), HookDataVar, glib.NewCallbackNullable(DataDestroyVar))
231+ var HookFuncVarRef uintptr
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)
243+ }
244+ }
245+
246+ var DataDestroyVarRef uintptr
247+ if DataDestroyVar != nil {
248+ DataDestroyVarPtr := uintptr(unsafe.Pointer(DataDestroyVar))
249+ if cbRefPtr, ok := glib.GetCallback(DataDestroyVarPtr); ok {
250+ DataDestroyVarRef = cbRefPtr
251+ } else {
252+ fcb := func(arg0 uintptr) {
253+ cbFn := *DataDestroyVar
254+ cbFn(arg0)
255+ }
256+ DataDestroyVarRef = purego.NewCallback(fcb)
257+ glib.SaveCallback(DataDestroyVarPtr, DataDestroyVarRef)
258+ }
259+ }
260+
261+ cret := xSignalAddEmissionHook(SignalIdVar, DetailVar, HookFuncVarRef, HookDataVar, DataDestroyVarRef)
232262 return cret
233263 }
234264
@@ -313,7 +343,37 @@ var xSignalConnectData func(uintptr, string, uintptr, uintptr, uintptr, ConnectF
313343 // details.
314344 func SignalConnectData(InstanceVar *Object, DetailedSignalVar string, CHandlerVar *Callback, DataVar uintptr, DestroyDataVar *ClosureNotify, ConnectFlagsVar ConnectFlags) uint32 {
315345
316- cret := xSignalConnectData(InstanceVar.GoPointer(), DetailedSignalVar, glib.NewCallback(CHandlerVar), DataVar, glib.NewCallbackNullable(DestroyDataVar), ConnectFlagsVar)
346+ var CHandlerVarRef uintptr
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)
358+ }
359+ }
360+
361+ var DestroyDataVarRef uintptr
362+ if DestroyDataVar != nil {
363+ DestroyDataVarPtr := uintptr(unsafe.Pointer(DestroyDataVar))
364+ if cbRefPtr, ok := glib.GetCallback(DestroyDataVarPtr); ok {
365+ DestroyDataVarRef = cbRefPtr
366+ } else {
367+ fcb := func(arg0 uintptr, arg1 *Closure) {
368+ cbFn := *DestroyDataVar
369+ cbFn(arg0, arg1)
370+ }
371+ DestroyDataVarRef = purego.NewCallback(fcb)
372+ glib.SaveCallback(DestroyDataVarPtr, DestroyDataVarRef)
373+ }
374+ }
375+
376+ cret := xSignalConnectData(InstanceVar.GoPointer(), DetailedSignalVar, CHandlerVarRef, DataVar, DestroyDataVarRef, ConnectFlagsVar)
317377 return cret
318378 }
319379
@@ -634,7 +694,22 @@ var xSignalNew func(string, types.GType, SignalFlags, uint, uintptr, uintptr, ui
634694 // be used.
635695 func SignalNew(SignalNameVar string, ItypeVar types.GType, SignalFlagsVar SignalFlags, ClassOffsetVar uint, AccumulatorVar *SignalAccumulator, AccuDataVar uintptr, CMarshallerVar *SignalCMarshaller, ReturnTypeVar types.GType, NParamsVar uint, varArgs ...interface{}) uint {
636696
637- cret := xSignalNew(SignalNameVar, ItypeVar, SignalFlagsVar, ClassOffsetVar, glib.NewCallbackNullable(AccumulatorVar), AccuDataVar, glib.NewCallbackNullable(CMarshallerVar), ReturnTypeVar, NParamsVar, varArgs...)
697+ var AccumulatorVarRef uintptr
698+ if AccumulatorVar != nil {
699+ AccumulatorVarPtr := uintptr(unsafe.Pointer(AccumulatorVar))
700+ if cbRefPtr, ok := glib.GetCallback(AccumulatorVarPtr); ok {
701+ AccumulatorVarRef = cbRefPtr
702+ } else {
703+ fcb := func(arg0 *SignalInvocationHint, arg1 *Value, arg2 *Value, arg3 uintptr) bool {
704+ cbFn := *AccumulatorVar
705+ return cbFn(arg0, arg1, arg2, arg3)
706+ }
707+ AccumulatorVarRef = purego.NewCallback(fcb)
708+ glib.SaveCallback(AccumulatorVarPtr, AccumulatorVarRef)
709+ }
710+ }
711+
712+ cret := xSignalNew(SignalNameVar, ItypeVar, SignalFlagsVar, ClassOffsetVar, AccumulatorVarRef, AccuDataVar, glib.NewCallbackNullable(CMarshallerVar), ReturnTypeVar, NParamsVar, varArgs...)
638713 return cret
639714 }
640715
@@ -658,7 +733,37 @@ var xSignalNewClassHandler func(string, types.GType, SignalFlags, uintptr, uintp
658733 // the marshaller for this signal.
659734 func SignalNewClassHandler(SignalNameVar string, ItypeVar types.GType, SignalFlagsVar SignalFlags, ClassHandlerVar *Callback, AccumulatorVar *SignalAccumulator, AccuDataVar uintptr, CMarshallerVar *SignalCMarshaller, ReturnTypeVar types.GType, NParamsVar uint, varArgs ...interface{}) uint {
660735
661- cret := xSignalNewClassHandler(SignalNameVar, ItypeVar, SignalFlagsVar, glib.NewCallbackNullable(ClassHandlerVar), glib.NewCallbackNullable(AccumulatorVar), AccuDataVar, glib.NewCallbackNullable(CMarshallerVar), ReturnTypeVar, NParamsVar, varArgs...)
736+ var ClassHandlerVarRef uintptr
737+ if ClassHandlerVar != nil {
738+ ClassHandlerVarPtr := uintptr(unsafe.Pointer(ClassHandlerVar))
739+ if cbRefPtr, ok := glib.GetCallback(ClassHandlerVarPtr); ok {
740+ ClassHandlerVarRef = cbRefPtr
741+ } else {
742+ fcb := func() {
743+ cbFn := *ClassHandlerVar
744+ cbFn()
745+ }
746+ ClassHandlerVarRef = purego.NewCallback(fcb)
747+ glib.SaveCallback(ClassHandlerVarPtr, ClassHandlerVarRef)
748+ }
749+ }
750+
751+ var AccumulatorVarRef uintptr
752+ if AccumulatorVar != nil {
753+ AccumulatorVarPtr := uintptr(unsafe.Pointer(AccumulatorVar))
754+ if cbRefPtr, ok := glib.GetCallback(AccumulatorVarPtr); ok {
755+ AccumulatorVarRef = cbRefPtr
756+ } else {
757+ fcb := func(arg0 *SignalInvocationHint, arg1 *Value, arg2 *Value, arg3 uintptr) bool {
758+ cbFn := *AccumulatorVar
759+ return cbFn(arg0, arg1, arg2, arg3)
760+ }
761+ AccumulatorVarRef = purego.NewCallback(fcb)
762+ glib.SaveCallback(AccumulatorVarPtr, AccumulatorVarRef)
763+ }
764+ }
765+
766+ cret := xSignalNewClassHandler(SignalNameVar, ItypeVar, SignalFlagsVar, ClassHandlerVarRef, AccumulatorVarRef, AccuDataVar, glib.NewCallbackNullable(CMarshallerVar), ReturnTypeVar, NParamsVar, varArgs...)
662767 return cret
663768 }
664769
@@ -672,7 +777,22 @@ var xSignalNewValist func(string, types.GType, SignalFlags, *Closure, uintptr, u
672777 // the marshaller for this signal.
673778 func SignalNewValist(SignalNameVar string, ItypeVar types.GType, SignalFlagsVar SignalFlags, ClassClosureVar *Closure, AccumulatorVar *SignalAccumulator, AccuDataVar uintptr, CMarshallerVar *SignalCMarshaller, ReturnTypeVar types.GType, NParamsVar uint, ArgsVar []interface{}) uint {
674779
675- cret := xSignalNewValist(SignalNameVar, ItypeVar, SignalFlagsVar, ClassClosureVar, glib.NewCallbackNullable(AccumulatorVar), AccuDataVar, glib.NewCallbackNullable(CMarshallerVar), ReturnTypeVar, NParamsVar, ArgsVar)
780+ var AccumulatorVarRef uintptr
781+ if AccumulatorVar != nil {
782+ AccumulatorVarPtr := uintptr(unsafe.Pointer(AccumulatorVar))
783+ if cbRefPtr, ok := glib.GetCallback(AccumulatorVarPtr); ok {
784+ AccumulatorVarRef = cbRefPtr
785+ } else {
786+ fcb := func(arg0 *SignalInvocationHint, arg1 *Value, arg2 *Value, arg3 uintptr) bool {
787+ cbFn := *AccumulatorVar
788+ return cbFn(arg0, arg1, arg2, arg3)
789+ }
790+ AccumulatorVarRef = purego.NewCallback(fcb)
791+ glib.SaveCallback(AccumulatorVarPtr, AccumulatorVarRef)
792+ }
793+ }
794+
795+ cret := xSignalNewValist(SignalNameVar, ItypeVar, SignalFlagsVar, ClassClosureVar, AccumulatorVarRef, AccuDataVar, glib.NewCallbackNullable(CMarshallerVar), ReturnTypeVar, NParamsVar, ArgsVar)
676796 return cret
677797 }
678798
@@ -686,7 +806,22 @@ var xSignalNewv func(string, types.GType, SignalFlags, *Closure, uintptr, uintpt
686806 // the marshaller for this signal.
687807 func SignalNewv(SignalNameVar string, ItypeVar types.GType, SignalFlagsVar SignalFlags, ClassClosureVar *Closure, AccumulatorVar *SignalAccumulator, AccuDataVar uintptr, CMarshallerVar *SignalCMarshaller, ReturnTypeVar types.GType, NParamsVar uint, ParamTypesVar []types.GType) uint {
688808
689- cret := xSignalNewv(SignalNameVar, ItypeVar, SignalFlagsVar, ClassClosureVar, glib.NewCallbackNullable(AccumulatorVar), AccuDataVar, glib.NewCallbackNullable(CMarshallerVar), ReturnTypeVar, NParamsVar, ParamTypesVar)
809+ var AccumulatorVarRef uintptr
810+ if AccumulatorVar != nil {
811+ AccumulatorVarPtr := uintptr(unsafe.Pointer(AccumulatorVar))
812+ if cbRefPtr, ok := glib.GetCallback(AccumulatorVarPtr); ok {
813+ AccumulatorVarRef = cbRefPtr
814+ } else {
815+ fcb := func(arg0 *SignalInvocationHint, arg1 *Value, arg2 *Value, arg3 uintptr) bool {
816+ cbFn := *AccumulatorVar
817+ return cbFn(arg0, arg1, arg2, arg3)
818+ }
819+ AccumulatorVarRef = purego.NewCallback(fcb)
820+ glib.SaveCallback(AccumulatorVarPtr, AccumulatorVarRef)
821+ }
822+ }
823+
824+ cret := xSignalNewv(SignalNameVar, ItypeVar, SignalFlagsVar, ClassClosureVar, AccumulatorVarRef, AccuDataVar, glib.NewCallbackNullable(CMarshallerVar), ReturnTypeVar, NParamsVar, ParamTypesVar)
690825 return cret
691826 }
692827
@@ -717,7 +852,22 @@ var xSignalOverrideClassHandler func(string, types.GType, uintptr)
717852 // parent class closure from inside the overridden one.
718853 func SignalOverrideClassHandler(SignalNameVar string, InstanceTypeVar types.GType, ClassHandlerVar *Callback) {
719854
720- xSignalOverrideClassHandler(SignalNameVar, InstanceTypeVar, glib.NewCallback(ClassHandlerVar))
855+ var ClassHandlerVarRef uintptr
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)
867+ }
868+ }
869+
870+ xSignalOverrideClassHandler(SignalNameVar, InstanceTypeVar, ClassHandlerVarRef)
721871
722872 }
723873
M v4/gobject/gsignalgroup.go +95 -5
@@ -82,7 +82,22 @@ 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- xSignalGroupConnect(x.GoPointer(), DetailedSignalVar, glib.NewCallback(CHandlerVar), DataVar)
85+ var CHandlerVarRef uintptr
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)
97+ }
98+ }
99+
100+ xSignalGroupConnect(x.GoPointer(), DetailedSignalVar, CHandlerVarRef, DataVar)
86101
87102 }
88103
@@ -96,7 +111,22 @@ var xSignalGroupConnectAfter func(uintptr, string, uintptr, uintptr)
96111 // You cannot connect a signal handler after #GSignalGroup:target has been set.
97112 func (x *SignalGroup) ConnectAfter(DetailedSignalVar string, CHandlerVar *Callback, DataVar uintptr) {
98113
99- xSignalGroupConnectAfter(x.GoPointer(), DetailedSignalVar, glib.NewCallback(CHandlerVar), DataVar)
114+ var CHandlerVarRef uintptr
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)
126+ }
127+ }
128+
129+ xSignalGroupConnectAfter(x.GoPointer(), DetailedSignalVar, CHandlerVarRef, DataVar)
100130
101131 }
102132
@@ -119,7 +149,37 @@ var xSignalGroupConnectData func(uintptr, string, uintptr, uintptr, uintptr, Con
119149 // You cannot connect a signal handler after #GSignalGroup:target has been set.
120150 func (x *SignalGroup) ConnectData(DetailedSignalVar string, CHandlerVar *Callback, DataVar uintptr, NotifyVar *ClosureNotify, FlagsVar ConnectFlags) {
121151
122- xSignalGroupConnectData(x.GoPointer(), DetailedSignalVar, glib.NewCallback(CHandlerVar), DataVar, glib.NewCallback(NotifyVar), FlagsVar)
152+ var CHandlerVarRef uintptr
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)
164+ }
165+ }
166+
167+ var NotifyVarRef uintptr
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)
179+ }
180+ }
181+
182+ xSignalGroupConnectData(x.GoPointer(), DetailedSignalVar, CHandlerVarRef, DataVar, NotifyVarRef, FlagsVar)
123183
124184 }
125185
@@ -134,7 +194,22 @@ var xSignalGroupConnectObject func(uintptr, string, uintptr, uintptr, ConnectFla
134194 // You cannot connect a signal handler after #GSignalGroup:target has been set.
135195 func (x *SignalGroup) ConnectObject(DetailedSignalVar string, CHandlerVar *Callback, ObjectVar uintptr, FlagsVar ConnectFlags) {
136196
137- xSignalGroupConnectObject(x.GoPointer(), DetailedSignalVar, glib.NewCallback(CHandlerVar), ObjectVar, FlagsVar)
197+ var CHandlerVarRef uintptr
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)
209+ }
210+ }
211+
212+ xSignalGroupConnectObject(x.GoPointer(), DetailedSignalVar, CHandlerVarRef, ObjectVar, FlagsVar)
138213
139214 }
140215
@@ -149,7 +224,22 @@ var xSignalGroupConnectSwapped func(uintptr, string, uintptr, uintptr)
149224 // You cannot connect a signal handler after #GSignalGroup:target has been set.
150225 func (x *SignalGroup) ConnectSwapped(DetailedSignalVar string, CHandlerVar *Callback, DataVar uintptr) {
151226
152- xSignalGroupConnectSwapped(x.GoPointer(), DetailedSignalVar, glib.NewCallback(CHandlerVar), DataVar)
227+ var CHandlerVarRef uintptr
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)
239+ }
240+ }
241+
242+ xSignalGroupConnectSwapped(x.GoPointer(), DetailedSignalVar, CHandlerVarRef, DataVar)
153243
154244 }
155245
M v4/gobject/gtype.go +95 -5
@@ -810,7 +810,22 @@ var xTypeAddClassCacheFunc func(uintptr, uintptr)
810810 // chain.
811811 func TypeAddClassCacheFunc(CacheDataVar uintptr, CacheFuncVar *TypeClassCacheFunc) {
812812
813- xTypeAddClassCacheFunc(CacheDataVar, glib.NewCallback(CacheFuncVar))
813+ var CacheFuncVarRef uintptr
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)
825+ }
826+ }
827+
828+ xTypeAddClassCacheFunc(CacheDataVar, CacheFuncVarRef)
814829
815830 }
816831
@@ -853,7 +868,22 @@ var xTypeAddInterfaceCheck func(uintptr, uintptr)
853868 // interfaces.
854869 func TypeAddInterfaceCheck(CheckDataVar uintptr, CheckFuncVar *TypeInterfaceCheckFunc) {
855870
856- xTypeAddInterfaceCheck(CheckDataVar, glib.NewCallback(CheckFuncVar))
871+ var CheckFuncVarRef uintptr
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)
883+ }
884+ }
885+
886+ xTypeAddInterfaceCheck(CheckDataVar, CheckFuncVarRef)
857887
858888 }
859889
@@ -1474,7 +1504,37 @@ var xTypeRegisterStaticSimple func(types.GType, string, uint, uintptr, uint, uin
14741504 // struct and calling g_type_register_static().
14751505 func TypeRegisterStaticSimple(ParentTypeVar types.GType, TypeNameVar string, ClassSizeVar uint, ClassInitVar *ClassInitFunc, InstanceSizeVar uint, InstanceInitVar *InstanceInitFunc, FlagsVar TypeFlags) types.GType {
14761506
1477- cret := xTypeRegisterStaticSimple(ParentTypeVar, TypeNameVar, ClassSizeVar, glib.NewCallback(ClassInitVar), InstanceSizeVar, glib.NewCallback(InstanceInitVar), FlagsVar)
1507+ var ClassInitVarRef uintptr
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)
1519+ }
1520+ }
1521+
1522+ var InstanceInitVarRef uintptr
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)
1534+ }
1535+ }
1536+
1537+ cret := xTypeRegisterStaticSimple(ParentTypeVar, TypeNameVar, ClassSizeVar, ClassInitVarRef, InstanceSizeVar, InstanceInitVarRef, FlagsVar)
14781538 return cret
14791539 }
14801540
@@ -1485,7 +1545,22 @@ var xTypeRemoveClassCacheFunc func(uintptr, uintptr)
14851545 // g_type_remove_class_cache_func() to avoid leaks.
14861546 func TypeRemoveClassCacheFunc(CacheDataVar uintptr, CacheFuncVar *TypeClassCacheFunc) {
14871547
1488- xTypeRemoveClassCacheFunc(CacheDataVar, glib.NewCallback(CacheFuncVar))
1548+ var CacheFuncVarRef uintptr
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)
1560+ }
1561+ }
1562+
1563+ xTypeRemoveClassCacheFunc(CacheDataVar, CacheFuncVarRef)
14891564
14901565 }
14911566
@@ -1495,7 +1570,22 @@ var xTypeRemoveInterfaceCheck func(uintptr, uintptr)
14951570 // g_type_add_interface_check().
14961571 func TypeRemoveInterfaceCheck(CheckDataVar uintptr, CheckFuncVar *TypeInterfaceCheckFunc) {
14971572
1498- xTypeRemoveInterfaceCheck(CheckDataVar, glib.NewCallback(CheckFuncVar))
1573+ var CheckFuncVarRef uintptr
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)
1585+ }
1586+ }
1587+
1588+ xTypeRemoveInterfaceCheck(CheckDataVar, CheckFuncVarRef)
14991589
15001590 }
15011591
M v4/gobject/gvalue.go +31 -16
@@ -524,14 +524,14 @@ func (x *Value) SetInt64(VInt64Var int64) {
524524
525525 }
526526
527-var xValueSetInternedString func(uintptr, string)
527+var xValueSetInternedString func(uintptr, uintptr)
528528
529529 // Set the contents of a %G_TYPE_STRING #GValue to @v_string. The string is
530530 // assumed to be static and interned (canonical, for example from
531531 // g_intern_string()), and is thus not duplicated when setting the #GValue.
532-func (x *Value) SetInternedString(VStringVar string) {
532+func (x *Value) SetInternedString(VStringVar *string) {
533533
534- xValueSetInternedString(x.GoPointer(), VStringVar)
534+ xValueSetInternedString(x.GoPointer(), core.NullableStringToPtr(VStringVar))
535535
536536 }
537537
@@ -620,7 +620,7 @@ func (x *Value) SetStaticBoxed(VBoxedVar uintptr) {
620620
621621 }
622622
623-var xValueSetStaticString func(uintptr, string)
623+var xValueSetStaticString func(uintptr, uintptr)
624624
625625 // Set the contents of a %G_TYPE_STRING #GValue to @v_string.
626626 // The string is assumed to be static, and is thus not duplicated
@@ -628,27 +628,27 @@ var xValueSetStaticString func(uintptr, string)
628628 //
629629 // If the the string is a canonical string, using g_value_set_interned_string()
630630 // is more appropriate.
631-func (x *Value) SetStaticString(VStringVar string) {
631+func (x *Value) SetStaticString(VStringVar *string) {
632632
633- xValueSetStaticString(x.GoPointer(), VStringVar)
633+ xValueSetStaticString(x.GoPointer(), core.NullableStringToPtr(VStringVar))
634634
635635 }
636636
637-var xValueSetString func(uintptr, string)
637+var xValueSetString func(uintptr, uintptr)
638638
639639 // Set the contents of a %G_TYPE_STRING #GValue to a copy of @v_string.
640-func (x *Value) SetString(VStringVar string) {
640+func (x *Value) SetString(VStringVar *string) {
641641
642- xValueSetString(x.GoPointer(), VStringVar)
642+ xValueSetString(x.GoPointer(), core.NullableStringToPtr(VStringVar))
643643
644644 }
645645
646-var xValueSetStringTakeOwnership func(uintptr, string)
646+var xValueSetStringTakeOwnership func(uintptr, uintptr)
647647
648648 // This is an internal function introduced mainly for C marshallers.
649-func (x *Value) SetStringTakeOwnership(VStringVar string) {
649+func (x *Value) SetStringTakeOwnership(VStringVar *string) {
650650
651- xValueSetStringTakeOwnership(x.GoPointer(), VStringVar)
651+ xValueSetStringTakeOwnership(x.GoPointer(), core.NullableStringToPtr(VStringVar))
652652
653653 }
654654
@@ -752,12 +752,12 @@ func (x *Value) TakeParam(ParamVar *ParamSpec) {
752752
753753 }
754754
755-var xValueTakeString func(uintptr, string)
755+var xValueTakeString func(uintptr, uintptr)
756756
757757 // Sets the contents of a %G_TYPE_STRING #GValue to @v_string.
758-func (x *Value) TakeString(VStringVar string) {
758+func (x *Value) TakeString(VStringVar *string) {
759759
760- xValueTakeString(x.GoPointer(), VStringVar)
760+ xValueTakeString(x.GoPointer(), core.NullableStringToPtr(VStringVar))
761761
762762 }
763763
@@ -848,7 +848,22 @@ 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- xValueRegisterTransformFunc(SrcTypeVar, DestTypeVar, glib.NewCallback(TransformFuncVar))
851+ var TransformFuncVarRef uintptr
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)
863+ }
864+ }
865+
866+ xValueRegisterTransformFunc(SrcTypeVar, DestTypeVar, TransformFuncVarRef)
852867
853868 }
854869
M v4/gobject/gvaluearray.go +32 -2
@@ -145,7 +145,22 @@ var xValueArraySort func(uintptr, uintptr) *ValueArray
145145 // C qsort() function.
146146 func (x *ValueArray) Sort(CompareFuncVar *glib.CompareFunc) *ValueArray {
147147
148- cret := xValueArraySort(x.GoPointer(), glib.NewCallback(CompareFuncVar))
148+ var CompareFuncVarRef uintptr
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)
160+ }
161+ }
162+
163+ cret := xValueArraySort(x.GoPointer(), CompareFuncVarRef)
149164 return cret
150165 }
151166
@@ -158,7 +173,22 @@ var xValueArraySortWithData func(uintptr, uintptr, uintptr) *ValueArray
158173 // C qsort() function.
159174 func (x *ValueArray) SortWithData(CompareFuncVar *glib.CompareDataFunc, UserDataVar uintptr) *ValueArray {
160175
161- cret := xValueArraySortWithData(x.GoPointer(), glib.NewCallback(CompareFuncVar), UserDataVar)
176+ var CompareFuncVarRef uintptr
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)
188+ }
189+ }
190+
191+ cret := xValueArraySortWithData(x.GoPointer(), CompareFuncVarRef, UserDataVar)
162192 return cret
163193 }
164194
M v4/gsk/gskglshader.go +1 -1
@@ -585,7 +585,7 @@ func (c *GLShader) SetGoPointer(ptr uintptr) {
585585 func (x *GLShader) SetPropertyResource(value string) {
586586 var v gobject.Value
587587 v.Init(gobject.TypeStringVal)
588- v.SetString(value)
588+ v.SetString(&value)
589589 x.SetProperty("resource", &v)
590590 }
591591
M v4/gsk/gskrendernode.go +16 -1
@@ -298,7 +298,22 @@ var xRenderNodeDeserialize func(*glib.Bytes, uintptr, uintptr) uintptr
298298 func RenderNodeDeserialize(BytesVar *glib.Bytes, ErrorFuncVar *ParseErrorFunc, UserDataVar uintptr) *RenderNode {
299299 var cls *RenderNode
300300
301- cret := xRenderNodeDeserialize(BytesVar, glib.NewCallbackNullable(ErrorFuncVar), UserDataVar)
301+ var ErrorFuncVarRef uintptr
302+ if ErrorFuncVar != nil {
303+ ErrorFuncVarPtr := uintptr(unsafe.Pointer(ErrorFuncVar))
304+ if cbRefPtr, ok := glib.GetCallback(ErrorFuncVarPtr); ok {
305+ ErrorFuncVarRef = cbRefPtr
306+ } else {
307+ fcb := func(arg0 *ParseLocation, arg1 *ParseLocation, arg2 *glib.Error, arg3 uintptr) {
308+ cbFn := *ErrorFuncVar
309+ cbFn(arg0, arg1, arg2, arg3)
310+ }
311+ ErrorFuncVarRef = purego.NewCallback(fcb)
312+ glib.SaveCallback(ErrorFuncVarPtr, ErrorFuncVarRef)
313+ }
314+ }
315+
316+ cret := xRenderNodeDeserialize(BytesVar, ErrorFuncVarRef, UserDataVar)
302317
303318 if cret == 0 {
304319 return nil
M v4/gsk/gsktypes.go +32 -2
@@ -247,7 +247,22 @@ 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- cret := xPathForeach(x.GoPointer(), FlagsVar, glib.NewCallback(FuncVar), UserDataVar)
250+ var FuncVarRef uintptr
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)
262+ }
263+ }
264+
265+ cret := xPathForeach(x.GoPointer(), FlagsVar, FuncVarRef, UserDataVar)
251266 return cret
252267 }
253268
@@ -270,7 +285,22 @@ var xPathForeachIntersection func(uintptr, *Path, uintptr, uintptr) bool
270285 // If @func returns `FALSE`, the iteration is stopped.
271286 func (x *Path) ForeachIntersection(Path2Var *Path, FuncVar *PathIntersectionFunc, UserDataVar uintptr) bool {
272287
273- cret := xPathForeachIntersection(x.GoPointer(), Path2Var, glib.NewCallback(FuncVar), UserDataVar)
288+ var FuncVarRef uintptr
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)
300+ }
301+ }
302+
303+ cret := xPathForeachIntersection(x.GoPointer(), Path2Var, FuncVarRef, UserDataVar)
274304 return cret
275305 }
276306
M v4/gtk/gtkaboutdialog.go +37 -37
@@ -357,25 +357,25 @@ func (x *AboutDialog) SetAuthors(AuthorsVar []string) {
357357
358358 }
359359
360-var xAboutDialogSetComments func(uintptr, string)
360+var xAboutDialogSetComments func(uintptr, uintptr)
361361
362362 // Sets the comments string to display in the about dialog.
363363 //
364364 // This should be a short string of one or two lines.
365-func (x *AboutDialog) SetComments(CommentsVar string) {
365+func (x *AboutDialog) SetComments(CommentsVar *string) {
366366
367- xAboutDialogSetComments(x.GoPointer(), CommentsVar)
367+ xAboutDialogSetComments(x.GoPointer(), core.NullableStringToPtr(CommentsVar))
368368
369369 }
370370
371-var xAboutDialogSetCopyright func(uintptr, string)
371+var xAboutDialogSetCopyright func(uintptr, uintptr)
372372
373373 // Sets the copyright string to display in the about dialog.
374374 //
375375 // This should be a short string of one or two lines.
376-func (x *AboutDialog) SetCopyright(CopyrightVar string) {
376+func (x *AboutDialog) SetCopyright(CopyrightVar *string) {
377377
378- xAboutDialogSetCopyright(x.GoPointer(), CopyrightVar)
378+ xAboutDialogSetCopyright(x.GoPointer(), core.NullableStringToPtr(CopyrightVar))
379379
380380 }
381381
@@ -389,15 +389,15 @@ func (x *AboutDialog) SetDocumenters(DocumentersVar []string) {
389389
390390 }
391391
392-var xAboutDialogSetLicense func(uintptr, string)
392+var xAboutDialogSetLicense func(uintptr, uintptr)
393393
394394 // Sets the license information to be displayed in the
395395 // about dialog.
396396 //
397397 // If `license` is `NULL`, the license page is hidden.
398-func (x *AboutDialog) SetLicense(LicenseVar string) {
398+func (x *AboutDialog) SetLicense(LicenseVar *string) {
399399
400- xAboutDialogSetLicense(x.GoPointer(), LicenseVar)
400+ xAboutDialogSetLicense(x.GoPointer(), core.NullableStringToPtr(LicenseVar))
401401
402402 }
403403
@@ -423,28 +423,28 @@ func (x *AboutDialog) SetLogo(LogoVar gdk.Paintable) {
423423
424424 }
425425
426-var xAboutDialogSetLogoIconName func(uintptr, string)
426+var xAboutDialogSetLogoIconName func(uintptr, uintptr)
427427
428428 // Sets the icon name to be displayed as logo in the about dialog.
429-func (x *AboutDialog) SetLogoIconName(IconNameVar string) {
429+func (x *AboutDialog) SetLogoIconName(IconNameVar *string) {
430430
431- xAboutDialogSetLogoIconName(x.GoPointer(), IconNameVar)
431+ xAboutDialogSetLogoIconName(x.GoPointer(), core.NullableStringToPtr(IconNameVar))
432432
433433 }
434434
435-var xAboutDialogSetProgramName func(uintptr, string)
435+var xAboutDialogSetProgramName func(uintptr, uintptr)
436436
437437 // Sets the name to display in the about dialog.
438438 //
439439 // If `name` is not set, the string returned
440440 // by `g_get_application_name()` is used.
441-func (x *AboutDialog) SetProgramName(NameVar string) {
441+func (x *AboutDialog) SetProgramName(NameVar *string) {
442442
443- xAboutDialogSetProgramName(x.GoPointer(), NameVar)
443+ xAboutDialogSetProgramName(x.GoPointer(), core.NullableStringToPtr(NameVar))
444444
445445 }
446446
447-var xAboutDialogSetSystemInformation func(uintptr, string)
447+var xAboutDialogSetSystemInformation func(uintptr, uintptr)
448448
449449 // Sets the system information to be displayed in the about
450450 // dialog.
@@ -453,13 +453,13 @@ var xAboutDialogSetSystemInformation func(uintptr, string)
453453 // page is hidden.
454454 //
455455 // See [property@Gtk.AboutDialog:system-information].
456-func (x *AboutDialog) SetSystemInformation(SystemInformationVar string) {
456+func (x *AboutDialog) SetSystemInformation(SystemInformationVar *string) {
457457
458- xAboutDialogSetSystemInformation(x.GoPointer(), SystemInformationVar)
458+ xAboutDialogSetSystemInformation(x.GoPointer(), core.NullableStringToPtr(SystemInformationVar))
459459
460460 }
461461
462-var xAboutDialogSetTranslatorCredits func(uintptr, string)
462+var xAboutDialogSetTranslatorCredits func(uintptr, uintptr)
463463
464464 // Sets the translator credits string which is displayed in
465465 // the credits page.
@@ -481,27 +481,27 @@ var xAboutDialogSetTranslatorCredits func(uintptr, string)
481481 // for this purpose, since translators will already know the purpose of
482482 // that `msgid`, and since `GtkAboutDialog` will detect if “translator-credits”
483483 // is untranslated and omit translator credits.
484-func (x *AboutDialog) SetTranslatorCredits(TranslatorCreditsVar string) {
484+func (x *AboutDialog) SetTranslatorCredits(TranslatorCreditsVar *string) {
485485
486- xAboutDialogSetTranslatorCredits(x.GoPointer(), TranslatorCreditsVar)
486+ xAboutDialogSetTranslatorCredits(x.GoPointer(), core.NullableStringToPtr(TranslatorCreditsVar))
487487
488488 }
489489
490-var xAboutDialogSetVersion func(uintptr, string)
490+var xAboutDialogSetVersion func(uintptr, uintptr)
491491
492492 // Sets the version string to display in the about dialog.
493-func (x *AboutDialog) SetVersion(VersionVar string) {
493+func (x *AboutDialog) SetVersion(VersionVar *string) {
494494
495- xAboutDialogSetVersion(x.GoPointer(), VersionVar)
495+ xAboutDialogSetVersion(x.GoPointer(), core.NullableStringToPtr(VersionVar))
496496
497497 }
498498
499-var xAboutDialogSetWebsite func(uintptr, string)
499+var xAboutDialogSetWebsite func(uintptr, uintptr)
500500
501501 // Sets the URL to use for the website link.
502-func (x *AboutDialog) SetWebsite(WebsiteVar string) {
502+func (x *AboutDialog) SetWebsite(WebsiteVar *string) {
503503
504- xAboutDialogSetWebsite(x.GoPointer(), WebsiteVar)
504+ xAboutDialogSetWebsite(x.GoPointer(), core.NullableStringToPtr(WebsiteVar))
505505
506506 }
507507
@@ -590,7 +590,7 @@ func (x *AboutDialog) GetPropertyAuthors() []string {
590590 func (x *AboutDialog) SetPropertyComments(value string) {
591591 var v gobject.Value
592592 v.Init(gobject.TypeStringVal)
593- v.SetString(value)
593+ v.SetString(&value)
594594 x.SetProperty("comments", &v)
595595 }
596596
@@ -611,7 +611,7 @@ func (x *AboutDialog) GetPropertyComments() string {
611611 func (x *AboutDialog) SetPropertyCopyright(value string) {
612612 var v gobject.Value
613613 v.Init(gobject.TypeStringVal)
614- v.SetString(value)
614+ v.SetString(&value)
615615 x.SetProperty("copyright", &v)
616616 }
617617
@@ -664,7 +664,7 @@ func (x *AboutDialog) GetPropertyDocumenters() []string {
664664 func (x *AboutDialog) SetPropertyLicense(value string) {
665665 var v gobject.Value
666666 v.Init(gobject.TypeStringVal)
667- v.SetString(value)
667+ v.SetString(&value)
668668 x.SetProperty("license", &v)
669669 }
670670
@@ -696,7 +696,7 @@ func (x *AboutDialog) GetPropertyLicense() string {
696696 func (x *AboutDialog) SetPropertyLogoIconName(value string) {
697697 var v gobject.Value
698698 v.Init(gobject.TypeStringVal)
699- v.SetString(value)
699+ v.SetString(&value)
700700 x.SetProperty("logo-icon-name", &v)
701701 }
702702
@@ -718,7 +718,7 @@ func (x *AboutDialog) GetPropertyLogoIconName() string {
718718 func (x *AboutDialog) SetPropertyProgramName(value string) {
719719 var v gobject.Value
720720 v.Init(gobject.TypeStringVal)
721- v.SetString(value)
721+ v.SetString(&value)
722722 x.SetProperty("program-name", &v)
723723 }
724724
@@ -746,7 +746,7 @@ func (x *AboutDialog) GetPropertyProgramName() string {
746746 func (x *AboutDialog) SetPropertySystemInformation(value string) {
747747 var v gobject.Value
748748 v.Init(gobject.TypeStringVal)
749- v.SetString(value)
749+ v.SetString(&value)
750750 x.SetProperty("system-information", &v)
751751 }
752752
@@ -776,7 +776,7 @@ func (x *AboutDialog) GetPropertySystemInformation() string {
776776 func (x *AboutDialog) SetPropertyTranslatorCredits(value string) {
777777 var v gobject.Value
778778 v.Init(gobject.TypeStringVal)
779- v.SetString(value)
779+ v.SetString(&value)
780780 x.SetProperty("translator-credits", &v)
781781 }
782782
@@ -798,7 +798,7 @@ func (x *AboutDialog) GetPropertyTranslatorCredits() string {
798798 func (x *AboutDialog) SetPropertyVersion(value string) {
799799 var v gobject.Value
800800 v.Init(gobject.TypeStringVal)
801- v.SetString(value)
801+ v.SetString(&value)
802802 x.SetProperty("version", &v)
803803 }
804804
@@ -817,7 +817,7 @@ func (x *AboutDialog) GetPropertyVersion() string {
817817 func (x *AboutDialog) SetPropertyWebsite(value string) {
818818 var v gobject.Value
819819 v.Init(gobject.TypeStringVal)
820- v.SetString(value)
820+ v.SetString(&value)
821821 x.SetProperty("website", &v)
822822 }
823823
@@ -836,7 +836,7 @@ func (x *AboutDialog) GetPropertyWebsite() string {
836836 func (x *AboutDialog) SetPropertyWebsiteLabel(value string) {
837837 var v gobject.Value
838838 v.Init(gobject.TypeStringVal)
839- v.SetString(value)
839+ v.SetString(&value)
840840 x.SetProperty("website-label", &v)
841841 }
842842
M v4/gtk/gtkactionable.go +5 -5
@@ -148,7 +148,7 @@ type Actionable interface {
148148 SetGoPointer(uintptr)
149149 GetActionName() string
150150 GetActionTargetValue() *glib.Variant
151- SetActionName(ActionNameVar string)
151+ SetActionName(ActionNameVar *string)
152152 SetActionTarget(FormatStringVar string, varArgs ...interface{})
153153 SetActionTargetValue(TargetValueVar *glib.Variant)
154154 SetDetailedActionName(DetailedActionNameVar string)
@@ -202,9 +202,9 @@ func (x *ActionableBase) GetActionTargetValue() *glib.Variant {
202202 // containing [class@ApplicationWindow] or its associated [class@Application],
203203 // respectively. This is the same form used for actions in the [class@Gio.Menu]
204204 // associated with the window.
205-func (x *ActionableBase) SetActionName(ActionNameVar string) {
205+func (x *ActionableBase) SetActionName(ActionNameVar *string) {
206206
207- XGtkActionableSetActionName(x.GoPointer(), ActionNameVar)
207+ XGtkActionableSetActionName(x.GoPointer(), core.NullableStringToPtr(ActionNameVar))
208208
209209 }
210210
@@ -265,7 +265,7 @@ func (x *ActionableBase) SetPropertyActionName(value string) {
265265 obj.Ptr = x.GoPointer()
266266 var v gobject.Value
267267 v.Init(gobject.TypeStringVal)
268- v.SetString(value)
268+ v.SetString(&value)
269269 obj.SetProperty("action-name", &v)
270270 }
271271
@@ -302,7 +302,7 @@ func (x *ActionableBase) GetPropertyActionTarget() uintptr {
302302
303303 var XGtkActionableGetActionName func(uintptr) string
304304 var XGtkActionableGetActionTargetValue func(uintptr) *glib.Variant
305-var XGtkActionableSetActionName func(uintptr, string)
305+var XGtkActionableSetActionName func(uintptr, uintptr)
306306 var XGtkActionableSetActionTarget func(uintptr, string, ...interface{})
307307 var XGtkActionableSetActionTargetValue func(uintptr, *glib.Variant)
308308 var XGtkActionableSetDetailedActionName func(uintptr, string)
M v4/gtk/gtkalertdialog.go +18 -3
@@ -74,7 +74,22 @@ var xAlertDialogChoose func(uintptr, uintptr, uintptr, uintptr, uintptr)
7474 // this case is [method@Gtk.AlertDialog.show].
7575 func (x *AlertDialog) Choose(ParentVar *Window, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) {
7676
77- xAlertDialogChoose(x.GoPointer(), ParentVar.GoPointer(), CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
77+ var CallbackVarRef uintptr
78+ if CallbackVar != nil {
79+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
80+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
81+ CallbackVarRef = cbRefPtr
82+ } else {
83+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
84+ cbFn := *CallbackVar
85+ cbFn(arg0, arg1, arg2)
86+ }
87+ CallbackVarRef = purego.NewCallback(fcb)
88+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
89+ }
90+ }
91+
92+ xAlertDialogChoose(x.GoPointer(), ParentVar.GoPointer(), CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
7893
7994 }
8095
@@ -335,7 +350,7 @@ func (x *AlertDialog) GetPropertyDefaultButton() int {
335350 func (x *AlertDialog) SetPropertyDetail(value string) {
336351 var v gobject.Value
337352 v.Init(gobject.TypeStringVal)
338- v.SetString(value)
353+ v.SetString(&value)
339354 x.SetProperty("detail", &v)
340355 }
341356
@@ -352,7 +367,7 @@ func (x *AlertDialog) GetPropertyDetail() string {
352367 func (x *AlertDialog) SetPropertyMessage(value string) {
353368 var v gobject.Value
354369 v.Init(gobject.TypeStringVal)
355- v.SetString(value)
370+ v.SetString(&value)
356371 x.SetProperty("message", &v)
357372 }
358373
M v4/gtk/gtkappchooser.go +1 -1
@@ -95,7 +95,7 @@ func (x *AppChooserBase) SetPropertyContentType(value string) {
9595 obj.Ptr = x.GoPointer()
9696 var v gobject.Value
9797 v.Init(gobject.TypeStringVal)
98- v.SetString(value)
98+ v.SetString(&value)
9999 obj.SetProperty("content-type", &v)
100100 }
101101
M v4/gtk/gtkappchooserbutton.go +24 -1
@@ -2,6 +2,7 @@
22 package gtk
33
44 import (
5+ "fmt"
56 "unsafe"
67
78 "github.com/jwijenbergh/purego"
@@ -216,7 +217,7 @@ func (c *AppChooserButton) SetGoPointer(ptr uintptr) {
216217 func (x *AppChooserButton) SetPropertyHeading(value string) {
217218 var v gobject.Value
218219 v.Init(gobject.TypeStringVal)
219- v.SetString(value)
220+ v.SetString(&value)
220221 x.SetProperty("heading", &v)
221222 }
222223
@@ -352,6 +353,28 @@ func (x *AppChooserButton) ConnectCustomItemActivated(cb *func(AppChooserButton,
352353 return gobject.SignalConnect(x.GoPointer(), "custom-item-activated", cbRefPtr)
353354 }
354355
356+// ConnectCustomItemActivatedWithDetail connects to the "custom-item-activated" signal with a detail string.
357+// The detail is appended as "custom-item-activated::<detail>".
358+func (x *AppChooserButton) ConnectCustomItemActivatedWithDetail(detail string, cb *func(AppChooserButton, string)) uint32 {
359+ cbPtr := uintptr(unsafe.Pointer(cb))
360+ signalName := fmt.Sprintf("custom-item-activated::%s", detail)
361+ if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
362+ return gobject.SignalConnect(x.GoPointer(), signalName, cbRefPtr)
363+ }
364+
365+ fcb := func(clsPtr uintptr, ItemNameVarp string) {
366+ fa := AppChooserButton{}
367+ fa.Ptr = clsPtr
368+ cbFn := *cb
369+
370+ cbFn(fa, ItemNameVarp)
371+
372+ }
373+ cbRefPtr := purego.NewCallback(fcb)
374+ glib.SaveCallback(cbPtr, cbRefPtr)
375+ return gobject.SignalConnect(x.GoPointer(), signalName, cbRefPtr)
376+}
377+
355378 // Requests the user's screen reader to announce the given message.
356379 //
357380 // This kind of notification is useful for messages that
M v4/gtk/gtkappchooserdialog.go +1 -1
@@ -142,7 +142,7 @@ func (c *AppChooserDialog) SetGoPointer(ptr uintptr) {
142142 func (x *AppChooserDialog) SetPropertyHeading(value string) {
143143 var v gobject.Value
144144 v.Init(gobject.TypeStringVal)
145- v.SetString(value)
145+ v.SetString(&value)
146146 x.SetProperty("heading", &v)
147147 }
148148
M v4/gtk/gtkappchooserwidget.go +1 -1
@@ -206,7 +206,7 @@ func (c *AppChooserWidget) SetGoPointer(ptr uintptr) {
206206 func (x *AppChooserWidget) SetPropertyDefaultText(value string) {
207207 var v gobject.Value
208208 v.Init(gobject.TypeStringVal)
209- v.SetString(value)
209+ v.SetString(&value)
210210 x.SetProperty("default-text", &v)
211211 }
212212
M v4/gtk/gtkapplication.go +6 -6
@@ -199,7 +199,7 @@ func ApplicationNewFromInternalPtr(ptr uintptr) *Application {
199199 return cls
200200 }
201201
202-var xNewApplication func(string, gio.ApplicationFlags) uintptr
202+var xNewApplication func(uintptr, gio.ApplicationFlags) uintptr
203203
204204 // Creates a new application instance.
205205 //
@@ -219,10 +219,10 @@ var xNewApplication func(string, gio.ApplicationFlags) uintptr
219219 //
220220 // If no application ID is given then some features (most notably application
221221 // uniqueness) will be disabled.
222-func NewApplication(ApplicationIdVar string, FlagsVar gio.ApplicationFlags) *Application {
222+func NewApplication(ApplicationIdVar *string, FlagsVar gio.ApplicationFlags) *Application {
223223 var cls *Application
224224
225- cret := xNewApplication(ApplicationIdVar, FlagsVar)
225+ cret := xNewApplication(core.NullableStringToPtr(ApplicationIdVar), FlagsVar)
226226
227227 if cret == 0 {
228228 return nil
@@ -385,7 +385,7 @@ func (x *Application) GetWindows() *glib.List {
385385 return cret
386386 }
387387
388-var xApplicationInhibit func(uintptr, uintptr, ApplicationInhibitFlags, string) uint
388+var xApplicationInhibit func(uintptr, uintptr, ApplicationInhibitFlags, uintptr) uint
389389
390390 // Informs the session manager that certain types of actions should be
391391 // inhibited.
@@ -414,9 +414,9 @@ var xApplicationInhibit func(uintptr, uintptr, ApplicationInhibitFlags, string)
414414 // The cookie that is returned by this function should be used as an
415415 // argument to [method@Gtk.Application.uninhibit] in order to remove
416416 // the request.
417-func (x *Application) Inhibit(WindowVar *Window, FlagsVar ApplicationInhibitFlags, ReasonVar string) uint {
417+func (x *Application) Inhibit(WindowVar *Window, FlagsVar ApplicationInhibitFlags, ReasonVar *string) uint {
418418
419- cret := xApplicationInhibit(x.GoPointer(), WindowVar.GoPointer(), FlagsVar, ReasonVar)
419+ cret := xApplicationInhibit(x.GoPointer(), WindowVar.GoPointer(), FlagsVar, core.NullableStringToPtr(ReasonVar))
420420 return cret
421421 }
422422
M v4/gtk/gtkassistant.go +32 -2
@@ -360,7 +360,37 @@ var xAssistantSetForwardPageFunc func(uintptr, uintptr, uintptr, uintptr)
360360 // next visible page.
361361 func (x *Assistant) SetForwardPageFunc(PageFuncVar *AssistantPageFunc, DataVar uintptr, DestroyVar *glib.DestroyNotify) {
362362
363- xAssistantSetForwardPageFunc(x.GoPointer(), glib.NewCallbackNullable(PageFuncVar), DataVar, glib.NewCallback(DestroyVar))
363+ var PageFuncVarRef uintptr
364+ if PageFuncVar != nil {
365+ PageFuncVarPtr := uintptr(unsafe.Pointer(PageFuncVar))
366+ if cbRefPtr, ok := glib.GetCallback(PageFuncVarPtr); ok {
367+ PageFuncVarRef = cbRefPtr
368+ } else {
369+ fcb := func(arg0 int, arg1 uintptr) int {
370+ cbFn := *PageFuncVar
371+ return cbFn(arg0, arg1)
372+ }
373+ PageFuncVarRef = purego.NewCallback(fcb)
374+ glib.SaveCallback(PageFuncVarPtr, PageFuncVarRef)
375+ }
376+ }
377+
378+ var DestroyVarRef uintptr
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)
390+ }
391+ }
392+
393+ xAssistantSetForwardPageFunc(x.GoPointer(), PageFuncVarRef, DataVar, DestroyVarRef)
364394
365395 }
366396
@@ -1026,7 +1056,7 @@ func (x *AssistantPage) GetPropertyComplete() bool {
10261056 func (x *AssistantPage) SetPropertyTitle(value string) {
10271057 var v gobject.Value
10281058 v.Init(gobject.TypeStringVal)
1029- v.SetString(value)
1059+ v.SetString(&value)
10301060 x.SetProperty("title", &v)
10311061 }
10321062
M v4/gtk/gtkbookmarklist.go +8 -8
@@ -46,13 +46,13 @@ func BookmarkListNewFromInternalPtr(ptr uintptr) *BookmarkList {
4646 return cls
4747 }
4848
49-var xNewBookmarkList func(string, string) uintptr
49+var xNewBookmarkList func(uintptr, uintptr) uintptr
5050
5151 // Creates a new `GtkBookmarkList` with the given @attributes.
52-func NewBookmarkList(FilenameVar string, AttributesVar string) *BookmarkList {
52+func NewBookmarkList(FilenameVar *string, AttributesVar *string) *BookmarkList {
5353 var cls *BookmarkList
5454
55- cret := xNewBookmarkList(FilenameVar, AttributesVar)
55+ cret := xNewBookmarkList(core.NullableStringToPtr(FilenameVar), core.NullableStringToPtr(AttributesVar))
5656
5757 if cret == 0 {
5858 return nil
@@ -103,15 +103,15 @@ func (x *BookmarkList) IsLoading() bool {
103103 return cret
104104 }
105105
106-var xBookmarkListSetAttributes func(uintptr, string)
106+var xBookmarkListSetAttributes func(uintptr, uintptr)
107107
108108 // Sets the @attributes to be enumerated and starts the enumeration.
109109 //
110110 // If @attributes is %NULL, no attributes will be queried, but a list
111111 // of `GFileInfo`s will still be created.
112-func (x *BookmarkList) SetAttributes(AttributesVar string) {
112+func (x *BookmarkList) SetAttributes(AttributesVar *string) {
113113
114- xBookmarkListSetAttributes(x.GoPointer(), AttributesVar)
114+ xBookmarkListSetAttributes(x.GoPointer(), core.NullableStringToPtr(AttributesVar))
115115
116116 }
117117
@@ -142,7 +142,7 @@ func (c *BookmarkList) SetGoPointer(ptr uintptr) {
142142 func (x *BookmarkList) SetPropertyAttributes(value string) {
143143 var v gobject.Value
144144 v.Init(gobject.TypeStringVal)
145- v.SetString(value)
145+ v.SetString(&value)
146146 x.SetProperty("attributes", &v)
147147 }
148148
@@ -159,7 +159,7 @@ func (x *BookmarkList) GetPropertyAttributes() string {
159159 func (x *BookmarkList) SetPropertyFilename(value string) {
160160 var v gobject.Value
161161 v.Init(gobject.TypeStringVal)
162- v.SetString(value)
162+ v.SetString(&value)
163163 x.SetProperty("filename", &v)
164164 }
165165
M v4/gtk/gtkbuilder.go +4 -4
@@ -888,12 +888,12 @@ func (x *Builder) SetScope(ScopeVar BuilderScope) {
888888
889889 }
890890
891-var xBuilderSetTranslationDomain func(uintptr, string)
891+var xBuilderSetTranslationDomain func(uintptr, uintptr)
892892
893893 // Sets the translation domain of @builder.
894-func (x *Builder) SetTranslationDomain(DomainVar string) {
894+func (x *Builder) SetTranslationDomain(DomainVar *string) {
895895
896- xBuilderSetTranslationDomain(x.GoPointer(), DomainVar)
896+ xBuilderSetTranslationDomain(x.GoPointer(), core.NullableStringToPtr(DomainVar))
897897
898898 }
899899
@@ -964,7 +964,7 @@ func (c *Builder) SetGoPointer(ptr uintptr) {
964964 func (x *Builder) SetPropertyTranslationDomain(value string) {
965965 var v gobject.Value
966966 v.Init(gobject.TypeStringVal)
967- v.SetString(value)
967+ v.SetString(&value)
968968 x.SetProperty("translation-domain", &v)
969969 }
970970
M v4/gtk/gtkbuilderlistitemfactory.go +1 -1
@@ -172,7 +172,7 @@ func (x *BuilderListItemFactory) GetPropertyBytes() uintptr {
172172 func (x *BuilderListItemFactory) SetPropertyResource(value string) {
173173 var v gobject.Value
174174 v.Init(gobject.TypeStringVal)
175- v.SetString(value)
175+ v.SetString(&value)
176176 x.SetProperty("resource", &v)
177177 }
178178
M v4/gtk/gtkbuilderscope.go +32 -2
@@ -274,7 +274,22 @@ var xBuilderCScopeAddCallbackSymbol func(uintptr, string, uintptr)
274274 // namespace.
275275 func (x *BuilderCScope) AddCallbackSymbol(CallbackNameVar string, CallbackSymbolVar *gobject.Callback) {
276276
277- xBuilderCScopeAddCallbackSymbol(x.GoPointer(), CallbackNameVar, glib.NewCallback(CallbackSymbolVar))
277+ var CallbackSymbolVarRef uintptr
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)
289+ }
290+ }
291+
292+ xBuilderCScopeAddCallbackSymbol(x.GoPointer(), CallbackNameVar, CallbackSymbolVarRef)
278293
279294 }
280295
@@ -286,7 +301,22 @@ var xBuilderCScopeAddCallbackSymbols func(uintptr, string, uintptr, ...interface
286301 // for each symbol.
287302 func (x *BuilderCScope) AddCallbackSymbols(FirstCallbackNameVar string, FirstCallbackSymbolVar *gobject.Callback, varArgs ...interface{}) {
288303
289- xBuilderCScopeAddCallbackSymbols(x.GoPointer(), FirstCallbackNameVar, glib.NewCallback(FirstCallbackSymbolVar), varArgs...)
304+ var FirstCallbackSymbolVarRef uintptr
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)
316+ }
317+ }
318+
319+ xBuilderCScopeAddCallbackSymbols(x.GoPointer(), FirstCallbackNameVar, FirstCallbackSymbolVarRef, varArgs...)
290320
291321 }
292322
M v4/gtk/gtkbutton.go +4 -4
@@ -438,7 +438,7 @@ func (x *Button) GetPropertyHasFrame() bool {
438438 func (x *Button) SetPropertyIconName(value string) {
439439 var v gobject.Value
440440 v.Init(gobject.TypeStringVal)
441- v.SetString(value)
441+ v.SetString(&value)
442442 x.SetProperty("icon-name", &v)
443443 }
444444
@@ -455,7 +455,7 @@ func (x *Button) GetPropertyIconName() string {
455455 func (x *Button) SetPropertyLabel(value string) {
456456 var v gobject.Value
457457 v.Init(gobject.TypeStringVal)
458- v.SetString(value)
458+ v.SetString(&value)
459459 x.SetProperty("label", &v)
460460 }
461461
@@ -827,9 +827,9 @@ func (x *Button) GetActionTargetValue() *glib.Variant {
827827 // containing [class@ApplicationWindow] or its associated [class@Application],
828828 // respectively. This is the same form used for actions in the [class@Gio.Menu]
829829 // associated with the window.
830-func (x *Button) SetActionName(ActionNameVar string) {
830+func (x *Button) SetActionName(ActionNameVar *string) {
831831
832- XGtkActionableSetActionName(x.GoPointer(), ActionNameVar)
832+ XGtkActionableSetActionName(x.GoPointer(), core.NullableStringToPtr(ActionNameVar))
833833
834834 }
835835
M v4/gtk/gtkcellarea.go +32 -2
@@ -1299,7 +1299,22 @@ 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- xCellAreaForeach(x.GoPointer(), glib.NewCallback(CallbackVar), CallbackDataVar)
1302+ var CallbackVarRef uintptr
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)
1314+ }
1315+ }
1316+
1317+ xCellAreaForeach(x.GoPointer(), CallbackVarRef, CallbackDataVar)
13031318
13041319 }
13051320
@@ -1309,7 +1324,22 @@ var xCellAreaForeachAlloc func(uintptr, uintptr, uintptr, *gdk.Rectangle, *gdk.R
13091324 // allocated rectangle inside @cell_area.
13101325 func (x *CellArea) ForeachAlloc(ContextVar *CellAreaContext, WidgetVar *Widget, CellAreaVar *gdk.Rectangle, BackgroundAreaVar *gdk.Rectangle, CallbackVar *CellAllocCallback, CallbackDataVar uintptr) {
13111326
1312- xCellAreaForeachAlloc(x.GoPointer(), ContextVar.GoPointer(), WidgetVar.GoPointer(), CellAreaVar, BackgroundAreaVar, glib.NewCallback(CallbackVar), CallbackDataVar)
1327+ var CallbackVarRef uintptr
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)
1339+ }
1340+ }
1341+
1342+ xCellAreaForeachAlloc(x.GoPointer(), ContextVar.GoPointer(), WidgetVar.GoPointer(), CellAreaVar, BackgroundAreaVar, CallbackVarRef, CallbackDataVar)
13131343
13141344 }
13151345
M v4/gtk/gtkcellrenderer.go +1 -1
@@ -743,7 +743,7 @@ func (c *CellRenderer) SetGoPointer(ptr uintptr) {
743743 func (x *CellRenderer) SetPropertyCellBackground(value string) {
744744 var v gobject.Value
745745 v.Init(gobject.TypeStringVal)
746- v.SetString(value)
746+ v.SetString(&value)
747747 x.SetProperty("cell-background", &v)
748748 }
749749
M v4/gtk/gtkcellrendererpixbuf.go +1 -1
@@ -78,7 +78,7 @@ func (c *CellRendererPixbuf) SetGoPointer(ptr uintptr) {
7878 func (x *CellRendererPixbuf) SetPropertyIconName(value string) {
7979 var v gobject.Value
8080 v.Init(gobject.TypeStringVal)
81- v.SetString(value)
81+ v.SetString(&value)
8282 x.SetProperty("icon-name", &v)
8383 }
8484
M v4/gtk/gtkcellrendererprogress.go +1 -1
@@ -116,7 +116,7 @@ func (x *CellRendererProgress) GetPropertyPulse() int {
116116 func (x *CellRendererProgress) SetPropertyText(value string) {
117117 var v gobject.Value
118118 v.Init(gobject.TypeStringVal)
119- v.SetString(value)
119+ v.SetString(&value)
120120 x.SetProperty("text", &v)
121121 }
122122
M v4/gtk/gtkcellrenderertext.go +8 -8
@@ -156,7 +156,7 @@ func (x *CellRendererText) GetPropertyAttributes() uintptr {
156156 func (x *CellRendererText) SetPropertyBackground(value string) {
157157 var v gobject.Value
158158 v.Init(gobject.TypeStringVal)
159- v.SetString(value)
159+ v.SetString(&value)
160160 x.SetProperty("background", &v)
161161 }
162162
@@ -241,7 +241,7 @@ func (x *CellRendererText) GetPropertyEllipsizeSet() bool {
241241 func (x *CellRendererText) SetPropertyFamily(value string) {
242242 var v gobject.Value
243243 v.Init(gobject.TypeStringVal)
244- v.SetString(value)
244+ v.SetString(&value)
245245 x.SetProperty("family", &v)
246246 }
247247
@@ -271,7 +271,7 @@ func (x *CellRendererText) GetPropertyFamilySet() bool {
271271 func (x *CellRendererText) SetPropertyFont(value string) {
272272 var v gobject.Value
273273 v.Init(gobject.TypeStringVal)
274- v.SetString(value)
274+ v.SetString(&value)
275275 x.SetProperty("font", &v)
276276 }
277277
@@ -301,7 +301,7 @@ func (x *CellRendererText) GetPropertyFontDesc() uintptr {
301301 func (x *CellRendererText) SetPropertyForeground(value string) {
302302 var v gobject.Value
303303 v.Init(gobject.TypeStringVal)
304- v.SetString(value)
304+ v.SetString(&value)
305305 x.SetProperty("foreground", &v)
306306 }
307307
@@ -341,7 +341,7 @@ func (x *CellRendererText) GetPropertyForegroundSet() bool {
341341 func (x *CellRendererText) SetPropertyLanguage(value string) {
342342 var v gobject.Value
343343 v.Init(gobject.TypeStringVal)
344- v.SetString(value)
344+ v.SetString(&value)
345345 x.SetProperty("language", &v)
346346 }
347347
@@ -371,7 +371,7 @@ func (x *CellRendererText) GetPropertyLanguageSet() bool {
371371 func (x *CellRendererText) SetPropertyMarkup(value string) {
372372 var v gobject.Value
373373 v.Init(gobject.TypeStringVal)
374- v.SetString(value)
374+ v.SetString(&value)
375375 x.SetProperty("markup", &v)
376376 }
377377
@@ -412,7 +412,7 @@ func (x *CellRendererText) GetPropertyMaxWidthChars() int {
412412 func (x *CellRendererText) SetPropertyPlaceholderText(value string) {
413413 var v gobject.Value
414414 v.Init(gobject.TypeStringVal)
415- v.SetString(value)
415+ v.SetString(&value)
416416 x.SetProperty("placeholder-text", &v)
417417 }
418418
@@ -609,7 +609,7 @@ func (x *CellRendererText) GetPropertyStyleSet() bool {
609609 func (x *CellRendererText) SetPropertyText(value string) {
610610 var v gobject.Value
611611 v.Init(gobject.TypeStringVal)
612- v.SetString(value)
612+ v.SetString(&value)
613613 x.SetProperty("text", &v)
614614 }
615615
M v4/gtk/gtkcheckbutton.go +12 -12
@@ -180,13 +180,13 @@ func NewCheckButton() *CheckButton {
180180 return cls
181181 }
182182
183-var xNewCheckButtonWithLabel func(string) uintptr
183+var xNewCheckButtonWithLabel func(uintptr) uintptr
184184
185185 // Creates a new `GtkCheckButton` with the given text.
186-func NewCheckButtonWithLabel(LabelVar string) *CheckButton {
186+func NewCheckButtonWithLabel(LabelVar *string) *CheckButton {
187187 var cls *CheckButton
188188
189- cret := xNewCheckButtonWithLabel(LabelVar)
189+ cret := xNewCheckButtonWithLabel(core.NullableStringToPtr(LabelVar))
190190
191191 if cret == 0 {
192192 return nil
@@ -197,13 +197,13 @@ func NewCheckButtonWithLabel(LabelVar string) *CheckButton {
197197 return cls
198198 }
199199
200-var xNewCheckButtonWithMnemonic func(string) uintptr
200+var xNewCheckButtonWithMnemonic func(uintptr) uintptr
201201
202202 // Creates a new `GtkCheckButton` with the given text and a mnemonic.
203-func NewCheckButtonWithMnemonic(LabelVar string) *CheckButton {
203+func NewCheckButtonWithMnemonic(LabelVar *string) *CheckButton {
204204 var cls *CheckButton
205205
206- cret := xNewCheckButtonWithMnemonic(LabelVar)
206+ cret := xNewCheckButtonWithMnemonic(core.NullableStringToPtr(LabelVar))
207207
208208 if cret == 0 {
209209 return nil
@@ -326,16 +326,16 @@ func (x *CheckButton) SetInconsistent(InconsistentVar bool) {
326326
327327 }
328328
329-var xCheckButtonSetLabel func(uintptr, string)
329+var xCheckButtonSetLabel func(uintptr, uintptr)
330330
331331 // Sets the text of @self.
332332 //
333333 // If [property@Gtk.CheckButton:use-underline] is %TRUE, an underscore
334334 // in @label is interpreted as mnemonic indicator, see
335335 // [method@Gtk.CheckButton.set_use_underline] for details on this behavior.
336-func (x *CheckButton) SetLabel(LabelVar string) {
336+func (x *CheckButton) SetLabel(LabelVar *string) {
337337
338- xCheckButtonSetLabel(x.GoPointer(), LabelVar)
338+ xCheckButtonSetLabel(x.GoPointer(), core.NullableStringToPtr(LabelVar))
339339
340340 }
341341
@@ -414,7 +414,7 @@ func (x *CheckButton) GetPropertyInconsistent() bool {
414414 func (x *CheckButton) SetPropertyLabel(value string) {
415415 var v gobject.Value
416416 v.Init(gobject.TypeStringVal)
417- v.SetString(value)
417+ v.SetString(&value)
418418 x.SetProperty("label", &v)
419419 }
420420
@@ -790,9 +790,9 @@ func (x *CheckButton) GetActionTargetValue() *glib.Variant {
790790 // containing [class@ApplicationWindow] or its associated [class@Application],
791791 // respectively. This is the same form used for actions in the [class@Gio.Menu]
792792 // associated with the window.
793-func (x *CheckButton) SetActionName(ActionNameVar string) {
793+func (x *CheckButton) SetActionName(ActionNameVar *string) {
794794
795- XGtkActionableSetActionName(x.GoPointer(), ActionNameVar)
795+ XGtkActionableSetActionName(x.GoPointer(), core.NullableStringToPtr(ActionNameVar))
796796
797797 }
798798
M v4/gtk/gtkcolorbutton.go +1 -1
@@ -187,7 +187,7 @@ func (x *ColorButton) GetPropertyShowEditor() bool {
187187 func (x *ColorButton) SetPropertyTitle(value string) {
188188 var v gobject.Value
189189 v.Init(gobject.TypeStringVal)
190- v.SetString(value)
190+ v.SetString(&value)
191191 x.SetProperty("title", &v)
192192 }
193193
M v4/gtk/gtkcolorchooserdialog.go +3 -3
@@ -50,13 +50,13 @@ func ColorChooserDialogNewFromInternalPtr(ptr uintptr) *ColorChooserDialog {
5050 return cls
5151 }
5252
53-var xNewColorChooserDialog func(string, uintptr) uintptr
53+var xNewColorChooserDialog func(uintptr, uintptr) uintptr
5454
5555 // Creates a new `GtkColorChooserDialog`.
56-func NewColorChooserDialog(TitleVar string, ParentVar *Window) *ColorChooserDialog {
56+func NewColorChooserDialog(TitleVar *string, ParentVar *Window) *ColorChooserDialog {
5757 var cls *ColorChooserDialog
5858
59- cret := xNewColorChooserDialog(TitleVar, ParentVar.GoPointer())
59+ cret := xNewColorChooserDialog(core.NullableStringToPtr(TitleVar), ParentVar.GoPointer())
6060
6161 if cret == 0 {
6262 return nil
M v4/gtk/gtkcolordialog.go +17 -2
@@ -72,7 +72,22 @@ var xColorDialogChooseRgba func(uintptr, uintptr, *gdk.RGBA, uintptr, uintptr, u
7272 // Presents a color chooser dialog to the user.
7373 func (x *ColorDialog) ChooseRgba(ParentVar *Window, InitialColorVar *gdk.RGBA, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) {
7474
75- xColorDialogChooseRgba(x.GoPointer(), ParentVar.GoPointer(), InitialColorVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
75+ var CallbackVarRef uintptr
76+ if CallbackVar != nil {
77+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
78+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
79+ CallbackVarRef = cbRefPtr
80+ } else {
81+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
82+ cbFn := *CallbackVar
83+ cbFn(arg0, arg1, arg2)
84+ }
85+ CallbackVarRef = purego.NewCallback(fcb)
86+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
87+ }
88+ }
89+
90+ xColorDialogChooseRgba(x.GoPointer(), ParentVar.GoPointer(), InitialColorVar, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
7691
7792 }
7893
@@ -186,7 +201,7 @@ func (x *ColorDialog) GetPropertyModal() bool {
186201 func (x *ColorDialog) SetPropertyTitle(value string) {
187202 var v gobject.Value
188203 v.Init(gobject.TypeStringVal)
189- v.SetString(value)
204+ v.SetString(&value)
190205 x.SetProperty("title", &v)
191206 }
192207
M v4/gtk/gtkcolumnviewcolumn.go +11 -11
@@ -48,7 +48,7 @@ func ColumnViewColumnNewFromInternalPtr(ptr uintptr) *ColumnViewColumn {
4848 return cls
4949 }
5050
51-var xNewColumnViewColumn func(string, uintptr) uintptr
51+var xNewColumnViewColumn func(uintptr, uintptr) uintptr
5252
5353 // Creates a new `GtkColumnViewColumn` that uses the given @factory for
5454 // mapping items to widgets.
@@ -63,10 +63,10 @@ var xNewColumnViewColumn func(string, uintptr) uintptr
6363 // gtk_builder_list_item_factory_new_from_resource ("/name.ui"));
6464 //
6565 // ```
66-func NewColumnViewColumn(TitleVar string, FactoryVar *ListItemFactory) *ColumnViewColumn {
66+func NewColumnViewColumn(TitleVar *string, FactoryVar *ListItemFactory) *ColumnViewColumn {
6767 var cls *ColumnViewColumn
6868
69- cret := xNewColumnViewColumn(TitleVar, FactoryVar.GoPointer())
69+ cret := xNewColumnViewColumn(core.NullableStringToPtr(TitleVar), FactoryVar.GoPointer())
7070
7171 if cret == 0 {
7272 return nil
@@ -248,7 +248,7 @@ func (x *ColumnViewColumn) SetHeaderMenu(MenuVar *gio.MenuModel) {
248248
249249 }
250250
251-var xColumnViewColumnSetId func(uintptr, string)
251+var xColumnViewColumnSetId func(uintptr, uintptr)
252252
253253 // Sets the id of this column.
254254 //
@@ -256,9 +256,9 @@ var xColumnViewColumnSetId func(uintptr, string)
256256 // storing column view configuration.
257257 //
258258 // It is up to callers to ensure uniqueness of IDs.
259-func (x *ColumnViewColumn) SetId(IdVar string) {
259+func (x *ColumnViewColumn) SetId(IdVar *string) {
260260
261- xColumnViewColumnSetId(x.GoPointer(), IdVar)
261+ xColumnViewColumnSetId(x.GoPointer(), core.NullableStringToPtr(IdVar))
262262
263263 }
264264
@@ -289,16 +289,16 @@ func (x *ColumnViewColumn) SetSorter(SorterVar *Sorter) {
289289
290290 }
291291
292-var xColumnViewColumnSetTitle func(uintptr, string)
292+var xColumnViewColumnSetTitle func(uintptr, uintptr)
293293
294294 // Sets the title of this column.
295295 //
296296 // The title is displayed in the header of a `GtkColumnView`
297297 // for this column and is therefore user-facing text that should
298298 // be translated.
299-func (x *ColumnViewColumn) SetTitle(TitleVar string) {
299+func (x *ColumnViewColumn) SetTitle(TitleVar *string) {
300300
301- xColumnViewColumnSetTitle(x.GoPointer(), TitleVar)
301+ xColumnViewColumnSetTitle(x.GoPointer(), core.NullableStringToPtr(TitleVar))
302302
303303 }
304304
@@ -369,7 +369,7 @@ func (x *ColumnViewColumn) GetPropertyFixedWidth() int {
369369 func (x *ColumnViewColumn) SetPropertyId(value string) {
370370 var v gobject.Value
371371 v.Init(gobject.TypeStringVal)
372- v.SetString(value)
372+ v.SetString(&value)
373373 x.SetProperty("id", &v)
374374 }
375375
@@ -409,7 +409,7 @@ func (x *ColumnViewColumn) GetPropertyResizable() bool {
409409 func (x *ColumnViewColumn) SetPropertyTitle(value string) {
410410 var v gobject.Value
411411 v.Init(gobject.TypeStringVal)
412- v.SetString(value)
412+ v.SetString(&value)
413413 x.SetProperty("title", &v)
414414 }
415415
M v4/gtk/gtkcolumnviewrow.go +2 -2
@@ -219,7 +219,7 @@ func (c *ColumnViewRow) SetGoPointer(ptr uintptr) {
219219 func (x *ColumnViewRow) SetPropertyAccessibleDescription(value string) {
220220 var v gobject.Value
221221 v.Init(gobject.TypeStringVal)
222- v.SetString(value)
222+ v.SetString(&value)
223223 x.SetProperty("accessible-description", &v)
224224 }
225225
@@ -236,7 +236,7 @@ func (x *ColumnViewRow) GetPropertyAccessibleDescription() string {
236236 func (x *ColumnViewRow) SetPropertyAccessibleLabel(value string) {
237237 var v gobject.Value
238238 v.Init(gobject.TypeStringVal)
239- v.SetString(value)
239+ v.SetString(&value)
240240 x.SetProperty("accessible-label", &v)
241241 }
242242
M v4/gtk/gtkcombobox.go +35 -5
@@ -449,7 +449,7 @@ func (x *ComboBox) SetActive(IndexVar int) {
449449
450450 }
451451
452-var xComboBoxSetActiveId func(uintptr, string) bool
452+var xComboBoxSetActiveId func(uintptr, uintptr) bool
453453
454454 // Changes the active row of @combo_box to the one that has an ID equal to
455455 // @active_id.
@@ -460,9 +460,9 @@ var xComboBoxSetActiveId func(uintptr, string) bool
460460 // If the [property@Gtk.ComboBox:id-column] property of @combo_box is
461461 // unset or if no row has the given ID then the function does nothing
462462 // and returns %FALSE.
463-func (x *ComboBox) SetActiveId(ActiveIdVar string) bool {
463+func (x *ComboBox) SetActiveId(ActiveIdVar *string) bool {
464464
465- cret := xComboBoxSetActiveId(x.GoPointer(), ActiveIdVar)
465+ cret := xComboBoxSetActiveId(x.GoPointer(), core.NullableStringToPtr(ActiveIdVar))
466466 return cret
467467 }
468468
@@ -565,7 +565,37 @@ var xComboBoxSetRowSeparatorFunc func(uintptr, uintptr, uintptr, uintptr)
565565 // This is the default value.
566566 func (x *ComboBox) SetRowSeparatorFunc(FuncVar *TreeViewRowSeparatorFunc, DataVar uintptr, DestroyVar *glib.DestroyNotify) {
567567
568- xComboBoxSetRowSeparatorFunc(x.GoPointer(), glib.NewCallbackNullable(FuncVar), DataVar, glib.NewCallbackNullable(DestroyVar))
568+ var FuncVarRef uintptr
569+ if FuncVar != nil {
570+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
571+ if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok {
572+ FuncVarRef = cbRefPtr
573+ } else {
574+ fcb := func(arg0 uintptr, arg1 *TreeIter, arg2 uintptr) bool {
575+ cbFn := *FuncVar
576+ return cbFn(arg0, arg1, arg2)
577+ }
578+ FuncVarRef = purego.NewCallback(fcb)
579+ glib.SaveCallback(FuncVarPtr, FuncVarRef)
580+ }
581+ }
582+
583+ var DestroyVarRef uintptr
584+ if DestroyVar != nil {
585+ DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar))
586+ if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok {
587+ DestroyVarRef = cbRefPtr
588+ } else {
589+ fcb := func(arg0 uintptr) {
590+ cbFn := *DestroyVar
591+ cbFn(arg0)
592+ }
593+ DestroyVarRef = purego.NewCallback(fcb)
594+ glib.SaveCallback(DestroyVarPtr, DestroyVarRef)
595+ }
596+ }
597+
598+ xComboBoxSetRowSeparatorFunc(x.GoPointer(), FuncVarRef, DataVar, DestroyVarRef)
569599
570600 }
571601
@@ -612,7 +642,7 @@ func (x *ComboBox) GetPropertyActive() int {
612642 func (x *ComboBox) SetPropertyActiveId(value string) {
613643 var v gobject.Value
614644 v.Init(gobject.TypeStringVal)
615- v.SetString(value)
645+ v.SetString(&value)
616646 x.SetProperty("active-id", &v)
617647 }
618648
M v4/gtk/gtkcomboboxtext.go +9 -9
@@ -124,7 +124,7 @@ func NewComboBoxTextWithEntry() *ComboBoxText {
124124 return cls
125125 }
126126
127-var xComboBoxTextAppend func(uintptr, string, string)
127+var xComboBoxTextAppend func(uintptr, uintptr, string)
128128
129129 // Appends @text to the list of strings stored in @combo_box.
130130 //
@@ -132,9 +132,9 @@ var xComboBoxTextAppend func(uintptr, string, string)
132132 //
133133 // This is the same as calling [method@Gtk.ComboBoxText.insert]
134134 // with a position of -1.
135-func (x *ComboBoxText) Append(IdVar string, TextVar string) {
135+func (x *ComboBoxText) Append(IdVar *string, TextVar string) {
136136
137- xComboBoxTextAppend(x.GoPointer(), IdVar, TextVar)
137+ xComboBoxTextAppend(x.GoPointer(), core.NullableStringToPtr(IdVar), TextVar)
138138
139139 }
140140
@@ -164,7 +164,7 @@ func (x *ComboBoxText) GetActiveText() string {
164164 return cret
165165 }
166166
167-var xComboBoxTextInsert func(uintptr, int, string, string)
167+var xComboBoxTextInsert func(uintptr, int, uintptr, string)
168168
169169 // Inserts @text at @position in the list of strings stored in @combo_box.
170170 //
@@ -172,9 +172,9 @@ var xComboBoxTextInsert func(uintptr, int, string, string)
172172 // See [property@Gtk.ComboBox:id-column].
173173 //
174174 // If @position is negative then @text is appended.
175-func (x *ComboBoxText) Insert(PositionVar int, IdVar string, TextVar string) {
175+func (x *ComboBoxText) Insert(PositionVar int, IdVar *string, TextVar string) {
176176
177- xComboBoxTextInsert(x.GoPointer(), PositionVar, IdVar, TextVar)
177+ xComboBoxTextInsert(x.GoPointer(), PositionVar, core.NullableStringToPtr(IdVar), TextVar)
178178
179179 }
180180
@@ -192,7 +192,7 @@ func (x *ComboBoxText) InsertText(PositionVar int, TextVar string) {
192192
193193 }
194194
195-var xComboBoxTextPrepend func(uintptr, string, string)
195+var xComboBoxTextPrepend func(uintptr, uintptr, string)
196196
197197 // Prepends @text to the list of strings stored in @combo_box.
198198 //
@@ -200,9 +200,9 @@ var xComboBoxTextPrepend func(uintptr, string, string)
200200 //
201201 // This is the same as calling [method@Gtk.ComboBoxText.insert]
202202 // with a position of 0.
203-func (x *ComboBoxText) Prepend(IdVar string, TextVar string) {
203+func (x *ComboBoxText) Prepend(IdVar *string, TextVar string) {
204204
205- xComboBoxTextPrepend(x.GoPointer(), IdVar, TextVar)
205+ xComboBoxTextPrepend(x.GoPointer(), core.NullableStringToPtr(IdVar), TextVar)
206206
207207 }
208208
M v4/gtk/gtkconstraintguide.go +4 -4
@@ -133,14 +133,14 @@ func (x *ConstraintGuide) SetMinSize(WidthVar int, HeightVar int) {
133133
134134 }
135135
136-var xConstraintGuideSetName func(uintptr, string)
136+var xConstraintGuideSetName func(uintptr, uintptr)
137137
138138 // Sets a name for the given `GtkConstraintGuide`.
139139 //
140140 // The name is useful for debugging purposes.
141-func (x *ConstraintGuide) SetName(NameVar string) {
141+func (x *ConstraintGuide) SetName(NameVar *string) {
142142
143- xConstraintGuideSetName(x.GoPointer(), NameVar)
143+ xConstraintGuideSetName(x.GoPointer(), core.NullableStringToPtr(NameVar))
144144
145145 }
146146
@@ -250,7 +250,7 @@ func (x *ConstraintGuide) GetPropertyMinWidth() int {
250250 func (x *ConstraintGuide) SetPropertyName(value string) {
251251 var v gobject.Value
252252 v.Init(gobject.TypeStringVal)
253- v.SetString(value)
253+ v.SetString(&value)
254254 x.SetProperty("name", &v)
255255 }
256256
M v4/gtk/gtkcssprovider.go +3 -3
@@ -156,16 +156,16 @@ func (x *CssProvider) LoadFromString(StringVar string) {
156156
157157 }
158158
159-var xCssProviderLoadNamed func(uintptr, string, string)
159+var xCssProviderLoadNamed func(uintptr, string, uintptr)
160160
161161 // Loads a theme from the usual theme paths.
162162 //
163163 // The actual process of finding the theme might change between
164164 // releases, but it is guaranteed that this function uses the same
165165 // mechanism to load the theme that GTK uses for loading its own theme.
166-func (x *CssProvider) LoadNamed(NameVar string, VariantVar string) {
166+func (x *CssProvider) LoadNamed(NameVar string, VariantVar *string) {
167167
168- xCssProviderLoadNamed(x.GoPointer(), NameVar, VariantVar)
168+ xCssProviderLoadNamed(x.GoPointer(), NameVar, core.NullableStringToPtr(VariantVar))
169169
170170 }
171171
M v4/gtk/gtkcustomfilter.go +62 -2
@@ -55,7 +55,37 @@ var xNewCustomFilter func(uintptr, uintptr, uintptr) uintptr
5555 func NewCustomFilter(MatchFuncVar *CustomFilterFunc, UserDataVar uintptr, UserDestroyVar *glib.DestroyNotify) *CustomFilter {
5656 var cls *CustomFilter
5757
58- cret := xNewCustomFilter(glib.NewCallbackNullable(MatchFuncVar), UserDataVar, glib.NewCallback(UserDestroyVar))
58+ var MatchFuncVarRef uintptr
59+ if MatchFuncVar != nil {
60+ MatchFuncVarPtr := uintptr(unsafe.Pointer(MatchFuncVar))
61+ if cbRefPtr, ok := glib.GetCallback(MatchFuncVarPtr); ok {
62+ MatchFuncVarRef = cbRefPtr
63+ } else {
64+ fcb := func(arg0 uintptr, arg1 uintptr) bool {
65+ cbFn := *MatchFuncVar
66+ return cbFn(arg0, arg1)
67+ }
68+ MatchFuncVarRef = purego.NewCallback(fcb)
69+ glib.SaveCallback(MatchFuncVarPtr, MatchFuncVarRef)
70+ }
71+ }
72+
73+ var UserDestroyVarRef uintptr
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)
85+ }
86+ }
87+
88+ cret := xNewCustomFilter(MatchFuncVarRef, UserDataVar, UserDestroyVarRef)
5989
6090 if cret == 0 {
6191 return nil
@@ -78,7 +108,37 @@ var xCustomFilterSetFilterFunc func(uintptr, uintptr, uintptr, uintptr)
78108 // will be called.
79109 func (x *CustomFilter) SetFilterFunc(MatchFuncVar *CustomFilterFunc, UserDataVar uintptr, UserDestroyVar *glib.DestroyNotify) {
80110
81- xCustomFilterSetFilterFunc(x.GoPointer(), glib.NewCallbackNullable(MatchFuncVar), UserDataVar, glib.NewCallback(UserDestroyVar))
111+ var MatchFuncVarRef uintptr
112+ if MatchFuncVar != nil {
113+ MatchFuncVarPtr := uintptr(unsafe.Pointer(MatchFuncVar))
114+ if cbRefPtr, ok := glib.GetCallback(MatchFuncVarPtr); ok {
115+ MatchFuncVarRef = cbRefPtr
116+ } else {
117+ fcb := func(arg0 uintptr, arg1 uintptr) bool {
118+ cbFn := *MatchFuncVar
119+ return cbFn(arg0, arg1)
120+ }
121+ MatchFuncVarRef = purego.NewCallback(fcb)
122+ glib.SaveCallback(MatchFuncVarPtr, MatchFuncVarRef)
123+ }
124+ }
125+
126+ var UserDestroyVarRef uintptr
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)
138+ }
139+ }
140+
141+ xCustomFilterSetFilterFunc(x.GoPointer(), MatchFuncVarRef, UserDataVar, UserDestroyVarRef)
82142
83143 }
84144
M v4/gtk/gtkcustomlayout.go +46 -1
@@ -62,7 +62,52 @@ var xNewCustomLayout func(uintptr, uintptr, uintptr) uintptr
6262 func NewCustomLayout(RequestModeVar *CustomRequestModeFunc, MeasureVar *CustomMeasureFunc, AllocateVar *CustomAllocateFunc) *CustomLayout {
6363 var cls *CustomLayout
6464
65- cret := xNewCustomLayout(glib.NewCallbackNullable(RequestModeVar), glib.NewCallback(MeasureVar), glib.NewCallback(AllocateVar))
65+ var RequestModeVarRef uintptr
66+ if RequestModeVar != nil {
67+ RequestModeVarPtr := uintptr(unsafe.Pointer(RequestModeVar))
68+ if cbRefPtr, ok := glib.GetCallback(RequestModeVarPtr); ok {
69+ RequestModeVarRef = cbRefPtr
70+ } else {
71+ fcb := func(arg0 uintptr) SizeRequestMode {
72+ cbFn := *RequestModeVar
73+ return cbFn(arg0)
74+ }
75+ RequestModeVarRef = purego.NewCallback(fcb)
76+ glib.SaveCallback(RequestModeVarPtr, RequestModeVarRef)
77+ }
78+ }
79+
80+ var MeasureVarRef uintptr
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)
92+ }
93+ }
94+
95+ var AllocateVarRef uintptr
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)
107+ }
108+ }
109+
110+ cret := xNewCustomLayout(RequestModeVarRef, MeasureVarRef, AllocateVarRef)
66111
67112 if cret == 0 {
68113 return nil
M v4/gtk/gtkcustomsorter.go +62 -2
@@ -47,7 +47,37 @@ var xNewCustomSorter func(uintptr, uintptr, uintptr) uintptr
4747 func NewCustomSorter(SortFuncVar *glib.CompareDataFunc, UserDataVar uintptr, UserDestroyVar *glib.DestroyNotify) *CustomSorter {
4848 var cls *CustomSorter
4949
50- cret := xNewCustomSorter(glib.NewCallbackNullable(SortFuncVar), UserDataVar, glib.NewCallbackNullable(UserDestroyVar))
50+ var SortFuncVarRef uintptr
51+ if SortFuncVar != nil {
52+ SortFuncVarPtr := uintptr(unsafe.Pointer(SortFuncVar))
53+ if cbRefPtr, ok := glib.GetCallback(SortFuncVarPtr); ok {
54+ SortFuncVarRef = cbRefPtr
55+ } else {
56+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int {
57+ cbFn := *SortFuncVar
58+ return cbFn(arg0, arg1, arg2)
59+ }
60+ SortFuncVarRef = purego.NewCallback(fcb)
61+ glib.SaveCallback(SortFuncVarPtr, SortFuncVarRef)
62+ }
63+ }
64+
65+ var UserDestroyVarRef uintptr
66+ if UserDestroyVar != nil {
67+ UserDestroyVarPtr := uintptr(unsafe.Pointer(UserDestroyVar))
68+ if cbRefPtr, ok := glib.GetCallback(UserDestroyVarPtr); ok {
69+ UserDestroyVarRef = cbRefPtr
70+ } else {
71+ fcb := func(arg0 uintptr) {
72+ cbFn := *UserDestroyVar
73+ cbFn(arg0)
74+ }
75+ UserDestroyVarRef = purego.NewCallback(fcb)
76+ glib.SaveCallback(UserDestroyVarPtr, UserDestroyVarRef)
77+ }
78+ }
79+
80+ cret := xNewCustomSorter(SortFuncVarRef, UserDataVar, UserDestroyVarRef)
5181
5282 if cret == 0 {
5383 return nil
@@ -70,7 +100,37 @@ var xCustomSorterSetSortFunc func(uintptr, uintptr, uintptr, uintptr)
70100 // called now.
71101 func (x *CustomSorter) SetSortFunc(SortFuncVar *glib.CompareDataFunc, UserDataVar uintptr, UserDestroyVar *glib.DestroyNotify) {
72102
73- xCustomSorterSetSortFunc(x.GoPointer(), glib.NewCallbackNullable(SortFuncVar), UserDataVar, glib.NewCallback(UserDestroyVar))
103+ var SortFuncVarRef uintptr
104+ if SortFuncVar != nil {
105+ SortFuncVarPtr := uintptr(unsafe.Pointer(SortFuncVar))
106+ if cbRefPtr, ok := glib.GetCallback(SortFuncVarPtr); ok {
107+ SortFuncVarRef = cbRefPtr
108+ } else {
109+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int {
110+ cbFn := *SortFuncVar
111+ return cbFn(arg0, arg1, arg2)
112+ }
113+ SortFuncVarRef = purego.NewCallback(fcb)
114+ glib.SaveCallback(SortFuncVarPtr, SortFuncVarRef)
115+ }
116+ }
117+
118+ var UserDestroyVarRef uintptr
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)
130+ }
131+ }
132+
133+ xCustomSorterSetSortFunc(x.GoPointer(), SortFuncVarRef, UserDataVar, UserDestroyVarRef)
74134
75135 }
76136
M v4/gtk/gtkdialog.go +3 -3
@@ -306,7 +306,7 @@ func NewDialog() *Dialog {
306306 return cls
307307 }
308308
309-var xNewDialogWithButtons func(string, uintptr, DialogFlags, string, ...interface{}) uintptr
309+var xNewDialogWithButtons func(uintptr, uintptr, DialogFlags, uintptr, ...interface{}) uintptr
310310
311311 // Creates a new `GtkDialog` with the given title and transient parent.
312312 //
@@ -343,10 +343,10 @@ var xNewDialogWithButtons func(string, uintptr, DialogFlags, string, ...interfac
343343 // NULL);
344344 //
345345 // ```
346-func NewDialogWithButtons(TitleVar string, ParentVar *Window, FlagsVar DialogFlags, FirstButtonTextVar string, varArgs ...interface{}) *Dialog {
346+func NewDialogWithButtons(TitleVar *string, ParentVar *Window, FlagsVar DialogFlags, FirstButtonTextVar *string, varArgs ...interface{}) *Dialog {
347347 var cls *Dialog
348348
349- cret := xNewDialogWithButtons(TitleVar, ParentVar.GoPointer(), FlagsVar, FirstButtonTextVar, varArgs...)
349+ cret := xNewDialogWithButtons(core.NullableStringToPtr(TitleVar), ParentVar.GoPointer(), FlagsVar, core.NullableStringToPtr(FirstButtonTextVar), varArgs...)
350350
351351 if cret == 0 {
352352 return nil
M v4/gtk/gtkdirectorylist.go +7 -7
@@ -61,16 +61,16 @@ func DirectoryListNewFromInternalPtr(ptr uintptr) *DirectoryList {
6161 return cls
6262 }
6363
64-var xNewDirectoryList func(string, uintptr) uintptr
64+var xNewDirectoryList func(uintptr, uintptr) uintptr
6565
6666 // Creates a new `GtkDirectoryList`.
6767 //
6868 // The `GtkDirectoryList` is querying the given @file
6969 // with the given @attributes.
70-func NewDirectoryList(AttributesVar string, FileVar gio.File) *DirectoryList {
70+func NewDirectoryList(AttributesVar *string, FileVar gio.File) *DirectoryList {
7171 var cls *DirectoryList
7272
73- cret := xNewDirectoryList(AttributesVar, FileVar.GoPointer())
73+ cret := xNewDirectoryList(core.NullableStringToPtr(AttributesVar), FileVar.GoPointer())
7474
7575 if cret == 0 {
7676 return nil
@@ -155,15 +155,15 @@ func (x *DirectoryList) IsLoading() bool {
155155 return cret
156156 }
157157
158-var xDirectoryListSetAttributes func(uintptr, string)
158+var xDirectoryListSetAttributes func(uintptr, uintptr)
159159
160160 // Sets the @attributes to be enumerated and starts the enumeration.
161161 //
162162 // If @attributes is %NULL, the list of file infos will still be created, it will just
163163 // not contain any extra attributes.
164-func (x *DirectoryList) SetAttributes(AttributesVar string) {
164+func (x *DirectoryList) SetAttributes(AttributesVar *string) {
165165
166- xDirectoryListSetAttributes(x.GoPointer(), AttributesVar)
166+ xDirectoryListSetAttributes(x.GoPointer(), core.NullableStringToPtr(AttributesVar))
167167
168168 }
169169
@@ -229,7 +229,7 @@ func (c *DirectoryList) SetGoPointer(ptr uintptr) {
229229 func (x *DirectoryList) SetPropertyAttributes(value string) {
230230 var v gobject.Value
231231 v.Init(gobject.TypeStringVal)
232- v.SetString(value)
232+ v.SetString(&value)
233233 x.SetProperty("attributes", &v)
234234 }
235235
M v4/gtk/gtkdrawingarea.go +31 -1
@@ -244,7 +244,37 @@ var xDrawingAreaSetDrawFunc func(uintptr, uintptr, uintptr, uintptr)
244244 // on the drawing area. This will cause a redraw and will call @draw_func again.
245245 func (x *DrawingArea) SetDrawFunc(DrawFuncVar *DrawingAreaDrawFunc, UserDataVar uintptr, DestroyVar *glib.DestroyNotify) {
246246
247- xDrawingAreaSetDrawFunc(x.GoPointer(), glib.NewCallbackNullable(DrawFuncVar), UserDataVar, glib.NewCallback(DestroyVar))
247+ var DrawFuncVarRef uintptr
248+ if DrawFuncVar != nil {
249+ DrawFuncVarPtr := uintptr(unsafe.Pointer(DrawFuncVar))
250+ if cbRefPtr, ok := glib.GetCallback(DrawFuncVarPtr); ok {
251+ DrawFuncVarRef = cbRefPtr
252+ } else {
253+ fcb := func(arg0 uintptr, arg1 *cairo.Context, arg2 int, arg3 int, arg4 uintptr) {
254+ cbFn := *DrawFuncVar
255+ cbFn(arg0, arg1, arg2, arg3, arg4)
256+ }
257+ DrawFuncVarRef = purego.NewCallback(fcb)
258+ glib.SaveCallback(DrawFuncVarPtr, DrawFuncVarRef)
259+ }
260+ }
261+
262+ var DestroyVarRef uintptr
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)
274+ }
275+ }
276+
277+ xDrawingAreaSetDrawFunc(x.GoPointer(), DrawFuncVarRef, UserDataVar, DestroyVarRef)
248278
249279 }
250280
M v4/gtk/gtkeditable.go +1 -1
@@ -822,7 +822,7 @@ func (x *EditableBase) SetPropertyText(value string) {
822822 obj.Ptr = x.GoPointer()
823823 var v gobject.Value
824824 v.Init(gobject.TypeStringVal)
825- v.SetString(value)
825+ v.SetString(&value)
826826 obj.SetProperty("text", &v)
827827 }
828828
M v4/gtk/gtkentry.go +22 -22
@@ -751,7 +751,7 @@ func (x *Entry) SetIconFromGicon(IconPosVar EntryIconPosition, IconVar gio.Icon)
751751
752752 }
753753
754-var xEntrySetIconFromIconName func(uintptr, EntryIconPosition, string)
754+var xEntrySetIconFromIconName func(uintptr, EntryIconPosition, uintptr)
755755
756756 // Sets the icon shown in the entry at the specified position
757757 // from the current icon theme.
@@ -761,9 +761,9 @@ var xEntrySetIconFromIconName func(uintptr, EntryIconPosition, string)
761761 //
762762 // If @icon_name is %NULL, no icon will be shown in the
763763 // specified position.
764-func (x *Entry) SetIconFromIconName(IconPosVar EntryIconPosition, IconNameVar string) {
764+func (x *Entry) SetIconFromIconName(IconPosVar EntryIconPosition, IconNameVar *string) {
765765
766- xEntrySetIconFromIconName(x.GoPointer(), IconPosVar, IconNameVar)
766+ xEntrySetIconFromIconName(x.GoPointer(), IconPosVar, core.NullableStringToPtr(IconNameVar))
767767
768768 }
769769
@@ -787,7 +787,7 @@ func (x *Entry) SetIconSensitive(IconPosVar EntryIconPosition, SensitiveVar bool
787787
788788 }
789789
790-var xEntrySetIconTooltipMarkup func(uintptr, EntryIconPosition, string)
790+var xEntrySetIconTooltipMarkup func(uintptr, EntryIconPosition, uintptr)
791791
792792 // Sets @tooltip as the contents of the tooltip for the icon at
793793 // the specified position.
@@ -798,13 +798,13 @@ var xEntrySetIconTooltipMarkup func(uintptr, EntryIconPosition, string)
798798 //
799799 // See also [method@Gtk.Widget.set_tooltip_markup] and
800800 // [method@Gtk.Entry.set_icon_tooltip_text].
801-func (x *Entry) SetIconTooltipMarkup(IconPosVar EntryIconPosition, TooltipVar string) {
801+func (x *Entry) SetIconTooltipMarkup(IconPosVar EntryIconPosition, TooltipVar *string) {
802802
803- xEntrySetIconTooltipMarkup(x.GoPointer(), IconPosVar, TooltipVar)
803+ xEntrySetIconTooltipMarkup(x.GoPointer(), IconPosVar, core.NullableStringToPtr(TooltipVar))
804804
805805 }
806806
807-var xEntrySetIconTooltipText func(uintptr, EntryIconPosition, string)
807+var xEntrySetIconTooltipText func(uintptr, EntryIconPosition, uintptr)
808808
809809 // Sets @tooltip as the contents of the tooltip for the icon
810810 // at the specified position.
@@ -823,9 +823,9 @@ var xEntrySetIconTooltipText func(uintptr, EntryIconPosition, string)
823823 // [property@Gtk.Widget:has-tooltip] back to %TRUE, or
824824 // setting at least one non-empty tooltip on any icon
825825 // achieves the same result.
826-func (x *Entry) SetIconTooltipText(IconPosVar EntryIconPosition, TooltipVar string) {
826+func (x *Entry) SetIconTooltipText(IconPosVar EntryIconPosition, TooltipVar *string) {
827827
828- xEntrySetIconTooltipText(x.GoPointer(), IconPosVar, TooltipVar)
828+ xEntrySetIconTooltipText(x.GoPointer(), IconPosVar, core.NullableStringToPtr(TooltipVar))
829829
830830 }
831831
@@ -905,15 +905,15 @@ func (x *Entry) SetOverwriteMode(OverwriteVar bool) {
905905
906906 }
907907
908-var xEntrySetPlaceholderText func(uintptr, string)
908+var xEntrySetPlaceholderText func(uintptr, uintptr)
909909
910910 // Sets text to be displayed in @entry when it is empty.
911911 //
912912 // This can be used to give a visual hint of the expected
913913 // contents of the `GtkEntry`.
914-func (x *Entry) SetPlaceholderText(TextVar string) {
914+func (x *Entry) SetPlaceholderText(TextVar *string) {
915915
916- xEntrySetPlaceholderText(x.GoPointer(), TextVar)
916+ xEntrySetPlaceholderText(x.GoPointer(), core.NullableStringToPtr(TextVar))
917917
918918 }
919919
@@ -1087,7 +1087,7 @@ func (x *Entry) GetPropertyHasFrame() bool {
10871087 func (x *Entry) SetPropertyImModule(value string) {
10881088 var v gobject.Value
10891089 v.Init(gobject.TypeStringVal)
1090- v.SetString(value)
1090+ v.SetString(&value)
10911091 x.SetProperty("im-module", &v)
10921092 }
10931093
@@ -1172,7 +1172,7 @@ func (x *Entry) GetPropertyMaxLength() int {
11721172 func (x *Entry) SetPropertyMenuEntryIconPrimaryText(value string) {
11731173 var v gobject.Value
11741174 v.Init(gobject.TypeStringVal)
1175- v.SetString(value)
1175+ v.SetString(&value)
11761176 x.SetProperty("menu-entry-icon-primary-text", &v)
11771177 }
11781178
@@ -1211,7 +1211,7 @@ func (x *Entry) GetPropertyMenuEntryIconPrimaryText() string {
12111211 func (x *Entry) SetPropertyMenuEntryIconSecondaryText(value string) {
12121212 var v gobject.Value
12131213 v.Init(gobject.TypeStringVal)
1214- v.SetString(value)
1214+ v.SetString(&value)
12151215 x.SetProperty("menu-entry-icon-secondary-text", &v)
12161216 }
12171217
@@ -1257,7 +1257,7 @@ func (x *Entry) GetPropertyOverwriteMode() bool {
12571257 func (x *Entry) SetPropertyPlaceholderText(value string) {
12581258 var v gobject.Value
12591259 v.Init(gobject.TypeStringVal)
1260- v.SetString(value)
1260+ v.SetString(&value)
12611261 x.SetProperty("placeholder-text", &v)
12621262 }
12631263
@@ -1306,7 +1306,7 @@ func (x *Entry) GetPropertyPrimaryIconActivatable() bool {
13061306 func (x *Entry) SetPropertyPrimaryIconName(value string) {
13071307 var v gobject.Value
13081308 v.Init(gobject.TypeStringVal)
1309- v.SetString(value)
1309+ v.SetString(&value)
13101310 x.SetProperty("primary-icon-name", &v)
13111311 }
13121312
@@ -1356,7 +1356,7 @@ func (x *Entry) GetPropertyPrimaryIconSensitive() bool {
13561356 func (x *Entry) SetPropertyPrimaryIconTooltipMarkup(value string) {
13571357 var v gobject.Value
13581358 v.Init(gobject.TypeStringVal)
1359- v.SetString(value)
1359+ v.SetString(&value)
13601360 x.SetProperty("primary-icon-tooltip-markup", &v)
13611361 }
13621362
@@ -1377,7 +1377,7 @@ func (x *Entry) GetPropertyPrimaryIconTooltipMarkup() string {
13771377 func (x *Entry) SetPropertyPrimaryIconTooltipText(value string) {
13781378 var v gobject.Value
13791379 v.Init(gobject.TypeStringVal)
1380- v.SetString(value)
1380+ v.SetString(&value)
13811381 x.SetProperty("primary-icon-tooltip-text", &v)
13821382 }
13831383
@@ -1475,7 +1475,7 @@ func (x *Entry) GetPropertySecondaryIconActivatable() bool {
14751475 func (x *Entry) SetPropertySecondaryIconName(value string) {
14761476 var v gobject.Value
14771477 v.Init(gobject.TypeStringVal)
1478- v.SetString(value)
1478+ v.SetString(&value)
14791479 x.SetProperty("secondary-icon-name", &v)
14801480 }
14811481
@@ -1525,7 +1525,7 @@ func (x *Entry) GetPropertySecondaryIconSensitive() bool {
15251525 func (x *Entry) SetPropertySecondaryIconTooltipMarkup(value string) {
15261526 var v gobject.Value
15271527 v.Init(gobject.TypeStringVal)
1528- v.SetString(value)
1528+ v.SetString(&value)
15291529 x.SetProperty("secondary-icon-tooltip-markup", &v)
15301530 }
15311531
@@ -1546,7 +1546,7 @@ func (x *Entry) GetPropertySecondaryIconTooltipMarkup() string {
15461546 func (x *Entry) SetPropertySecondaryIconTooltipText(value string) {
15471547 var v gobject.Value
15481548 v.Init(gobject.TypeStringVal)
1549- v.SetString(value)
1549+ v.SetString(&value)
15501550 x.SetProperty("secondary-icon-tooltip-text", &v)
15511551 }
15521552
M v4/gtk/gtkentrybuffer.go +4 -4
@@ -398,15 +398,15 @@ func EntryBufferNewFromInternalPtr(ptr uintptr) *EntryBuffer {
398398 return cls
399399 }
400400
401-var xNewEntryBuffer func(string, int) uintptr
401+var xNewEntryBuffer func(uintptr, int) uintptr
402402
403403 // Create a new `GtkEntryBuffer` object.
404404 //
405405 // Optionally, specify initial text to set in the buffer.
406-func NewEntryBuffer(InitialCharsVar string, NInitialCharsVar int) *EntryBuffer {
406+func NewEntryBuffer(InitialCharsVar *string, NInitialCharsVar int) *EntryBuffer {
407407 var cls *EntryBuffer
408408
409- cret := xNewEntryBuffer(InitialCharsVar, NInitialCharsVar)
409+ cret := xNewEntryBuffer(core.NullableStringToPtr(InitialCharsVar), NInitialCharsVar)
410410
411411 if cret == 0 {
412412 return nil
@@ -579,7 +579,7 @@ func (x *EntryBuffer) GetPropertyMaxLength() int {
579579 func (x *EntryBuffer) SetPropertyText(value string) {
580580 var v gobject.Value
581581 v.Init(gobject.TypeStringVal)
582- v.SetString(value)
582+ v.SetString(&value)
583583 x.SetProperty("text", &v)
584584 }
585585
M v4/gtk/gtkentrycompletion.go +31 -1
@@ -285,7 +285,37 @@ 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- xEntryCompletionSetMatchFunc(x.GoPointer(), glib.NewCallback(FuncVar), FuncDataVar, glib.NewCallback(FuncNotifyVar))
288+ var FuncVarRef uintptr
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)
300+ }
301+ }
302+
303+ var FuncNotifyVarRef uintptr
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)
315+ }
316+ }
317+
318+ xEntryCompletionSetMatchFunc(x.GoPointer(), FuncVarRef, FuncDataVar, FuncNotifyVarRef)
289319
290320 }
291321
M v4/gtk/gtkeventcontroller.go +7 -7
@@ -164,12 +164,12 @@ func (x *EventController) Reset() {
164164
165165 }
166166
167-var xEventControllerSetName func(uintptr, string)
167+var xEventControllerSetName func(uintptr, uintptr)
168168
169169 // Sets a name on the controller that can be used for debugging.
170-func (x *EventController) SetName(NameVar string) {
170+func (x *EventController) SetName(NameVar *string) {
171171
172- xEventControllerSetName(x.GoPointer(), NameVar)
172+ xEventControllerSetName(x.GoPointer(), core.NullableStringToPtr(NameVar))
173173
174174 }
175175
@@ -198,12 +198,12 @@ func (x *EventController) SetPropagationPhase(PhaseVar PropagationPhase) {
198198
199199 }
200200
201-var xEventControllerSetStaticName func(uintptr, string)
201+var xEventControllerSetStaticName func(uintptr, uintptr)
202202
203203 // Sets a name on the controller that can be used for debugging.
204-func (x *EventController) SetStaticName(NameVar string) {
204+func (x *EventController) SetStaticName(NameVar *string) {
205205
206- xEventControllerSetStaticName(x.GoPointer(), NameVar)
206+ xEventControllerSetStaticName(x.GoPointer(), core.NullableStringToPtr(NameVar))
207207
208208 }
209209
@@ -223,7 +223,7 @@ func (c *EventController) SetGoPointer(ptr uintptr) {
223223 func (x *EventController) SetPropertyName(value string) {
224224 var v gobject.Value
225225 v.Init(gobject.TypeStringVal)
226- v.SetString(value)
226+ v.SetString(&value)
227227 x.SetProperty("name", &v)
228228 }
229229
M v4/gtk/gtkexpander.go +10 -10
@@ -126,13 +126,13 @@ func ExpanderNewFromInternalPtr(ptr uintptr) *Expander {
126126 return cls
127127 }
128128
129-var xNewExpander func(string) uintptr
129+var xNewExpander func(uintptr) uintptr
130130
131131 // Creates a new expander using @label as the text of the label.
132-func NewExpander(LabelVar string) *Expander {
132+func NewExpander(LabelVar *string) *Expander {
133133 var cls *Expander
134134
135- cret := xNewExpander(LabelVar)
135+ cret := xNewExpander(core.NullableStringToPtr(LabelVar))
136136
137137 if cret == 0 {
138138 return nil
@@ -143,7 +143,7 @@ func NewExpander(LabelVar string) *Expander {
143143 return cls
144144 }
145145
146-var xNewExpanderWithMnemonic func(string) uintptr
146+var xNewExpanderWithMnemonic func(uintptr) uintptr
147147
148148 // Creates a new expander using @label as the text of the label.
149149 //
@@ -153,10 +153,10 @@ var xNewExpanderWithMnemonic func(string) uintptr
153153 // a keyboard accelerator called a mnemonic.
154154 //
155155 // Pressing Alt and that key activates the button.
156-func NewExpanderWithMnemonic(LabelVar string) *Expander {
156+func NewExpanderWithMnemonic(LabelVar *string) *Expander {
157157 var cls *Expander
158158
159- cret := xNewExpanderWithMnemonic(LabelVar)
159+ cret := xNewExpanderWithMnemonic(core.NullableStringToPtr(LabelVar))
160160
161161 if cret == 0 {
162162 return nil
@@ -276,14 +276,14 @@ func (x *Expander) SetExpanded(ExpandedVar bool) {
276276
277277 }
278278
279-var xExpanderSetLabel func(uintptr, string)
279+var xExpanderSetLabel func(uintptr, uintptr)
280280
281281 // Sets the text of the label of the expander to @label.
282282 //
283283 // This will also clear any previously set labels.
284-func (x *Expander) SetLabel(LabelVar string) {
284+func (x *Expander) SetLabel(LabelVar *string) {
285285
286- xExpanderSetLabel(x.GoPointer(), LabelVar)
286+ xExpanderSetLabel(x.GoPointer(), core.NullableStringToPtr(LabelVar))
287287
288288 }
289289
@@ -360,7 +360,7 @@ func (x *Expander) GetPropertyExpanded() bool {
360360 func (x *Expander) SetPropertyLabel(value string) {
361361 var v gobject.Value
362362 v.Init(gobject.TypeStringVal)
363- v.SetString(value)
363+ v.SetString(&value)
364364 x.SetProperty("label", &v)
365365 }
366366
M v4/gtk/gtkexpression.go +77 -2
@@ -181,7 +181,52 @@ var xNewCClosureExpression func(types.GType, uintptr, uint, uintptr, uintptr, ui
181181 func NewCClosureExpression(ValueTypeVar types.GType, MarshalVar *gobject.ClosureMarshal, NParamsVar uint, ParamsVar uintptr, CallbackFuncVar *gobject.Callback, UserDataVar uintptr, UserDestroyVar *gobject.ClosureNotify) *CClosureExpression {
182182 var cls *CClosureExpression
183183
184- cret := xNewCClosureExpression(ValueTypeVar, glib.NewCallbackNullable(MarshalVar), NParamsVar, ParamsVar, glib.NewCallback(CallbackFuncVar), UserDataVar, glib.NewCallbackNullable(UserDestroyVar))
184+ var MarshalVarRef uintptr
185+ if MarshalVar != nil {
186+ MarshalVarPtr := uintptr(unsafe.Pointer(MarshalVar))
187+ if cbRefPtr, ok := glib.GetCallback(MarshalVarPtr); ok {
188+ MarshalVarRef = cbRefPtr
189+ } else {
190+ fcb := func(arg0 *gobject.Closure, arg1 *gobject.Value, arg2 uint, arg3 []gobject.Value, arg4 uintptr, arg5 uintptr) {
191+ cbFn := *MarshalVar
192+ cbFn(arg0, arg1, arg2, arg3, arg4, arg5)
193+ }
194+ MarshalVarRef = purego.NewCallback(fcb)
195+ glib.SaveCallback(MarshalVarPtr, MarshalVarRef)
196+ }
197+ }
198+
199+ var CallbackFuncVarRef uintptr
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)
211+ }
212+ }
213+
214+ var UserDestroyVarRef uintptr
215+ if UserDestroyVar != nil {
216+ UserDestroyVarPtr := uintptr(unsafe.Pointer(UserDestroyVar))
217+ if cbRefPtr, ok := glib.GetCallback(UserDestroyVarPtr); ok {
218+ UserDestroyVarRef = cbRefPtr
219+ } else {
220+ fcb := func(arg0 uintptr, arg1 *gobject.Closure) {
221+ cbFn := *UserDestroyVar
222+ cbFn(arg0, arg1)
223+ }
224+ UserDestroyVarRef = purego.NewCallback(fcb)
225+ glib.SaveCallback(UserDestroyVarPtr, UserDestroyVarRef)
226+ }
227+ }
228+
229+ cret := xNewCClosureExpression(ValueTypeVar, MarshalVarRef, NParamsVar, ParamsVar, CallbackFuncVarRef, UserDataVar, UserDestroyVarRef)
185230
186231 if cret == 0 {
187232 return nil
@@ -629,7 +674,37 @@ var xExpressionWatch func(uintptr, uintptr, uintptr, uintptr, uintptr) *Expressi
629674 // the @notify will be invoked.
630675 func (x *Expression) Watch(ThisVar *gobject.Object, NotifyVar *ExpressionNotify, UserDataVar uintptr, UserDestroyVar *glib.DestroyNotify) *ExpressionWatch {
631676
632- cret := xExpressionWatch(x.GoPointer(), ThisVar.GoPointer(), glib.NewCallback(NotifyVar), UserDataVar, glib.NewCallback(UserDestroyVar))
677+ var NotifyVarRef uintptr
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)
689+ }
690+ }
691+
692+ var UserDestroyVarRef uintptr
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)
704+ }
705+ }
706+
707+ cret := xExpressionWatch(x.GoPointer(), ThisVar.GoPointer(), NotifyVarRef, UserDataVar, UserDestroyVarRef)
633708 return cret
634709 }
635710
M v4/gtk/gtkfilechooserdialog.go +3 -3
@@ -208,15 +208,15 @@ func FileChooserDialogNewFromInternalPtr(ptr uintptr) *FileChooserDialog {
208208 return cls
209209 }
210210
211-var xNewFileChooserDialog func(string, uintptr, FileChooserAction, string, ...interface{}) uintptr
211+var xNewFileChooserDialog func(uintptr, uintptr, FileChooserAction, uintptr, ...interface{}) uintptr
212212
213213 // Creates a new `GtkFileChooserDialog`.
214214 //
215215 // This function is analogous to [ctor@Gtk.Dialog.new_with_buttons].
216-func NewFileChooserDialog(TitleVar string, ParentVar *Window, ActionVar FileChooserAction, FirstButtonTextVar string, varArgs ...interface{}) *FileChooserDialog {
216+func NewFileChooserDialog(TitleVar *string, ParentVar *Window, ActionVar FileChooserAction, FirstButtonTextVar *string, varArgs ...interface{}) *FileChooserDialog {
217217 var cls *FileChooserDialog
218218
219- cret := xNewFileChooserDialog(TitleVar, ParentVar.GoPointer(), ActionVar, FirstButtonTextVar, varArgs...)
219+ cret := xNewFileChooserDialog(core.NullableStringToPtr(TitleVar), ParentVar.GoPointer(), ActionVar, core.NullableStringToPtr(FirstButtonTextVar), varArgs...)
220220
221221 if cret == 0 {
222222 return nil
M v4/gtk/gtkfilechoosernative.go +11 -11
@@ -191,13 +191,13 @@ func FileChooserNativeNewFromInternalPtr(ptr uintptr) *FileChooserNative {
191191 return cls
192192 }
193193
194-var xNewFileChooserNative func(string, uintptr, FileChooserAction, string, string) uintptr
194+var xNewFileChooserNative func(uintptr, uintptr, FileChooserAction, uintptr, uintptr) uintptr
195195
196196 // Creates a new `GtkFileChooserNative`.
197-func NewFileChooserNative(TitleVar string, ParentVar *Window, ActionVar FileChooserAction, AcceptLabelVar string, CancelLabelVar string) *FileChooserNative {
197+func NewFileChooserNative(TitleVar *string, ParentVar *Window, ActionVar FileChooserAction, AcceptLabelVar *string, CancelLabelVar *string) *FileChooserNative {
198198 var cls *FileChooserNative
199199
200- cret := xNewFileChooserNative(TitleVar, ParentVar.GoPointer(), ActionVar, AcceptLabelVar, CancelLabelVar)
200+ cret := xNewFileChooserNative(core.NullableStringToPtr(TitleVar), ParentVar.GoPointer(), ActionVar, core.NullableStringToPtr(AcceptLabelVar), core.NullableStringToPtr(CancelLabelVar))
201201
202202 if cret == 0 {
203203 return nil
@@ -225,7 +225,7 @@ func (x *FileChooserNative) GetCancelLabel() string {
225225 return cret
226226 }
227227
228-var xFileChooserNativeSetAcceptLabel func(uintptr, string)
228+var xFileChooserNativeSetAcceptLabel func(uintptr, uintptr)
229229
230230 // Sets the custom label text for the accept button.
231231 //
@@ -235,13 +235,13 @@ var xFileChooserNativeSetAcceptLabel func(uintptr, string)
235235 // a keyboard accelerator called a mnemonic.
236236 //
237237 // Pressing Alt and that key should activate the button.
238-func (x *FileChooserNative) SetAcceptLabel(AcceptLabelVar string) {
238+func (x *FileChooserNative) SetAcceptLabel(AcceptLabelVar *string) {
239239
240- xFileChooserNativeSetAcceptLabel(x.GoPointer(), AcceptLabelVar)
240+ xFileChooserNativeSetAcceptLabel(x.GoPointer(), core.NullableStringToPtr(AcceptLabelVar))
241241
242242 }
243243
244-var xFileChooserNativeSetCancelLabel func(uintptr, string)
244+var xFileChooserNativeSetCancelLabel func(uintptr, uintptr)
245245
246246 // Sets the custom label text for the cancel button.
247247 //
@@ -251,9 +251,9 @@ var xFileChooserNativeSetCancelLabel func(uintptr, string)
251251 // a keyboard accelerator called a mnemonic.
252252 //
253253 // Pressing Alt and that key should activate the button.
254-func (x *FileChooserNative) SetCancelLabel(CancelLabelVar string) {
254+func (x *FileChooserNative) SetCancelLabel(CancelLabelVar *string) {
255255
256- xFileChooserNativeSetCancelLabel(x.GoPointer(), CancelLabelVar)
256+ xFileChooserNativeSetCancelLabel(x.GoPointer(), core.NullableStringToPtr(CancelLabelVar))
257257
258258 }
259259
@@ -274,7 +274,7 @@ func (c *FileChooserNative) SetGoPointer(ptr uintptr) {
274274 func (x *FileChooserNative) SetPropertyAcceptLabel(value string) {
275275 var v gobject.Value
276276 v.Init(gobject.TypeStringVal)
277- v.SetString(value)
277+ v.SetString(&value)
278278 x.SetProperty("accept-label", &v)
279279 }
280280
@@ -293,7 +293,7 @@ func (x *FileChooserNative) GetPropertyAcceptLabel() string {
293293 func (x *FileChooserNative) SetPropertyCancelLabel(value string) {
294294 var v gobject.Value
295295 v.Init(gobject.TypeStringVal)
296- v.SetString(value)
296+ v.SetString(&value)
297297 x.SetProperty("cancel-label", &v)
298298 }
299299
M v4/gtk/gtkfiledialog.go +137 -17
@@ -181,7 +181,22 @@ var xFileDialogOpen func(uintptr, uintptr, uintptr, uintptr, uintptr)
181181 // The @callback will be called when the dialog is closed.
182182 func (x *FileDialog) Open(ParentVar *Window, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) {
183183
184- xFileDialogOpen(x.GoPointer(), ParentVar.GoPointer(), CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
184+ var CallbackVarRef uintptr
185+ if CallbackVar != nil {
186+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
187+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
188+ CallbackVarRef = cbRefPtr
189+ } else {
190+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
191+ cbFn := *CallbackVar
192+ cbFn(arg0, arg1, arg2)
193+ }
194+ CallbackVarRef = purego.NewCallback(fcb)
195+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
196+ }
197+ }
198+
199+ xFileDialogOpen(x.GoPointer(), ParentVar.GoPointer(), CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
185200
186201 }
187202
@@ -221,7 +236,22 @@ var xFileDialogOpenMultiple func(uintptr, uintptr, uintptr, uintptr, uintptr)
221236 // The @callback will be called when the dialog is closed.
222237 func (x *FileDialog) OpenMultiple(ParentVar *Window, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) {
223238
224- xFileDialogOpenMultiple(x.GoPointer(), ParentVar.GoPointer(), CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
239+ var CallbackVarRef uintptr
240+ if CallbackVar != nil {
241+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
242+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
243+ CallbackVarRef = cbRefPtr
244+ } else {
245+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
246+ cbFn := *CallbackVar
247+ cbFn(arg0, arg1, arg2)
248+ }
249+ CallbackVarRef = purego.NewCallback(fcb)
250+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
251+ }
252+ }
253+
254+ xFileDialogOpenMultiple(x.GoPointer(), ParentVar.GoPointer(), CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
225255
226256 }
227257
@@ -264,7 +294,22 @@ var xFileDialogOpenMultipleTextFiles func(uintptr, uintptr, uintptr, uintptr, ui
264294 // The @callback will be called when the dialog is closed.
265295 func (x *FileDialog) OpenMultipleTextFiles(ParentVar *Window, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) {
266296
267- xFileDialogOpenMultipleTextFiles(x.GoPointer(), ParentVar.GoPointer(), CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
297+ var CallbackVarRef uintptr
298+ if CallbackVar != nil {
299+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
300+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
301+ CallbackVarRef = cbRefPtr
302+ } else {
303+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
304+ cbFn := *CallbackVar
305+ cbFn(arg0, arg1, arg2)
306+ }
307+ CallbackVarRef = purego.NewCallback(fcb)
308+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
309+ }
310+ }
311+
312+ xFileDialogOpenMultipleTextFiles(x.GoPointer(), ParentVar.GoPointer(), CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
268313
269314 }
270315
@@ -303,7 +348,22 @@ var xFileDialogOpenTextFile func(uintptr, uintptr, uintptr, uintptr, uintptr)
303348 // The @callback will be called when the dialog is closed.
304349 func (x *FileDialog) OpenTextFile(ParentVar *Window, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) {
305350
306- xFileDialogOpenTextFile(x.GoPointer(), ParentVar.GoPointer(), CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
351+ var CallbackVarRef uintptr
352+ if CallbackVar != nil {
353+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
354+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
355+ CallbackVarRef = cbRefPtr
356+ } else {
357+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
358+ cbFn := *CallbackVar
359+ cbFn(arg0, arg1, arg2)
360+ }
361+ CallbackVarRef = purego.NewCallback(fcb)
362+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
363+ }
364+ }
365+
366+ xFileDialogOpenTextFile(x.GoPointer(), ParentVar.GoPointer(), CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
307367
308368 }
309369
@@ -346,7 +406,22 @@ var xFileDialogSave func(uintptr, uintptr, uintptr, uintptr, uintptr)
346406 // The @callback will be called when the dialog is closed.
347407 func (x *FileDialog) Save(ParentVar *Window, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) {
348408
349- xFileDialogSave(x.GoPointer(), ParentVar.GoPointer(), CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
409+ var CallbackVarRef uintptr
410+ if CallbackVar != nil {
411+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
412+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
413+ CallbackVarRef = cbRefPtr
414+ } else {
415+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
416+ cbFn := *CallbackVar
417+ cbFn(arg0, arg1, arg2)
418+ }
419+ CallbackVarRef = purego.NewCallback(fcb)
420+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
421+ }
422+ }
423+
424+ xFileDialogSave(x.GoPointer(), ParentVar.GoPointer(), CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
350425
351426 }
352427
@@ -386,7 +461,22 @@ var xFileDialogSaveTextFile func(uintptr, uintptr, uintptr, uintptr, uintptr)
386461 // The @callback will be called when the dialog is closed.
387462 func (x *FileDialog) SaveTextFile(ParentVar *Window, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) {
388463
389- xFileDialogSaveTextFile(x.GoPointer(), ParentVar.GoPointer(), CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
464+ var CallbackVarRef uintptr
465+ if CallbackVar != nil {
466+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
467+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
468+ CallbackVarRef = cbRefPtr
469+ } else {
470+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
471+ cbFn := *CallbackVar
472+ cbFn(arg0, arg1, arg2)
473+ }
474+ CallbackVarRef = purego.NewCallback(fcb)
475+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
476+ }
477+ }
478+
479+ xFileDialogSaveTextFile(x.GoPointer(), ParentVar.GoPointer(), CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
390480
391481 }
392482
@@ -436,7 +526,22 @@ var xFileDialogSelectFolder func(uintptr, uintptr, uintptr, uintptr, uintptr)
436526 // The @callback will be called when the dialog is closed.
437527 func (x *FileDialog) SelectFolder(ParentVar *Window, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) {
438528
439- xFileDialogSelectFolder(x.GoPointer(), ParentVar.GoPointer(), CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
529+ var CallbackVarRef uintptr
530+ if CallbackVar != nil {
531+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
532+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
533+ CallbackVarRef = cbRefPtr
534+ } else {
535+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
536+ cbFn := *CallbackVar
537+ cbFn(arg0, arg1, arg2)
538+ }
539+ CallbackVarRef = purego.NewCallback(fcb)
540+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
541+ }
542+ }
543+
544+ xFileDialogSelectFolder(x.GoPointer(), ParentVar.GoPointer(), CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
440545
441546 }
442547
@@ -477,7 +582,22 @@ var xFileDialogSelectMultipleFolders func(uintptr, uintptr, uintptr, uintptr, ui
477582 // The @callback will be called when the dialog is closed.
478583 func (x *FileDialog) SelectMultipleFolders(ParentVar *Window, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) {
479584
480- xFileDialogSelectMultipleFolders(x.GoPointer(), ParentVar.GoPointer(), CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
585+ var CallbackVarRef uintptr
586+ if CallbackVar != nil {
587+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
588+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
589+ CallbackVarRef = cbRefPtr
590+ } else {
591+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
592+ cbFn := *CallbackVar
593+ cbFn(arg0, arg1, arg2)
594+ }
595+ CallbackVarRef = purego.NewCallback(fcb)
596+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
597+ }
598+ }
599+
600+ xFileDialogSelectMultipleFolders(x.GoPointer(), ParentVar.GoPointer(), CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
481601
482602 }
483603
@@ -505,16 +625,16 @@ func (x *FileDialog) SelectMultipleFoldersFinish(ResultVar gio.AsyncResult) (*gi
505625
506626 }
507627
508-var xFileDialogSetAcceptLabel func(uintptr, string)
628+var xFileDialogSetAcceptLabel func(uintptr, uintptr)
509629
510630 // Sets the label shown on the file chooser's accept button.
511631 //
512632 // Leaving the accept label unset or setting it as `NULL` will
513633 // fall back to a default label, depending on what API is used
514634 // to launch the file dialog.
515-func (x *FileDialog) SetAcceptLabel(AcceptLabelVar string) {
635+func (x *FileDialog) SetAcceptLabel(AcceptLabelVar *string) {
516636
517- xFileDialogSetAcceptLabel(x.GoPointer(), AcceptLabelVar)
637+ xFileDialogSetAcceptLabel(x.GoPointer(), core.NullableStringToPtr(AcceptLabelVar))
518638
519639 }
520640
@@ -567,7 +687,7 @@ func (x *FileDialog) SetInitialFolder(FolderVar gio.File) {
567687
568688 }
569689
570-var xFileDialogSetInitialName func(uintptr, string)
690+var xFileDialogSetInitialName func(uintptr, uintptr)
571691
572692 // Sets the filename that will be initially selected.
573693 //
@@ -577,9 +697,9 @@ var xFileDialogSetInitialName func(uintptr, string)
577697 // If a file with this name already exists in the directory set
578698 // via [property@Gtk.FileDialog:initial-folder], the dialog will
579699 // preselect it.
580-func (x *FileDialog) SetInitialName(NameVar string) {
700+func (x *FileDialog) SetInitialName(NameVar *string) {
581701
582- xFileDialogSetInitialName(x.GoPointer(), NameVar)
702+ xFileDialogSetInitialName(x.GoPointer(), core.NullableStringToPtr(NameVar))
583703
584704 }
585705
@@ -618,7 +738,7 @@ func (c *FileDialog) SetGoPointer(ptr uintptr) {
618738 func (x *FileDialog) SetPropertyAcceptLabel(value string) {
619739 var v gobject.Value
620740 v.Init(gobject.TypeStringVal)
621- v.SetString(value)
741+ v.SetString(&value)
622742 x.SetProperty("accept-label", &v)
623743 }
624744
@@ -637,7 +757,7 @@ func (x *FileDialog) GetPropertyAcceptLabel() string {
637757 func (x *FileDialog) SetPropertyInitialName(value string) {
638758 var v gobject.Value
639759 v.Init(gobject.TypeStringVal)
640- v.SetString(value)
760+ v.SetString(&value)
641761 x.SetProperty("initial-name", &v)
642762 }
643763
@@ -673,7 +793,7 @@ func (x *FileDialog) GetPropertyModal() bool {
673793 func (x *FileDialog) SetPropertyTitle(value string) {
674794 var v gobject.Value
675795 v.Init(gobject.TypeStringVal)
676- v.SetString(value)
796+ v.SetString(&value)
677797 x.SetProperty("title", &v)
678798 }
679799
M v4/gtk/gtkfilefilter.go +4 -4
@@ -202,15 +202,15 @@ func (x *FileFilter) GetName() string {
202202 return cret
203203 }
204204
205-var xFileFilterSetName func(uintptr, string)
205+var xFileFilterSetName func(uintptr, uintptr)
206206
207207 // Sets a human-readable name of the filter.
208208 //
209209 // This is the string that will be displayed in the user interface
210210 // if there is a selectable list of filters.
211-func (x *FileFilter) SetName(NameVar string) {
211+func (x *FileFilter) SetName(NameVar *string) {
212212
213- xFileFilterSetName(x.GoPointer(), NameVar)
213+ xFileFilterSetName(x.GoPointer(), core.NullableStringToPtr(NameVar))
214214
215215 }
216216
@@ -251,7 +251,7 @@ func (x *FileFilter) SetPropertyMimeTypes(value []string) {
251251 func (x *FileFilter) SetPropertyName(value string) {
252252 var v gobject.Value
253253 v.Init(gobject.TypeStringVal)
254- v.SetString(value)
254+ v.SetString(&value)
255255 x.SetProperty("name", &v)
256256 }
257257
M v4/gtk/gtkfilelauncher.go +32 -2
@@ -108,7 +108,22 @@ var xFileLauncherLaunch func(uintptr, uintptr, uintptr, uintptr, uintptr)
108108 // This may present an app chooser dialog to the user.
109109 func (x *FileLauncher) Launch(ParentVar *Window, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) {
110110
111- xFileLauncherLaunch(x.GoPointer(), ParentVar.GoPointer(), CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
111+ var CallbackVarRef uintptr
112+ if CallbackVar != nil {
113+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
114+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
115+ CallbackVarRef = cbRefPtr
116+ } else {
117+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
118+ cbFn := *CallbackVar
119+ cbFn(arg0, arg1, arg2)
120+ }
121+ CallbackVarRef = purego.NewCallback(fcb)
122+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
123+ }
124+ }
125+
126+ xFileLauncherLaunch(x.GoPointer(), ParentVar.GoPointer(), CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
112127
113128 }
114129
@@ -135,7 +150,22 @@ var xFileLauncherOpenContainingFolder func(uintptr, uintptr, uintptr, uintptr, u
135150 // is e.g. a http:// uri.
136151 func (x *FileLauncher) OpenContainingFolder(ParentVar *Window, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) {
137152
138- xFileLauncherOpenContainingFolder(x.GoPointer(), ParentVar.GoPointer(), CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
153+ var CallbackVarRef uintptr
154+ if CallbackVar != nil {
155+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
156+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
157+ CallbackVarRef = cbRefPtr
158+ } else {
159+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
160+ cbFn := *CallbackVar
161+ cbFn(arg0, arg1, arg2)
162+ }
163+ CallbackVarRef = purego.NewCallback(fcb)
164+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
165+ }
166+ }
167+
168+ xFileLauncherOpenContainingFolder(x.GoPointer(), ParentVar.GoPointer(), CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
139169
140170 }
141171
M v4/gtk/gtkflowbox.go +109 -4
@@ -198,7 +198,37 @@ 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- xFlowBoxBindModel(x.GoPointer(), ModelVar.GoPointer(), glib.NewCallback(CreateWidgetFuncVar), UserDataVar, glib.NewCallback(UserDataFreeFuncVar))
201+ var CreateWidgetFuncVarRef uintptr
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)
213+ }
214+ }
215+
216+ var UserDataFreeFuncVarRef uintptr
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)
228+ }
229+ }
230+
231+ xFlowBoxBindModel(x.GoPointer(), ModelVar.GoPointer(), CreateWidgetFuncVarRef, UserDataVar, UserDataFreeFuncVarRef)
202232
203233 }
204234
@@ -414,7 +444,22 @@ var xFlowBoxSelectedForeach func(uintptr, uintptr, uintptr)
414444 // this function.
415445 func (x *FlowBox) SelectedForeach(FuncVar *FlowBoxForeachFunc, DataVar uintptr) {
416446
417- xFlowBoxSelectedForeach(x.GoPointer(), glib.NewCallback(FuncVar), DataVar)
447+ var FuncVarRef uintptr
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)
459+ }
460+ }
461+
462+ xFlowBoxSelectedForeach(x.GoPointer(), FuncVarRef, DataVar)
418463
419464 }
420465
@@ -454,7 +499,37 @@ var xFlowBoxSetFilterFunc func(uintptr, uintptr, uintptr, uintptr)
454499 // (see [method@Gtk.FlowBox.bind_model]).
455500 func (x *FlowBox) SetFilterFunc(FilterFuncVar *FlowBoxFilterFunc, UserDataVar uintptr, DestroyVar *glib.DestroyNotify) {
456501
457- xFlowBoxSetFilterFunc(x.GoPointer(), glib.NewCallbackNullable(FilterFuncVar), UserDataVar, glib.NewCallback(DestroyVar))
502+ var FilterFuncVarRef uintptr
503+ if FilterFuncVar != nil {
504+ FilterFuncVarPtr := uintptr(unsafe.Pointer(FilterFuncVar))
505+ if cbRefPtr, ok := glib.GetCallback(FilterFuncVarPtr); ok {
506+ FilterFuncVarRef = cbRefPtr
507+ } else {
508+ fcb := func(arg0 uintptr, arg1 uintptr) bool {
509+ cbFn := *FilterFuncVar
510+ return cbFn(arg0, arg1)
511+ }
512+ FilterFuncVarRef = purego.NewCallback(fcb)
513+ glib.SaveCallback(FilterFuncVarPtr, FilterFuncVarRef)
514+ }
515+ }
516+
517+ var DestroyVarRef uintptr
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)
529+ }
530+ }
531+
532+ xFlowBoxSetFilterFunc(x.GoPointer(), FilterFuncVarRef, UserDataVar, DestroyVarRef)
458533
459534 }
460535
@@ -544,7 +619,37 @@ var xFlowBoxSetSortFunc func(uintptr, uintptr, uintptr, uintptr)
544619 // (see [method@Gtk.FlowBox.bind_model]).
545620 func (x *FlowBox) SetSortFunc(SortFuncVar *FlowBoxSortFunc, UserDataVar uintptr, DestroyVar *glib.DestroyNotify) {
546621
547- xFlowBoxSetSortFunc(x.GoPointer(), glib.NewCallbackNullable(SortFuncVar), UserDataVar, glib.NewCallback(DestroyVar))
622+ var SortFuncVarRef uintptr
623+ if SortFuncVar != nil {
624+ SortFuncVarPtr := uintptr(unsafe.Pointer(SortFuncVar))
625+ if cbRefPtr, ok := glib.GetCallback(SortFuncVarPtr); ok {
626+ SortFuncVarRef = cbRefPtr
627+ } else {
628+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int {
629+ cbFn := *SortFuncVar
630+ return cbFn(arg0, arg1, arg2)
631+ }
632+ SortFuncVarRef = purego.NewCallback(fcb)
633+ glib.SaveCallback(SortFuncVarPtr, SortFuncVarRef)
634+ }
635+ }
636+
637+ var DestroyVarRef uintptr
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)
649+ }
650+ }
651+
652+ xFlowBoxSetSortFunc(x.GoPointer(), SortFuncVarRef, UserDataVar, DestroyVarRef)
548653
549654 }
550655
M v4/gtk/gtkfontbutton.go +1 -1
@@ -193,7 +193,7 @@ func (x *FontButton) GetPropertyModal() bool {
193193 func (x *FontButton) SetPropertyTitle(value string) {
194194 var v gobject.Value
195195 v.Init(gobject.TypeStringVal)
196- v.SetString(value)
196+ v.SetString(&value)
197197 x.SetProperty("title", &v)
198198 }
199199
M v4/gtk/gtkfontchooser.go +3 -3
@@ -507,7 +507,7 @@ func (x *FontChooserBase) SetPropertyFont(value string) {
507507 obj.Ptr = x.GoPointer()
508508 var v gobject.Value
509509 v.Init(gobject.TypeStringVal)
510- v.SetString(value)
510+ v.SetString(&value)
511511 obj.SetProperty("font", &v)
512512 }
513513
@@ -562,7 +562,7 @@ func (x *FontChooserBase) SetPropertyLanguage(value string) {
562562 obj.Ptr = x.GoPointer()
563563 var v gobject.Value
564564 v.Init(gobject.TypeStringVal)
565- v.SetString(value)
565+ v.SetString(&value)
566566 obj.SetProperty("language", &v)
567567 }
568568
@@ -583,7 +583,7 @@ func (x *FontChooserBase) SetPropertyPreviewText(value string) {
583583 obj.Ptr = x.GoPointer()
584584 var v gobject.Value
585585 v.Init(gobject.TypeStringVal)
586- v.SetString(value)
586+ v.SetString(&value)
587587 obj.SetProperty("preview-text", &v)
588588 }
589589
M v4/gtk/gtkfontchooserdialog.go +3 -3
@@ -52,13 +52,13 @@ func FontChooserDialogNewFromInternalPtr(ptr uintptr) *FontChooserDialog {
5252 return cls
5353 }
5454
55-var xNewFontChooserDialog func(string, uintptr) uintptr
55+var xNewFontChooserDialog func(uintptr, uintptr) uintptr
5656
5757 // Creates a new `GtkFontChooserDialog`.
58-func NewFontChooserDialog(TitleVar string, ParentVar *Window) *FontChooserDialog {
58+func NewFontChooserDialog(TitleVar *string, ParentVar *Window) *FontChooserDialog {
5959 var cls *FontChooserDialog
6060
61- cret := xNewFontChooserDialog(TitleVar, ParentVar.GoPointer())
61+ cret := xNewFontChooserDialog(core.NullableStringToPtr(TitleVar), ParentVar.GoPointer())
6262
6363 if cret == 0 {
6464 return nil
M v4/gtk/gtkfontdialog.go +65 -5
@@ -76,7 +76,22 @@ var xFontDialogChooseFace func(uintptr, uintptr, uintptr, uintptr, uintptr, uint
7676 // A font face represents a font family and style, but no specific font size.
7777 func (x *FontDialog) ChooseFace(ParentVar *Window, InitialValueVar *pango.FontFace, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) {
7878
79- xFontDialogChooseFace(x.GoPointer(), ParentVar.GoPointer(), InitialValueVar.GoPointer(), CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
79+ var CallbackVarRef uintptr
80+ if CallbackVar != nil {
81+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
82+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
83+ CallbackVarRef = cbRefPtr
84+ } else {
85+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
86+ cbFn := *CallbackVar
87+ cbFn(arg0, arg1, arg2)
88+ }
89+ CallbackVarRef = purego.NewCallback(fcb)
90+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
91+ }
92+ }
93+
94+ xFontDialogChooseFace(x.GoPointer(), ParentVar.GoPointer(), InitialValueVar.GoPointer(), CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
8095
8196 }
8297
@@ -111,7 +126,22 @@ var xFontDialogChooseFamily func(uintptr, uintptr, uintptr, uintptr, uintptr, ui
111126 // The font chooser dialog will be set up for selecting a font family.
112127 func (x *FontDialog) ChooseFamily(ParentVar *Window, InitialValueVar *pango.FontFamily, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) {
113128
114- xFontDialogChooseFamily(x.GoPointer(), ParentVar.GoPointer(), InitialValueVar.GoPointer(), CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
129+ var CallbackVarRef uintptr
130+ if CallbackVar != nil {
131+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
132+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
133+ CallbackVarRef = cbRefPtr
134+ } else {
135+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
136+ cbFn := *CallbackVar
137+ cbFn(arg0, arg1, arg2)
138+ }
139+ CallbackVarRef = purego.NewCallback(fcb)
140+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
141+ }
142+ }
143+
144+ xFontDialogChooseFamily(x.GoPointer(), ParentVar.GoPointer(), InitialValueVar.GoPointer(), CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
115145
116146 }
117147
@@ -149,7 +179,22 @@ var xFontDialogChooseFont func(uintptr, uintptr, *pango.FontDescription, uintptr
149179 // use [method@Gtk.FontDialog.choose_font_and_features] instead.
150180 func (x *FontDialog) ChooseFont(ParentVar *Window, InitialValueVar *pango.FontDescription, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) {
151181
152- xFontDialogChooseFont(x.GoPointer(), ParentVar.GoPointer(), InitialValueVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
182+ var CallbackVarRef uintptr
183+ if CallbackVar != nil {
184+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
185+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
186+ CallbackVarRef = cbRefPtr
187+ } else {
188+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
189+ cbFn := *CallbackVar
190+ cbFn(arg0, arg1, arg2)
191+ }
192+ CallbackVarRef = purego.NewCallback(fcb)
193+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
194+ }
195+ }
196+
197+ xFontDialogChooseFont(x.GoPointer(), ParentVar.GoPointer(), InitialValueVar, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
153198
154199 }
155200
@@ -164,7 +209,22 @@ var xFontDialogChooseFontAndFeatures func(uintptr, uintptr, *pango.FontDescripti
164209 // enabling glyph variants or ligatures.
165210 func (x *FontDialog) ChooseFontAndFeatures(ParentVar *Window, InitialValueVar *pango.FontDescription, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) {
166211
167- xFontDialogChooseFontAndFeatures(x.GoPointer(), ParentVar.GoPointer(), InitialValueVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
212+ var CallbackVarRef uintptr
213+ if CallbackVar != nil {
214+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
215+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
216+ CallbackVarRef = cbRefPtr
217+ } else {
218+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
219+ cbFn := *CallbackVar
220+ cbFn(arg0, arg1, arg2)
221+ }
222+ CallbackVarRef = purego.NewCallback(fcb)
223+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
224+ }
225+ }
226+
227+ xFontDialogChooseFontAndFeatures(x.GoPointer(), ParentVar.GoPointer(), InitialValueVar, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
168228
169229 }
170230
@@ -372,7 +432,7 @@ func (x *FontDialog) GetPropertyModal() bool {
372432 func (x *FontDialog) SetPropertyTitle(value string) {
373433 var v gobject.Value
374434 v.Init(gobject.TypeStringVal)
375- v.SetString(value)
435+ v.SetString(&value)
376436 x.SetProperty("title", &v)
377437 }
378438
M v4/gtk/gtkfontdialogbutton.go +4 -4
@@ -212,12 +212,12 @@ func (x *FontDialogButton) SetFontDesc(FontDescVar *pango.FontDescription) {
212212
213213 }
214214
215-var xFontDialogButtonSetFontFeatures func(uintptr, string)
215+var xFontDialogButtonSetFontFeatures func(uintptr, uintptr)
216216
217217 // Sets the font features of the button.
218-func (x *FontDialogButton) SetFontFeatures(FontFeaturesVar string) {
218+func (x *FontDialogButton) SetFontFeatures(FontFeaturesVar *string) {
219219
220- xFontDialogButtonSetFontFeatures(x.GoPointer(), FontFeaturesVar)
220+ xFontDialogButtonSetFontFeatures(x.GoPointer(), core.NullableStringToPtr(FontFeaturesVar))
221221
222222 }
223223
@@ -313,7 +313,7 @@ func (x *FontDialogButton) GetPropertyFontDesc() uintptr {
313313 func (x *FontDialogButton) SetPropertyFontFeatures(value string) {
314314 var v gobject.Value
315315 v.Init(gobject.TypeStringVal)
316- v.SetString(value)
316+ v.SetString(&value)
317317 x.SetProperty("font-features", &v)
318318 }
319319
M v4/gtk/gtkframe.go +7 -7
@@ -112,15 +112,15 @@ func FrameNewFromInternalPtr(ptr uintptr) *Frame {
112112 return cls
113113 }
114114
115-var xNewFrame func(string) uintptr
115+var xNewFrame func(uintptr) uintptr
116116
117117 // Creates a new `GtkFrame`, with optional label @label.
118118 //
119119 // If @label is %NULL, the label is omitted.
120-func NewFrame(LabelVar string) *Frame {
120+func NewFrame(LabelVar *string) *Frame {
121121 var cls *Frame
122122
123- cret := xNewFrame(LabelVar)
123+ cret := xNewFrame(core.NullableStringToPtr(LabelVar))
124124
125125 if cret == 0 {
126126 return nil
@@ -195,13 +195,13 @@ func (x *Frame) SetChild(ChildVar *Widget) {
195195
196196 }
197197
198-var xFrameSetLabel func(uintptr, string)
198+var xFrameSetLabel func(uintptr, uintptr)
199199
200200 // Creates a new `GtkLabel` with the @label and sets it as the frame's
201201 // label widget.
202-func (x *Frame) SetLabel(LabelVar string) {
202+func (x *Frame) SetLabel(LabelVar *string) {
203203
204- xFrameSetLabel(x.GoPointer(), LabelVar)
204+ xFrameSetLabel(x.GoPointer(), core.NullableStringToPtr(LabelVar))
205205
206206 }
207207
@@ -244,7 +244,7 @@ func (c *Frame) SetGoPointer(ptr uintptr) {
244244 func (x *Frame) SetPropertyLabel(value string) {
245245 var v gobject.Value
246246 v.Init(gobject.TypeStringVal)
247- v.SetString(value)
247+ v.SetString(&value)
248248 x.SetProperty("label", &v)
249249 }
250250
M v4/gtk/gtkheaderbar.go +4 -4
@@ -201,7 +201,7 @@ func (x *HeaderBar) Remove(ChildVar *Widget) {
201201
202202 }
203203
204-var xHeaderBarSetDecorationLayout func(uintptr, string)
204+var xHeaderBarSetDecorationLayout func(uintptr, uintptr)
205205
206206 // Sets the decoration layout for this header bar.
207207 //
@@ -220,9 +220,9 @@ var xHeaderBarSetDecorationLayout func(uintptr, string)
220220 //
221221 // For example, “icon:minimize,maximize,close” specifies an icon
222222 // on the left, and minimize, maximize and close buttons on the right.
223-func (x *HeaderBar) SetDecorationLayout(LayoutVar string) {
223+func (x *HeaderBar) SetDecorationLayout(LayoutVar *string) {
224224
225- xHeaderBarSetDecorationLayout(x.GoPointer(), LayoutVar)
225+ xHeaderBarSetDecorationLayout(x.GoPointer(), core.NullableStringToPtr(LayoutVar))
226226
227227 }
228228
@@ -288,7 +288,7 @@ func (c *HeaderBar) SetGoPointer(ptr uintptr) {
288288 func (x *HeaderBar) SetPropertyDecorationLayout(value string) {
289289 var v gobject.Value
290290 v.Init(gobject.TypeStringVal)
291- v.SetString(value)
291+ v.SetString(&value)
292292 x.SetProperty("decoration-layout", &v)
293293 }
294294
M v4/gtk/gtkiconpaintable.go +1 -1
@@ -124,7 +124,7 @@ func (c *IconPaintable) SetGoPointer(ptr uintptr) {
124124 func (x *IconPaintable) SetPropertyIconName(value string) {
125125 var v gobject.Value
126126 v.Init(gobject.TypeStringVal)
127- v.SetString(value)
127+ v.SetString(&value)
128128 x.SetProperty("icon-name", &v)
129129 }
130130
M v4/gtk/gtkicontheme.go +4 -4
@@ -343,16 +343,16 @@ func (x *IconTheme) SetSearchPath(PathVar []string) {
343343
344344 }
345345
346-var xIconThemeSetThemeName func(uintptr, string)
346+var xIconThemeSetThemeName func(uintptr, uintptr)
347347
348348 // Sets the name of the icon theme that the `GtkIconTheme` object uses
349349 // overriding system configuration.
350350 //
351351 // This function cannot be called on the icon theme objects returned
352352 // from [func@Gtk.IconTheme.get_for_display].
353-func (x *IconTheme) SetThemeName(ThemeNameVar string) {
353+func (x *IconTheme) SetThemeName(ThemeNameVar *string) {
354354
355- xIconThemeSetThemeName(x.GoPointer(), ThemeNameVar)
355+ xIconThemeSetThemeName(x.GoPointer(), core.NullableStringToPtr(ThemeNameVar))
356356
357357 }
358358
@@ -444,7 +444,7 @@ func (x *IconTheme) GetPropertySearchPath() []string {
444444 func (x *IconTheme) SetPropertyThemeName(value string) {
445445 var v gobject.Value
446446 v.Init(gobject.TypeStringVal)
447- v.SetString(value)
447+ v.SetString(&value)
448448 x.SetProperty("theme-name", &v)
449449 }
450450
M v4/gtk/gtkiconview.go +16 -1
@@ -536,7 +536,22 @@ 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- xIconViewSelectedForeach(x.GoPointer(), glib.NewCallback(FuncVar), DataVar)
539+ var FuncVarRef uintptr
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)
551+ }
552+ }
553+
554+ xIconViewSelectedForeach(x.GoPointer(), FuncVarRef, DataVar)
540555
541556 }
542557
M v4/gtk/gtkimage.go +15 -15
@@ -166,17 +166,17 @@ func NewImageFromGicon(IconVar gio.Icon) *Image {
166166 return cls
167167 }
168168
169-var xNewImageFromIconName func(string) uintptr
169+var xNewImageFromIconName func(uintptr) uintptr
170170
171171 // Creates a `GtkImage` displaying an icon from the current icon theme.
172172 //
173173 // If the icon name isn’t known, a “broken image” icon will be
174174 // displayed instead. If the current icon theme is changed, the icon
175175 // will be updated appropriately.
176-func NewImageFromIconName(IconNameVar string) *Image {
176+func NewImageFromIconName(IconNameVar *string) *Image {
177177 var cls *Image
178178
179- cret := xNewImageFromIconName(IconNameVar)
179+ cret := xNewImageFromIconName(core.NullableStringToPtr(IconNameVar))
180180
181181 if cret == 0 {
182182 return nil
@@ -373,7 +373,7 @@ func (x *Image) GetStorageType() ImageType {
373373 return cret
374374 }
375375
376-var xImageSetFromFile func(uintptr, string)
376+var xImageSetFromFile func(uintptr, uintptr)
377377
378378 // Sets a `GtkImage` to show a file.
379379 //
@@ -385,9 +385,9 @@ var xImageSetFromFile func(uintptr, string)
385385 // Use a proper image loading framework such as libglycin, which can
386386 // load many image formats into a `GdkTexture`, and then use
387387 // [method@Gtk.Image.set_from_paintable].
388-func (x *Image) SetFromFile(FilenameVar string) {
388+func (x *Image) SetFromFile(FilenameVar *string) {
389389
390- xImageSetFromFile(x.GoPointer(), FilenameVar)
390+ xImageSetFromFile(x.GoPointer(), core.NullableStringToPtr(FilenameVar))
391391
392392 }
393393
@@ -402,14 +402,14 @@ func (x *Image) SetFromGicon(IconVar gio.Icon) {
402402
403403 }
404404
405-var xImageSetFromIconName func(uintptr, string)
405+var xImageSetFromIconName func(uintptr, uintptr)
406406
407407 // Sets a `GtkImage` to show a named icon.
408408 //
409409 // See [ctor@Gtk.Image.new_from_icon_name] for details.
410-func (x *Image) SetFromIconName(IconNameVar string) {
410+func (x *Image) SetFromIconName(IconNameVar *string) {
411411
412- xImageSetFromIconName(x.GoPointer(), IconNameVar)
412+ xImageSetFromIconName(x.GoPointer(), core.NullableStringToPtr(IconNameVar))
413413
414414 }
415415
@@ -439,14 +439,14 @@ func (x *Image) SetFromPixbuf(PixbufVar *gdkpixbuf.Pixbuf) {
439439
440440 }
441441
442-var xImageSetFromResource func(uintptr, string)
442+var xImageSetFromResource func(uintptr, uintptr)
443443
444444 // Sets a `GtkImage` to show a resource.
445445 //
446446 // See [ctor@Gtk.Image.new_from_resource] for details.
447-func (x *Image) SetFromResource(ResourcePathVar string) {
447+func (x *Image) SetFromResource(ResourcePathVar *string) {
448448
449- xImageSetFromResource(x.GoPointer(), ResourcePathVar)
449+ xImageSetFromResource(x.GoPointer(), core.NullableStringToPtr(ResourcePathVar))
450450
451451 }
452452
@@ -487,7 +487,7 @@ func (c *Image) SetGoPointer(ptr uintptr) {
487487 func (x *Image) SetPropertyFile(value string) {
488488 var v gobject.Value
489489 v.Init(gobject.TypeStringVal)
490- v.SetString(value)
490+ v.SetString(&value)
491491 x.SetProperty("file", &v)
492492 }
493493
@@ -506,7 +506,7 @@ func (x *Image) GetPropertyFile() string {
506506 func (x *Image) SetPropertyIconName(value string) {
507507 var v gobject.Value
508508 v.Init(gobject.TypeStringVal)
509- v.SetString(value)
509+ v.SetString(&value)
510510 x.SetProperty("icon-name", &v)
511511 }
512512
@@ -550,7 +550,7 @@ func (x *Image) GetPropertyPixelSize() int {
550550 func (x *Image) SetPropertyResource(value string) {
551551 var v gobject.Value
552552 v.Init(gobject.TypeStringVal)
553- v.SetString(value)
553+ v.SetString(&value)
554554 x.SetProperty("resource", &v)
555555 }
556556
M v4/gtk/gtkimmulticontext.go +3 -3
@@ -174,7 +174,7 @@ func (x *IMMulticontext) GetContextId() string {
174174 return cret
175175 }
176176
177-var xIMMulticontextSetContextId func(uintptr, string)
177+var xIMMulticontextSetContextId func(uintptr, uintptr)
178178
179179 // Sets the context id for @context.
180180 //
@@ -184,9 +184,9 @@ var xIMMulticontextSetContextId func(uintptr, string)
184184 // Setting this to a non-%NULL value overrides the system-wide
185185 // IM module setting. See the [property@Gtk.Settings:gtk-im-module]
186186 // property.
187-func (x *IMMulticontext) SetContextId(ContextIdVar string) {
187+func (x *IMMulticontext) SetContextId(ContextIdVar *string) {
188188
189- xIMMulticontextSetContextId(x.GoPointer(), ContextIdVar)
189+ xIMMulticontextSetContextId(x.GoPointer(), core.NullableStringToPtr(ContextIdVar))
190190
191191 }
192192
M v4/gtk/gtkinfobar.go +3 -3
@@ -127,7 +127,7 @@ func NewInfoBar() *InfoBar {
127127 return cls
128128 }
129129
130-var xNewInfoBarWithButtons func(string, ...interface{}) uintptr
130+var xNewInfoBarWithButtons func(uintptr, ...interface{}) uintptr
131131
132132 // Creates a new `GtkInfoBar` with buttons.
133133 //
@@ -137,10 +137,10 @@ var xNewInfoBarWithButtons func(string, ...interface{}) uintptr
137137 // user clicks one of these dialog buttons, GtkInfoBar will emit
138138 // the [signal@Gtk.InfoBar::response] signal with the corresponding
139139 // response ID.
140-func NewInfoBarWithButtons(FirstButtonTextVar string, varArgs ...interface{}) *InfoBar {
140+func NewInfoBarWithButtons(FirstButtonTextVar *string, varArgs ...interface{}) *InfoBar {
141141 var cls *InfoBar
142142
143- cret := xNewInfoBarWithButtons(FirstButtonTextVar, varArgs...)
143+ cret := xNewInfoBarWithButtons(core.NullableStringToPtr(FirstButtonTextVar), varArgs...)
144144
145145 if cret == 0 {
146146 return nil
M v4/gtk/gtkinscription.go +11 -11
@@ -76,13 +76,13 @@ func InscriptionNewFromInternalPtr(ptr uintptr) *Inscription {
7676 return cls
7777 }
7878
79-var xNewInscription func(string) uintptr
79+var xNewInscription func(uintptr) uintptr
8080
8181 // Creates a new `GtkInscription` with the given text.
82-func NewInscription(TextVar string) *Inscription {
82+func NewInscription(TextVar *string) *Inscription {
8383 var cls *Inscription
8484
85- cret := xNewInscription(TextVar)
85+ cret := xNewInscription(core.NullableStringToPtr(TextVar))
8686
8787 if cret == 0 {
8888 return nil
@@ -208,14 +208,14 @@ func (x *Inscription) SetAttributes(AttrsVar *pango.AttrList) {
208208
209209 }
210210
211-var xInscriptionSetMarkup func(uintptr, string)
211+var xInscriptionSetMarkup func(uintptr, uintptr)
212212
213213 // Utility function to set the text and attributes to be displayed.
214214 //
215215 // See the [property@Gtk.Inscription:markup] property.
216-func (x *Inscription) SetMarkup(MarkupVar string) {
216+func (x *Inscription) SetMarkup(MarkupVar *string) {
217217
218- xInscriptionSetMarkup(x.GoPointer(), MarkupVar)
218+ xInscriptionSetMarkup(x.GoPointer(), core.NullableStringToPtr(MarkupVar))
219219
220220 }
221221
@@ -263,12 +263,12 @@ func (x *Inscription) SetNatLines(NatLinesVar uint) {
263263
264264 }
265265
266-var xInscriptionSetText func(uintptr, string)
266+var xInscriptionSetText func(uintptr, uintptr)
267267
268268 // Sets the text to be displayed.
269-func (x *Inscription) SetText(TextVar string) {
269+func (x *Inscription) SetText(TextVar *string) {
270270
271- xInscriptionSetText(x.GoPointer(), TextVar)
271+ xInscriptionSetText(x.GoPointer(), core.NullableStringToPtr(TextVar))
272272
273273 }
274274
@@ -351,7 +351,7 @@ func (x *Inscription) GetPropertyAttributes() uintptr {
351351 func (x *Inscription) SetPropertyMarkup(value string) {
352352 var v gobject.Value
353353 v.Init(gobject.TypeStringVal)
354- v.SetString(value)
354+ v.SetString(&value)
355355 x.SetProperty("markup", &v)
356356 }
357357
@@ -494,7 +494,7 @@ func (x *Inscription) GetPropertyNatLines() uint {
494494 func (x *Inscription) SetPropertyText(value string) {
495495 var v gobject.Value
496496 v.Init(gobject.TypeStringVal)
497- v.SetString(value)
497+ v.SetString(&value)
498498 x.SetProperty("text", &v)
499499 }
500500
M v4/gtk/gtklabel.go +7 -7
@@ -249,15 +249,15 @@ func LabelNewFromInternalPtr(ptr uintptr) *Label {
249249 return cls
250250 }
251251
252-var xNewLabel func(string) uintptr
252+var xNewLabel func(uintptr) uintptr
253253
254254 // Creates a new label with the given text inside it.
255255 //
256256 // You can pass `NULL` to get an empty label widget.
257-func NewLabel(StrVar string) *Label {
257+func NewLabel(StrVar *string) *Label {
258258 var cls *Label
259259
260- cret := xNewLabel(StrVar)
260+ cret := xNewLabel(core.NullableStringToPtr(StrVar))
261261
262262 if cret == 0 {
263263 return nil
@@ -268,7 +268,7 @@ func NewLabel(StrVar string) *Label {
268268 return cls
269269 }
270270
271-var xNewLabelWithMnemonic func(string) uintptr
271+var xNewLabelWithMnemonic func(uintptr) uintptr
272272
273273 // Creates a new label with the given text inside it, and a mnemonic.
274274 //
@@ -284,10 +284,10 @@ var xNewLabelWithMnemonic func(string) uintptr
284284 // widget. For instance, if the label is inside a button or menu item,
285285 // the button or menu item will automatically become the mnemonic widget
286286 // and be activated by the mnemonic.
287-func NewLabelWithMnemonic(StrVar string) *Label {
287+func NewLabelWithMnemonic(StrVar *string) *Label {
288288 var cls *Label
289289
290- cret := xNewLabelWithMnemonic(StrVar)
290+ cret := xNewLabelWithMnemonic(core.NullableStringToPtr(StrVar))
291291
292292 if cret == 0 {
293293 return nil
@@ -998,7 +998,7 @@ func (x *Label) GetPropertyAttributes() uintptr {
998998 func (x *Label) SetPropertyLabel(value string) {
999999 var v gobject.Value
10001000 v.Init(gobject.TypeStringVal)
1001- v.SetString(value)
1001+ v.SetString(&value)
10021002 x.SetProperty("label", &v)
10031003 }
10041004
M v4/gtk/gtklevelbar.go +29 -6
@@ -2,6 +2,7 @@
22 package gtk
33
44 import (
5+ "fmt"
56 "unsafe"
67
78 "github.com/jwijenbergh/purego"
@@ -229,12 +230,12 @@ func (x *LevelBar) GetMode() LevelBarMode {
229230 return cret
230231 }
231232
232-var xLevelBarGetOffsetValue func(uintptr, string, *float64) bool
233+var xLevelBarGetOffsetValue func(uintptr, uintptr, *float64) bool
233234
234235 // Fetches the value specified for the offset marker @name in @self.
235-func (x *LevelBar) GetOffsetValue(NameVar string, ValueVar *float64) bool {
236+func (x *LevelBar) GetOffsetValue(NameVar *string, ValueVar *float64) bool {
236237
237- cret := xLevelBarGetOffsetValue(x.GoPointer(), NameVar, ValueVar)
238+ cret := xLevelBarGetOffsetValue(x.GoPointer(), core.NullableStringToPtr(NameVar), ValueVar)
238239 return cret
239240 }
240241
@@ -247,15 +248,15 @@ func (x *LevelBar) GetValue() float64 {
247248 return cret
248249 }
249250
250-var xLevelBarRemoveOffsetValue func(uintptr, string)
251+var xLevelBarRemoveOffsetValue func(uintptr, uintptr)
251252
252253 // Removes an offset marker from a `GtkLevelBar`.
253254 //
254255 // The marker must have been previously added with
255256 // [method@Gtk.LevelBar.add_offset_value].
256-func (x *LevelBar) RemoveOffsetValue(NameVar string) {
257+func (x *LevelBar) RemoveOffsetValue(NameVar *string) {
257258
258- xLevelBarRemoveOffsetValue(x.GoPointer(), NameVar)
259+ xLevelBarRemoveOffsetValue(x.GoPointer(), core.NullableStringToPtr(NameVar))
259260
260261 }
261262
@@ -422,6 +423,28 @@ func (x *LevelBar) ConnectOffsetChanged(cb *func(LevelBar, string)) uint32 {
422423 return gobject.SignalConnect(x.GoPointer(), "offset-changed", cbRefPtr)
423424 }
424425
426+// ConnectOffsetChangedWithDetail connects to the "offset-changed" signal with a detail string.
427+// The detail is appended as "offset-changed::<detail>".
428+func (x *LevelBar) ConnectOffsetChangedWithDetail(detail string, cb *func(LevelBar, string)) uint32 {
429+ cbPtr := uintptr(unsafe.Pointer(cb))
430+ signalName := fmt.Sprintf("offset-changed::%s", detail)
431+ if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
432+ return gobject.SignalConnect(x.GoPointer(), signalName, cbRefPtr)
433+ }
434+
435+ fcb := func(clsPtr uintptr, NameVarp string) {
436+ fa := LevelBar{}
437+ fa.Ptr = clsPtr
438+ cbFn := *cb
439+
440+ cbFn(fa, NameVarp)
441+
442+ }
443+ cbRefPtr := purego.NewCallback(fcb)
444+ glib.SaveCallback(cbPtr, cbRefPtr)
445+ return gobject.SignalConnect(x.GoPointer(), signalName, cbRefPtr)
446+}
447+
425448 // Requests the user's screen reader to announce the given message.
426449 //
427450 // This kind of notification is useful for messages that
M v4/gtk/gtklinkbutton.go +6 -6
@@ -88,13 +88,13 @@ func NewLinkButton(UriVar string) *LinkButton {
8888 return cls
8989 }
9090
91-var xNewLinkButtonWithLabel func(string, string) uintptr
91+var xNewLinkButtonWithLabel func(string, uintptr) uintptr
9292
9393 // Creates a new `GtkLinkButton` containing a label.
94-func NewLinkButtonWithLabel(UriVar string, LabelVar string) *LinkButton {
94+func NewLinkButtonWithLabel(UriVar string, LabelVar *string) *LinkButton {
9595 var cls *LinkButton
9696
97- cret := xNewLinkButtonWithLabel(UriVar, LabelVar)
97+ cret := xNewLinkButtonWithLabel(UriVar, core.NullableStringToPtr(LabelVar))
9898
9999 if cret == 0 {
100100 return nil
@@ -166,7 +166,7 @@ func (c *LinkButton) SetGoPointer(ptr uintptr) {
166166 func (x *LinkButton) SetPropertyUri(value string) {
167167 var v gobject.Value
168168 v.Init(gobject.TypeStringVal)
169- v.SetString(value)
169+ v.SetString(&value)
170170 x.SetProperty("uri", &v)
171171 }
172172
@@ -521,9 +521,9 @@ func (x *LinkButton) GetActionTargetValue() *glib.Variant {
521521 // containing [class@ApplicationWindow] or its associated [class@Application],
522522 // respectively. This is the same form used for actions in the [class@Gio.Menu]
523523 // associated with the window.
524-func (x *LinkButton) SetActionName(ActionNameVar string) {
524+func (x *LinkButton) SetActionName(ActionNameVar *string) {
525525
526- XGtkActionableSetActionName(x.GoPointer(), ActionNameVar)
526+ XGtkActionableSetActionName(x.GoPointer(), core.NullableStringToPtr(ActionNameVar))
527527
528528 }
529529
M v4/gtk/gtklistbox.go +142 -7
@@ -209,7 +209,37 @@ var xListBoxBindModel func(uintptr, uintptr, uintptr, uintptr, uintptr)
209209 // should be implemented by the model.
210210 func (x *ListBox) BindModel(ModelVar gio.ListModel, CreateWidgetFuncVar *ListBoxCreateWidgetFunc, UserDataVar uintptr, UserDataFreeFuncVar *glib.DestroyNotify) {
211211
212- xListBoxBindModel(x.GoPointer(), ModelVar.GoPointer(), glib.NewCallbackNullable(CreateWidgetFuncVar), UserDataVar, glib.NewCallback(UserDataFreeFuncVar))
212+ var CreateWidgetFuncVarRef uintptr
213+ if CreateWidgetFuncVar != nil {
214+ CreateWidgetFuncVarPtr := uintptr(unsafe.Pointer(CreateWidgetFuncVar))
215+ if cbRefPtr, ok := glib.GetCallback(CreateWidgetFuncVarPtr); ok {
216+ CreateWidgetFuncVarRef = cbRefPtr
217+ } else {
218+ fcb := func(arg0 uintptr, arg1 uintptr) uintptr {
219+ cbFn := *CreateWidgetFuncVar
220+ return cbFn(arg0, arg1)
221+ }
222+ CreateWidgetFuncVarRef = purego.NewCallback(fcb)
223+ glib.SaveCallback(CreateWidgetFuncVarPtr, CreateWidgetFuncVarRef)
224+ }
225+ }
226+
227+ var UserDataFreeFuncVarRef uintptr
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)
239+ }
240+ }
241+
242+ xListBoxBindModel(x.GoPointer(), ModelVar.GoPointer(), CreateWidgetFuncVarRef, UserDataVar, UserDataFreeFuncVarRef)
213243
214244 }
215245
@@ -475,7 +505,22 @@ var xListBoxSelectedForeach func(uintptr, uintptr, uintptr)
475505 // Note that the selection cannot be modified from within this function.
476506 func (x *ListBox) SelectedForeach(FuncVar *ListBoxForeachFunc, DataVar uintptr) {
477507
478- xListBoxSelectedForeach(x.GoPointer(), glib.NewCallback(FuncVar), DataVar)
508+ var FuncVarRef uintptr
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)
520+ }
521+ }
522+
523+ xListBoxSelectedForeach(x.GoPointer(), FuncVarRef, DataVar)
479524
480525 }
481526
@@ -524,7 +569,37 @@ var xListBoxSetFilterFunc func(uintptr, uintptr, uintptr, uintptr)
524569 // (see [method@Gtk.ListBox.bind_model]).
525570 func (x *ListBox) SetFilterFunc(FilterFuncVar *ListBoxFilterFunc, UserDataVar uintptr, DestroyVar *glib.DestroyNotify) {
526571
527- xListBoxSetFilterFunc(x.GoPointer(), glib.NewCallbackNullable(FilterFuncVar), UserDataVar, glib.NewCallback(DestroyVar))
572+ var FilterFuncVarRef uintptr
573+ if FilterFuncVar != nil {
574+ FilterFuncVarPtr := uintptr(unsafe.Pointer(FilterFuncVar))
575+ if cbRefPtr, ok := glib.GetCallback(FilterFuncVarPtr); ok {
576+ FilterFuncVarRef = cbRefPtr
577+ } else {
578+ fcb := func(arg0 uintptr, arg1 uintptr) bool {
579+ cbFn := *FilterFuncVar
580+ return cbFn(arg0, arg1)
581+ }
582+ FilterFuncVarRef = purego.NewCallback(fcb)
583+ glib.SaveCallback(FilterFuncVarPtr, FilterFuncVarRef)
584+ }
585+ }
586+
587+ var DestroyVarRef uintptr
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)
599+ }
600+ }
601+
602+ xListBoxSetFilterFunc(x.GoPointer(), FilterFuncVarRef, UserDataVar, DestroyVarRef)
528603
529604 }
530605
@@ -557,7 +632,37 @@ var xListBoxSetHeaderFunc func(uintptr, uintptr, uintptr, uintptr)
557632 // [method@Gtk.ListBox.invalidate_headers] is called.
558633 func (x *ListBox) SetHeaderFunc(UpdateHeaderVar *ListBoxUpdateHeaderFunc, UserDataVar uintptr, DestroyVar *glib.DestroyNotify) {
559634
560- xListBoxSetHeaderFunc(x.GoPointer(), glib.NewCallbackNullable(UpdateHeaderVar), UserDataVar, glib.NewCallback(DestroyVar))
635+ var UpdateHeaderVarRef uintptr
636+ if UpdateHeaderVar != nil {
637+ UpdateHeaderVarPtr := uintptr(unsafe.Pointer(UpdateHeaderVar))
638+ if cbRefPtr, ok := glib.GetCallback(UpdateHeaderVarPtr); ok {
639+ UpdateHeaderVarRef = cbRefPtr
640+ } else {
641+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
642+ cbFn := *UpdateHeaderVar
643+ cbFn(arg0, arg1, arg2)
644+ }
645+ UpdateHeaderVarRef = purego.NewCallback(fcb)
646+ glib.SaveCallback(UpdateHeaderVarPtr, UpdateHeaderVarRef)
647+ }
648+ }
649+
650+ var DestroyVarRef uintptr
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)
662+ }
663+ }
664+
665+ xListBoxSetHeaderFunc(x.GoPointer(), UpdateHeaderVarRef, UserDataVar, DestroyVarRef)
561666
562667 }
563668
@@ -606,7 +711,37 @@ var xListBoxSetSortFunc func(uintptr, uintptr, uintptr, uintptr)
606711 // (see [method@Gtk.ListBox.bind_model]).
607712 func (x *ListBox) SetSortFunc(SortFuncVar *ListBoxSortFunc, UserDataVar uintptr, DestroyVar *glib.DestroyNotify) {
608713
609- xListBoxSetSortFunc(x.GoPointer(), glib.NewCallbackNullable(SortFuncVar), UserDataVar, glib.NewCallback(DestroyVar))
714+ var SortFuncVarRef uintptr
715+ if SortFuncVar != nil {
716+ SortFuncVarPtr := uintptr(unsafe.Pointer(SortFuncVar))
717+ if cbRefPtr, ok := glib.GetCallback(SortFuncVarPtr); ok {
718+ SortFuncVarRef = cbRefPtr
719+ } else {
720+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int {
721+ cbFn := *SortFuncVar
722+ return cbFn(arg0, arg1, arg2)
723+ }
724+ SortFuncVarRef = purego.NewCallback(fcb)
725+ glib.SaveCallback(SortFuncVarPtr, SortFuncVarRef)
726+ }
727+ }
728+
729+ var DestroyVarRef uintptr
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)
741+ }
742+ }
743+
744+ xListBoxSetSortFunc(x.GoPointer(), SortFuncVarRef, UserDataVar, DestroyVarRef)
610745
611746 }
612747
@@ -1713,9 +1848,9 @@ func (x *ListBoxRow) GetActionTargetValue() *glib.Variant {
17131848 // containing [class@ApplicationWindow] or its associated [class@Application],
17141849 // respectively. This is the same form used for actions in the [class@Gio.Menu]
17151850 // associated with the window.
1716-func (x *ListBoxRow) SetActionName(ActionNameVar string) {
1851+func (x *ListBoxRow) SetActionName(ActionNameVar *string) {
17171852
1718- XGtkActionableSetActionName(x.GoPointer(), ActionNameVar)
1853+ XGtkActionableSetActionName(x.GoPointer(), core.NullableStringToPtr(ActionNameVar))
17191854
17201855 }
17211856
M v4/gtk/gtklistitem.go +2 -2
@@ -264,7 +264,7 @@ func (c *ListItem) SetGoPointer(ptr uintptr) {
264264 func (x *ListItem) SetPropertyAccessibleDescription(value string) {
265265 var v gobject.Value
266266 v.Init(gobject.TypeStringVal)
267- v.SetString(value)
267+ v.SetString(&value)
268268 x.SetProperty("accessible-description", &v)
269269 }
270270
@@ -281,7 +281,7 @@ func (x *ListItem) GetPropertyAccessibleDescription() string {
281281 func (x *ListItem) SetPropertyAccessibleLabel(value string) {
282282 var v gobject.Value
283283 v.Init(gobject.TypeStringVal)
284- v.SetString(value)
284+ v.SetString(&value)
285285 x.SetProperty("accessible-label", &v)
286286 }
287287
M v4/gtk/gtklockbutton.go +7 -7
@@ -142,7 +142,7 @@ func (c *LockButton) SetGoPointer(ptr uintptr) {
142142 func (x *LockButton) SetPropertyTextLock(value string) {
143143 var v gobject.Value
144144 v.Init(gobject.TypeStringVal)
145- v.SetString(value)
145+ v.SetString(&value)
146146 x.SetProperty("text-lock", &v)
147147 }
148148
@@ -159,7 +159,7 @@ func (x *LockButton) GetPropertyTextLock() string {
159159 func (x *LockButton) SetPropertyTextUnlock(value string) {
160160 var v gobject.Value
161161 v.Init(gobject.TypeStringVal)
162- v.SetString(value)
162+ v.SetString(&value)
163163 x.SetProperty("text-unlock", &v)
164164 }
165165
@@ -176,7 +176,7 @@ func (x *LockButton) GetPropertyTextUnlock() string {
176176 func (x *LockButton) SetPropertyTooltipLock(value string) {
177177 var v gobject.Value
178178 v.Init(gobject.TypeStringVal)
179- v.SetString(value)
179+ v.SetString(&value)
180180 x.SetProperty("tooltip-lock", &v)
181181 }
182182
@@ -193,7 +193,7 @@ func (x *LockButton) GetPropertyTooltipLock() string {
193193 func (x *LockButton) SetPropertyTooltipNotAuthorized(value string) {
194194 var v gobject.Value
195195 v.Init(gobject.TypeStringVal)
196- v.SetString(value)
196+ v.SetString(&value)
197197 x.SetProperty("tooltip-not-authorized", &v)
198198 }
199199
@@ -210,7 +210,7 @@ func (x *LockButton) GetPropertyTooltipNotAuthorized() string {
210210 func (x *LockButton) SetPropertyTooltipUnlock(value string) {
211211 var v gobject.Value
212212 v.Init(gobject.TypeStringVal)
213- v.SetString(value)
213+ v.SetString(&value)
214214 x.SetProperty("tooltip-unlock", &v)
215215 }
216216
@@ -517,9 +517,9 @@ func (x *LockButton) GetActionTargetValue() *glib.Variant {
517517 // containing [class@ApplicationWindow] or its associated [class@Application],
518518 // respectively. This is the same form used for actions in the [class@Gio.Menu]
519519 // associated with the window.
520-func (x *LockButton) SetActionName(ActionNameVar string) {
520+func (x *LockButton) SetActionName(ActionNameVar *string) {
521521
522- XGtkActionableSetActionName(x.GoPointer(), ActionNameVar)
522+ XGtkActionableSetActionName(x.GoPointer(), core.NullableStringToPtr(ActionNameVar))
523523
524524 }
525525
M v4/gtk/gtkmaplistmodel.go +62 -2
@@ -86,7 +86,37 @@ var xNewMapListModel func(uintptr, uintptr, uintptr, uintptr) uintptr
8686 func NewMapListModel(ModelVar gio.ListModel, MapFuncVar *MapListModelMapFunc, UserDataVar uintptr, UserDestroyVar *glib.DestroyNotify) *MapListModel {
8787 var cls *MapListModel
8888
89- cret := xNewMapListModel(ModelVar.GoPointer(), glib.NewCallbackNullable(MapFuncVar), UserDataVar, glib.NewCallback(UserDestroyVar))
89+ var MapFuncVarRef uintptr
90+ if MapFuncVar != nil {
91+ MapFuncVarPtr := uintptr(unsafe.Pointer(MapFuncVar))
92+ if cbRefPtr, ok := glib.GetCallback(MapFuncVarPtr); ok {
93+ MapFuncVarRef = cbRefPtr
94+ } else {
95+ fcb := func(arg0 uintptr, arg1 uintptr) uintptr {
96+ cbFn := *MapFuncVar
97+ return cbFn(arg0, arg1)
98+ }
99+ MapFuncVarRef = purego.NewCallback(fcb)
100+ glib.SaveCallback(MapFuncVarPtr, MapFuncVarRef)
101+ }
102+ }
103+
104+ var UserDestroyVarRef uintptr
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)
116+ }
117+ }
118+
119+ cret := xNewMapListModel(ModelVar.GoPointer(), MapFuncVarRef, UserDataVar, UserDestroyVarRef)
90120
91121 if cret == 0 {
92122 return nil
@@ -137,7 +167,37 @@ var xMapListModelSetMapFunc func(uintptr, uintptr, uintptr, uintptr)
137167 // function returns items of the appropriate type.
138168 func (x *MapListModel) SetMapFunc(MapFuncVar *MapListModelMapFunc, UserDataVar uintptr, UserDestroyVar *glib.DestroyNotify) {
139169
140- xMapListModelSetMapFunc(x.GoPointer(), glib.NewCallbackNullable(MapFuncVar), UserDataVar, glib.NewCallback(UserDestroyVar))
170+ var MapFuncVarRef uintptr
171+ if MapFuncVar != nil {
172+ MapFuncVarPtr := uintptr(unsafe.Pointer(MapFuncVar))
173+ if cbRefPtr, ok := glib.GetCallback(MapFuncVarPtr); ok {
174+ MapFuncVarRef = cbRefPtr
175+ } else {
176+ fcb := func(arg0 uintptr, arg1 uintptr) uintptr {
177+ cbFn := *MapFuncVar
178+ return cbFn(arg0, arg1)
179+ }
180+ MapFuncVarRef = purego.NewCallback(fcb)
181+ glib.SaveCallback(MapFuncVarPtr, MapFuncVarRef)
182+ }
183+ }
184+
185+ var UserDestroyVarRef uintptr
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)
197+ }
198+ }
199+
200+ xMapListModelSetMapFunc(x.GoPointer(), MapFuncVarRef, UserDataVar, UserDestroyVarRef)
141201
142202 }
143203
M v4/gtk/gtkmediafile.go +6 -6
@@ -351,15 +351,15 @@ func (x *MediaFile) SetFile(FileVar gio.File) {
351351
352352 }
353353
354-var xMediaFileSetFilename func(uintptr, string)
354+var xMediaFileSetFilename func(uintptr, uintptr)
355355
356356 // Sets the `GtkMediaFile` to play the given file.
357357 //
358358 // This is a utility function that converts the given @filename
359359 // to a `GFile` and calls [method@Gtk.MediaFile.set_file].
360-func (x *MediaFile) SetFilename(FilenameVar string) {
360+func (x *MediaFile) SetFilename(FilenameVar *string) {
361361
362- xMediaFileSetFilename(x.GoPointer(), FilenameVar)
362+ xMediaFileSetFilename(x.GoPointer(), core.NullableStringToPtr(FilenameVar))
363363
364364 }
365365
@@ -377,15 +377,15 @@ func (x *MediaFile) SetInputStream(StreamVar *gio.InputStream) {
377377
378378 }
379379
380-var xMediaFileSetResource func(uintptr, string)
380+var xMediaFileSetResource func(uintptr, uintptr)
381381
382382 // Sets the `GtkMediaFile` to play the given resource.
383383 //
384384 // This is a utility function that converts the given @resource_path
385385 // to a `GFile` and calls [method@Gtk.MediaFile.set_file].
386-func (x *MediaFile) SetResource(ResourcePathVar string) {
386+func (x *MediaFile) SetResource(ResourcePathVar *string) {
387387
388- xMediaFileSetResource(x.GoPointer(), ResourcePathVar)
388+ xMediaFileSetResource(x.GoPointer(), core.NullableStringToPtr(ResourcePathVar))
389389
390390 }
391391
M v4/gtk/gtkmenubutton.go +33 -3
@@ -347,7 +347,37 @@ var xMenuButtonSetCreatePopupFunc func(uintptr, uintptr, uintptr, uintptr)
347347 // @menu_button. Instead, this can be done manually in @func.
348348 func (x *MenuButton) SetCreatePopupFunc(FuncVar *MenuButtonCreatePopupFunc, UserDataVar uintptr, DestroyNotifyVar *glib.DestroyNotify) {
349349
350- xMenuButtonSetCreatePopupFunc(x.GoPointer(), glib.NewCallbackNullable(FuncVar), UserDataVar, glib.NewCallbackNullable(DestroyNotifyVar))
350+ var FuncVarRef uintptr
351+ if FuncVar != nil {
352+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
353+ if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok {
354+ FuncVarRef = cbRefPtr
355+ } else {
356+ fcb := func(arg0 uintptr, arg1 uintptr) {
357+ cbFn := *FuncVar
358+ cbFn(arg0, arg1)
359+ }
360+ FuncVarRef = purego.NewCallback(fcb)
361+ glib.SaveCallback(FuncVarPtr, FuncVarRef)
362+ }
363+ }
364+
365+ var DestroyNotifyVarRef uintptr
366+ if DestroyNotifyVar != nil {
367+ DestroyNotifyVarPtr := uintptr(unsafe.Pointer(DestroyNotifyVar))
368+ if cbRefPtr, ok := glib.GetCallback(DestroyNotifyVarPtr); ok {
369+ DestroyNotifyVarRef = cbRefPtr
370+ } else {
371+ fcb := func(arg0 uintptr) {
372+ cbFn := *DestroyNotifyVar
373+ cbFn(arg0)
374+ }
375+ DestroyNotifyVarRef = purego.NewCallback(fcb)
376+ glib.SaveCallback(DestroyNotifyVarPtr, DestroyNotifyVarRef)
377+ }
378+ }
379+
380+ xMenuButtonSetCreatePopupFunc(x.GoPointer(), FuncVarRef, UserDataVar, DestroyNotifyVarRef)
351381
352382 }
353383
@@ -547,7 +577,7 @@ func (x *MenuButton) GetPropertyHasFrame() bool {
547577 func (x *MenuButton) SetPropertyIconName(value string) {
548578 var v gobject.Value
549579 v.Init(gobject.TypeStringVal)
550- v.SetString(value)
580+ v.SetString(&value)
551581 x.SetProperty("icon-name", &v)
552582 }
553583
@@ -564,7 +594,7 @@ func (x *MenuButton) GetPropertyIconName() string {
564594 func (x *MenuButton) SetPropertyLabel(value string) {
565595 var v gobject.Value
566596 v.Init(gobject.TypeStringVal)
567- v.SetString(value)
597+ v.SetString(&value)
568598 x.SetProperty("label", &v)
569599 }
570600
M v4/gtk/gtkmessagedialog.go +11 -11
@@ -137,7 +137,7 @@ func MessageDialogNewFromInternalPtr(ptr uintptr) *MessageDialog {
137137 return cls
138138 }
139139
140-var xNewMessageDialog func(uintptr, DialogFlags, MessageType, ButtonsType, string, ...interface{}) uintptr
140+var xNewMessageDialog func(uintptr, DialogFlags, MessageType, ButtonsType, uintptr, ...interface{}) uintptr
141141
142142 // Creates a new message dialog.
143143 //
@@ -145,10 +145,10 @@ var xNewMessageDialog func(uintptr, DialogFlags, MessageType, ButtonsType, strin
145145 // When the user clicks a button a “response” signal is emitted with
146146 // response IDs from [enum@Gtk.ResponseType]. See [class@Gtk.Dialog]
147147 // for more details.
148-func NewMessageDialog(ParentVar *Window, FlagsVar DialogFlags, TypeVar MessageType, ButtonsVar ButtonsType, MessageFormatVar string, varArgs ...interface{}) *MessageDialog {
148+func NewMessageDialog(ParentVar *Window, FlagsVar DialogFlags, TypeVar MessageType, ButtonsVar ButtonsType, MessageFormatVar *string, varArgs ...interface{}) *MessageDialog {
149149 var cls *MessageDialog
150150
151- cret := xNewMessageDialog(ParentVar.GoPointer(), FlagsVar, TypeVar, ButtonsVar, MessageFormatVar, varArgs...)
151+ cret := xNewMessageDialog(ParentVar.GoPointer(), FlagsVar, TypeVar, ButtonsVar, core.NullableStringToPtr(MessageFormatVar), varArgs...)
152152
153153 if cret == 0 {
154154 return nil
@@ -159,7 +159,7 @@ func NewMessageDialog(ParentVar *Window, FlagsVar DialogFlags, TypeVar MessageTy
159159 return cls
160160 }
161161
162-var xNewMessageDialogWithMarkup func(uintptr, DialogFlags, MessageType, ButtonsType, string, ...interface{}) uintptr
162+var xNewMessageDialogWithMarkup func(uintptr, DialogFlags, MessageType, ButtonsType, uintptr, ...interface{}) uintptr
163163
164164 // Creates a new message dialog.
165165 //
@@ -193,10 +193,10 @@ var xNewMessageDialogWithMarkup func(uintptr, DialogFlags, MessageType, ButtonsT
193193 // markup);
194194 //
195195 // ```
196-func NewMessageDialogWithMarkup(ParentVar *Window, FlagsVar DialogFlags, TypeVar MessageType, ButtonsVar ButtonsType, MessageFormatVar string, varArgs ...interface{}) *MessageDialog {
196+func NewMessageDialogWithMarkup(ParentVar *Window, FlagsVar DialogFlags, TypeVar MessageType, ButtonsVar ButtonsType, MessageFormatVar *string, varArgs ...interface{}) *MessageDialog {
197197 var cls *MessageDialog
198198
199- cret := xNewMessageDialogWithMarkup(ParentVar.GoPointer(), FlagsVar, TypeVar, ButtonsVar, MessageFormatVar, varArgs...)
199+ cret := xNewMessageDialogWithMarkup(ParentVar.GoPointer(), FlagsVar, TypeVar, ButtonsVar, core.NullableStringToPtr(MessageFormatVar), varArgs...)
200200
201201 if cret == 0 {
202202 return nil
@@ -234,12 +234,12 @@ func (x *MessageDialog) FormatSecondaryMarkup(MessageFormatVar string, varArgs .
234234
235235 }
236236
237-var xMessageDialogFormatSecondaryText func(uintptr, string, ...interface{})
237+var xMessageDialogFormatSecondaryText func(uintptr, uintptr, ...interface{})
238238
239239 // Sets the secondary text of the message dialog.
240-func (x *MessageDialog) FormatSecondaryText(MessageFormatVar string, varArgs ...interface{}) {
240+func (x *MessageDialog) FormatSecondaryText(MessageFormatVar *string, varArgs ...interface{}) {
241241
242- xMessageDialogFormatSecondaryText(x.GoPointer(), MessageFormatVar, varArgs...)
242+ xMessageDialogFormatSecondaryText(x.GoPointer(), core.NullableStringToPtr(MessageFormatVar), varArgs...)
243243
244244 }
245245
@@ -290,7 +290,7 @@ func (c *MessageDialog) SetGoPointer(ptr uintptr) {
290290 func (x *MessageDialog) SetPropertySecondaryText(value string) {
291291 var v gobject.Value
292292 v.Init(gobject.TypeStringVal)
293- v.SetString(value)
293+ v.SetString(&value)
294294 x.SetProperty("secondary-text", &v)
295295 }
296296
@@ -330,7 +330,7 @@ func (x *MessageDialog) GetPropertySecondaryUseMarkup() bool {
330330 func (x *MessageDialog) SetPropertyText(value string) {
331331 var v gobject.Value
332332 v.Init(gobject.TypeStringVal)
333- v.SetString(value)
333+ v.SetString(&value)
334334 x.SetProperty("text", &v)
335335 }
336336
M v4/gtk/gtknativedialog.go +1 -1
@@ -398,7 +398,7 @@ func (x *NativeDialog) GetPropertyModal() bool {
398398 func (x *NativeDialog) SetPropertyTitle(value string) {
399399 var v gobject.Value
400400 v.Init(gobject.TypeStringVal)
401- v.SetString(value)
401+ v.SetString(&value)
402402 x.SetProperty("title", &v)
403403 }
404404
M v4/gtk/gtknotebook.go +6 -6
@@ -572,16 +572,16 @@ func (x *Notebook) SetCurrentPage(PageNumVar int) {
572572
573573 }
574574
575-var xNotebookSetGroupName func(uintptr, string)
575+var xNotebookSetGroupName func(uintptr, uintptr)
576576
577577 // Sets a group name for @notebook.
578578 //
579579 // Notebooks with the same name will be able to exchange tabs
580580 // via drag and drop. A notebook with a %NULL group name will
581581 // not be able to exchange tabs with any other notebook.
582-func (x *Notebook) SetGroupName(GroupNameVar string) {
582+func (x *Notebook) SetGroupName(GroupNameVar *string) {
583583
584- xNotebookSetGroupName(x.GoPointer(), GroupNameVar)
584+ xNotebookSetGroupName(x.GoPointer(), core.NullableStringToPtr(GroupNameVar))
585585
586586 }
587587
@@ -763,7 +763,7 @@ func (x *Notebook) GetPropertyEnablePopup() bool {
763763 func (x *Notebook) SetPropertyGroupName(value string) {
764764 var v gobject.Value
765765 v.Init(gobject.TypeStringVal)
766- v.SetString(value)
766+ v.SetString(&value)
767767 x.SetProperty("group-name", &v)
768768 }
769769
@@ -1418,7 +1418,7 @@ func (x *NotebookPage) GetPropertyDetachable() bool {
14181418 func (x *NotebookPage) SetPropertyMenuLabel(value string) {
14191419 var v gobject.Value
14201420 v.Init(gobject.TypeStringVal)
1421- v.SetString(value)
1421+ v.SetString(&value)
14221422 x.SetProperty("menu-label", &v)
14231423 }
14241424
@@ -1503,7 +1503,7 @@ func (x *NotebookPage) GetPropertyTabFill() bool {
15031503 func (x *NotebookPage) SetPropertyTabLabel(value string) {
15041504 var v gobject.Value
15051505 v.Init(gobject.TypeStringVal)
1506- v.SetString(value)
1506+ v.SetString(&value)
15071507 x.SetProperty("tab-label", &v)
15081508 }
15091509
M v4/gtk/gtkpagesetup.go +9 -9
@@ -129,18 +129,18 @@ func NewPageSetupFromGvariant(VariantVar *glib.Variant) *PageSetup {
129129 return cls
130130 }
131131
132-var xNewPageSetupFromKeyFile func(*glib.KeyFile, string, **glib.Error) uintptr
132+var xNewPageSetupFromKeyFile func(*glib.KeyFile, uintptr, **glib.Error) uintptr
133133
134134 // Reads the page setup from the group @group_name in the key file
135135 // @key_file.
136136 //
137137 // Returns a new `GtkPageSetup` object with the restored
138138 // page setup, or %NULL if an error occurred.
139-func NewPageSetupFromKeyFile(KeyFileVar *glib.KeyFile, GroupNameVar string) (*PageSetup, error) {
139+func NewPageSetupFromKeyFile(KeyFileVar *glib.KeyFile, GroupNameVar *string) (*PageSetup, error) {
140140 var cls *PageSetup
141141 var cerr *glib.Error
142142
143- cret := xNewPageSetupFromKeyFile(KeyFileVar, GroupNameVar, &cerr)
143+ cret := xNewPageSetupFromKeyFile(KeyFileVar, core.NullableStringToPtr(GroupNameVar), &cerr)
144144
145145 if cret == 0 {
146146 return nil, cerr
@@ -292,14 +292,14 @@ func (x *PageSetup) LoadFile(FileNameVar string) (bool, error) {
292292
293293 }
294294
295-var xPageSetupLoadKeyFile func(uintptr, *glib.KeyFile, string, **glib.Error) bool
295+var xPageSetupLoadKeyFile func(uintptr, *glib.KeyFile, uintptr, **glib.Error) bool
296296
297297 // Reads the page setup from the group @group_name in the key file
298298 // @key_file.
299-func (x *PageSetup) LoadKeyFile(KeyFileVar *glib.KeyFile, GroupNameVar string) (bool, error) {
299+func (x *PageSetup) LoadKeyFile(KeyFileVar *glib.KeyFile, GroupNameVar *string) (bool, error) {
300300 var cerr *glib.Error
301301
302- cret := xPageSetupLoadKeyFile(x.GoPointer(), KeyFileVar, GroupNameVar, &cerr)
302+ cret := xPageSetupLoadKeyFile(x.GoPointer(), KeyFileVar, core.NullableStringToPtr(GroupNameVar), &cerr)
303303 if cerr == nil {
304304 return cret, nil
305305 }
@@ -397,12 +397,12 @@ func (x *PageSetup) ToGvariant() *glib.Variant {
397397 return cret
398398 }
399399
400-var xPageSetupToKeyFile func(uintptr, *glib.KeyFile, string)
400+var xPageSetupToKeyFile func(uintptr, *glib.KeyFile, uintptr)
401401
402402 // This function adds the page setup from @setup to @key_file.
403-func (x *PageSetup) ToKeyFile(KeyFileVar *glib.KeyFile, GroupNameVar string) {
403+func (x *PageSetup) ToKeyFile(KeyFileVar *glib.KeyFile, GroupNameVar *string) {
404404
405- xPageSetupToKeyFile(x.GoPointer(), KeyFileVar, GroupNameVar)
405+ xPageSetupToKeyFile(x.GoPointer(), KeyFileVar, core.NullableStringToPtr(GroupNameVar))
406406
407407 }
408408
M v4/gtk/gtkpagesetupunixdialog.go +3 -3
@@ -44,13 +44,13 @@ func PageSetupUnixDialogNewFromInternalPtr(ptr uintptr) *PageSetupUnixDialog {
4444 return cls
4545 }
4646
47-var xNewPageSetupUnixDialog func(string, uintptr) uintptr
47+var xNewPageSetupUnixDialog func(uintptr, uintptr) uintptr
4848
4949 // Creates a new page setup dialog.
50-func NewPageSetupUnixDialog(TitleVar string, ParentVar *Window) *PageSetupUnixDialog {
50+func NewPageSetupUnixDialog(TitleVar *string, ParentVar *Window) *PageSetupUnixDialog {
5151 var cls *PageSetupUnixDialog
5252
53- cret := xNewPageSetupUnixDialog(TitleVar, ParentVar.GoPointer())
53+ cret := xNewPageSetupUnixDialog(core.NullableStringToPtr(TitleVar), ParentVar.GoPointer())
5454
5555 if cret == 0 {
5656 return nil
M v4/gtk/gtkpapersize.go +6 -6
@@ -36,7 +36,7 @@ func (x *PaperSize) GoPointer() uintptr {
3636 return uintptr(unsafe.Pointer(x))
3737 }
3838
39-var xNewPaperSize func(string) *PaperSize
39+var xNewPaperSize func(uintptr) *PaperSize
4040
4141 // Creates a new `GtkPaperSize` object by parsing a
4242 // [PWG 5101.1-2002](ftp://ftp.pwg.org/pub/pwg/candidates/cs-pwgmsn10-20020226-5101.1.pdf)
@@ -44,9 +44,9 @@ var xNewPaperSize func(string) *PaperSize
4444 //
4545 // If @name is %NULL, the default paper size is returned,
4646 // see [func@Gtk.PaperSize.get_default].
47-func NewPaperSize(NameVar string) *PaperSize {
47+func NewPaperSize(NameVar *string) *PaperSize {
4848
49- cret := xNewPaperSize(NameVar)
49+ cret := xNewPaperSize(core.NullableStringToPtr(NameVar))
5050 return cret
5151 }
5252
@@ -86,14 +86,14 @@ func NewPaperSizeFromIpp(IppNameVar string, WidthVar float64, HeightVar float64)
8686 return cret
8787 }
8888
89-var xNewPaperSizeFromKeyFile func(*glib.KeyFile, string, **glib.Error) *PaperSize
89+var xNewPaperSizeFromKeyFile func(*glib.KeyFile, uintptr, **glib.Error) *PaperSize
9090
9191 // Reads a paper size from the group @group_name in the key file
9292 // @key_file.
93-func NewPaperSizeFromKeyFile(KeyFileVar *glib.KeyFile, GroupNameVar string) (*PaperSize, error) {
93+func NewPaperSizeFromKeyFile(KeyFileVar *glib.KeyFile, GroupNameVar *string) (*PaperSize, error) {
9494 var cerr *glib.Error
9595
96- cret := xNewPaperSizeFromKeyFile(KeyFileVar, GroupNameVar, &cerr)
96+ cret := xNewPaperSizeFromKeyFile(KeyFileVar, core.NullableStringToPtr(GroupNameVar), &cerr)
9797 if cerr == nil {
9898 return cret, nil
9999 }
M v4/gtk/gtkpasswordentry.go +1 -1
@@ -176,7 +176,7 @@ func (x *PasswordEntry) GetPropertyActivatesDefault() bool {
176176 func (x *PasswordEntry) SetPropertyPlaceholderText(value string) {
177177 var v gobject.Value
178178 v.Init(gobject.TypeStringVal)
179- v.SetString(value)
179+ v.SetString(&value)
180180 x.SetProperty("placeholder-text", &v)
181181 }
182182
M v4/gtk/gtkpicture.go +16 -16
@@ -132,16 +132,16 @@ func NewPictureForFile(FileVar gio.File) *Picture {
132132 return cls
133133 }
134134
135-var xNewPictureForFilename func(string) uintptr
135+var xNewPictureForFilename func(uintptr) uintptr
136136
137137 // Creates a new `GtkPicture` displaying the file @filename.
138138 //
139139 // This is a utility function that calls [ctor@Gtk.Picture.new_for_file].
140140 // See that function for details.
141-func NewPictureForFilename(FilenameVar string) *Picture {
141+func NewPictureForFilename(FilenameVar *string) *Picture {
142142 var cls *Picture
143143
144- cret := xNewPictureForFilename(FilenameVar)
144+ cret := xNewPictureForFilename(core.NullableStringToPtr(FilenameVar))
145145
146146 if cret == 0 {
147147 return nil
@@ -194,16 +194,16 @@ func NewPictureForPixbuf(PixbufVar *gdkpixbuf.Pixbuf) *Picture {
194194 return cls
195195 }
196196
197-var xNewPictureForResource func(string) uintptr
197+var xNewPictureForResource func(uintptr) uintptr
198198
199199 // Creates a new `GtkPicture` displaying the resource at @resource_path.
200200 //
201201 // This is a utility function that calls [ctor@Gtk.Picture.new_for_file].
202202 // See that function for details.
203-func NewPictureForResource(ResourcePathVar string) *Picture {
203+func NewPictureForResource(ResourcePathVar *string) *Picture {
204204 var cls *Picture
205205
206- cret := xNewPictureForResource(ResourcePathVar)
206+ cret := xNewPictureForResource(core.NullableStringToPtr(ResourcePathVar))
207207
208208 if cret == 0 {
209209 return nil
@@ -291,7 +291,7 @@ func (x *Picture) GetPaintable() *gdk.PaintableBase {
291291 return cls
292292 }
293293
294-var xPictureSetAlternativeText func(uintptr, string)
294+var xPictureSetAlternativeText func(uintptr, uintptr)
295295
296296 // Sets an alternative textual description for the picture contents.
297297 //
@@ -300,9 +300,9 @@ var xPictureSetAlternativeText func(uintptr, string)
300300 // This text will be made available to accessibility tools.
301301 //
302302 // If the picture cannot be described textually, set this property to %NULL.
303-func (x *Picture) SetAlternativeText(AlternativeTextVar string) {
303+func (x *Picture) SetAlternativeText(AlternativeTextVar *string) {
304304
305- xPictureSetAlternativeText(x.GoPointer(), AlternativeTextVar)
305+ xPictureSetAlternativeText(x.GoPointer(), core.NullableStringToPtr(AlternativeTextVar))
306306
307307 }
308308
@@ -353,7 +353,7 @@ func (x *Picture) SetFile(FileVar gio.File) {
353353
354354 }
355355
356-var xPictureSetFilename func(uintptr, string)
356+var xPictureSetFilename func(uintptr, uintptr)
357357
358358 // Makes @self load and display the given @filename.
359359 //
@@ -365,9 +365,9 @@ var xPictureSetFilename func(uintptr, string)
365365 // Use a proper image loading framework such as libglycin, which can
366366 // load many image formats into a `GdkTexture`, and then use
367367 // [method@Gtk.Image.set_from_paintable].
368-func (x *Picture) SetFilename(FilenameVar string) {
368+func (x *Picture) SetFilename(FilenameVar *string) {
369369
370- xPictureSetFilename(x.GoPointer(), FilenameVar)
370+ xPictureSetFilename(x.GoPointer(), core.NullableStringToPtr(FilenameVar))
371371
372372 }
373373
@@ -413,15 +413,15 @@ func (x *Picture) SetPixbuf(PixbufVar *gdkpixbuf.Pixbuf) {
413413
414414 }
415415
416-var xPictureSetResource func(uintptr, string)
416+var xPictureSetResource func(uintptr, uintptr)
417417
418418 // Makes @self load and display the resource at the given
419419 // @resource_path.
420420 //
421421 // This is a utility function that calls [method@Gtk.Picture.set_file].
422-func (x *Picture) SetResource(ResourcePathVar string) {
422+func (x *Picture) SetResource(ResourcePathVar *string) {
423423
424- xPictureSetResource(x.GoPointer(), ResourcePathVar)
424+ xPictureSetResource(x.GoPointer(), core.NullableStringToPtr(ResourcePathVar))
425425
426426 }
427427
@@ -441,7 +441,7 @@ func (c *Picture) SetGoPointer(ptr uintptr) {
441441 func (x *Picture) SetPropertyAlternativeText(value string) {
442442 var v gobject.Value
443443 v.Init(gobject.TypeStringVal)
444- v.SetString(value)
444+ v.SetString(&value)
445445 x.SetProperty("alternative-text", &v)
446446 }
447447
M v4/gtk/gtkpopovermenu.go +1 -1
@@ -291,7 +291,7 @@ func (c *PopoverMenu) SetGoPointer(ptr uintptr) {
291291 func (x *PopoverMenu) SetPropertyVisibleSubmenu(value string) {
292292 var v gobject.Value
293293 v.Init(gobject.TypeStringVal)
294- v.SetString(value)
294+ v.SetString(&value)
295295 x.SetProperty("visible-submenu", &v)
296296 }
297297
M v4/gtk/gtkprintdialog.go +50 -5
@@ -226,7 +226,22 @@ var xPrintDialogPrint func(uintptr, uintptr, *PrintSetup, uintptr, uintptr, uint
226226 // The @callback will be called when the printing is done.
227227 func (x *PrintDialog) Print(ParentVar *Window, SetupVar *PrintSetup, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) {
228228
229- xPrintDialogPrint(x.GoPointer(), ParentVar.GoPointer(), SetupVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
229+ var CallbackVarRef uintptr
230+ if CallbackVar != nil {
231+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
232+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
233+ CallbackVarRef = cbRefPtr
234+ } else {
235+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
236+ cbFn := *CallbackVar
237+ cbFn(arg0, arg1, arg2)
238+ }
239+ CallbackVarRef = purego.NewCallback(fcb)
240+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
241+ }
242+ }
243+
244+ xPrintDialogPrint(x.GoPointer(), ParentVar.GoPointer(), SetupVar, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
230245
231246 }
232247
@@ -238,7 +253,22 @@ var xPrintDialogPrintFile func(uintptr, uintptr, *PrintSetup, uintptr, uintptr,
238253 // Otherwise, it will attempt to print directly, without user interaction.
239254 func (x *PrintDialog) PrintFile(ParentVar *Window, SetupVar *PrintSetup, FileVar gio.File, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) {
240255
241- xPrintDialogPrintFile(x.GoPointer(), ParentVar.GoPointer(), SetupVar, FileVar.GoPointer(), CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
256+ var CallbackVarRef uintptr
257+ if CallbackVar != nil {
258+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
259+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
260+ CallbackVarRef = cbRefPtr
261+ } else {
262+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
263+ cbFn := *CallbackVar
264+ cbFn(arg0, arg1, arg2)
265+ }
266+ CallbackVarRef = purego.NewCallback(fcb)
267+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
268+ }
269+ }
270+
271+ xPrintDialogPrintFile(x.GoPointer(), ParentVar.GoPointer(), SetupVar, FileVar.GoPointer(), CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
242272
243273 }
244274
@@ -359,7 +389,22 @@ var xPrintDialogSetup func(uintptr, uintptr, uintptr, uintptr, uintptr)
359389 // to do the printing without further user interaction.
360390 func (x *PrintDialog) Setup(ParentVar *Window, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) {
361391
362- xPrintDialogSetup(x.GoPointer(), ParentVar.GoPointer(), CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
392+ var CallbackVarRef uintptr
393+ if CallbackVar != nil {
394+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
395+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
396+ CallbackVarRef = cbRefPtr
397+ } else {
398+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
399+ cbFn := *CallbackVar
400+ cbFn(arg0, arg1, arg2)
401+ }
402+ CallbackVarRef = purego.NewCallback(fcb)
403+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
404+ }
405+ }
406+
407+ xPrintDialogSetup(x.GoPointer(), ParentVar.GoPointer(), CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
363408
364409 }
365410
@@ -401,7 +446,7 @@ func (c *PrintDialog) SetGoPointer(ptr uintptr) {
401446 func (x *PrintDialog) SetPropertyAcceptLabel(value string) {
402447 var v gobject.Value
403448 v.Init(gobject.TypeStringVal)
404- v.SetString(value)
449+ v.SetString(&value)
405450 x.SetProperty("accept-label", &v)
406451 }
407452
@@ -437,7 +482,7 @@ func (x *PrintDialog) GetPropertyModal() bool {
437482 func (x *PrintDialog) SetPropertyTitle(value string) {
438483 var v gobject.Value
439484 v.Init(gobject.TypeStringVal)
440- v.SetString(value)
485+ v.SetString(&value)
441486 x.SetProperty("title", &v)
442487 }
443488
M v4/gtk/gtkprinter.go +32 -2
@@ -75,7 +75,37 @@ 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- xEnumeratePrinters(glib.NewCallback(FuncVar), DataVar, glib.NewCallback(DestroyVar), WaitVar)
78+ var FuncVarRef uintptr
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)
90+ }
91+ }
92+
93+ var DestroyVarRef uintptr
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)
105+ }
106+ }
107+
108+ xEnumeratePrinters(FuncVarRef, DataVar, DestroyVarRef, WaitVar)
79109
80110 }
81111
@@ -463,7 +493,7 @@ func (x *Printer) GetPropertyLocation() string {
463493 func (x *Printer) SetPropertyName(value string) {
464494 var v gobject.Value
465495 v.Init(gobject.TypeStringVal)
466- v.SetString(value)
496+ v.SetString(&value)
467497 x.SetProperty("name", &v)
468498 }
469499
M v4/gtk/gtkprintjob.go +32 -2
@@ -232,7 +232,37 @@ 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- xPrintJobSend(x.GoPointer(), glib.NewCallback(CallbackVar), UserDataVar, glib.NewCallback(DnotifyVar))
235+ var CallbackVarRef uintptr
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)
247+ }
248+ }
249+
250+ var DnotifyVarRef uintptr
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)
262+ }
263+ }
264+
265+ xPrintJobSend(x.GoPointer(), CallbackVarRef, UserDataVar, DnotifyVarRef)
236266
237267 }
238268
@@ -404,7 +434,7 @@ func (c *PrintJob) SetGoPointer(ptr uintptr) {
404434 func (x *PrintJob) SetPropertyTitle(value string) {
405435 var v gobject.Value
406436 v.Init(gobject.TypeStringVal)
407- v.SetString(value)
437+ v.SetString(&value)
408438 x.SetProperty("title", &v)
409439 }
410440
M v4/gtk/gtkprintoperation.go +22 -7
@@ -528,7 +528,22 @@ 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- xPrintRunPageSetupDialogAsync(ParentVar.GoPointer(), PageSetupVar.GoPointer(), SettingsVar.GoPointer(), glib.NewCallback(DoneCbVar), DataVar)
531+ var DoneCbVarRef uintptr
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)
543+ }
544+ }
545+
546+ xPrintRunPageSetupDialogAsync(ParentVar.GoPointer(), PageSetupVar.GoPointer(), SettingsVar.GoPointer(), DoneCbVarRef, DataVar)
532547
533548 }
534549
@@ -910,12 +925,12 @@ func (x *PrintOperation) SetCurrentPage(CurrentPageVar int) {
910925
911926 }
912927
913-var xPrintOperationSetCustomTabLabel func(uintptr, string)
928+var xPrintOperationSetCustomTabLabel func(uintptr, uintptr)
914929
915930 // Sets the label for the tab holding custom widgets.
916-func (x *PrintOperation) SetCustomTabLabel(LabelVar string) {
931+func (x *PrintOperation) SetCustomTabLabel(LabelVar *string) {
917932
918- xPrintOperationSetCustomTabLabel(x.GoPointer(), LabelVar)
933+ xPrintOperationSetCustomTabLabel(x.GoPointer(), core.NullableStringToPtr(LabelVar))
919934
920935 }
921936
@@ -1178,7 +1193,7 @@ func (x *PrintOperation) GetPropertyCurrentPage() int {
11781193 func (x *PrintOperation) SetPropertyCustomTabLabel(value string) {
11791194 var v gobject.Value
11801195 v.Init(gobject.TypeStringVal)
1181- v.SetString(value)
1196+ v.SetString(&value)
11821197 x.SetProperty("custom-tab-label", &v)
11831198 }
11841199
@@ -1227,7 +1242,7 @@ func (x *PrintOperation) GetPropertyEmbedPageSetup() bool {
12271242 func (x *PrintOperation) SetPropertyExportFilename(value string) {
12281243 var v gobject.Value
12291244 v.Init(gobject.TypeStringVal)
1230- v.SetString(value)
1245+ v.SetString(&value)
12311246 x.SetProperty("export-filename", &v)
12321247 }
12331248
@@ -1280,7 +1295,7 @@ func (x *PrintOperation) GetPropertyHasSelection() bool {
12801295 func (x *PrintOperation) SetPropertyJobName(value string) {
12811296 var v gobject.Value
12821297 v.Init(gobject.TypeStringVal)
1283- v.SetString(value)
1298+ v.SetString(&value)
12841299 x.SetProperty("job-name", &v)
12851300 }
12861301
M v4/gtk/gtkprintsettings.go +28 -13
@@ -207,18 +207,18 @@ func NewPrintSettingsFromGvariant(VariantVar *glib.Variant) *PrintSettings {
207207 return cls
208208 }
209209
210-var xNewPrintSettingsFromKeyFile func(*glib.KeyFile, string, **glib.Error) uintptr
210+var xNewPrintSettingsFromKeyFile func(*glib.KeyFile, uintptr, **glib.Error) uintptr
211211
212212 // Reads the print settings from the group @group_name in @key_file.
213213 //
214214 // Returns a new `GtkPrintSettings` object with the restored settings,
215215 // or %NULL if an error occurred. If the file could not be loaded then
216216 // error is set to either `GFileError` or `GKeyFileError`.
217-func NewPrintSettingsFromKeyFile(KeyFileVar *glib.KeyFile, GroupNameVar string) (*PrintSettings, error) {
217+func NewPrintSettingsFromKeyFile(KeyFileVar *glib.KeyFile, GroupNameVar *string) (*PrintSettings, error) {
218218 var cls *PrintSettings
219219 var cerr *glib.Error
220220
221- cret := xNewPrintSettingsFromKeyFile(KeyFileVar, GroupNameVar, &cerr)
221+ cret := xNewPrintSettingsFromKeyFile(KeyFileVar, core.NullableStringToPtr(GroupNameVar), &cerr)
222222
223223 if cret == 0 {
224224 return nil, cerr
@@ -253,7 +253,22 @@ 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- xPrintSettingsForeach(x.GoPointer(), glib.NewCallback(FuncVar), UserDataVar)
256+ var FuncVarRef uintptr
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)
268+ }
269+ }
270+
271+ xPrintSettingsForeach(x.GoPointer(), FuncVarRef, UserDataVar)
257272
258273 }
259274
@@ -601,16 +616,16 @@ func (x *PrintSettings) LoadFile(FileNameVar string) (bool, error) {
601616
602617 }
603618
604-var xPrintSettingsLoadKeyFile func(uintptr, *glib.KeyFile, string, **glib.Error) bool
619+var xPrintSettingsLoadKeyFile func(uintptr, *glib.KeyFile, uintptr, **glib.Error) bool
605620
606621 // Reads the print settings from the group @group_name in @key_file.
607622 //
608623 // If the file could not be loaded then error is set to either a
609624 // `GFileError` or `GKeyFileError`.
610-func (x *PrintSettings) LoadKeyFile(KeyFileVar *glib.KeyFile, GroupNameVar string) (bool, error) {
625+func (x *PrintSettings) LoadKeyFile(KeyFileVar *glib.KeyFile, GroupNameVar *string) (bool, error) {
611626 var cerr *glib.Error
612627
613- cret := xPrintSettingsLoadKeyFile(x.GoPointer(), KeyFileVar, GroupNameVar, &cerr)
628+ cret := xPrintSettingsLoadKeyFile(x.GoPointer(), KeyFileVar, core.NullableStringToPtr(GroupNameVar), &cerr)
614629 if cerr == nil {
615630 return cret, nil
616631 }
@@ -618,12 +633,12 @@ func (x *PrintSettings) LoadKeyFile(KeyFileVar *glib.KeyFile, GroupNameVar strin
618633
619634 }
620635
621-var xPrintSettingsSet func(uintptr, string, string)
636+var xPrintSettingsSet func(uintptr, string, uintptr)
622637
623638 // Associates @value with @key.
624-func (x *PrintSettings) Set(KeyVar string, ValueVar string) {
639+func (x *PrintSettings) Set(KeyVar string, ValueVar *string) {
625640
626- xPrintSettingsSet(x.GoPointer(), KeyVar, ValueVar)
641+ xPrintSettingsSet(x.GoPointer(), KeyVar, core.NullableStringToPtr(ValueVar))
627642
628643 }
629644
@@ -923,12 +938,12 @@ func (x *PrintSettings) ToGvariant() *glib.Variant {
923938 return cret
924939 }
925940
926-var xPrintSettingsToKeyFile func(uintptr, *glib.KeyFile, string)
941+var xPrintSettingsToKeyFile func(uintptr, *glib.KeyFile, uintptr)
927942
928943 // This function adds the print settings from @settings to @key_file.
929-func (x *PrintSettings) ToKeyFile(KeyFileVar *glib.KeyFile, GroupNameVar string) {
944+func (x *PrintSettings) ToKeyFile(KeyFileVar *glib.KeyFile, GroupNameVar *string) {
930945
931- xPrintSettingsToKeyFile(x.GoPointer(), KeyFileVar, GroupNameVar)
946+ xPrintSettingsToKeyFile(x.GoPointer(), KeyFileVar, core.NullableStringToPtr(GroupNameVar))
932947
933948 }
934949
M v4/gtk/gtkprintunixdialog.go +3 -3
@@ -89,13 +89,13 @@ func PrintUnixDialogNewFromInternalPtr(ptr uintptr) *PrintUnixDialog {
8989 return cls
9090 }
9191
92-var xNewPrintUnixDialog func(string, uintptr) uintptr
92+var xNewPrintUnixDialog func(uintptr, uintptr) uintptr
9393
9494 // Creates a new `GtkPrintUnixDialog`.
95-func NewPrintUnixDialog(TitleVar string, ParentVar *Window) *PrintUnixDialog {
95+func NewPrintUnixDialog(TitleVar *string, ParentVar *Window) *PrintUnixDialog {
9696 var cls *PrintUnixDialog
9797
98- cret := xNewPrintUnixDialog(TitleVar, ParentVar.GoPointer())
98+ cret := xNewPrintUnixDialog(core.NullableStringToPtr(TitleVar), ParentVar.GoPointer())
9999
100100 if cret == 0 {
101101 return nil
M v4/gtk/gtkprogressbar.go +4 -4
@@ -239,7 +239,7 @@ func (x *ProgressBar) SetShowText(ShowTextVar bool) {
239239
240240 }
241241
242-var xProgressBarSetText func(uintptr, string)
242+var xProgressBarSetText func(uintptr, uintptr)
243243
244244 // Causes the given @text to appear next to the progress bar.
245245 //
@@ -252,9 +252,9 @@ var xProgressBarSetText func(uintptr, string)
252252 // percentage. If @text is the empty string, the progress bar will still
253253 // be styled and sized suitably for containing text, as long as
254254 // [property@Gtk.ProgressBar:show-text] is %TRUE.
255-func (x *ProgressBar) SetText(TextVar string) {
255+func (x *ProgressBar) SetText(TextVar *string) {
256256
257- xProgressBarSetText(x.GoPointer(), TextVar)
257+ xProgressBarSetText(x.GoPointer(), core.NullableStringToPtr(TextVar))
258258
259259 }
260260
@@ -360,7 +360,7 @@ func (x *ProgressBar) GetPropertyShowText() bool {
360360 func (x *ProgressBar) SetPropertyText(value string) {
361361 var v gobject.Value
362362 v.Init(gobject.TypeStringVal)
363- v.SetString(value)
363+ v.SetString(&value)
364364 x.SetProperty("text", &v)
365365 }
366366
M v4/gtk/gtkrecentmanager.go +7 -7
@@ -53,17 +53,17 @@ func (x *RecentInfo) GoPointer() uintptr {
5353 return uintptr(unsafe.Pointer(x))
5454 }
5555
56-var xRecentInfoCreateAppInfo func(uintptr, string, **glib.Error) uintptr
56+var xRecentInfoCreateAppInfo func(uintptr, uintptr, **glib.Error) uintptr
5757
5858 // Creates a `GAppInfo` for the specified `GtkRecentInfo`
5959 //
6060 // In case of error, @error will be set either with a
6161 // %GTK_RECENT_MANAGER_ERROR or a %G_IO_ERROR
62-func (x *RecentInfo) CreateAppInfo(AppNameVar string) (*gio.AppInfoBase, error) {
62+func (x *RecentInfo) CreateAppInfo(AppNameVar *string) (*gio.AppInfoBase, error) {
6363 var cls *gio.AppInfoBase
6464 var cerr *glib.Error
6565
66- cret := xRecentInfoCreateAppInfo(x.GoPointer(), AppNameVar, &cerr)
66+ cret := xRecentInfoCreateAppInfo(x.GoPointer(), core.NullableStringToPtr(AppNameVar), &cerr)
6767
6868 if cret == 0 {
6969 return nil, cerr
@@ -690,16 +690,16 @@ func (x *RecentManager) LookupItem(UriVar string) (*RecentInfo, error) {
690690
691691 }
692692
693-var xRecentManagerMoveItem func(uintptr, string, string, **glib.Error) bool
693+var xRecentManagerMoveItem func(uintptr, string, uintptr, **glib.Error) bool
694694
695695 // Changes the location of a recently used resource from @uri to @new_uri.
696696 //
697697 // Please note that this function will not affect the resource pointed
698698 // by the URIs, but only the URI used in the recently used resources list.
699-func (x *RecentManager) MoveItem(UriVar string, NewUriVar string) (bool, error) {
699+func (x *RecentManager) MoveItem(UriVar string, NewUriVar *string) (bool, error) {
700700 var cerr *glib.Error
701701
702- cret := xRecentManagerMoveItem(x.GoPointer(), UriVar, NewUriVar, &cerr)
702+ cret := xRecentManagerMoveItem(x.GoPointer(), UriVar, core.NullableStringToPtr(NewUriVar), &cerr)
703703 if cerr == nil {
704704 return cret, nil
705705 }
@@ -753,7 +753,7 @@ func (c *RecentManager) SetGoPointer(ptr uintptr) {
753753 func (x *RecentManager) SetPropertyFilename(value string) {
754754 var v gobject.Value
755755 v.Init(gobject.TypeStringVal)
756- v.SetString(value)
756+ v.SetString(&value)
757757 x.SetProperty("filename", &v)
758758 }
759759
M v4/gtk/gtkscale.go +34 -4
@@ -211,7 +211,7 @@ func NewScaleWithRange(OrientationVar Orientation, MinVar float64, MaxVar float6
211211 return cls
212212 }
213213
214-var xScaleAddMark func(uintptr, float64, PositionType, string)
214+var xScaleAddMark func(uintptr, float64, PositionType, uintptr)
215215
216216 // Adds a mark at @value.
217217 //
@@ -222,9 +222,9 @@ var xScaleAddMark func(uintptr, float64, PositionType, string)
222222 // If @markup is not %NULL, text is shown next to the tick mark.
223223 //
224224 // To remove marks from a scale, use [method@Gtk.Scale.clear_marks].
225-func (x *Scale) AddMark(ValueVar float64, PositionVar PositionType, MarkupVar string) {
225+func (x *Scale) AddMark(ValueVar float64, PositionVar PositionType, MarkupVar *string) {
226226
227- xScaleAddMark(x.GoPointer(), ValueVar, PositionVar, MarkupVar)
227+ xScaleAddMark(x.GoPointer(), ValueVar, PositionVar, core.NullableStringToPtr(MarkupVar))
228228
229229 }
230230
@@ -352,7 +352,37 @@ var xScaleSetFormatValueFunc func(uintptr, uintptr, uintptr, uintptr)
352352 // [property@Gtk.Scale:digits] property.
353353 func (x *Scale) SetFormatValueFunc(FuncVar *ScaleFormatValueFunc, UserDataVar uintptr, DestroyNotifyVar *glib.DestroyNotify) {
354354
355- xScaleSetFormatValueFunc(x.GoPointer(), glib.NewCallbackNullable(FuncVar), UserDataVar, glib.NewCallbackNullable(DestroyNotifyVar))
355+ var FuncVarRef uintptr
356+ if FuncVar != nil {
357+ FuncVarPtr := uintptr(unsafe.Pointer(FuncVar))
358+ if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok {
359+ FuncVarRef = cbRefPtr
360+ } else {
361+ fcb := func(arg0 uintptr, arg1 float64, arg2 uintptr) string {
362+ cbFn := *FuncVar
363+ return cbFn(arg0, arg1, arg2)
364+ }
365+ FuncVarRef = purego.NewCallback(fcb)
366+ glib.SaveCallback(FuncVarPtr, FuncVarRef)
367+ }
368+ }
369+
370+ var DestroyNotifyVarRef uintptr
371+ if DestroyNotifyVar != nil {
372+ DestroyNotifyVarPtr := uintptr(unsafe.Pointer(DestroyNotifyVar))
373+ if cbRefPtr, ok := glib.GetCallback(DestroyNotifyVarPtr); ok {
374+ DestroyNotifyVarRef = cbRefPtr
375+ } else {
376+ fcb := func(arg0 uintptr) {
377+ cbFn := *DestroyNotifyVar
378+ cbFn(arg0)
379+ }
380+ DestroyNotifyVarRef = purego.NewCallback(fcb)
381+ glib.SaveCallback(DestroyNotifyVarPtr, DestroyNotifyVarRef)
382+ }
383+ }
384+
385+ xScaleSetFormatValueFunc(x.GoPointer(), FuncVarRef, UserDataVar, DestroyNotifyVarRef)
356386
357387 }
358388
M v4/gtk/gtksearchentry.go +4 -4
@@ -198,12 +198,12 @@ func (x *SearchEntry) SetKeyCaptureWidget(WidgetVar *Widget) {
198198
199199 }
200200
201-var xSearchEntrySetPlaceholderText func(uintptr, string)
201+var xSearchEntrySetPlaceholderText func(uintptr, uintptr)
202202
203203 // Sets the placeholder text associated with @entry.
204-func (x *SearchEntry) SetPlaceholderText(TextVar string) {
204+func (x *SearchEntry) SetPlaceholderText(TextVar *string) {
205205
206- xSearchEntrySetPlaceholderText(x.GoPointer(), TextVar)
206+ xSearchEntrySetPlaceholderText(x.GoPointer(), core.NullableStringToPtr(TextVar))
207207
208208 }
209209
@@ -251,7 +251,7 @@ func (x *SearchEntry) GetPropertyActivatesDefault() bool {
251251 func (x *SearchEntry) SetPropertyPlaceholderText(value string) {
252252 var v gobject.Value
253253 v.Init(gobject.TypeStringVal)
254- v.SetString(value)
254+ v.SetString(&value)
255255 x.SetProperty("placeholder-text", &v)
256256 }
257257
M v4/gtk/gtksettings.go +14 -14
@@ -252,7 +252,7 @@ func (x *Settings) GetPropertyGtkCursorBlinkTimeout() int {
252252 func (x *Settings) SetPropertyGtkCursorThemeName(value string) {
253253 var v gobject.Value
254254 v.Init(gobject.TypeStringVal)
255- v.SetString(value)
255+ v.SetString(&value)
256256 x.SetProperty("gtk-cursor-theme-name", &v)
257257 }
258258
@@ -311,7 +311,7 @@ func (x *Settings) GetPropertyGtkCursorThemeSize() int {
311311 func (x *Settings) SetPropertyGtkDecorationLayout(value string) {
312312 var v gobject.Value
313313 v.Init(gobject.TypeStringVal)
314- v.SetString(value)
314+ v.SetString(&value)
315315 x.SetProperty("gtk-decoration-layout", &v)
316316 }
317317
@@ -613,7 +613,7 @@ func (x *Settings) GetPropertyGtkErrorBell() bool {
613613 func (x *Settings) SetPropertyGtkFontName(value string) {
614614 var v gobject.Value
615615 v.Init(gobject.TypeStringVal)
616- v.SetString(value)
616+ v.SetString(&value)
617617 x.SetProperty("gtk-font-name", &v)
618618 }
619619
@@ -675,7 +675,7 @@ func (x *Settings) GetPropertyGtkHintFontMetrics() bool {
675675 func (x *Settings) SetPropertyGtkIconThemeName(value string) {
676676 var v gobject.Value
677677 v.Init(gobject.TypeStringVal)
678- v.SetString(value)
678+ v.SetString(&value)
679679 x.SetProperty("gtk-icon-theme-name", &v)
680680 }
681681
@@ -702,7 +702,7 @@ func (x *Settings) GetPropertyGtkIconThemeName() string {
702702 func (x *Settings) SetPropertyGtkImModule(value string) {
703703 var v gobject.Value
704704 v.Init(gobject.TypeStringVal)
705- v.SetString(value)
705+ v.SetString(&value)
706706 x.SetProperty("gtk-im-module", &v)
707707 }
708708
@@ -851,7 +851,7 @@ func (x *Settings) GetPropertyGtkPrimaryButtonWarpsSlider() bool {
851851 func (x *Settings) SetPropertyGtkPrintBackends(value string) {
852852 var v gobject.Value
853853 v.Init(gobject.TypeStringVal)
854- v.SetString(value)
854+ v.SetString(&value)
855855 x.SetProperty("gtk-print-backends", &v)
856856 }
857857
@@ -881,7 +881,7 @@ func (x *Settings) GetPropertyGtkPrintBackends() string {
881881 func (x *Settings) SetPropertyGtkPrintPreviewCommand(value string) {
882882 var v gobject.Value
883883 v.Init(gobject.TypeStringVal)
884- v.SetString(value)
884+ v.SetString(&value)
885885 x.SetProperty("gtk-print-preview-command", &v)
886886 }
887887
@@ -1037,7 +1037,7 @@ func (x *Settings) GetPropertyGtkShowStatusShapes() bool {
10371037 func (x *Settings) SetPropertyGtkSoundThemeName(value string) {
10381038 var v gobject.Value
10391039 v.Init(gobject.TypeStringVal)
1040- v.SetString(value)
1040+ v.SetString(&value)
10411041 x.SetProperty("gtk-sound-theme-name", &v)
10421042 }
10431043
@@ -1082,7 +1082,7 @@ func (x *Settings) GetPropertyGtkSplitCursor() bool {
10821082 func (x *Settings) SetPropertyGtkThemeName(value string) {
10831083 var v gobject.Value
10841084 v.Init(gobject.TypeStringVal)
1085- v.SetString(value)
1085+ v.SetString(&value)
10861086 x.SetProperty("gtk-theme-name", &v)
10871087 }
10881088
@@ -1106,7 +1106,7 @@ func (x *Settings) GetPropertyGtkThemeName() string {
11061106 func (x *Settings) SetPropertyGtkTitlebarDoubleClick(value string) {
11071107 var v gobject.Value
11081108 v.Init(gobject.TypeStringVal)
1109- v.SetString(value)
1109+ v.SetString(&value)
11101110 x.SetProperty("gtk-titlebar-double-click", &v)
11111111 }
11121112
@@ -1131,7 +1131,7 @@ func (x *Settings) GetPropertyGtkTitlebarDoubleClick() string {
11311131 func (x *Settings) SetPropertyGtkTitlebarMiddleClick(value string) {
11321132 var v gobject.Value
11331133 v.Init(gobject.TypeStringVal)
1134- v.SetString(value)
1134+ v.SetString(&value)
11351135 x.SetProperty("gtk-titlebar-middle-click", &v)
11361136 }
11371137
@@ -1156,7 +1156,7 @@ func (x *Settings) GetPropertyGtkTitlebarMiddleClick() string {
11561156 func (x *Settings) SetPropertyGtkTitlebarRightClick(value string) {
11571157 var v gobject.Value
11581158 v.Init(gobject.TypeStringVal)
1159- v.SetString(value)
1159+ v.SetString(&value)
11601160 x.SetProperty("gtk-titlebar-right-click", &v)
11611161 }
11621162
@@ -1243,7 +1243,7 @@ func (x *Settings) GetPropertyGtkXftHinting() int {
12431243 func (x *Settings) SetPropertyGtkXftHintstyle(value string) {
12441244 var v gobject.Value
12451245 v.Init(gobject.TypeStringVal)
1246- v.SetString(value)
1246+ v.SetString(&value)
12471247 x.SetProperty("gtk-xft-hintstyle", &v)
12481248 }
12491249
@@ -1268,7 +1268,7 @@ func (x *Settings) GetPropertyGtkXftHintstyle() string {
12681268 func (x *Settings) SetPropertyGtkXftRgba(value string) {
12691269 var v gobject.Value
12701270 v.Init(gobject.TypeStringVal)
1271- v.SetString(value)
1271+ v.SetString(&value)
12721272 x.SetProperty("gtk-xft-rgba", &v)
12731273 }
12741274
M v4/gtk/gtkshortcut.go +3 -3
@@ -70,14 +70,14 @@ func NewShortcut(TriggerVar *ShortcutTrigger, ActionVar *ShortcutAction) *Shortc
7070 return cls
7171 }
7272
73-var xNewShortcutWithArguments func(uintptr, uintptr, string, ...interface{}) uintptr
73+var xNewShortcutWithArguments func(uintptr, uintptr, uintptr, ...interface{}) uintptr
7474
7575 // Creates a new `GtkShortcut` that is triggered by @trigger and then activates
7676 // @action with arguments given by @format_string.
77-func NewShortcutWithArguments(TriggerVar *ShortcutTrigger, ActionVar *ShortcutAction, FormatStringVar string, varArgs ...interface{}) *Shortcut {
77+func NewShortcutWithArguments(TriggerVar *ShortcutTrigger, ActionVar *ShortcutAction, FormatStringVar *string, varArgs ...interface{}) *Shortcut {
7878 var cls *Shortcut
7979
80- cret := xNewShortcutWithArguments(TriggerVar.GoPointer(), ActionVar.GoPointer(), FormatStringVar, varArgs...)
80+ cret := xNewShortcutWithArguments(TriggerVar.GoPointer(), ActionVar.GoPointer(), core.NullableStringToPtr(FormatStringVar), varArgs...)
8181
8282 if cret == 0 {
8383 return nil
M v4/gtk/gtkshortcutaction.go +33 -3
@@ -164,7 +164,37 @@ var xNewCallbackAction func(uintptr, uintptr, uintptr) uintptr
164164 func NewCallbackAction(CallbackVar *ShortcutFunc, DataVar uintptr, DestroyVar *glib.DestroyNotify) *CallbackAction {
165165 var cls *CallbackAction
166166
167- cret := xNewCallbackAction(glib.NewCallback(CallbackVar), DataVar, glib.NewCallback(DestroyVar))
167+ var CallbackVarRef uintptr
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)
179+ }
180+ }
181+
182+ var DestroyVarRef uintptr
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)
194+ }
195+ }
196+
197+ cret := xNewCallbackAction(CallbackVarRef, DataVar, DestroyVarRef)
168198
169199 if cret == 0 {
170200 return nil
@@ -303,7 +333,7 @@ func (c *NamedAction) SetGoPointer(ptr uintptr) {
303333 func (x *NamedAction) SetPropertyActionName(value string) {
304334 var v gobject.Value
305335 v.Init(gobject.TypeStringVal)
306- v.SetString(value)
336+ v.SetString(&value)
307337 x.SetProperty("action-name", &v)
308338 }
309339
@@ -548,7 +578,7 @@ func (c *SignalAction) SetGoPointer(ptr uintptr) {
548578 func (x *SignalAction) SetPropertySignalName(value string) {
549579 var v gobject.Value
550580 v.Init(gobject.TypeStringVal)
551- v.SetString(value)
581+ v.SetString(&value)
552582 x.SetProperty("signal-name", &v)
553583 }
554584
M v4/gtk/gtkshortcutlabel.go +2 -2
@@ -110,7 +110,7 @@ func (c *ShortcutLabel) SetGoPointer(ptr uintptr) {
110110 func (x *ShortcutLabel) SetPropertyAccelerator(value string) {
111111 var v gobject.Value
112112 v.Init(gobject.TypeStringVal)
113- v.SetString(value)
113+ v.SetString(&value)
114114 x.SetProperty("accelerator", &v)
115115 }
116116
@@ -130,7 +130,7 @@ func (x *ShortcutLabel) GetPropertyAccelerator() string {
130130 func (x *ShortcutLabel) SetPropertyDisabledText(value string) {
131131 var v gobject.Value
132132 v.Init(gobject.TypeStringVal)
133- v.SetString(value)
133+ v.SetString(&value)
134134 x.SetProperty("disabled-text", &v)
135135 }
136136
M v4/gtk/gtkshortcutsgroup.go +2 -2
@@ -90,7 +90,7 @@ func (x *ShortcutsGroup) GetPropertyHeight() uint {
9090 func (x *ShortcutsGroup) SetPropertyTitle(value string) {
9191 var v gobject.Value
9292 v.Init(gobject.TypeStringVal)
93- v.SetString(value)
93+ v.SetString(&value)
9494 x.SetProperty("title", &v)
9595 }
9696
@@ -112,7 +112,7 @@ func (x *ShortcutsGroup) GetPropertyTitle() string {
112112 func (x *ShortcutsGroup) SetPropertyView(value string) {
113113 var v gobject.Value
114114 v.Init(gobject.TypeStringVal)
115- v.SetString(value)
115+ v.SetString(&value)
116116 x.SetProperty("view", &v)
117117 }
118118
M v4/gtk/gtkshortcutssection.go +3 -3
@@ -126,7 +126,7 @@ func (x *ShortcutsSection) GetPropertyMaxHeight() uint {
126126 func (x *ShortcutsSection) SetPropertySectionName(value string) {
127127 var v gobject.Value
128128 v.Init(gobject.TypeStringVal)
129- v.SetString(value)
129+ v.SetString(&value)
130130 x.SetProperty("section-name", &v)
131131 }
132132
@@ -151,7 +151,7 @@ func (x *ShortcutsSection) GetPropertySectionName() string {
151151 func (x *ShortcutsSection) SetPropertyTitle(value string) {
152152 var v gobject.Value
153153 v.Init(gobject.TypeStringVal)
154- v.SetString(value)
154+ v.SetString(&value)
155155 x.SetProperty("title", &v)
156156 }
157157
@@ -178,7 +178,7 @@ func (x *ShortcutsSection) GetPropertyTitle() string {
178178 func (x *ShortcutsSection) SetPropertyViewName(value string) {
179179 var v gobject.Value
180180 v.Init(gobject.TypeStringVal)
181- v.SetString(value)
181+ v.SetString(&value)
182182 x.SetProperty("view-name", &v)
183183 }
184184
M v4/gtk/gtkshortcutsshortcut.go +4 -4
@@ -116,7 +116,7 @@ func (c *ShortcutsShortcut) SetGoPointer(ptr uintptr) {
116116 func (x *ShortcutsShortcut) SetPropertyAccelerator(value string) {
117117 var v gobject.Value
118118 v.Init(gobject.TypeStringVal)
119- v.SetString(value)
119+ v.SetString(&value)
120120 x.SetProperty("accelerator", &v)
121121 }
122122
@@ -164,7 +164,7 @@ func (x *ShortcutsShortcut) GetPropertyAccelerator() string {
164164 func (x *ShortcutsShortcut) SetPropertyActionName(value string) {
165165 var v gobject.Value
166166 v.Init(gobject.TypeStringVal)
167- v.SetString(value)
167+ v.SetString(&value)
168168 x.SetProperty("action-name", &v)
169169 }
170170
@@ -207,7 +207,7 @@ func (x *ShortcutsShortcut) GetPropertyIconSet() bool {
207207 func (x *ShortcutsShortcut) SetPropertySubtitle(value string) {
208208 var v gobject.Value
209209 v.Init(gobject.TypeStringVal)
210- v.SetString(value)
210+ v.SetString(&value)
211211 x.SetProperty("subtitle", &v)
212212 }
213213
@@ -248,7 +248,7 @@ func (x *ShortcutsShortcut) GetPropertySubtitleSet() bool {
248248 func (x *ShortcutsShortcut) SetPropertyTitle(value string) {
249249 var v gobject.Value
250250 v.Init(gobject.TypeStringVal)
251- v.SetString(value)
251+ v.SetString(&value)
252252 x.SetProperty("title", &v)
253253 }
254254
M v4/gtk/gtkshortcutswindow.go +2 -2
@@ -136,7 +136,7 @@ func (c *ShortcutsWindow) SetGoPointer(ptr uintptr) {
136136 func (x *ShortcutsWindow) SetPropertySectionName(value string) {
137137 var v gobject.Value
138138 v.Init(gobject.TypeStringVal)
139- v.SetString(value)
139+ v.SetString(&value)
140140 x.SetProperty("section-name", &v)
141141 }
142142
@@ -162,7 +162,7 @@ func (x *ShortcutsWindow) GetPropertySectionName() string {
162162 func (x *ShortcutsWindow) SetPropertyViewName(value string) {
163163 var v gobject.Value
164164 v.Init(gobject.TypeStringVal)
165- v.SetString(value)
165+ v.SetString(&value)
166166 x.SetProperty("view-name", &v)
167167 }
168168
M v4/gtk/gtkshow.go +18 -1
@@ -2,6 +2,8 @@
22 package gtk
33
44 import (
5+ "unsafe"
6+
57 "github.com/jwijenbergh/purego"
68 "github.com/jwijenbergh/puregotk/pkg/core"
79 "github.com/jwijenbergh/puregotk/v4/gio"
@@ -29,7 +31,22 @@ var xShowUriFull func(uintptr, string, uint32, uintptr, uintptr, uintptr)
2931 // necessary for sandbox helpers to parent their dialogs properly.
3032 func ShowUriFull(ParentVar *Window, UriVar string, TimestampVar uint32, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) {
3133
32- xShowUriFull(ParentVar.GoPointer(), UriVar, TimestampVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar)
34+ var CallbackVarRef uintptr
35+ if CallbackVar != nil {
36+ CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar))
37+ if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok {
38+ CallbackVarRef = cbRefPtr
39+ } else {
40+ fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) {
41+ cbFn := *CallbackVar
42+ cbFn(arg0, arg1, arg2)
43+ }
44+ CallbackVarRef = purego.NewCallback(fcb)
45+ glib.SaveCallback(CallbackVarPtr, CallbackVarRef)
46+ }
47+ }
48+
49+ xShowUriFull(ParentVar.GoPointer(), UriVar, TimestampVar, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar)
3350
3451 }
3552
M v4/gtk/gtkstack.go +10 -10
@@ -174,15 +174,15 @@ func (x *Stack) AddChild(ChildVar *Widget) *StackPage {
174174 return cls
175175 }
176176
177-var xStackAddNamed func(uintptr, uintptr, string) uintptr
177+var xStackAddNamed func(uintptr, uintptr, uintptr) uintptr
178178
179179 // Adds a child to @stack.
180180 //
181181 // The child is identified by the @name.
182-func (x *Stack) AddNamed(ChildVar *Widget, NameVar string) *StackPage {
182+func (x *Stack) AddNamed(ChildVar *Widget, NameVar *string) *StackPage {
183183 var cls *StackPage
184184
185- cret := xStackAddNamed(x.GoPointer(), ChildVar.GoPointer(), NameVar)
185+ cret := xStackAddNamed(x.GoPointer(), ChildVar.GoPointer(), core.NullableStringToPtr(NameVar))
186186
187187 if cret == 0 {
188188 return nil
@@ -193,17 +193,17 @@ func (x *Stack) AddNamed(ChildVar *Widget, NameVar string) *StackPage {
193193 return cls
194194 }
195195
196-var xStackAddTitled func(uintptr, uintptr, string, string) uintptr
196+var xStackAddTitled func(uintptr, uintptr, uintptr, string) uintptr
197197
198198 // Adds a child to @stack.
199199 //
200200 // The child is identified by the @name. The @title
201201 // will be used by `GtkStackSwitcher` to represent
202202 // @child in a tab bar, so it should be short.
203-func (x *Stack) AddTitled(ChildVar *Widget, NameVar string, TitleVar string) *StackPage {
203+func (x *Stack) AddTitled(ChildVar *Widget, NameVar *string, TitleVar string) *StackPage {
204204 var cls *StackPage
205205
206- cret := xStackAddTitled(x.GoPointer(), ChildVar.GoPointer(), NameVar, TitleVar)
206+ cret := xStackAddTitled(x.GoPointer(), ChildVar.GoPointer(), core.NullableStringToPtr(NameVar), TitleVar)
207207
208208 if cret == 0 {
209209 return nil
@@ -573,7 +573,7 @@ func (x *Stack) GetPropertyVhomogeneous() bool {
573573 func (x *Stack) SetPropertyVisibleChildName(value string) {
574574 var v gobject.Value
575575 v.Init(gobject.TypeStringVal)
576- v.SetString(value)
576+ v.SetString(&value)
577577 x.SetProperty("visible-child-name", &v)
578578 }
579579
@@ -1024,7 +1024,7 @@ func (c *StackPage) SetGoPointer(ptr uintptr) {
10241024 func (x *StackPage) SetPropertyIconName(value string) {
10251025 var v gobject.Value
10261026 v.Init(gobject.TypeStringVal)
1027- v.SetString(value)
1027+ v.SetString(&value)
10281028 x.SetProperty("icon-name", &v)
10291029 }
10301030
@@ -1041,7 +1041,7 @@ func (x *StackPage) GetPropertyIconName() string {
10411041 func (x *StackPage) SetPropertyName(value string) {
10421042 var v gobject.Value
10431043 v.Init(gobject.TypeStringVal)
1044- v.SetString(value)
1044+ v.SetString(&value)
10451045 x.SetProperty("name", &v)
10461046 }
10471047
@@ -1083,7 +1083,7 @@ func (x *StackPage) GetPropertyNeedsAttention() bool {
10831083 func (x *StackPage) SetPropertyTitle(value string) {
10841084 var v gobject.Value
10851085 v.Init(gobject.TypeStringVal)
1086- v.SetString(value)
1086+ v.SetString(&value)
10871087 x.SetProperty("title", &v)
10881088 }
10891089
M v4/gtk/gtkstringfilter.go +4 -4
@@ -165,12 +165,12 @@ func (x *StringFilter) SetMatchMode(ModeVar StringFilterMatchMode) {
165165
166166 }
167167
168-var xStringFilterSetSearch func(uintptr, string)
168+var xStringFilterSetSearch func(uintptr, uintptr)
169169
170170 // Sets the string to search for.
171-func (x *StringFilter) SetSearch(SearchVar string) {
171+func (x *StringFilter) SetSearch(SearchVar *string) {
172172
173- xStringFilterSetSearch(x.GoPointer(), SearchVar)
173+ xStringFilterSetSearch(x.GoPointer(), core.NullableStringToPtr(SearchVar))
174174
175175 }
176176
@@ -207,7 +207,7 @@ func (x *StringFilter) GetPropertyIgnoreCase() bool {
207207 func (x *StringFilter) SetPropertySearch(value string) {
208208 var v gobject.Value
209209 v.Init(gobject.TypeStringVal)
210- v.SetString(value)
210+ v.SetString(&value)
211211 x.SetProperty("search", &v)
212212 }
213213
M v4/gtk/gtkswitch.go +2 -2
@@ -537,9 +537,9 @@ func (x *Switch) GetActionTargetValue() *glib.Variant {
537537 // containing [class@ApplicationWindow] or its associated [class@Application],
538538 // respectively. This is the same form used for actions in the [class@Gio.Menu]
539539 // associated with the window.
540-func (x *Switch) SetActionName(ActionNameVar string) {
540+func (x *Switch) SetActionName(ActionNameVar *string) {
541541
542- XGtkActionableSetActionName(x.GoPointer(), ActionNameVar)
542+ XGtkActionableSetActionName(x.GoPointer(), core.NullableStringToPtr(ActionNameVar))
543543
544544 }
545545
M v4/gtk/gtktext.go +5 -5 collapsed to keep the page light
M v4/gtk/gtktextbuffer.go +38 -8 collapsed to keep the page light
M v4/gtk/gtktextiter.go +32 -2 collapsed to keep the page light
M v4/gtk/gtktextmark.go +4 -4 collapsed to keep the page light
M v4/gtk/gtktexttag.go +11 -11 collapsed to keep the page light
M v4/gtk/gtktexttagtable.go +16 -1 collapsed to keep the page light
M v4/gtk/gtktextview.go +1 -1 collapsed to keep the page light
M v4/gtk/gtktogglebutton.go +2 -2 collapsed to keep the page light
M v4/gtk/gtktooltip.go +9 -9 collapsed to keep the page light
M v4/gtk/gtktreelistmodel.go +31 -1 collapsed to keep the page light
M v4/gtk/gtktreemodelfilter.go +62 -2 collapsed to keep the page light
M v4/gtk/gtktreeselection.go +47 -2 collapsed to keep the page light
M v4/gtk/gtktreeview.go +140 -5 collapsed to keep the page light
M v4/gtk/gtktreeviewcolumn.go +32 -2 collapsed to keep the page light
M v4/gtk/gtkurilauncher.go +23 -8 collapsed to keep the page light
M v4/gtk/gtkvideo.go +12 -12 collapsed to keep the page light
M v4/gtk/gtkwidget.go +108 -33 collapsed to keep the page light
M v4/gtk/gtkwindow.go +9 -9 collapsed to keep the page light
M v4/gtk/gtkwindowcontrols.go +4 -4 collapsed to keep the page light
M v4/pango/pango-attributes.go +47 -2 collapsed to keep the page light
M v4/pango/pango-font.go +9 -9 collapsed to keep the page light
M v4/pango/pango-fontmap.go +3 -3 collapsed to keep the page light
M v4/pango/pango-fontset.go +16 -1 collapsed to keep the page light
M v4/pango/pango-glyph.go +9 -9 collapsed to keep the page light
M v4/pango/pango-language.go +3 -3 collapsed to keep the page light
M v4/pango/pango-renderer.go +3 -3 collapsed to keep the page light
M v4/pango/pango-utils.go +3 -3 collapsed to keep the page light
M v4/pangocairo/pangocairo.go +33 -1 collapsed to keep the page light

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