fix: wrap callback parameters with closures
- commit
- c2d6ab62b9645bb0279d968dc2a03c5397d0b83f
- author
- brice · · 2025-12-10 18:32 UTC
- parent
- 9ff73d6
- signature
- unsigned
145 files · +7991 -425
M internal/gir/pass/pass.go +52 -13
| @@ -423,20 +423,59 @@ func (p *Pass) writeGo(r types.Repository, gotemp *template.Template, dir string | |||||
| 423 | // as they should only be loaded when there are classes | 423 | // as they should only be loaded when there are classes | ||
| 424 | needsInit := (len(functions[fn]) + methods) > 0 | 424 | needsInit := (len(functions[fn]) + methods) > 0 | ||
| 425 | 425 | ||||
| 426 | + | // Check if any receiver method has callback parameters | |||
| 427 | + | // This is used to conditionally import unsafe and purego | |||
| 428 | + | hasReceiverCallbacks := false | |||
| 429 | + | for _, rec := range records[fn] { | |||
| 430 | + | for _, r := range rec.Receivers { | |||
| 431 | + | if len(r.Args.Callbacks) > 0 { | |||
| 432 | + | hasReceiverCallbacks = true | |||
| 433 | + | break | |||
| 434 | + | } | |||
| 435 | + | } | |||
| 436 | + | if hasReceiverCallbacks { | |||
| 437 | + | break | |||
| 438 | + | } | |||
| 439 | + | } | |||
| 440 | + | if !hasReceiverCallbacks { | |||
| 441 | + | for _, cls := range classes[fn] { | |||
| 442 | + | for _, r := range cls.Receivers { | |||
| 443 | + | if len(r.Args.Callbacks) > 0 { | |||
| 444 | + | hasReceiverCallbacks = true | |||
| 445 | + | break | |||
| 446 | + | } | |||
| 447 | + | } | |||
| 448 | + | if hasReceiverCallbacks { | |||
| 449 | + | break | |||
| 450 | + | } | |||
| 451 | + | } | |||
| 452 | + | } | |||
| 453 | + | ||||
| 454 | + | // Check if any standalone function has callback parameters | |||
| 455 | + | hasFunctionCallbacks := false | |||
| 456 | + | for _, f := range functions[fn] { | |||
| 457 | + | if len(f.Args.Callbacks) > 0 { | |||
| 458 | + | hasFunctionCallbacks = true | |||
| 459 | + | break | |||
| 460 | + | } | |||
| 461 | + | } | |||
| 462 | + | ||||
| 426 | args := types.TemplateArg{ | 463 | args := types.TemplateArg{ | ||
| 427 | - | PkgName: pkgName, | 464 | + | PkgName: pkgName, |
| 428 | - | PkgEnv: strings.ToUpper(pkgName), | 465 | + | PkgEnv: strings.ToUpper(pkgName), |
| 429 | - | PkgConfigName: pkgConfigName, | 466 | + | PkgConfigName: pkgConfigName, |
| 430 | - | SharedLibraries: sharedLibraries, | 467 | + | SharedLibraries: sharedLibraries, |
| 431 | - | NeedsInit: needsInit, | 468 | + | NeedsInit: needsInit, |
| 432 | - | Aliases: aliases[fn], | 469 | + | HasReceiverCallbacks: hasReceiverCallbacks, |
| 433 | - | Callbacks: callbacks[fn], | 470 | + | HasFunctionCallbacks: hasFunctionCallbacks, |
| 434 | - | Records: records[fn], | 471 | + | Aliases: aliases[fn], |
| 435 | - | Enums: enums[fn], | 472 | + | Callbacks: callbacks[fn], |
| 436 | - | Constants: constants[fn], | 473 | + | Records: records[fn], |
| 437 | - | Functions: functions[fn], | 474 | + | Enums: enums[fn], |
| 438 | - | Interfaces: interfaces[fn], | 475 | + | Constants: constants[fn], |
| 439 | - | Classes: classes[fn], | 476 | + | Functions: functions[fn], |
| 477 | + | Interfaces: interfaces[fn], | |||
| 478 | + | Classes: classes[fn], | |||
| 440 | } | 479 | } | ||
| 441 | 480 | ||||
| 442 | os.MkdirAll(fmt.Sprintf(dir+"/%s", pkgName), 0o755) | 481 | os.MkdirAll(fmt.Sprintf(dir+"/%s", pkgName), 0o755) | ||
M internal/gir/types/kind.go +11 -0
| @@ -53,6 +53,17 @@ func (km KindMap) MustInterface(ns string, name string) Interface { | |||||
| 53 | return p.Value.(Interface) | 53 | return p.Value.(Interface) | ||
| 54 | } | 54 | } | ||
| 55 | 55 | ||||
| 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 | + | ||||
| 56 | type KindPair struct { | 67 | type KindPair struct { | ||
| 57 | K Kind | 68 | K Kind | ||
| 58 | Value interface{} | 69 | Value interface{} | ||
M internal/gir/types/template.go +70 -1
| @@ -17,9 +17,27 @@ type argsTemplate struct { | |||||
| 17 | // Call are the variables as given in a function call | 17 | // Call are the variables as given in a function call | ||
| 18 | Call []string | 18 | Call []string | ||
| 19 | 19 | ||||
| 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 | + | ||||
| 20 | Full []string | 24 | Full []string | ||
| 21 | } | 25 | } | ||
| 22 | 26 | ||||
| 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 | + | ||||
| 23 | type funcArgsTemplate struct { | 41 | type funcArgsTemplate struct { | ||
| 24 | // Pure are the arguments as passed directly to PureGo | 42 | // Pure are the arguments as passed directly to PureGo | ||
| 25 | // The pure Call is a special case that contains the arguments for a callback call | 43 | // The pure Call is a special case that contains the arguments for a callback call | ||
| @@ -27,16 +45,20 @@ type funcArgsTemplate struct { | |||||
| 27 | 45 | ||||
| 28 | // API are the arguments as suitable for a Go API | 46 | // API are the arguments as suitable for a Go API | ||
| 29 | API argsTemplate | 47 | API argsTemplate | ||
| 48 | + | ||||
| 49 | + | // Callbacks tracks callback parameters for proper closure generation | |||
| 50 | + | Callbacks []CallbackParam | |||
| 30 | } | 51 | } | ||
| 31 | 52 | ||||
| 32 | func (f *funcArgsTemplate) AddAPI(t string, n string, k Kind, ns string, nullable bool, isOut bool) { | 53 | func (f *funcArgsTemplate) AddAPI(t string, n string, k Kind, ns string, nullable bool, isOut bool) { | ||
| 33 | c := n | 54 | c := n | ||
| 55 | + | cRef := n // For CallWithRefs, defaults to same as Call | |||
| 34 | stars := strings.Count(t, "*") | 56 | stars := strings.Count(t, "*") | ||
| 35 | gobjectNs := "gobject." | 57 | gobjectNs := "gobject." | ||
| 58 | + | glibNs := "glib." | |||
| 36 | if strings.ToLower(ns) == "gobject" { | 59 | if strings.ToLower(ns) == "gobject" { | ||
| 37 | gobjectNs = "" | 60 | gobjectNs = "" | ||
| 38 | } | 61 | } | ||
| 39 | - | glibNs := "glib." | |||
| 40 | if strings.ToLower(ns) == "glib" { | 62 | if strings.ToLower(ns) == "glib" { | ||
| 41 | glibNs = "" | 63 | glibNs = "" | ||
| 42 | } | 64 | } | ||
| @@ -48,14 +70,19 @@ func (f *funcArgsTemplate) AddAPI(t string, n string, k Kind, ns string, nullabl | |||||
| 48 | t = "*" + t | 70 | t = "*" + t | ||
| 49 | } | 71 | } | ||
| 50 | c = n | 72 | c = n | ||
| 73 | + | cRef = n | |||
| 51 | } else { | 74 | } else { | ||
| 52 | switch k { | 75 | switch k { | ||
| 53 | case CallbackType: | 76 | case CallbackType: | ||
| 77 | + | // Call uses glib.NewCallback for contexts like callback accessor getters | |||
| 54 | if nullable { | 78 | if nullable { | ||
| 55 | c = fmt.Sprintf("%sNewCallbackNullable(%s)", glibNs, n) | 79 | c = fmt.Sprintf("%sNewCallbackNullable(%s)", glibNs, n) | ||
| 56 | } else { | 80 | } else { | ||
| 57 | c = fmt.Sprintf("%sNewCallback(%s)", glibNs, n) | 81 | c = fmt.Sprintf("%sNewCallback(%s)", glibNs, n) | ||
| 58 | } | 82 | } | ||
| 83 | + | // For CallWithRefs, start with the same value as Call | |||
| 84 | + | // It will be updated to {name}Ref in Add() if the callback lookup succeeds | |||
| 85 | + | cRef = c | |||
| 59 | t = "*" + t | 86 | t = "*" + t | ||
| 60 | case ClassesType: | 87 | case ClassesType: | ||
| 61 | if stars == 0 { | 88 | if stars == 0 { | ||
| @@ -66,6 +93,7 @@ func (f *funcArgsTemplate) AddAPI(t string, n string, k Kind, ns string, nullabl | |||||
| 66 | } else if stars == 1 { | 93 | } else if stars == 1 { | ||
| 67 | c = n + ".GoPointer()" | 94 | c = n + ".GoPointer()" | ||
| 68 | } | 95 | } | ||
| 96 | + | cRef = c | |||
| 69 | case InterfacesType: | 97 | case InterfacesType: | ||
| 70 | t = strings.TrimPrefix(t, "*") | 98 | t = strings.TrimPrefix(t, "*") | ||
| 71 | if stars == 0 { | 99 | if stars == 0 { | ||
| @@ -76,17 +104,22 @@ func (f *funcArgsTemplate) AddAPI(t string, n string, k Kind, ns string, nullabl | |||||
| 76 | } else if stars == 1 { | 104 | } else if stars == 1 { | ||
| 77 | c = n + ".GoPointer()" | 105 | c = n + ".GoPointer()" | ||
| 78 | } | 106 | } | ||
| 107 | + | cRef = c | |||
| 108 | + | default: | |||
| 109 | + | cRef = c | |||
| 79 | } | 110 | } | ||
| 80 | 111 | ||||
| 81 | // special case for varargs | 112 | // special case for varargs | ||
| 82 | if n == "varArgs" { | 113 | if n == "varArgs" { | ||
| 83 | c = n + "..." | 114 | c = n + "..." | ||
| 115 | + | cRef = c | |||
| 84 | } | 116 | } | ||
| 85 | } | 117 | } | ||
| 86 | 118 | ||||
| 87 | f.API.Names = append(f.API.Names, n) | 119 | f.API.Names = append(f.API.Names, n) | ||
| 88 | f.API.Types = append(f.API.Types, t) | 120 | f.API.Types = append(f.API.Types, t) | ||
| 89 | f.API.Call = append(f.API.Call, c) | 121 | f.API.Call = append(f.API.Call, c) | ||
| 122 | + | f.API.CallWithRefs = append(f.API.CallWithRefs, cRef) | |||
| 90 | f.API.Full = append(f.API.Full, n+" "+t) | 123 | f.API.Full = append(f.API.Full, n+" "+t) | ||
| 91 | } | 124 | } | ||
| 92 | 125 | ||||
| @@ -153,6 +186,9 @@ func (f *funcArgsTemplate) Add(p Parameter, ins string, ns string, kinds KindMap | |||||
| 153 | goType := p.Translate(lns, kinds) | 186 | goType := p.Translate(lns, kinds) | ||
| 154 | kind := kinds.Kind(lns, goType) | 187 | kind := kinds.Kind(lns, goType) | ||
| 155 | 188 | ||||
| 189 | + | // Save the original type name before normalization for callback lookup | |||
| 190 | + | originalType := goType | |||
| 191 | + | ||||
| 156 | stars := strings.Count(goType, "*") | 192 | stars := strings.Count(goType, "*") | ||
| 157 | goType = util.NormalizeNamespace(ns, goType, true) | 193 | goType = util.NormalizeNamespace(ns, goType, true) | ||
| 158 | 194 | ||||
| @@ -170,10 +206,38 @@ func (f *funcArgsTemplate) Add(p Parameter, ins string, ns string, kinds KindMap | |||||
| 170 | 206 | ||||
| 171 | f.AddAPI(goType, varName, kind, ns, p.Nullable, isOut) | 207 | f.AddAPI(goType, varName, kind, ns, p.Nullable, isOut) | ||
| 172 | f.AddPure(goType, varName, kind, isOut) | 208 | f.AddPure(goType, varName, kind, isOut) | ||
| 209 | + | ||||
| 210 | + | // For callback parameters (not out parameters), populate callback metadata | |||
| 211 | + | // This enables the template to generate proper closure wrapping | |||
| 212 | + | if kind == CallbackType && !isOut { | |||
| 213 | + | if cb, ok := kinds.GetCallback(lns, originalType); ok { | |||
| 214 | + | // Get the callback's pure argument types and return type | |||
| 215 | + | cbArgs := cb.Parameters.Template(lns, "", kinds, cb.Throws) | |||
| 216 | + | var retRaw string | |||
| 217 | + | if cb.ReturnValue != nil { | |||
| 218 | + | cbRet := cb.ReturnValue.Template(lns, "", kinds, cb.Throws) | |||
| 219 | + | retRaw = cbRet.Raw | |||
| 220 | + | } | |||
| 221 | + | ||||
| 222 | + | f.Callbacks = append(f.Callbacks, CallbackParam{ | |||
| 223 | + | Name: varName, | |||
| 224 | + | TypeName: strings.TrimPrefix(goType, "*"), | |||
| 225 | + | PureTypes: cbArgs.Pure.Types, | |||
| 226 | + | RetRaw: retRaw, | |||
| 227 | + | Nullable: p.Nullable, | |||
| 228 | + | }) | |||
| 229 | + | ||||
| 230 | + | // Update CallWithRefs to use {name}Ref since we have the callback info | |||
| 231 | + | // for generating the closure wrapper | |||
| 232 | + | lastIdx := len(f.API.CallWithRefs) - 1 | |||
| 233 | + | f.API.CallWithRefs[lastIdx] = varName + "Ref" | |||
| 234 | + | } | |||
| 235 | + | } | |||
| 173 | } | 236 | } | ||
| 174 | 237 | ||||
| 175 | func (f *funcArgsTemplate) AddThrows(ns string) { | 238 | func (f *funcArgsTemplate) AddThrows(ns string) { | ||
| 176 | f.API.Call = append(f.API.Call, "&cerr") | 239 | f.API.Call = append(f.API.Call, "&cerr") | ||
| 240 | + | f.API.CallWithRefs = append(f.API.CallWithRefs, "&cerr") | |||
| 177 | if strings.ToLower(ns) != "glib" { | 241 | if strings.ToLower(ns) != "glib" { | ||
| 178 | f.Pure.Types = append(f.Pure.Types, "**glib.Error") | 242 | f.Pure.Types = append(f.Pure.Types, "**glib.Error") | ||
| 179 | } else { | 243 | } else { | ||
| @@ -483,6 +547,11 @@ type TemplateArg struct { | |||||
| 483 | SharedLibraries []string | 547 | SharedLibraries []string | ||
| 484 | // NeedsInit declares whether or not this file needs an init code to register functions with purego | 548 | // NeedsInit declares whether or not this file needs an init code to register functions with purego | ||
| 485 | NeedsInit bool | 549 | NeedsInit bool | ||
| 550 | + | // HasReceiverCallbacks indicates if any receiver method has callback parameters | |||
| 551 | + | // This is used to conditionally import unsafe and purego | |||
| 552 | + | HasReceiverCallbacks bool | |||
| 553 | + | // HasFunctionCallbacks indicates if any standalone function has callback parameters | |||
| 554 | + | HasFunctionCallbacks bool | |||
| 486 | // Imports defines the package imports that we need | 555 | // Imports defines the package imports that we need | ||
| 487 | // This does not include purego | 556 | // This does not include purego | ||
| 488 | // As the template already includes that if `NeedsInit` is set to true | 557 | // As the template already includes that if `NeedsInit` is set to true | ||
M templates/go +202 -9
| @@ -9,9 +9,10 @@ package {{.PkgName}} | |||||
| 9 | {{ $HasSignals = true }} | 9 | {{ $HasSignals = true }} | ||
| 10 | {{end}} | 10 | {{end}} | ||
| 11 | {{end}} | 11 | {{end}} | ||
| 12 | - | {{ $NeedsUnsafe := or .Records $HasSignals }} | 12 | + | {{ $HasCallbacks := or .HasReceiverCallbacks .HasFunctionCallbacks }} |
| 13 | - | {{ $NeedsPurego := or .NeedsInit $HasSignals }} | 13 | + | {{ $NeedsUnsafe := or .Records $HasSignals $HasCallbacks }} |
| 14 | - | {{ $AnyImports := or .NeedsInit .Records $HasSignals }} | 14 | + | {{ $NeedsPurego := or .NeedsInit $HasSignals $HasCallbacks }} |
| 15 | + | {{ $AnyImports := or .NeedsInit .Records $HasSignals $HasCallbacks }} | |||
| 15 | 16 | ||||
| 16 | {{if $AnyImports}} | 17 | {{if $AnyImports}} | ||
| 17 | import ( | 18 | import ( | ||
| @@ -66,7 +67,39 @@ var x{{.Name}} func({{conv .Args.Pure.Types}}) {{.Ret.Raw}} | |||||
| 66 | {{.Doc}} | 67 | {{.Doc}} | ||
| 67 | func {{.Name}}({{conv .Args.API.Full}}) {{.Ret.Return}} { | 68 | func {{.Name}}({{conv .Args.API.Full}}) {{.Ret.Return}} { | ||
| 68 | {{.Ret.Preamble $NotGLib}} | 69 | {{.Ret.Preamble $NotGLib}} | ||
| 69 | - | {{if .Ret.Value}}cret :={{end}}x{{.Name}}({{convd .Args.API.Call}}) | 70 | + | {{- /* Generate closure wrappers for callback parameters */}} |
| 71 | + | {{range .Args.Callbacks}} | |||
| 72 | + | {{if .Nullable -}} | |||
| 73 | + | var {{.Name}}Ref uintptr | |||
| 74 | + | if {{.Name}} != nil { | |||
| 75 | + | {{.Name}}Ptr := uintptr(unsafe.Pointer({{.Name}})) | |||
| 76 | + | if cbRefPtr, ok := {{if $NotGLib}}glib.{{end}}GetCallback({{.Name}}Ptr); ok { | |||
| 77 | + | {{.Name}}Ref = cbRefPtr | |||
| 78 | + | } else { | |||
| 79 | + | fcb := func({{range $i, $t := .PureTypes}}{{if $i}}, {{end}}arg{{$i}} {{$t}}{{end}}) {{.RetRaw}} { | |||
| 80 | + | cbFn := *{{.Name}} | |||
| 81 | + | {{if .RetRaw}}return {{end}}cbFn({{range $i, $t := .PureTypes}}{{if $i}}, {{end}}arg{{$i}}{{end}}) | |||
| 82 | + | } | |||
| 83 | + | {{.Name}}Ref = purego.NewCallback(fcb) | |||
| 84 | + | {{if $NotGLib}}glib.{{end}}SaveCallback({{.Name}}Ptr, {{.Name}}Ref) | |||
| 85 | + | } | |||
| 86 | + | } | |||
| 87 | + | {{- else -}} | |||
| 88 | + | {{.Name}}Ptr := uintptr(unsafe.Pointer({{.Name}})) | |||
| 89 | + | var {{.Name}}Ref uintptr | |||
| 90 | + | if cbRefPtr, ok := {{if $NotGLib}}glib.{{end}}GetCallback({{.Name}}Ptr); ok { | |||
| 91 | + | {{.Name}}Ref = cbRefPtr | |||
| 92 | + | } else { | |||
| 93 | + | fcb := func({{range $i, $t := .PureTypes}}{{if $i}}, {{end}}arg{{$i}} {{$t}}{{end}}) {{.RetRaw}} { | |||
| 94 | + | cbFn := *{{.Name}} | |||
| 95 | + | {{if .RetRaw}}return {{end}}cbFn({{range $i, $t := .PureTypes}}{{if $i}}, {{end}}arg{{$i}}{{end}}) | |||
| 96 | + | } | |||
| 97 | + | {{.Name}}Ref = purego.NewCallback(fcb) | |||
| 98 | + | {{if $NotGLib}}glib.{{end}}SaveCallback({{.Name}}Ptr, {{.Name}}Ref) | |||
| 99 | + | } | |||
| 100 | + | {{- end}} | |||
| 101 | + | {{end}} | |||
| 102 | + | {{if .Ret.Value}}cret :={{end}}x{{.Name}}({{convd .Args.API.CallWithRefs}}) | |||
| 70 | {{.Ret.Fmt $NotGObject}} | 103 | {{.Ret.Fmt $NotGObject}} | ||
| 71 | } | 104 | } | ||
| 72 | {{end}} | 105 | {{end}} | ||
| @@ -78,7 +111,39 @@ var x{{$outer.Name}}{{.Name}} func(uintptr {{convc .Args.Pure.Types}}) {{.Ret.Ra | |||||
| 78 | {{.Doc}} | 111 | {{.Doc}} | ||
| 79 | func (x *{{$outer.Name}}) {{.Name}}({{conv .Args.API.Full}}) {{.Ret.Return}} { | 112 | func (x *{{$outer.Name}}) {{.Name}}({{conv .Args.API.Full}}) {{.Ret.Return}} { | ||
| 80 | {{.Ret.Preamble $NotGLib}} | 113 | {{.Ret.Preamble $NotGLib}} | ||
| 81 | - | {{if .Ret.Value}}cret :={{end}}x{{$outer.Name}}{{.Name}}(x.GoPointer() {{convcd .Args.API.Call}}) | 114 | + | {{- /* Generate closure wrappers for callback parameters */}} |
| 115 | + | {{range .Args.Callbacks}} | |||
| 116 | + | {{if .Nullable -}} | |||
| 117 | + | var {{.Name}}Ref uintptr | |||
| 118 | + | if {{.Name}} != nil { | |||
| 119 | + | {{.Name}}Ptr := uintptr(unsafe.Pointer({{.Name}})) | |||
| 120 | + | if cbRefPtr, ok := {{if $NotGLib}}glib.{{end}}GetCallback({{.Name}}Ptr); ok { | |||
| 121 | + | {{.Name}}Ref = cbRefPtr | |||
| 122 | + | } else { | |||
| 123 | + | fcb := func({{range $i, $t := .PureTypes}}{{if $i}}, {{end}}arg{{$i}} {{$t}}{{end}}) {{.RetRaw}} { | |||
| 124 | + | cbFn := *{{.Name}} | |||
| 125 | + | {{if .RetRaw}}return {{end}}cbFn({{range $i, $t := .PureTypes}}{{if $i}}, {{end}}arg{{$i}}{{end}}) | |||
| 126 | + | } | |||
| 127 | + | {{.Name}}Ref = purego.NewCallback(fcb) | |||
| 128 | + | {{if $NotGLib}}glib.{{end}}SaveCallback({{.Name}}Ptr, {{.Name}}Ref) | |||
| 129 | + | } | |||
| 130 | + | } | |||
| 131 | + | {{- else -}} | |||
| 132 | + | {{.Name}}Ptr := uintptr(unsafe.Pointer({{.Name}})) | |||
| 133 | + | var {{.Name}}Ref uintptr | |||
| 134 | + | if cbRefPtr, ok := {{if $NotGLib}}glib.{{end}}GetCallback({{.Name}}Ptr); ok { | |||
| 135 | + | {{.Name}}Ref = cbRefPtr | |||
| 136 | + | } else { | |||
| 137 | + | fcb := func({{range $i, $t := .PureTypes}}{{if $i}}, {{end}}arg{{$i}} {{$t}}{{end}}) {{.RetRaw}} { | |||
| 138 | + | cbFn := *{{.Name}} | |||
| 139 | + | {{if .RetRaw}}return {{end}}cbFn({{range $i, $t := .PureTypes}}{{if $i}}, {{end}}arg{{$i}}{{end}}) | |||
| 140 | + | } | |||
| 141 | + | {{.Name}}Ref = purego.NewCallback(fcb) | |||
| 142 | + | {{if $NotGLib}}glib.{{end}}SaveCallback({{.Name}}Ptr, {{.Name}}Ref) | |||
| 143 | + | } | |||
| 144 | + | {{- end}} | |||
| 145 | + | {{end}} | |||
| 146 | + | {{if .Ret.Value}}cret :={{end}}x{{$outer.Name}}{{.Name}}(x.GoPointer() {{convcd .Args.API.CallWithRefs}}) | |||
| 82 | {{.Ret.Fmt $NotGObject}} | 147 | {{.Ret.Fmt $NotGObject}} | ||
| 83 | } | 148 | } | ||
| 84 | {{end}} | 149 | {{end}} | ||
| @@ -239,7 +304,39 @@ var x{{.Name}} func({{conv .Args.Pure.Types}}) {{.Ret.Raw}} | |||||
| 239 | {{.Doc}} | 304 | {{.Doc}} | ||
| 240 | func {{.Name}}({{conv .Args.API.Full}}) {{.Ret.Return}} { | 305 | func {{.Name}}({{conv .Args.API.Full}}) {{.Ret.Return}} { | ||
| 241 | {{.Ret.Preamble $NotGLib}} | 306 | {{.Ret.Preamble $NotGLib}} | ||
| 242 | - | {{if .Ret.Value}}cret := {{end}}x{{.Name}}({{convd .Args.API.Call}}) | 307 | + | {{- /* Generate closure wrappers for callback parameters */}} |
| 308 | + | {{range .Args.Callbacks}} | |||
| 309 | + | {{if .Nullable -}} | |||
| 310 | + | var {{.Name}}Ref uintptr | |||
| 311 | + | if {{.Name}} != nil { | |||
| 312 | + | {{.Name}}Ptr := uintptr(unsafe.Pointer({{.Name}})) | |||
| 313 | + | if cbRefPtr, ok := {{if $NotGLib}}glib.{{end}}GetCallback({{.Name}}Ptr); ok { | |||
| 314 | + | {{.Name}}Ref = cbRefPtr | |||
| 315 | + | } else { | |||
| 316 | + | fcb := func({{range $i, $t := .PureTypes}}{{if $i}}, {{end}}arg{{$i}} {{$t}}{{end}}) {{.RetRaw}} { | |||
| 317 | + | cbFn := *{{.Name}} | |||
| 318 | + | {{if .RetRaw}}return {{end}}cbFn({{range $i, $t := .PureTypes}}{{if $i}}, {{end}}arg{{$i}}{{end}}) | |||
| 319 | + | } | |||
| 320 | + | {{.Name}}Ref = purego.NewCallback(fcb) | |||
| 321 | + | {{if $NotGLib}}glib.{{end}}SaveCallback({{.Name}}Ptr, {{.Name}}Ref) | |||
| 322 | + | } | |||
| 323 | + | } | |||
| 324 | + | {{- else -}} | |||
| 325 | + | {{.Name}}Ptr := uintptr(unsafe.Pointer({{.Name}})) | |||
| 326 | + | var {{.Name}}Ref uintptr | |||
| 327 | + | if cbRefPtr, ok := {{if $NotGLib}}glib.{{end}}GetCallback({{.Name}}Ptr); ok { | |||
| 328 | + | {{.Name}}Ref = cbRefPtr | |||
| 329 | + | } else { | |||
| 330 | + | fcb := func({{range $i, $t := .PureTypes}}{{if $i}}, {{end}}arg{{$i}} {{$t}}{{end}}) {{.RetRaw}} { | |||
| 331 | + | cbFn := *{{.Name}} | |||
| 332 | + | {{if .RetRaw}}return {{end}}cbFn({{range $i, $t := .PureTypes}}{{if $i}}, {{end}}arg{{$i}}{{end}}) | |||
| 333 | + | } | |||
| 334 | + | {{.Name}}Ref = purego.NewCallback(fcb) | |||
| 335 | + | {{if $NotGLib}}glib.{{end}}SaveCallback({{.Name}}Ptr, {{.Name}}Ref) | |||
| 336 | + | } | |||
| 337 | + | {{- end}} | |||
| 338 | + | {{end}} | |||
| 339 | + | {{if .Ret.Value}}cret := {{end}}x{{.Name}}({{convd .Args.API.CallWithRefs}}) | |||
| 243 | {{.Ret.Fmt $NotGObject}} | 340 | {{.Ret.Fmt $NotGObject}} | ||
| 244 | } | 341 | } | ||
| 245 | {{end}} | 342 | {{end}} | ||
| @@ -274,7 +371,39 @@ var x{{.Name}} func({{conv .Args.Pure.Types}}) {{.Ret.Raw}} | |||||
| 274 | {{.Doc}} | 371 | {{.Doc}} | ||
| 275 | func {{.Name}}({{conv .Args.API.Full}}) {{.Ret.Return}} { | 372 | func {{.Name}}({{conv .Args.API.Full}}) {{.Ret.Return}} { | ||
| 276 | {{.Ret.Preamble $NotGLib}} | 373 | {{.Ret.Preamble $NotGLib}} | ||
| 277 | - | {{if .Ret.Value}}cret :={{end}}x{{.Name}}({{convd .Args.API.Call}}) | 374 | + | {{- /* Generate closure wrappers for callback parameters */}} |
| 375 | + | {{range .Args.Callbacks}} | |||
| 376 | + | {{if .Nullable -}} | |||
| 377 | + | var {{.Name}}Ref uintptr | |||
| 378 | + | if {{.Name}} != nil { | |||
| 379 | + | {{.Name}}Ptr := uintptr(unsafe.Pointer({{.Name}})) | |||
| 380 | + | if cbRefPtr, ok := {{if $NotGLib}}glib.{{end}}GetCallback({{.Name}}Ptr); ok { | |||
| 381 | + | {{.Name}}Ref = cbRefPtr | |||
| 382 | + | } else { | |||
| 383 | + | fcb := func({{range $i, $t := .PureTypes}}{{if $i}}, {{end}}arg{{$i}} {{$t}}{{end}}) {{.RetRaw}} { | |||
| 384 | + | cbFn := *{{.Name}} | |||
| 385 | + | {{if .RetRaw}}return {{end}}cbFn({{range $i, $t := .PureTypes}}{{if $i}}, {{end}}arg{{$i}}{{end}}) | |||
| 386 | + | } | |||
| 387 | + | {{.Name}}Ref = purego.NewCallback(fcb) | |||
| 388 | + | {{if $NotGLib}}glib.{{end}}SaveCallback({{.Name}}Ptr, {{.Name}}Ref) | |||
| 389 | + | } | |||
| 390 | + | } | |||
| 391 | + | {{- else -}} | |||
| 392 | + | {{.Name}}Ptr := uintptr(unsafe.Pointer({{.Name}})) | |||
| 393 | + | var {{.Name}}Ref uintptr | |||
| 394 | + | if cbRefPtr, ok := {{if $NotGLib}}glib.{{end}}GetCallback({{.Name}}Ptr); ok { | |||
| 395 | + | {{.Name}}Ref = cbRefPtr | |||
| 396 | + | } else { | |||
| 397 | + | fcb := func({{range $i, $t := .PureTypes}}{{if $i}}, {{end}}arg{{$i}} {{$t}}{{end}}) {{.RetRaw}} { | |||
| 398 | + | cbFn := *{{.Name}} | |||
| 399 | + | {{if .RetRaw}}return {{end}}cbFn({{range $i, $t := .PureTypes}}{{if $i}}, {{end}}arg{{$i}}{{end}}) | |||
| 400 | + | } | |||
| 401 | + | {{.Name}}Ref = purego.NewCallback(fcb) | |||
| 402 | + | {{if $NotGLib}}glib.{{end}}SaveCallback({{.Name}}Ptr, {{.Name}}Ref) | |||
| 403 | + | } | |||
| 404 | + | {{- end}} | |||
| 405 | + | {{end}} | |||
| 406 | + | {{if .Ret.Value}}cret :={{end}}x{{.Name}}({{convd .Args.API.CallWithRefs}}) | |||
| 278 | {{.Ret.Fmt $NotGObject}} | 407 | {{.Ret.Fmt $NotGObject}} | ||
| 279 | } | 408 | } | ||
| 280 | {{end}} | 409 | {{end}} | ||
| @@ -286,7 +415,39 @@ var x{{$outer.Name}}{{.Name}} func(uintptr {{convc .Args.Pure.Types}}) {{.Ret.Ra | |||||
| 286 | {{.Doc}} | 415 | {{.Doc}} | ||
| 287 | func (x *{{$outer.Name}}) {{.Name}}({{conv .Args.API.Full}}) {{.Ret.Return}} { | 416 | func (x *{{$outer.Name}}) {{.Name}}({{conv .Args.API.Full}}) {{.Ret.Return}} { | ||
| 288 | {{.Ret.Preamble $NotGLib}} | 417 | {{.Ret.Preamble $NotGLib}} | ||
| 289 | - | {{if .Ret.Value}}cret :={{end}}x{{$outer.Name}}{{.Name}}(x.GoPointer() {{convcd .Args.API.Call}}) | 418 | + | {{- /* Generate closure wrappers for callback parameters */}} |
| 419 | + | {{range .Args.Callbacks}} | |||
| 420 | + | {{if .Nullable -}} | |||
| 421 | + | var {{.Name}}Ref uintptr | |||
| 422 | + | if {{.Name}} != nil { | |||
| 423 | + | {{.Name}}Ptr := uintptr(unsafe.Pointer({{.Name}})) | |||
| 424 | + | if cbRefPtr, ok := {{if $NotGLib}}glib.{{end}}GetCallback({{.Name}}Ptr); ok { | |||
| 425 | + | {{.Name}}Ref = cbRefPtr | |||
| 426 | + | } else { | |||
| 427 | + | fcb := func({{range $i, $t := .PureTypes}}{{if $i}}, {{end}}arg{{$i}} {{$t}}{{end}}) {{.RetRaw}} { | |||
| 428 | + | cbFn := *{{.Name}} | |||
| 429 | + | {{if .RetRaw}}return {{end}}cbFn({{range $i, $t := .PureTypes}}{{if $i}}, {{end}}arg{{$i}}{{end}}) | |||
| 430 | + | } | |||
| 431 | + | {{.Name}}Ref = purego.NewCallback(fcb) | |||
| 432 | + | {{if $NotGLib}}glib.{{end}}SaveCallback({{.Name}}Ptr, {{.Name}}Ref) | |||
| 433 | + | } | |||
| 434 | + | } | |||
| 435 | + | {{- else -}} | |||
| 436 | + | {{.Name}}Ptr := uintptr(unsafe.Pointer({{.Name}})) | |||
| 437 | + | var {{.Name}}Ref uintptr | |||
| 438 | + | if cbRefPtr, ok := {{if $NotGLib}}glib.{{end}}GetCallback({{.Name}}Ptr); ok { | |||
| 439 | + | {{.Name}}Ref = cbRefPtr | |||
| 440 | + | } else { | |||
| 441 | + | fcb := func({{range $i, $t := .PureTypes}}{{if $i}}, {{end}}arg{{$i}} {{$t}}{{end}}) {{.RetRaw}} { | |||
| 442 | + | cbFn := *{{.Name}} | |||
| 443 | + | {{if .RetRaw}}return {{end}}cbFn({{range $i, $t := .PureTypes}}{{if $i}}, {{end}}arg{{$i}}{{end}}) | |||
| 444 | + | } | |||
| 445 | + | {{.Name}}Ref = purego.NewCallback(fcb) | |||
| 446 | + | {{if $NotGLib}}glib.{{end}}SaveCallback({{.Name}}Ptr, {{.Name}}Ref) | |||
| 447 | + | } | |||
| 448 | + | {{- end}} | |||
| 449 | + | {{end}} | |||
| 450 | + | {{if .Ret.Value}}cret :={{end}}x{{$outer.Name}}{{.Name}}(x.GoPointer() {{convcd .Args.API.CallWithRefs}}) | |||
| 290 | {{.Ret.Fmt $NotGObject}} | 451 | {{.Ret.Fmt $NotGObject}} | ||
| 291 | } | 452 | } | ||
| 292 | {{end}} | 453 | {{end}} | ||
| @@ -369,7 +530,39 @@ var x{{.Name}} func({{conv .Args.Pure.Types}}) {{.Ret.Raw}} | |||||
| 369 | {{.Doc}} | 530 | {{.Doc}} | ||
| 370 | func {{.Name}}({{conv .Args.API.Full}}) {{.Ret.Return}} { | 531 | func {{.Name}}({{conv .Args.API.Full}}) {{.Ret.Return}} { | ||
| 371 | {{.Ret.Preamble $NotGLib}} | 532 | {{.Ret.Preamble $NotGLib}} | ||
| 372 | - | {{if .Ret.Value}}cret := {{end}}x{{.Name}}({{convd .Args.API.Call}}) | 533 | + | {{- /* Generate closure wrappers for callback parameters */}} |
| 534 | + | {{range .Args.Callbacks}} | |||
| 535 | + | {{if .Nullable -}} | |||
| 536 | + | var {{.Name}}Ref uintptr | |||
| 537 | + | if {{.Name}} != nil { | |||
| 538 | + | {{.Name}}Ptr := uintptr(unsafe.Pointer({{.Name}})) | |||
| 539 | + | if cbRefPtr, ok := {{if $NotGLib}}glib.{{end}}GetCallback({{.Name}}Ptr); ok { | |||
| 540 | + | {{.Name}}Ref = cbRefPtr | |||
| 541 | + | } else { | |||
| 542 | + | fcb := func({{range $i, $t := .PureTypes}}{{if $i}}, {{end}}arg{{$i}} {{$t}}{{end}}) {{.RetRaw}} { | |||
| 543 | + | cbFn := *{{.Name}} | |||
| 544 | + | {{if .RetRaw}}return {{end}}cbFn({{range $i, $t := .PureTypes}}{{if $i}}, {{end}}arg{{$i}}{{end}}) | |||
| 545 | + | } | |||
| 546 | + | {{.Name}}Ref = purego.NewCallback(fcb) | |||
| 547 | + | {{if $NotGLib}}glib.{{end}}SaveCallback({{.Name}}Ptr, {{.Name}}Ref) | |||
| 548 | + | } | |||
| 549 | + | } | |||
| 550 | + | {{- else -}} | |||
| 551 | + | {{.Name}}Ptr := uintptr(unsafe.Pointer({{.Name}})) | |||
| 552 | + | var {{.Name}}Ref uintptr | |||
| 553 | + | if cbRefPtr, ok := {{if $NotGLib}}glib.{{end}}GetCallback({{.Name}}Ptr); ok { | |||
| 554 | + | {{.Name}}Ref = cbRefPtr | |||
| 555 | + | } else { | |||
| 556 | + | fcb := func({{range $i, $t := .PureTypes}}{{if $i}}, {{end}}arg{{$i}} {{$t}}{{end}}) {{.RetRaw}} { | |||
| 557 | + | cbFn := *{{.Name}} | |||
| 558 | + | {{if .RetRaw}}return {{end}}cbFn({{range $i, $t := .PureTypes}}{{if $i}}, {{end}}arg{{$i}}{{end}}) | |||
| 559 | + | } | |||
| 560 | + | {{.Name}}Ref = purego.NewCallback(fcb) | |||
| 561 | + | {{if $NotGLib}}glib.{{end}}SaveCallback({{.Name}}Ptr, {{.Name}}Ref) | |||
| 562 | + | } | |||
| 563 | + | {{- end}} | |||
| 564 | + | {{end}} | |||
| 565 | + | {{if .Ret.Value}}cret := {{end}}x{{.Name}}({{convd .Args.API.CallWithRefs}}) | |||
| 373 | {{.Ret.Fmt $NotGObject}} | 566 | {{.Ret.Fmt $NotGObject}} | ||
| 374 | } | 567 | } | ||
| 375 | {{end}} | 568 | {{end}} | ||
M v4/adw/adw-alert-dialog.go +16 -1
| @@ -321,7 +321,22 @@ var xAlertDialogChoose func(uintptr, uintptr, uintptr, uintptr, uintptr) | |||||
| 321 | // will be shown within it. Otherwise, it will be a separate window. | 321 | // will be shown within it. Otherwise, it will be a separate window. | ||
| 322 | func (x *AlertDialog) Choose(ParentVar *gtk.Widget, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) { | 322 | func (x *AlertDialog) Choose(ParentVar *gtk.Widget, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) { | ||
| 323 | 323 | ||||
| 324 | - | xAlertDialogChoose(x.GoPointer(), ParentVar.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 *AsyncResult, 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 | + | xAlertDialogChoose(x.GoPointer(), ParentVar.GoPointer(), CancellableVar.GoPointer(), CallbackVarRef, UserDataVar) | |||
| 325 | 340 | ||||
| 326 | } | 341 | } | ||
| 327 | 342 | ||||
M v4/adw/adw-animation-target.go +27 -1
| @@ -92,7 +92,33 @@ var xNewCallbackAnimationTarget func(uintptr, uintptr, uintptr) uintptr | |||||
| 92 | func NewCallbackAnimationTarget(CallbackVar *AnimationTargetFunc, UserDataVar uintptr, DestroyVar *glib.DestroyNotify) *CallbackAnimationTarget { | 92 | func NewCallbackAnimationTarget(CallbackVar *AnimationTargetFunc, UserDataVar uintptr, DestroyVar *glib.DestroyNotify) *CallbackAnimationTarget { | ||
| 93 | var cls *CallbackAnimationTarget | 93 | var cls *CallbackAnimationTarget | ||
| 94 | 94 | ||||
| 95 | - | cret := xNewCallbackAnimationTarget(glib.NewCallback(CallbackVar), UserDataVar, glib.NewCallback(DestroyVar)) | 95 | + | CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar)) |
| 96 | + | var CallbackVarRef uintptr | |||
| 97 | + | if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok { | |||
| 98 | + | CallbackVarRef = cbRefPtr | |||
| 99 | + | } else { | |||
| 100 | + | fcb := func(arg0 float64, arg1 uintptr) { | |||
| 101 | + | cbFn := *CallbackVar | |||
| 102 | + | cbFn(arg0, arg1) | |||
| 103 | + | } | |||
| 104 | + | CallbackVarRef = purego.NewCallback(fcb) | |||
| 105 | + | glib.SaveCallback(CallbackVarPtr, CallbackVarRef) | |||
| 106 | + | } | |||
| 107 | + | ||||
| 108 | + | DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar)) | |||
| 109 | + | var DestroyVarRef uintptr | |||
| 110 | + | if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok { | |||
| 111 | + | DestroyVarRef = cbRefPtr | |||
| 112 | + | } else { | |||
| 113 | + | fcb := func(arg0 uintptr) { | |||
| 114 | + | cbFn := *DestroyVar | |||
| 115 | + | cbFn(arg0) | |||
| 116 | + | } | |||
| 117 | + | DestroyVarRef = purego.NewCallback(fcb) | |||
| 118 | + | glib.SaveCallback(DestroyVarPtr, DestroyVarRef) | |||
| 119 | + | } | |||
| 120 | + | ||||
| 121 | + | cret := xNewCallbackAnimationTarget(CallbackVarRef, UserDataVar, DestroyVarRef) | |||
| 96 | 122 | ||||
| 97 | if cret == 0 { | 123 | if cret == 0 { | ||
| 98 | return nil | 124 | return nil | ||
M v4/adw/adw-message-dialog.go +16 -1
| @@ -294,7 +294,22 @@ var xMessageDialogChoose func(uintptr, uintptr, uintptr, uintptr) | |||||
| 294 | // This function shows @self to the user. | 294 | // This function shows @self to the user. | ||
| 295 | func (x *MessageDialog) Choose(CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) { | 295 | func (x *MessageDialog) Choose(CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) { | ||
| 296 | 296 | ||||
| 297 | - | xMessageDialogChoose(x.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 *AsyncResult, 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 | + | xMessageDialogChoose(x.GoPointer(), CancellableVar.GoPointer(), CallbackVarRef, UserDataVar) | |||
| 298 | 313 | ||||
| 299 | } | 314 | } | ||
| 300 | 315 | ||||
M v4/adw/adw-preferences-group.go +29 -1
| @@ -113,7 +113,35 @@ var xPreferencesGroupBindModel func(uintptr, uintptr, uintptr, uintptr, uintptr) | |||||
| 113 | // See [method@Gtk.ListBox.bind_model]. | 113 | // See [method@Gtk.ListBox.bind_model]. | ||
| 114 | func (x *PreferencesGroup) BindModel(ModelVar gio.ListModel, CreateRowFuncVar *gtk.ListBoxCreateWidgetFunc, UserDataVar uintptr, UserDataFreeFuncVar *glib.DestroyNotify) { | 114 | func (x *PreferencesGroup) BindModel(ModelVar gio.ListModel, CreateRowFuncVar *gtk.ListBoxCreateWidgetFunc, UserDataVar uintptr, UserDataFreeFuncVar *glib.DestroyNotify) { | ||
| 115 | 115 | ||||
| 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) *Widget { | |||
| 123 | + | cbFn := *CreateRowFuncVar | |||
| 124 | + | return cbFn(arg0, arg1) | |||
| 125 | + | } | |||
| 126 | + | CreateRowFuncVarRef = purego.NewCallback(fcb) | |||
| 127 | + | glib.SaveCallback(CreateRowFuncVarPtr, CreateRowFuncVarRef) | |||
| 128 | + | } | |||
| 129 | + | } | |||
| 130 | + | ||||
| 131 | + | UserDataFreeFuncVarPtr := uintptr(unsafe.Pointer(UserDataFreeFuncVar)) | |||
| 132 | + | var UserDataFreeFuncVarRef uintptr | |||
| 133 | + | if cbRefPtr, ok := glib.GetCallback(UserDataFreeFuncVarPtr); ok { | |||
| 134 | + | UserDataFreeFuncVarRef = cbRefPtr | |||
| 135 | + | } else { | |||
| 136 | + | fcb := func(arg0 uintptr) { | |||
| 137 | + | cbFn := *UserDataFreeFuncVar | |||
| 138 | + | cbFn(arg0) | |||
| 139 | + | } | |||
| 140 | + | UserDataFreeFuncVarRef = purego.NewCallback(fcb) | |||
| 141 | + | glib.SaveCallback(UserDataFreeFuncVarPtr, UserDataFreeFuncVarRef) | |||
| 142 | + | } | |||
| 143 | + | ||||
| 144 | + | xPreferencesGroupBindModel(x.GoPointer(), ModelVar.GoPointer(), CreateRowFuncVarRef, UserDataVar, UserDataFreeFuncVarRef) | |||
| 117 | 145 | ||||
| 118 | } | 146 | } | ||
| 119 | 147 | ||||
M v4/gdk/gdkclipboard.go +80 -5
| @@ -114,7 +114,22 @@ var xClipboardReadAsync func(uintptr, []string, int, uintptr, uintptr, uintptr) | |||||
| 114 | // to fulfill the request, preferring the ones listed first. | 114 | // to fulfill the request, preferring the ones listed first. | ||
| 115 | func (x *Clipboard) ReadAsync(MimeTypesVar []string, IoPriorityVar int, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) { | 115 | func (x *Clipboard) ReadAsync(MimeTypesVar []string, IoPriorityVar int, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) { | ||
| 116 | 116 | ||||
| 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 *AsyncResult, 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) | |||
| 118 | 133 | ||||
| 119 | } | 134 | } | ||
| 120 | 135 | ||||
| @@ -150,7 +165,22 @@ var xClipboardReadTextAsync func(uintptr, uintptr, uintptr, uintptr) | |||||
| 150 | // need more control over the operation. | 165 | // need more control over the operation. | ||
| 151 | func (x *Clipboard) ReadTextAsync(CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) { | 166 | func (x *Clipboard) ReadTextAsync(CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) { | ||
| 152 | 167 | ||||
| 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 *AsyncResult, 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) | |||
| 154 | 184 | ||||
| 155 | } | 185 | } | ||
| 156 | 186 | ||||
| @@ -179,7 +209,22 @@ var xClipboardReadTextureAsync func(uintptr, uintptr, uintptr, uintptr) | |||||
| 179 | // need more control over the operation. | 209 | // need more control over the operation. | ||
| 180 | func (x *Clipboard) ReadTextureAsync(CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) { | 210 | func (x *Clipboard) ReadTextureAsync(CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) { | ||
| 181 | 211 | ||||
| 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 *AsyncResult, 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) | |||
| 183 | 228 | ||||
| 184 | } | 229 | } | ||
| 185 | 230 | ||||
| @@ -216,7 +261,22 @@ var xClipboardReadValueAsync func(uintptr, types.GType, int, uintptr, uintptr, u | |||||
| 216 | // [func@content_deserialize_async] to convert the clipboard's data. | 261 | // [func@content_deserialize_async] to convert the clipboard's data. | ||
| 217 | func (x *Clipboard) ReadValueAsync(TypeVar types.GType, IoPriorityVar int, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) { | 262 | func (x *Clipboard) ReadValueAsync(TypeVar types.GType, IoPriorityVar int, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) { | ||
| 218 | 263 | ||||
| 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 *AsyncResult, 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) | |||
| 220 | 280 | ||||
| 221 | } | 281 | } | ||
| 222 | 282 | ||||
| @@ -327,7 +387,22 @@ var xClipboardStoreAsync func(uintptr, int, uintptr, uintptr, uintptr) | |||||
| 327 | // is shut down, so you likely don't need to call it. | 387 | // is shut down, so you likely don't need to call it. | ||
| 328 | func (x *Clipboard) StoreAsync(IoPriorityVar int, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) { | 388 | func (x *Clipboard) StoreAsync(IoPriorityVar int, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) { | ||
| 329 | 389 | ||||
| 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 *AsyncResult, 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) | |||
| 331 | 406 | ||||
| 332 | } | 407 | } | ||
| 333 | 408 | ||||
M v4/gdk/gdkcontentdeserializer.go +59 -3
| @@ -2,6 +2,8 @@ | |||||
| 2 | package gdk | 2 | package gdk | ||
| 3 | 3 | ||||
| 4 | import ( | 4 | import ( | ||
| 5 | + | "unsafe" | |||
| 6 | + | ||||
| 5 | "github.com/jwijenbergh/purego" | 7 | "github.com/jwijenbergh/purego" | ||
| 6 | "github.com/jwijenbergh/puregotk/pkg/core" | 8 | "github.com/jwijenbergh/puregotk/pkg/core" | ||
| 7 | "github.com/jwijenbergh/puregotk/v4/gio" | 9 | "github.com/jwijenbergh/puregotk/v4/gio" | ||
| @@ -25,7 +27,22 @@ var xContentDeserializeAsync func(uintptr, string, types.GType, int, uintptr, ui | |||||
| 25 | // indicate a higher priority. | 27 | // indicate a higher priority. | ||
| 26 | func ContentDeserializeAsync(StreamVar *gio.InputStream, MimeTypeVar string, TypeVar types.GType, IoPriorityVar int, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) { | 28 | func ContentDeserializeAsync(StreamVar *gio.InputStream, MimeTypeVar string, TypeVar types.GType, IoPriorityVar int, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) { | ||
| 27 | 29 | ||||
| 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 *AsyncResult, 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) | |||
| 29 | 46 | ||||
| 30 | } | 47 | } | ||
| 31 | 48 | ||||
| @@ -52,7 +69,33 @@ var xContentRegisterDeserializer func(string, types.GType, uintptr, uintptr, uin | |||||
| 52 | // so applications can override the built-in deserializers. | 69 | // so applications can override the built-in deserializers. | ||
| 53 | func ContentRegisterDeserializer(MimeTypeVar string, TypeVar types.GType, DeserializeVar *ContentDeserializeFunc, DataVar uintptr, NotifyVar *glib.DestroyNotify) { | 70 | func ContentRegisterDeserializer(MimeTypeVar string, TypeVar types.GType, DeserializeVar *ContentDeserializeFunc, DataVar uintptr, NotifyVar *glib.DestroyNotify) { | ||
| 54 | 71 | ||||
| 55 | - | xContentRegisterDeserializer(MimeTypeVar, TypeVar, glib.NewCallback(DeserializeVar), DataVar, glib.NewCallback(NotifyVar)) | 72 | + | DeserializeVarPtr := uintptr(unsafe.Pointer(DeserializeVar)) |
| 73 | + | var DeserializeVarRef uintptr | |||
| 74 | + | if cbRefPtr, ok := glib.GetCallback(DeserializeVarPtr); ok { | |||
| 75 | + | DeserializeVarRef = cbRefPtr | |||
| 76 | + | } else { | |||
| 77 | + | fcb := func(arg0 uintptr) { | |||
| 78 | + | cbFn := *DeserializeVar | |||
| 79 | + | cbFn(arg0) | |||
| 80 | + | } | |||
| 81 | + | DeserializeVarRef = purego.NewCallback(fcb) | |||
| 82 | + | glib.SaveCallback(DeserializeVarPtr, DeserializeVarRef) | |||
| 83 | + | } | |||
| 84 | + | ||||
| 85 | + | NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar)) | |||
| 86 | + | var NotifyVarRef uintptr | |||
| 87 | + | if cbRefPtr, ok := glib.GetCallback(NotifyVarPtr); ok { | |||
| 88 | + | NotifyVarRef = cbRefPtr | |||
| 89 | + | } else { | |||
| 90 | + | fcb := func(arg0 uintptr) { | |||
| 91 | + | cbFn := *NotifyVar | |||
| 92 | + | cbFn(arg0) | |||
| 93 | + | } | |||
| 94 | + | NotifyVarRef = purego.NewCallback(fcb) | |||
| 95 | + | glib.SaveCallback(NotifyVarPtr, NotifyVarRef) | |||
| 96 | + | } | |||
| 97 | + | ||||
| 98 | + | xContentRegisterDeserializer(MimeTypeVar, TypeVar, DeserializeVarRef, DataVar, NotifyVarRef) | |||
| 56 | 99 | ||||
| 57 | } | 100 | } | ||
| 58 | 101 | ||||
| @@ -203,7 +246,20 @@ var xContentDeserializerSetTaskData func(uintptr, uintptr, uintptr) | |||||
| 203 | // Associate data with the current deserialization operation. | 246 | // Associate data with the current deserialization operation. | ||
| 204 | func (x *ContentDeserializer) SetTaskData(DataVar uintptr, NotifyVar *glib.DestroyNotify) { | 247 | func (x *ContentDeserializer) SetTaskData(DataVar uintptr, NotifyVar *glib.DestroyNotify) { | ||
| 205 | 248 | ||||
| 206 | - | xContentDeserializerSetTaskData(x.GoPointer(), DataVar, glib.NewCallback(NotifyVar)) | 249 | + | NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar)) |
| 250 | + | var NotifyVarRef uintptr | |||
| 251 | + | if cbRefPtr, ok := glib.GetCallback(NotifyVarPtr); ok { | |||
| 252 | + | NotifyVarRef = cbRefPtr | |||
| 253 | + | } else { | |||
| 254 | + | fcb := func(arg0 uintptr) { | |||
| 255 | + | cbFn := *NotifyVar | |||
| 256 | + | cbFn(arg0) | |||
| 257 | + | } | |||
| 258 | + | NotifyVarRef = purego.NewCallback(fcb) | |||
| 259 | + | glib.SaveCallback(NotifyVarPtr, NotifyVarRef) | |||
| 260 | + | } | |||
| 261 | + | ||||
| 262 | + | xContentDeserializerSetTaskData(x.GoPointer(), DataVar, NotifyVarRef) | |||
| 207 | 263 | ||||
| 208 | } | 264 | } | ||
| 209 | 265 | ||||
M v4/gdk/gdkcontentprovider.go +16 -1
| @@ -402,7 +402,22 @@ var xContentProviderWriteMimeTypeAsync func(uintptr, string, uintptr, int, uintp | |||||
| 402 | // The given @stream will not be closed. | 402 | // The given @stream will not be closed. | ||
| 403 | func (x *ContentProvider) WriteMimeTypeAsync(MimeTypeVar string, StreamVar *gio.OutputStream, IoPriorityVar int, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) { | 403 | func (x *ContentProvider) WriteMimeTypeAsync(MimeTypeVar string, StreamVar *gio.OutputStream, IoPriorityVar int, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) { | ||
| 404 | 404 | ||||
| 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 *AsyncResult, 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) | |||
| 406 | 421 | ||||
| 407 | } | 422 | } | ||
| 408 | 423 | ||||
M v4/gdk/gdkcontentserializer.go +59 -3
| @@ -2,6 +2,8 @@ | |||||
| 2 | package gdk | 2 | package gdk | ||
| 3 | 3 | ||||
| 4 | import ( | 4 | import ( | ||
| 5 | + | "unsafe" | |||
| 6 | + | ||||
| 5 | "github.com/jwijenbergh/purego" | 7 | "github.com/jwijenbergh/purego" | ||
| 6 | "github.com/jwijenbergh/puregotk/pkg/core" | 8 | "github.com/jwijenbergh/puregotk/pkg/core" | ||
| 7 | "github.com/jwijenbergh/puregotk/v4/gio" | 9 | "github.com/jwijenbergh/puregotk/v4/gio" | ||
| @@ -26,7 +28,33 @@ var xContentRegisterSerializer func(types.GType, string, uintptr, uintptr, uintp | |||||
| 26 | // so applications can override the built-in serializers. | 28 | // so applications can override the built-in serializers. | ||
| 27 | func ContentRegisterSerializer(TypeVar types.GType, MimeTypeVar string, SerializeVar *ContentSerializeFunc, DataVar uintptr, NotifyVar *glib.DestroyNotify) { | 29 | func ContentRegisterSerializer(TypeVar types.GType, MimeTypeVar string, SerializeVar *ContentSerializeFunc, DataVar uintptr, NotifyVar *glib.DestroyNotify) { | ||
| 28 | 30 | ||||
| 29 | - | xContentRegisterSerializer(TypeVar, MimeTypeVar, glib.NewCallback(SerializeVar), DataVar, glib.NewCallback(NotifyVar)) | 31 | + | SerializeVarPtr := uintptr(unsafe.Pointer(SerializeVar)) |
| 32 | + | var SerializeVarRef uintptr | |||
| 33 | + | if cbRefPtr, ok := glib.GetCallback(SerializeVarPtr); ok { | |||
| 34 | + | SerializeVarRef = cbRefPtr | |||
| 35 | + | } else { | |||
| 36 | + | fcb := func(arg0 uintptr) { | |||
| 37 | + | cbFn := *SerializeVar | |||
| 38 | + | cbFn(arg0) | |||
| 39 | + | } | |||
| 40 | + | SerializeVarRef = purego.NewCallback(fcb) | |||
| 41 | + | glib.SaveCallback(SerializeVarPtr, SerializeVarRef) | |||
| 42 | + | } | |||
| 43 | + | ||||
| 44 | + | NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar)) | |||
| 45 | + | var NotifyVarRef uintptr | |||
| 46 | + | if cbRefPtr, ok := glib.GetCallback(NotifyVarPtr); ok { | |||
| 47 | + | NotifyVarRef = cbRefPtr | |||
| 48 | + | } else { | |||
| 49 | + | fcb := func(arg0 uintptr) { | |||
| 50 | + | cbFn := *NotifyVar | |||
| 51 | + | cbFn(arg0) | |||
| 52 | + | } | |||
| 53 | + | NotifyVarRef = purego.NewCallback(fcb) | |||
| 54 | + | glib.SaveCallback(NotifyVarPtr, NotifyVarRef) | |||
| 55 | + | } | |||
| 56 | + | ||||
| 57 | + | xContentRegisterSerializer(TypeVar, MimeTypeVar, SerializeVarRef, DataVar, NotifyVarRef) | |||
| 30 | 58 | ||||
| 31 | } | 59 | } | ||
| 32 | 60 | ||||
| @@ -38,7 +66,22 @@ var xContentSerializeAsync func(uintptr, string, *gobject.Value, int, uintptr, u | |||||
| 38 | // indicate a higher priority. | 66 | // indicate a higher priority. | ||
| 39 | func ContentSerializeAsync(StreamVar *gio.OutputStream, MimeTypeVar string, ValueVar *gobject.Value, IoPriorityVar int, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) { | 67 | func ContentSerializeAsync(StreamVar *gio.OutputStream, MimeTypeVar string, ValueVar *gobject.Value, IoPriorityVar int, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) { | ||
| 40 | 68 | ||||
| 41 | - | xContentSerializeAsync(StreamVar.GoPointer(), MimeTypeVar, ValueVar, IoPriorityVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar) | 69 | + | var CallbackVarRef uintptr |
| 70 | + | if CallbackVar != nil { | |||
| 71 | + | CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar)) | |||
| 72 | + | if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok { | |||
| 73 | + | CallbackVarRef = cbRefPtr | |||
| 74 | + | } else { | |||
| 75 | + | fcb := func(arg0 uintptr, arg1 *AsyncResult, arg2 uintptr) { | |||
| 76 | + | cbFn := *CallbackVar | |||
| 77 | + | cbFn(arg0, arg1, arg2) | |||
| 78 | + | } | |||
| 79 | + | CallbackVarRef = purego.NewCallback(fcb) | |||
| 80 | + | glib.SaveCallback(CallbackVarPtr, CallbackVarRef) | |||
| 81 | + | } | |||
| 82 | + | } | |||
| 83 | + | ||||
| 84 | + | xContentSerializeAsync(StreamVar.GoPointer(), MimeTypeVar, ValueVar, IoPriorityVar, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar) | |||
| 42 | 85 | ||||
| 43 | } | 86 | } | ||
| 44 | 87 | ||||
| @@ -204,7 +247,20 @@ var xContentSerializerSetTaskData func(uintptr, uintptr, uintptr) | |||||
| 204 | // Associate data with the current serialization operation. | 247 | // Associate data with the current serialization operation. | ||
| 205 | func (x *ContentSerializer) SetTaskData(DataVar uintptr, NotifyVar *glib.DestroyNotify) { | 248 | func (x *ContentSerializer) SetTaskData(DataVar uintptr, NotifyVar *glib.DestroyNotify) { | ||
| 206 | 249 | ||||
| 207 | - | xContentSerializerSetTaskData(x.GoPointer(), DataVar, glib.NewCallback(NotifyVar)) | 250 | + | NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar)) |
| 251 | + | var NotifyVarRef uintptr | |||
| 252 | + | if cbRefPtr, ok := glib.GetCallback(NotifyVarPtr); ok { | |||
| 253 | + | NotifyVarRef = cbRefPtr | |||
| 254 | + | } else { | |||
| 255 | + | fcb := func(arg0 uintptr) { | |||
| 256 | + | cbFn := *NotifyVar | |||
| 257 | + | cbFn(arg0) | |||
| 258 | + | } | |||
| 259 | + | NotifyVarRef = purego.NewCallback(fcb) | |||
| 260 | + | glib.SaveCallback(NotifyVarPtr, NotifyVarRef) | |||
| 261 | + | } | |||
| 262 | + | ||||
| 263 | + | xContentSerializerSetTaskData(x.GoPointer(), DataVar, NotifyVarRef) | |||
| 208 | 264 | ||||
| 209 | } | 265 | } | ||
| 210 | 266 | ||||
M v4/gdk/gdkcursor.go +29 -1
| @@ -2,6 +2,8 @@ | |||||
| 2 | package gdk | 2 | package gdk | ||
| 3 | 3 | ||||
| 4 | import ( | 4 | import ( | ||
| 5 | + | "unsafe" | |||
| 6 | + | ||||
| 5 | "github.com/jwijenbergh/purego" | 7 | "github.com/jwijenbergh/purego" | ||
| 6 | "github.com/jwijenbergh/puregotk/pkg/core" | 8 | "github.com/jwijenbergh/puregotk/pkg/core" | ||
| 7 | "github.com/jwijenbergh/puregotk/v4/glib" | 9 | "github.com/jwijenbergh/puregotk/v4/glib" | ||
| @@ -82,7 +84,33 @@ var xNewCursorFromCallback func(uintptr, uintptr, uintptr, uintptr) uintptr | |||||
| 82 | func NewCursorFromCallback(CallbackVar *CursorGetTextureCallback, DataVar uintptr, DestroyVar *glib.DestroyNotify, FallbackVar *Cursor) *Cursor { | 84 | func NewCursorFromCallback(CallbackVar *CursorGetTextureCallback, DataVar uintptr, DestroyVar *glib.DestroyNotify, FallbackVar *Cursor) *Cursor { | ||
| 83 | var cls *Cursor | 85 | var cls *Cursor | ||
| 84 | 86 | ||||
| 85 | - | cret := xNewCursorFromCallback(glib.NewCallback(CallbackVar), DataVar, glib.NewCallback(DestroyVar), FallbackVar.GoPointer()) | 87 | + | CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar)) |
| 88 | + | var CallbackVarRef uintptr | |||
| 89 | + | if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok { | |||
| 90 | + | CallbackVarRef = cbRefPtr | |||
| 91 | + | } else { | |||
| 92 | + | fcb := func(arg0 uintptr, arg1 int, arg2 float64, arg3 *int, arg4 *int, arg5 *int, arg6 *int, arg7 uintptr) uintptr { | |||
| 93 | + | cbFn := *CallbackVar | |||
| 94 | + | return cbFn(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7) | |||
| 95 | + | } | |||
| 96 | + | CallbackVarRef = purego.NewCallback(fcb) | |||
| 97 | + | glib.SaveCallback(CallbackVarPtr, CallbackVarRef) | |||
| 98 | + | } | |||
| 99 | + | ||||
| 100 | + | DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar)) | |||
| 101 | + | var DestroyVarRef uintptr | |||
| 102 | + | if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok { | |||
| 103 | + | DestroyVarRef = cbRefPtr | |||
| 104 | + | } else { | |||
| 105 | + | fcb := func(arg0 uintptr) { | |||
| 106 | + | cbFn := *DestroyVar | |||
| 107 | + | cbFn(arg0) | |||
| 108 | + | } | |||
| 109 | + | DestroyVarRef = purego.NewCallback(fcb) | |||
| 110 | + | glib.SaveCallback(DestroyVarPtr, DestroyVarRef) | |||
| 111 | + | } | |||
| 112 | + | ||||
| 113 | + | cret := xNewCursorFromCallback(CallbackVarRef, DataVar, DestroyVarRef, FallbackVar.GoPointer()) | |||
| 86 | 114 | ||||
| 87 | if cret == 0 { | 115 | if cret == 0 { | ||
| 88 | return nil | 116 | return nil | ||
M v4/gdk/gdkdmabuftexturebuilder.go +16 -1
| @@ -131,7 +131,22 @@ func (x *DmabufTextureBuilder) Build(DestroyVar *glib.DestroyNotify, DataVar uin | |||||
| 131 | var cls *Texture | 131 | var cls *Texture | ||
| 132 | var cerr *glib.Error | 132 | var cerr *glib.Error | ||
| 133 | 133 | ||||
| 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) | |||
| 135 | 150 | ||||
| 136 | if cret == 0 { | 151 | if cret == 0 { | ||
| 137 | return nil, cerr | 152 | return nil, cerr | ||
M v4/gdk/gdkdrop.go +34 -2
| @@ -2,6 +2,8 @@ | |||||
| 2 | package gdk | 2 | package gdk | ||
| 3 | 3 | ||||
| 4 | import ( | 4 | import ( | ||
| 5 | + | "unsafe" | |||
| 6 | + | ||||
| 5 | "github.com/jwijenbergh/purego" | 7 | "github.com/jwijenbergh/purego" | ||
| 6 | "github.com/jwijenbergh/puregotk/pkg/core" | 8 | "github.com/jwijenbergh/puregotk/pkg/core" | ||
| 7 | "github.com/jwijenbergh/puregotk/v4/gio" | 9 | "github.com/jwijenbergh/puregotk/v4/gio" | ||
| @@ -161,7 +163,22 @@ var xDropReadAsync func(uintptr, []string, int, uintptr, uintptr, uintptr) | |||||
| 161 | // in a format that complies with one of the mime types. | 163 | // in a format that complies with one of the mime types. | ||
| 162 | func (x *Drop) ReadAsync(MimeTypesVar []string, IoPriorityVar int, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) { | 164 | func (x *Drop) ReadAsync(MimeTypesVar []string, IoPriorityVar int, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) { | ||
| 163 | 165 | ||||
| 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 *AsyncResult, 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) | |||
| 165 | 182 | ||||
| 166 | } | 183 | } | ||
| 167 | 184 | ||||
| @@ -203,7 +220,22 @@ var xDropReadValueAsync func(uintptr, types.GType, int, uintptr, uintptr, uintpt | |||||
| 203 | // try to use [func@Gdk.content_deserialize_async] to convert the data. | 220 | // try to use [func@Gdk.content_deserialize_async] to convert the data. | ||
| 204 | func (x *Drop) ReadValueAsync(TypeVar types.GType, IoPriorityVar int, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) { | 221 | func (x *Drop) ReadValueAsync(TypeVar types.GType, IoPriorityVar int, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) { | ||
| 205 | 222 | ||||
| 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 *AsyncResult, 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) | |||
| 207 | 239 | ||||
| 208 | } | 240 | } | ||
| 209 | 241 | ||||
M v4/gdk/gdkgltexture.go +14 -1
| @@ -47,7 +47,20 @@ var xNewGLTexture func(uintptr, uint, int, int, uintptr, uintptr) uintptr | |||||
| 47 | func NewGLTexture(ContextVar *GLContext, IdVar uint, WidthVar int, HeightVar int, DestroyVar *glib.DestroyNotify, DataVar uintptr) *GLTexture { | 47 | func NewGLTexture(ContextVar *GLContext, IdVar uint, WidthVar int, HeightVar int, DestroyVar *glib.DestroyNotify, DataVar uintptr) *GLTexture { | ||
| 48 | var cls *GLTexture | 48 | var cls *GLTexture | ||
| 49 | 49 | ||||
| 50 | - | cret := xNewGLTexture(ContextVar.GoPointer(), IdVar, WidthVar, HeightVar, glib.NewCallback(DestroyVar), DataVar) | 50 | + | DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar)) |
| 51 | + | var DestroyVarRef uintptr | |||
| 52 | + | if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok { | |||
| 53 | + | DestroyVarRef = cbRefPtr | |||
| 54 | + | } else { | |||
| 55 | + | fcb := func(arg0 uintptr) { | |||
| 56 | + | cbFn := *DestroyVar | |||
| 57 | + | cbFn(arg0) | |||
| 58 | + | } | |||
| 59 | + | DestroyVarRef = purego.NewCallback(fcb) | |||
| 60 | + | glib.SaveCallback(DestroyVarPtr, DestroyVarRef) | |||
| 61 | + | } | |||
| 62 | + | ||||
| 63 | + | cret := xNewGLTexture(ContextVar.GoPointer(), IdVar, WidthVar, HeightVar, DestroyVarRef, DataVar) | |||
| 51 | 64 | ||||
| 52 | if cret == 0 { | 65 | if cret == 0 { | ||
| 53 | return nil | 66 | return nil | ||
M v4/gdk/gdkgltexturebuilder.go +16 -1
| @@ -81,7 +81,22 @@ var xGLTextureBuilderBuild func(uintptr, uintptr, uintptr) uintptr | |||||
| 81 | func (x *GLTextureBuilder) Build(DestroyVar *glib.DestroyNotify, DataVar uintptr) *Texture { | 81 | func (x *GLTextureBuilder) Build(DestroyVar *glib.DestroyNotify, DataVar uintptr) *Texture { | ||
| 82 | var cls *Texture | 82 | var cls *Texture | ||
| 83 | 83 | ||||
| 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) | |||
| 85 | 100 | ||||
| 86 | if cret == 0 { | 101 | if cret == 0 { | ||
| 87 | return nil | 102 | return nil | ||
M v4/gdkpixbuf/gdk-pixbuf-animation.go +16 -1
| @@ -588,7 +588,22 @@ var xPixbufAnimationNewFromStreamAsync func(uintptr, uintptr, uintptr, uintptr) | |||||
| 588 | // result of the operation. | 588 | // result of the operation. | ||
| 589 | func PixbufAnimationNewFromStreamAsync(StreamVar *gio.InputStream, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) { | 589 | func PixbufAnimationNewFromStreamAsync(StreamVar *gio.InputStream, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) { | ||
| 590 | 590 | ||||
| 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 *AsyncResult, 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) | |||
| 592 | 607 | ||||
| 593 | } | 608 | } | ||
| 594 | 609 | ||||
M v4/gdkpixbuf/gdk-pixbuf.go +126 -8
| @@ -2,6 +2,8 @@ | |||||
| 2 | package gdkpixbuf | 2 | package gdkpixbuf | ||
| 3 | 3 | ||||
| 4 | import ( | 4 | import ( | ||
| 5 | + | "unsafe" | |||
| 6 | + | ||||
| 5 | "github.com/jwijenbergh/purego" | 7 | "github.com/jwijenbergh/purego" | ||
| 6 | "github.com/jwijenbergh/puregotk/pkg/core" | 8 | "github.com/jwijenbergh/puregotk/pkg/core" | ||
| 7 | "github.com/jwijenbergh/puregotk/v4/gio" | 9 | "github.com/jwijenbergh/puregotk/v4/gio" | ||
| @@ -219,7 +221,22 @@ var xNewPixbufFromData func([]byte, Colorspace, bool, int, int, int, int, uintpt | |||||
| 219 | func NewPixbufFromData(DataVar []byte, ColorspaceVar Colorspace, HasAlphaVar bool, BitsPerSampleVar int, WidthVar int, HeightVar int, RowstrideVar int, DestroyFnVar *PixbufDestroyNotify, DestroyFnDataVar uintptr) *Pixbuf { | 221 | func NewPixbufFromData(DataVar []byte, ColorspaceVar Colorspace, HasAlphaVar bool, BitsPerSampleVar int, WidthVar int, HeightVar int, RowstrideVar int, DestroyFnVar *PixbufDestroyNotify, DestroyFnDataVar uintptr) *Pixbuf { | ||
| 220 | var cls *Pixbuf | 222 | var cls *Pixbuf | ||
| 221 | 223 | ||||
| 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) | |||
| 223 | 240 | ||||
| 224 | if cret == 0 { | 241 | if cret == 0 { | ||
| 225 | return nil | 242 | return nil | ||
| @@ -1144,7 +1161,20 @@ var xPixbufSaveToCallback func(uintptr, uintptr, uintptr, string, **glib.Error, | |||||
| 1144 | // See [method@GdkPixbuf.Pixbuf.save] for more details. | 1161 | // See [method@GdkPixbuf.Pixbuf.save] for more details. | ||
| 1145 | func (x *Pixbuf) SaveToCallback(SaveFuncVar *PixbufSaveFunc, UserDataVar uintptr, TypeVar string, ErrorVar **glib.Error, varArgs ...interface{}) bool { | 1162 | func (x *Pixbuf) SaveToCallback(SaveFuncVar *PixbufSaveFunc, UserDataVar uintptr, TypeVar string, ErrorVar **glib.Error, varArgs ...interface{}) bool { | ||
| 1146 | 1163 | ||||
| 1147 | - | cret := xPixbufSaveToCallback(x.GoPointer(), glib.NewCallback(SaveFuncVar), UserDataVar, TypeVar, ErrorVar, varArgs...) | 1164 | + | SaveFuncVarPtr := uintptr(unsafe.Pointer(SaveFuncVar)) |
| 1165 | + | var SaveFuncVarRef uintptr | |||
| 1166 | + | if cbRefPtr, ok := glib.GetCallback(SaveFuncVarPtr); ok { | |||
| 1167 | + | SaveFuncVarRef = cbRefPtr | |||
| 1168 | + | } else { | |||
| 1169 | + | fcb := func(arg0 []byte, arg1 uint, arg2 **glib.Error, arg3 uintptr) bool { | |||
| 1170 | + | cbFn := *SaveFuncVar | |||
| 1171 | + | return cbFn(arg0, arg1, arg2, arg3) | |||
| 1172 | + | } | |||
| 1173 | + | SaveFuncVarRef = purego.NewCallback(fcb) | |||
| 1174 | + | glib.SaveCallback(SaveFuncVarPtr, SaveFuncVarRef) | |||
| 1175 | + | } | |||
| 1176 | + | ||||
| 1177 | + | cret := xPixbufSaveToCallback(x.GoPointer(), SaveFuncVarRef, UserDataVar, TypeVar, ErrorVar, varArgs...) | |||
| 1148 | return cret | 1178 | return cret | ||
| 1149 | } | 1179 | } | ||
| 1150 | 1180 | ||||
| @@ -1161,7 +1191,20 @@ var xPixbufSaveToCallbackv func(uintptr, uintptr, uintptr, string, []string, []s | |||||
| 1161 | func (x *Pixbuf) SaveToCallbackv(SaveFuncVar *PixbufSaveFunc, UserDataVar uintptr, TypeVar string, OptionKeysVar []string, OptionValuesVar []string) (bool, error) { | 1191 | func (x *Pixbuf) SaveToCallbackv(SaveFuncVar *PixbufSaveFunc, UserDataVar uintptr, TypeVar string, OptionKeysVar []string, OptionValuesVar []string) (bool, error) { | ||
| 1162 | var cerr *glib.Error | 1192 | var cerr *glib.Error | ||
| 1163 | 1193 | ||||
| 1164 | - | cret := xPixbufSaveToCallbackv(x.GoPointer(), glib.NewCallback(SaveFuncVar), UserDataVar, TypeVar, OptionKeysVar, OptionValuesVar, &cerr) | 1194 | + | SaveFuncVarPtr := uintptr(unsafe.Pointer(SaveFuncVar)) |
| 1195 | + | var SaveFuncVarRef uintptr | |||
| 1196 | + | if cbRefPtr, ok := glib.GetCallback(SaveFuncVarPtr); ok { | |||
| 1197 | + | SaveFuncVarRef = cbRefPtr | |||
| 1198 | + | } else { | |||
| 1199 | + | fcb := func(arg0 []byte, arg1 uint, arg2 **glib.Error, arg3 uintptr) bool { | |||
| 1200 | + | cbFn := *SaveFuncVar | |||
| 1201 | + | return cbFn(arg0, arg1, arg2, arg3) | |||
| 1202 | + | } | |||
| 1203 | + | SaveFuncVarRef = purego.NewCallback(fcb) | |||
| 1204 | + | glib.SaveCallback(SaveFuncVarPtr, SaveFuncVarRef) | |||
| 1205 | + | } | |||
| 1206 | + | ||||
| 1207 | + | cret := xPixbufSaveToCallbackv(x.GoPointer(), SaveFuncVarRef, UserDataVar, TypeVar, OptionKeysVar, OptionValuesVar, &cerr) | |||
| 1165 | if cerr == nil { | 1208 | if cerr == nil { | ||
| 1166 | return cret, nil | 1209 | return cret, nil | ||
| 1167 | } | 1210 | } | ||
| @@ -1201,7 +1244,22 @@ var xPixbufSaveToStreamAsync func(uintptr, uintptr, string, uintptr, uintptr, ui | |||||
| 1201 | // the operation. | 1244 | // the operation. | ||
| 1202 | func (x *Pixbuf) SaveToStreamAsync(StreamVar *gio.OutputStream, TypeVar string, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr, varArgs ...interface{}) { | 1245 | func (x *Pixbuf) SaveToStreamAsync(StreamVar *gio.OutputStream, TypeVar string, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr, varArgs ...interface{}) { | ||
| 1203 | 1246 | ||||
| 1204 | - | xPixbufSaveToStreamAsync(x.GoPointer(), StreamVar.GoPointer(), TypeVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar, varArgs...) | 1247 | + | var CallbackVarRef uintptr |
| 1248 | + | if CallbackVar != nil { | |||
| 1249 | + | CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar)) | |||
| 1250 | + | if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok { | |||
| 1251 | + | CallbackVarRef = cbRefPtr | |||
| 1252 | + | } else { | |||
| 1253 | + | fcb := func(arg0 uintptr, arg1 *AsyncResult, arg2 uintptr) { | |||
| 1254 | + | cbFn := *CallbackVar | |||
| 1255 | + | cbFn(arg0, arg1, arg2) | |||
| 1256 | + | } | |||
| 1257 | + | CallbackVarRef = purego.NewCallback(fcb) | |||
| 1258 | + | glib.SaveCallback(CallbackVarPtr, CallbackVarRef) | |||
| 1259 | + | } | |||
| 1260 | + | } | |||
| 1261 | + | ||||
| 1262 | + | xPixbufSaveToStreamAsync(x.GoPointer(), StreamVar.GoPointer(), TypeVar, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar, varArgs...) | |||
| 1205 | 1263 | ||||
| 1206 | } | 1264 | } | ||
| 1207 | 1265 | ||||
| @@ -1237,7 +1295,22 @@ var xPixbufSaveToStreamvAsync func(uintptr, uintptr, string, []string, []string, | |||||
| 1237 | // the operation. | 1295 | // the operation. | ||
| 1238 | func (x *Pixbuf) SaveToStreamvAsync(StreamVar *gio.OutputStream, TypeVar string, OptionKeysVar []string, OptionValuesVar []string, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) { | 1296 | func (x *Pixbuf) SaveToStreamvAsync(StreamVar *gio.OutputStream, TypeVar string, OptionKeysVar []string, OptionValuesVar []string, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) { | ||
| 1239 | 1297 | ||||
| 1240 | - | xPixbufSaveToStreamvAsync(x.GoPointer(), StreamVar.GoPointer(), TypeVar, OptionKeysVar, OptionValuesVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar) | 1298 | + | var CallbackVarRef uintptr |
| 1299 | + | if CallbackVar != nil { | |||
| 1300 | + | CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar)) | |||
| 1301 | + | if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok { | |||
| 1302 | + | CallbackVarRef = cbRefPtr | |||
| 1303 | + | } else { | |||
| 1304 | + | fcb := func(arg0 uintptr, arg1 *AsyncResult, arg2 uintptr) { | |||
| 1305 | + | cbFn := *CallbackVar | |||
| 1306 | + | cbFn(arg0, arg1, arg2) | |||
| 1307 | + | } | |||
| 1308 | + | CallbackVarRef = purego.NewCallback(fcb) | |||
| 1309 | + | glib.SaveCallback(CallbackVarPtr, CallbackVarRef) | |||
| 1310 | + | } | |||
| 1311 | + | } | |||
| 1312 | + | ||||
| 1313 | + | xPixbufSaveToStreamvAsync(x.GoPointer(), StreamVar.GoPointer(), TypeVar, OptionKeysVar, OptionValuesVar, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar) | |||
| 1241 | 1314 | ||||
| 1242 | } | 1315 | } | ||
| 1243 | 1316 | ||||
| @@ -1627,7 +1700,22 @@ var xPixbufGetFileInfoAsync func(string, uintptr, uintptr, uintptr) | |||||
| 1627 | // get the result of the operation. | 1700 | // get the result of the operation. | ||
| 1628 | func PixbufGetFileInfoAsync(FilenameVar string, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) { | 1701 | func PixbufGetFileInfoAsync(FilenameVar string, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) { | ||
| 1629 | 1702 | ||||
| 1630 | - | xPixbufGetFileInfoAsync(FilenameVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar) | 1703 | + | var CallbackVarRef uintptr |
| 1704 | + | if CallbackVar != nil { | |||
| 1705 | + | CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar)) | |||
| 1706 | + | if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok { | |||
| 1707 | + | CallbackVarRef = cbRefPtr | |||
| 1708 | + | } else { | |||
| 1709 | + | fcb := func(arg0 uintptr, arg1 *AsyncResult, arg2 uintptr) { | |||
| 1710 | + | cbFn := *CallbackVar | |||
| 1711 | + | cbFn(arg0, arg1, arg2) | |||
| 1712 | + | } | |||
| 1713 | + | CallbackVarRef = purego.NewCallback(fcb) | |||
| 1714 | + | glib.SaveCallback(CallbackVarPtr, CallbackVarRef) | |||
| 1715 | + | } | |||
| 1716 | + | } | |||
| 1717 | + | ||||
| 1718 | + | xPixbufGetFileInfoAsync(FilenameVar, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar) | |||
| 1631 | 1719 | ||||
| 1632 | } | 1720 | } | ||
| 1633 | 1721 | ||||
| @@ -1694,7 +1782,22 @@ var xPixbufNewFromStreamAsync func(uintptr, uintptr, uintptr, uintptr) | |||||
| 1694 | // the operation. | 1782 | // the operation. | ||
| 1695 | func PixbufNewFromStreamAsync(StreamVar *gio.InputStream, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) { | 1783 | func PixbufNewFromStreamAsync(StreamVar *gio.InputStream, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) { | ||
| 1696 | 1784 | ||||
| 1697 | - | xPixbufNewFromStreamAsync(StreamVar.GoPointer(), CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar) | 1785 | + | var CallbackVarRef uintptr |
| 1786 | + | if CallbackVar != nil { | |||
| 1787 | + | CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar)) | |||
| 1788 | + | if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok { | |||
| 1789 | + | CallbackVarRef = cbRefPtr | |||
| 1790 | + | } else { | |||
| 1791 | + | fcb := func(arg0 uintptr, arg1 *AsyncResult, arg2 uintptr) { | |||
| 1792 | + | cbFn := *CallbackVar | |||
| 1793 | + | cbFn(arg0, arg1, arg2) | |||
| 1794 | + | } | |||
| 1795 | + | CallbackVarRef = purego.NewCallback(fcb) | |||
| 1796 | + | glib.SaveCallback(CallbackVarPtr, CallbackVarRef) | |||
| 1797 | + | } | |||
| 1798 | + | } | |||
| 1799 | + | ||||
| 1800 | + | xPixbufNewFromStreamAsync(StreamVar.GoPointer(), CancellableVar.GoPointer(), CallbackVarRef, UserDataVar) | |||
| 1698 | 1801 | ||||
| 1699 | } | 1802 | } | ||
| 1700 | 1803 | ||||
| @@ -1709,7 +1812,22 @@ var xPixbufNewFromStreamAtScaleAsync func(uintptr, int, int, bool, uintptr, uint | |||||
| 1709 | // You can then call gdk_pixbuf_new_from_stream_finish() to get the result of the operation. | 1812 | // You can then call gdk_pixbuf_new_from_stream_finish() to get the result of the operation. | ||
| 1710 | func PixbufNewFromStreamAtScaleAsync(StreamVar *gio.InputStream, WidthVar int, HeightVar int, PreserveAspectRatioVar bool, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) { | 1813 | func PixbufNewFromStreamAtScaleAsync(StreamVar *gio.InputStream, WidthVar int, HeightVar int, PreserveAspectRatioVar bool, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) { | ||
| 1711 | 1814 | ||||
| 1712 | - | xPixbufNewFromStreamAtScaleAsync(StreamVar.GoPointer(), WidthVar, HeightVar, PreserveAspectRatioVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar) | 1815 | + | var CallbackVarRef uintptr |
| 1816 | + | if CallbackVar != nil { | |||
| 1817 | + | CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar)) | |||
| 1818 | + | if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok { | |||
| 1819 | + | CallbackVarRef = cbRefPtr | |||
| 1820 | + | } else { | |||
| 1821 | + | fcb := func(arg0 uintptr, arg1 *AsyncResult, arg2 uintptr) { | |||
| 1822 | + | cbFn := *CallbackVar | |||
| 1823 | + | cbFn(arg0, arg1, arg2) | |||
| 1824 | + | } | |||
| 1825 | + | CallbackVarRef = purego.NewCallback(fcb) | |||
| 1826 | + | glib.SaveCallback(CallbackVarPtr, CallbackVarRef) | |||
| 1827 | + | } | |||
| 1828 | + | } | |||
| 1829 | + | ||||
| 1830 | + | xPixbufNewFromStreamAtScaleAsync(StreamVar.GoPointer(), WidthVar, HeightVar, PreserveAspectRatioVar, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar) | |||
| 1713 | 1831 | ||||
| 1714 | } | 1832 | } | ||
| 1715 | 1833 | ||||
M v4/gio/gappinfo.go +48 -3
| @@ -1519,7 +1519,22 @@ var xAppInfoGetDefaultForTypeAsync func(string, bool, uintptr, uintptr, uintptr) | |||||
| 1519 | // type. | 1519 | // type. | ||
| 1520 | func AppInfoGetDefaultForTypeAsync(ContentTypeVar string, MustSupportUrisVar bool, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | 1520 | func AppInfoGetDefaultForTypeAsync(ContentTypeVar string, MustSupportUrisVar bool, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | ||
| 1521 | 1521 | ||||
| 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) | |||
| 1523 | 1538 | ||||
| 1524 | } | 1539 | } | ||
| 1525 | 1540 | ||||
| @@ -1575,7 +1590,22 @@ var xAppInfoGetDefaultForUriSchemeAsync func(string, uintptr, uintptr, uintptr) | |||||
| 1575 | // `ftp` or `sip`. | 1590 | // `ftp` or `sip`. | ||
| 1576 | func AppInfoGetDefaultForUriSchemeAsync(UriSchemeVar string, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | 1591 | func AppInfoGetDefaultForUriSchemeAsync(UriSchemeVar string, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | ||
| 1577 | 1592 | ||||
| 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) | |||
| 1579 | 1609 | ||||
| 1580 | } | 1610 | } | ||
| 1581 | 1611 | ||||
| @@ -1663,7 +1693,22 @@ var xAppInfoLaunchDefaultForUriAsync func(string, uintptr, uintptr, uintptr, uin | |||||
| 1663 | // in receiving error information from their activation. | 1693 | // in receiving error information from their activation. | ||
| 1664 | func AppInfoLaunchDefaultForUriAsync(UriVar string, ContextVar *AppLaunchContext, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | 1694 | func AppInfoLaunchDefaultForUriAsync(UriVar string, ContextVar *AppLaunchContext, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | ||
| 1665 | 1695 | ||||
| 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) | |||
| 1667 | 1712 | ||||
| 1668 | } | 1713 | } | ||
| 1669 | 1714 | ||||
M v4/gio/gasyncinitable.go +16 -1
| @@ -306,7 +306,22 @@ var xAsyncInitableNewvAsync func(types.GType, uint, *gobject.Parameter, int, uin | |||||
| 306 | // for any errors. | 306 | // for any errors. | ||
| 307 | func AsyncInitableNewvAsync(ObjectTypeVar types.GType, NParametersVar uint, ParametersVar *gobject.Parameter, IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | 307 | func AsyncInitableNewvAsync(ObjectTypeVar types.GType, NParametersVar uint, ParametersVar *gobject.Parameter, IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | ||
| 308 | 308 | ||||
| 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) | |||
| 310 | 325 | ||||
| 311 | } | 326 | } | ||
| 312 | 327 | ||||
M v4/gio/gbufferedinputstream.go +16 -1
| @@ -341,7 +341,22 @@ var xBufferedInputStreamFillAsync func(uintptr, int, int, uintptr, uintptr, uint | |||||
| 341 | // of bytes that are required to fill the buffer. | 341 | // of bytes that are required to fill the buffer. | ||
| 342 | func (x *BufferedInputStream) FillAsync(CountVar int, IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | 342 | func (x *BufferedInputStream) FillAsync(CountVar int, IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | ||
| 343 | 343 | ||||
| 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) | |||
| 345 | 360 | ||||
| 346 | } | 361 | } | ||
| 347 | 362 | ||||
M v4/gio/gcancellable.go +29 -1
| @@ -290,7 +290,35 @@ var xCancellableConnect func(uintptr, uintptr, uintptr, uintptr) uint32 | |||||
| 290 | // - [method@Gio.Cancellable.release_fd] | 290 | // - [method@Gio.Cancellable.release_fd] | ||
| 291 | func (x *Cancellable) Connect(CallbackVar *gobject.Callback, DataVar uintptr, DataDestroyFuncVar *glib.DestroyNotify) uint32 { | 291 | func (x *Cancellable) Connect(CallbackVar *gobject.Callback, DataVar uintptr, DataDestroyFuncVar *glib.DestroyNotify) uint32 { | ||
| 292 | 292 | ||||
| 293 | - | cret := xCancellableConnect(x.GoPointer(), glib.NewCallback(CallbackVar), DataVar, glib.NewCallbackNullable(DataDestroyFuncVar)) | 293 | + | CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar)) |
| 294 | + | var CallbackVarRef uintptr | |||
| 295 | + | if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok { | |||
| 296 | + | CallbackVarRef = cbRefPtr | |||
| 297 | + | } else { | |||
| 298 | + | fcb := func() { | |||
| 299 | + | cbFn := *CallbackVar | |||
| 300 | + | cbFn() | |||
| 301 | + | } | |||
| 302 | + | CallbackVarRef = purego.NewCallback(fcb) | |||
| 303 | + | glib.SaveCallback(CallbackVarPtr, CallbackVarRef) | |||
| 304 | + | } | |||
| 305 | + | ||||
| 306 | + | var DataDestroyFuncVarRef uintptr | |||
| 307 | + | if DataDestroyFuncVar != nil { | |||
| 308 | + | DataDestroyFuncVarPtr := uintptr(unsafe.Pointer(DataDestroyFuncVar)) | |||
| 309 | + | if cbRefPtr, ok := glib.GetCallback(DataDestroyFuncVarPtr); ok { | |||
| 310 | + | DataDestroyFuncVarRef = cbRefPtr | |||
| 311 | + | } else { | |||
| 312 | + | fcb := func(arg0 uintptr) { | |||
| 313 | + | cbFn := *DataDestroyFuncVar | |||
| 314 | + | cbFn(arg0) | |||
| 315 | + | } | |||
| 316 | + | DataDestroyFuncVarRef = purego.NewCallback(fcb) | |||
| 317 | + | glib.SaveCallback(DataDestroyFuncVarPtr, DataDestroyFuncVarRef) | |||
| 318 | + | } | |||
| 319 | + | } | |||
| 320 | + | ||||
| 321 | + | cret := xCancellableConnect(x.GoPointer(), CallbackVarRef, DataVar, DataDestroyFuncVarRef) | |||
| 294 | return cret | 322 | return cret | ||
| 295 | } | 323 | } | ||
| 296 | 324 | ||||
M v4/gio/gdatainputstream.go +48 -3
| @@ -309,7 +309,22 @@ var xDataInputStreamReadLineAsync func(uintptr, int, uintptr, uintptr, uintptr) | |||||
| 309 | // the result of the operation. | 309 | // the result of the operation. | ||
| 310 | func (x *DataInputStream) ReadLineAsync(IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | 310 | func (x *DataInputStream) ReadLineAsync(IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | ||
| 311 | 311 | ||||
| 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) | |||
| 313 | 328 | ||||
| 314 | } | 329 | } | ||
| 315 | 330 | ||||
| @@ -465,7 +480,22 @@ var xDataInputStreamReadUntilAsync func(uintptr, string, int, uintptr, uintptr, | |||||
| 465 | // g_data_input_stream_read_upto_async() instead. | 480 | // g_data_input_stream_read_upto_async() instead. | ||
| 466 | func (x *DataInputStream) ReadUntilAsync(StopCharsVar string, IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | 481 | func (x *DataInputStream) ReadUntilAsync(StopCharsVar string, IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | ||
| 467 | 482 | ||||
| 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) | |||
| 469 | 499 | ||||
| 470 | } | 500 | } | ||
| 471 | 501 | ||||
| @@ -527,7 +557,22 @@ var xDataInputStreamReadUptoAsync func(uintptr, string, int, int, uintptr, uintp | |||||
| 527 | // the result of the operation. | 557 | // the result of the operation. | ||
| 528 | func (x *DataInputStream) ReadUptoAsync(StopCharsVar string, StopCharsLenVar int, IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | 558 | func (x *DataInputStream) ReadUptoAsync(StopCharsVar string, StopCharsLenVar int, IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | ||
| 529 | 559 | ||||
| 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) | |||
| 531 | 576 | ||||
| 532 | } | 577 | } | ||
| 533 | 578 | ||||
M v4/gio/gdbusaddress.go +18 -1
| @@ -2,6 +2,8 @@ | |||||
| 2 | package gio | 2 | package gio | ||
| 3 | 3 | ||||
| 4 | import ( | 4 | import ( | ||
| 5 | + | "unsafe" | |||
| 6 | + | ||||
| 5 | "github.com/jwijenbergh/purego" | 7 | "github.com/jwijenbergh/purego" | ||
| 6 | "github.com/jwijenbergh/puregotk/pkg/core" | 8 | "github.com/jwijenbergh/puregotk/pkg/core" | ||
| 7 | "github.com/jwijenbergh/puregotk/v4/glib" | 9 | "github.com/jwijenbergh/puregotk/v4/glib" | ||
| @@ -56,7 +58,22 @@ var xDbusAddressGetStream func(string, uintptr, uintptr, uintptr) | |||||
| 56 | // g_dbus_address_get_stream_sync() for the synchronous version. | 58 | // g_dbus_address_get_stream_sync() for the synchronous version. | ||
| 57 | func DbusAddressGetStream(AddressVar string, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | 59 | func DbusAddressGetStream(AddressVar string, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | ||
| 58 | 60 | ||||
| 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) | |||
| 60 | 77 | ||||
| 61 | } | 78 | } | ||
| 62 | 79 | ||||
M v4/gio/gdbusconnection.go +212 -12
| @@ -225,7 +225,22 @@ var xBusGet func(BusType, uintptr, uintptr, uintptr) | |||||
| 225 | // the synchronous version. | 225 | // the synchronous version. | ||
| 226 | func BusGet(BusTypeVar BusType, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | 226 | func BusGet(BusTypeVar BusType, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | ||
| 227 | 227 | ||||
| 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) | |||
| 229 | 244 | ||||
| 230 | } | 245 | } | ||
| 231 | 246 | ||||
| @@ -512,7 +527,33 @@ var xDBusConnectionAddFilter func(uintptr, uintptr, uintptr, uintptr) uint | |||||
| 512 | // destroyed.) | 527 | // destroyed.) | ||
| 513 | func (x *DBusConnection) AddFilter(FilterFunctionVar *DBusMessageFilterFunction, UserDataVar uintptr, UserDataFreeFuncVar *glib.DestroyNotify) uint { | 528 | func (x *DBusConnection) AddFilter(FilterFunctionVar *DBusMessageFilterFunction, UserDataVar uintptr, UserDataFreeFuncVar *glib.DestroyNotify) uint { | ||
| 514 | 529 | ||||
| 515 | - | cret := xDBusConnectionAddFilter(x.GoPointer(), glib.NewCallback(FilterFunctionVar), UserDataVar, glib.NewCallback(UserDataFreeFuncVar)) | 530 | + | FilterFunctionVarPtr := uintptr(unsafe.Pointer(FilterFunctionVar)) |
| 531 | + | var FilterFunctionVarRef uintptr | |||
| 532 | + | if cbRefPtr, ok := glib.GetCallback(FilterFunctionVarPtr); ok { | |||
| 533 | + | FilterFunctionVarRef = cbRefPtr | |||
| 534 | + | } else { | |||
| 535 | + | fcb := func(arg0 uintptr, arg1 uintptr, arg2 bool, arg3 uintptr) uintptr { | |||
| 536 | + | cbFn := *FilterFunctionVar | |||
| 537 | + | return cbFn(arg0, arg1, arg2, arg3) | |||
| 538 | + | } | |||
| 539 | + | FilterFunctionVarRef = purego.NewCallback(fcb) | |||
| 540 | + | glib.SaveCallback(FilterFunctionVarPtr, FilterFunctionVarRef) | |||
| 541 | + | } | |||
| 542 | + | ||||
| 543 | + | UserDataFreeFuncVarPtr := uintptr(unsafe.Pointer(UserDataFreeFuncVar)) | |||
| 544 | + | var UserDataFreeFuncVarRef uintptr | |||
| 545 | + | if cbRefPtr, ok := glib.GetCallback(UserDataFreeFuncVarPtr); ok { | |||
| 546 | + | UserDataFreeFuncVarRef = cbRefPtr | |||
| 547 | + | } else { | |||
| 548 | + | fcb := func(arg0 uintptr) { | |||
| 549 | + | cbFn := *UserDataFreeFuncVar | |||
| 550 | + | cbFn(arg0) | |||
| 551 | + | } | |||
| 552 | + | UserDataFreeFuncVarRef = purego.NewCallback(fcb) | |||
| 553 | + | glib.SaveCallback(UserDataFreeFuncVarPtr, UserDataFreeFuncVarRef) | |||
| 554 | + | } | |||
| 555 | + | ||||
| 556 | + | cret := xDBusConnectionAddFilter(x.GoPointer(), FilterFunctionVarRef, UserDataVar, UserDataFreeFuncVarRef) | |||
| 516 | return cret | 557 | return cret | ||
| 517 | } | 558 | } | ||
| 518 | 559 | ||||
| @@ -567,7 +608,22 @@ var xDBusConnectionCall func(uintptr, string, string, string, string, *glib.Vari | |||||
| 567 | // the %G_DBUS_MESSAGE_FLAGS_NO_REPLY_EXPECTED flag set. | 608 | // 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) { | 609 | 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) { | ||
| 569 | 610 | ||||
| 570 | - | xDBusConnectionCall(x.GoPointer(), BusNameVar, ObjectPathVar, InterfaceNameVar, MethodNameVar, ParametersVar, ReplyTypeVar, FlagsVar, TimeoutMsecVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar) | 611 | + | var CallbackVarRef uintptr |
| 612 | + | if CallbackVar != nil { | |||
| 613 | + | CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar)) | |||
| 614 | + | if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok { | |||
| 615 | + | CallbackVarRef = cbRefPtr | |||
| 616 | + | } else { | |||
| 617 | + | fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) { | |||
| 618 | + | cbFn := *CallbackVar | |||
| 619 | + | cbFn(arg0, arg1, arg2) | |||
| 620 | + | } | |||
| 621 | + | CallbackVarRef = purego.NewCallback(fcb) | |||
| 622 | + | glib.SaveCallback(CallbackVarPtr, CallbackVarRef) | |||
| 623 | + | } | |||
| 624 | + | } | |||
| 625 | + | ||||
| 626 | + | xDBusConnectionCall(x.GoPointer(), BusNameVar, ObjectPathVar, InterfaceNameVar, MethodNameVar, ParametersVar, ReplyTypeVar, FlagsVar, TimeoutMsecVar, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar) | |||
| 571 | 627 | ||||
| 572 | } | 628 | } | ||
| 573 | 629 | ||||
| @@ -655,7 +711,22 @@ var xDBusConnectionCallWithUnixFdList func(uintptr, string, string, string, stri | |||||
| 655 | // This method is only available on UNIX. | 711 | // 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) { | 712 | 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) { | ||
| 657 | 713 | ||||
| 658 | - | xDBusConnectionCallWithUnixFdList(x.GoPointer(), BusNameVar, ObjectPathVar, InterfaceNameVar, MethodNameVar, ParametersVar, ReplyTypeVar, FlagsVar, TimeoutMsecVar, FdListVar.GoPointer(), CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar) | 714 | + | var CallbackVarRef uintptr |
| 715 | + | if CallbackVar != nil { | |||
| 716 | + | CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar)) | |||
| 717 | + | if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok { | |||
| 718 | + | CallbackVarRef = cbRefPtr | |||
| 719 | + | } else { | |||
| 720 | + | fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) { | |||
| 721 | + | cbFn := *CallbackVar | |||
| 722 | + | cbFn(arg0, arg1, arg2) | |||
| 723 | + | } | |||
| 724 | + | CallbackVarRef = purego.NewCallback(fcb) | |||
| 725 | + | glib.SaveCallback(CallbackVarPtr, CallbackVarRef) | |||
| 726 | + | } | |||
| 727 | + | } | |||
| 728 | + | ||||
| 729 | + | xDBusConnectionCallWithUnixFdList(x.GoPointer(), BusNameVar, ObjectPathVar, InterfaceNameVar, MethodNameVar, ParametersVar, ReplyTypeVar, FlagsVar, TimeoutMsecVar, FdListVar.GoPointer(), CancellableVar.GoPointer(), CallbackVarRef, UserDataVar) | |||
| 659 | 730 | ||||
| 660 | } | 731 | } | ||
| 661 | 732 | ||||
| @@ -730,7 +801,22 @@ var xDBusConnectionClose func(uintptr, uintptr, uintptr, uintptr) | |||||
| 730 | // version. | 801 | // version. | ||
| 731 | func (x *DBusConnection) Close(CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | 802 | func (x *DBusConnection) Close(CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | ||
| 732 | 803 | ||||
| 733 | - | xDBusConnectionClose(x.GoPointer(), CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar) | 804 | + | var CallbackVarRef uintptr |
| 805 | + | if CallbackVar != nil { | |||
| 806 | + | CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar)) | |||
| 807 | + | if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok { | |||
| 808 | + | CallbackVarRef = cbRefPtr | |||
| 809 | + | } else { | |||
| 810 | + | fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) { | |||
| 811 | + | cbFn := *CallbackVar | |||
| 812 | + | cbFn(arg0, arg1, arg2) | |||
| 813 | + | } | |||
| 814 | + | CallbackVarRef = purego.NewCallback(fcb) | |||
| 815 | + | glib.SaveCallback(CallbackVarPtr, CallbackVarRef) | |||
| 816 | + | } | |||
| 817 | + | } | |||
| 818 | + | ||||
| 819 | + | xDBusConnectionClose(x.GoPointer(), CancellableVar.GoPointer(), CallbackVarRef, UserDataVar) | |||
| 734 | 820 | ||||
| 735 | } | 821 | } | ||
| 736 | 822 | ||||
| @@ -866,7 +952,22 @@ var xDBusConnectionFlush func(uintptr, uintptr, uintptr, uintptr) | |||||
| 866 | // version. | 952 | // version. | ||
| 867 | func (x *DBusConnection) Flush(CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | 953 | func (x *DBusConnection) Flush(CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | ||
| 868 | 954 | ||||
| 869 | - | xDBusConnectionFlush(x.GoPointer(), CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar) | 955 | + | var CallbackVarRef uintptr |
| 956 | + | if CallbackVar != nil { | |||
| 957 | + | CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar)) | |||
| 958 | + | if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok { | |||
| 959 | + | CallbackVarRef = cbRefPtr | |||
| 960 | + | } else { | |||
| 961 | + | fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) { | |||
| 962 | + | cbFn := *CallbackVar | |||
| 963 | + | cbFn(arg0, arg1, arg2) | |||
| 964 | + | } | |||
| 965 | + | CallbackVarRef = purego.NewCallback(fcb) | |||
| 966 | + | glib.SaveCallback(CallbackVarPtr, CallbackVarRef) | |||
| 967 | + | } | |||
| 968 | + | } | |||
| 969 | + | ||||
| 970 | + | xDBusConnectionFlush(x.GoPointer(), CancellableVar.GoPointer(), CallbackVarRef, UserDataVar) | |||
| 870 | 971 | ||||
| 871 | } | 972 | } | ||
| 872 | 973 | ||||
| @@ -1063,7 +1164,20 @@ var xDBusConnectionRegisterObject func(uintptr, string, *DBusInterfaceInfo, *DBu | |||||
| 1063 | func (x *DBusConnection) RegisterObject(ObjectPathVar string, InterfaceInfoVar *DBusInterfaceInfo, VtableVar *DBusInterfaceVTable, UserDataVar uintptr, UserDataFreeFuncVar *glib.DestroyNotify) (uint, error) { | 1164 | func (x *DBusConnection) RegisterObject(ObjectPathVar string, InterfaceInfoVar *DBusInterfaceInfo, VtableVar *DBusInterfaceVTable, UserDataVar uintptr, UserDataFreeFuncVar *glib.DestroyNotify) (uint, error) { | ||
| 1064 | var cerr *glib.Error | 1165 | var cerr *glib.Error | ||
| 1065 | 1166 | ||||
| 1066 | - | cret := xDBusConnectionRegisterObject(x.GoPointer(), ObjectPathVar, InterfaceInfoVar, VtableVar, UserDataVar, glib.NewCallback(UserDataFreeFuncVar), &cerr) | 1167 | + | UserDataFreeFuncVarPtr := uintptr(unsafe.Pointer(UserDataFreeFuncVar)) |
| 1168 | + | var UserDataFreeFuncVarRef uintptr | |||
| 1169 | + | if cbRefPtr, ok := glib.GetCallback(UserDataFreeFuncVarPtr); ok { | |||
| 1170 | + | UserDataFreeFuncVarRef = cbRefPtr | |||
| 1171 | + | } else { | |||
| 1172 | + | fcb := func(arg0 uintptr) { | |||
| 1173 | + | cbFn := *UserDataFreeFuncVar | |||
| 1174 | + | cbFn(arg0) | |||
| 1175 | + | } | |||
| 1176 | + | UserDataFreeFuncVarRef = purego.NewCallback(fcb) | |||
| 1177 | + | glib.SaveCallback(UserDataFreeFuncVarPtr, UserDataFreeFuncVarRef) | |||
| 1178 | + | } | |||
| 1179 | + | ||||
| 1180 | + | cret := xDBusConnectionRegisterObject(x.GoPointer(), ObjectPathVar, InterfaceInfoVar, VtableVar, UserDataVar, UserDataFreeFuncVarRef, &cerr) | |||
| 1067 | if cerr == nil { | 1181 | if cerr == nil { | ||
| 1068 | return cret, nil | 1182 | return cret, nil | ||
| 1069 | } | 1183 | } | ||
| @@ -1155,7 +1269,20 @@ var xDBusConnectionRegisterSubtree func(uintptr, string, *DBusSubtreeVTable, DBu | |||||
| 1155 | func (x *DBusConnection) RegisterSubtree(ObjectPathVar string, VtableVar *DBusSubtreeVTable, FlagsVar DBusSubtreeFlags, UserDataVar uintptr, UserDataFreeFuncVar *glib.DestroyNotify) (uint, error) { | 1269 | func (x *DBusConnection) RegisterSubtree(ObjectPathVar string, VtableVar *DBusSubtreeVTable, FlagsVar DBusSubtreeFlags, UserDataVar uintptr, UserDataFreeFuncVar *glib.DestroyNotify) (uint, error) { | ||
| 1156 | var cerr *glib.Error | 1270 | var cerr *glib.Error | ||
| 1157 | 1271 | ||||
| 1158 | - | cret := xDBusConnectionRegisterSubtree(x.GoPointer(), ObjectPathVar, VtableVar, FlagsVar, UserDataVar, glib.NewCallback(UserDataFreeFuncVar), &cerr) | 1272 | + | UserDataFreeFuncVarPtr := uintptr(unsafe.Pointer(UserDataFreeFuncVar)) |
| 1273 | + | var UserDataFreeFuncVarRef uintptr | |||
| 1274 | + | if cbRefPtr, ok := glib.GetCallback(UserDataFreeFuncVarPtr); ok { | |||
| 1275 | + | UserDataFreeFuncVarRef = cbRefPtr | |||
| 1276 | + | } else { | |||
| 1277 | + | fcb := func(arg0 uintptr) { | |||
| 1278 | + | cbFn := *UserDataFreeFuncVar | |||
| 1279 | + | cbFn(arg0) | |||
| 1280 | + | } | |||
| 1281 | + | UserDataFreeFuncVarRef = purego.NewCallback(fcb) | |||
| 1282 | + | glib.SaveCallback(UserDataFreeFuncVarPtr, UserDataFreeFuncVarRef) | |||
| 1283 | + | } | |||
| 1284 | + | ||||
| 1285 | + | cret := xDBusConnectionRegisterSubtree(x.GoPointer(), ObjectPathVar, VtableVar, FlagsVar, UserDataVar, UserDataFreeFuncVarRef, &cerr) | |||
| 1159 | if cerr == nil { | 1286 | if cerr == nil { | ||
| 1160 | return cret, nil | 1287 | return cret, nil | ||
| 1161 | } | 1288 | } | ||
| @@ -1248,7 +1375,22 @@ var xDBusConnectionSendMessageWithReply func(uintptr, uintptr, DBusSendMessageFl | |||||
| 1248 | // UNIX file descriptors. | 1375 | // UNIX file descriptors. | ||
| 1249 | func (x *DBusConnection) SendMessageWithReply(MessageVar *DBusMessage, FlagsVar DBusSendMessageFlags, TimeoutMsecVar int, OutSerialVar *uint32, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | 1376 | func (x *DBusConnection) SendMessageWithReply(MessageVar *DBusMessage, FlagsVar DBusSendMessageFlags, TimeoutMsecVar int, OutSerialVar *uint32, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | ||
| 1250 | 1377 | ||||
| 1251 | - | xDBusConnectionSendMessageWithReply(x.GoPointer(), MessageVar.GoPointer(), FlagsVar, TimeoutMsecVar, OutSerialVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar) | 1378 | + | var CallbackVarRef uintptr |
| 1379 | + | if CallbackVar != nil { | |||
| 1380 | + | CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar)) | |||
| 1381 | + | if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok { | |||
| 1382 | + | CallbackVarRef = cbRefPtr | |||
| 1383 | + | } else { | |||
| 1384 | + | fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) { | |||
| 1385 | + | cbFn := *CallbackVar | |||
| 1386 | + | cbFn(arg0, arg1, arg2) | |||
| 1387 | + | } | |||
| 1388 | + | CallbackVarRef = purego.NewCallback(fcb) | |||
| 1389 | + | glib.SaveCallback(CallbackVarPtr, CallbackVarRef) | |||
| 1390 | + | } | |||
| 1391 | + | } | |||
| 1392 | + | ||||
| 1393 | + | xDBusConnectionSendMessageWithReply(x.GoPointer(), MessageVar.GoPointer(), FlagsVar, TimeoutMsecVar, OutSerialVar, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar) | |||
| 1252 | 1394 | ||||
| 1253 | } | 1395 | } | ||
| 1254 | 1396 | ||||
| @@ -1405,7 +1547,35 @@ var xDBusConnectionSignalSubscribe func(uintptr, string, string, string, string, | |||||
| 1405 | // This function can never fail. | 1547 | // 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 { | 1548 | func (x *DBusConnection) SignalSubscribe(SenderVar string, InterfaceNameVar string, MemberVar string, ObjectPathVar string, Arg0Var string, FlagsVar DBusSignalFlags, CallbackVar *DBusSignalCallback, UserDataVar uintptr, UserDataFreeFuncVar *glib.DestroyNotify) uint { | ||
| 1407 | 1549 | ||||
| 1408 | - | cret := xDBusConnectionSignalSubscribe(x.GoPointer(), SenderVar, InterfaceNameVar, MemberVar, ObjectPathVar, Arg0Var, FlagsVar, glib.NewCallback(CallbackVar), UserDataVar, glib.NewCallbackNullable(UserDataFreeFuncVar)) | 1550 | + | CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar)) |
| 1551 | + | var CallbackVarRef uintptr | |||
| 1552 | + | if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok { | |||
| 1553 | + | CallbackVarRef = cbRefPtr | |||
| 1554 | + | } else { | |||
| 1555 | + | fcb := func(arg0 uintptr, arg1 string, arg2 string, arg3 string, arg4 string, arg5 *glib.Variant, arg6 uintptr) { | |||
| 1556 | + | cbFn := *CallbackVar | |||
| 1557 | + | cbFn(arg0, arg1, arg2, arg3, arg4, arg5, arg6) | |||
| 1558 | + | } | |||
| 1559 | + | CallbackVarRef = purego.NewCallback(fcb) | |||
| 1560 | + | glib.SaveCallback(CallbackVarPtr, CallbackVarRef) | |||
| 1561 | + | } | |||
| 1562 | + | ||||
| 1563 | + | var UserDataFreeFuncVarRef uintptr | |||
| 1564 | + | if UserDataFreeFuncVar != nil { | |||
| 1565 | + | UserDataFreeFuncVarPtr := uintptr(unsafe.Pointer(UserDataFreeFuncVar)) | |||
| 1566 | + | if cbRefPtr, ok := glib.GetCallback(UserDataFreeFuncVarPtr); ok { | |||
| 1567 | + | UserDataFreeFuncVarRef = cbRefPtr | |||
| 1568 | + | } else { | |||
| 1569 | + | fcb := func(arg0 uintptr) { | |||
| 1570 | + | cbFn := *UserDataFreeFuncVar | |||
| 1571 | + | cbFn(arg0) | |||
| 1572 | + | } | |||
| 1573 | + | UserDataFreeFuncVarRef = purego.NewCallback(fcb) | |||
| 1574 | + | glib.SaveCallback(UserDataFreeFuncVarPtr, UserDataFreeFuncVarRef) | |||
| 1575 | + | } | |||
| 1576 | + | } | |||
| 1577 | + | ||||
| 1578 | + | cret := xDBusConnectionSignalSubscribe(x.GoPointer(), SenderVar, InterfaceNameVar, MemberVar, ObjectPathVar, Arg0Var, FlagsVar, CallbackVarRef, UserDataVar, UserDataFreeFuncVarRef) | |||
| 1409 | return cret | 1579 | return cret | ||
| 1410 | } | 1580 | } | ||
| 1411 | 1581 | ||||
| @@ -1794,7 +1964,22 @@ var xDBusConnectionNew func(uintptr, string, DBusConnectionFlags, uintptr, uintp | |||||
| 1794 | // version. | 1964 | // version. | ||
| 1795 | func DBusConnectionNew(StreamVar *IOStream, GuidVar string, FlagsVar DBusConnectionFlags, ObserverVar *DBusAuthObserver, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | 1965 | func DBusConnectionNew(StreamVar *IOStream, GuidVar string, FlagsVar DBusConnectionFlags, ObserverVar *DBusAuthObserver, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | ||
| 1796 | 1966 | ||||
| 1797 | - | xDBusConnectionNew(StreamVar.GoPointer(), GuidVar, FlagsVar, ObserverVar.GoPointer(), CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar) | 1967 | + | var CallbackVarRef uintptr |
| 1968 | + | if CallbackVar != nil { | |||
| 1969 | + | CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar)) | |||
| 1970 | + | if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok { | |||
| 1971 | + | CallbackVarRef = cbRefPtr | |||
| 1972 | + | } else { | |||
| 1973 | + | fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) { | |||
| 1974 | + | cbFn := *CallbackVar | |||
| 1975 | + | cbFn(arg0, arg1, arg2) | |||
| 1976 | + | } | |||
| 1977 | + | CallbackVarRef = purego.NewCallback(fcb) | |||
| 1978 | + | glib.SaveCallback(CallbackVarPtr, CallbackVarRef) | |||
| 1979 | + | } | |||
| 1980 | + | } | |||
| 1981 | + | ||||
| 1982 | + | xDBusConnectionNew(StreamVar.GoPointer(), GuidVar, FlagsVar, ObserverVar.GoPointer(), CancellableVar.GoPointer(), CallbackVarRef, UserDataVar) | |||
| 1798 | 1983 | ||||
| 1799 | } | 1984 | } | ||
| 1800 | 1985 | ||||
| @@ -1824,7 +2009,22 @@ var xDBusConnectionNewForAddress func(string, DBusConnectionFlags, uintptr, uint | |||||
| 1824 | // version. | 2009 | // version. | ||
| 1825 | func DBusConnectionNewForAddress(AddressVar string, FlagsVar DBusConnectionFlags, ObserverVar *DBusAuthObserver, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | 2010 | func DBusConnectionNewForAddress(AddressVar string, FlagsVar DBusConnectionFlags, ObserverVar *DBusAuthObserver, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | ||
| 1826 | 2011 | ||||
| 1827 | - | xDBusConnectionNewForAddress(AddressVar, FlagsVar, ObserverVar.GoPointer(), CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar) | 2012 | + | var CallbackVarRef uintptr |
| 2013 | + | if CallbackVar != nil { | |||
| 2014 | + | CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar)) | |||
| 2015 | + | if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok { | |||
| 2016 | + | CallbackVarRef = cbRefPtr | |||
| 2017 | + | } else { | |||
| 2018 | + | fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) { | |||
| 2019 | + | cbFn := *CallbackVar | |||
| 2020 | + | cbFn(arg0, arg1, arg2) | |||
| 2021 | + | } | |||
| 2022 | + | CallbackVarRef = purego.NewCallback(fcb) | |||
| 2023 | + | glib.SaveCallback(CallbackVarPtr, CallbackVarRef) | |||
| 2024 | + | } | |||
| 2025 | + | } | |||
| 2026 | + | ||||
| 2027 | + | xDBusConnectionNewForAddress(AddressVar, FlagsVar, ObserverVar.GoPointer(), CancellableVar.GoPointer(), CallbackVarRef, UserDataVar) | |||
| 1828 | 2028 | ||||
| 1829 | } | 2029 | } | ||
| 1830 | 2030 | ||||
M v4/gio/gdbusnameowning.go +109 -2
| @@ -2,6 +2,8 @@ | |||||
| 2 | package gio | 2 | package gio | ||
| 3 | 3 | ||||
| 4 | import ( | 4 | import ( | ||
| 5 | + | "unsafe" | |||
| 6 | + | ||||
| 5 | "github.com/jwijenbergh/purego" | 7 | "github.com/jwijenbergh/purego" | ||
| 6 | "github.com/jwijenbergh/puregotk/pkg/core" | 8 | "github.com/jwijenbergh/puregotk/pkg/core" | ||
| 7 | "github.com/jwijenbergh/puregotk/v4/glib" | 9 | "github.com/jwijenbergh/puregotk/v4/glib" | ||
| @@ -71,7 +73,67 @@ var xBusOwnName func(BusType, string, BusNameOwnerFlags, uintptr, uintptr, uintp | |||||
| 71 | // unregister the objects (if any) in @name_lost_handler. | 73 | // unregister the objects (if any) in @name_lost_handler. | ||
| 72 | func BusOwnName(BusTypeVar BusType, NameVar string, FlagsVar BusNameOwnerFlags, BusAcquiredHandlerVar *BusAcquiredCallback, NameAcquiredHandlerVar *BusNameAcquiredCallback, NameLostHandlerVar *BusNameLostCallback, UserDataVar uintptr, UserDataFreeFuncVar *glib.DestroyNotify) uint { | 74 | func BusOwnName(BusTypeVar BusType, NameVar string, FlagsVar BusNameOwnerFlags, BusAcquiredHandlerVar *BusAcquiredCallback, NameAcquiredHandlerVar *BusNameAcquiredCallback, NameLostHandlerVar *BusNameLostCallback, UserDataVar uintptr, UserDataFreeFuncVar *glib.DestroyNotify) uint { | ||
| 73 | 75 | ||||
| 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) | |||
| 75 | return cret | 137 | return cret | ||
| 76 | } | 138 | } | ||
| 77 | 139 | ||||
| @@ -81,7 +143,52 @@ var xBusOwnNameOnConnection func(uintptr, string, BusNameOwnerFlags, uintptr, ui | |||||
| 81 | // of a [enum@Gio.BusType]. | 143 | // of a [enum@Gio.BusType]. | ||
| 82 | func BusOwnNameOnConnection(ConnectionVar *DBusConnection, NameVar string, FlagsVar BusNameOwnerFlags, NameAcquiredHandlerVar *BusNameAcquiredCallback, NameLostHandlerVar *BusNameLostCallback, UserDataVar uintptr, UserDataFreeFuncVar *glib.DestroyNotify) uint { | 144 | func BusOwnNameOnConnection(ConnectionVar *DBusConnection, NameVar string, FlagsVar BusNameOwnerFlags, NameAcquiredHandlerVar *BusNameAcquiredCallback, NameLostHandlerVar *BusNameLostCallback, UserDataVar uintptr, UserDataFreeFuncVar *glib.DestroyNotify) uint { | ||
| 83 | 145 | ||||
| 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) | |||
| 85 | return cret | 192 | return cret | ||
| 86 | } | 193 | } | ||
| 87 | 194 | ||||
M v4/gio/gdbusnamewatching.go +94 -2
| @@ -2,6 +2,8 @@ | |||||
| 2 | package gio | 2 | package gio | ||
| 3 | 3 | ||||
| 4 | import ( | 4 | import ( | ||
| 5 | + | "unsafe" | |||
| 6 | + | ||||
| 5 | "github.com/jwijenbergh/purego" | 7 | "github.com/jwijenbergh/purego" | ||
| 6 | "github.com/jwijenbergh/puregotk/pkg/core" | 8 | "github.com/jwijenbergh/puregotk/pkg/core" | ||
| 7 | "github.com/jwijenbergh/puregotk/v4/glib" | 9 | "github.com/jwijenbergh/puregotk/v4/glib" | ||
| @@ -67,7 +69,52 @@ var xBusWatchName func(BusType, string, BusNameWatcherFlags, uintptr, uintptr, u | |||||
| 67 | // @name_vanished_handler. | 69 | // @name_vanished_handler. | ||
| 68 | func BusWatchName(BusTypeVar BusType, NameVar string, FlagsVar BusNameWatcherFlags, NameAppearedHandlerVar *BusNameAppearedCallback, NameVanishedHandlerVar *BusNameVanishedCallback, UserDataVar uintptr, UserDataFreeFuncVar *glib.DestroyNotify) uint { | 70 | func BusWatchName(BusTypeVar BusType, NameVar string, FlagsVar BusNameWatcherFlags, NameAppearedHandlerVar *BusNameAppearedCallback, NameVanishedHandlerVar *BusNameVanishedCallback, UserDataVar uintptr, UserDataFreeFuncVar *glib.DestroyNotify) uint { | ||
| 69 | 71 | ||||
| 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) | |||
| 71 | return cret | 118 | return cret | ||
| 72 | } | 119 | } | ||
| 73 | 120 | ||||
| @@ -77,7 +124,52 @@ var xBusWatchNameOnConnection func(uintptr, string, BusNameWatcherFlags, uintptr | |||||
| 77 | // #GBusType. | 124 | // #GBusType. | ||
| 78 | func BusWatchNameOnConnection(ConnectionVar *DBusConnection, NameVar string, FlagsVar BusNameWatcherFlags, NameAppearedHandlerVar *BusNameAppearedCallback, NameVanishedHandlerVar *BusNameVanishedCallback, UserDataVar uintptr, UserDataFreeFuncVar *glib.DestroyNotify) uint { | 125 | func BusWatchNameOnConnection(ConnectionVar *DBusConnection, NameVar string, FlagsVar BusNameWatcherFlags, NameAppearedHandlerVar *BusNameAppearedCallback, NameVanishedHandlerVar *BusNameVanishedCallback, UserDataVar uintptr, UserDataFreeFuncVar *glib.DestroyNotify) uint { | ||
| 79 | 126 | ||||
| 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) | |||
| 81 | return cret | 173 | return cret | ||
| 82 | } | 174 | } | ||
| 83 | 175 | ||||
M v4/gio/gdbusobjectmanagerclient.go +154 -4
| @@ -235,7 +235,37 @@ func NewDBusObjectManagerClientForBusSync(BusTypeVar BusType, FlagsVar DBusObjec | |||||
| 235 | var cls *DBusObjectManagerClient | 235 | var cls *DBusObjectManagerClient | ||
| 236 | var cerr *glib.Error | 236 | var cerr *glib.Error | ||
| 237 | 237 | ||||
| 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) | |||
| 239 | 269 | ||||
| 240 | if cret == 0 { | 270 | if cret == 0 { | ||
| 241 | return nil, cerr | 271 | return nil, cerr | ||
| @@ -260,7 +290,37 @@ func NewDBusObjectManagerClientSync(ConnectionVar *DBusConnection, FlagsVar DBus | |||||
| 260 | var cls *DBusObjectManagerClient | 290 | var cls *DBusObjectManagerClient | ||
| 261 | var cerr *glib.Error | 291 | var cerr *glib.Error | ||
| 262 | 292 | ||||
| 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, NameVar, ObjectPathVar, GetProxyTypeFuncVarRef, GetProxyTypeUserDataVar, GetProxyTypeDestroyNotifyVarRef, CancellableVar.GoPointer(), &cerr) | |||
| 264 | 324 | ||||
| 265 | if cret == 0 { | 325 | if cret == 0 { | ||
| 266 | return nil, cerr | 326 | return nil, cerr | ||
| @@ -666,7 +726,52 @@ var xDBusObjectManagerClientNew func(uintptr, DBusObjectManagerClientFlags, stri | |||||
| 666 | // g_dbus_object_manager_client_new_sync() for the synchronous version. | 726 | // g_dbus_object_manager_client_new_sync() for the synchronous version. | ||
| 667 | func DBusObjectManagerClientNew(ConnectionVar *DBusConnection, FlagsVar DBusObjectManagerClientFlags, NameVar string, ObjectPathVar string, GetProxyTypeFuncVar *DBusProxyTypeFunc, GetProxyTypeUserDataVar uintptr, GetProxyTypeDestroyNotifyVar *glib.DestroyNotify, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | 727 | func DBusObjectManagerClientNew(ConnectionVar *DBusConnection, FlagsVar DBusObjectManagerClientFlags, NameVar string, ObjectPathVar string, GetProxyTypeFuncVar *DBusProxyTypeFunc, GetProxyTypeUserDataVar uintptr, GetProxyTypeDestroyNotifyVar *glib.DestroyNotify, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | ||
| 668 | 728 | ||||
| 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) | |||
| 670 | 775 | ||||
| 671 | } | 776 | } | ||
| 672 | 777 | ||||
| @@ -683,7 +788,52 @@ var xDBusObjectManagerClientNewForBus func(BusType, DBusObjectManagerClientFlags | |||||
| 683 | // g_dbus_object_manager_client_new_for_bus_sync() for the synchronous version. | 788 | // g_dbus_object_manager_client_new_for_bus_sync() for the synchronous version. | ||
| 684 | func DBusObjectManagerClientNewForBus(BusTypeVar BusType, FlagsVar DBusObjectManagerClientFlags, NameVar string, ObjectPathVar string, GetProxyTypeFuncVar *DBusProxyTypeFunc, GetProxyTypeUserDataVar uintptr, GetProxyTypeDestroyNotifyVar *glib.DestroyNotify, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | 789 | func DBusObjectManagerClientNewForBus(BusTypeVar BusType, FlagsVar DBusObjectManagerClientFlags, NameVar string, ObjectPathVar string, GetProxyTypeFuncVar *DBusProxyTypeFunc, GetProxyTypeUserDataVar uintptr, GetProxyTypeDestroyNotifyVar *glib.DestroyNotify, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | ||
| 685 | 790 | ||||
| 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) | |||
| 687 | 837 | ||||
| 688 | } | 838 | } | ||
| 689 | 839 | ||||
M v4/gio/gdbusproxy.go +64 -4
| @@ -305,7 +305,22 @@ var xDBusProxyCall func(uintptr, string, *glib.Variant, DBusCallFlags, int, uint | |||||
| 305 | // the %G_DBUS_MESSAGE_FLAGS_NO_REPLY_EXPECTED flag set. | 305 | // the %G_DBUS_MESSAGE_FLAGS_NO_REPLY_EXPECTED flag set. | ||
| 306 | func (x *DBusProxy) Call(MethodNameVar string, ParametersVar *glib.Variant, FlagsVar DBusCallFlags, TimeoutMsecVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | 306 | func (x *DBusProxy) Call(MethodNameVar string, ParametersVar *glib.Variant, FlagsVar DBusCallFlags, TimeoutMsecVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | ||
| 307 | 307 | ||||
| 308 | - | xDBusProxyCall(x.GoPointer(), MethodNameVar, ParametersVar, FlagsVar, TimeoutMsecVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar) | 308 | + | var CallbackVarRef uintptr |
| 309 | + | if CallbackVar != nil { | |||
| 310 | + | CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar)) | |||
| 311 | + | if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok { | |||
| 312 | + | CallbackVarRef = cbRefPtr | |||
| 313 | + | } else { | |||
| 314 | + | fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) { | |||
| 315 | + | cbFn := *CallbackVar | |||
| 316 | + | cbFn(arg0, arg1, arg2) | |||
| 317 | + | } | |||
| 318 | + | CallbackVarRef = purego.NewCallback(fcb) | |||
| 319 | + | glib.SaveCallback(CallbackVarPtr, CallbackVarRef) | |||
| 320 | + | } | |||
| 321 | + | } | |||
| 322 | + | ||||
| 323 | + | xDBusProxyCall(x.GoPointer(), MethodNameVar, ParametersVar, FlagsVar, TimeoutMsecVar, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar) | |||
| 309 | 324 | ||||
| 310 | } | 325 | } | ||
| 311 | 326 | ||||
| @@ -379,7 +394,22 @@ var xDBusProxyCallWithUnixFdList func(uintptr, string, *glib.Variant, DBusCallFl | |||||
| 379 | // This method is only available on UNIX. | 394 | // This method is only available on UNIX. | ||
| 380 | func (x *DBusProxy) CallWithUnixFdList(MethodNameVar string, ParametersVar *glib.Variant, FlagsVar DBusCallFlags, TimeoutMsecVar int, FdListVar *UnixFDList, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | 395 | func (x *DBusProxy) CallWithUnixFdList(MethodNameVar string, ParametersVar *glib.Variant, FlagsVar DBusCallFlags, TimeoutMsecVar int, FdListVar *UnixFDList, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | ||
| 381 | 396 | ||||
| 382 | - | xDBusProxyCallWithUnixFdList(x.GoPointer(), MethodNameVar, ParametersVar, FlagsVar, TimeoutMsecVar, FdListVar.GoPointer(), CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar) | 397 | + | var CallbackVarRef uintptr |
| 398 | + | if CallbackVar != nil { | |||
| 399 | + | CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar)) | |||
| 400 | + | if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok { | |||
| 401 | + | CallbackVarRef = cbRefPtr | |||
| 402 | + | } else { | |||
| 403 | + | fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) { | |||
| 404 | + | cbFn := *CallbackVar | |||
| 405 | + | cbFn(arg0, arg1, arg2) | |||
| 406 | + | } | |||
| 407 | + | CallbackVarRef = purego.NewCallback(fcb) | |||
| 408 | + | glib.SaveCallback(CallbackVarPtr, CallbackVarRef) | |||
| 409 | + | } | |||
| 410 | + | } | |||
| 411 | + | ||||
| 412 | + | xDBusProxyCallWithUnixFdList(x.GoPointer(), MethodNameVar, ParametersVar, FlagsVar, TimeoutMsecVar, FdListVar.GoPointer(), CancellableVar.GoPointer(), CallbackVarRef, UserDataVar) | |||
| 383 | 413 | ||||
| 384 | } | 414 | } | ||
| 385 | 415 | ||||
| @@ -1024,7 +1054,22 @@ var xDBusProxyNew func(uintptr, DBusProxyFlags, *DBusInterfaceInfo, string, stri | |||||
| 1024 | // #GDBusProxy is used in this [example][class@Gio.DBusProxy#a-watch-proxy-example]. | 1054 | // #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) { | 1055 | func DBusProxyNew(ConnectionVar *DBusConnection, FlagsVar DBusProxyFlags, InfoVar *DBusInterfaceInfo, NameVar string, ObjectPathVar string, InterfaceNameVar string, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | ||
| 1026 | 1056 | ||||
| 1027 | - | xDBusProxyNew(ConnectionVar.GoPointer(), FlagsVar, InfoVar, NameVar, ObjectPathVar, InterfaceNameVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar) | 1057 | + | var CallbackVarRef uintptr |
| 1058 | + | if CallbackVar != nil { | |||
| 1059 | + | CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar)) | |||
| 1060 | + | if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok { | |||
| 1061 | + | CallbackVarRef = cbRefPtr | |||
| 1062 | + | } else { | |||
| 1063 | + | fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) { | |||
| 1064 | + | cbFn := *CallbackVar | |||
| 1065 | + | cbFn(arg0, arg1, arg2) | |||
| 1066 | + | } | |||
| 1067 | + | CallbackVarRef = purego.NewCallback(fcb) | |||
| 1068 | + | glib.SaveCallback(CallbackVarPtr, CallbackVarRef) | |||
| 1069 | + | } | |||
| 1070 | + | } | |||
| 1071 | + | ||||
| 1072 | + | xDBusProxyNew(ConnectionVar.GoPointer(), FlagsVar, InfoVar, NameVar, ObjectPathVar, InterfaceNameVar, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar) | |||
| 1028 | 1073 | ||||
| 1029 | } | 1074 | } | ||
| 1030 | 1075 | ||||
| @@ -1035,7 +1080,22 @@ var xDBusProxyNewForBus func(BusType, DBusProxyFlags, *DBusInterfaceInfo, string | |||||
| 1035 | // #GDBusProxy is used in this [example][class@Gio.DBusProxy#a-watch-proxy-example]. | 1080 | // #GDBusProxy is used in this [example][class@Gio.DBusProxy#a-watch-proxy-example]. | ||
| 1036 | func DBusProxyNewForBus(BusTypeVar BusType, FlagsVar DBusProxyFlags, InfoVar *DBusInterfaceInfo, NameVar string, ObjectPathVar string, InterfaceNameVar string, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | 1081 | func DBusProxyNewForBus(BusTypeVar BusType, FlagsVar DBusProxyFlags, InfoVar *DBusInterfaceInfo, NameVar string, ObjectPathVar string, InterfaceNameVar string, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | ||
| 1037 | 1082 | ||||
| 1038 | - | xDBusProxyNewForBus(BusTypeVar, FlagsVar, InfoVar, NameVar, ObjectPathVar, InterfaceNameVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar) | 1083 | + | var CallbackVarRef uintptr |
| 1084 | + | if CallbackVar != nil { | |||
| 1085 | + | CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar)) | |||
| 1086 | + | if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok { | |||
| 1087 | + | CallbackVarRef = cbRefPtr | |||
| 1088 | + | } else { | |||
| 1089 | + | fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) { | |||
| 1090 | + | cbFn := *CallbackVar | |||
| 1091 | + | cbFn(arg0, arg1, arg2) | |||
| 1092 | + | } | |||
| 1093 | + | CallbackVarRef = purego.NewCallback(fcb) | |||
| 1094 | + | glib.SaveCallback(CallbackVarPtr, CallbackVarRef) | |||
| 1095 | + | } | |||
| 1096 | + | } | |||
| 1097 | + | ||||
| 1098 | + | xDBusProxyNewForBus(BusTypeVar, FlagsVar, InfoVar, NameVar, ObjectPathVar, InterfaceNameVar, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar) | |||
| 1039 | 1099 | ||||
| 1040 | } | 1100 | } | ||
| 1041 | 1101 | ||||
M v4/gio/gfile.go +32 -2
| @@ -6196,7 +6196,22 @@ var xFileNewTmpAsync func(string, int, uintptr, uintptr, uintptr) | |||||
| 6196 | // directory components. If it is %NULL, a default template is used. | 6196 | // 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 | 6198 | ||||
| 6199 | - | xFileNewTmpAsync(TmplVar, IoPriorityVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar) | 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 | + | } | |||
| 6213 | + | ||||
| 6214 | + | xFileNewTmpAsync(TmplVar, IoPriorityVar, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar) | |||
| 6200 | 6215 | ||||
| 6201 | } | 6216 | } | ||
| 6202 | 6217 | ||||
| @@ -6210,7 +6225,22 @@ var xFileNewTmpDirAsync func(string, int, uintptr, uintptr, uintptr) | |||||
| 6210 | // directory components. If it is %NULL, a default template is used. | 6225 | // 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) { | ||
| 6212 | 6227 | ||||
| 6213 | - | xFileNewTmpDirAsync(TmplVar, IoPriorityVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar) | 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 | + | } | |||
| 6242 | + | ||||
| 6243 | + | xFileNewTmpDirAsync(TmplVar, IoPriorityVar, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar) | |||
| 6214 | 6244 | ||||
| 6215 | } | 6245 | } | ||
| 6216 | 6246 | ||||
M v4/gio/gfileenumerator.go +32 -2
| @@ -436,7 +436,22 @@ var xFileEnumeratorCloseAsync func(uintptr, int, uintptr, uintptr, uintptr) | |||||
| 436 | // g_file_enumerator_close_finish(). | 436 | // g_file_enumerator_close_finish(). | ||
| 437 | func (x *FileEnumerator) CloseAsync(IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | 437 | func (x *FileEnumerator) CloseAsync(IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | ||
| 438 | 438 | ||||
| 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) | |||
| 440 | 455 | ||||
| 441 | } | 456 | } | ||
| 442 | 457 | ||||
| @@ -688,7 +703,22 @@ var xFileEnumeratorNextFilesAsync func(uintptr, int, int, uintptr, uintptr, uint | |||||
| 688 | // priority is %G_PRIORITY_DEFAULT. | 703 | // priority is %G_PRIORITY_DEFAULT. | ||
| 689 | func (x *FileEnumerator) NextFilesAsync(NumFilesVar int, IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | 704 | func (x *FileEnumerator) NextFilesAsync(NumFilesVar int, IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | ||
| 690 | 705 | ||||
| 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) | |||
| 692 | 722 | ||||
| 693 | } | 723 | } | ||
| 694 | 724 | ||||
M v4/gio/gfileinputstream.go +16 -1
| @@ -389,7 +389,22 @@ var xFileInputStreamQueryInfoAsync func(uintptr, string, int, uintptr, uintptr, | |||||
| 389 | // was cancelled, the error %G_IO_ERROR_CANCELLED will be set | 389 | // was cancelled, the error %G_IO_ERROR_CANCELLED will be set | ||
| 390 | func (x *FileInputStream) QueryInfoAsync(AttributesVar string, IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | 390 | func (x *FileInputStream) QueryInfoAsync(AttributesVar string, IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | ||
| 391 | 391 | ||||
| 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) | |||
| 393 | 408 | ||||
| 394 | } | 409 | } | ||
| 395 | 410 | ||||
M v4/gio/gfileiostream.go +16 -1
| @@ -492,7 +492,22 @@ var xFileIOStreamQueryInfoAsync func(uintptr, string, int, uintptr, uintptr, uin | |||||
| 492 | // g_file_io_stream_query_info(). | 492 | // g_file_io_stream_query_info(). | ||
| 493 | func (x *FileIOStream) QueryInfoAsync(AttributesVar string, IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | 493 | func (x *FileIOStream) QueryInfoAsync(AttributesVar string, IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | ||
| 494 | 494 | ||||
| 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) | |||
| 496 | 511 | ||||
| 497 | } | 512 | } | ||
| 498 | 513 | ||||
M v4/gio/gfileoutputstream.go +16 -1
| @@ -487,7 +487,22 @@ var xFileOutputStreamQueryInfoAsync func(uintptr, string, int, uintptr, uintptr, | |||||
| 487 | // g_file_output_stream_query_info(). | 487 | // g_file_output_stream_query_info(). | ||
| 488 | func (x *FileOutputStream) QueryInfoAsync(AttributesVar string, IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | 488 | func (x *FileOutputStream) QueryInfoAsync(AttributesVar string, IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | ||
| 489 | 489 | ||||
| 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) | |||
| 491 | 506 | ||||
| 492 | } | 507 | } | ||
| 493 | 508 | ||||
M v4/gio/ginputstream.go +80 -5
| @@ -468,7 +468,22 @@ var xInputStreamCloseAsync func(uintptr, int, uintptr, uintptr, uintptr) | |||||
| 468 | // override one you must override all. | 468 | // override one you must override all. | ||
| 469 | func (x *InputStream) CloseAsync(IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | 469 | func (x *InputStream) CloseAsync(IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | ||
| 470 | 470 | ||||
| 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) | |||
| 472 | 487 | ||||
| 473 | } | 488 | } | ||
| 474 | 489 | ||||
| @@ -584,7 +599,22 @@ var xInputStreamReadAllAsync func(uintptr, *[]byte, uint, int, uintptr, uintptr, | |||||
| 584 | // priority. Default priority is %G_PRIORITY_DEFAULT. | 599 | // priority. Default priority is %G_PRIORITY_DEFAULT. | ||
| 585 | func (x *InputStream) ReadAllAsync(BufferVar *[]byte, CountVar uint, IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | 600 | func (x *InputStream) ReadAllAsync(BufferVar *[]byte, CountVar uint, IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | ||
| 586 | 601 | ||||
| 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) | |||
| 588 | 618 | ||||
| 589 | } | 619 | } | ||
| 590 | 620 | ||||
| @@ -637,7 +667,22 @@ var xInputStreamReadAsync func(uintptr, *[]byte, uint, int, uintptr, uintptr, ui | |||||
| 637 | // override one you must override all. | 667 | // override one you must override all. | ||
| 638 | func (x *InputStream) ReadAsync(BufferVar *[]byte, CountVar uint, IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | 668 | func (x *InputStream) ReadAsync(BufferVar *[]byte, CountVar uint, IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | ||
| 639 | 669 | ||||
| 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) | |||
| 641 | 686 | ||||
| 642 | } | 687 | } | ||
| 643 | 688 | ||||
| @@ -701,7 +746,22 @@ var xInputStreamReadBytesAsync func(uintptr, uint, int, uintptr, uintptr, uintpt | |||||
| 701 | // priority. Default priority is %G_PRIORITY_DEFAULT. | 746 | // priority. Default priority is %G_PRIORITY_DEFAULT. | ||
| 702 | func (x *InputStream) ReadBytesAsync(CountVar uint, IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | 747 | func (x *InputStream) ReadBytesAsync(CountVar uint, IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | ||
| 703 | 748 | ||||
| 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) | |||
| 705 | 765 | ||||
| 706 | } | 766 | } | ||
| 707 | 767 | ||||
| @@ -803,7 +863,22 @@ var xInputStreamSkipAsync func(uintptr, uint, int, uintptr, uintptr, uintptr) | |||||
| 803 | // However, if you override one, you must override all. | 863 | // However, if you override one, you must override all. | ||
| 804 | func (x *InputStream) SkipAsync(CountVar uint, IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | 864 | func (x *InputStream) SkipAsync(CountVar uint, IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | ||
| 805 | 865 | ||||
| 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) | |||
| 807 | 882 | ||||
| 808 | } | 883 | } | ||
| 809 | 884 | ||||
M v4/gio/gioscheduler.go +31 -1
| @@ -2,6 +2,8 @@ | |||||
| 2 | package gio | 2 | package gio | ||
| 3 | 3 | ||||
| 4 | import ( | 4 | import ( | ||
| 5 | + | "unsafe" | |||
| 6 | + | ||||
| 5 | "github.com/jwijenbergh/purego" | 7 | "github.com/jwijenbergh/purego" | ||
| 6 | "github.com/jwijenbergh/puregotk/pkg/core" | 8 | "github.com/jwijenbergh/puregotk/pkg/core" | ||
| 7 | "github.com/jwijenbergh/puregotk/v4/glib" | 9 | "github.com/jwijenbergh/puregotk/v4/glib" | ||
| @@ -31,7 +33,35 @@ var xIoSchedulerPushJob func(uintptr, uintptr, uintptr, int, uintptr) | |||||
| 31 | // g_io_scheduler_cancel_all_jobs(). | 33 | // g_io_scheduler_cancel_all_jobs(). | ||
| 32 | func IoSchedulerPushJob(JobFuncVar *IOSchedulerJobFunc, UserDataVar uintptr, NotifyVar *glib.DestroyNotify, IoPriorityVar int, CancellableVar *Cancellable) { | 34 | func IoSchedulerPushJob(JobFuncVar *IOSchedulerJobFunc, UserDataVar uintptr, NotifyVar *glib.DestroyNotify, IoPriorityVar int, CancellableVar *Cancellable) { | ||
| 33 | 35 | ||||
| 34 | - | xIoSchedulerPushJob(glib.NewCallback(JobFuncVar), UserDataVar, glib.NewCallbackNullable(NotifyVar), IoPriorityVar, CancellableVar.GoPointer()) | 36 | + | JobFuncVarPtr := uintptr(unsafe.Pointer(JobFuncVar)) |
| 37 | + | var JobFuncVarRef uintptr | |||
| 38 | + | if cbRefPtr, ok := glib.GetCallback(JobFuncVarPtr); ok { | |||
| 39 | + | JobFuncVarRef = cbRefPtr | |||
| 40 | + | } else { | |||
| 41 | + | fcb := func(arg0 *IOSchedulerJob, arg1 uintptr, arg2 uintptr) bool { | |||
| 42 | + | cbFn := *JobFuncVar | |||
| 43 | + | return cbFn(arg0, arg1, arg2) | |||
| 44 | + | } | |||
| 45 | + | JobFuncVarRef = purego.NewCallback(fcb) | |||
| 46 | + | glib.SaveCallback(JobFuncVarPtr, JobFuncVarRef) | |||
| 47 | + | } | |||
| 48 | + | ||||
| 49 | + | var NotifyVarRef uintptr | |||
| 50 | + | if NotifyVar != nil { | |||
| 51 | + | NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar)) | |||
| 52 | + | if cbRefPtr, ok := glib.GetCallback(NotifyVarPtr); ok { | |||
| 53 | + | NotifyVarRef = cbRefPtr | |||
| 54 | + | } else { | |||
| 55 | + | fcb := func(arg0 uintptr) { | |||
| 56 | + | cbFn := *NotifyVar | |||
| 57 | + | cbFn(arg0) | |||
| 58 | + | } | |||
| 59 | + | NotifyVarRef = purego.NewCallback(fcb) | |||
| 60 | + | glib.SaveCallback(NotifyVarPtr, NotifyVarRef) | |||
| 61 | + | } | |||
| 62 | + | } | |||
| 63 | + | ||||
| 64 | + | xIoSchedulerPushJob(JobFuncVarRef, UserDataVar, NotifyVarRef, IoPriorityVar, CancellableVar.GoPointer()) | |||
| 35 | 65 | ||||
| 36 | } | 66 | } | ||
| 37 | 67 | ||||
M v4/gio/giostream.go +32 -2
| @@ -558,7 +558,22 @@ var xIOStreamCloseAsync func(uintptr, int, uintptr, uintptr, uintptr) | |||||
| 558 | // classes. However, if you override one you must override all. | 558 | // classes. However, if you override one you must override all. | ||
| 559 | func (x *IOStream) CloseAsync(IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | 559 | func (x *IOStream) CloseAsync(IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | ||
| 560 | 560 | ||||
| 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) | |||
| 562 | 577 | ||||
| 563 | } | 578 | } | ||
| 564 | 579 | ||||
| @@ -657,7 +672,22 @@ var xIOStreamSpliceAsync func(uintptr, uintptr, IOStreamSpliceFlags, int, uintpt | |||||
| 657 | // result of the operation. | 672 | // result of the operation. | ||
| 658 | func (x *IOStream) SpliceAsync(Stream2Var *IOStream, FlagsVar IOStreamSpliceFlags, IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | 673 | func (x *IOStream) SpliceAsync(Stream2Var *IOStream, FlagsVar IOStreamSpliceFlags, IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | ||
| 659 | 674 | ||||
| 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) | |||
| 661 | 691 | ||||
| 662 | } | 692 | } | ||
| 663 | 693 | ||||
M v4/gio/giotypes.go +58 -2
| @@ -400,7 +400,35 @@ var xIOSchedulerJobSendToMainloop func(uintptr, uintptr, uintptr, uintptr) bool | |||||
| 400 | // blocking the I/O job). | 400 | // blocking the I/O job). | ||
| 401 | func (x *IOSchedulerJob) SendToMainloop(FuncVar *glib.SourceFunc, UserDataVar uintptr, NotifyVar *glib.DestroyNotify) bool { | 401 | func (x *IOSchedulerJob) SendToMainloop(FuncVar *glib.SourceFunc, UserDataVar uintptr, NotifyVar *glib.DestroyNotify) bool { | ||
| 402 | 402 | ||||
| 403 | - | cret := xIOSchedulerJobSendToMainloop(x.GoPointer(), glib.NewCallback(FuncVar), UserDataVar, glib.NewCallbackNullable(NotifyVar)) | 403 | + | FuncVarPtr := uintptr(unsafe.Pointer(FuncVar)) |
| 404 | + | var FuncVarRef uintptr | |||
| 405 | + | if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok { | |||
| 406 | + | FuncVarRef = cbRefPtr | |||
| 407 | + | } else { | |||
| 408 | + | fcb := func(arg0 uintptr) bool { | |||
| 409 | + | cbFn := *FuncVar | |||
| 410 | + | return cbFn(arg0) | |||
| 411 | + | } | |||
| 412 | + | FuncVarRef = purego.NewCallback(fcb) | |||
| 413 | + | glib.SaveCallback(FuncVarPtr, FuncVarRef) | |||
| 414 | + | } | |||
| 415 | + | ||||
| 416 | + | var NotifyVarRef uintptr | |||
| 417 | + | if NotifyVar != nil { | |||
| 418 | + | NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar)) | |||
| 419 | + | if cbRefPtr, ok := glib.GetCallback(NotifyVarPtr); ok { | |||
| 420 | + | NotifyVarRef = cbRefPtr | |||
| 421 | + | } else { | |||
| 422 | + | fcb := func(arg0 uintptr) { | |||
| 423 | + | cbFn := *NotifyVar | |||
| 424 | + | cbFn(arg0) | |||
| 425 | + | } | |||
| 426 | + | NotifyVarRef = purego.NewCallback(fcb) | |||
| 427 | + | glib.SaveCallback(NotifyVarPtr, NotifyVarRef) | |||
| 428 | + | } | |||
| 429 | + | } | |||
| 430 | + | ||||
| 431 | + | cret := xIOSchedulerJobSendToMainloop(x.GoPointer(), FuncVarRef, UserDataVar, NotifyVarRef) | |||
| 404 | return cret | 432 | return cret | ||
| 405 | } | 433 | } | ||
| 406 | 434 | ||||
| @@ -417,7 +445,35 @@ var xIOSchedulerJobSendToMainloopAsync func(uintptr, uintptr, uintptr, uintptr) | |||||
| 417 | // g_io_scheduler_push_job() or by using refcounting for @user_data. | 445 | // g_io_scheduler_push_job() or by using refcounting for @user_data. | ||
| 418 | func (x *IOSchedulerJob) SendToMainloopAsync(FuncVar *glib.SourceFunc, UserDataVar uintptr, NotifyVar *glib.DestroyNotify) { | 446 | func (x *IOSchedulerJob) SendToMainloopAsync(FuncVar *glib.SourceFunc, UserDataVar uintptr, NotifyVar *glib.DestroyNotify) { | ||
| 419 | 447 | ||||
| 420 | - | xIOSchedulerJobSendToMainloopAsync(x.GoPointer(), glib.NewCallback(FuncVar), UserDataVar, glib.NewCallbackNullable(NotifyVar)) | 448 | + | FuncVarPtr := uintptr(unsafe.Pointer(FuncVar)) |
| 449 | + | var FuncVarRef uintptr | |||
| 450 | + | if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok { | |||
| 451 | + | FuncVarRef = cbRefPtr | |||
| 452 | + | } else { | |||
| 453 | + | fcb := func(arg0 uintptr) bool { | |||
| 454 | + | cbFn := *FuncVar | |||
| 455 | + | return cbFn(arg0) | |||
| 456 | + | } | |||
| 457 | + | FuncVarRef = purego.NewCallback(fcb) | |||
| 458 | + | glib.SaveCallback(FuncVarPtr, FuncVarRef) | |||
| 459 | + | } | |||
| 460 | + | ||||
| 461 | + | var NotifyVarRef uintptr | |||
| 462 | + | if NotifyVar != nil { | |||
| 463 | + | NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar)) | |||
| 464 | + | if cbRefPtr, ok := glib.GetCallback(NotifyVarPtr); ok { | |||
| 465 | + | NotifyVarRef = cbRefPtr | |||
| 466 | + | } else { | |||
| 467 | + | fcb := func(arg0 uintptr) { | |||
| 468 | + | cbFn := *NotifyVar | |||
| 469 | + | cbFn(arg0) | |||
| 470 | + | } | |||
| 471 | + | NotifyVarRef = purego.NewCallback(fcb) | |||
| 472 | + | glib.SaveCallback(NotifyVarPtr, NotifyVarRef) | |||
| 473 | + | } | |||
| 474 | + | } | |||
| 475 | + | ||||
| 476 | + | xIOSchedulerJobSendToMainloopAsync(x.GoPointer(), FuncVarRef, UserDataVar, NotifyVarRef) | |||
| 421 | 477 | ||||
| 422 | } | 478 | } | ||
| 423 | 479 | ||||
M v4/gio/gliststore.go +56 -4
| @@ -100,7 +100,20 @@ var xListStoreFindWithEqualFunc func(uintptr, uintptr, uintptr, *uint) bool | |||||
| 100 | // Since GLib 2.76 it is possible to pass `NULL` for @item. | 100 | // Since GLib 2.76 it is possible to pass `NULL` for @item. | ||
| 101 | func (x *ListStore) FindWithEqualFunc(ItemVar *gobject.Object, EqualFuncVar *glib.EqualFunc, PositionVar *uint) bool { | 101 | func (x *ListStore) FindWithEqualFunc(ItemVar *gobject.Object, EqualFuncVar *glib.EqualFunc, PositionVar *uint) bool { | ||
| 102 | 102 | ||||
| 103 | - | cret := xListStoreFindWithEqualFunc(x.GoPointer(), ItemVar.GoPointer(), glib.NewCallback(EqualFuncVar), PositionVar) | 103 | + | EqualFuncVarPtr := uintptr(unsafe.Pointer(EqualFuncVar)) |
| 104 | + | var EqualFuncVarRef uintptr | |||
| 105 | + | if cbRefPtr, ok := glib.GetCallback(EqualFuncVarPtr); ok { | |||
| 106 | + | EqualFuncVarRef = cbRefPtr | |||
| 107 | + | } else { | |||
| 108 | + | fcb := func(arg0 uintptr, arg1 uintptr) bool { | |||
| 109 | + | cbFn := *EqualFuncVar | |||
| 110 | + | return cbFn(arg0, arg1) | |||
| 111 | + | } | |||
| 112 | + | EqualFuncVarRef = purego.NewCallback(fcb) | |||
| 113 | + | glib.SaveCallback(EqualFuncVarPtr, EqualFuncVarRef) | |||
| 114 | + | } | |||
| 115 | + | ||||
| 116 | + | cret := xListStoreFindWithEqualFunc(x.GoPointer(), ItemVar.GoPointer(), EqualFuncVarRef, PositionVar) | |||
| 104 | return cret | 117 | return cret | ||
| 105 | } | 118 | } | ||
| 106 | 119 | ||||
| @@ -114,7 +127,20 @@ var xListStoreFindWithEqualFuncFull func(uintptr, uintptr, uintptr, uintptr, *ui | |||||
| 114 | // Since GLib 2.76 it is possible to pass `NULL` for @item. | 127 | // Since GLib 2.76 it is possible to pass `NULL` for @item. | ||
| 115 | func (x *ListStore) FindWithEqualFuncFull(ItemVar *gobject.Object, EqualFuncVar *glib.EqualFuncFull, UserDataVar uintptr, PositionVar *uint) bool { | 128 | func (x *ListStore) FindWithEqualFuncFull(ItemVar *gobject.Object, EqualFuncVar *glib.EqualFuncFull, UserDataVar uintptr, PositionVar *uint) bool { | ||
| 116 | 129 | ||||
| 117 | - | cret := xListStoreFindWithEqualFuncFull(x.GoPointer(), ItemVar.GoPointer(), glib.NewCallback(EqualFuncVar), UserDataVar, PositionVar) | 130 | + | EqualFuncVarPtr := uintptr(unsafe.Pointer(EqualFuncVar)) |
| 131 | + | var EqualFuncVarRef uintptr | |||
| 132 | + | if cbRefPtr, ok := glib.GetCallback(EqualFuncVarPtr); ok { | |||
| 133 | + | EqualFuncVarRef = cbRefPtr | |||
| 134 | + | } else { | |||
| 135 | + | fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) bool { | |||
| 136 | + | cbFn := *EqualFuncVar | |||
| 137 | + | return cbFn(arg0, arg1, arg2) | |||
| 138 | + | } | |||
| 139 | + | EqualFuncVarRef = purego.NewCallback(fcb) | |||
| 140 | + | glib.SaveCallback(EqualFuncVarPtr, EqualFuncVarRef) | |||
| 141 | + | } | |||
| 142 | + | ||||
| 143 | + | cret := xListStoreFindWithEqualFuncFull(x.GoPointer(), ItemVar.GoPointer(), EqualFuncVarRef, UserDataVar, PositionVar) | |||
| 118 | return cret | 144 | return cret | ||
| 119 | } | 145 | } | ||
| 120 | 146 | ||||
| @@ -146,7 +172,20 @@ var xListStoreInsertSorted func(uintptr, uintptr, uintptr, uintptr) uint | |||||
| 146 | // This function takes a ref on @item. | 172 | // This function takes a ref on @item. | ||
| 147 | func (x *ListStore) InsertSorted(ItemVar *gobject.Object, CompareFuncVar *glib.CompareDataFunc, UserDataVar uintptr) uint { | 173 | func (x *ListStore) InsertSorted(ItemVar *gobject.Object, CompareFuncVar *glib.CompareDataFunc, UserDataVar uintptr) uint { | ||
| 148 | 174 | ||||
| 149 | - | cret := xListStoreInsertSorted(x.GoPointer(), ItemVar.GoPointer(), glib.NewCallback(CompareFuncVar), UserDataVar) | 175 | + | CompareFuncVarPtr := uintptr(unsafe.Pointer(CompareFuncVar)) |
| 176 | + | var CompareFuncVarRef uintptr | |||
| 177 | + | if cbRefPtr, ok := glib.GetCallback(CompareFuncVarPtr); ok { | |||
| 178 | + | CompareFuncVarRef = cbRefPtr | |||
| 179 | + | } else { | |||
| 180 | + | fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int { | |||
| 181 | + | cbFn := *CompareFuncVar | |||
| 182 | + | return cbFn(arg0, arg1, arg2) | |||
| 183 | + | } | |||
| 184 | + | CompareFuncVarRef = purego.NewCallback(fcb) | |||
| 185 | + | glib.SaveCallback(CompareFuncVarPtr, CompareFuncVarRef) | |||
| 186 | + | } | |||
| 187 | + | ||||
| 188 | + | cret := xListStoreInsertSorted(x.GoPointer(), ItemVar.GoPointer(), CompareFuncVarRef, UserDataVar) | |||
| 150 | return cret | 189 | return cret | ||
| 151 | } | 190 | } | ||
| 152 | 191 | ||||
| @@ -177,7 +216,20 @@ var xListStoreSort func(uintptr, uintptr, uintptr) | |||||
| 177 | // Sort the items in @store according to @compare_func. | 216 | // Sort the items in @store according to @compare_func. | ||
| 178 | func (x *ListStore) Sort(CompareFuncVar *glib.CompareDataFunc, UserDataVar uintptr) { | 217 | func (x *ListStore) Sort(CompareFuncVar *glib.CompareDataFunc, UserDataVar uintptr) { | ||
| 179 | 218 | ||||
| 180 | - | xListStoreSort(x.GoPointer(), glib.NewCallback(CompareFuncVar), UserDataVar) | 219 | + | CompareFuncVarPtr := uintptr(unsafe.Pointer(CompareFuncVar)) |
| 220 | + | var CompareFuncVarRef uintptr | |||
| 221 | + | if cbRefPtr, ok := glib.GetCallback(CompareFuncVarPtr); ok { | |||
| 222 | + | CompareFuncVarRef = cbRefPtr | |||
| 223 | + | } else { | |||
| 224 | + | fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int { | |||
| 225 | + | cbFn := *CompareFuncVar | |||
| 226 | + | return cbFn(arg0, arg1, arg2) | |||
| 227 | + | } | |||
| 228 | + | CompareFuncVarRef = purego.NewCallback(fcb) | |||
| 229 | + | glib.SaveCallback(CompareFuncVarPtr, CompareFuncVarRef) | |||
| 230 | + | } | |||
| 231 | + | ||||
| 232 | + | xListStoreSort(x.GoPointer(), CompareFuncVarRef, UserDataVar) | |||
| 181 | 233 | ||||
| 182 | } | 234 | } | ||
| 183 | 235 | ||||
M v4/gio/gmemoryinputstream.go +32 -2
| @@ -213,7 +213,22 @@ var xNewMemoryInputStreamFromData func([]byte, int, uintptr) uintptr | |||||
| 213 | func NewMemoryInputStreamFromData(DataVar []byte, LenVar int, DestroyVar *glib.DestroyNotify) *MemoryInputStream { | 213 | func NewMemoryInputStreamFromData(DataVar []byte, LenVar int, DestroyVar *glib.DestroyNotify) *MemoryInputStream { | ||
| 214 | var cls *MemoryInputStream | 214 | var cls *MemoryInputStream | ||
| 215 | 215 | ||||
| 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) | |||
| 217 | 232 | ||||
| 218 | if cret == 0 { | 233 | if cret == 0 { | ||
| 219 | return nil | 234 | return nil | ||
| @@ -237,7 +252,22 @@ var xMemoryInputStreamAddData func(uintptr, []byte, int, uintptr) | |||||
| 237 | // Appends @data to data that can be read from the input stream | 252 | // Appends @data to data that can be read from the input stream | ||
| 238 | func (x *MemoryInputStream) AddData(DataVar []byte, LenVar int, DestroyVar *glib.DestroyNotify) { | 253 | func (x *MemoryInputStream) AddData(DataVar []byte, LenVar int, DestroyVar *glib.DestroyNotify) { | ||
| 239 | 254 | ||||
| 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) | |||
| 241 | 271 | ||||
| 242 | } | 272 | } | ||
| 243 | 273 | ||||
M v4/gio/gmemoryoutputstream.go +31 -1
| @@ -228,7 +228,37 @@ var xNewMemoryOutputStream func(uintptr, uint, uintptr, uintptr) uintptr | |||||
| 228 | func NewMemoryOutputStream(DataVar uintptr, SizeVar uint, ReallocFunctionVar *ReallocFunc, DestroyFunctionVar *glib.DestroyNotify) *MemoryOutputStream { | 228 | func NewMemoryOutputStream(DataVar uintptr, SizeVar uint, ReallocFunctionVar *ReallocFunc, DestroyFunctionVar *glib.DestroyNotify) *MemoryOutputStream { | ||
| 229 | var cls *MemoryOutputStream | 229 | var cls *MemoryOutputStream | ||
| 230 | 230 | ||||
| 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) | |||
| 232 | 262 | ||||
| 233 | if cret == 0 { | 263 | if cret == 0 { | ||
| 234 | return nil | 264 | return nil | ||
M v4/gio/goutputstream.go +128 -8
| @@ -628,7 +628,22 @@ var xOutputStreamCloseAsync func(uintptr, int, uintptr, uintptr, uintptr) | |||||
| 628 | // classes. However, if you override one you must override all. | 628 | // classes. However, if you override one you must override all. | ||
| 629 | func (x *OutputStream) CloseAsync(IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | 629 | func (x *OutputStream) CloseAsync(IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | ||
| 630 | 630 | ||||
| 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) | |||
| 632 | 647 | ||||
| 633 | } | 648 | } | ||
| 634 | 649 | ||||
| @@ -679,7 +694,22 @@ var xOutputStreamFlushAsync func(uintptr, int, uintptr, uintptr, uintptr) | |||||
| 679 | // result of the operation. | 694 | // result of the operation. | ||
| 680 | func (x *OutputStream) FlushAsync(IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | 695 | func (x *OutputStream) FlushAsync(IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | ||
| 681 | 696 | ||||
| 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) | |||
| 683 | 713 | ||||
| 684 | } | 714 | } | ||
| 685 | 715 | ||||
| @@ -788,7 +818,22 @@ var xOutputStreamSpliceAsync func(uintptr, uintptr, OutputStreamSpliceFlags, int | |||||
| 788 | // g_output_stream_splice(). | 818 | // g_output_stream_splice(). | ||
| 789 | func (x *OutputStream) SpliceAsync(SourceVar *InputStream, FlagsVar OutputStreamSpliceFlags, IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | 819 | func (x *OutputStream) SpliceAsync(SourceVar *InputStream, FlagsVar OutputStreamSpliceFlags, IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | ||
| 790 | 820 | ||||
| 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) | |||
| 792 | 837 | ||||
| 793 | } | 838 | } | ||
| 794 | 839 | ||||
| @@ -910,7 +955,22 @@ var xOutputStreamWriteAllAsync func(uintptr, []byte, uint, int, uintptr, uintptr | |||||
| 910 | // until @callback is called. | 955 | // until @callback is called. | ||
| 911 | func (x *OutputStream) WriteAllAsync(BufferVar []byte, CountVar uint, IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | 956 | func (x *OutputStream) WriteAllAsync(BufferVar []byte, CountVar uint, IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | ||
| 912 | 957 | ||||
| 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) | |||
| 914 | 974 | ||||
| 915 | } | 975 | } | ||
| 916 | 976 | ||||
| @@ -976,7 +1036,22 @@ var xOutputStreamWriteAsync func(uintptr, []byte, uint, int, uintptr, uintptr, u | |||||
| 976 | // the contents (without copying) for the duration of the call. | 1036 | // the contents (without copying) for the duration of the call. | ||
| 977 | func (x *OutputStream) WriteAsync(BufferVar []byte, CountVar uint, IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | 1037 | func (x *OutputStream) WriteAsync(BufferVar []byte, CountVar uint, IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | ||
| 978 | 1038 | ||||
| 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) | |||
| 980 | 1055 | ||||
| 981 | } | 1056 | } | ||
| 982 | 1057 | ||||
| @@ -1021,7 +1096,22 @@ var xOutputStreamWriteBytesAsync func(uintptr, *glib.Bytes, int, uintptr, uintpt | |||||
| 1021 | // g_output_stream_write_bytes(). | 1096 | // g_output_stream_write_bytes(). | ||
| 1022 | func (x *OutputStream) WriteBytesAsync(BytesVar *glib.Bytes, IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | 1097 | func (x *OutputStream) WriteBytesAsync(BytesVar *glib.Bytes, IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | ||
| 1023 | 1098 | ||||
| 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) | |||
| 1025 | 1115 | ||||
| 1026 | } | 1116 | } | ||
| 1027 | 1117 | ||||
| @@ -1144,7 +1234,22 @@ var xOutputStreamWritevAllAsync func(uintptr, []OutputVector, uint, int, uintptr | |||||
| 1144 | // of @vectors might be changed by this function. | 1234 | // of @vectors might be changed by this function. | ||
| 1145 | func (x *OutputStream) WritevAllAsync(VectorsVar []OutputVector, NVectorsVar uint, IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | 1235 | func (x *OutputStream) WritevAllAsync(VectorsVar []OutputVector, NVectorsVar uint, IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | ||
| 1146 | 1236 | ||||
| 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) | |||
| 1148 | 1253 | ||||
| 1149 | } | 1254 | } | ||
| 1150 | 1255 | ||||
| @@ -1205,7 +1310,22 @@ var xOutputStreamWritevAsync func(uintptr, []OutputVector, uint, int, uintptr, u | |||||
| 1205 | // until @callback is called. | 1310 | // until @callback is called. | ||
| 1206 | func (x *OutputStream) WritevAsync(VectorsVar []OutputVector, NVectorsVar uint, IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | 1311 | func (x *OutputStream) WritevAsync(VectorsVar []OutputVector, NVectorsVar uint, IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | ||
| 1207 | 1312 | ||||
| 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) | |||
| 1209 | 1329 | ||||
| 1210 | } | 1330 | } | ||
| 1211 | 1331 | ||||
M v4/gio/gpermission.go +32 -2
| @@ -249,7 +249,22 @@ var xPermissionAcquireAsync func(uintptr, uintptr, uintptr, uintptr) | |||||
| 249 | // g_permission_acquire(). | 249 | // g_permission_acquire(). | ||
| 250 | func (x *Permission) AcquireAsync(CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | 250 | func (x *Permission) AcquireAsync(CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | ||
| 251 | 251 | ||||
| 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) | |||
| 253 | 268 | ||||
| 254 | } | 269 | } | ||
| 255 | 270 | ||||
| @@ -353,7 +368,22 @@ var xPermissionReleaseAsync func(uintptr, uintptr, uintptr, uintptr) | |||||
| 353 | // g_permission_release(). | 368 | // g_permission_release(). | ||
| 354 | func (x *Permission) ReleaseAsync(CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | 369 | func (x *Permission) ReleaseAsync(CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | ||
| 355 | 370 | ||||
| 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) | |||
| 357 | 387 | ||||
| 358 | } | 388 | } | ||
| 359 | 389 | ||||
M v4/gio/gresolver.go +80 -5
| @@ -531,7 +531,22 @@ var xResolverLookupByAddressAsync func(uintptr, uintptr, uintptr, uintptr, uintp | |||||
| 531 | // call g_resolver_lookup_by_address_finish() to get the final result. | 531 | // call g_resolver_lookup_by_address_finish() to get the final result. | ||
| 532 | func (x *Resolver) LookupByAddressAsync(AddressVar *InetAddress, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | 532 | func (x *Resolver) LookupByAddressAsync(AddressVar *InetAddress, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | ||
| 533 | 533 | ||||
| 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) | |||
| 535 | 550 | ||||
| 536 | } | 551 | } | ||
| 537 | 552 | ||||
| @@ -598,7 +613,22 @@ var xResolverLookupByNameAsync func(uintptr, string, uintptr, uintptr, uintptr) | |||||
| 598 | // See g_resolver_lookup_by_name() for more details. | 613 | // See g_resolver_lookup_by_name() for more details. | ||
| 599 | func (x *Resolver) LookupByNameAsync(HostnameVar string, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | 614 | func (x *Resolver) LookupByNameAsync(HostnameVar string, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | ||
| 600 | 615 | ||||
| 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) | |||
| 602 | 632 | ||||
| 603 | } | 633 | } | ||
| 604 | 634 | ||||
| @@ -645,7 +675,22 @@ var xResolverLookupByNameWithFlagsAsync func(uintptr, string, ResolverNameLookup | |||||
| 645 | // See g_resolver_lookup_by_name() for more details. | 675 | // See g_resolver_lookup_by_name() for more details. | ||
| 646 | func (x *Resolver) LookupByNameWithFlagsAsync(HostnameVar string, FlagsVar ResolverNameLookupFlags, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | 676 | func (x *Resolver) LookupByNameWithFlagsAsync(HostnameVar string, FlagsVar ResolverNameLookupFlags, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | ||
| 647 | 677 | ||||
| 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) | |||
| 649 | 694 | ||||
| 650 | } | 695 | } | ||
| 651 | 696 | ||||
| @@ -699,7 +744,22 @@ var xResolverLookupRecordsAsync func(uintptr, string, ResolverRecordType, uintpt | |||||
| 699 | // g_resolver_lookup_records() for more details. | 744 | // g_resolver_lookup_records() for more details. | ||
| 700 | func (x *Resolver) LookupRecordsAsync(RrnameVar string, RecordTypeVar ResolverRecordType, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | 745 | func (x *Resolver) LookupRecordsAsync(RrnameVar string, RecordTypeVar ResolverRecordType, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | ||
| 701 | 746 | ||||
| 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) | |||
| 703 | 763 | ||||
| 704 | } | 764 | } | ||
| 705 | 765 | ||||
| @@ -767,7 +827,22 @@ var xResolverLookupServiceAsync func(uintptr, string, string, string, uintptr, u | |||||
| 767 | // details. | 827 | // details. | ||
| 768 | func (x *Resolver) LookupServiceAsync(ServiceVar string, ProtocolVar string, DomainVar string, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | 828 | func (x *Resolver) LookupServiceAsync(ServiceVar string, ProtocolVar string, DomainVar string, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | ||
| 769 | 829 | ||||
| 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) | |||
| 771 | 846 | ||||
| 772 | } | 847 | } | ||
| 773 | 848 | ||||
M v4/gio/gsettings.go +58 -2
| @@ -793,7 +793,50 @@ var xSettingsBindWithMapping func(uintptr, string, uintptr, string, SettingsBind | |||||
| 793 | // binding overrides the first one. | 793 | // binding overrides the first one. | ||
| 794 | func (x *Settings) BindWithMapping(KeyVar string, ObjectVar *gobject.Object, PropertyVar string, FlagsVar SettingsBindFlags, GetMappingVar *SettingsBindGetMapping, SetMappingVar *SettingsBindSetMapping, UserDataVar uintptr, DestroyVar *glib.DestroyNotify) { | 794 | func (x *Settings) BindWithMapping(KeyVar string, ObjectVar *gobject.Object, PropertyVar string, FlagsVar SettingsBindFlags, GetMappingVar *SettingsBindGetMapping, SetMappingVar *SettingsBindSetMapping, UserDataVar uintptr, DestroyVar *glib.DestroyNotify) { | ||
| 795 | 795 | ||||
| 796 | - | xSettingsBindWithMapping(x.GoPointer(), KeyVar, ObjectVar.GoPointer(), PropertyVar, FlagsVar, glib.NewCallbackNullable(GetMappingVar), glib.NewCallbackNullable(SetMappingVar), UserDataVar, glib.NewCallback(DestroyVar)) | 796 | + | var GetMappingVarRef uintptr |
| 797 | + | if GetMappingVar != nil { | |||
| 798 | + | GetMappingVarPtr := uintptr(unsafe.Pointer(GetMappingVar)) | |||
| 799 | + | if cbRefPtr, ok := glib.GetCallback(GetMappingVarPtr); ok { | |||
| 800 | + | GetMappingVarRef = cbRefPtr | |||
| 801 | + | } else { | |||
| 802 | + | fcb := func(arg0 *gobject.Value, arg1 *glib.Variant, arg2 uintptr) bool { | |||
| 803 | + | cbFn := *GetMappingVar | |||
| 804 | + | return cbFn(arg0, arg1, arg2) | |||
| 805 | + | } | |||
| 806 | + | GetMappingVarRef = purego.NewCallback(fcb) | |||
| 807 | + | glib.SaveCallback(GetMappingVarPtr, GetMappingVarRef) | |||
| 808 | + | } | |||
| 809 | + | } | |||
| 810 | + | ||||
| 811 | + | var SetMappingVarRef uintptr | |||
| 812 | + | if SetMappingVar != nil { | |||
| 813 | + | SetMappingVarPtr := uintptr(unsafe.Pointer(SetMappingVar)) | |||
| 814 | + | if cbRefPtr, ok := glib.GetCallback(SetMappingVarPtr); ok { | |||
| 815 | + | SetMappingVarRef = cbRefPtr | |||
| 816 | + | } else { | |||
| 817 | + | fcb := func(arg0 *gobject.Value, arg1 *glib.VariantType, arg2 uintptr) *glib.Variant { | |||
| 818 | + | cbFn := *SetMappingVar | |||
| 819 | + | return cbFn(arg0, arg1, arg2) | |||
| 820 | + | } | |||
| 821 | + | SetMappingVarRef = purego.NewCallback(fcb) | |||
| 822 | + | glib.SaveCallback(SetMappingVarPtr, SetMappingVarRef) | |||
| 823 | + | } | |||
| 824 | + | } | |||
| 825 | + | ||||
| 826 | + | DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar)) | |||
| 827 | + | var DestroyVarRef uintptr | |||
| 828 | + | if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok { | |||
| 829 | + | DestroyVarRef = cbRefPtr | |||
| 830 | + | } else { | |||
| 831 | + | fcb := func(arg0 uintptr) { | |||
| 832 | + | cbFn := *DestroyVar | |||
| 833 | + | cbFn(arg0) | |||
| 834 | + | } | |||
| 835 | + | DestroyVarRef = purego.NewCallback(fcb) | |||
| 836 | + | glib.SaveCallback(DestroyVarPtr, DestroyVarRef) | |||
| 837 | + | } | |||
| 838 | + | ||||
| 839 | + | xSettingsBindWithMapping(x.GoPointer(), KeyVar, ObjectVar.GoPointer(), PropertyVar, FlagsVar, GetMappingVarRef, SetMappingVarRef, UserDataVar, DestroyVarRef) | |||
| 797 | 840 | ||||
| 798 | } | 841 | } | ||
| 799 | 842 | ||||
| @@ -1085,7 +1128,20 @@ var xSettingsGetMapped func(uintptr, string, uintptr, uintptr) uintptr | |||||
| 1085 | // just as any other value would be. | 1128 | // just as any other value would be. | ||
| 1086 | func (x *Settings) GetMapped(KeyVar string, MappingVar *SettingsGetMapping, UserDataVar uintptr) uintptr { | 1129 | func (x *Settings) GetMapped(KeyVar string, MappingVar *SettingsGetMapping, UserDataVar uintptr) uintptr { | ||
| 1087 | 1130 | ||||
| 1088 | - | cret := xSettingsGetMapped(x.GoPointer(), KeyVar, glib.NewCallback(MappingVar), UserDataVar) | 1131 | + | MappingVarPtr := uintptr(unsafe.Pointer(MappingVar)) |
| 1132 | + | var MappingVarRef uintptr | |||
| 1133 | + | if cbRefPtr, ok := glib.GetCallback(MappingVarPtr); ok { | |||
| 1134 | + | MappingVarRef = cbRefPtr | |||
| 1135 | + | } else { | |||
| 1136 | + | fcb := func(arg0 *glib.Variant, arg1 *uintptr, arg2 uintptr) bool { | |||
| 1137 | + | cbFn := *MappingVar | |||
| 1138 | + | return cbFn(arg0, arg1, arg2) | |||
| 1139 | + | } | |||
| 1140 | + | MappingVarRef = purego.NewCallback(fcb) | |||
| 1141 | + | glib.SaveCallback(MappingVarPtr, MappingVarRef) | |||
| 1142 | + | } | |||
| 1143 | + | ||||
| 1144 | + | cret := xSettingsGetMapped(x.GoPointer(), KeyVar, MappingVarRef, UserDataVar) | |||
| 1089 | return cret | 1145 | return cret | ||
| 1090 | } | 1146 | } | ||
| 1091 | 1147 | ||||
M v4/gio/gsimpleasyncresult.go +140 -9
| @@ -27,7 +27,22 @@ var xSimpleAsyncReportErrorInIdle func(uintptr, uintptr, uintptr, glib.Quark, in | |||||
| 27 | // information. | 27 | // information. | ||
| 28 | func SimpleAsyncReportErrorInIdle(ObjectVar *gobject.Object, CallbackVar *AsyncReadyCallback, UserDataVar uintptr, DomainVar glib.Quark, CodeVar int, FormatVar string, varArgs ...interface{}) { | 28 | func SimpleAsyncReportErrorInIdle(ObjectVar *gobject.Object, CallbackVar *AsyncReadyCallback, UserDataVar uintptr, DomainVar glib.Quark, CodeVar int, FormatVar string, varArgs ...interface{}) { | ||
| 29 | 29 | ||||
| 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...) | |||
| 31 | 46 | ||||
| 32 | } | 47 | } | ||
| 33 | 48 | ||||
| @@ -38,7 +53,22 @@ var xSimpleAsyncReportGerrorInIdle func(uintptr, uintptr, uintptr, *glib.Error) | |||||
| 38 | // than building a new one. | 53 | // than building a new one. | ||
| 39 | func SimpleAsyncReportGerrorInIdle(ObjectVar *gobject.Object, CallbackVar *AsyncReadyCallback, UserDataVar uintptr, ErrorVar *glib.Error) { | 54 | func SimpleAsyncReportGerrorInIdle(ObjectVar *gobject.Object, CallbackVar *AsyncReadyCallback, UserDataVar uintptr, ErrorVar *glib.Error) { | ||
| 40 | 55 | ||||
| 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) | |||
| 42 | 72 | ||||
| 43 | } | 73 | } | ||
| 44 | 74 | ||||
| @@ -49,7 +79,22 @@ var xSimpleAsyncReportTakeGerrorInIdle func(uintptr, uintptr, uintptr, *glib.Err | |||||
| 49 | // ownership of @error, so the caller does not have to free it any more. | 79 | // ownership of @error, so the caller does not have to free it any more. | ||
| 50 | func SimpleAsyncReportTakeGerrorInIdle(ObjectVar *gobject.Object, CallbackVar *AsyncReadyCallback, UserDataVar uintptr, ErrorVar *glib.Error) { | 80 | func SimpleAsyncReportTakeGerrorInIdle(ObjectVar *gobject.Object, CallbackVar *AsyncReadyCallback, UserDataVar uintptr, ErrorVar *glib.Error) { | ||
| 51 | 81 | ||||
| 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) | |||
| 53 | 98 | ||||
| 54 | } | 99 | } | ||
| 55 | 100 | ||||
| @@ -257,7 +302,22 @@ var xNewSimpleAsyncResult func(uintptr, uintptr, uintptr, uintptr) uintptr | |||||
| 257 | func NewSimpleAsyncResult(SourceObjectVar *gobject.Object, CallbackVar *AsyncReadyCallback, UserDataVar uintptr, SourceTagVar uintptr) *SimpleAsyncResult { | 302 | func NewSimpleAsyncResult(SourceObjectVar *gobject.Object, CallbackVar *AsyncReadyCallback, UserDataVar uintptr, SourceTagVar uintptr) *SimpleAsyncResult { | ||
| 258 | var cls *SimpleAsyncResult | 303 | var cls *SimpleAsyncResult | ||
| 259 | 304 | ||||
| 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) | |||
| 261 | 321 | ||||
| 262 | if cret == 0 { | 322 | if cret == 0 { | ||
| 263 | return nil | 323 | return nil | ||
| @@ -273,7 +333,22 @@ var xNewSimpleAsyncResultError func(uintptr, uintptr, uintptr, glib.Quark, int, | |||||
| 273 | func NewSimpleAsyncResultError(SourceObjectVar *gobject.Object, CallbackVar *AsyncReadyCallback, UserDataVar uintptr, DomainVar glib.Quark, CodeVar int, FormatVar string, varArgs ...interface{}) *SimpleAsyncResult { | 333 | func NewSimpleAsyncResultError(SourceObjectVar *gobject.Object, CallbackVar *AsyncReadyCallback, UserDataVar uintptr, DomainVar glib.Quark, CodeVar int, FormatVar string, varArgs ...interface{}) *SimpleAsyncResult { | ||
| 274 | var cls *SimpleAsyncResult | 334 | var cls *SimpleAsyncResult | ||
| 275 | 335 | ||||
| 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...) | |||
| 277 | 352 | ||||
| 278 | if cret == 0 { | 353 | if cret == 0 { | ||
| 279 | return nil | 354 | return nil | ||
| @@ -289,7 +364,22 @@ var xNewSimpleAsyncResultFromError func(uintptr, uintptr, uintptr, *glib.Error) | |||||
| 289 | func NewSimpleAsyncResultFromError(SourceObjectVar *gobject.Object, CallbackVar *AsyncReadyCallback, UserDataVar uintptr, ErrorVar *glib.Error) *SimpleAsyncResult { | 364 | func NewSimpleAsyncResultFromError(SourceObjectVar *gobject.Object, CallbackVar *AsyncReadyCallback, UserDataVar uintptr, ErrorVar *glib.Error) *SimpleAsyncResult { | ||
| 290 | var cls *SimpleAsyncResult | 365 | var cls *SimpleAsyncResult | ||
| 291 | 366 | ||||
| 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) | |||
| 293 | 383 | ||||
| 294 | if cret == 0 { | 384 | if cret == 0 { | ||
| 295 | return nil | 385 | return nil | ||
| @@ -306,7 +396,22 @@ var xNewSimpleAsyncResultTakeError func(uintptr, uintptr, uintptr, *glib.Error) | |||||
| 306 | func NewSimpleAsyncResultTakeError(SourceObjectVar *gobject.Object, CallbackVar *AsyncReadyCallback, UserDataVar uintptr, ErrorVar *glib.Error) *SimpleAsyncResult { | 396 | func NewSimpleAsyncResultTakeError(SourceObjectVar *gobject.Object, CallbackVar *AsyncReadyCallback, UserDataVar uintptr, ErrorVar *glib.Error) *SimpleAsyncResult { | ||
| 307 | var cls *SimpleAsyncResult | 397 | var cls *SimpleAsyncResult | ||
| 308 | 398 | ||||
| 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) | |||
| 310 | 415 | ||||
| 311 | if cret == 0 { | 416 | if cret == 0 { | ||
| 312 | return nil | 417 | return nil | ||
| @@ -411,7 +516,20 @@ var xSimpleAsyncResultRunInThread func(uintptr, uintptr, int, uintptr) | |||||
| 411 | // is needed to run the job and report its completion. | 516 | // is needed to run the job and report its completion. | ||
| 412 | func (x *SimpleAsyncResult) RunInThread(FuncVar *SimpleAsyncThreadFunc, IoPriorityVar int, CancellableVar *Cancellable) { | 517 | func (x *SimpleAsyncResult) RunInThread(FuncVar *SimpleAsyncThreadFunc, IoPriorityVar int, CancellableVar *Cancellable) { | ||
| 413 | 518 | ||||
| 414 | - | xSimpleAsyncResultRunInThread(x.GoPointer(), glib.NewCallback(FuncVar), IoPriorityVar, CancellableVar.GoPointer()) | 519 | + | FuncVarPtr := uintptr(unsafe.Pointer(FuncVar)) |
| 520 | + | var FuncVarRef uintptr | |||
| 521 | + | if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok { | |||
| 522 | + | FuncVarRef = cbRefPtr | |||
| 523 | + | } else { | |||
| 524 | + | fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) { | |||
| 525 | + | cbFn := *FuncVar | |||
| 526 | + | cbFn(arg0, arg1, arg2) | |||
| 527 | + | } | |||
| 528 | + | FuncVarRef = purego.NewCallback(fcb) | |||
| 529 | + | glib.SaveCallback(FuncVarPtr, FuncVarRef) | |||
| 530 | + | } | |||
| 531 | + | ||||
| 532 | + | xSimpleAsyncResultRunInThread(x.GoPointer(), FuncVarRef, IoPriorityVar, CancellableVar.GoPointer()) | |||
| 415 | 533 | ||||
| 416 | } | 534 | } | ||
| 417 | 535 | ||||
| @@ -493,7 +611,20 @@ var xSimpleAsyncResultSetOpResGpointer func(uintptr, uintptr, uintptr) | |||||
| 493 | // Sets the operation result within the asynchronous result to a pointer. | 611 | // Sets the operation result within the asynchronous result to a pointer. | ||
| 494 | func (x *SimpleAsyncResult) SetOpResGpointer(OpResVar uintptr, DestroyOpResVar *glib.DestroyNotify) { | 612 | func (x *SimpleAsyncResult) SetOpResGpointer(OpResVar uintptr, DestroyOpResVar *glib.DestroyNotify) { | ||
| 495 | 613 | ||||
| 496 | - | xSimpleAsyncResultSetOpResGpointer(x.GoPointer(), OpResVar, glib.NewCallback(DestroyOpResVar)) | 614 | + | DestroyOpResVarPtr := uintptr(unsafe.Pointer(DestroyOpResVar)) |
| 615 | + | var DestroyOpResVarRef uintptr | |||
| 616 | + | if cbRefPtr, ok := glib.GetCallback(DestroyOpResVarPtr); ok { | |||
| 617 | + | DestroyOpResVarRef = cbRefPtr | |||
| 618 | + | } else { | |||
| 619 | + | fcb := func(arg0 uintptr) { | |||
| 620 | + | cbFn := *DestroyOpResVar | |||
| 621 | + | cbFn(arg0) | |||
| 622 | + | } | |||
| 623 | + | DestroyOpResVarRef = purego.NewCallback(fcb) | |||
| 624 | + | glib.SaveCallback(DestroyOpResVarPtr, DestroyOpResVarRef) | |||
| 625 | + | } | |||
| 626 | + | ||||
| 627 | + | xSimpleAsyncResultSetOpResGpointer(x.GoPointer(), OpResVar, DestroyOpResVarRef) | |||
| 497 | 628 | ||||
| 498 | } | 629 | } | ||
| 499 | 630 | ||||
M v4/gio/gsocketaddressenumerator.go +16 -1
| @@ -197,7 +197,22 @@ var xSocketAddressEnumeratorNextAsync func(uintptr, uintptr, uintptr, uintptr) | |||||
| 197 | // It is an error to call this multiple times before the previous callback has finished. | 197 | // It is an error to call this multiple times before the previous callback has finished. | ||
| 198 | func (x *SocketAddressEnumerator) NextAsync(CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | 198 | func (x *SocketAddressEnumerator) NextAsync(CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | ||
| 199 | 199 | ||||
| 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) | |||
| 201 | 216 | ||||
| 202 | } | 217 | } | ||
| 203 | 218 | ||||
M v4/gio/gsocketclient.go +64 -4
| @@ -283,7 +283,22 @@ var xSocketClientConnectAsync func(uintptr, uintptr, uintptr, uintptr, uintptr) | |||||
| 283 | // the result of the operation. | 283 | // the result of the operation. | ||
| 284 | func (x *SocketClient) ConnectAsync(ConnectableVar SocketConnectable, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | 284 | func (x *SocketClient) ConnectAsync(ConnectableVar SocketConnectable, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | ||
| 285 | 285 | ||||
| 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) | |||
| 287 | 302 | ||||
| 288 | } | 303 | } | ||
| 289 | 304 | ||||
| @@ -367,7 +382,22 @@ var xSocketClientConnectToHostAsync func(uintptr, string, uint16, uintptr, uintp | |||||
| 367 | // the result of the operation. | 382 | // the result of the operation. | ||
| 368 | func (x *SocketClient) ConnectToHostAsync(HostAndPortVar string, DefaultPortVar uint16, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | 383 | func (x *SocketClient) ConnectToHostAsync(HostAndPortVar string, DefaultPortVar uint16, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | ||
| 369 | 384 | ||||
| 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) | |||
| 371 | 401 | ||||
| 372 | } | 402 | } | ||
| 373 | 403 | ||||
| @@ -432,7 +462,22 @@ var xSocketClientConnectToServiceAsync func(uintptr, string, string, uintptr, ui | |||||
| 432 | // g_socket_client_connect_to_service(). | 462 | // g_socket_client_connect_to_service(). | ||
| 433 | func (x *SocketClient) ConnectToServiceAsync(DomainVar string, ServiceVar string, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | 463 | func (x *SocketClient) ConnectToServiceAsync(DomainVar string, ServiceVar string, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | ||
| 434 | 464 | ||||
| 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) | |||
| 436 | 481 | ||||
| 437 | } | 482 | } | ||
| 438 | 483 | ||||
| @@ -507,7 +552,22 @@ var xSocketClientConnectToUriAsync func(uintptr, string, uint16, uintptr, uintpt | |||||
| 507 | // the result of the operation. | 552 | // the result of the operation. | ||
| 508 | func (x *SocketClient) ConnectToUriAsync(UriVar string, DefaultPortVar uint16, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | 553 | func (x *SocketClient) ConnectToUriAsync(UriVar string, DefaultPortVar uint16, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | ||
| 509 | 554 | ||||
| 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) | |||
| 511 | 571 | ||||
| 512 | } | 572 | } | ||
| 513 | 573 | ||||
M v4/gio/gsocketconnection.go +16 -1
| @@ -240,7 +240,22 @@ var xSocketConnectionConnectAsync func(uintptr, uintptr, uintptr, uintptr, uintp | |||||
| 240 | // Use g_socket_connection_connect_finish() to retrieve the result. | 240 | // Use g_socket_connection_connect_finish() to retrieve the result. | ||
| 241 | func (x *SocketConnection) ConnectAsync(AddressVar *SocketAddress, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | 241 | func (x *SocketConnection) ConnectAsync(AddressVar *SocketAddress, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | ||
| 242 | 242 | ||||
| 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) | |||
| 244 | 259 | ||||
| 245 | } | 260 | } | ||
| 246 | 261 | ||||
M v4/gio/gsocketlistener.go +32 -2
| @@ -297,7 +297,22 @@ var xSocketListenerAcceptAsync func(uintptr, uintptr, uintptr, uintptr) | |||||
| 297 | // to get the result of the operation. | 297 | // to get the result of the operation. | ||
| 298 | func (x *SocketListener) AcceptAsync(CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | 298 | func (x *SocketListener) AcceptAsync(CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | ||
| 299 | 299 | ||||
| 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) | |||
| 301 | 316 | ||||
| 302 | } | 317 | } | ||
| 303 | 318 | ||||
| @@ -365,7 +380,22 @@ var xSocketListenerAcceptSocketAsync func(uintptr, uintptr, uintptr, uintptr) | |||||
| 365 | // to get the result of the operation. | 380 | // to get the result of the operation. | ||
| 366 | func (x *SocketListener) AcceptSocketAsync(CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | 381 | func (x *SocketListener) AcceptSocketAsync(CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | ||
| 367 | 382 | ||||
| 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) | |||
| 369 | 399 | ||||
| 370 | } | 400 | } | ||
| 371 | 401 | ||||
M v4/gio/gsubprocess.go +64 -4
| @@ -195,7 +195,22 @@ var xSubprocessCommunicateAsync func(uintptr, *glib.Bytes, uintptr, uintptr, uin | |||||
| 195 | // invocation with g_subprocess_communicate_finish(). | 195 | // invocation with g_subprocess_communicate_finish(). | ||
| 196 | func (x *Subprocess) CommunicateAsync(StdinBufVar *glib.Bytes, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | 196 | func (x *Subprocess) CommunicateAsync(StdinBufVar *glib.Bytes, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | ||
| 197 | 197 | ||||
| 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) | |||
| 199 | 214 | ||||
| 200 | } | 215 | } | ||
| 201 | 216 | ||||
| @@ -237,7 +252,22 @@ var xSubprocessCommunicateUtf8Async func(uintptr, string, uintptr, uintptr, uint | |||||
| 237 | // invocation with g_subprocess_communicate_utf8_finish(). | 252 | // 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) { | ||
| 239 | 254 | ||||
| 240 | - | xSubprocessCommunicateUtf8Async(x.GoPointer(), StdinBufVar, CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar) | 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 | + | } | |||
| 269 | + | ||||
| 270 | + | xSubprocessCommunicateUtf8Async(x.GoPointer(), StdinBufVar, CancellableVar.GoPointer(), CallbackVarRef, UserDataVar) | |||
| 241 | 271 | ||||
| 242 | } | 272 | } | ||
| 243 | 273 | ||||
| @@ -483,7 +513,22 @@ var xSubprocessWaitAsync func(uintptr, uintptr, uintptr, uintptr) | |||||
| 483 | // This is the asynchronous version of g_subprocess_wait(). | 513 | // This is the asynchronous version of g_subprocess_wait(). | ||
| 484 | func (x *Subprocess) WaitAsync(CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | 514 | func (x *Subprocess) WaitAsync(CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | ||
| 485 | 515 | ||||
| 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) | |||
| 487 | 532 | ||||
| 488 | } | 533 | } | ||
| 489 | 534 | ||||
| @@ -508,7 +553,22 @@ var xSubprocessWaitCheckAsync func(uintptr, uintptr, uintptr, uintptr) | |||||
| 508 | // This is the asynchronous version of g_subprocess_wait_check(). | 553 | // This is the asynchronous version of g_subprocess_wait_check(). | ||
| 509 | func (x *Subprocess) WaitCheckAsync(CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | 554 | func (x *Subprocess) WaitCheckAsync(CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | ||
| 510 | 555 | ||||
| 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) | |||
| 512 | 572 | ||||
| 513 | } | 573 | } | ||
| 514 | 574 | ||||
M v4/gio/gsubprocesslauncher.go +29 -1
| @@ -2,6 +2,8 @@ | |||||
| 2 | package gio | 2 | package gio | ||
| 3 | 3 | ||||
| 4 | import ( | 4 | import ( | ||
| 5 | + | "unsafe" | |||
| 6 | + | ||||
| 5 | "github.com/jwijenbergh/purego" | 7 | "github.com/jwijenbergh/purego" | ||
| 6 | "github.com/jwijenbergh/puregotk/pkg/core" | 8 | "github.com/jwijenbergh/puregotk/pkg/core" | ||
| 7 | "github.com/jwijenbergh/puregotk/v4/glib" | 9 | "github.com/jwijenbergh/puregotk/v4/glib" | ||
| @@ -101,7 +103,33 @@ var xSubprocessLauncherSetChildSetup func(uintptr, uintptr, uintptr, uintptr) | |||||
| 101 | // Child setup functions are only available on UNIX. | 103 | // Child setup functions are only available on UNIX. | ||
| 102 | func (x *SubprocessLauncher) SetChildSetup(ChildSetupVar *glib.SpawnChildSetupFunc, UserDataVar uintptr, DestroyNotifyVar *glib.DestroyNotify) { | 104 | func (x *SubprocessLauncher) SetChildSetup(ChildSetupVar *glib.SpawnChildSetupFunc, UserDataVar uintptr, DestroyNotifyVar *glib.DestroyNotify) { | ||
| 103 | 105 | ||||
| 104 | - | xSubprocessLauncherSetChildSetup(x.GoPointer(), glib.NewCallback(ChildSetupVar), UserDataVar, glib.NewCallback(DestroyNotifyVar)) | 106 | + | ChildSetupVarPtr := uintptr(unsafe.Pointer(ChildSetupVar)) |
| 107 | + | var ChildSetupVarRef uintptr | |||
| 108 | + | if cbRefPtr, ok := glib.GetCallback(ChildSetupVarPtr); ok { | |||
| 109 | + | ChildSetupVarRef = cbRefPtr | |||
| 110 | + | } else { | |||
| 111 | + | fcb := func(arg0 uintptr) { | |||
| 112 | + | cbFn := *ChildSetupVar | |||
| 113 | + | cbFn(arg0) | |||
| 114 | + | } | |||
| 115 | + | ChildSetupVarRef = purego.NewCallback(fcb) | |||
| 116 | + | glib.SaveCallback(ChildSetupVarPtr, ChildSetupVarRef) | |||
| 117 | + | } | |||
| 118 | + | ||||
| 119 | + | DestroyNotifyVarPtr := uintptr(unsafe.Pointer(DestroyNotifyVar)) | |||
| 120 | + | var DestroyNotifyVarRef uintptr | |||
| 121 | + | if cbRefPtr, ok := glib.GetCallback(DestroyNotifyVarPtr); ok { | |||
| 122 | + | DestroyNotifyVarRef = cbRefPtr | |||
| 123 | + | } else { | |||
| 124 | + | fcb := func(arg0 uintptr) { | |||
| 125 | + | cbFn := *DestroyNotifyVar | |||
| 126 | + | cbFn(arg0) | |||
| 127 | + | } | |||
| 128 | + | DestroyNotifyVarRef = purego.NewCallback(fcb) | |||
| 129 | + | glib.SaveCallback(DestroyNotifyVarPtr, DestroyNotifyVarRef) | |||
| 130 | + | } | |||
| 131 | + | ||||
| 132 | + | xSubprocessLauncherSetChildSetup(x.GoPointer(), ChildSetupVarRef, UserDataVar, DestroyNotifyVarRef) | |||
| 105 | 133 | ||||
| 106 | } | 134 | } | ||
| 107 | 135 | ||||
M v4/gio/gtask.go +122 -8
| @@ -633,7 +633,22 @@ var xNewTask func(uintptr, uintptr, uintptr, uintptr) uintptr | |||||
| 633 | func NewTask(SourceObjectVar *gobject.Object, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, CallbackDataVar uintptr) *Task { | 633 | func NewTask(SourceObjectVar *gobject.Object, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, CallbackDataVar uintptr) *Task { | ||
| 634 | var cls *Task | 634 | var cls *Task | ||
| 635 | 635 | ||||
| 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) | |||
| 637 | 652 | ||||
| 638 | if cret == 0 { | 653 | if cret == 0 { | ||
| 639 | return nil | 654 | return nil | ||
| @@ -658,7 +673,20 @@ var xTaskAttachSource func(uintptr, *glib.Source, uintptr) | |||||
| 658 | // This takes a reference on @task until @source is destroyed. | 673 | // This takes a reference on @task until @source is destroyed. | ||
| 659 | func (x *Task) AttachSource(SourceVar *glib.Source, CallbackVar *glib.SourceFunc) { | 674 | func (x *Task) AttachSource(SourceVar *glib.Source, CallbackVar *glib.SourceFunc) { | ||
| 660 | 675 | ||||
| 661 | - | xTaskAttachSource(x.GoPointer(), SourceVar, glib.NewCallback(CallbackVar)) | 676 | + | CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar)) |
| 677 | + | var CallbackVarRef uintptr | |||
| 678 | + | if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok { | |||
| 679 | + | CallbackVarRef = cbRefPtr | |||
| 680 | + | } else { | |||
| 681 | + | fcb := func(arg0 uintptr) bool { | |||
| 682 | + | cbFn := *CallbackVar | |||
| 683 | + | return cbFn(arg0) | |||
| 684 | + | } | |||
| 685 | + | CallbackVarRef = purego.NewCallback(fcb) | |||
| 686 | + | glib.SaveCallback(CallbackVarPtr, CallbackVarRef) | |||
| 687 | + | } | |||
| 688 | + | ||||
| 689 | + | xTaskAttachSource(x.GoPointer(), SourceVar, CallbackVarRef) | |||
| 662 | 690 | ||||
| 663 | } | 691 | } | ||
| 664 | 692 | ||||
| @@ -977,7 +1005,22 @@ var xTaskReturnPointer func(uintptr, uintptr, uintptr) | |||||
| 977 | // reference on it. | 1005 | // reference on it. | ||
| 978 | func (x *Task) ReturnPointer(ResultVar uintptr, ResultDestroyVar *glib.DestroyNotify) { | 1006 | func (x *Task) ReturnPointer(ResultVar uintptr, ResultDestroyVar *glib.DestroyNotify) { | ||
| 979 | 1007 | ||||
| 980 | - | xTaskReturnPointer(x.GoPointer(), ResultVar, glib.NewCallbackNullable(ResultDestroyVar)) | 1008 | + | var ResultDestroyVarRef uintptr |
| 1009 | + | if ResultDestroyVar != nil { | |||
| 1010 | + | ResultDestroyVarPtr := uintptr(unsafe.Pointer(ResultDestroyVar)) | |||
| 1011 | + | if cbRefPtr, ok := glib.GetCallback(ResultDestroyVarPtr); ok { | |||
| 1012 | + | ResultDestroyVarRef = cbRefPtr | |||
| 1013 | + | } else { | |||
| 1014 | + | fcb := func(arg0 uintptr) { | |||
| 1015 | + | cbFn := *ResultDestroyVar | |||
| 1016 | + | cbFn(arg0) | |||
| 1017 | + | } | |||
| 1018 | + | ResultDestroyVarRef = purego.NewCallback(fcb) | |||
| 1019 | + | glib.SaveCallback(ResultDestroyVarPtr, ResultDestroyVarRef) | |||
| 1020 | + | } | |||
| 1021 | + | } | |||
| 1022 | + | ||||
| 1023 | + | xTaskReturnPointer(x.GoPointer(), ResultVar, ResultDestroyVarRef) | |||
| 981 | 1024 | ||||
| 982 | } | 1025 | } | ||
| 983 | 1026 | ||||
| @@ -1040,7 +1083,20 @@ var xTaskRunInThread func(uintptr, uintptr) | |||||
| 1040 | // g_task_run_in_thread(). | 1083 | // g_task_run_in_thread(). | ||
| 1041 | func (x *Task) RunInThread(TaskFuncVar *TaskThreadFunc) { | 1084 | func (x *Task) RunInThread(TaskFuncVar *TaskThreadFunc) { | ||
| 1042 | 1085 | ||||
| 1043 | - | xTaskRunInThread(x.GoPointer(), glib.NewCallback(TaskFuncVar)) | 1086 | + | TaskFuncVarPtr := uintptr(unsafe.Pointer(TaskFuncVar)) |
| 1087 | + | var TaskFuncVarRef uintptr | |||
| 1088 | + | if cbRefPtr, ok := glib.GetCallback(TaskFuncVarPtr); ok { | |||
| 1089 | + | TaskFuncVarRef = cbRefPtr | |||
| 1090 | + | } else { | |||
| 1091 | + | fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr, arg3 uintptr) { | |||
| 1092 | + | cbFn := *TaskFuncVar | |||
| 1093 | + | cbFn(arg0, arg1, arg2, arg3) | |||
| 1094 | + | } | |||
| 1095 | + | TaskFuncVarRef = purego.NewCallback(fcb) | |||
| 1096 | + | glib.SaveCallback(TaskFuncVarPtr, TaskFuncVarRef) | |||
| 1097 | + | } | |||
| 1098 | + | ||||
| 1099 | + | xTaskRunInThread(x.GoPointer(), TaskFuncVarRef) | |||
| 1044 | 1100 | ||||
| 1045 | } | 1101 | } | ||
| 1046 | 1102 | ||||
| @@ -1064,7 +1120,20 @@ var xTaskRunInThreadSync func(uintptr, uintptr) | |||||
| 1064 | // limited number of them at a time. | 1120 | // limited number of them at a time. | ||
| 1065 | func (x *Task) RunInThreadSync(TaskFuncVar *TaskThreadFunc) { | 1121 | func (x *Task) RunInThreadSync(TaskFuncVar *TaskThreadFunc) { | ||
| 1066 | 1122 | ||||
| 1067 | - | xTaskRunInThreadSync(x.GoPointer(), glib.NewCallback(TaskFuncVar)) | 1123 | + | TaskFuncVarPtr := uintptr(unsafe.Pointer(TaskFuncVar)) |
| 1124 | + | var TaskFuncVarRef uintptr | |||
| 1125 | + | if cbRefPtr, ok := glib.GetCallback(TaskFuncVarPtr); ok { | |||
| 1126 | + | TaskFuncVarRef = cbRefPtr | |||
| 1127 | + | } else { | |||
| 1128 | + | fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr, arg3 uintptr) { | |||
| 1129 | + | cbFn := *TaskFuncVar | |||
| 1130 | + | cbFn(arg0, arg1, arg2, arg3) | |||
| 1131 | + | } | |||
| 1132 | + | TaskFuncVarRef = purego.NewCallback(fcb) | |||
| 1133 | + | glib.SaveCallback(TaskFuncVarPtr, TaskFuncVarRef) | |||
| 1134 | + | } | |||
| 1135 | + | ||||
| 1136 | + | xTaskRunInThreadSync(x.GoPointer(), TaskFuncVarRef) | |||
| 1068 | 1137 | ||||
| 1069 | } | 1138 | } | ||
| 1070 | 1139 | ||||
| @@ -1197,7 +1266,22 @@ var xTaskSetTaskData func(uintptr, uintptr, uintptr) | |||||
| 1197 | // Sets @task's task data (freeing the existing task data, if any). | 1266 | // Sets @task's task data (freeing the existing task data, if any). | ||
| 1198 | func (x *Task) SetTaskData(TaskDataVar uintptr, TaskDataDestroyVar *glib.DestroyNotify) { | 1267 | func (x *Task) SetTaskData(TaskDataVar uintptr, TaskDataDestroyVar *glib.DestroyNotify) { | ||
| 1199 | 1268 | ||||
| 1200 | - | xTaskSetTaskData(x.GoPointer(), TaskDataVar, glib.NewCallbackNullable(TaskDataDestroyVar)) | 1269 | + | var TaskDataDestroyVarRef uintptr |
| 1270 | + | if TaskDataDestroyVar != nil { | |||
| 1271 | + | TaskDataDestroyVarPtr := uintptr(unsafe.Pointer(TaskDataDestroyVar)) | |||
| 1272 | + | if cbRefPtr, ok := glib.GetCallback(TaskDataDestroyVarPtr); ok { | |||
| 1273 | + | TaskDataDestroyVarRef = cbRefPtr | |||
| 1274 | + | } else { | |||
| 1275 | + | fcb := func(arg0 uintptr) { | |||
| 1276 | + | cbFn := *TaskDataDestroyVar | |||
| 1277 | + | cbFn(arg0) | |||
| 1278 | + | } | |||
| 1279 | + | TaskDataDestroyVarRef = purego.NewCallback(fcb) | |||
| 1280 | + | glib.SaveCallback(TaskDataDestroyVarPtr, TaskDataDestroyVarRef) | |||
| 1281 | + | } | |||
| 1282 | + | } | |||
| 1283 | + | ||||
| 1284 | + | xTaskSetTaskData(x.GoPointer(), TaskDataVar, TaskDataDestroyVarRef) | |||
| 1201 | 1285 | ||||
| 1202 | } | 1286 | } | ||
| 1203 | 1287 | ||||
| @@ -1296,7 +1380,22 @@ var xTaskReportError func(uintptr, uintptr, uintptr, uintptr, *glib.Error) | |||||
| 1296 | // See also g_task_report_new_error(). | 1380 | // See also g_task_report_new_error(). | ||
| 1297 | func TaskReportError(SourceObjectVar *gobject.Object, CallbackVar *AsyncReadyCallback, CallbackDataVar uintptr, SourceTagVar uintptr, ErrorVar *glib.Error) { | 1381 | func TaskReportError(SourceObjectVar *gobject.Object, CallbackVar *AsyncReadyCallback, CallbackDataVar uintptr, SourceTagVar uintptr, ErrorVar *glib.Error) { | ||
| 1298 | 1382 | ||||
| 1299 | - | xTaskReportError(SourceObjectVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), CallbackDataVar, SourceTagVar, ErrorVar) | 1383 | + | var CallbackVarRef uintptr |
| 1384 | + | if CallbackVar != nil { | |||
| 1385 | + | CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar)) | |||
| 1386 | + | if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok { | |||
| 1387 | + | CallbackVarRef = cbRefPtr | |||
| 1388 | + | } else { | |||
| 1389 | + | fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) { | |||
| 1390 | + | cbFn := *CallbackVar | |||
| 1391 | + | cbFn(arg0, arg1, arg2) | |||
| 1392 | + | } | |||
| 1393 | + | CallbackVarRef = purego.NewCallback(fcb) | |||
| 1394 | + | glib.SaveCallback(CallbackVarPtr, CallbackVarRef) | |||
| 1395 | + | } | |||
| 1396 | + | } | |||
| 1397 | + | ||||
| 1398 | + | xTaskReportError(SourceObjectVar.GoPointer(), CallbackVarRef, CallbackDataVar, SourceTagVar, ErrorVar) | |||
| 1300 | 1399 | ||||
| 1301 | } | 1400 | } | ||
| 1302 | 1401 | ||||
| @@ -1313,7 +1412,22 @@ var xTaskReportNewError func(uintptr, uintptr, uintptr, uintptr, glib.Quark, int | |||||
| 1313 | // See also g_task_report_error(). | 1412 | // See also g_task_report_error(). | ||
| 1314 | func TaskReportNewError(SourceObjectVar *gobject.Object, CallbackVar *AsyncReadyCallback, CallbackDataVar uintptr, SourceTagVar uintptr, DomainVar glib.Quark, CodeVar int, FormatVar string, varArgs ...interface{}) { | 1413 | func TaskReportNewError(SourceObjectVar *gobject.Object, CallbackVar *AsyncReadyCallback, CallbackDataVar uintptr, SourceTagVar uintptr, DomainVar glib.Quark, CodeVar int, FormatVar string, varArgs ...interface{}) { | ||
| 1315 | 1414 | ||||
| 1316 | - | xTaskReportNewError(SourceObjectVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), CallbackDataVar, SourceTagVar, DomainVar, CodeVar, FormatVar, varArgs...) | 1415 | + | var CallbackVarRef uintptr |
| 1416 | + | if CallbackVar != nil { | |||
| 1417 | + | CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar)) | |||
| 1418 | + | if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok { | |||
| 1419 | + | CallbackVarRef = cbRefPtr | |||
| 1420 | + | } else { | |||
| 1421 | + | fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) { | |||
| 1422 | + | cbFn := *CallbackVar | |||
| 1423 | + | cbFn(arg0, arg1, arg2) | |||
| 1424 | + | } | |||
| 1425 | + | CallbackVarRef = purego.NewCallback(fcb) | |||
| 1426 | + | glib.SaveCallback(CallbackVarPtr, CallbackVarRef) | |||
| 1427 | + | } | |||
| 1428 | + | } | |||
| 1429 | + | ||||
| 1430 | + | xTaskReportNewError(SourceObjectVar.GoPointer(), CallbackVarRef, CallbackDataVar, SourceTagVar, DomainVar, CodeVar, FormatVar, varArgs...) | |||
| 1317 | 1431 | ||||
| 1318 | } | 1432 | } | ||
| 1319 | 1433 | ||||
M v4/gio/gtlsconnection.go +16 -1
| @@ -483,7 +483,22 @@ var xTlsConnectionHandshakeAsync func(uintptr, int, uintptr, uintptr, uintptr) | |||||
| 483 | // g_tls_connection_handshake() for more information. | 483 | // g_tls_connection_handshake() for more information. | ||
| 484 | func (x *TlsConnection) HandshakeAsync(IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | 484 | func (x *TlsConnection) HandshakeAsync(IoPriorityVar int, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | ||
| 485 | 485 | ||||
| 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) | |||
| 487 | 502 | ||||
| 488 | } | 503 | } | ||
| 489 | 504 | ||||
M v4/gio/gtlsdatabase.go +64 -4
| @@ -566,7 +566,22 @@ var xTlsDatabaseLookupCertificateForHandleAsync func(uintptr, string, uintptr, T | |||||
| 566 | // g_tls_database_lookup_certificate_for_handle() for more information. | 566 | // g_tls_database_lookup_certificate_for_handle() for more information. | ||
| 567 | func (x *TlsDatabase) LookupCertificateForHandleAsync(HandleVar string, InteractionVar *TlsInteraction, FlagsVar TlsDatabaseLookupFlags, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | 567 | func (x *TlsDatabase) LookupCertificateForHandleAsync(HandleVar string, InteractionVar *TlsInteraction, FlagsVar TlsDatabaseLookupFlags, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | ||
| 568 | 568 | ||||
| 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) | |||
| 570 | 585 | ||||
| 571 | } | 586 | } | ||
| 572 | 587 | ||||
| @@ -641,7 +656,22 @@ var xTlsDatabaseLookupCertificateIssuerAsync func(uintptr, uintptr, uintptr, Tls | |||||
| 641 | // g_tls_database_lookup_certificate_issuer() for more information. | 656 | // g_tls_database_lookup_certificate_issuer() for more information. | ||
| 642 | func (x *TlsDatabase) LookupCertificateIssuerAsync(CertificateVar *TlsCertificate, InteractionVar *TlsInteraction, FlagsVar TlsDatabaseLookupFlags, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | 657 | func (x *TlsDatabase) LookupCertificateIssuerAsync(CertificateVar *TlsCertificate, InteractionVar *TlsInteraction, FlagsVar TlsDatabaseLookupFlags, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | ||
| 643 | 658 | ||||
| 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) | |||
| 645 | 675 | ||||
| 646 | } | 676 | } | ||
| 647 | 677 | ||||
| @@ -694,7 +724,22 @@ var xTlsDatabaseLookupCertificatesIssuedByAsync func(uintptr, []byte, uintptr, T | |||||
| 694 | // this time. | 724 | // this time. | ||
| 695 | func (x *TlsDatabase) LookupCertificatesIssuedByAsync(IssuerRawDnVar []byte, InteractionVar *TlsInteraction, FlagsVar TlsDatabaseLookupFlags, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | 725 | func (x *TlsDatabase) LookupCertificatesIssuedByAsync(IssuerRawDnVar []byte, InteractionVar *TlsInteraction, FlagsVar TlsDatabaseLookupFlags, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | ||
| 696 | 726 | ||||
| 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) | |||
| 698 | 743 | ||||
| 699 | } | 744 | } | ||
| 700 | 745 | ||||
| @@ -793,7 +838,22 @@ var xTlsDatabaseVerifyChainAsync func(uintptr, uintptr, string, uintptr, uintptr | |||||
| 793 | // g_tls_database_verify_chain() for more information. | 838 | // g_tls_database_verify_chain() for more information. | ||
| 794 | func (x *TlsDatabase) VerifyChainAsync(ChainVar *TlsCertificate, PurposeVar string, IdentityVar SocketConnectable, InteractionVar *TlsInteraction, FlagsVar TlsDatabaseVerifyFlags, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | 839 | func (x *TlsDatabase) VerifyChainAsync(ChainVar *TlsCertificate, PurposeVar string, IdentityVar SocketConnectable, InteractionVar *TlsInteraction, FlagsVar TlsDatabaseVerifyFlags, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | ||
| 795 | 840 | ||||
| 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) | |||
| 797 | 857 | ||||
| 798 | } | 858 | } | ||
| 799 | 859 | ||||
M v4/gio/gtlsinteraction.go +32 -2
| @@ -321,7 +321,22 @@ var xTlsInteractionAskPasswordAsync func(uintptr, uintptr, uintptr, uintptr, uin | |||||
| 321 | // Certain implementations may not support immediate cancellation. | 321 | // Certain implementations may not support immediate cancellation. | ||
| 322 | func (x *TlsInteraction) AskPasswordAsync(PasswordVar *TlsPassword, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | 322 | func (x *TlsInteraction) AskPasswordAsync(PasswordVar *TlsPassword, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | ||
| 323 | 323 | ||||
| 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) | |||
| 325 | 340 | ||||
| 326 | } | 341 | } | ||
| 327 | 342 | ||||
| @@ -453,7 +468,22 @@ var xTlsInteractionRequestCertificateAsync func(uintptr, uintptr, TlsCertificate | |||||
| 453 | // request, which will usually abort the TLS connection. | 468 | // request, which will usually abort the TLS connection. | ||
| 454 | func (x *TlsInteraction) RequestCertificateAsync(ConnectionVar *TlsConnection, FlagsVar TlsCertificateRequestFlags, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | 469 | func (x *TlsInteraction) RequestCertificateAsync(ConnectionVar *TlsConnection, FlagsVar TlsCertificateRequestFlags, CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | ||
| 455 | 470 | ||||
| 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) | |||
| 457 | 487 | ||||
| 458 | } | 488 | } | ||
| 459 | 489 | ||||
M v4/gio/gtlspassword.go +16 -1
| @@ -240,7 +240,22 @@ var xTlsPasswordSetValueFull func(uintptr, []byte, int, uintptr) | |||||
| 240 | // considered part of the password in this case.) | 240 | // considered part of the password in this case.) | ||
| 241 | func (x *TlsPassword) SetValueFull(ValueVar []byte, LengthVar int, DestroyVar *glib.DestroyNotify) { | 241 | func (x *TlsPassword) SetValueFull(ValueVar []byte, LengthVar int, DestroyVar *glib.DestroyNotify) { | ||
| 242 | 242 | ||||
| 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) | |||
| 244 | 259 | ||||
| 245 | } | 260 | } | ||
| 246 | 261 | ||||
M v4/gio/gunixconnection.go +32 -2
| @@ -106,7 +106,22 @@ var xUnixConnectionReceiveCredentialsAsync func(uintptr, uintptr, uintptr, uintp | |||||
| 106 | // g_unix_connection_receive_credentials_finish() to get the result of the operation. | 106 | // g_unix_connection_receive_credentials_finish() to get the result of the operation. | ||
| 107 | func (x *UnixConnection) ReceiveCredentialsAsync(CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | 107 | func (x *UnixConnection) ReceiveCredentialsAsync(CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | ||
| 108 | 108 | ||||
| 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) | |||
| 110 | 125 | ||||
| 111 | } | 126 | } | ||
| 112 | 127 | ||||
| @@ -195,7 +210,22 @@ var xUnixConnectionSendCredentialsAsync func(uintptr, uintptr, uintptr, uintptr) | |||||
| 195 | // g_unix_connection_send_credentials_finish() to get the result of the operation. | 210 | // g_unix_connection_send_credentials_finish() to get the result of the operation. | ||
| 196 | func (x *UnixConnection) SendCredentialsAsync(CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | 211 | func (x *UnixConnection) SendCredentialsAsync(CancellableVar *Cancellable, CallbackVar *AsyncReadyCallback, UserDataVar uintptr) { | ||
| 197 | 212 | ||||
| 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) | |||
| 199 | 229 | ||||
| 200 | } | 230 | } | ||
| 201 | 231 | ||||
M v4/gio/gvfs.go +61 -1
| @@ -614,7 +614,67 @@ var xVfsRegisterUriScheme func(uintptr, string, uintptr, uintptr, uintptr, uintp | |||||
| 614 | // a custom URI scheme, use g_vfs_unregister_uri_scheme(). | 614 | // a custom URI scheme, use g_vfs_unregister_uri_scheme(). | ||
| 615 | func (x *Vfs) RegisterUriScheme(SchemeVar string, UriFuncVar *VfsFileLookupFunc, UriDataVar uintptr, UriDestroyVar *glib.DestroyNotify, ParseNameFuncVar *VfsFileLookupFunc, ParseNameDataVar uintptr, ParseNameDestroyVar *glib.DestroyNotify) bool { | 615 | func (x *Vfs) RegisterUriScheme(SchemeVar string, UriFuncVar *VfsFileLookupFunc, UriDataVar uintptr, UriDestroyVar *glib.DestroyNotify, ParseNameFuncVar *VfsFileLookupFunc, ParseNameDataVar uintptr, ParseNameDestroyVar *glib.DestroyNotify) bool { | ||
| 616 | 616 | ||||
| 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) | |||
| 618 | return cret | 678 | return cret | ||
| 619 | } | 679 | } | ||
| 620 | 680 | ||||
M v4/glib/garray.go +152 -8
| @@ -147,7 +147,20 @@ var xNewBytesWithFreeFunc func([]byte, uint, uintptr, uintptr) *Bytes | |||||
| 147 | // @data may be `NULL` if @size is 0. | 147 | // @data may be `NULL` if @size is 0. | ||
| 148 | func NewBytesWithFreeFunc(DataVar []byte, SizeVar uint, FreeFuncVar *DestroyNotify, UserDataVar uintptr) *Bytes { | 148 | func NewBytesWithFreeFunc(DataVar []byte, SizeVar uint, FreeFuncVar *DestroyNotify, UserDataVar uintptr) *Bytes { | ||
| 149 | 149 | ||||
| 150 | - | cret := xNewBytesWithFreeFunc(DataVar, SizeVar, NewCallback(FreeFuncVar), UserDataVar) | 150 | + | FreeFuncVarPtr := uintptr(unsafe.Pointer(FreeFuncVar)) |
| 151 | + | var FreeFuncVarRef uintptr | |||
| 152 | + | if cbRefPtr, ok := GetCallback(FreeFuncVarPtr); ok { | |||
| 153 | + | FreeFuncVarRef = cbRefPtr | |||
| 154 | + | } else { | |||
| 155 | + | fcb := func(arg0 uintptr) { | |||
| 156 | + | cbFn := *FreeFuncVar | |||
| 157 | + | cbFn(arg0) | |||
| 158 | + | } | |||
| 159 | + | FreeFuncVarRef = purego.NewCallback(fcb) | |||
| 160 | + | SaveCallback(FreeFuncVarPtr, FreeFuncVarRef) | |||
| 161 | + | } | |||
| 162 | + | ||||
| 163 | + | cret := xNewBytesWithFreeFunc(DataVar, SizeVar, FreeFuncVarRef, UserDataVar) | |||
| 151 | return cret | 164 | return cret | ||
| 152 | } | 165 | } | ||
| 153 | 166 | ||||
| @@ -553,7 +566,20 @@ var xByteArraySort func([]byte, uintptr) | |||||
| 553 | // their addresses. | 566 | // their addresses. | ||
| 554 | func ByteArraySort(ArrayVar []byte, CompareFuncVar *CompareFunc) { | 567 | func ByteArraySort(ArrayVar []byte, CompareFuncVar *CompareFunc) { | ||
| 555 | 568 | ||||
| 556 | - | xByteArraySort(ArrayVar, NewCallback(CompareFuncVar)) | 569 | + | CompareFuncVarPtr := uintptr(unsafe.Pointer(CompareFuncVar)) |
| 570 | + | var CompareFuncVarRef uintptr | |||
| 571 | + | if cbRefPtr, ok := GetCallback(CompareFuncVarPtr); ok { | |||
| 572 | + | CompareFuncVarRef = cbRefPtr | |||
| 573 | + | } else { | |||
| 574 | + | fcb := func(arg0 uintptr, arg1 uintptr) int { | |||
| 575 | + | cbFn := *CompareFuncVar | |||
| 576 | + | return cbFn(arg0, arg1) | |||
| 577 | + | } | |||
| 578 | + | CompareFuncVarRef = purego.NewCallback(fcb) | |||
| 579 | + | SaveCallback(CompareFuncVarPtr, CompareFuncVarRef) | |||
| 580 | + | } | |||
| 581 | + | ||||
| 582 | + | xByteArraySort(ArrayVar, CompareFuncVarRef) | |||
| 557 | 583 | ||||
| 558 | } | 584 | } | ||
| 559 | 585 | ||||
| @@ -563,7 +589,20 @@ var xByteArraySortWithData func([]byte, uintptr, uintptr) | |||||
| 563 | // user data argument. | 589 | // user data argument. | ||
| 564 | func ByteArraySortWithData(ArrayVar []byte, CompareFuncVar *CompareDataFunc, UserDataVar uintptr) { | 590 | func ByteArraySortWithData(ArrayVar []byte, CompareFuncVar *CompareDataFunc, UserDataVar uintptr) { | ||
| 565 | 591 | ||||
| 566 | - | xByteArraySortWithData(ArrayVar, NewCallback(CompareFuncVar), UserDataVar) | 592 | + | CompareFuncVarPtr := uintptr(unsafe.Pointer(CompareFuncVar)) |
| 593 | + | var CompareFuncVarRef uintptr | |||
| 594 | + | if cbRefPtr, ok := GetCallback(CompareFuncVarPtr); ok { | |||
| 595 | + | CompareFuncVarRef = cbRefPtr | |||
| 596 | + | } else { | |||
| 597 | + | fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int { | |||
| 598 | + | cbFn := *CompareFuncVar | |||
| 599 | + | return cbFn(arg0, arg1, arg2) | |||
| 600 | + | } | |||
| 601 | + | CompareFuncVarRef = purego.NewCallback(fcb) | |||
| 602 | + | SaveCallback(CompareFuncVarPtr, CompareFuncVarRef) | |||
| 603 | + | } | |||
| 604 | + | ||||
| 605 | + | xByteArraySortWithData(ArrayVar, CompareFuncVarRef, UserDataVar) | |||
| 567 | 606 | ||||
| 568 | } | 607 | } | ||
| 569 | 608 | ||||
| @@ -619,7 +658,22 @@ var xPtrArrayFindWithEqualFunc func([]uintptr, uintptr, uintptr, *uint) bool | |||||
| 619 | // equality is used. | 658 | // equality is used. | ||
| 620 | func PtrArrayFindWithEqualFunc(HaystackVar []uintptr, NeedleVar uintptr, EqualFuncVar *EqualFunc, IndexVar *uint) bool { | 659 | func PtrArrayFindWithEqualFunc(HaystackVar []uintptr, NeedleVar uintptr, EqualFuncVar *EqualFunc, IndexVar *uint) bool { | ||
| 621 | 660 | ||||
| 622 | - | cret := xPtrArrayFindWithEqualFunc(HaystackVar, NeedleVar, NewCallbackNullable(EqualFuncVar), IndexVar) | 661 | + | var EqualFuncVarRef uintptr |
| 662 | + | if EqualFuncVar != nil { | |||
| 663 | + | EqualFuncVarPtr := uintptr(unsafe.Pointer(EqualFuncVar)) | |||
| 664 | + | if cbRefPtr, ok := GetCallback(EqualFuncVarPtr); ok { | |||
| 665 | + | EqualFuncVarRef = cbRefPtr | |||
| 666 | + | } else { | |||
| 667 | + | fcb := func(arg0 uintptr, arg1 uintptr) bool { | |||
| 668 | + | cbFn := *EqualFuncVar | |||
| 669 | + | return cbFn(arg0, arg1) | |||
| 670 | + | } | |||
| 671 | + | EqualFuncVarRef = purego.NewCallback(fcb) | |||
| 672 | + | SaveCallback(EqualFuncVarPtr, EqualFuncVarRef) | |||
| 673 | + | } | |||
| 674 | + | } | |||
| 675 | + | ||||
| 676 | + | cret := xPtrArrayFindWithEqualFunc(HaystackVar, NeedleVar, EqualFuncVarRef, IndexVar) | |||
| 623 | return cret | 677 | return cret | ||
| 624 | } | 678 | } | ||
| 625 | 679 | ||||
| @@ -644,7 +698,37 @@ var xPtrArrayNewFromArray func([]uintptr, uint, uintptr, uintptr, uintptr) uintp | |||||
| 644 | // than `gsize`. | 698 | // than `gsize`. | ||
| 645 | func PtrArrayNewFromArray(DataVar []uintptr, LenVar uint, CopyFuncVar *CopyFunc, CopyFuncUserDataVar uintptr, ElementFreeFuncVar *DestroyNotify) uintptr { | 699 | func PtrArrayNewFromArray(DataVar []uintptr, LenVar uint, CopyFuncVar *CopyFunc, CopyFuncUserDataVar uintptr, ElementFreeFuncVar *DestroyNotify) uintptr { | ||
| 646 | 700 | ||||
| 647 | - | cret := xPtrArrayNewFromArray(DataVar, LenVar, NewCallbackNullable(CopyFuncVar), CopyFuncUserDataVar, NewCallbackNullable(ElementFreeFuncVar)) | 701 | + | var CopyFuncVarRef uintptr |
| 702 | + | if CopyFuncVar != nil { | |||
| 703 | + | CopyFuncVarPtr := uintptr(unsafe.Pointer(CopyFuncVar)) | |||
| 704 | + | if cbRefPtr, ok := GetCallback(CopyFuncVarPtr); ok { | |||
| 705 | + | CopyFuncVarRef = cbRefPtr | |||
| 706 | + | } else { | |||
| 707 | + | fcb := func(arg0 uintptr, arg1 uintptr) uintptr { | |||
| 708 | + | cbFn := *CopyFuncVar | |||
| 709 | + | return cbFn(arg0, arg1) | |||
| 710 | + | } | |||
| 711 | + | CopyFuncVarRef = purego.NewCallback(fcb) | |||
| 712 | + | SaveCallback(CopyFuncVarPtr, CopyFuncVarRef) | |||
| 713 | + | } | |||
| 714 | + | } | |||
| 715 | + | ||||
| 716 | + | var ElementFreeFuncVarRef uintptr | |||
| 717 | + | if ElementFreeFuncVar != nil { | |||
| 718 | + | ElementFreeFuncVarPtr := uintptr(unsafe.Pointer(ElementFreeFuncVar)) | |||
| 719 | + | if cbRefPtr, ok := GetCallback(ElementFreeFuncVarPtr); ok { | |||
| 720 | + | ElementFreeFuncVarRef = cbRefPtr | |||
| 721 | + | } else { | |||
| 722 | + | fcb := func(arg0 uintptr) { | |||
| 723 | + | cbFn := *ElementFreeFuncVar | |||
| 724 | + | cbFn(arg0) | |||
| 725 | + | } | |||
| 726 | + | ElementFreeFuncVarRef = purego.NewCallback(fcb) | |||
| 727 | + | SaveCallback(ElementFreeFuncVarPtr, ElementFreeFuncVarRef) | |||
| 728 | + | } | |||
| 729 | + | } | |||
| 730 | + | ||||
| 731 | + | cret := xPtrArrayNewFromArray(DataVar, LenVar, CopyFuncVarRef, CopyFuncUserDataVar, ElementFreeFuncVarRef) | |||
| 648 | return cret | 732 | return cret | ||
| 649 | } | 733 | } | ||
| 650 | 734 | ||||
| @@ -665,7 +749,37 @@ var xPtrArrayNewFromNullTerminatedArray func([]uintptr, uintptr, uintptr, uintpt | |||||
| 665 | // shorter than `gsize`. | 749 | // shorter than `gsize`. | ||
| 666 | func PtrArrayNewFromNullTerminatedArray(DataVar []uintptr, CopyFuncVar *CopyFunc, CopyFuncUserDataVar uintptr, ElementFreeFuncVar *DestroyNotify) uintptr { | 750 | func PtrArrayNewFromNullTerminatedArray(DataVar []uintptr, CopyFuncVar *CopyFunc, CopyFuncUserDataVar uintptr, ElementFreeFuncVar *DestroyNotify) uintptr { | ||
| 667 | 751 | ||||
| 668 | - | cret := xPtrArrayNewFromNullTerminatedArray(DataVar, NewCallbackNullable(CopyFuncVar), CopyFuncUserDataVar, NewCallbackNullable(ElementFreeFuncVar)) | 752 | + | var CopyFuncVarRef uintptr |
| 753 | + | if CopyFuncVar != nil { | |||
| 754 | + | CopyFuncVarPtr := uintptr(unsafe.Pointer(CopyFuncVar)) | |||
| 755 | + | if cbRefPtr, ok := GetCallback(CopyFuncVarPtr); ok { | |||
| 756 | + | CopyFuncVarRef = cbRefPtr | |||
| 757 | + | } else { | |||
| 758 | + | fcb := func(arg0 uintptr, arg1 uintptr) uintptr { | |||
| 759 | + | cbFn := *CopyFuncVar | |||
| 760 | + | return cbFn(arg0, arg1) | |||
| 761 | + | } | |||
| 762 | + | CopyFuncVarRef = purego.NewCallback(fcb) | |||
| 763 | + | SaveCallback(CopyFuncVarPtr, CopyFuncVarRef) | |||
| 764 | + | } | |||
| 765 | + | } | |||
| 766 | + | ||||
| 767 | + | var ElementFreeFuncVarRef uintptr | |||
| 768 | + | if ElementFreeFuncVar != nil { | |||
| 769 | + | ElementFreeFuncVarPtr := uintptr(unsafe.Pointer(ElementFreeFuncVar)) | |||
| 770 | + | if cbRefPtr, ok := GetCallback(ElementFreeFuncVarPtr); ok { | |||
| 771 | + | ElementFreeFuncVarRef = cbRefPtr | |||
| 772 | + | } else { | |||
| 773 | + | fcb := func(arg0 uintptr) { | |||
| 774 | + | cbFn := *ElementFreeFuncVar | |||
| 775 | + | cbFn(arg0) | |||
| 776 | + | } | |||
| 777 | + | ElementFreeFuncVarRef = purego.NewCallback(fcb) | |||
| 778 | + | SaveCallback(ElementFreeFuncVarPtr, ElementFreeFuncVarRef) | |||
| 779 | + | } | |||
| 780 | + | } | |||
| 781 | + | ||||
| 782 | + | cret := xPtrArrayNewFromNullTerminatedArray(DataVar, CopyFuncVarRef, CopyFuncUserDataVar, ElementFreeFuncVarRef) | |||
| 669 | return cret | 783 | return cret | ||
| 670 | } | 784 | } | ||
| 671 | 785 | ||||
| @@ -689,7 +803,22 @@ var xPtrArrayNewTake func([]uintptr, uint, uintptr) uintptr | |||||
| 689 | // than `gsize`. | 803 | // than `gsize`. | ||
| 690 | func PtrArrayNewTake(DataVar []uintptr, LenVar uint, ElementFreeFuncVar *DestroyNotify) uintptr { | 804 | func PtrArrayNewTake(DataVar []uintptr, LenVar uint, ElementFreeFuncVar *DestroyNotify) uintptr { | ||
| 691 | 805 | ||||
| 692 | - | cret := xPtrArrayNewTake(DataVar, LenVar, NewCallbackNullable(ElementFreeFuncVar)) | 806 | + | var ElementFreeFuncVarRef uintptr |
| 807 | + | if ElementFreeFuncVar != nil { | |||
| 808 | + | ElementFreeFuncVarPtr := uintptr(unsafe.Pointer(ElementFreeFuncVar)) | |||
| 809 | + | if cbRefPtr, ok := GetCallback(ElementFreeFuncVarPtr); ok { | |||
| 810 | + | ElementFreeFuncVarRef = cbRefPtr | |||
| 811 | + | } else { | |||
| 812 | + | fcb := func(arg0 uintptr) { | |||
| 813 | + | cbFn := *ElementFreeFuncVar | |||
| 814 | + | cbFn(arg0) | |||
| 815 | + | } | |||
| 816 | + | ElementFreeFuncVarRef = purego.NewCallback(fcb) | |||
| 817 | + | SaveCallback(ElementFreeFuncVarPtr, ElementFreeFuncVarRef) | |||
| 818 | + | } | |||
| 819 | + | } | |||
| 820 | + | ||||
| 821 | + | cret := xPtrArrayNewTake(DataVar, LenVar, ElementFreeFuncVarRef) | |||
| 693 | return cret | 822 | return cret | ||
| 694 | } | 823 | } | ||
| 695 | 824 | ||||
| @@ -716,7 +845,22 @@ var xPtrArrayNewTakeNullTerminated func([]uintptr, uintptr) uintptr | |||||
| 716 | // in `guint`, which may be shorter than `gsize`. | 845 | // in `guint`, which may be shorter than `gsize`. | ||
| 717 | func PtrArrayNewTakeNullTerminated(DataVar []uintptr, ElementFreeFuncVar *DestroyNotify) uintptr { | 846 | func PtrArrayNewTakeNullTerminated(DataVar []uintptr, ElementFreeFuncVar *DestroyNotify) uintptr { | ||
| 718 | 847 | ||||
| 719 | - | cret := xPtrArrayNewTakeNullTerminated(DataVar, NewCallbackNullable(ElementFreeFuncVar)) | 848 | + | var ElementFreeFuncVarRef uintptr |
| 849 | + | if ElementFreeFuncVar != nil { | |||
| 850 | + | ElementFreeFuncVarPtr := uintptr(unsafe.Pointer(ElementFreeFuncVar)) | |||
| 851 | + | if cbRefPtr, ok := GetCallback(ElementFreeFuncVarPtr); ok { | |||
| 852 | + | ElementFreeFuncVarRef = cbRefPtr | |||
| 853 | + | } else { | |||
| 854 | + | fcb := func(arg0 uintptr) { | |||
| 855 | + | cbFn := *ElementFreeFuncVar | |||
| 856 | + | cbFn(arg0) | |||
| 857 | + | } | |||
| 858 | + | ElementFreeFuncVarRef = purego.NewCallback(fcb) | |||
| 859 | + | SaveCallback(ElementFreeFuncVarPtr, ElementFreeFuncVarRef) | |||
| 860 | + | } | |||
| 861 | + | } | |||
| 862 | + | ||||
| 863 | + | cret := xPtrArrayNewTakeNullTerminated(DataVar, ElementFreeFuncVarRef) | |||
| 720 | return cret | 864 | return cret | ||
| 721 | } | 865 | } | ||
| 722 | 866 | ||||
M v4/glib/gasyncqueue.go +72 -5
| @@ -144,7 +144,20 @@ var xAsyncQueuePushSorted func(uintptr, uintptr, uintptr, uintptr) | |||||
| 144 | // For an example of @func see g_async_queue_sort(). | 144 | // For an example of @func see g_async_queue_sort(). | ||
| 145 | func (x *AsyncQueue) PushSorted(DataVar uintptr, FuncVar *CompareDataFunc, UserDataVar uintptr) { | 145 | func (x *AsyncQueue) PushSorted(DataVar uintptr, FuncVar *CompareDataFunc, UserDataVar uintptr) { | ||
| 146 | 146 | ||||
| 147 | - | xAsyncQueuePushSorted(x.GoPointer(), DataVar, NewCallback(FuncVar), UserDataVar) | 147 | + | FuncVarPtr := uintptr(unsafe.Pointer(FuncVar)) |
| 148 | + | var FuncVarRef uintptr | |||
| 149 | + | if cbRefPtr, ok := GetCallback(FuncVarPtr); ok { | |||
| 150 | + | FuncVarRef = cbRefPtr | |||
| 151 | + | } else { | |||
| 152 | + | fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int { | |||
| 153 | + | cbFn := *FuncVar | |||
| 154 | + | return cbFn(arg0, arg1, arg2) | |||
| 155 | + | } | |||
| 156 | + | FuncVarRef = purego.NewCallback(fcb) | |||
| 157 | + | SaveCallback(FuncVarPtr, FuncVarRef) | |||
| 158 | + | } | |||
| 159 | + | ||||
| 160 | + | xAsyncQueuePushSorted(x.GoPointer(), DataVar, FuncVarRef, UserDataVar) | |||
| 148 | 161 | ||||
| 149 | } | 162 | } | ||
| 150 | 163 | ||||
| @@ -167,7 +180,20 @@ var xAsyncQueuePushSortedUnlocked func(uintptr, uintptr, uintptr, uintptr) | |||||
| 167 | // For an example of @func see g_async_queue_sort(). | 180 | // For an example of @func see g_async_queue_sort(). | ||
| 168 | func (x *AsyncQueue) PushSortedUnlocked(DataVar uintptr, FuncVar *CompareDataFunc, UserDataVar uintptr) { | 181 | func (x *AsyncQueue) PushSortedUnlocked(DataVar uintptr, FuncVar *CompareDataFunc, UserDataVar uintptr) { | ||
| 169 | 182 | ||||
| 170 | - | xAsyncQueuePushSortedUnlocked(x.GoPointer(), DataVar, NewCallback(FuncVar), UserDataVar) | 183 | + | FuncVarPtr := uintptr(unsafe.Pointer(FuncVar)) |
| 184 | + | var FuncVarRef uintptr | |||
| 185 | + | if cbRefPtr, ok := GetCallback(FuncVarPtr); ok { | |||
| 186 | + | FuncVarRef = cbRefPtr | |||
| 187 | + | } else { | |||
| 188 | + | fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int { | |||
| 189 | + | cbFn := *FuncVar | |||
| 190 | + | return cbFn(arg0, arg1, arg2) | |||
| 191 | + | } | |||
| 192 | + | FuncVarRef = purego.NewCallback(fcb) | |||
| 193 | + | SaveCallback(FuncVarPtr, FuncVarRef) | |||
| 194 | + | } | |||
| 195 | + | ||||
| 196 | + | xAsyncQueuePushSortedUnlocked(x.GoPointer(), DataVar, FuncVarRef, UserDataVar) | |||
| 171 | 197 | ||||
| 172 | } | 198 | } | ||
| 173 | 199 | ||||
| @@ -251,7 +277,20 @@ var xAsyncQueueSort func(uintptr, uintptr, uintptr) | |||||
| 251 | // ]| | 277 | // ]| | ||
| 252 | func (x *AsyncQueue) Sort(FuncVar *CompareDataFunc, UserDataVar uintptr) { | 278 | func (x *AsyncQueue) Sort(FuncVar *CompareDataFunc, UserDataVar uintptr) { | ||
| 253 | 279 | ||||
| 254 | - | xAsyncQueueSort(x.GoPointer(), NewCallback(FuncVar), UserDataVar) | 280 | + | FuncVarPtr := uintptr(unsafe.Pointer(FuncVar)) |
| 281 | + | var FuncVarRef uintptr | |||
| 282 | + | if cbRefPtr, ok := GetCallback(FuncVarPtr); ok { | |||
| 283 | + | FuncVarRef = cbRefPtr | |||
| 284 | + | } else { | |||
| 285 | + | fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int { | |||
| 286 | + | cbFn := *FuncVar | |||
| 287 | + | return cbFn(arg0, arg1, arg2) | |||
| 288 | + | } | |||
| 289 | + | FuncVarRef = purego.NewCallback(fcb) | |||
| 290 | + | SaveCallback(FuncVarPtr, FuncVarRef) | |||
| 291 | + | } | |||
| 292 | + | ||||
| 293 | + | xAsyncQueueSort(x.GoPointer(), FuncVarRef, UserDataVar) | |||
| 255 | 294 | ||||
| 256 | } | 295 | } | ||
| 257 | 296 | ||||
| @@ -268,7 +307,20 @@ var xAsyncQueueSortUnlocked func(uintptr, uintptr, uintptr) | |||||
| 268 | // This function must be called while holding the @queue's lock. | 307 | // This function must be called while holding the @queue's lock. | ||
| 269 | func (x *AsyncQueue) SortUnlocked(FuncVar *CompareDataFunc, UserDataVar uintptr) { | 308 | func (x *AsyncQueue) SortUnlocked(FuncVar *CompareDataFunc, UserDataVar uintptr) { | ||
| 270 | 309 | ||||
| 271 | - | xAsyncQueueSortUnlocked(x.GoPointer(), NewCallback(FuncVar), UserDataVar) | 310 | + | FuncVarPtr := uintptr(unsafe.Pointer(FuncVar)) |
| 311 | + | var FuncVarRef uintptr | |||
| 312 | + | if cbRefPtr, ok := GetCallback(FuncVarPtr); ok { | |||
| 313 | + | FuncVarRef = cbRefPtr | |||
| 314 | + | } else { | |||
| 315 | + | fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int { | |||
| 316 | + | cbFn := *FuncVar | |||
| 317 | + | return cbFn(arg0, arg1, arg2) | |||
| 318 | + | } | |||
| 319 | + | FuncVarRef = purego.NewCallback(fcb) | |||
| 320 | + | SaveCallback(FuncVarPtr, FuncVarRef) | |||
| 321 | + | } | |||
| 322 | + | ||||
| 323 | + | xAsyncQueueSortUnlocked(x.GoPointer(), FuncVarRef, UserDataVar) | |||
| 272 | 324 | ||||
| 273 | } | 325 | } | ||
| 274 | 326 | ||||
| @@ -407,7 +459,22 @@ var xAsyncQueueNewFull func(uintptr) *AsyncQueue | |||||
| 407 | // the queue is destroyed after the final unref. | 459 | // the queue is destroyed after the final unref. | ||
| 408 | func AsyncQueueNewFull(ItemFreeFuncVar *DestroyNotify) *AsyncQueue { | 460 | func AsyncQueueNewFull(ItemFreeFuncVar *DestroyNotify) *AsyncQueue { | ||
| 409 | 461 | ||||
| 410 | - | cret := xAsyncQueueNewFull(NewCallbackNullable(ItemFreeFuncVar)) | 462 | + | var ItemFreeFuncVarRef uintptr |
| 463 | + | if ItemFreeFuncVar != nil { | |||
| 464 | + | ItemFreeFuncVarPtr := uintptr(unsafe.Pointer(ItemFreeFuncVar)) | |||
| 465 | + | if cbRefPtr, ok := GetCallback(ItemFreeFuncVarPtr); ok { | |||
| 466 | + | ItemFreeFuncVarRef = cbRefPtr | |||
| 467 | + | } else { | |||
| 468 | + | fcb := func(arg0 uintptr) { | |||
| 469 | + | cbFn := *ItemFreeFuncVar | |||
| 470 | + | cbFn(arg0) | |||
| 471 | + | } | |||
| 472 | + | ItemFreeFuncVarRef = purego.NewCallback(fcb) | |||
| 473 | + | SaveCallback(ItemFreeFuncVarPtr, ItemFreeFuncVarRef) | |||
| 474 | + | } | |||
| 475 | + | } | |||
| 476 | + | ||||
| 477 | + | cret := xAsyncQueueNewFull(ItemFreeFuncVarRef) | |||
| 411 | return cret | 478 | return cret | ||
| 412 | } | 479 | } | ||
| 413 | 480 | ||||
M v4/glib/gcache.go +28 -2
| @@ -80,7 +80,20 @@ var xCacheKeyForeach func(uintptr, uintptr, uintptr) | |||||
| 80 | // pairs to its callback function ! | 80 | // pairs to its callback function ! | ||
| 81 | func (x *Cache) KeyForeach(FuncVar *HFunc, UserDataVar uintptr) { | 81 | func (x *Cache) KeyForeach(FuncVar *HFunc, UserDataVar uintptr) { | ||
| 82 | 82 | ||||
| 83 | - | xCacheKeyForeach(x.GoPointer(), NewCallback(FuncVar), UserDataVar) | 83 | + | FuncVarPtr := uintptr(unsafe.Pointer(FuncVar)) |
| 84 | + | var FuncVarRef uintptr | |||
| 85 | + | if cbRefPtr, ok := GetCallback(FuncVarPtr); ok { | |||
| 86 | + | FuncVarRef = cbRefPtr | |||
| 87 | + | } else { | |||
| 88 | + | fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) { | |||
| 89 | + | cbFn := *FuncVar | |||
| 90 | + | cbFn(arg0, arg1, arg2) | |||
| 91 | + | } | |||
| 92 | + | FuncVarRef = purego.NewCallback(fcb) | |||
| 93 | + | SaveCallback(FuncVarPtr, FuncVarRef) | |||
| 94 | + | } | |||
| 95 | + | ||||
| 96 | + | xCacheKeyForeach(x.GoPointer(), FuncVarRef, UserDataVar) | |||
| 84 | 97 | ||||
| 85 | } | 98 | } | ||
| 86 | 99 | ||||
| @@ -100,7 +113,20 @@ var xCacheValueForeach func(uintptr, uintptr, uintptr) | |||||
| 100 | // Calls the given function for each of the values in the #GCache. | 113 | // Calls the given function for each of the values in the #GCache. | ||
| 101 | func (x *Cache) ValueForeach(FuncVar *HFunc, UserDataVar uintptr) { | 114 | func (x *Cache) ValueForeach(FuncVar *HFunc, UserDataVar uintptr) { | ||
| 102 | 115 | ||||
| 103 | - | xCacheValueForeach(x.GoPointer(), NewCallback(FuncVar), UserDataVar) | 116 | + | FuncVarPtr := uintptr(unsafe.Pointer(FuncVar)) |
| 117 | + | var FuncVarRef uintptr | |||
| 118 | + | if cbRefPtr, ok := GetCallback(FuncVarPtr); ok { | |||
| 119 | + | FuncVarRef = cbRefPtr | |||
| 120 | + | } else { | |||
| 121 | + | fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) { | |||
| 122 | + | cbFn := *FuncVar | |||
| 123 | + | cbFn(arg0, arg1, arg2) | |||
| 124 | + | } | |||
| 125 | + | FuncVarRef = purego.NewCallback(fcb) | |||
| 126 | + | SaveCallback(FuncVarPtr, FuncVarRef) | |||
| 127 | + | } | |||
| 128 | + | ||||
| 129 | + | xCacheValueForeach(x.GoPointer(), FuncVarRef, UserDataVar) | |||
| 104 | 130 | ||||
| 105 | } | 131 | } | ||
| 106 | 132 | ||||
M v4/glib/gcompletion.go +14 -1
| @@ -131,7 +131,20 @@ var xCompletionSetCompare func(uintptr, uintptr) | |||||
| 131 | // comparison function is strncmp(). | 131 | // comparison function is strncmp(). | ||
| 132 | func (x *Completion) SetCompare(StrncmpFuncVar *CompletionStrncmpFunc) { | 132 | func (x *Completion) SetCompare(StrncmpFuncVar *CompletionStrncmpFunc) { | ||
| 133 | 133 | ||||
| 134 | - | xCompletionSetCompare(x.GoPointer(), NewCallback(StrncmpFuncVar)) | 134 | + | StrncmpFuncVarPtr := uintptr(unsafe.Pointer(StrncmpFuncVar)) |
| 135 | + | var StrncmpFuncVarRef uintptr | |||
| 136 | + | if cbRefPtr, ok := GetCallback(StrncmpFuncVarPtr); ok { | |||
| 137 | + | StrncmpFuncVarRef = cbRefPtr | |||
| 138 | + | } else { | |||
| 139 | + | fcb := func(arg0 string, arg1 string, arg2 uint) int { | |||
| 140 | + | cbFn := *StrncmpFuncVar | |||
| 141 | + | return cbFn(arg0, arg1, arg2) | |||
| 142 | + | } | |||
| 143 | + | StrncmpFuncVarRef = purego.NewCallback(fcb) | |||
| 144 | + | SaveCallback(StrncmpFuncVarPtr, StrncmpFuncVarRef) | |||
| 145 | + | } | |||
| 146 | + | ||||
| 147 | + | xCompletionSetCompare(x.GoPointer(), StrncmpFuncVarRef) | |||
| 135 | 148 | ||||
| 136 | } | 149 | } | ||
| 137 | 150 | ||||
M v4/glib/gdataset.go +90 -6
| @@ -63,7 +63,20 @@ var xDatalistForeach func(**Data, uintptr, uintptr) | |||||
| 63 | // than skipping over elements that are removed. | 63 | // than skipping over elements that are removed. | ||
| 64 | func DatalistForeach(DatalistVar **Data, FuncVar *DataForeachFunc, UserDataVar uintptr) { | 64 | func DatalistForeach(DatalistVar **Data, FuncVar *DataForeachFunc, UserDataVar uintptr) { | ||
| 65 | 65 | ||||
| 66 | - | xDatalistForeach(DatalistVar, NewCallback(FuncVar), UserDataVar) | 66 | + | FuncVarPtr := uintptr(unsafe.Pointer(FuncVar)) |
| 67 | + | var FuncVarRef uintptr | |||
| 68 | + | if cbRefPtr, ok := GetCallback(FuncVarPtr); ok { | |||
| 69 | + | FuncVarRef = cbRefPtr | |||
| 70 | + | } else { | |||
| 71 | + | fcb := func(arg0 Quark, arg1 uintptr, arg2 uintptr) { | |||
| 72 | + | cbFn := *FuncVar | |||
| 73 | + | cbFn(arg0, arg1, arg2) | |||
| 74 | + | } | |||
| 75 | + | FuncVarRef = purego.NewCallback(fcb) | |||
| 76 | + | SaveCallback(FuncVarPtr, FuncVarRef) | |||
| 77 | + | } | |||
| 78 | + | ||||
| 79 | + | xDatalistForeach(DatalistVar, FuncVarRef, UserDataVar) | |||
| 67 | 80 | ||||
| 68 | } | 81 | } | ||
| 69 | 82 | ||||
| @@ -104,7 +117,22 @@ var xDatalistIdDupData func(**Data, Quark, uintptr, uintptr) uintptr | |||||
| 104 | // threads are using the same datalist and the same key. | 117 | // threads are using the same datalist and the same key. | ||
| 105 | func DatalistIdDupData(DatalistVar **Data, KeyIdVar Quark, DupFuncVar *DuplicateFunc, UserDataVar uintptr) uintptr { | 118 | func DatalistIdDupData(DatalistVar **Data, KeyIdVar Quark, DupFuncVar *DuplicateFunc, UserDataVar uintptr) uintptr { | ||
| 106 | 119 | ||||
| 107 | - | cret := xDatalistIdDupData(DatalistVar, KeyIdVar, NewCallbackNullable(DupFuncVar), UserDataVar) | 120 | + | var DupFuncVarRef uintptr |
| 121 | + | if DupFuncVar != nil { | |||
| 122 | + | DupFuncVarPtr := uintptr(unsafe.Pointer(DupFuncVar)) | |||
| 123 | + | if cbRefPtr, ok := GetCallback(DupFuncVarPtr); ok { | |||
| 124 | + | DupFuncVarRef = cbRefPtr | |||
| 125 | + | } else { | |||
| 126 | + | fcb := func(arg0 uintptr, arg1 uintptr) uintptr { | |||
| 127 | + | cbFn := *DupFuncVar | |||
| 128 | + | return cbFn(arg0, arg1) | |||
| 129 | + | } | |||
| 130 | + | DupFuncVarRef = purego.NewCallback(fcb) | |||
| 131 | + | SaveCallback(DupFuncVarPtr, DupFuncVarRef) | |||
| 132 | + | } | |||
| 133 | + | } | |||
| 134 | + | ||||
| 135 | + | cret := xDatalistIdDupData(DatalistVar, KeyIdVar, DupFuncVarRef, UserDataVar) | |||
| 108 | return cret | 136 | return cret | ||
| 109 | } | 137 | } | ||
| 110 | 138 | ||||
| @@ -159,7 +187,22 @@ var xDatalistIdReplaceData func(**Data, Quark, uintptr, uintptr, uintptr, *Destr | |||||
| 159 | // should not destroy the object in the normal way. | 187 | // should not destroy the object in the normal way. | ||
| 160 | func DatalistIdReplaceData(DatalistVar **Data, KeyIdVar Quark, OldvalVar uintptr, NewvalVar uintptr, DestroyVar *DestroyNotify, OldDestroyVar *DestroyNotify) bool { | 188 | func DatalistIdReplaceData(DatalistVar **Data, KeyIdVar Quark, OldvalVar uintptr, NewvalVar uintptr, DestroyVar *DestroyNotify, OldDestroyVar *DestroyNotify) bool { | ||
| 161 | 189 | ||||
| 162 | - | cret := xDatalistIdReplaceData(DatalistVar, KeyIdVar, OldvalVar, NewvalVar, NewCallbackNullable(DestroyVar), OldDestroyVar) | 190 | + | var DestroyVarRef uintptr |
| 191 | + | if DestroyVar != nil { | |||
| 192 | + | DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar)) | |||
| 193 | + | if cbRefPtr, ok := GetCallback(DestroyVarPtr); ok { | |||
| 194 | + | DestroyVarRef = cbRefPtr | |||
| 195 | + | } else { | |||
| 196 | + | fcb := func(arg0 uintptr) { | |||
| 197 | + | cbFn := *DestroyVar | |||
| 198 | + | cbFn(arg0) | |||
| 199 | + | } | |||
| 200 | + | DestroyVarRef = purego.NewCallback(fcb) | |||
| 201 | + | SaveCallback(DestroyVarPtr, DestroyVarRef) | |||
| 202 | + | } | |||
| 203 | + | } | |||
| 204 | + | ||||
| 205 | + | cret := xDatalistIdReplaceData(DatalistVar, KeyIdVar, OldvalVar, NewvalVar, DestroyVarRef, OldDestroyVar) | |||
| 163 | return cret | 206 | return cret | ||
| 164 | } | 207 | } | ||
| 165 | 208 | ||||
| @@ -171,7 +214,22 @@ var xDatalistIdSetDataFull func(**Data, Quark, uintptr, uintptr) | |||||
| 171 | // function is called. | 214 | // function is called. | ||
| 172 | func DatalistIdSetDataFull(DatalistVar **Data, KeyIdVar Quark, DataVar uintptr, DestroyFuncVar *DestroyNotify) { | 215 | func DatalistIdSetDataFull(DatalistVar **Data, KeyIdVar Quark, DataVar uintptr, DestroyFuncVar *DestroyNotify) { | ||
| 173 | 216 | ||||
| 174 | - | xDatalistIdSetDataFull(DatalistVar, KeyIdVar, DataVar, NewCallbackNullable(DestroyFuncVar)) | 217 | + | var DestroyFuncVarRef uintptr |
| 218 | + | if DestroyFuncVar != nil { | |||
| 219 | + | DestroyFuncVarPtr := uintptr(unsafe.Pointer(DestroyFuncVar)) | |||
| 220 | + | if cbRefPtr, ok := GetCallback(DestroyFuncVarPtr); ok { | |||
| 221 | + | DestroyFuncVarRef = cbRefPtr | |||
| 222 | + | } else { | |||
| 223 | + | fcb := func(arg0 uintptr) { | |||
| 224 | + | cbFn := *DestroyFuncVar | |||
| 225 | + | cbFn(arg0) | |||
| 226 | + | } | |||
| 227 | + | DestroyFuncVarRef = purego.NewCallback(fcb) | |||
| 228 | + | SaveCallback(DestroyFuncVarPtr, DestroyFuncVarRef) | |||
| 229 | + | } | |||
| 230 | + | } | |||
| 231 | + | ||||
| 232 | + | xDatalistIdSetDataFull(DatalistVar, KeyIdVar, DataVar, DestroyFuncVarRef) | |||
| 175 | 233 | ||||
| 176 | } | 234 | } | ||
| 177 | 235 | ||||
| @@ -230,7 +288,20 @@ var xDatasetForeach func(uintptr, uintptr, uintptr) | |||||
| 230 | // than skipping over elements that are removed. | 288 | // than skipping over elements that are removed. | ||
| 231 | func DatasetForeach(DatasetLocationVar uintptr, FuncVar *DataForeachFunc, UserDataVar uintptr) { | 289 | func DatasetForeach(DatasetLocationVar uintptr, FuncVar *DataForeachFunc, UserDataVar uintptr) { | ||
| 232 | 290 | ||||
| 233 | - | xDatasetForeach(DatasetLocationVar, NewCallback(FuncVar), UserDataVar) | 291 | + | FuncVarPtr := uintptr(unsafe.Pointer(FuncVar)) |
| 292 | + | var FuncVarRef uintptr | |||
| 293 | + | if cbRefPtr, ok := GetCallback(FuncVarPtr); ok { | |||
| 294 | + | FuncVarRef = cbRefPtr | |||
| 295 | + | } else { | |||
| 296 | + | fcb := func(arg0 Quark, arg1 uintptr, arg2 uintptr) { | |||
| 297 | + | cbFn := *FuncVar | |||
| 298 | + | cbFn(arg0, arg1, arg2) | |||
| 299 | + | } | |||
| 300 | + | FuncVarRef = purego.NewCallback(fcb) | |||
| 301 | + | SaveCallback(FuncVarPtr, FuncVarRef) | |||
| 302 | + | } | |||
| 303 | + | ||||
| 304 | + | xDatasetForeach(DatasetLocationVar, FuncVarRef, UserDataVar) | |||
| 234 | 305 | ||||
| 235 | } | 306 | } | ||
| 236 | 307 | ||||
| @@ -261,7 +332,20 @@ var xDatasetIdSetDataFull func(uintptr, Quark, uintptr, uintptr) | |||||
| 261 | // is called. | 332 | // is called. | ||
| 262 | func DatasetIdSetDataFull(DatasetLocationVar uintptr, KeyIdVar Quark, DataVar uintptr, DestroyFuncVar *DestroyNotify) { | 333 | func DatasetIdSetDataFull(DatasetLocationVar uintptr, KeyIdVar Quark, DataVar uintptr, DestroyFuncVar *DestroyNotify) { | ||
| 263 | 334 | ||||
| 264 | - | xDatasetIdSetDataFull(DatasetLocationVar, KeyIdVar, DataVar, NewCallback(DestroyFuncVar)) | 335 | + | DestroyFuncVarPtr := uintptr(unsafe.Pointer(DestroyFuncVar)) |
| 336 | + | var DestroyFuncVarRef uintptr | |||
| 337 | + | if cbRefPtr, ok := GetCallback(DestroyFuncVarPtr); ok { | |||
| 338 | + | DestroyFuncVarRef = cbRefPtr | |||
| 339 | + | } else { | |||
| 340 | + | fcb := func(arg0 uintptr) { | |||
| 341 | + | cbFn := *DestroyFuncVar | |||
| 342 | + | cbFn(arg0) | |||
| 343 | + | } | |||
| 344 | + | DestroyFuncVarRef = purego.NewCallback(fcb) | |||
| 345 | + | SaveCallback(DestroyFuncVarPtr, DestroyFuncVarRef) | |||
| 346 | + | } | |||
| 347 | + | ||||
| 348 | + | xDatasetIdSetDataFull(DatasetLocationVar, KeyIdVar, DataVar, DestroyFuncVarRef) | |||
| 265 | 349 | ||||
| 266 | } | 350 | } | ||
| 267 | 351 | ||||
M v4/glib/gerror.go +80 -2
| @@ -149,7 +149,46 @@ var xErrorDomainRegister func(string, uint, uintptr, uintptr, uintptr) Quark | |||||
| 149 | // g_error_domain_register_static(). | 149 | // g_error_domain_register_static(). | ||
| 150 | func ErrorDomainRegister(ErrorTypeNameVar string, ErrorTypePrivateSizeVar uint, ErrorTypeInitVar *ErrorInitFunc, ErrorTypeCopyVar *ErrorCopyFunc, ErrorTypeClearVar *ErrorClearFunc) Quark { | 150 | func ErrorDomainRegister(ErrorTypeNameVar string, ErrorTypePrivateSizeVar uint, ErrorTypeInitVar *ErrorInitFunc, ErrorTypeCopyVar *ErrorCopyFunc, ErrorTypeClearVar *ErrorClearFunc) Quark { | ||
| 151 | 151 | ||||
| 152 | - | cret := xErrorDomainRegister(ErrorTypeNameVar, ErrorTypePrivateSizeVar, NewCallback(ErrorTypeInitVar), NewCallback(ErrorTypeCopyVar), NewCallback(ErrorTypeClearVar)) | 152 | + | ErrorTypeInitVarPtr := uintptr(unsafe.Pointer(ErrorTypeInitVar)) |
| 153 | + | var ErrorTypeInitVarRef uintptr | |||
| 154 | + | if cbRefPtr, ok := GetCallback(ErrorTypeInitVarPtr); ok { | |||
| 155 | + | ErrorTypeInitVarRef = cbRefPtr | |||
| 156 | + | } else { | |||
| 157 | + | fcb := func(arg0 *Error) { | |||
| 158 | + | cbFn := *ErrorTypeInitVar | |||
| 159 | + | cbFn(arg0) | |||
| 160 | + | } | |||
| 161 | + | ErrorTypeInitVarRef = purego.NewCallback(fcb) | |||
| 162 | + | SaveCallback(ErrorTypeInitVarPtr, ErrorTypeInitVarRef) | |||
| 163 | + | } | |||
| 164 | + | ||||
| 165 | + | ErrorTypeCopyVarPtr := uintptr(unsafe.Pointer(ErrorTypeCopyVar)) | |||
| 166 | + | var ErrorTypeCopyVarRef uintptr | |||
| 167 | + | if cbRefPtr, ok := GetCallback(ErrorTypeCopyVarPtr); ok { | |||
| 168 | + | ErrorTypeCopyVarRef = cbRefPtr | |||
| 169 | + | } else { | |||
| 170 | + | fcb := func(arg0 *Error, arg1 *Error) { | |||
| 171 | + | cbFn := *ErrorTypeCopyVar | |||
| 172 | + | cbFn(arg0, arg1) | |||
| 173 | + | } | |||
| 174 | + | ErrorTypeCopyVarRef = purego.NewCallback(fcb) | |||
| 175 | + | SaveCallback(ErrorTypeCopyVarPtr, ErrorTypeCopyVarRef) | |||
| 176 | + | } | |||
| 177 | + | ||||
| 178 | + | ErrorTypeClearVarPtr := uintptr(unsafe.Pointer(ErrorTypeClearVar)) | |||
| 179 | + | var ErrorTypeClearVarRef uintptr | |||
| 180 | + | if cbRefPtr, ok := GetCallback(ErrorTypeClearVarPtr); ok { | |||
| 181 | + | ErrorTypeClearVarRef = cbRefPtr | |||
| 182 | + | } else { | |||
| 183 | + | fcb := func(arg0 *Error) { | |||
| 184 | + | cbFn := *ErrorTypeClearVar | |||
| 185 | + | cbFn(arg0) | |||
| 186 | + | } | |||
| 187 | + | ErrorTypeClearVarRef = purego.NewCallback(fcb) | |||
| 188 | + | SaveCallback(ErrorTypeClearVarPtr, ErrorTypeClearVarRef) | |||
| 189 | + | } | |||
| 190 | + | ||||
| 191 | + | cret := xErrorDomainRegister(ErrorTypeNameVar, ErrorTypePrivateSizeVar, ErrorTypeInitVarRef, ErrorTypeCopyVarRef, ErrorTypeClearVarRef) | |||
| 153 | return cret | 192 | return cret | ||
| 154 | } | 193 | } | ||
| 155 | 194 | ||||
| @@ -174,7 +213,46 @@ var xErrorDomainRegisterStatic func(string, uint, uintptr, uintptr, uintptr) Qua | |||||
| 174 | // already takes care of passing valid information to this function. | 213 | // already takes care of passing valid information to this function. | ||
| 175 | func ErrorDomainRegisterStatic(ErrorTypeNameVar string, ErrorTypePrivateSizeVar uint, ErrorTypeInitVar *ErrorInitFunc, ErrorTypeCopyVar *ErrorCopyFunc, ErrorTypeClearVar *ErrorClearFunc) Quark { | 214 | func ErrorDomainRegisterStatic(ErrorTypeNameVar string, ErrorTypePrivateSizeVar uint, ErrorTypeInitVar *ErrorInitFunc, ErrorTypeCopyVar *ErrorCopyFunc, ErrorTypeClearVar *ErrorClearFunc) Quark { | ||
| 176 | 215 | ||||
| 177 | - | cret := xErrorDomainRegisterStatic(ErrorTypeNameVar, ErrorTypePrivateSizeVar, NewCallback(ErrorTypeInitVar), NewCallback(ErrorTypeCopyVar), NewCallback(ErrorTypeClearVar)) | 216 | + | ErrorTypeInitVarPtr := uintptr(unsafe.Pointer(ErrorTypeInitVar)) |
| 217 | + | var ErrorTypeInitVarRef uintptr | |||
| 218 | + | if cbRefPtr, ok := GetCallback(ErrorTypeInitVarPtr); ok { | |||
| 219 | + | ErrorTypeInitVarRef = cbRefPtr | |||
| 220 | + | } else { | |||
| 221 | + | fcb := func(arg0 *Error) { | |||
| 222 | + | cbFn := *ErrorTypeInitVar | |||
| 223 | + | cbFn(arg0) | |||
| 224 | + | } | |||
| 225 | + | ErrorTypeInitVarRef = purego.NewCallback(fcb) | |||
| 226 | + | SaveCallback(ErrorTypeInitVarPtr, ErrorTypeInitVarRef) | |||
| 227 | + | } | |||
| 228 | + | ||||
| 229 | + | ErrorTypeCopyVarPtr := uintptr(unsafe.Pointer(ErrorTypeCopyVar)) | |||
| 230 | + | var ErrorTypeCopyVarRef uintptr | |||
| 231 | + | if cbRefPtr, ok := GetCallback(ErrorTypeCopyVarPtr); ok { | |||
| 232 | + | ErrorTypeCopyVarRef = cbRefPtr | |||
| 233 | + | } else { | |||
| 234 | + | fcb := func(arg0 *Error, arg1 *Error) { | |||
| 235 | + | cbFn := *ErrorTypeCopyVar | |||
| 236 | + | cbFn(arg0, arg1) | |||
| 237 | + | } | |||
| 238 | + | ErrorTypeCopyVarRef = purego.NewCallback(fcb) | |||
| 239 | + | SaveCallback(ErrorTypeCopyVarPtr, ErrorTypeCopyVarRef) | |||
| 240 | + | } | |||
| 241 | + | ||||
| 242 | + | ErrorTypeClearVarPtr := uintptr(unsafe.Pointer(ErrorTypeClearVar)) | |||
| 243 | + | var ErrorTypeClearVarRef uintptr | |||
| 244 | + | if cbRefPtr, ok := GetCallback(ErrorTypeClearVarPtr); ok { | |||
| 245 | + | ErrorTypeClearVarRef = cbRefPtr | |||
| 246 | + | } else { | |||
| 247 | + | fcb := func(arg0 *Error) { | |||
| 248 | + | cbFn := *ErrorTypeClearVar | |||
| 249 | + | cbFn(arg0) | |||
| 250 | + | } | |||
| 251 | + | ErrorTypeClearVarRef = purego.NewCallback(fcb) | |||
| 252 | + | SaveCallback(ErrorTypeClearVarPtr, ErrorTypeClearVarRef) | |||
| 253 | + | } | |||
| 254 | + | ||||
| 255 | + | cret := xErrorDomainRegisterStatic(ErrorTypeNameVar, ErrorTypePrivateSizeVar, ErrorTypeInitVarRef, ErrorTypeCopyVarRef, ErrorTypeClearVarRef) | |||
| 178 | return cret | 256 | return cret | ||
| 179 | } | 257 | } | ||
| 180 | 258 | ||||
M v4/glib/ghash.go +56 -4
| @@ -286,7 +286,20 @@ var xHashTableFind func(*HashTable, uintptr, uintptr) uintptr | |||||
| 286 | // values in a hash table ends up needing O(n*n) operations). | 286 | // values in a hash table ends up needing O(n*n) operations). | ||
| 287 | func HashTableFind(HashTableVar *HashTable, PredicateVar *HRFunc, UserDataVar uintptr) uintptr { | 287 | func HashTableFind(HashTableVar *HashTable, PredicateVar *HRFunc, UserDataVar uintptr) uintptr { | ||
| 288 | 288 | ||||
| 289 | - | cret := xHashTableFind(HashTableVar, NewCallback(PredicateVar), UserDataVar) | 289 | + | PredicateVarPtr := uintptr(unsafe.Pointer(PredicateVar)) |
| 290 | + | var PredicateVarRef uintptr | |||
| 291 | + | if cbRefPtr, ok := GetCallback(PredicateVarPtr); ok { | |||
| 292 | + | PredicateVarRef = cbRefPtr | |||
| 293 | + | } else { | |||
| 294 | + | fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) bool { | |||
| 295 | + | cbFn := *PredicateVar | |||
| 296 | + | return cbFn(arg0, arg1, arg2) | |||
| 297 | + | } | |||
| 298 | + | PredicateVarRef = purego.NewCallback(fcb) | |||
| 299 | + | SaveCallback(PredicateVarPtr, PredicateVarRef) | |||
| 300 | + | } | |||
| 301 | + | ||||
| 302 | + | cret := xHashTableFind(HashTableVar, PredicateVarRef, UserDataVar) | |||
| 290 | return cret | 303 | return cret | ||
| 291 | } | 304 | } | ||
| 292 | 305 | ||||
| @@ -306,7 +319,20 @@ var xHashTableForeach func(*HashTable, uintptr, uintptr) | |||||
| 306 | // order searches in contrast to g_hash_table_lookup(). | 319 | // order searches in contrast to g_hash_table_lookup(). | ||
| 307 | func HashTableForeach(HashTableVar *HashTable, FuncVar *HFunc, UserDataVar uintptr) { | 320 | func HashTableForeach(HashTableVar *HashTable, FuncVar *HFunc, UserDataVar uintptr) { | ||
| 308 | 321 | ||||
| 309 | - | xHashTableForeach(HashTableVar, NewCallback(FuncVar), UserDataVar) | 322 | + | FuncVarPtr := uintptr(unsafe.Pointer(FuncVar)) |
| 323 | + | var FuncVarRef uintptr | |||
| 324 | + | if cbRefPtr, ok := GetCallback(FuncVarPtr); ok { | |||
| 325 | + | FuncVarRef = cbRefPtr | |||
| 326 | + | } else { | |||
| 327 | + | fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) { | |||
| 328 | + | cbFn := *FuncVar | |||
| 329 | + | cbFn(arg0, arg1, arg2) | |||
| 330 | + | } | |||
| 331 | + | FuncVarRef = purego.NewCallback(fcb) | |||
| 332 | + | SaveCallback(FuncVarPtr, FuncVarRef) | |||
| 333 | + | } | |||
| 334 | + | ||||
| 335 | + | xHashTableForeach(HashTableVar, FuncVarRef, UserDataVar) | |||
| 310 | 336 | ||||
| 311 | } | 337 | } | ||
| 312 | 338 | ||||
| @@ -322,7 +348,20 @@ var xHashTableForeachRemove func(*HashTable, uintptr, uintptr) uint | |||||
| 322 | // key/value pairs in the hash table. | 348 | // key/value pairs in the hash table. | ||
| 323 | func HashTableForeachRemove(HashTableVar *HashTable, FuncVar *HRFunc, UserDataVar uintptr) uint { | 349 | func HashTableForeachRemove(HashTableVar *HashTable, FuncVar *HRFunc, UserDataVar uintptr) uint { | ||
| 324 | 350 | ||||
| 325 | - | cret := xHashTableForeachRemove(HashTableVar, NewCallback(FuncVar), UserDataVar) | 351 | + | FuncVarPtr := uintptr(unsafe.Pointer(FuncVar)) |
| 352 | + | var FuncVarRef uintptr | |||
| 353 | + | if cbRefPtr, ok := GetCallback(FuncVarPtr); ok { | |||
| 354 | + | FuncVarRef = cbRefPtr | |||
| 355 | + | } else { | |||
| 356 | + | fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) bool { | |||
| 357 | + | cbFn := *FuncVar | |||
| 358 | + | return cbFn(arg0, arg1, arg2) | |||
| 359 | + | } | |||
| 360 | + | FuncVarRef = purego.NewCallback(fcb) | |||
| 361 | + | SaveCallback(FuncVarPtr, FuncVarRef) | |||
| 362 | + | } | |||
| 363 | + | ||||
| 364 | + | cret := xHashTableForeachRemove(HashTableVar, FuncVarRef, UserDataVar) | |||
| 326 | return cret | 365 | return cret | ||
| 327 | } | 366 | } | ||
| 328 | 367 | ||||
| @@ -337,7 +376,20 @@ var xHashTableForeachSteal func(*HashTable, uintptr, uintptr) uint | |||||
| 337 | // key/value pairs in the hash table. | 376 | // key/value pairs in the hash table. | ||
| 338 | func HashTableForeachSteal(HashTableVar *HashTable, FuncVar *HRFunc, UserDataVar uintptr) uint { | 377 | func HashTableForeachSteal(HashTableVar *HashTable, FuncVar *HRFunc, UserDataVar uintptr) uint { | ||
| 339 | 378 | ||||
| 340 | - | cret := xHashTableForeachSteal(HashTableVar, NewCallback(FuncVar), UserDataVar) | 379 | + | FuncVarPtr := uintptr(unsafe.Pointer(FuncVar)) |
| 380 | + | var FuncVarRef uintptr | |||
| 381 | + | if cbRefPtr, ok := GetCallback(FuncVarPtr); ok { | |||
| 382 | + | FuncVarRef = cbRefPtr | |||
| 383 | + | } else { | |||
| 384 | + | fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) bool { | |||
| 385 | + | cbFn := *FuncVar | |||
| 386 | + | return cbFn(arg0, arg1, arg2) | |||
| 387 | + | } | |||
| 388 | + | FuncVarRef = purego.NewCallback(fcb) | |||
| 389 | + | SaveCallback(FuncVarPtr, FuncVarRef) | |||
| 390 | + | } | |||
| 391 | + | ||||
| 392 | + | cret := xHashTableForeachSteal(HashTableVar, FuncVarRef, UserDataVar) | |||
| 341 | return cret | 393 | return cret | ||
| 342 | } | 394 | } | ||
| 343 | 395 | ||||
M v4/glib/ghook.go +42 -3
| @@ -135,7 +135,20 @@ var xHookListMarshal func(uintptr, bool, uintptr, uintptr) | |||||
| 135 | // Calls a function on each valid #GHook. | 135 | // Calls a function on each valid #GHook. | ||
| 136 | func (x *HookList) Marshal(MayRecurseVar bool, MarshallerVar *HookMarshaller, MarshalDataVar uintptr) { | 136 | func (x *HookList) Marshal(MayRecurseVar bool, MarshallerVar *HookMarshaller, MarshalDataVar uintptr) { | ||
| 137 | 137 | ||||
| 138 | - | xHookListMarshal(x.GoPointer(), MayRecurseVar, NewCallback(MarshallerVar), MarshalDataVar) | 138 | + | MarshallerVarPtr := uintptr(unsafe.Pointer(MarshallerVar)) |
| 139 | + | var MarshallerVarRef uintptr | |||
| 140 | + | if cbRefPtr, ok := GetCallback(MarshallerVarPtr); ok { | |||
| 141 | + | MarshallerVarRef = cbRefPtr | |||
| 142 | + | } else { | |||
| 143 | + | fcb := func(arg0 *Hook, arg1 uintptr) { | |||
| 144 | + | cbFn := *MarshallerVar | |||
| 145 | + | cbFn(arg0, arg1) | |||
| 146 | + | } | |||
| 147 | + | MarshallerVarRef = purego.NewCallback(fcb) | |||
| 148 | + | SaveCallback(MarshallerVarPtr, MarshallerVarRef) | |||
| 149 | + | } | |||
| 150 | + | ||||
| 151 | + | xHookListMarshal(x.GoPointer(), MayRecurseVar, MarshallerVarRef, MarshalDataVar) | |||
| 139 | 152 | ||||
| 140 | } | 153 | } | ||
| 141 | 154 | ||||
| @@ -145,7 +158,20 @@ var xHookListMarshalCheck func(uintptr, bool, uintptr, uintptr) | |||||
| 145 | // function returns %FALSE. | 158 | // function returns %FALSE. | ||
| 146 | func (x *HookList) MarshalCheck(MayRecurseVar bool, MarshallerVar *HookCheckMarshaller, MarshalDataVar uintptr) { | 159 | func (x *HookList) MarshalCheck(MayRecurseVar bool, MarshallerVar *HookCheckMarshaller, MarshalDataVar uintptr) { | ||
| 147 | 160 | ||||
| 148 | - | xHookListMarshalCheck(x.GoPointer(), MayRecurseVar, NewCallback(MarshallerVar), MarshalDataVar) | 161 | + | MarshallerVarPtr := uintptr(unsafe.Pointer(MarshallerVar)) |
| 162 | + | var MarshallerVarRef uintptr | |||
| 163 | + | if cbRefPtr, ok := GetCallback(MarshallerVarPtr); ok { | |||
| 164 | + | MarshallerVarRef = cbRefPtr | |||
| 165 | + | } else { | |||
| 166 | + | fcb := func(arg0 *Hook, arg1 uintptr) bool { | |||
| 167 | + | cbFn := *MarshallerVar | |||
| 168 | + | return cbFn(arg0, arg1) | |||
| 169 | + | } | |||
| 170 | + | MarshallerVarRef = purego.NewCallback(fcb) | |||
| 171 | + | SaveCallback(MarshallerVarPtr, MarshallerVarRef) | |||
| 172 | + | } | |||
| 173 | + | ||||
| 174 | + | xHookListMarshalCheck(x.GoPointer(), MayRecurseVar, MarshallerVarRef, MarshalDataVar) | |||
| 149 | 175 | ||||
| 150 | } | 176 | } | ||
| 151 | 177 | ||||
| @@ -214,7 +240,20 @@ var xHookInsertSorted func(*HookList, *Hook, uintptr) | |||||
| 214 | // Inserts a #GHook into a #GHookList, sorted by the given function. | 240 | // Inserts a #GHook into a #GHookList, sorted by the given function. | ||
| 215 | func HookInsertSorted(HookListVar *HookList, HookVar *Hook, FuncVar *HookCompareFunc) { | 241 | func HookInsertSorted(HookListVar *HookList, HookVar *Hook, FuncVar *HookCompareFunc) { | ||
| 216 | 242 | ||||
| 217 | - | xHookInsertSorted(HookListVar, HookVar, NewCallback(FuncVar)) | 243 | + | FuncVarPtr := uintptr(unsafe.Pointer(FuncVar)) |
| 244 | + | var FuncVarRef uintptr | |||
| 245 | + | if cbRefPtr, ok := GetCallback(FuncVarPtr); ok { | |||
| 246 | + | FuncVarRef = cbRefPtr | |||
| 247 | + | } else { | |||
| 248 | + | fcb := func(arg0 *Hook, arg1 *Hook) int { | |||
| 249 | + | cbFn := *FuncVar | |||
| 250 | + | return cbFn(arg0, arg1) | |||
| 251 | + | } | |||
| 252 | + | FuncVarRef = purego.NewCallback(fcb) | |||
| 253 | + | SaveCallback(FuncVarPtr, FuncVarRef) | |||
| 254 | + | } | |||
| 255 | + | ||||
| 256 | + | xHookInsertSorted(HookListVar, HookVar, FuncVarRef) | |||
| 218 | 257 | ||||
| 219 | } | 258 | } | ||
| 220 | 259 | ||||
M v4/glib/giochannel.go +41 -2
| @@ -1018,7 +1018,20 @@ var xIoAddWatch func(*IOChannel, IOCondition, uintptr, uintptr) uint | |||||
| 1018 | // with the default priority. | 1018 | // with the default priority. | ||
| 1019 | func IoAddWatch(ChannelVar *IOChannel, ConditionVar IOCondition, FuncVar *IOFunc, UserDataVar uintptr) uint { | 1019 | func IoAddWatch(ChannelVar *IOChannel, ConditionVar IOCondition, FuncVar *IOFunc, UserDataVar uintptr) uint { | ||
| 1020 | 1020 | ||||
| 1021 | - | cret := xIoAddWatch(ChannelVar, ConditionVar, NewCallback(FuncVar), UserDataVar) | 1021 | + | FuncVarPtr := uintptr(unsafe.Pointer(FuncVar)) |
| 1022 | + | var FuncVarRef uintptr | |||
| 1023 | + | if cbRefPtr, ok := GetCallback(FuncVarPtr); ok { | |||
| 1024 | + | FuncVarRef = cbRefPtr | |||
| 1025 | + | } else { | |||
| 1026 | + | fcb := func(arg0 *IOChannel, arg1 IOCondition, arg2 uintptr) bool { | |||
| 1027 | + | cbFn := *FuncVar | |||
| 1028 | + | return cbFn(arg0, arg1, arg2) | |||
| 1029 | + | } | |||
| 1030 | + | FuncVarRef = purego.NewCallback(fcb) | |||
| 1031 | + | SaveCallback(FuncVarPtr, FuncVarRef) | |||
| 1032 | + | } | |||
| 1033 | + | ||||
| 1034 | + | cret := xIoAddWatch(ChannelVar, ConditionVar, FuncVarRef, UserDataVar) | |||
| 1022 | return cret | 1035 | return cret | ||
| 1023 | } | 1036 | } | ||
| 1024 | 1037 | ||||
| @@ -1032,7 +1045,33 @@ var xIoAddWatchFull func(*IOChannel, int, IOCondition, uintptr, uintptr, uintptr | |||||
| 1032 | // You can do these steps manually if you need greater control. | 1045 | // You can do these steps manually if you need greater control. | ||
| 1033 | func IoAddWatchFull(ChannelVar *IOChannel, PriorityVar int, ConditionVar IOCondition, FuncVar *IOFunc, UserDataVar uintptr, NotifyVar *DestroyNotify) uint { | 1046 | func IoAddWatchFull(ChannelVar *IOChannel, PriorityVar int, ConditionVar IOCondition, FuncVar *IOFunc, UserDataVar uintptr, NotifyVar *DestroyNotify) uint { | ||
| 1034 | 1047 | ||||
| 1035 | - | cret := xIoAddWatchFull(ChannelVar, PriorityVar, ConditionVar, NewCallback(FuncVar), UserDataVar, NewCallback(NotifyVar)) | 1048 | + | FuncVarPtr := uintptr(unsafe.Pointer(FuncVar)) |
| 1049 | + | var FuncVarRef uintptr | |||
| 1050 | + | if cbRefPtr, ok := GetCallback(FuncVarPtr); ok { | |||
| 1051 | + | FuncVarRef = cbRefPtr | |||
| 1052 | + | } else { | |||
| 1053 | + | fcb := func(arg0 *IOChannel, arg1 IOCondition, arg2 uintptr) bool { | |||
| 1054 | + | cbFn := *FuncVar | |||
| 1055 | + | return cbFn(arg0, arg1, arg2) | |||
| 1056 | + | } | |||
| 1057 | + | FuncVarRef = purego.NewCallback(fcb) | |||
| 1058 | + | SaveCallback(FuncVarPtr, FuncVarRef) | |||
| 1059 | + | } | |||
| 1060 | + | ||||
| 1061 | + | NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar)) | |||
| 1062 | + | var NotifyVarRef uintptr | |||
| 1063 | + | if cbRefPtr, ok := GetCallback(NotifyVarPtr); ok { | |||
| 1064 | + | NotifyVarRef = cbRefPtr | |||
| 1065 | + | } else { | |||
| 1066 | + | fcb := func(arg0 uintptr) { | |||
| 1067 | + | cbFn := *NotifyVar | |||
| 1068 | + | cbFn(arg0) | |||
| 1069 | + | } | |||
| 1070 | + | NotifyVarRef = purego.NewCallback(fcb) | |||
| 1071 | + | SaveCallback(NotifyVarPtr, NotifyVarRef) | |||
| 1072 | + | } | |||
| 1073 | + | ||||
| 1074 | + | cret := xIoAddWatchFull(ChannelVar, PriorityVar, ConditionVar, FuncVarRef, UserDataVar, NotifyVarRef) | |||
| 1036 | return cret | 1075 | return cret | ||
| 1037 | } | 1076 | } | ||
| 1038 | 1077 | ||||
M v4/glib/glib-unix.go +82 -4
| @@ -99,7 +99,20 @@ var xUnixFdAdd func(int, IOCondition, uintptr, uintptr) uint | |||||
| 99 | // The source will never close the fd -- you must do it yourself. | 99 | // The source will never close the fd -- you must do it yourself. | ||
| 100 | func UnixFdAdd(FdVar int, ConditionVar IOCondition, FunctionVar *UnixFDSourceFunc, UserDataVar uintptr) uint { | 100 | func UnixFdAdd(FdVar int, ConditionVar IOCondition, FunctionVar *UnixFDSourceFunc, UserDataVar uintptr) uint { | ||
| 101 | 101 | ||||
| 102 | - | cret := xUnixFdAdd(FdVar, ConditionVar, NewCallback(FunctionVar), UserDataVar) | 102 | + | FunctionVarPtr := uintptr(unsafe.Pointer(FunctionVar)) |
| 103 | + | var FunctionVarRef uintptr | |||
| 104 | + | if cbRefPtr, ok := GetCallback(FunctionVarPtr); ok { | |||
| 105 | + | FunctionVarRef = cbRefPtr | |||
| 106 | + | } else { | |||
| 107 | + | fcb := func(arg0 int, arg1 IOCondition, arg2 uintptr) bool { | |||
| 108 | + | cbFn := *FunctionVar | |||
| 109 | + | return cbFn(arg0, arg1, arg2) | |||
| 110 | + | } | |||
| 111 | + | FunctionVarRef = purego.NewCallback(fcb) | |||
| 112 | + | SaveCallback(FunctionVarPtr, FunctionVarRef) | |||
| 113 | + | } | |||
| 114 | + | ||||
| 115 | + | cret := xUnixFdAdd(FdVar, ConditionVar, FunctionVarRef, UserDataVar) | |||
| 103 | return cret | 116 | return cret | ||
| 104 | } | 117 | } | ||
| 105 | 118 | ||||
| @@ -113,7 +126,33 @@ var xUnixFdAddFull func(int, int, IOCondition, uintptr, uintptr, uintptr) uint | |||||
| 113 | // @user_data. | 126 | // @user_data. | ||
| 114 | func UnixFdAddFull(PriorityVar int, FdVar int, ConditionVar IOCondition, FunctionVar *UnixFDSourceFunc, UserDataVar uintptr, NotifyVar *DestroyNotify) uint { | 127 | func UnixFdAddFull(PriorityVar int, FdVar int, ConditionVar IOCondition, FunctionVar *UnixFDSourceFunc, UserDataVar uintptr, NotifyVar *DestroyNotify) uint { | ||
| 115 | 128 | ||||
| 116 | - | cret := xUnixFdAddFull(PriorityVar, FdVar, ConditionVar, NewCallback(FunctionVar), UserDataVar, NewCallback(NotifyVar)) | 129 | + | FunctionVarPtr := uintptr(unsafe.Pointer(FunctionVar)) |
| 130 | + | var FunctionVarRef uintptr | |||
| 131 | + | if cbRefPtr, ok := GetCallback(FunctionVarPtr); ok { | |||
| 132 | + | FunctionVarRef = cbRefPtr | |||
| 133 | + | } else { | |||
| 134 | + | fcb := func(arg0 int, arg1 IOCondition, arg2 uintptr) bool { | |||
| 135 | + | cbFn := *FunctionVar | |||
| 136 | + | return cbFn(arg0, arg1, arg2) | |||
| 137 | + | } | |||
| 138 | + | FunctionVarRef = purego.NewCallback(fcb) | |||
| 139 | + | SaveCallback(FunctionVarPtr, FunctionVarRef) | |||
| 140 | + | } | |||
| 141 | + | ||||
| 142 | + | NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar)) | |||
| 143 | + | var NotifyVarRef uintptr | |||
| 144 | + | if cbRefPtr, ok := GetCallback(NotifyVarPtr); ok { | |||
| 145 | + | NotifyVarRef = cbRefPtr | |||
| 146 | + | } else { | |||
| 147 | + | fcb := func(arg0 uintptr) { | |||
| 148 | + | cbFn := *NotifyVar | |||
| 149 | + | cbFn(arg0) | |||
| 150 | + | } | |||
| 151 | + | NotifyVarRef = purego.NewCallback(fcb) | |||
| 152 | + | SaveCallback(NotifyVarPtr, NotifyVarRef) | |||
| 153 | + | } | |||
| 154 | + | ||||
| 155 | + | cret := xUnixFdAddFull(PriorityVar, FdVar, ConditionVar, FunctionVarRef, UserDataVar, NotifyVarRef) | |||
| 117 | return cret | 156 | return cret | ||
| 118 | } | 157 | } | ||
| 119 | 158 | ||||
| @@ -211,7 +250,20 @@ var xUnixSignalAdd func(int, uintptr, uintptr) uint | |||||
| 211 | // using g_source_remove(). | 250 | // using g_source_remove(). | ||
| 212 | func UnixSignalAdd(SignumVar int, HandlerVar *SourceFunc, UserDataVar uintptr) uint { | 251 | func UnixSignalAdd(SignumVar int, HandlerVar *SourceFunc, UserDataVar uintptr) uint { | ||
| 213 | 252 | ||||
| 214 | - | cret := xUnixSignalAdd(SignumVar, NewCallback(HandlerVar), UserDataVar) | 253 | + | HandlerVarPtr := uintptr(unsafe.Pointer(HandlerVar)) |
| 254 | + | var HandlerVarRef uintptr | |||
| 255 | + | if cbRefPtr, ok := GetCallback(HandlerVarPtr); ok { | |||
| 256 | + | HandlerVarRef = cbRefPtr | |||
| 257 | + | } else { | |||
| 258 | + | fcb := func(arg0 uintptr) bool { | |||
| 259 | + | cbFn := *HandlerVar | |||
| 260 | + | return cbFn(arg0) | |||
| 261 | + | } | |||
| 262 | + | HandlerVarRef = purego.NewCallback(fcb) | |||
| 263 | + | SaveCallback(HandlerVarPtr, HandlerVarRef) | |||
| 264 | + | } | |||
| 265 | + | ||||
| 266 | + | cret := xUnixSignalAdd(SignumVar, HandlerVarRef, UserDataVar) | |||
| 215 | return cret | 267 | return cret | ||
| 216 | } | 268 | } | ||
| 217 | 269 | ||||
| @@ -222,7 +274,33 @@ var xUnixSignalAddFull func(int, int, uintptr, uintptr, uintptr) uint | |||||
| 222 | // using g_source_remove(). | 274 | // using g_source_remove(). | ||
| 223 | func UnixSignalAddFull(PriorityVar int, SignumVar int, HandlerVar *SourceFunc, UserDataVar uintptr, NotifyVar *DestroyNotify) uint { | 275 | func UnixSignalAddFull(PriorityVar int, SignumVar int, HandlerVar *SourceFunc, UserDataVar uintptr, NotifyVar *DestroyNotify) uint { | ||
| 224 | 276 | ||||
| 225 | - | cret := xUnixSignalAddFull(PriorityVar, SignumVar, NewCallback(HandlerVar), UserDataVar, NewCallback(NotifyVar)) | 277 | + | HandlerVarPtr := uintptr(unsafe.Pointer(HandlerVar)) |
| 278 | + | var HandlerVarRef uintptr | |||
| 279 | + | if cbRefPtr, ok := GetCallback(HandlerVarPtr); ok { | |||
| 280 | + | HandlerVarRef = cbRefPtr | |||
| 281 | + | } else { | |||
| 282 | + | fcb := func(arg0 uintptr) bool { | |||
| 283 | + | cbFn := *HandlerVar | |||
| 284 | + | return cbFn(arg0) | |||
| 285 | + | } | |||
| 286 | + | HandlerVarRef = purego.NewCallback(fcb) | |||
| 287 | + | SaveCallback(HandlerVarPtr, HandlerVarRef) | |||
| 288 | + | } | |||
| 289 | + | ||||
| 290 | + | NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar)) | |||
| 291 | + | var NotifyVarRef uintptr | |||
| 292 | + | if cbRefPtr, ok := GetCallback(NotifyVarPtr); ok { | |||
| 293 | + | NotifyVarRef = cbRefPtr | |||
| 294 | + | } else { | |||
| 295 | + | fcb := func(arg0 uintptr) { | |||
| 296 | + | cbFn := *NotifyVar | |||
| 297 | + | cbFn(arg0) | |||
| 298 | + | } | |||
| 299 | + | NotifyVarRef = purego.NewCallback(fcb) | |||
| 300 | + | SaveCallback(NotifyVarPtr, NotifyVarRef) | |||
| 301 | + | } | |||
| 302 | + | ||||
| 303 | + | cret := xUnixSignalAddFull(PriorityVar, SignumVar, HandlerVarRef, UserDataVar, NotifyVarRef) | |||
| 226 | return cret | 304 | return cret | ||
| 227 | } | 305 | } | ||
| 228 | 306 | ||||
M v4/glib/glist.go +16 -1
| @@ -31,7 +31,22 @@ var xClearList func(**List, uintptr) | |||||
| 31 | // @list_ptr must be a valid pointer. If @list_ptr points to a null #GList, this does nothing. | 31 | // @list_ptr must be a valid pointer. If @list_ptr points to a null #GList, this does nothing. | ||
| 32 | func ClearList(ListPtrVar **List, DestroyVar *DestroyNotify) { | 32 | func ClearList(ListPtrVar **List, DestroyVar *DestroyNotify) { | ||
| 33 | 33 | ||||
| 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) | |||
| 35 | 50 | ||||
| 36 | } | 51 | } | ||
| 37 | 52 | ||||
M v4/glib/gmain.go +328 -17
| @@ -279,7 +279,20 @@ var xMainContextInvoke func(uintptr, uintptr, uintptr) | |||||
| 279 | // will be continuously run in a loop (and may prevent this call from returning). | 279 | // will be continuously run in a loop (and may prevent this call from returning). | ||
| 280 | func (x *MainContext) Invoke(FunctionVar *SourceFunc, DataVar uintptr) { | 280 | func (x *MainContext) Invoke(FunctionVar *SourceFunc, DataVar uintptr) { | ||
| 281 | 281 | ||||
| 282 | - | xMainContextInvoke(x.GoPointer(), NewCallback(FunctionVar), DataVar) | 282 | + | FunctionVarPtr := uintptr(unsafe.Pointer(FunctionVar)) |
| 283 | + | var FunctionVarRef uintptr | |||
| 284 | + | if cbRefPtr, ok := GetCallback(FunctionVarPtr); ok { | |||
| 285 | + | FunctionVarRef = cbRefPtr | |||
| 286 | + | } else { | |||
| 287 | + | fcb := func(arg0 uintptr) bool { | |||
| 288 | + | cbFn := *FunctionVar | |||
| 289 | + | return cbFn(arg0) | |||
| 290 | + | } | |||
| 291 | + | FunctionVarRef = purego.NewCallback(fcb) | |||
| 292 | + | SaveCallback(FunctionVarPtr, FunctionVarRef) | |||
| 293 | + | } | |||
| 294 | + | ||||
| 295 | + | xMainContextInvoke(x.GoPointer(), FunctionVarRef, DataVar) | |||
| 283 | 296 | ||||
| 284 | } | 297 | } | ||
| 285 | 298 | ||||
| @@ -297,7 +310,35 @@ var xMainContextInvokeFull func(uintptr, int, uintptr, uintptr, uintptr) | |||||
| 297 | // thread or with any particular context acquired. | 310 | // thread or with any particular context acquired. | ||
| 298 | func (x *MainContext) InvokeFull(PriorityVar int, FunctionVar *SourceFunc, DataVar uintptr, NotifyVar *DestroyNotify) { | 311 | func (x *MainContext) InvokeFull(PriorityVar int, FunctionVar *SourceFunc, DataVar uintptr, NotifyVar *DestroyNotify) { | ||
| 299 | 312 | ||||
| 300 | - | xMainContextInvokeFull(x.GoPointer(), PriorityVar, NewCallback(FunctionVar), DataVar, NewCallbackNullable(NotifyVar)) | 313 | + | FunctionVarPtr := uintptr(unsafe.Pointer(FunctionVar)) |
| 314 | + | var FunctionVarRef uintptr | |||
| 315 | + | if cbRefPtr, ok := GetCallback(FunctionVarPtr); ok { | |||
| 316 | + | FunctionVarRef = cbRefPtr | |||
| 317 | + | } else { | |||
| 318 | + | fcb := func(arg0 uintptr) bool { | |||
| 319 | + | cbFn := *FunctionVar | |||
| 320 | + | return cbFn(arg0) | |||
| 321 | + | } | |||
| 322 | + | FunctionVarRef = purego.NewCallback(fcb) | |||
| 323 | + | SaveCallback(FunctionVarPtr, FunctionVarRef) | |||
| 324 | + | } | |||
| 325 | + | ||||
| 326 | + | var NotifyVarRef uintptr | |||
| 327 | + | if NotifyVar != nil { | |||
| 328 | + | NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar)) | |||
| 329 | + | if cbRefPtr, ok := GetCallback(NotifyVarPtr); ok { | |||
| 330 | + | NotifyVarRef = cbRefPtr | |||
| 331 | + | } else { | |||
| 332 | + | fcb := func(arg0 uintptr) { | |||
| 333 | + | cbFn := *NotifyVar | |||
| 334 | + | cbFn(arg0) | |||
| 335 | + | } | |||
| 336 | + | NotifyVarRef = purego.NewCallback(fcb) | |||
| 337 | + | SaveCallback(NotifyVarPtr, NotifyVarRef) | |||
| 338 | + | } | |||
| 339 | + | } | |||
| 340 | + | ||||
| 341 | + | xMainContextInvokeFull(x.GoPointer(), PriorityVar, FunctionVarRef, DataVar, NotifyVarRef) | |||
| 301 | 342 | ||||
| 302 | } | 343 | } | ||
| 303 | 344 | ||||
| @@ -530,7 +571,20 @@ var xMainContextSetPollFunc func(uintptr, uintptr) | |||||
| 530 | // loop with an external event loop. | 571 | // loop with an external event loop. | ||
| 531 | func (x *MainContext) SetPollFunc(FuncVar *PollFunc) { | 572 | func (x *MainContext) SetPollFunc(FuncVar *PollFunc) { | ||
| 532 | 573 | ||||
| 533 | - | xMainContextSetPollFunc(x.GoPointer(), NewCallback(FuncVar)) | 574 | + | FuncVarPtr := uintptr(unsafe.Pointer(FuncVar)) |
| 575 | + | var FuncVarRef uintptr | |||
| 576 | + | if cbRefPtr, ok := GetCallback(FuncVarPtr); ok { | |||
| 577 | + | FuncVarRef = cbRefPtr | |||
| 578 | + | } else { | |||
| 579 | + | fcb := func(arg0 *PollFD, arg1 uint, arg2 int) int { | |||
| 580 | + | cbFn := *FuncVar | |||
| 581 | + | return cbFn(arg0, arg1, arg2) | |||
| 582 | + | } | |||
| 583 | + | FuncVarRef = purego.NewCallback(fcb) | |||
| 584 | + | SaveCallback(FuncVarPtr, FuncVarRef) | |||
| 585 | + | } | |||
| 586 | + | ||||
| 587 | + | xMainContextSetPollFunc(x.GoPointer(), FuncVarRef) | |||
| 534 | 588 | ||||
| 535 | } | 589 | } | ||
| 536 | 590 | ||||
| @@ -1196,7 +1250,35 @@ var xSourceSetCallback func(uintptr, uintptr, uintptr, uintptr) | |||||
| 1196 | // of also unsetting the callback. | 1250 | // of also unsetting the callback. | ||
| 1197 | func (x *Source) SetCallback(FuncVar *SourceFunc, DataVar uintptr, NotifyVar *DestroyNotify) { | 1251 | func (x *Source) SetCallback(FuncVar *SourceFunc, DataVar uintptr, NotifyVar *DestroyNotify) { | ||
| 1198 | 1252 | ||||
| 1199 | - | xSourceSetCallback(x.GoPointer(), NewCallback(FuncVar), DataVar, NewCallbackNullable(NotifyVar)) | 1253 | + | FuncVarPtr := uintptr(unsafe.Pointer(FuncVar)) |
| 1254 | + | var FuncVarRef uintptr | |||
| 1255 | + | if cbRefPtr, ok := GetCallback(FuncVarPtr); ok { | |||
| 1256 | + | FuncVarRef = cbRefPtr | |||
| 1257 | + | } else { | |||
| 1258 | + | fcb := func(arg0 uintptr) bool { | |||
| 1259 | + | cbFn := *FuncVar | |||
| 1260 | + | return cbFn(arg0) | |||
| 1261 | + | } | |||
| 1262 | + | FuncVarRef = purego.NewCallback(fcb) | |||
| 1263 | + | SaveCallback(FuncVarPtr, FuncVarRef) | |||
| 1264 | + | } | |||
| 1265 | + | ||||
| 1266 | + | var NotifyVarRef uintptr | |||
| 1267 | + | if NotifyVar != nil { | |||
| 1268 | + | NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar)) | |||
| 1269 | + | if cbRefPtr, ok := GetCallback(NotifyVarPtr); ok { | |||
| 1270 | + | NotifyVarRef = cbRefPtr | |||
| 1271 | + | } else { | |||
| 1272 | + | fcb := func(arg0 uintptr) { | |||
| 1273 | + | cbFn := *NotifyVar | |||
| 1274 | + | cbFn(arg0) | |||
| 1275 | + | } | |||
| 1276 | + | NotifyVarRef = purego.NewCallback(fcb) | |||
| 1277 | + | SaveCallback(NotifyVarPtr, NotifyVarRef) | |||
| 1278 | + | } | |||
| 1279 | + | } | |||
| 1280 | + | ||||
| 1281 | + | xSourceSetCallback(x.GoPointer(), FuncVarRef, DataVar, NotifyVarRef) | |||
| 1200 | 1282 | ||||
| 1201 | } | 1283 | } | ||
| 1202 | 1284 | ||||
| @@ -1257,7 +1339,20 @@ var xSourceSetDisposeFunction func(uintptr, uintptr) | |||||
| 1257 | // This should only ever be called from [struct@GLib.Source] implementations. | 1339 | // This should only ever be called from [struct@GLib.Source] implementations. | ||
| 1258 | func (x *Source) SetDisposeFunction(DisposeVar *SourceDisposeFunc) { | 1340 | func (x *Source) SetDisposeFunction(DisposeVar *SourceDisposeFunc) { | ||
| 1259 | 1341 | ||||
| 1260 | - | xSourceSetDisposeFunction(x.GoPointer(), NewCallback(DisposeVar)) | 1342 | + | DisposeVarPtr := uintptr(unsafe.Pointer(DisposeVar)) |
| 1343 | + | var DisposeVarRef uintptr | |||
| 1344 | + | if cbRefPtr, ok := GetCallback(DisposeVarPtr); ok { | |||
| 1345 | + | DisposeVarRef = cbRefPtr | |||
| 1346 | + | } else { | |||
| 1347 | + | fcb := func(arg0 *Source) { | |||
| 1348 | + | cbFn := *DisposeVar | |||
| 1349 | + | cbFn(arg0) | |||
| 1350 | + | } | |||
| 1351 | + | DisposeVarRef = purego.NewCallback(fcb) | |||
| 1352 | + | SaveCallback(DisposeVarPtr, DisposeVarRef) | |||
| 1353 | + | } | |||
| 1354 | + | ||||
| 1355 | + | xSourceSetDisposeFunction(x.GoPointer(), DisposeVarRef) | |||
| 1261 | 1356 | ||||
| 1262 | } | 1357 | } | ||
| 1263 | 1358 | ||||
| @@ -1595,7 +1690,20 @@ var xChildWatchAdd func(Pid, uintptr, uintptr) uint | |||||
| 1595 | // need greater control. | 1690 | // need greater control. | ||
| 1596 | func ChildWatchAdd(PidVar Pid, FunctionVar *ChildWatchFunc, DataVar uintptr) uint { | 1691 | func ChildWatchAdd(PidVar Pid, FunctionVar *ChildWatchFunc, DataVar uintptr) uint { | ||
| 1597 | 1692 | ||||
| 1598 | - | cret := xChildWatchAdd(PidVar, NewCallback(FunctionVar), DataVar) | 1693 | + | FunctionVarPtr := uintptr(unsafe.Pointer(FunctionVar)) |
| 1694 | + | var FunctionVarRef uintptr | |||
| 1695 | + | if cbRefPtr, ok := GetCallback(FunctionVarPtr); ok { | |||
| 1696 | + | FunctionVarRef = cbRefPtr | |||
| 1697 | + | } else { | |||
| 1698 | + | fcb := func(arg0 Pid, arg1 int, arg2 uintptr) { | |||
| 1699 | + | cbFn := *FunctionVar | |||
| 1700 | + | cbFn(arg0, arg1, arg2) | |||
| 1701 | + | } | |||
| 1702 | + | FunctionVarRef = purego.NewCallback(fcb) | |||
| 1703 | + | SaveCallback(FunctionVarPtr, FunctionVarRef) | |||
| 1704 | + | } | |||
| 1705 | + | ||||
| 1706 | + | cret := xChildWatchAdd(PidVar, FunctionVarRef, DataVar) | |||
| 1599 | return cret | 1707 | return cret | ||
| 1600 | } | 1708 | } | ||
| 1601 | 1709 | ||||
| @@ -1628,7 +1736,35 @@ var xChildWatchAddFull func(int, Pid, uintptr, uintptr, uintptr) uint | |||||
| 1628 | // need greater control. | 1736 | // need greater control. | ||
| 1629 | func ChildWatchAddFull(PriorityVar int, PidVar Pid, FunctionVar *ChildWatchFunc, DataVar uintptr, NotifyVar *DestroyNotify) uint { | 1737 | func ChildWatchAddFull(PriorityVar int, PidVar Pid, FunctionVar *ChildWatchFunc, DataVar uintptr, NotifyVar *DestroyNotify) uint { | ||
| 1630 | 1738 | ||||
| 1631 | - | cret := xChildWatchAddFull(PriorityVar, PidVar, NewCallback(FunctionVar), DataVar, NewCallbackNullable(NotifyVar)) | 1739 | + | FunctionVarPtr := uintptr(unsafe.Pointer(FunctionVar)) |
| 1740 | + | var FunctionVarRef uintptr | |||
| 1741 | + | if cbRefPtr, ok := GetCallback(FunctionVarPtr); ok { | |||
| 1742 | + | FunctionVarRef = cbRefPtr | |||
| 1743 | + | } else { | |||
| 1744 | + | fcb := func(arg0 Pid, arg1 int, arg2 uintptr) { | |||
| 1745 | + | cbFn := *FunctionVar | |||
| 1746 | + | cbFn(arg0, arg1, arg2) | |||
| 1747 | + | } | |||
| 1748 | + | FunctionVarRef = purego.NewCallback(fcb) | |||
| 1749 | + | SaveCallback(FunctionVarPtr, FunctionVarRef) | |||
| 1750 | + | } | |||
| 1751 | + | ||||
| 1752 | + | var NotifyVarRef uintptr | |||
| 1753 | + | if NotifyVar != nil { | |||
| 1754 | + | NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar)) | |||
| 1755 | + | if cbRefPtr, ok := GetCallback(NotifyVarPtr); ok { | |||
| 1756 | + | NotifyVarRef = cbRefPtr | |||
| 1757 | + | } else { | |||
| 1758 | + | fcb := func(arg0 uintptr) { | |||
| 1759 | + | cbFn := *NotifyVar | |||
| 1760 | + | cbFn(arg0) | |||
| 1761 | + | } | |||
| 1762 | + | NotifyVarRef = purego.NewCallback(fcb) | |||
| 1763 | + | SaveCallback(NotifyVarPtr, NotifyVarRef) | |||
| 1764 | + | } | |||
| 1765 | + | } | |||
| 1766 | + | ||||
| 1767 | + | cret := xChildWatchAddFull(PriorityVar, PidVar, FunctionVarRef, DataVar, NotifyVarRef) | |||
| 1632 | return cret | 1768 | return cret | ||
| 1633 | } | 1769 | } | ||
| 1634 | 1770 | ||||
| @@ -1694,7 +1830,20 @@ var xClearHandleId func(uint, uintptr) | |||||
| 1694 | // pointer casts. | 1830 | // pointer casts. | ||
| 1695 | func ClearHandleId(TagPtrVar uint, ClearFuncVar *ClearHandleFunc) { | 1831 | func ClearHandleId(TagPtrVar uint, ClearFuncVar *ClearHandleFunc) { | ||
| 1696 | 1832 | ||||
| 1697 | - | xClearHandleId(TagPtrVar, NewCallback(ClearFuncVar)) | 1833 | + | ClearFuncVarPtr := uintptr(unsafe.Pointer(ClearFuncVar)) |
| 1834 | + | var ClearFuncVarRef uintptr | |||
| 1835 | + | if cbRefPtr, ok := GetCallback(ClearFuncVarPtr); ok { | |||
| 1836 | + | ClearFuncVarRef = cbRefPtr | |||
| 1837 | + | } else { | |||
| 1838 | + | fcb := func(arg0 uint) { | |||
| 1839 | + | cbFn := *ClearFuncVar | |||
| 1840 | + | cbFn(arg0) | |||
| 1841 | + | } | |||
| 1842 | + | ClearFuncVarRef = purego.NewCallback(fcb) | |||
| 1843 | + | SaveCallback(ClearFuncVarPtr, ClearFuncVarRef) | |||
| 1844 | + | } | |||
| 1845 | + | ||||
| 1846 | + | xClearHandleId(TagPtrVar, ClearFuncVarRef) | |||
| 1698 | 1847 | ||||
| 1699 | } | 1848 | } | ||
| 1700 | 1849 | ||||
| @@ -1767,7 +1916,20 @@ var xIdleAdd func(uintptr, uintptr) uint | |||||
| 1767 | // need greater control or to use a custom main context. | 1916 | // need greater control or to use a custom main context. | ||
| 1768 | func IdleAdd(FunctionVar *SourceFunc, DataVar uintptr) uint { | 1917 | func IdleAdd(FunctionVar *SourceFunc, DataVar uintptr) uint { | ||
| 1769 | 1918 | ||||
| 1770 | - | cret := xIdleAdd(NewCallback(FunctionVar), DataVar) | 1919 | + | FunctionVarPtr := uintptr(unsafe.Pointer(FunctionVar)) |
| 1920 | + | var FunctionVarRef uintptr | |||
| 1921 | + | if cbRefPtr, ok := GetCallback(FunctionVarPtr); ok { | |||
| 1922 | + | FunctionVarRef = cbRefPtr | |||
| 1923 | + | } else { | |||
| 1924 | + | fcb := func(arg0 uintptr) bool { | |||
| 1925 | + | cbFn := *FunctionVar | |||
| 1926 | + | return cbFn(arg0) | |||
| 1927 | + | } | |||
| 1928 | + | FunctionVarRef = purego.NewCallback(fcb) | |||
| 1929 | + | SaveCallback(FunctionVarPtr, FunctionVarRef) | |||
| 1930 | + | } | |||
| 1931 | + | ||||
| 1932 | + | cret := xIdleAdd(FunctionVarRef, DataVar) | |||
| 1771 | return cret | 1933 | return cret | ||
| 1772 | } | 1934 | } | ||
| 1773 | 1935 | ||||
| @@ -1789,7 +1951,35 @@ var xIdleAddFull func(int, uintptr, uintptr, uintptr) uint | |||||
| 1789 | // need greater control or to use a custom main context. | 1951 | // need greater control or to use a custom main context. | ||
| 1790 | func IdleAddFull(PriorityVar int, FunctionVar *SourceFunc, DataVar uintptr, NotifyVar *DestroyNotify) uint { | 1952 | func IdleAddFull(PriorityVar int, FunctionVar *SourceFunc, DataVar uintptr, NotifyVar *DestroyNotify) uint { | ||
| 1791 | 1953 | ||||
| 1792 | - | cret := xIdleAddFull(PriorityVar, NewCallback(FunctionVar), DataVar, NewCallbackNullable(NotifyVar)) | 1954 | + | FunctionVarPtr := uintptr(unsafe.Pointer(FunctionVar)) |
| 1955 | + | var FunctionVarRef uintptr | |||
| 1956 | + | if cbRefPtr, ok := GetCallback(FunctionVarPtr); ok { | |||
| 1957 | + | FunctionVarRef = cbRefPtr | |||
| 1958 | + | } else { | |||
| 1959 | + | fcb := func(arg0 uintptr) bool { | |||
| 1960 | + | cbFn := *FunctionVar | |||
| 1961 | + | return cbFn(arg0) | |||
| 1962 | + | } | |||
| 1963 | + | FunctionVarRef = purego.NewCallback(fcb) | |||
| 1964 | + | SaveCallback(FunctionVarPtr, FunctionVarRef) | |||
| 1965 | + | } | |||
| 1966 | + | ||||
| 1967 | + | var NotifyVarRef uintptr | |||
| 1968 | + | if NotifyVar != nil { | |||
| 1969 | + | NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar)) | |||
| 1970 | + | if cbRefPtr, ok := GetCallback(NotifyVarPtr); ok { | |||
| 1971 | + | NotifyVarRef = cbRefPtr | |||
| 1972 | + | } else { | |||
| 1973 | + | fcb := func(arg0 uintptr) { | |||
| 1974 | + | cbFn := *NotifyVar | |||
| 1975 | + | cbFn(arg0) | |||
| 1976 | + | } | |||
| 1977 | + | NotifyVarRef = purego.NewCallback(fcb) | |||
| 1978 | + | SaveCallback(NotifyVarPtr, NotifyVarRef) | |||
| 1979 | + | } | |||
| 1980 | + | } | |||
| 1981 | + | ||||
| 1982 | + | cret := xIdleAddFull(PriorityVar, FunctionVarRef, DataVar, NotifyVarRef) | |||
| 1793 | return cret | 1983 | return cret | ||
| 1794 | } | 1984 | } | ||
| 1795 | 1985 | ||||
| @@ -1807,7 +1997,20 @@ var xIdleAddOnce func(uintptr, uintptr) uint | |||||
| 1807 | // This function otherwise behaves like [func@GLib.idle_add]. | 1997 | // This function otherwise behaves like [func@GLib.idle_add]. | ||
| 1808 | func IdleAddOnce(FunctionVar *SourceOnceFunc, DataVar uintptr) uint { | 1998 | func IdleAddOnce(FunctionVar *SourceOnceFunc, DataVar uintptr) uint { | ||
| 1809 | 1999 | ||||
| 1810 | - | cret := xIdleAddOnce(NewCallback(FunctionVar), DataVar) | 2000 | + | FunctionVarPtr := uintptr(unsafe.Pointer(FunctionVar)) |
| 2001 | + | var FunctionVarRef uintptr | |||
| 2002 | + | if cbRefPtr, ok := GetCallback(FunctionVarPtr); ok { | |||
| 2003 | + | FunctionVarRef = cbRefPtr | |||
| 2004 | + | } else { | |||
| 2005 | + | fcb := func(arg0 uintptr) { | |||
| 2006 | + | cbFn := *FunctionVar | |||
| 2007 | + | cbFn(arg0) | |||
| 2008 | + | } | |||
| 2009 | + | FunctionVarRef = purego.NewCallback(fcb) | |||
| 2010 | + | SaveCallback(FunctionVarPtr, FunctionVarRef) | |||
| 2011 | + | } | |||
| 2012 | + | ||||
| 2013 | + | cret := xIdleAddOnce(FunctionVarRef, DataVar) | |||
| 1811 | return cret | 2014 | return cret | ||
| 1812 | } | 2015 | } | ||
| 1813 | 2016 | ||||
| @@ -2130,7 +2333,20 @@ var xTimeoutAdd func(uint, uintptr, uintptr) uint | |||||
| 2130 | // time. See [func@GLib.get_monotonic_time]. | 2333 | // time. See [func@GLib.get_monotonic_time]. | ||
| 2131 | func TimeoutAdd(IntervalVar uint, FunctionVar *SourceFunc, DataVar uintptr) uint { | 2334 | func TimeoutAdd(IntervalVar uint, FunctionVar *SourceFunc, DataVar uintptr) uint { | ||
| 2132 | 2335 | ||||
| 2133 | - | cret := xTimeoutAdd(IntervalVar, NewCallback(FunctionVar), DataVar) | 2336 | + | FunctionVarPtr := uintptr(unsafe.Pointer(FunctionVar)) |
| 2337 | + | var FunctionVarRef uintptr | |||
| 2338 | + | if cbRefPtr, ok := GetCallback(FunctionVarPtr); ok { | |||
| 2339 | + | FunctionVarRef = cbRefPtr | |||
| 2340 | + | } else { | |||
| 2341 | + | fcb := func(arg0 uintptr) bool { | |||
| 2342 | + | cbFn := *FunctionVar | |||
| 2343 | + | return cbFn(arg0) | |||
| 2344 | + | } | |||
| 2345 | + | FunctionVarRef = purego.NewCallback(fcb) | |||
| 2346 | + | SaveCallback(FunctionVarPtr, FunctionVarRef) | |||
| 2347 | + | } | |||
| 2348 | + | ||||
| 2349 | + | cret := xTimeoutAdd(IntervalVar, FunctionVarRef, DataVar) | |||
| 2134 | return cret | 2350 | return cret | ||
| 2135 | } | 2351 | } | ||
| 2136 | 2352 | ||||
| @@ -2166,7 +2382,35 @@ var xTimeoutAddFull func(int, uint, uintptr, uintptr, uintptr) uint | |||||
| 2166 | // See [func@GLib.get_monotonic_time]. | 2382 | // See [func@GLib.get_monotonic_time]. | ||
| 2167 | func TimeoutAddFull(PriorityVar int, IntervalVar uint, FunctionVar *SourceFunc, DataVar uintptr, NotifyVar *DestroyNotify) uint { | 2383 | func TimeoutAddFull(PriorityVar int, IntervalVar uint, FunctionVar *SourceFunc, DataVar uintptr, NotifyVar *DestroyNotify) uint { | ||
| 2168 | 2384 | ||||
| 2169 | - | cret := xTimeoutAddFull(PriorityVar, IntervalVar, NewCallback(FunctionVar), DataVar, NewCallbackNullable(NotifyVar)) | 2385 | + | FunctionVarPtr := uintptr(unsafe.Pointer(FunctionVar)) |
| 2386 | + | var FunctionVarRef uintptr | |||
| 2387 | + | if cbRefPtr, ok := GetCallback(FunctionVarPtr); ok { | |||
| 2388 | + | FunctionVarRef = cbRefPtr | |||
| 2389 | + | } else { | |||
| 2390 | + | fcb := func(arg0 uintptr) bool { | |||
| 2391 | + | cbFn := *FunctionVar | |||
| 2392 | + | return cbFn(arg0) | |||
| 2393 | + | } | |||
| 2394 | + | FunctionVarRef = purego.NewCallback(fcb) | |||
| 2395 | + | SaveCallback(FunctionVarPtr, FunctionVarRef) | |||
| 2396 | + | } | |||
| 2397 | + | ||||
| 2398 | + | var NotifyVarRef uintptr | |||
| 2399 | + | if NotifyVar != nil { | |||
| 2400 | + | NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar)) | |||
| 2401 | + | if cbRefPtr, ok := GetCallback(NotifyVarPtr); ok { | |||
| 2402 | + | NotifyVarRef = cbRefPtr | |||
| 2403 | + | } else { | |||
| 2404 | + | fcb := func(arg0 uintptr) { | |||
| 2405 | + | cbFn := *NotifyVar | |||
| 2406 | + | cbFn(arg0) | |||
| 2407 | + | } | |||
| 2408 | + | NotifyVarRef = purego.NewCallback(fcb) | |||
| 2409 | + | SaveCallback(NotifyVarPtr, NotifyVarRef) | |||
| 2410 | + | } | |||
| 2411 | + | } | |||
| 2412 | + | ||||
| 2413 | + | cret := xTimeoutAddFull(PriorityVar, IntervalVar, FunctionVarRef, DataVar, NotifyVarRef) | |||
| 2170 | return cret | 2414 | return cret | ||
| 2171 | } | 2415 | } | ||
| 2172 | 2416 | ||||
| @@ -2181,7 +2425,20 @@ var xTimeoutAddOnce func(uint, uintptr, uintptr) uint | |||||
| 2181 | // This function otherwise behaves like [func@GLib.timeout_add]. | 2425 | // This function otherwise behaves like [func@GLib.timeout_add]. | ||
| 2182 | func TimeoutAddOnce(IntervalVar uint, FunctionVar *SourceOnceFunc, DataVar uintptr) uint { | 2426 | func TimeoutAddOnce(IntervalVar uint, FunctionVar *SourceOnceFunc, DataVar uintptr) uint { | ||
| 2183 | 2427 | ||||
| 2184 | - | cret := xTimeoutAddOnce(IntervalVar, NewCallback(FunctionVar), DataVar) | 2428 | + | FunctionVarPtr := uintptr(unsafe.Pointer(FunctionVar)) |
| 2429 | + | var FunctionVarRef uintptr | |||
| 2430 | + | if cbRefPtr, ok := GetCallback(FunctionVarPtr); ok { | |||
| 2431 | + | FunctionVarRef = cbRefPtr | |||
| 2432 | + | } else { | |||
| 2433 | + | fcb := func(arg0 uintptr) { | |||
| 2434 | + | cbFn := *FunctionVar | |||
| 2435 | + | cbFn(arg0) | |||
| 2436 | + | } | |||
| 2437 | + | FunctionVarRef = purego.NewCallback(fcb) | |||
| 2438 | + | SaveCallback(FunctionVarPtr, FunctionVarRef) | |||
| 2439 | + | } | |||
| 2440 | + | ||||
| 2441 | + | cret := xTimeoutAddOnce(IntervalVar, FunctionVarRef, DataVar) | |||
| 2185 | return cret | 2442 | return cret | ||
| 2186 | } | 2443 | } | ||
| 2187 | 2444 | ||||
| @@ -2212,7 +2469,20 @@ var xTimeoutAddSeconds func(uint, uintptr, uintptr) uint | |||||
| 2212 | // time. See [func@GLib.get_monotonic_time]. | 2469 | // time. See [func@GLib.get_monotonic_time]. | ||
| 2213 | func TimeoutAddSeconds(IntervalVar uint, FunctionVar *SourceFunc, DataVar uintptr) uint { | 2470 | func TimeoutAddSeconds(IntervalVar uint, FunctionVar *SourceFunc, DataVar uintptr) uint { | ||
| 2214 | 2471 | ||||
| 2215 | - | cret := xTimeoutAddSeconds(IntervalVar, NewCallback(FunctionVar), DataVar) | 2472 | + | FunctionVarPtr := uintptr(unsafe.Pointer(FunctionVar)) |
| 2473 | + | var FunctionVarRef uintptr | |||
| 2474 | + | if cbRefPtr, ok := GetCallback(FunctionVarPtr); ok { | |||
| 2475 | + | FunctionVarRef = cbRefPtr | |||
| 2476 | + | } else { | |||
| 2477 | + | fcb := func(arg0 uintptr) bool { | |||
| 2478 | + | cbFn := *FunctionVar | |||
| 2479 | + | return cbFn(arg0) | |||
| 2480 | + | } | |||
| 2481 | + | FunctionVarRef = purego.NewCallback(fcb) | |||
| 2482 | + | SaveCallback(FunctionVarPtr, FunctionVarRef) | |||
| 2483 | + | } | |||
| 2484 | + | ||||
| 2485 | + | cret := xTimeoutAddSeconds(IntervalVar, FunctionVarRef, DataVar) | |||
| 2216 | return cret | 2486 | return cret | ||
| 2217 | } | 2487 | } | ||
| 2218 | 2488 | ||||
| @@ -2260,7 +2530,35 @@ var xTimeoutAddSecondsFull func(int, uint, uintptr, uintptr, uintptr) uint | |||||
| 2260 | // time. See [func@GLib.get_monotonic_time]. | 2530 | // time. See [func@GLib.get_monotonic_time]. | ||
| 2261 | func TimeoutAddSecondsFull(PriorityVar int, IntervalVar uint, FunctionVar *SourceFunc, DataVar uintptr, NotifyVar *DestroyNotify) uint { | 2531 | func TimeoutAddSecondsFull(PriorityVar int, IntervalVar uint, FunctionVar *SourceFunc, DataVar uintptr, NotifyVar *DestroyNotify) uint { | ||
| 2262 | 2532 | ||||
| 2263 | - | cret := xTimeoutAddSecondsFull(PriorityVar, IntervalVar, NewCallback(FunctionVar), DataVar, NewCallbackNullable(NotifyVar)) | 2533 | + | FunctionVarPtr := uintptr(unsafe.Pointer(FunctionVar)) |
| 2534 | + | var FunctionVarRef uintptr | |||
| 2535 | + | if cbRefPtr, ok := GetCallback(FunctionVarPtr); ok { | |||
| 2536 | + | FunctionVarRef = cbRefPtr | |||
| 2537 | + | } else { | |||
| 2538 | + | fcb := func(arg0 uintptr) bool { | |||
| 2539 | + | cbFn := *FunctionVar | |||
| 2540 | + | return cbFn(arg0) | |||
| 2541 | + | } | |||
| 2542 | + | FunctionVarRef = purego.NewCallback(fcb) | |||
| 2543 | + | SaveCallback(FunctionVarPtr, FunctionVarRef) | |||
| 2544 | + | } | |||
| 2545 | + | ||||
| 2546 | + | var NotifyVarRef uintptr | |||
| 2547 | + | if NotifyVar != nil { | |||
| 2548 | + | NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar)) | |||
| 2549 | + | if cbRefPtr, ok := GetCallback(NotifyVarPtr); ok { | |||
| 2550 | + | NotifyVarRef = cbRefPtr | |||
| 2551 | + | } else { | |||
| 2552 | + | fcb := func(arg0 uintptr) { | |||
| 2553 | + | cbFn := *NotifyVar | |||
| 2554 | + | cbFn(arg0) | |||
| 2555 | + | } | |||
| 2556 | + | NotifyVarRef = purego.NewCallback(fcb) | |||
| 2557 | + | SaveCallback(NotifyVarPtr, NotifyVarRef) | |||
| 2558 | + | } | |||
| 2559 | + | } | |||
| 2560 | + | ||||
| 2561 | + | cret := xTimeoutAddSecondsFull(PriorityVar, IntervalVar, FunctionVarRef, DataVar, NotifyVarRef) | |||
| 2264 | return cret | 2562 | return cret | ||
| 2265 | } | 2563 | } | ||
| 2266 | 2564 | ||||
| @@ -2270,7 +2568,20 @@ var xTimeoutAddSecondsOnce func(uint, uintptr, uintptr) uint | |||||
| 2270 | // seconds. | 2568 | // seconds. | ||
| 2271 | func TimeoutAddSecondsOnce(IntervalVar uint, FunctionVar *SourceOnceFunc, DataVar uintptr) uint { | 2569 | func TimeoutAddSecondsOnce(IntervalVar uint, FunctionVar *SourceOnceFunc, DataVar uintptr) uint { | ||
| 2272 | 2570 | ||||
| 2273 | - | cret := xTimeoutAddSecondsOnce(IntervalVar, NewCallback(FunctionVar), DataVar) | 2571 | + | FunctionVarPtr := uintptr(unsafe.Pointer(FunctionVar)) |
| 2572 | + | var FunctionVarRef uintptr | |||
| 2573 | + | if cbRefPtr, ok := GetCallback(FunctionVarPtr); ok { | |||
| 2574 | + | FunctionVarRef = cbRefPtr | |||
| 2575 | + | } else { | |||
| 2576 | + | fcb := func(arg0 uintptr) { | |||
| 2577 | + | cbFn := *FunctionVar | |||
| 2578 | + | cbFn(arg0) | |||
| 2579 | + | } | |||
| 2580 | + | FunctionVarRef = purego.NewCallback(fcb) | |||
| 2581 | + | SaveCallback(FunctionVarPtr, FunctionVarRef) | |||
| 2582 | + | } | |||
| 2583 | + | ||||
| 2584 | + | cret := xTimeoutAddSecondsOnce(IntervalVar, FunctionVarRef, DataVar) | |||
| 2274 | return cret | 2585 | return cret | ||
| 2275 | } | 2586 | } | ||
| 2276 | 2587 | ||||
M v4/glib/gmarkup.go +14 -1
| @@ -38,7 +38,20 @@ var xNewMarkupParseContext func(*MarkupParser, MarkupParseFlags, uintptr, uintpt | |||||
| 38 | // free it and create a new parse context). | 38 | // free it and create a new parse context). | ||
| 39 | func NewMarkupParseContext(ParserVar *MarkupParser, FlagsVar MarkupParseFlags, UserDataVar uintptr, UserDataDnotifyVar *DestroyNotify) *MarkupParseContext { | 39 | func NewMarkupParseContext(ParserVar *MarkupParser, FlagsVar MarkupParseFlags, UserDataVar uintptr, UserDataDnotifyVar *DestroyNotify) *MarkupParseContext { | ||
| 40 | 40 | ||||
| 41 | - | cret := xNewMarkupParseContext(ParserVar, FlagsVar, UserDataVar, NewCallback(UserDataDnotifyVar)) | 41 | + | UserDataDnotifyVarPtr := uintptr(unsafe.Pointer(UserDataDnotifyVar)) |
| 42 | + | var UserDataDnotifyVarRef uintptr | |||
| 43 | + | if cbRefPtr, ok := GetCallback(UserDataDnotifyVarPtr); ok { | |||
| 44 | + | UserDataDnotifyVarRef = cbRefPtr | |||
| 45 | + | } else { | |||
| 46 | + | fcb := func(arg0 uintptr) { | |||
| 47 | + | cbFn := *UserDataDnotifyVar | |||
| 48 | + | cbFn(arg0) | |||
| 49 | + | } | |||
| 50 | + | UserDataDnotifyVarRef = purego.NewCallback(fcb) | |||
| 51 | + | SaveCallback(UserDataDnotifyVarPtr, UserDataDnotifyVarRef) | |||
| 52 | + | } | |||
| 53 | + | ||||
| 54 | + | cret := xNewMarkupParseContext(ParserVar, FlagsVar, UserDataVar, UserDataDnotifyVarRef) | |||
| 42 | return cret | 55 | return cret | ||
| 43 | } | 56 | } | ||
| 44 | 57 | ||||
M v4/glib/gmem.go +14 -1
| @@ -279,7 +279,20 @@ var xClearPointer func(uintptr, uintptr) | |||||
| 279 | // ``` | 279 | // ``` | ||
| 280 | func ClearPointer(PpVar uintptr, DestroyVar *DestroyNotify) { | 280 | func ClearPointer(PpVar uintptr, DestroyVar *DestroyNotify) { | ||
| 281 | 281 | ||||
| 282 | - | xClearPointer(PpVar, NewCallback(DestroyVar)) | 282 | + | DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar)) |
| 283 | + | var DestroyVarRef uintptr | |||
| 284 | + | if cbRefPtr, ok := GetCallback(DestroyVarPtr); ok { | |||
| 285 | + | DestroyVarRef = cbRefPtr | |||
| 286 | + | } else { | |||
| 287 | + | fcb := func(arg0 uintptr) { | |||
| 288 | + | cbFn := *DestroyVar | |||
| 289 | + | cbFn(arg0) | |||
| 290 | + | } | |||
| 291 | + | DestroyVarRef = purego.NewCallback(fcb) | |||
| 292 | + | SaveCallback(DestroyVarPtr, DestroyVarRef) | |||
| 293 | + | } | |||
| 294 | + | ||||
| 295 | + | xClearPointer(PpVar, DestroyVarRef) | |||
| 283 | 296 | ||||
| 284 | } | 297 | } | ||
| 285 | 298 | ||||
M v4/glib/gmessages.go +114 -6
| @@ -339,7 +339,20 @@ var xLogSetDefaultHandler func(uintptr, uintptr) uintptr | |||||
| 339 | // [Using Structured Logging](logging.html#using-structured-logging). | 339 | // [Using Structured Logging](logging.html#using-structured-logging). | ||
| 340 | func LogSetDefaultHandler(LogFuncVar *LogFunc, UserDataVar uintptr) uintptr { | 340 | func LogSetDefaultHandler(LogFuncVar *LogFunc, UserDataVar uintptr) uintptr { | ||
| 341 | 341 | ||||
| 342 | - | cret := xLogSetDefaultHandler(NewCallback(LogFuncVar), UserDataVar) | 342 | + | LogFuncVarPtr := uintptr(unsafe.Pointer(LogFuncVar)) |
| 343 | + | var LogFuncVarRef uintptr | |||
| 344 | + | if cbRefPtr, ok := GetCallback(LogFuncVarPtr); ok { | |||
| 345 | + | LogFuncVarRef = cbRefPtr | |||
| 346 | + | } else { | |||
| 347 | + | fcb := func(arg0 string, arg1 LogLevelFlags, arg2 string, arg3 uintptr) { | |||
| 348 | + | cbFn := *LogFuncVar | |||
| 349 | + | cbFn(arg0, arg1, arg2, arg3) | |||
| 350 | + | } | |||
| 351 | + | LogFuncVarRef = purego.NewCallback(fcb) | |||
| 352 | + | SaveCallback(LogFuncVarPtr, LogFuncVarRef) | |||
| 353 | + | } | |||
| 354 | + | ||||
| 355 | + | cret := xLogSetDefaultHandler(LogFuncVarRef, UserDataVar) | |||
| 343 | return cret | 356 | return cret | ||
| 344 | } | 357 | } | ||
| 345 | 358 | ||||
| @@ -412,7 +425,20 @@ var xLogSetHandler func(string, LogLevelFlags, uintptr, uintptr) uint | |||||
| 412 | // ``` | 425 | // ``` | ||
| 413 | func LogSetHandler(LogDomainVar string, LogLevelsVar LogLevelFlags, LogFuncVar *LogFunc, UserDataVar uintptr) uint { | 426 | func LogSetHandler(LogDomainVar string, LogLevelsVar LogLevelFlags, LogFuncVar *LogFunc, UserDataVar uintptr) uint { | ||
| 414 | 427 | ||||
| 415 | - | cret := xLogSetHandler(LogDomainVar, LogLevelsVar, NewCallback(LogFuncVar), UserDataVar) | 428 | + | LogFuncVarPtr := uintptr(unsafe.Pointer(LogFuncVar)) |
| 429 | + | var LogFuncVarRef uintptr | |||
| 430 | + | if cbRefPtr, ok := GetCallback(LogFuncVarPtr); ok { | |||
| 431 | + | LogFuncVarRef = cbRefPtr | |||
| 432 | + | } else { | |||
| 433 | + | fcb := func(arg0 string, arg1 LogLevelFlags, arg2 string, arg3 uintptr) { | |||
| 434 | + | cbFn := *LogFuncVar | |||
| 435 | + | cbFn(arg0, arg1, arg2, arg3) | |||
| 436 | + | } | |||
| 437 | + | LogFuncVarRef = purego.NewCallback(fcb) | |||
| 438 | + | SaveCallback(LogFuncVarPtr, LogFuncVarRef) | |||
| 439 | + | } | |||
| 440 | + | ||||
| 441 | + | cret := xLogSetHandler(LogDomainVar, LogLevelsVar, LogFuncVarRef, UserDataVar) | |||
| 416 | return cret | 442 | return cret | ||
| 417 | } | 443 | } | ||
| 418 | 444 | ||||
| @@ -427,7 +453,33 @@ var xLogSetHandlerFull func(string, LogLevelFlags, uintptr, uintptr, uintptr) ui | |||||
| 427 | // application domain. | 453 | // application domain. | ||
| 428 | func LogSetHandlerFull(LogDomainVar string, LogLevelsVar LogLevelFlags, LogFuncVar *LogFunc, UserDataVar uintptr, DestroyVar *DestroyNotify) uint { | 454 | func LogSetHandlerFull(LogDomainVar string, LogLevelsVar LogLevelFlags, LogFuncVar *LogFunc, UserDataVar uintptr, DestroyVar *DestroyNotify) uint { | ||
| 429 | 455 | ||||
| 430 | - | cret := xLogSetHandlerFull(LogDomainVar, LogLevelsVar, NewCallback(LogFuncVar), UserDataVar, NewCallback(DestroyVar)) | 456 | + | LogFuncVarPtr := uintptr(unsafe.Pointer(LogFuncVar)) |
| 457 | + | var LogFuncVarRef uintptr | |||
| 458 | + | if cbRefPtr, ok := GetCallback(LogFuncVarPtr); ok { | |||
| 459 | + | LogFuncVarRef = cbRefPtr | |||
| 460 | + | } else { | |||
| 461 | + | fcb := func(arg0 string, arg1 LogLevelFlags, arg2 string, arg3 uintptr) { | |||
| 462 | + | cbFn := *LogFuncVar | |||
| 463 | + | cbFn(arg0, arg1, arg2, arg3) | |||
| 464 | + | } | |||
| 465 | + | LogFuncVarRef = purego.NewCallback(fcb) | |||
| 466 | + | SaveCallback(LogFuncVarPtr, LogFuncVarRef) | |||
| 467 | + | } | |||
| 468 | + | ||||
| 469 | + | DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar)) | |||
| 470 | + | var DestroyVarRef uintptr | |||
| 471 | + | if cbRefPtr, ok := GetCallback(DestroyVarPtr); ok { | |||
| 472 | + | DestroyVarRef = cbRefPtr | |||
| 473 | + | } else { | |||
| 474 | + | fcb := func(arg0 uintptr) { | |||
| 475 | + | cbFn := *DestroyVar | |||
| 476 | + | cbFn(arg0) | |||
| 477 | + | } | |||
| 478 | + | DestroyVarRef = purego.NewCallback(fcb) | |||
| 479 | + | SaveCallback(DestroyVarPtr, DestroyVarRef) | |||
| 480 | + | } | |||
| 481 | + | ||||
| 482 | + | cret := xLogSetHandlerFull(LogDomainVar, LogLevelsVar, LogFuncVarRef, UserDataVar, DestroyVarRef) | |||
| 431 | return cret | 483 | return cret | ||
| 432 | } | 484 | } | ||
| 433 | 485 | ||||
| @@ -446,7 +498,33 @@ var xLogSetWriterFunc func(uintptr, uintptr, uintptr) | |||||
| 446 | // There can only be one writer function. It is an error to set more than one. | 498 | // There can only be one writer function. It is an error to set more than one. | ||
| 447 | func LogSetWriterFunc(FuncVar *LogWriterFunc, UserDataVar uintptr, UserDataFreeVar *DestroyNotify) { | 499 | func LogSetWriterFunc(FuncVar *LogWriterFunc, UserDataVar uintptr, UserDataFreeVar *DestroyNotify) { | ||
| 448 | 500 | ||||
| 449 | - | xLogSetWriterFunc(NewCallback(FuncVar), UserDataVar, NewCallback(UserDataFreeVar)) | 501 | + | FuncVarPtr := uintptr(unsafe.Pointer(FuncVar)) |
| 502 | + | var FuncVarRef uintptr | |||
| 503 | + | if cbRefPtr, ok := GetCallback(FuncVarPtr); ok { | |||
| 504 | + | FuncVarRef = cbRefPtr | |||
| 505 | + | } else { | |||
| 506 | + | fcb := func(arg0 LogLevelFlags, arg1 []LogField, arg2 uint, arg3 uintptr) LogWriterOutput { | |||
| 507 | + | cbFn := *FuncVar | |||
| 508 | + | return cbFn(arg0, arg1, arg2, arg3) | |||
| 509 | + | } | |||
| 510 | + | FuncVarRef = purego.NewCallback(fcb) | |||
| 511 | + | SaveCallback(FuncVarPtr, FuncVarRef) | |||
| 512 | + | } | |||
| 513 | + | ||||
| 514 | + | UserDataFreeVarPtr := uintptr(unsafe.Pointer(UserDataFreeVar)) | |||
| 515 | + | var UserDataFreeVarRef uintptr | |||
| 516 | + | if cbRefPtr, ok := GetCallback(UserDataFreeVarPtr); ok { | |||
| 517 | + | UserDataFreeVarRef = cbRefPtr | |||
| 518 | + | } else { | |||
| 519 | + | fcb := func(arg0 uintptr) { | |||
| 520 | + | cbFn := *UserDataFreeVar | |||
| 521 | + | cbFn(arg0) | |||
| 522 | + | } | |||
| 523 | + | UserDataFreeVarRef = purego.NewCallback(fcb) | |||
| 524 | + | SaveCallback(UserDataFreeVarPtr, UserDataFreeVarRef) | |||
| 525 | + | } | |||
| 526 | + | ||||
| 527 | + | xLogSetWriterFunc(FuncVarRef, UserDataVar, UserDataFreeVarRef) | |||
| 450 | 528 | ||||
| 451 | } | 529 | } | ||
| 452 | 530 | ||||
| @@ -923,7 +1001,22 @@ var xSetPrintHandler func(uintptr) uintptr | |||||
| 923 | // in all platforms. Before GLib 2.76, this was `NULL`. | 1001 | // in all platforms. Before GLib 2.76, this was `NULL`. | ||
| 924 | func SetPrintHandler(FuncVar *PrintFunc) uintptr { | 1002 | func SetPrintHandler(FuncVar *PrintFunc) uintptr { | ||
| 925 | 1003 | ||||
| 926 | - | cret := xSetPrintHandler(NewCallbackNullable(FuncVar)) | 1004 | + | var FuncVarRef uintptr |
| 1005 | + | if FuncVar != nil { | |||
| 1006 | + | FuncVarPtr := uintptr(unsafe.Pointer(FuncVar)) | |||
| 1007 | + | if cbRefPtr, ok := GetCallback(FuncVarPtr); ok { | |||
| 1008 | + | FuncVarRef = cbRefPtr | |||
| 1009 | + | } else { | |||
| 1010 | + | fcb := func(arg0 string) { | |||
| 1011 | + | cbFn := *FuncVar | |||
| 1012 | + | cbFn(arg0) | |||
| 1013 | + | } | |||
| 1014 | + | FuncVarRef = purego.NewCallback(fcb) | |||
| 1015 | + | SaveCallback(FuncVarPtr, FuncVarRef) | |||
| 1016 | + | } | |||
| 1017 | + | } | |||
| 1018 | + | ||||
| 1019 | + | cret := xSetPrintHandler(FuncVarRef) | |||
| 927 | return cret | 1020 | return cret | ||
| 928 | } | 1021 | } | ||
| 929 | 1022 | ||||
| @@ -946,7 +1039,22 @@ var xSetPrinterrHandler func(uintptr) uintptr | |||||
| 946 | // Before GLib 2.76, this was `NULL`. | 1039 | // Before GLib 2.76, this was `NULL`. | ||
| 947 | func SetPrinterrHandler(FuncVar *PrintFunc) uintptr { | 1040 | func SetPrinterrHandler(FuncVar *PrintFunc) uintptr { | ||
| 948 | 1041 | ||||
| 949 | - | cret := xSetPrinterrHandler(NewCallbackNullable(FuncVar)) | 1042 | + | var FuncVarRef uintptr |
| 1043 | + | if FuncVar != nil { | |||
| 1044 | + | FuncVarPtr := uintptr(unsafe.Pointer(FuncVar)) | |||
| 1045 | + | if cbRefPtr, ok := GetCallback(FuncVarPtr); ok { | |||
| 1046 | + | FuncVarRef = cbRefPtr | |||
| 1047 | + | } else { | |||
| 1048 | + | fcb := func(arg0 string) { | |||
| 1049 | + | cbFn := *FuncVar | |||
| 1050 | + | cbFn(arg0) | |||
| 1051 | + | } | |||
| 1052 | + | FuncVarRef = purego.NewCallback(fcb) | |||
| 1053 | + | SaveCallback(FuncVarPtr, FuncVarRef) | |||
| 1054 | + | } | |||
| 1055 | + | } | |||
| 1056 | + | ||||
| 1057 | + | cret := xSetPrinterrHandler(FuncVarRef) | |||
| 950 | return cret | 1058 | return cret | ||
| 951 | } | 1059 | } | ||
| 952 | 1060 | ||||
M v4/glib/gnode.go +42 -3
| @@ -67,7 +67,20 @@ var xNodeChildrenForeach func(uintptr, TraverseFlags, uintptr, uintptr) | |||||
| 67 | // that would modify the structure of the tree. | 67 | // that would modify the structure of the tree. | ||
| 68 | func (x *Node) ChildrenForeach(FlagsVar TraverseFlags, FuncVar *NodeForeachFunc, DataVar uintptr) { | 68 | func (x *Node) ChildrenForeach(FlagsVar TraverseFlags, FuncVar *NodeForeachFunc, DataVar uintptr) { | ||
| 69 | 69 | ||||
| 70 | - | xNodeChildrenForeach(x.GoPointer(), FlagsVar, NewCallback(FuncVar), DataVar) | 70 | + | FuncVarPtr := uintptr(unsafe.Pointer(FuncVar)) |
| 71 | + | var FuncVarRef uintptr | |||
| 72 | + | if cbRefPtr, ok := GetCallback(FuncVarPtr); ok { | |||
| 73 | + | FuncVarRef = cbRefPtr | |||
| 74 | + | } else { | |||
| 75 | + | fcb := func(arg0 *Node, arg1 uintptr) { | |||
| 76 | + | cbFn := *FuncVar | |||
| 77 | + | cbFn(arg0, arg1) | |||
| 78 | + | } | |||
| 79 | + | FuncVarRef = purego.NewCallback(fcb) | |||
| 80 | + | SaveCallback(FuncVarPtr, FuncVarRef) | |||
| 81 | + | } | |||
| 82 | + | ||||
| 83 | + | xNodeChildrenForeach(x.GoPointer(), FlagsVar, FuncVarRef, DataVar) | |||
| 71 | 84 | ||||
| 72 | } | 85 | } | ||
| 73 | 86 | ||||
| @@ -86,7 +99,20 @@ var xNodeCopyDeep func(uintptr, uintptr, uintptr) *Node | |||||
| 86 | // Recursively copies a #GNode and its data. | 99 | // Recursively copies a #GNode and its data. | ||
| 87 | func (x *Node) CopyDeep(CopyFuncVar *CopyFunc, DataVar uintptr) *Node { | 100 | func (x *Node) CopyDeep(CopyFuncVar *CopyFunc, DataVar uintptr) *Node { | ||
| 88 | 101 | ||||
| 89 | - | cret := xNodeCopyDeep(x.GoPointer(), NewCallback(CopyFuncVar), DataVar) | 102 | + | CopyFuncVarPtr := uintptr(unsafe.Pointer(CopyFuncVar)) |
| 103 | + | var CopyFuncVarRef uintptr | |||
| 104 | + | if cbRefPtr, ok := GetCallback(CopyFuncVarPtr); ok { | |||
| 105 | + | CopyFuncVarRef = cbRefPtr | |||
| 106 | + | } else { | |||
| 107 | + | fcb := func(arg0 uintptr, arg1 uintptr) uintptr { | |||
| 108 | + | cbFn := *CopyFuncVar | |||
| 109 | + | return cbFn(arg0, arg1) | |||
| 110 | + | } | |||
| 111 | + | CopyFuncVarRef = purego.NewCallback(fcb) | |||
| 112 | + | SaveCallback(CopyFuncVarPtr, CopyFuncVarRef) | |||
| 113 | + | } | |||
| 114 | + | ||||
| 115 | + | cret := xNodeCopyDeep(x.GoPointer(), CopyFuncVarRef, DataVar) | |||
| 90 | return cret | 116 | return cret | ||
| 91 | } | 117 | } | ||
| 92 | 118 | ||||
| @@ -275,7 +301,20 @@ var xNodeTraverse func(uintptr, TraverseType, TraverseFlags, int, uintptr, uintp | |||||
| 275 | // @func must not do anything that would modify the structure of the tree. | 301 | // @func must not do anything that would modify the structure of the tree. | ||
| 276 | func (x *Node) Traverse(OrderVar TraverseType, FlagsVar TraverseFlags, MaxDepthVar int, FuncVar *NodeTraverseFunc, DataVar uintptr) { | 302 | func (x *Node) Traverse(OrderVar TraverseType, FlagsVar TraverseFlags, MaxDepthVar int, FuncVar *NodeTraverseFunc, DataVar uintptr) { | ||
| 277 | 303 | ||||
| 278 | - | xNodeTraverse(x.GoPointer(), OrderVar, FlagsVar, MaxDepthVar, NewCallback(FuncVar), DataVar) | 304 | + | FuncVarPtr := uintptr(unsafe.Pointer(FuncVar)) |
| 305 | + | var FuncVarRef uintptr | |||
| 306 | + | if cbRefPtr, ok := GetCallback(FuncVarPtr); ok { | |||
| 307 | + | FuncVarRef = cbRefPtr | |||
| 308 | + | } else { | |||
| 309 | + | fcb := func(arg0 *Node, arg1 uintptr) bool { | |||
| 310 | + | cbFn := *FuncVar | |||
| 311 | + | return cbFn(arg0, arg1) | |||
| 312 | + | } | |||
| 313 | + | FuncVarRef = purego.NewCallback(fcb) | |||
| 314 | + | SaveCallback(FuncVarPtr, FuncVarRef) | |||
| 315 | + | } | |||
| 316 | + | ||||
| 317 | + | xNodeTraverse(x.GoPointer(), OrderVar, FlagsVar, MaxDepthVar, FuncVarRef, DataVar) | |||
| 279 | 318 | ||||
| 280 | } | 319 | } | ||
| 281 | 320 | ||||
M v4/glib/goption.go +123 -5
| @@ -314,7 +314,37 @@ var xOptionContextSetTranslateFunc func(uintptr, uintptr, uintptr, uintptr) | |||||
| 314 | // domain, see g_option_context_set_translation_domain(). | 314 | // domain, see g_option_context_set_translation_domain(). | ||
| 315 | func (x *OptionContext) SetTranslateFunc(FuncVar *TranslateFunc, DataVar uintptr, DestroyNotifyVar *DestroyNotify) { | 315 | func (x *OptionContext) SetTranslateFunc(FuncVar *TranslateFunc, DataVar uintptr, DestroyNotifyVar *DestroyNotify) { | ||
| 316 | 316 | ||||
| 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) | |||
| 318 | 348 | ||||
| 319 | } | 349 | } | ||
| 320 | 350 | ||||
| @@ -404,7 +434,22 @@ var xNewOptionGroup func(string, string, string, uintptr, uintptr) *OptionGroup | |||||
| 404 | // ‘Application Options:’. | 434 | // ‘Application Options:’. | ||
| 405 | func NewOptionGroup(NameVar string, DescriptionVar string, HelpDescriptionVar string, UserDataVar uintptr, DestroyVar *DestroyNotify) *OptionGroup { | 435 | func NewOptionGroup(NameVar string, DescriptionVar string, HelpDescriptionVar string, UserDataVar uintptr, DestroyVar *DestroyNotify) *OptionGroup { | ||
| 406 | 436 | ||||
| 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) | |||
| 408 | return cret | 453 | return cret | ||
| 409 | } | 454 | } | ||
| 410 | 455 | ||||
| @@ -445,7 +490,20 @@ var xOptionGroupSetErrorHook func(uintptr, uintptr) | |||||
| 445 | // specified when constructing the group with g_option_group_new(). | 490 | // specified when constructing the group with g_option_group_new(). | ||
| 446 | func (x *OptionGroup) SetErrorHook(ErrorFuncVar *OptionErrorFunc) { | 491 | func (x *OptionGroup) SetErrorHook(ErrorFuncVar *OptionErrorFunc) { | ||
| 447 | 492 | ||||
| 448 | - | xOptionGroupSetErrorHook(x.GoPointer(), NewCallback(ErrorFuncVar)) | 493 | + | ErrorFuncVarPtr := uintptr(unsafe.Pointer(ErrorFuncVar)) |
| 494 | + | var ErrorFuncVarRef uintptr | |||
| 495 | + | if cbRefPtr, ok := GetCallback(ErrorFuncVarPtr); ok { | |||
| 496 | + | ErrorFuncVarRef = cbRefPtr | |||
| 497 | + | } else { | |||
| 498 | + | fcb := func(arg0 *OptionContext, arg1 *OptionGroup, arg2 uintptr, arg3 **Error) { | |||
| 499 | + | cbFn := *ErrorFuncVar | |||
| 500 | + | cbFn(arg0, arg1, arg2, arg3) | |||
| 501 | + | } | |||
| 502 | + | ErrorFuncVarRef = purego.NewCallback(fcb) | |||
| 503 | + | SaveCallback(ErrorFuncVarPtr, ErrorFuncVarRef) | |||
| 504 | + | } | |||
| 505 | + | ||||
| 506 | + | xOptionGroupSetErrorHook(x.GoPointer(), ErrorFuncVarRef) | |||
| 449 | 507 | ||||
| 450 | } | 508 | } | ||
| 451 | 509 | ||||
| @@ -460,7 +518,37 @@ var xOptionGroupSetParseHooks func(uintptr, uintptr, uintptr) | |||||
| 460 | // with g_option_group_new(). | 518 | // with g_option_group_new(). | ||
| 461 | func (x *OptionGroup) SetParseHooks(PreParseFuncVar *OptionParseFunc, PostParseFuncVar *OptionParseFunc) { | 519 | func (x *OptionGroup) SetParseHooks(PreParseFuncVar *OptionParseFunc, PostParseFuncVar *OptionParseFunc) { | ||
| 462 | 520 | ||||
| 463 | - | xOptionGroupSetParseHooks(x.GoPointer(), NewCallbackNullable(PreParseFuncVar), NewCallbackNullable(PostParseFuncVar)) | 521 | + | var PreParseFuncVarRef uintptr |
| 522 | + | if PreParseFuncVar != nil { | |||
| 523 | + | PreParseFuncVarPtr := uintptr(unsafe.Pointer(PreParseFuncVar)) | |||
| 524 | + | if cbRefPtr, ok := GetCallback(PreParseFuncVarPtr); ok { | |||
| 525 | + | PreParseFuncVarRef = cbRefPtr | |||
| 526 | + | } else { | |||
| 527 | + | fcb := func(arg0 *OptionContext, arg1 *OptionGroup, arg2 uintptr, arg3 **Error) bool { | |||
| 528 | + | cbFn := *PreParseFuncVar | |||
| 529 | + | return cbFn(arg0, arg1, arg2, arg3) | |||
| 530 | + | } | |||
| 531 | + | PreParseFuncVarRef = purego.NewCallback(fcb) | |||
| 532 | + | SaveCallback(PreParseFuncVarPtr, PreParseFuncVarRef) | |||
| 533 | + | } | |||
| 534 | + | } | |||
| 535 | + | ||||
| 536 | + | var PostParseFuncVarRef uintptr | |||
| 537 | + | if PostParseFuncVar != nil { | |||
| 538 | + | PostParseFuncVarPtr := uintptr(unsafe.Pointer(PostParseFuncVar)) | |||
| 539 | + | if cbRefPtr, ok := GetCallback(PostParseFuncVarPtr); ok { | |||
| 540 | + | PostParseFuncVarRef = cbRefPtr | |||
| 541 | + | } else { | |||
| 542 | + | fcb := func(arg0 *OptionContext, arg1 *OptionGroup, arg2 uintptr, arg3 **Error) bool { | |||
| 543 | + | cbFn := *PostParseFuncVar | |||
| 544 | + | return cbFn(arg0, arg1, arg2, arg3) | |||
| 545 | + | } | |||
| 546 | + | PostParseFuncVarRef = purego.NewCallback(fcb) | |||
| 547 | + | SaveCallback(PostParseFuncVarPtr, PostParseFuncVarRef) | |||
| 548 | + | } | |||
| 549 | + | } | |||
| 550 | + | ||||
| 551 | + | xOptionGroupSetParseHooks(x.GoPointer(), PreParseFuncVarRef, PostParseFuncVarRef) | |||
| 464 | 552 | ||||
| 465 | } | 553 | } | ||
| 466 | 554 | ||||
| @@ -474,7 +562,37 @@ var xOptionGroupSetTranslateFunc func(uintptr, uintptr, uintptr, uintptr) | |||||
| 474 | // domain, see g_option_group_set_translation_domain(). | 562 | // domain, see g_option_group_set_translation_domain(). | ||
| 475 | func (x *OptionGroup) SetTranslateFunc(FuncVar *TranslateFunc, DataVar uintptr, DestroyNotifyVar *DestroyNotify) { | 563 | func (x *OptionGroup) SetTranslateFunc(FuncVar *TranslateFunc, DataVar uintptr, DestroyNotifyVar *DestroyNotify) { | ||
| 476 | 564 | ||||
| 477 | - | xOptionGroupSetTranslateFunc(x.GoPointer(), NewCallbackNullable(FuncVar), DataVar, NewCallbackNullable(DestroyNotifyVar)) | 565 | + | var FuncVarRef uintptr |
| 566 | + | if FuncVar != nil { | |||
| 567 | + | FuncVarPtr := uintptr(unsafe.Pointer(FuncVar)) | |||
| 568 | + | if cbRefPtr, ok := GetCallback(FuncVarPtr); ok { | |||
| 569 | + | FuncVarRef = cbRefPtr | |||
| 570 | + | } else { | |||
| 571 | + | fcb := func(arg0 string, arg1 uintptr) string { | |||
| 572 | + | cbFn := *FuncVar | |||
| 573 | + | return cbFn(arg0, arg1) | |||
| 574 | + | } | |||
| 575 | + | FuncVarRef = purego.NewCallback(fcb) | |||
| 576 | + | SaveCallback(FuncVarPtr, FuncVarRef) | |||
| 577 | + | } | |||
| 578 | + | } | |||
| 579 | + | ||||
| 580 | + | var DestroyNotifyVarRef uintptr | |||
| 581 | + | if DestroyNotifyVar != nil { | |||
| 582 | + | DestroyNotifyVarPtr := uintptr(unsafe.Pointer(DestroyNotifyVar)) | |||
| 583 | + | if cbRefPtr, ok := GetCallback(DestroyNotifyVarPtr); ok { | |||
| 584 | + | DestroyNotifyVarRef = cbRefPtr | |||
| 585 | + | } else { | |||
| 586 | + | fcb := func(arg0 uintptr) { | |||
| 587 | + | cbFn := *DestroyNotifyVar | |||
| 588 | + | cbFn(arg0) | |||
| 589 | + | } | |||
| 590 | + | DestroyNotifyVarRef = purego.NewCallback(fcb) | |||
| 591 | + | SaveCallback(DestroyNotifyVarPtr, DestroyNotifyVarRef) | |||
| 592 | + | } | |||
| 593 | + | } | |||
| 594 | + | ||||
| 595 | + | xOptionGroupSetTranslateFunc(x.GoPointer(), FuncVarRef, DataVar, DestroyNotifyVarRef) | |||
| 478 | 596 | ||||
| 479 | } | 597 | } | ||
| 480 | 598 | ||||
M v4/glib/gqsort.go +30 -2
| @@ -2,6 +2,8 @@ | |||||
| 2 | package glib | 2 | package glib | ||
| 3 | 3 | ||||
| 4 | import ( | 4 | import ( | ||
| 5 | + | "unsafe" | |||
| 6 | + | ||||
| 5 | "github.com/jwijenbergh/purego" | 7 | "github.com/jwijenbergh/purego" | ||
| 6 | "github.com/jwijenbergh/puregotk/pkg/core" | 8 | "github.com/jwijenbergh/puregotk/pkg/core" | ||
| 7 | ) | 9 | ) | ||
| @@ -15,7 +17,20 @@ var xQsortWithData func(uintptr, int, uint, uintptr, uintptr) | |||||
| 15 | // Unlike `qsort()`, this is guaranteed to be a stable sort (since GLib 2.32). | 17 | // Unlike `qsort()`, this is guaranteed to be a stable sort (since GLib 2.32). | ||
| 16 | func QsortWithData(PbaseVar uintptr, TotalElemsVar int, SizeVar uint, CompareFuncVar *CompareDataFunc, UserDataVar uintptr) { | 18 | func QsortWithData(PbaseVar uintptr, TotalElemsVar int, SizeVar uint, CompareFuncVar *CompareDataFunc, UserDataVar uintptr) { | ||
| 17 | 19 | ||||
| 18 | - | xQsortWithData(PbaseVar, TotalElemsVar, SizeVar, NewCallback(CompareFuncVar), UserDataVar) | 20 | + | CompareFuncVarPtr := uintptr(unsafe.Pointer(CompareFuncVar)) |
| 21 | + | var CompareFuncVarRef uintptr | |||
| 22 | + | if cbRefPtr, ok := GetCallback(CompareFuncVarPtr); ok { | |||
| 23 | + | CompareFuncVarRef = cbRefPtr | |||
| 24 | + | } else { | |||
| 25 | + | fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int { | |||
| 26 | + | cbFn := *CompareFuncVar | |||
| 27 | + | return cbFn(arg0, arg1, arg2) | |||
| 28 | + | } | |||
| 29 | + | CompareFuncVarRef = purego.NewCallback(fcb) | |||
| 30 | + | SaveCallback(CompareFuncVarPtr, CompareFuncVarRef) | |||
| 31 | + | } | |||
| 32 | + | ||||
| 33 | + | xQsortWithData(PbaseVar, TotalElemsVar, SizeVar, CompareFuncVarRef, UserDataVar) | |||
| 19 | 34 | ||||
| 20 | } | 35 | } | ||
| 21 | 36 | ||||
| @@ -28,7 +43,20 @@ var xSortArray func([]uintptr, uint, uint, uintptr, uintptr) | |||||
| 28 | // Unlike `qsort()`, this is guaranteed to be a stable sort. | 43 | // Unlike `qsort()`, this is guaranteed to be a stable sort. | ||
| 29 | func SortArray(ArrayVar []uintptr, NElementsVar uint, ElementSizeVar uint, CompareFuncVar *CompareDataFunc, UserDataVar uintptr) { | 44 | func SortArray(ArrayVar []uintptr, NElementsVar uint, ElementSizeVar uint, CompareFuncVar *CompareDataFunc, UserDataVar uintptr) { | ||
| 30 | 45 | ||||
| 31 | - | xSortArray(ArrayVar, NElementsVar, ElementSizeVar, NewCallback(CompareFuncVar), UserDataVar) | 46 | + | CompareFuncVarPtr := uintptr(unsafe.Pointer(CompareFuncVar)) |
| 47 | + | var CompareFuncVarRef uintptr | |||
| 48 | + | if cbRefPtr, ok := GetCallback(CompareFuncVarPtr); ok { | |||
| 49 | + | CompareFuncVarRef = cbRefPtr | |||
| 50 | + | } else { | |||
| 51 | + | fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int { | |||
| 52 | + | cbFn := *CompareFuncVar | |||
| 53 | + | return cbFn(arg0, arg1, arg2) | |||
| 54 | + | } | |||
| 55 | + | CompareFuncVarRef = purego.NewCallback(fcb) | |||
| 56 | + | SaveCallback(CompareFuncVarPtr, CompareFuncVarRef) | |||
| 57 | + | } | |||
| 58 | + | ||||
| 59 | + | xSortArray(ArrayVar, NElementsVar, ElementSizeVar, CompareFuncVarRef, UserDataVar) | |||
| 32 | 60 | ||||
| 33 | } | 61 | } | ||
| 34 | 62 | ||||
M v4/glib/gqueue.go +86 -6
| @@ -41,7 +41,22 @@ var xQueueClearFull func(uintptr, uintptr) | |||||
| 41 | // and calls the provided @free_func on each item in the #GQueue. | 41 | // and calls the provided @free_func on each item in the #GQueue. | ||
| 42 | func (x *Queue) ClearFull(FreeFuncVar *DestroyNotify) { | 42 | func (x *Queue) ClearFull(FreeFuncVar *DestroyNotify) { | ||
| 43 | 43 | ||||
| 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) | |||
| 45 | 60 | ||||
| 46 | } | 61 | } | ||
| 47 | 62 | ||||
| @@ -85,7 +100,20 @@ var xQueueFindCustom func(uintptr, uintptr, uintptr) *List | |||||
| 85 | // first argument and the given user data as the second argument. | 100 | // first argument and the given user data as the second argument. | ||
| 86 | func (x *Queue) FindCustom(DataVar uintptr, FuncVar *CompareFunc) *List { | 101 | func (x *Queue) FindCustom(DataVar uintptr, FuncVar *CompareFunc) *List { | ||
| 87 | 102 | ||||
| 88 | - | cret := xQueueFindCustom(x.GoPointer(), DataVar, NewCallback(FuncVar)) | 103 | + | FuncVarPtr := uintptr(unsafe.Pointer(FuncVar)) |
| 104 | + | var FuncVarRef uintptr | |||
| 105 | + | if cbRefPtr, ok := GetCallback(FuncVarPtr); ok { | |||
| 106 | + | FuncVarRef = cbRefPtr | |||
| 107 | + | } else { | |||
| 108 | + | fcb := func(arg0 uintptr, arg1 uintptr) int { | |||
| 109 | + | cbFn := *FuncVar | |||
| 110 | + | return cbFn(arg0, arg1) | |||
| 111 | + | } | |||
| 112 | + | FuncVarRef = purego.NewCallback(fcb) | |||
| 113 | + | SaveCallback(FuncVarPtr, FuncVarRef) | |||
| 114 | + | } | |||
| 115 | + | ||||
| 116 | + | cret := xQueueFindCustom(x.GoPointer(), DataVar, FuncVarRef) | |||
| 89 | return cret | 117 | return cret | ||
| 90 | } | 118 | } | ||
| 91 | 119 | ||||
| @@ -98,7 +126,20 @@ var xQueueForeach func(uintptr, uintptr, uintptr) | |||||
| 98 | // not modify any part of the queue after that element. | 126 | // not modify any part of the queue after that element. | ||
| 99 | func (x *Queue) Foreach(FuncVar *Func, UserDataVar uintptr) { | 127 | func (x *Queue) Foreach(FuncVar *Func, UserDataVar uintptr) { | ||
| 100 | 128 | ||||
| 101 | - | xQueueForeach(x.GoPointer(), NewCallback(FuncVar), UserDataVar) | 129 | + | FuncVarPtr := uintptr(unsafe.Pointer(FuncVar)) |
| 130 | + | var FuncVarRef uintptr | |||
| 131 | + | if cbRefPtr, ok := GetCallback(FuncVarPtr); ok { | |||
| 132 | + | FuncVarRef = cbRefPtr | |||
| 133 | + | } else { | |||
| 134 | + | fcb := func(arg0 uintptr, arg1 uintptr) { | |||
| 135 | + | cbFn := *FuncVar | |||
| 136 | + | cbFn(arg0, arg1) | |||
| 137 | + | } | |||
| 138 | + | FuncVarRef = purego.NewCallback(fcb) | |||
| 139 | + | SaveCallback(FuncVarPtr, FuncVarRef) | |||
| 140 | + | } | |||
| 141 | + | ||||
| 142 | + | xQueueForeach(x.GoPointer(), FuncVarRef, UserDataVar) | |||
| 102 | 143 | ||||
| 103 | } | 144 | } | ||
| 104 | 145 | ||||
| @@ -125,7 +166,20 @@ var xQueueFreeFull func(uintptr, uintptr) | |||||
| 125 | // element from it). | 166 | // element from it). | ||
| 126 | func (x *Queue) FreeFull(FreeFuncVar *DestroyNotify) { | 167 | func (x *Queue) FreeFull(FreeFuncVar *DestroyNotify) { | ||
| 127 | 168 | ||||
| 128 | - | xQueueFreeFull(x.GoPointer(), NewCallback(FreeFuncVar)) | 169 | + | FreeFuncVarPtr := uintptr(unsafe.Pointer(FreeFuncVar)) |
| 170 | + | var FreeFuncVarRef uintptr | |||
| 171 | + | if cbRefPtr, ok := GetCallback(FreeFuncVarPtr); ok { | |||
| 172 | + | FreeFuncVarRef = cbRefPtr | |||
| 173 | + | } else { | |||
| 174 | + | fcb := func(arg0 uintptr) { | |||
| 175 | + | cbFn := *FreeFuncVar | |||
| 176 | + | cbFn(arg0) | |||
| 177 | + | } | |||
| 178 | + | FreeFuncVarRef = purego.NewCallback(fcb) | |||
| 179 | + | SaveCallback(FreeFuncVarPtr, FreeFuncVarRef) | |||
| 180 | + | } | |||
| 181 | + | ||||
| 182 | + | xQueueFreeFull(x.GoPointer(), FreeFuncVarRef) | |||
| 129 | 183 | ||||
| 130 | } | 184 | } | ||
| 131 | 185 | ||||
| @@ -210,7 +264,20 @@ var xQueueInsertSorted func(uintptr, uintptr, uintptr, uintptr) | |||||
| 210 | // Inserts @data into @queue using @func to determine the new position. | 264 | // Inserts @data into @queue using @func to determine the new position. | ||
| 211 | func (x *Queue) InsertSorted(DataVar uintptr, FuncVar *CompareDataFunc, UserDataVar uintptr) { | 265 | func (x *Queue) InsertSorted(DataVar uintptr, FuncVar *CompareDataFunc, UserDataVar uintptr) { | ||
| 212 | 266 | ||||
| 213 | - | xQueueInsertSorted(x.GoPointer(), DataVar, NewCallback(FuncVar), UserDataVar) | 267 | + | FuncVarPtr := uintptr(unsafe.Pointer(FuncVar)) |
| 268 | + | var FuncVarRef uintptr | |||
| 269 | + | if cbRefPtr, ok := GetCallback(FuncVarPtr); ok { | |||
| 270 | + | FuncVarRef = cbRefPtr | |||
| 271 | + | } else { | |||
| 272 | + | fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int { | |||
| 273 | + | cbFn := *FuncVar | |||
| 274 | + | return cbFn(arg0, arg1, arg2) | |||
| 275 | + | } | |||
| 276 | + | FuncVarRef = purego.NewCallback(fcb) | |||
| 277 | + | SaveCallback(FuncVarPtr, FuncVarRef) | |||
| 278 | + | } | |||
| 279 | + | ||||
| 280 | + | xQueueInsertSorted(x.GoPointer(), DataVar, FuncVarRef, UserDataVar) | |||
| 214 | 281 | ||||
| 215 | } | 282 | } | ||
| 216 | 283 | ||||
| @@ -426,7 +493,20 @@ var xQueueSort func(uintptr, uintptr, uintptr) | |||||
| 426 | // Sorts @queue using @compare_func. | 493 | // Sorts @queue using @compare_func. | ||
| 427 | func (x *Queue) Sort(CompareFuncVar *CompareDataFunc, UserDataVar uintptr) { | 494 | func (x *Queue) Sort(CompareFuncVar *CompareDataFunc, UserDataVar uintptr) { | ||
| 428 | 495 | ||||
| 429 | - | xQueueSort(x.GoPointer(), NewCallback(CompareFuncVar), UserDataVar) | 496 | + | CompareFuncVarPtr := uintptr(unsafe.Pointer(CompareFuncVar)) |
| 497 | + | var CompareFuncVarRef uintptr | |||
| 498 | + | if cbRefPtr, ok := GetCallback(CompareFuncVarPtr); ok { | |||
| 499 | + | CompareFuncVarRef = cbRefPtr | |||
| 500 | + | } else { | |||
| 501 | + | fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int { | |||
| 502 | + | cbFn := *CompareFuncVar | |||
| 503 | + | return cbFn(arg0, arg1, arg2) | |||
| 504 | + | } | |||
| 505 | + | CompareFuncVarRef = purego.NewCallback(fcb) | |||
| 506 | + | SaveCallback(CompareFuncVarPtr, CompareFuncVarRef) | |||
| 507 | + | } | |||
| 508 | + | ||||
| 509 | + | xQueueSort(x.GoPointer(), CompareFuncVarRef, UserDataVar) | |||
| 430 | 510 | ||||
| 431 | } | 511 | } | ||
| 432 | 512 | ||||
M v4/glib/grcbox.go +30 -2
| @@ -2,6 +2,8 @@ | |||||
| 2 | package glib | 2 | package glib | ||
| 3 | 3 | ||||
| 4 | import ( | 4 | import ( | ||
| 5 | + | "unsafe" | |||
| 6 | + | ||||
| 5 | "github.com/jwijenbergh/purego" | 7 | "github.com/jwijenbergh/purego" | ||
| 6 | "github.com/jwijenbergh/puregotk/pkg/core" | 8 | "github.com/jwijenbergh/puregotk/pkg/core" | ||
| 7 | ) | 9 | ) | ||
| @@ -95,7 +97,20 @@ var xAtomicRcBoxReleaseFull func(uintptr, uintptr) | |||||
| 95 | // when the callback is called and will be freed. | 97 | // when the callback is called and will be freed. | ||
| 96 | func AtomicRcBoxReleaseFull(MemBlockVar uintptr, ClearFuncVar *DestroyNotify) { | 98 | func AtomicRcBoxReleaseFull(MemBlockVar uintptr, ClearFuncVar *DestroyNotify) { | ||
| 97 | 99 | ||||
| 98 | - | xAtomicRcBoxReleaseFull(MemBlockVar, NewCallback(ClearFuncVar)) | 100 | + | ClearFuncVarPtr := uintptr(unsafe.Pointer(ClearFuncVar)) |
| 101 | + | var ClearFuncVarRef uintptr | |||
| 102 | + | if cbRefPtr, ok := GetCallback(ClearFuncVarPtr); ok { | |||
| 103 | + | ClearFuncVarRef = cbRefPtr | |||
| 104 | + | } else { | |||
| 105 | + | fcb := func(arg0 uintptr) { | |||
| 106 | + | cbFn := *ClearFuncVar | |||
| 107 | + | cbFn(arg0) | |||
| 108 | + | } | |||
| 109 | + | ClearFuncVarRef = purego.NewCallback(fcb) | |||
| 110 | + | SaveCallback(ClearFuncVarPtr, ClearFuncVarRef) | |||
| 111 | + | } | |||
| 112 | + | ||||
| 113 | + | xAtomicRcBoxReleaseFull(MemBlockVar, ClearFuncVarRef) | |||
| 99 | 114 | ||||
| 100 | } | 115 | } | ||
| 101 | 116 | ||||
| @@ -183,7 +198,20 @@ var xRcBoxReleaseFull func(uintptr, uintptr) | |||||
| 183 | // resources allocated for @mem_block. | 198 | // resources allocated for @mem_block. | ||
| 184 | func RcBoxReleaseFull(MemBlockVar uintptr, ClearFuncVar *DestroyNotify) { | 199 | func RcBoxReleaseFull(MemBlockVar uintptr, ClearFuncVar *DestroyNotify) { | ||
| 185 | 200 | ||||
| 186 | - | xRcBoxReleaseFull(MemBlockVar, NewCallback(ClearFuncVar)) | 201 | + | ClearFuncVarPtr := uintptr(unsafe.Pointer(ClearFuncVar)) |
| 202 | + | var ClearFuncVarRef uintptr | |||
| 203 | + | if cbRefPtr, ok := GetCallback(ClearFuncVarPtr); ok { | |||
| 204 | + | ClearFuncVarRef = cbRefPtr | |||
| 205 | + | } else { | |||
| 206 | + | fcb := func(arg0 uintptr) { | |||
| 207 | + | cbFn := *ClearFuncVar | |||
| 208 | + | cbFn(arg0) | |||
| 209 | + | } | |||
| 210 | + | ClearFuncVarRef = purego.NewCallback(fcb) | |||
| 211 | + | SaveCallback(ClearFuncVarPtr, ClearFuncVarRef) | |||
| 212 | + | } | |||
| 213 | + | ||||
| 214 | + | xRcBoxReleaseFull(MemBlockVar, ClearFuncVarRef) | |||
| 187 | 215 | ||||
| 188 | } | 216 | } | ||
| 189 | 217 | ||||
M v4/glib/gregex.go +14 -1
| @@ -1028,7 +1028,20 @@ var xRegexReplaceEval func(uintptr, []string, int, int, RegexMatchFlags, uintptr | |||||
| 1028 | func (x *Regex) ReplaceEval(StringVar []string, StringLenVar int, StartPositionVar int, MatchOptionsVar RegexMatchFlags, EvalVar *RegexEvalCallback, UserDataVar uintptr) (string, error) { | 1028 | func (x *Regex) ReplaceEval(StringVar []string, StringLenVar int, StartPositionVar int, MatchOptionsVar RegexMatchFlags, EvalVar *RegexEvalCallback, UserDataVar uintptr) (string, error) { | ||
| 1029 | var cerr *Error | 1029 | var cerr *Error | ||
| 1030 | 1030 | ||||
| 1031 | - | cret := xRegexReplaceEval(x.GoPointer(), StringVar, StringLenVar, StartPositionVar, MatchOptionsVar, NewCallback(EvalVar), UserDataVar, &cerr) | 1031 | + | EvalVarPtr := uintptr(unsafe.Pointer(EvalVar)) |
| 1032 | + | var EvalVarRef uintptr | |||
| 1033 | + | if cbRefPtr, ok := GetCallback(EvalVarPtr); ok { | |||
| 1034 | + | EvalVarRef = cbRefPtr | |||
| 1035 | + | } else { | |||
| 1036 | + | fcb := func(arg0 *MatchInfo, arg1 *String, arg2 uintptr) bool { | |||
| 1037 | + | cbFn := *EvalVar | |||
| 1038 | + | return cbFn(arg0, arg1, arg2) | |||
| 1039 | + | } | |||
| 1040 | + | EvalVarRef = purego.NewCallback(fcb) | |||
| 1041 | + | SaveCallback(EvalVarPtr, EvalVarRef) | |||
| 1042 | + | } | |||
| 1043 | + | ||||
| 1044 | + | cret := xRegexReplaceEval(x.GoPointer(), StringVar, StringLenVar, StartPositionVar, MatchOptionsVar, EvalVarRef, UserDataVar, &cerr) | |||
| 1032 | if cerr == nil { | 1045 | if cerr == nil { | ||
| 1033 | return cret, nil | 1046 | return cret, nil | ||
| 1034 | } | 1047 | } | ||
M v4/glib/grel.go +27 -1
| @@ -104,7 +104,33 @@ var xRelationIndex func(uintptr, int, uintptr, uintptr) | |||||
| 104 | // before any records are added to the #GRelation. | 104 | // before any records are added to the #GRelation. | ||
| 105 | func (x *Relation) Index(FieldVar int, HashFuncVar *HashFunc, KeyEqualFuncVar *EqualFunc) { | 105 | func (x *Relation) Index(FieldVar int, HashFuncVar *HashFunc, KeyEqualFuncVar *EqualFunc) { | ||
| 106 | 106 | ||||
| 107 | - | xRelationIndex(x.GoPointer(), FieldVar, NewCallback(HashFuncVar), NewCallback(KeyEqualFuncVar)) | 107 | + | HashFuncVarPtr := uintptr(unsafe.Pointer(HashFuncVar)) |
| 108 | + | var HashFuncVarRef uintptr | |||
| 109 | + | if cbRefPtr, ok := GetCallback(HashFuncVarPtr); ok { | |||
| 110 | + | HashFuncVarRef = cbRefPtr | |||
| 111 | + | } else { | |||
| 112 | + | fcb := func(arg0 uintptr) uint { | |||
| 113 | + | cbFn := *HashFuncVar | |||
| 114 | + | return cbFn(arg0) | |||
| 115 | + | } | |||
| 116 | + | HashFuncVarRef = purego.NewCallback(fcb) | |||
| 117 | + | SaveCallback(HashFuncVarPtr, HashFuncVarRef) | |||
| 118 | + | } | |||
| 119 | + | ||||
| 120 | + | KeyEqualFuncVarPtr := uintptr(unsafe.Pointer(KeyEqualFuncVar)) | |||
| 121 | + | var KeyEqualFuncVarRef uintptr | |||
| 122 | + | if cbRefPtr, ok := GetCallback(KeyEqualFuncVarPtr); ok { | |||
| 123 | + | KeyEqualFuncVarRef = cbRefPtr | |||
| 124 | + | } else { | |||
| 125 | + | fcb := func(arg0 uintptr, arg1 uintptr) bool { | |||
| 126 | + | cbFn := *KeyEqualFuncVar | |||
| 127 | + | return cbFn(arg0, arg1) | |||
| 128 | + | } | |||
| 129 | + | KeyEqualFuncVarRef = purego.NewCallback(fcb) | |||
| 130 | + | SaveCallback(KeyEqualFuncVarPtr, KeyEqualFuncVarRef) | |||
| 131 | + | } | |||
| 132 | + | ||||
| 133 | + | xRelationIndex(x.GoPointer(), FieldVar, HashFuncVarRef, KeyEqualFuncVarRef) | |||
| 108 | 134 | ||||
| 109 | } | 135 | } | ||
| 110 | 136 | ||||
M v4/glib/gscanner.go +14 -1
| @@ -223,7 +223,20 @@ var xScannerScopeForeachSymbol func(uintptr, uint, uintptr, uintptr) | |||||
| 223 | // parameter. | 223 | // parameter. | ||
| 224 | func (x *Scanner) ScopeForeachSymbol(ScopeIdVar uint, FuncVar *HFunc, UserDataVar uintptr) { | 224 | func (x *Scanner) ScopeForeachSymbol(ScopeIdVar uint, FuncVar *HFunc, UserDataVar uintptr) { | ||
| 225 | 225 | ||||
| 226 | - | xScannerScopeForeachSymbol(x.GoPointer(), ScopeIdVar, NewCallback(FuncVar), UserDataVar) | 226 | + | FuncVarPtr := uintptr(unsafe.Pointer(FuncVar)) |
| 227 | + | var FuncVarRef uintptr | |||
| 228 | + | if cbRefPtr, ok := GetCallback(FuncVarPtr); ok { | |||
| 229 | + | FuncVarRef = cbRefPtr | |||
| 230 | + | } else { | |||
| 231 | + | fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) { | |||
| 232 | + | cbFn := *FuncVar | |||
| 233 | + | cbFn(arg0, arg1, arg2) | |||
| 234 | + | } | |||
| 235 | + | FuncVarRef = purego.NewCallback(fcb) | |||
| 236 | + | SaveCallback(FuncVarPtr, FuncVarRef) | |||
| 237 | + | } | |||
| 238 | + | ||||
| 239 | + | xScannerScopeForeachSymbol(x.GoPointer(), ScopeIdVar, FuncVarRef, UserDataVar) | |||
| 227 | 240 | ||||
| 228 | } | 241 | } | ||
| 229 | 242 | ||||
M v4/glib/gsequence.go +168 -12
| @@ -39,7 +39,20 @@ var xSequenceForeach func(uintptr, uintptr, uintptr) | |||||
| 39 | // to the function. @func must not modify the sequence itself. | 39 | // to the function. @func must not modify the sequence itself. | ||
| 40 | func (x *Sequence) Foreach(FuncVar *Func, UserDataVar uintptr) { | 40 | func (x *Sequence) Foreach(FuncVar *Func, UserDataVar uintptr) { | ||
| 41 | 41 | ||||
| 42 | - | xSequenceForeach(x.GoPointer(), NewCallback(FuncVar), UserDataVar) | 42 | + | FuncVarPtr := uintptr(unsafe.Pointer(FuncVar)) |
| 43 | + | var FuncVarRef uintptr | |||
| 44 | + | if cbRefPtr, ok := GetCallback(FuncVarPtr); ok { | |||
| 45 | + | FuncVarRef = cbRefPtr | |||
| 46 | + | } else { | |||
| 47 | + | fcb := func(arg0 uintptr, arg1 uintptr) { | |||
| 48 | + | cbFn := *FuncVar | |||
| 49 | + | cbFn(arg0, arg1) | |||
| 50 | + | } | |||
| 51 | + | FuncVarRef = purego.NewCallback(fcb) | |||
| 52 | + | SaveCallback(FuncVarPtr, FuncVarRef) | |||
| 53 | + | } | |||
| 54 | + | ||||
| 55 | + | xSequenceForeach(x.GoPointer(), FuncVarRef, UserDataVar) | |||
| 43 | 56 | ||||
| 44 | } | 57 | } | ||
| 45 | 58 | ||||
| @@ -109,7 +122,20 @@ var xSequenceInsertSorted func(uintptr, uintptr, uintptr, uintptr) *SequenceIter | |||||
| 109 | // g_sequence_sort() or g_sequence_sort_iter(). | 122 | // g_sequence_sort() or g_sequence_sort_iter(). | ||
| 110 | func (x *Sequence) InsertSorted(DataVar uintptr, CmpFuncVar *CompareDataFunc, CmpDataVar uintptr) *SequenceIter { | 123 | func (x *Sequence) InsertSorted(DataVar uintptr, CmpFuncVar *CompareDataFunc, CmpDataVar uintptr) *SequenceIter { | ||
| 111 | 124 | ||||
| 112 | - | cret := xSequenceInsertSorted(x.GoPointer(), DataVar, NewCallback(CmpFuncVar), CmpDataVar) | 125 | + | CmpFuncVarPtr := uintptr(unsafe.Pointer(CmpFuncVar)) |
| 126 | + | var CmpFuncVarRef uintptr | |||
| 127 | + | if cbRefPtr, ok := GetCallback(CmpFuncVarPtr); ok { | |||
| 128 | + | CmpFuncVarRef = cbRefPtr | |||
| 129 | + | } else { | |||
| 130 | + | fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int { | |||
| 131 | + | cbFn := *CmpFuncVar | |||
| 132 | + | return cbFn(arg0, arg1, arg2) | |||
| 133 | + | } | |||
| 134 | + | CmpFuncVarRef = purego.NewCallback(fcb) | |||
| 135 | + | SaveCallback(CmpFuncVarPtr, CmpFuncVarRef) | |||
| 136 | + | } | |||
| 137 | + | ||||
| 138 | + | cret := xSequenceInsertSorted(x.GoPointer(), DataVar, CmpFuncVarRef, CmpDataVar) | |||
| 113 | return cret | 139 | return cret | ||
| 114 | } | 140 | } | ||
| 115 | 141 | ||||
| @@ -129,7 +155,20 @@ var xSequenceInsertSortedIter func(uintptr, uintptr, uintptr, uintptr) *Sequence | |||||
| 129 | // g_sequence_sort() or g_sequence_sort_iter(). | 155 | // g_sequence_sort() or g_sequence_sort_iter(). | ||
| 130 | func (x *Sequence) InsertSortedIter(DataVar uintptr, IterCmpVar *SequenceIterCompareFunc, CmpDataVar uintptr) *SequenceIter { | 156 | func (x *Sequence) InsertSortedIter(DataVar uintptr, IterCmpVar *SequenceIterCompareFunc, CmpDataVar uintptr) *SequenceIter { | ||
| 131 | 157 | ||||
| 132 | - | cret := xSequenceInsertSortedIter(x.GoPointer(), DataVar, NewCallback(IterCmpVar), CmpDataVar) | 158 | + | IterCmpVarPtr := uintptr(unsafe.Pointer(IterCmpVar)) |
| 159 | + | var IterCmpVarRef uintptr | |||
| 160 | + | if cbRefPtr, ok := GetCallback(IterCmpVarPtr); ok { | |||
| 161 | + | IterCmpVarRef = cbRefPtr | |||
| 162 | + | } else { | |||
| 163 | + | fcb := func(arg0 *SequenceIter, arg1 *SequenceIter, arg2 uintptr) int { | |||
| 164 | + | cbFn := *IterCmpVar | |||
| 165 | + | return cbFn(arg0, arg1, arg2) | |||
| 166 | + | } | |||
| 167 | + | IterCmpVarRef = purego.NewCallback(fcb) | |||
| 168 | + | SaveCallback(IterCmpVarPtr, IterCmpVarRef) | |||
| 169 | + | } | |||
| 170 | + | ||||
| 171 | + | cret := xSequenceInsertSortedIter(x.GoPointer(), DataVar, IterCmpVarRef, CmpDataVar) | |||
| 133 | return cret | 172 | return cret | ||
| 134 | } | 173 | } | ||
| 135 | 174 | ||||
| @@ -163,7 +202,20 @@ var xSequenceLookup func(uintptr, uintptr, uintptr, uintptr) *SequenceIter | |||||
| 163 | // unsorted. | 202 | // unsorted. | ||
| 164 | func (x *Sequence) Lookup(DataVar uintptr, CmpFuncVar *CompareDataFunc, CmpDataVar uintptr) *SequenceIter { | 203 | func (x *Sequence) Lookup(DataVar uintptr, CmpFuncVar *CompareDataFunc, CmpDataVar uintptr) *SequenceIter { | ||
| 165 | 204 | ||||
| 166 | - | cret := xSequenceLookup(x.GoPointer(), DataVar, NewCallback(CmpFuncVar), CmpDataVar) | 205 | + | CmpFuncVarPtr := uintptr(unsafe.Pointer(CmpFuncVar)) |
| 206 | + | var CmpFuncVarRef uintptr | |||
| 207 | + | if cbRefPtr, ok := GetCallback(CmpFuncVarPtr); ok { | |||
| 208 | + | CmpFuncVarRef = cbRefPtr | |||
| 209 | + | } else { | |||
| 210 | + | fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int { | |||
| 211 | + | cbFn := *CmpFuncVar | |||
| 212 | + | return cbFn(arg0, arg1, arg2) | |||
| 213 | + | } | |||
| 214 | + | CmpFuncVarRef = purego.NewCallback(fcb) | |||
| 215 | + | SaveCallback(CmpFuncVarPtr, CmpFuncVarRef) | |||
| 216 | + | } | |||
| 217 | + | ||||
| 218 | + | cret := xSequenceLookup(x.GoPointer(), DataVar, CmpFuncVarRef, CmpDataVar) | |||
| 167 | return cret | 219 | return cret | ||
| 168 | } | 220 | } | ||
| 169 | 221 | ||||
| @@ -181,7 +233,20 @@ var xSequenceLookupIter func(uintptr, uintptr, uintptr, uintptr) *SequenceIter | |||||
| 181 | // unsorted. | 233 | // unsorted. | ||
| 182 | func (x *Sequence) LookupIter(DataVar uintptr, IterCmpVar *SequenceIterCompareFunc, CmpDataVar uintptr) *SequenceIter { | 234 | func (x *Sequence) LookupIter(DataVar uintptr, IterCmpVar *SequenceIterCompareFunc, CmpDataVar uintptr) *SequenceIter { | ||
| 183 | 235 | ||||
| 184 | - | cret := xSequenceLookupIter(x.GoPointer(), DataVar, NewCallback(IterCmpVar), CmpDataVar) | 236 | + | IterCmpVarPtr := uintptr(unsafe.Pointer(IterCmpVar)) |
| 237 | + | var IterCmpVarRef uintptr | |||
| 238 | + | if cbRefPtr, ok := GetCallback(IterCmpVarPtr); ok { | |||
| 239 | + | IterCmpVarRef = cbRefPtr | |||
| 240 | + | } else { | |||
| 241 | + | fcb := func(arg0 *SequenceIter, arg1 *SequenceIter, arg2 uintptr) int { | |||
| 242 | + | cbFn := *IterCmpVar | |||
| 243 | + | return cbFn(arg0, arg1, arg2) | |||
| 244 | + | } | |||
| 245 | + | IterCmpVarRef = purego.NewCallback(fcb) | |||
| 246 | + | SaveCallback(IterCmpVarPtr, IterCmpVarRef) | |||
| 247 | + | } | |||
| 248 | + | ||||
| 249 | + | cret := xSequenceLookupIter(x.GoPointer(), DataVar, IterCmpVarRef, CmpDataVar) | |||
| 185 | return cret | 250 | return cret | ||
| 186 | } | 251 | } | ||
| 187 | 252 | ||||
| @@ -211,7 +276,20 @@ var xSequenceSearch func(uintptr, uintptr, uintptr, uintptr) *SequenceIter | |||||
| 211 | // unsorted. | 276 | // unsorted. | ||
| 212 | func (x *Sequence) Search(DataVar uintptr, CmpFuncVar *CompareDataFunc, CmpDataVar uintptr) *SequenceIter { | 277 | func (x *Sequence) Search(DataVar uintptr, CmpFuncVar *CompareDataFunc, CmpDataVar uintptr) *SequenceIter { | ||
| 213 | 278 | ||||
| 214 | - | cret := xSequenceSearch(x.GoPointer(), DataVar, NewCallback(CmpFuncVar), CmpDataVar) | 279 | + | CmpFuncVarPtr := uintptr(unsafe.Pointer(CmpFuncVar)) |
| 280 | + | var CmpFuncVarRef uintptr | |||
| 281 | + | if cbRefPtr, ok := GetCallback(CmpFuncVarPtr); ok { | |||
| 282 | + | CmpFuncVarRef = cbRefPtr | |||
| 283 | + | } else { | |||
| 284 | + | fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int { | |||
| 285 | + | cbFn := *CmpFuncVar | |||
| 286 | + | return cbFn(arg0, arg1, arg2) | |||
| 287 | + | } | |||
| 288 | + | CmpFuncVarRef = purego.NewCallback(fcb) | |||
| 289 | + | SaveCallback(CmpFuncVarPtr, CmpFuncVarRef) | |||
| 290 | + | } | |||
| 291 | + | ||||
| 292 | + | cret := xSequenceSearch(x.GoPointer(), DataVar, CmpFuncVarRef, CmpDataVar) | |||
| 215 | return cret | 293 | return cret | ||
| 216 | } | 294 | } | ||
| 217 | 295 | ||||
| @@ -232,7 +310,20 @@ var xSequenceSearchIter func(uintptr, uintptr, uintptr, uintptr) *SequenceIter | |||||
| 232 | // unsorted. | 310 | // unsorted. | ||
| 233 | func (x *Sequence) SearchIter(DataVar uintptr, IterCmpVar *SequenceIterCompareFunc, CmpDataVar uintptr) *SequenceIter { | 311 | func (x *Sequence) SearchIter(DataVar uintptr, IterCmpVar *SequenceIterCompareFunc, CmpDataVar uintptr) *SequenceIter { | ||
| 234 | 312 | ||||
| 235 | - | cret := xSequenceSearchIter(x.GoPointer(), DataVar, NewCallback(IterCmpVar), CmpDataVar) | 313 | + | IterCmpVarPtr := uintptr(unsafe.Pointer(IterCmpVar)) |
| 314 | + | var IterCmpVarRef uintptr | |||
| 315 | + | if cbRefPtr, ok := GetCallback(IterCmpVarPtr); ok { | |||
| 316 | + | IterCmpVarRef = cbRefPtr | |||
| 317 | + | } else { | |||
| 318 | + | fcb := func(arg0 *SequenceIter, arg1 *SequenceIter, arg2 uintptr) int { | |||
| 319 | + | cbFn := *IterCmpVar | |||
| 320 | + | return cbFn(arg0, arg1, arg2) | |||
| 321 | + | } | |||
| 322 | + | IterCmpVarRef = purego.NewCallback(fcb) | |||
| 323 | + | SaveCallback(IterCmpVarPtr, IterCmpVarRef) | |||
| 324 | + | } | |||
| 325 | + | ||||
| 326 | + | cret := xSequenceSearchIter(x.GoPointer(), DataVar, IterCmpVarRef, CmpDataVar) | |||
| 236 | return cret | 327 | return cret | ||
| 237 | } | 328 | } | ||
| 238 | 329 | ||||
| @@ -246,7 +337,20 @@ var xSequenceSort func(uintptr, uintptr, uintptr) | |||||
| 246 | // if the second comes before the first. | 337 | // if the second comes before the first. | ||
| 247 | func (x *Sequence) Sort(CmpFuncVar *CompareDataFunc, CmpDataVar uintptr) { | 338 | func (x *Sequence) Sort(CmpFuncVar *CompareDataFunc, CmpDataVar uintptr) { | ||
| 248 | 339 | ||||
| 249 | - | xSequenceSort(x.GoPointer(), NewCallback(CmpFuncVar), CmpDataVar) | 340 | + | CmpFuncVarPtr := uintptr(unsafe.Pointer(CmpFuncVar)) |
| 341 | + | var CmpFuncVarRef uintptr | |||
| 342 | + | if cbRefPtr, ok := GetCallback(CmpFuncVarPtr); ok { | |||
| 343 | + | CmpFuncVarRef = cbRefPtr | |||
| 344 | + | } else { | |||
| 345 | + | fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int { | |||
| 346 | + | cbFn := *CmpFuncVar | |||
| 347 | + | return cbFn(arg0, arg1, arg2) | |||
| 348 | + | } | |||
| 349 | + | CmpFuncVarRef = purego.NewCallback(fcb) | |||
| 350 | + | SaveCallback(CmpFuncVarPtr, CmpFuncVarRef) | |||
| 351 | + | } | |||
| 352 | + | ||||
| 353 | + | xSequenceSort(x.GoPointer(), CmpFuncVarRef, CmpDataVar) | |||
| 250 | 354 | ||||
| 251 | } | 355 | } | ||
| 252 | 356 | ||||
| @@ -261,7 +365,20 @@ var xSequenceSortIter func(uintptr, uintptr, uintptr) | |||||
| 261 | // iterator comes before the first. | 365 | // iterator comes before the first. | ||
| 262 | func (x *Sequence) SortIter(CmpFuncVar *SequenceIterCompareFunc, CmpDataVar uintptr) { | 366 | func (x *Sequence) SortIter(CmpFuncVar *SequenceIterCompareFunc, CmpDataVar uintptr) { | ||
| 263 | 367 | ||||
| 264 | - | xSequenceSortIter(x.GoPointer(), NewCallback(CmpFuncVar), CmpDataVar) | 368 | + | CmpFuncVarPtr := uintptr(unsafe.Pointer(CmpFuncVar)) |
| 369 | + | var CmpFuncVarRef uintptr | |||
| 370 | + | if cbRefPtr, ok := GetCallback(CmpFuncVarPtr); ok { | |||
| 371 | + | CmpFuncVarRef = cbRefPtr | |||
| 372 | + | } else { | |||
| 373 | + | fcb := func(arg0 *SequenceIter, arg1 *SequenceIter, arg2 uintptr) int { | |||
| 374 | + | cbFn := *CmpFuncVar | |||
| 375 | + | return cbFn(arg0, arg1, arg2) | |||
| 376 | + | } | |||
| 377 | + | CmpFuncVarRef = purego.NewCallback(fcb) | |||
| 378 | + | SaveCallback(CmpFuncVarPtr, CmpFuncVarRef) | |||
| 379 | + | } | |||
| 380 | + | ||||
| 381 | + | xSequenceSortIter(x.GoPointer(), CmpFuncVarRef, CmpDataVar) | |||
| 265 | 382 | ||||
| 266 | } | 383 | } | ||
| 267 | 384 | ||||
| @@ -362,7 +479,20 @@ var xSequenceForeachRange func(*SequenceIter, *SequenceIter, uintptr, uintptr) | |||||
| 362 | // itself. | 479 | // itself. | ||
| 363 | func SequenceForeachRange(BeginVar *SequenceIter, EndVar *SequenceIter, FuncVar *Func, UserDataVar uintptr) { | 480 | func SequenceForeachRange(BeginVar *SequenceIter, EndVar *SequenceIter, FuncVar *Func, UserDataVar uintptr) { | ||
| 364 | 481 | ||||
| 365 | - | xSequenceForeachRange(BeginVar, EndVar, NewCallback(FuncVar), UserDataVar) | 482 | + | FuncVarPtr := uintptr(unsafe.Pointer(FuncVar)) |
| 483 | + | var FuncVarRef uintptr | |||
| 484 | + | if cbRefPtr, ok := GetCallback(FuncVarPtr); ok { | |||
| 485 | + | FuncVarRef = cbRefPtr | |||
| 486 | + | } else { | |||
| 487 | + | fcb := func(arg0 uintptr, arg1 uintptr) { | |||
| 488 | + | cbFn := *FuncVar | |||
| 489 | + | cbFn(arg0, arg1) | |||
| 490 | + | } | |||
| 491 | + | FuncVarRef = purego.NewCallback(fcb) | |||
| 492 | + | SaveCallback(FuncVarPtr, FuncVarRef) | |||
| 493 | + | } | |||
| 494 | + | ||||
| 495 | + | xSequenceForeachRange(BeginVar, EndVar, FuncVarRef, UserDataVar) | |||
| 366 | 496 | ||||
| 367 | } | 497 | } | ||
| 368 | 498 | ||||
| @@ -476,7 +606,20 @@ var xSequenceSortChanged func(*SequenceIter, uintptr, uintptr) | |||||
| 476 | // the second item comes before the first. | 606 | // the second item comes before the first. | ||
| 477 | func SequenceSortChanged(IterVar *SequenceIter, CmpFuncVar *CompareDataFunc, CmpDataVar uintptr) { | 607 | func SequenceSortChanged(IterVar *SequenceIter, CmpFuncVar *CompareDataFunc, CmpDataVar uintptr) { | ||
| 478 | 608 | ||||
| 479 | - | xSequenceSortChanged(IterVar, NewCallback(CmpFuncVar), CmpDataVar) | 609 | + | CmpFuncVarPtr := uintptr(unsafe.Pointer(CmpFuncVar)) |
| 610 | + | var CmpFuncVarRef uintptr | |||
| 611 | + | if cbRefPtr, ok := GetCallback(CmpFuncVarPtr); ok { | |||
| 612 | + | CmpFuncVarRef = cbRefPtr | |||
| 613 | + | } else { | |||
| 614 | + | fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int { | |||
| 615 | + | cbFn := *CmpFuncVar | |||
| 616 | + | return cbFn(arg0, arg1, arg2) | |||
| 617 | + | } | |||
| 618 | + | CmpFuncVarRef = purego.NewCallback(fcb) | |||
| 619 | + | SaveCallback(CmpFuncVarPtr, CmpFuncVarRef) | |||
| 620 | + | } | |||
| 621 | + | ||||
| 622 | + | xSequenceSortChanged(IterVar, CmpFuncVarRef, CmpDataVar) | |||
| 480 | 623 | ||||
| 481 | } | 624 | } | ||
| 482 | 625 | ||||
| @@ -493,7 +636,20 @@ var xSequenceSortChangedIter func(*SequenceIter, uintptr, uintptr) | |||||
| 493 | // iterator comes before the first. | 636 | // iterator comes before the first. | ||
| 494 | func SequenceSortChangedIter(IterVar *SequenceIter, IterCmpVar *SequenceIterCompareFunc, CmpDataVar uintptr) { | 637 | func SequenceSortChangedIter(IterVar *SequenceIter, IterCmpVar *SequenceIterCompareFunc, CmpDataVar uintptr) { | ||
| 495 | 638 | ||||
| 496 | - | xSequenceSortChangedIter(IterVar, NewCallback(IterCmpVar), CmpDataVar) | 639 | + | IterCmpVarPtr := uintptr(unsafe.Pointer(IterCmpVar)) |
| 640 | + | var IterCmpVarRef uintptr | |||
| 641 | + | if cbRefPtr, ok := GetCallback(IterCmpVarPtr); ok { | |||
| 642 | + | IterCmpVarRef = cbRefPtr | |||
| 643 | + | } else { | |||
| 644 | + | fcb := func(arg0 *SequenceIter, arg1 *SequenceIter, arg2 uintptr) int { | |||
| 645 | + | cbFn := *IterCmpVar | |||
| 646 | + | return cbFn(arg0, arg1, arg2) | |||
| 647 | + | } | |||
| 648 | + | IterCmpVarRef = purego.NewCallback(fcb) | |||
| 649 | + | SaveCallback(IterCmpVarPtr, IterCmpVarRef) | |||
| 650 | + | } | |||
| 651 | + | ||||
| 652 | + | xSequenceSortChangedIter(IterVar, IterCmpVarRef, CmpDataVar) | |||
| 497 | 653 | ||||
| 498 | } | 654 | } | ||
| 499 | 655 | ||||
M v4/glib/gslist.go +16 -1
| @@ -30,7 +30,22 @@ var xClearSlist func(**SList, uintptr) | |||||
| 30 | // @slist_ptr must be a valid pointer. If @slist_ptr points to a null #GSList, this does nothing. | 30 | // @slist_ptr must be a valid pointer. If @slist_ptr points to a null #GSList, this does nothing. | ||
| 31 | func ClearSlist(SlistPtrVar **SList, DestroyVar *DestroyNotify) { | 31 | func ClearSlist(SlistPtrVar **SList, DestroyVar *DestroyNotify) { | ||
| 32 | 32 | ||||
| 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) | |||
| 34 | 49 | ||||
| 35 | } | 50 | } | ||
| 36 | 51 | ||||
M v4/glib/gspawn.go +82 -5
| @@ -2,6 +2,8 @@ | |||||
| 2 | package glib | 2 | package glib | ||
| 3 | 3 | ||||
| 4 | import ( | 4 | import ( | ||
| 5 | + | "unsafe" | |||
| 6 | + | ||||
| 5 | "github.com/jwijenbergh/purego" | 7 | "github.com/jwijenbergh/purego" | ||
| 6 | "github.com/jwijenbergh/puregotk/pkg/core" | 8 | "github.com/jwijenbergh/puregotk/pkg/core" | ||
| 7 | ) | 9 | ) | ||
| @@ -156,7 +158,22 @@ var xSpawnAsync func(string, []string, []string, SpawnFlags, uintptr, uintptr, * | |||||
| 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) { | ||
| 157 | var cerr *Error | 159 | var cerr *Error | ||
| 158 | 160 | ||||
| 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(WorkingDirectoryVar, ArgvVar, EnvpVar, FlagsVar, ChildSetupVarRef, UserDataVar, ChildPidVar, &cerr) | |||
| 160 | if cerr == nil { | 177 | if cerr == nil { | ||
| 161 | return cret, nil | 178 | return cret, nil | ||
| 162 | } | 179 | } | ||
| @@ -173,7 +190,22 @@ var xSpawnAsyncWithFds func(string, []string, []string, SpawnFlags, uintptr, uin | |||||
| 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) { | ||
| 174 | var cerr *Error | 191 | var cerr *Error | ||
| 175 | 192 | ||||
| 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(WorkingDirectoryVar, ArgvVar, EnvpVar, FlagsVar, ChildSetupVarRef, UserDataVar, ChildPidVar, StdinFdVar, StdoutFdVar, StderrFdVar, &cerr) | |||
| 177 | if cerr == nil { | 209 | if cerr == nil { | ||
| 178 | return cret, nil | 210 | return cret, nil | ||
| 179 | } | 211 | } | ||
| @@ -188,7 +220,22 @@ var xSpawnAsyncWithPipes func(string, []string, []string, SpawnFlags, uintptr, u | |||||
| 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) { | ||
| 189 | var cerr *Error | 221 | var cerr *Error | ||
| 190 | 222 | ||||
| 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(WorkingDirectoryVar, ArgvVar, EnvpVar, FlagsVar, ChildSetupVarRef, UserDataVar, ChildPidVar, StandardInputVar, StandardOutputVar, StandardErrorVar, &cerr) | |||
| 192 | if cerr == nil { | 239 | if cerr == nil { | ||
| 193 | return cret, nil | 240 | return cret, nil | ||
| 194 | } | 241 | } | ||
| @@ -395,7 +442,22 @@ var xSpawnAsyncWithPipesAndFds func(string, []string, []string, SpawnFlags, uint | |||||
| 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) { | ||
| 396 | var cerr *Error | 443 | var cerr *Error | ||
| 397 | 444 | ||||
| 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(WorkingDirectoryVar, ArgvVar, EnvpVar, FlagsVar, ChildSetupVarRef, UserDataVar, StdinFdVar, StdoutFdVar, StderrFdVar, SourceFdsVar, TargetFdsVar, NFdsVar, ChildPidOutVar, StdinPipeOutVar, StdoutPipeOutVar, StderrPipeOutVar, &cerr) | |||
| 399 | if cerr == nil { | 461 | if cerr == nil { | ||
| 400 | return cret, nil | 462 | return cret, nil | ||
| 401 | } | 463 | } | ||
| @@ -581,7 +643,22 @@ var xSpawnSync func(string, []string, []string, SpawnFlags, uintptr, uintptr, *[ | |||||
| 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) { | ||
| 582 | var cerr *Error | 644 | var cerr *Error | ||
| 583 | 645 | ||||
| 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(WorkingDirectoryVar, ArgvVar, EnvpVar, FlagsVar, ChildSetupVarRef, UserDataVar, StandardOutputVar, StandardErrorVar, WaitStatusVar, &cerr) | |||
| 585 | if cerr == nil { | 662 | if cerr == nil { | ||
| 586 | return cret, nil | 663 | return cret, nil | ||
| 587 | } | 664 | } | ||
M v4/glib/gtestutils.go +163 -7
| @@ -420,7 +420,20 @@ var xTestAddDataFunc func(string, uintptr, uintptr) | |||||
| 420 | // and it is recommended to do so even if it isn’t. | 420 | // and it is recommended to do so even if it isn’t. | ||
| 421 | func TestAddDataFunc(TestpathVar string, TestDataVar uintptr, TestFuncVar *TestDataFunc) { | 421 | func TestAddDataFunc(TestpathVar string, TestDataVar uintptr, TestFuncVar *TestDataFunc) { | ||
| 422 | 422 | ||||
| 423 | - | xTestAddDataFunc(TestpathVar, TestDataVar, NewCallback(TestFuncVar)) | 423 | + | TestFuncVarPtr := uintptr(unsafe.Pointer(TestFuncVar)) |
| 424 | + | var TestFuncVarRef uintptr | |||
| 425 | + | if cbRefPtr, ok := GetCallback(TestFuncVarPtr); ok { | |||
| 426 | + | TestFuncVarRef = cbRefPtr | |||
| 427 | + | } else { | |||
| 428 | + | fcb := func(arg0 uintptr) { | |||
| 429 | + | cbFn := *TestFuncVar | |||
| 430 | + | cbFn(arg0) | |||
| 431 | + | } | |||
| 432 | + | TestFuncVarRef = purego.NewCallback(fcb) | |||
| 433 | + | SaveCallback(TestFuncVarPtr, TestFuncVarRef) | |||
| 434 | + | } | |||
| 435 | + | ||||
| 436 | + | xTestAddDataFunc(TestpathVar, TestDataVar, TestFuncVarRef) | |||
| 424 | 437 | ||||
| 425 | } | 438 | } | ||
| 426 | 439 | ||||
| @@ -432,7 +445,33 @@ var xTestAddDataFuncFull func(string, uintptr, uintptr, uintptr) | |||||
| 432 | // is freeing @test_data after the test run is complete. | 445 | // is freeing @test_data after the test run is complete. | ||
| 433 | func TestAddDataFuncFull(TestpathVar string, TestDataVar uintptr, TestFuncVar *TestDataFunc, DataFreeFuncVar *DestroyNotify) { | 446 | func TestAddDataFuncFull(TestpathVar string, TestDataVar uintptr, TestFuncVar *TestDataFunc, DataFreeFuncVar *DestroyNotify) { | ||
| 434 | 447 | ||||
| 435 | - | xTestAddDataFuncFull(TestpathVar, TestDataVar, NewCallback(TestFuncVar), NewCallback(DataFreeFuncVar)) | 448 | + | TestFuncVarPtr := uintptr(unsafe.Pointer(TestFuncVar)) |
| 449 | + | var TestFuncVarRef uintptr | |||
| 450 | + | if cbRefPtr, ok := GetCallback(TestFuncVarPtr); ok { | |||
| 451 | + | TestFuncVarRef = cbRefPtr | |||
| 452 | + | } else { | |||
| 453 | + | fcb := func(arg0 uintptr) { | |||
| 454 | + | cbFn := *TestFuncVar | |||
| 455 | + | cbFn(arg0) | |||
| 456 | + | } | |||
| 457 | + | TestFuncVarRef = purego.NewCallback(fcb) | |||
| 458 | + | SaveCallback(TestFuncVarPtr, TestFuncVarRef) | |||
| 459 | + | } | |||
| 460 | + | ||||
| 461 | + | DataFreeFuncVarPtr := uintptr(unsafe.Pointer(DataFreeFuncVar)) | |||
| 462 | + | var DataFreeFuncVarRef uintptr | |||
| 463 | + | if cbRefPtr, ok := GetCallback(DataFreeFuncVarPtr); ok { | |||
| 464 | + | DataFreeFuncVarRef = cbRefPtr | |||
| 465 | + | } else { | |||
| 466 | + | fcb := func(arg0 uintptr) { | |||
| 467 | + | cbFn := *DataFreeFuncVar | |||
| 468 | + | cbFn(arg0) | |||
| 469 | + | } | |||
| 470 | + | DataFreeFuncVarRef = purego.NewCallback(fcb) | |||
| 471 | + | SaveCallback(DataFreeFuncVarPtr, DataFreeFuncVarRef) | |||
| 472 | + | } | |||
| 473 | + | ||||
| 474 | + | xTestAddDataFuncFull(TestpathVar, TestDataVar, TestFuncVarRef, DataFreeFuncVarRef) | |||
| 436 | 475 | ||||
| 437 | } | 476 | } | ||
| 438 | 477 | ||||
| @@ -454,7 +493,20 @@ var xTestAddFunc func(string, uintptr) | |||||
| 454 | // it is recommended to do so even if it isn’t. | 493 | // it is recommended to do so even if it isn’t. | ||
| 455 | func TestAddFunc(TestpathVar string, TestFuncVar *TestFunc) { | 494 | func TestAddFunc(TestpathVar string, TestFuncVar *TestFunc) { | ||
| 456 | 495 | ||||
| 457 | - | xTestAddFunc(TestpathVar, NewCallback(TestFuncVar)) | 496 | + | TestFuncVarPtr := uintptr(unsafe.Pointer(TestFuncVar)) |
| 497 | + | var TestFuncVarRef uintptr | |||
| 498 | + | if cbRefPtr, ok := GetCallback(TestFuncVarPtr); ok { | |||
| 499 | + | TestFuncVarRef = cbRefPtr | |||
| 500 | + | } else { | |||
| 501 | + | fcb := func() { | |||
| 502 | + | cbFn := *TestFuncVar | |||
| 503 | + | cbFn() | |||
| 504 | + | } | |||
| 505 | + | TestFuncVarRef = purego.NewCallback(fcb) | |||
| 506 | + | SaveCallback(TestFuncVarPtr, TestFuncVarRef) | |||
| 507 | + | } | |||
| 508 | + | ||||
| 509 | + | xTestAddFunc(TestpathVar, TestFuncVarRef) | |||
| 458 | 510 | ||||
| 459 | } | 511 | } | ||
| 460 | 512 | ||||
| @@ -462,7 +514,46 @@ var xTestAddVtable func(string, uint, uintptr, uintptr, uintptr, uintptr) | |||||
| 462 | 514 | ||||
| 463 | func TestAddVtable(TestpathVar string, DataSizeVar uint, TestDataVar uintptr, DataSetupVar *TestFixtureFunc, DataTestVar *TestFixtureFunc, DataTeardownVar *TestFixtureFunc) { | 515 | func TestAddVtable(TestpathVar string, DataSizeVar uint, TestDataVar uintptr, DataSetupVar *TestFixtureFunc, DataTestVar *TestFixtureFunc, DataTeardownVar *TestFixtureFunc) { | ||
| 464 | 516 | ||||
| 465 | - | xTestAddVtable(TestpathVar, DataSizeVar, TestDataVar, NewCallback(DataSetupVar), NewCallback(DataTestVar), NewCallback(DataTeardownVar)) | 517 | + | DataSetupVarPtr := uintptr(unsafe.Pointer(DataSetupVar)) |
| 518 | + | var DataSetupVarRef uintptr | |||
| 519 | + | if cbRefPtr, ok := GetCallback(DataSetupVarPtr); ok { | |||
| 520 | + | DataSetupVarRef = cbRefPtr | |||
| 521 | + | } else { | |||
| 522 | + | fcb := func(arg0 uintptr, arg1 uintptr) { | |||
| 523 | + | cbFn := *DataSetupVar | |||
| 524 | + | cbFn(arg0, arg1) | |||
| 525 | + | } | |||
| 526 | + | DataSetupVarRef = purego.NewCallback(fcb) | |||
| 527 | + | SaveCallback(DataSetupVarPtr, DataSetupVarRef) | |||
| 528 | + | } | |||
| 529 | + | ||||
| 530 | + | DataTestVarPtr := uintptr(unsafe.Pointer(DataTestVar)) | |||
| 531 | + | var DataTestVarRef uintptr | |||
| 532 | + | if cbRefPtr, ok := GetCallback(DataTestVarPtr); ok { | |||
| 533 | + | DataTestVarRef = cbRefPtr | |||
| 534 | + | } else { | |||
| 535 | + | fcb := func(arg0 uintptr, arg1 uintptr) { | |||
| 536 | + | cbFn := *DataTestVar | |||
| 537 | + | cbFn(arg0, arg1) | |||
| 538 | + | } | |||
| 539 | + | DataTestVarRef = purego.NewCallback(fcb) | |||
| 540 | + | SaveCallback(DataTestVarPtr, DataTestVarRef) | |||
| 541 | + | } | |||
| 542 | + | ||||
| 543 | + | DataTeardownVarPtr := uintptr(unsafe.Pointer(DataTeardownVar)) | |||
| 544 | + | var DataTeardownVarRef uintptr | |||
| 545 | + | if cbRefPtr, ok := GetCallback(DataTeardownVarPtr); ok { | |||
| 546 | + | DataTeardownVarRef = cbRefPtr | |||
| 547 | + | } else { | |||
| 548 | + | fcb := func(arg0 uintptr, arg1 uintptr) { | |||
| 549 | + | cbFn := *DataTeardownVar | |||
| 550 | + | cbFn(arg0, arg1) | |||
| 551 | + | } | |||
| 552 | + | DataTeardownVarRef = purego.NewCallback(fcb) | |||
| 553 | + | SaveCallback(DataTeardownVarPtr, DataTeardownVarRef) | |||
| 554 | + | } | |||
| 555 | + | ||||
| 556 | + | xTestAddVtable(TestpathVar, DataSizeVar, TestDataVar, DataSetupVarRef, DataTestVarRef, DataTeardownVarRef) | |||
| 466 | 557 | ||||
| 467 | } | 558 | } | ||
| 468 | 559 | ||||
| @@ -566,7 +657,46 @@ var xTestCreateCase func(string, uint, uintptr, uintptr, uintptr, uintptr) *Test | |||||
| 566 | // varying @test_name and @data_test arguments. | 657 | // varying @test_name and @data_test arguments. | ||
| 567 | func TestCreateCase(TestNameVar string, DataSizeVar uint, TestDataVar uintptr, DataSetupVar *TestFixtureFunc, DataTestVar *TestFixtureFunc, DataTeardownVar *TestFixtureFunc) *TestCase { | 658 | func TestCreateCase(TestNameVar string, DataSizeVar uint, TestDataVar uintptr, DataSetupVar *TestFixtureFunc, DataTestVar *TestFixtureFunc, DataTeardownVar *TestFixtureFunc) *TestCase { | ||
| 568 | 659 | ||||
| 569 | - | cret := xTestCreateCase(TestNameVar, DataSizeVar, TestDataVar, NewCallback(DataSetupVar), NewCallback(DataTestVar), NewCallback(DataTeardownVar)) | 660 | + | DataSetupVarPtr := uintptr(unsafe.Pointer(DataSetupVar)) |
| 661 | + | var DataSetupVarRef uintptr | |||
| 662 | + | if cbRefPtr, ok := GetCallback(DataSetupVarPtr); ok { | |||
| 663 | + | DataSetupVarRef = cbRefPtr | |||
| 664 | + | } else { | |||
| 665 | + | fcb := func(arg0 uintptr, arg1 uintptr) { | |||
| 666 | + | cbFn := *DataSetupVar | |||
| 667 | + | cbFn(arg0, arg1) | |||
| 668 | + | } | |||
| 669 | + | DataSetupVarRef = purego.NewCallback(fcb) | |||
| 670 | + | SaveCallback(DataSetupVarPtr, DataSetupVarRef) | |||
| 671 | + | } | |||
| 672 | + | ||||
| 673 | + | DataTestVarPtr := uintptr(unsafe.Pointer(DataTestVar)) | |||
| 674 | + | var DataTestVarRef uintptr | |||
| 675 | + | if cbRefPtr, ok := GetCallback(DataTestVarPtr); ok { | |||
| 676 | + | DataTestVarRef = cbRefPtr | |||
| 677 | + | } else { | |||
| 678 | + | fcb := func(arg0 uintptr, arg1 uintptr) { | |||
| 679 | + | cbFn := *DataTestVar | |||
| 680 | + | cbFn(arg0, arg1) | |||
| 681 | + | } | |||
| 682 | + | DataTestVarRef = purego.NewCallback(fcb) | |||
| 683 | + | SaveCallback(DataTestVarPtr, DataTestVarRef) | |||
| 684 | + | } | |||
| 685 | + | ||||
| 686 | + | DataTeardownVarPtr := uintptr(unsafe.Pointer(DataTeardownVar)) | |||
| 687 | + | var DataTeardownVarRef uintptr | |||
| 688 | + | if cbRefPtr, ok := GetCallback(DataTeardownVarPtr); ok { | |||
| 689 | + | DataTeardownVarRef = cbRefPtr | |||
| 690 | + | } else { | |||
| 691 | + | fcb := func(arg0 uintptr, arg1 uintptr) { | |||
| 692 | + | cbFn := *DataTeardownVar | |||
| 693 | + | cbFn(arg0, arg1) | |||
| 694 | + | } | |||
| 695 | + | DataTeardownVarRef = purego.NewCallback(fcb) | |||
| 696 | + | SaveCallback(DataTeardownVarPtr, DataTeardownVarRef) | |||
| 697 | + | } | |||
| 698 | + | ||||
| 699 | + | cret := xTestCreateCase(TestNameVar, DataSizeVar, TestDataVar, DataSetupVarRef, DataTestVarRef, DataTeardownVarRef) | |||
| 570 | return cret | 700 | return cret | ||
| 571 | } | 701 | } | ||
| 572 | 702 | ||||
| @@ -879,7 +1009,20 @@ var xTestLogSetFatalHandler func(uintptr, uintptr) | |||||
| 879 | // [Using Structured Logging](logging.html#using-structured-logging). | 1009 | // [Using Structured Logging](logging.html#using-structured-logging). | ||
| 880 | func TestLogSetFatalHandler(LogFuncVar *TestLogFatalFunc, UserDataVar uintptr) { | 1010 | func TestLogSetFatalHandler(LogFuncVar *TestLogFatalFunc, UserDataVar uintptr) { | ||
| 881 | 1011 | ||||
| 882 | - | xTestLogSetFatalHandler(NewCallback(LogFuncVar), UserDataVar) | 1012 | + | LogFuncVarPtr := uintptr(unsafe.Pointer(LogFuncVar)) |
| 1013 | + | var LogFuncVarRef uintptr | |||
| 1014 | + | if cbRefPtr, ok := GetCallback(LogFuncVarPtr); ok { | |||
| 1015 | + | LogFuncVarRef = cbRefPtr | |||
| 1016 | + | } else { | |||
| 1017 | + | fcb := func(arg0 string, arg1 LogLevelFlags, arg2 string, arg3 uintptr) bool { | |||
| 1018 | + | cbFn := *LogFuncVar | |||
| 1019 | + | return cbFn(arg0, arg1, arg2, arg3) | |||
| 1020 | + | } | |||
| 1021 | + | LogFuncVarRef = purego.NewCallback(fcb) | |||
| 1022 | + | SaveCallback(LogFuncVarPtr, LogFuncVarRef) | |||
| 1023 | + | } | |||
| 1024 | + | ||||
| 1025 | + | xTestLogSetFatalHandler(LogFuncVarRef, UserDataVar) | |||
| 883 | 1026 | ||||
| 884 | } | 1027 | } | ||
| 885 | 1028 | ||||
| @@ -939,7 +1082,20 @@ var xTestQueueDestroy func(uintptr, uintptr) | |||||
| 939 | // before `A()` during teardown. | 1082 | // before `A()` during teardown. | ||
| 940 | func TestQueueDestroy(DestroyFuncVar *DestroyNotify, DestroyDataVar uintptr) { | 1083 | func TestQueueDestroy(DestroyFuncVar *DestroyNotify, DestroyDataVar uintptr) { | ||
| 941 | 1084 | ||||
| 942 | - | xTestQueueDestroy(NewCallback(DestroyFuncVar), DestroyDataVar) | 1085 | + | DestroyFuncVarPtr := uintptr(unsafe.Pointer(DestroyFuncVar)) |
| 1086 | + | var DestroyFuncVarRef uintptr | |||
| 1087 | + | if cbRefPtr, ok := GetCallback(DestroyFuncVarPtr); ok { | |||
| 1088 | + | DestroyFuncVarRef = cbRefPtr | |||
| 1089 | + | } else { | |||
| 1090 | + | fcb := func(arg0 uintptr) { | |||
| 1091 | + | cbFn := *DestroyFuncVar | |||
| 1092 | + | cbFn(arg0) | |||
| 1093 | + | } | |||
| 1094 | + | DestroyFuncVarRef = purego.NewCallback(fcb) | |||
| 1095 | + | SaveCallback(DestroyFuncVarPtr, DestroyFuncVarRef) | |||
| 1096 | + | } | |||
| 1097 | + | ||||
| 1098 | + | xTestQueueDestroy(DestroyFuncVarRef, DestroyDataVar) | |||
| 943 | 1099 | ||||
| 944 | } | 1100 | } | ||
| 945 | 1101 | ||||
M v4/glib/gthread.go +112 -8
| @@ -281,7 +281,20 @@ var xOnceImpl func(uintptr, uintptr, uintptr) uintptr | |||||
| 281 | 281 | ||||
| 282 | func (x *Once) Impl(FuncVar *ThreadFunc, ArgVar uintptr) uintptr { | 282 | func (x *Once) Impl(FuncVar *ThreadFunc, ArgVar uintptr) uintptr { | ||
| 283 | 283 | ||||
| 284 | - | cret := xOnceImpl(x.GoPointer(), NewCallback(FuncVar), ArgVar) | 284 | + | FuncVarPtr := uintptr(unsafe.Pointer(FuncVar)) |
| 285 | + | var FuncVarRef uintptr | |||
| 286 | + | if cbRefPtr, ok := GetCallback(FuncVarPtr); ok { | |||
| 287 | + | FuncVarRef = cbRefPtr | |||
| 288 | + | } else { | |||
| 289 | + | fcb := func(arg0 uintptr) uintptr { | |||
| 290 | + | cbFn := *FuncVar | |||
| 291 | + | return cbFn(arg0) | |||
| 292 | + | } | |||
| 293 | + | FuncVarRef = purego.NewCallback(fcb) | |||
| 294 | + | SaveCallback(FuncVarPtr, FuncVarRef) | |||
| 295 | + | } | |||
| 296 | + | ||||
| 297 | + | cret := xOnceImpl(x.GoPointer(), FuncVarRef, ArgVar) | |||
| 285 | return cret | 298 | return cret | ||
| 286 | } | 299 | } | ||
| 287 | 300 | ||||
| @@ -859,7 +872,20 @@ var xStaticPrivateSet func(uintptr, uintptr, uintptr) | |||||
| 859 | // @notify is used quite differently from @destructor in g_private_new(). | 872 | // @notify is used quite differently from @destructor in g_private_new(). | ||
| 860 | func (x *StaticPrivate) Set(DataVar uintptr, NotifyVar *DestroyNotify) { | 873 | func (x *StaticPrivate) Set(DataVar uintptr, NotifyVar *DestroyNotify) { | ||
| 861 | 874 | ||||
| 862 | - | xStaticPrivateSet(x.GoPointer(), DataVar, NewCallback(NotifyVar)) | 875 | + | NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar)) |
| 876 | + | var NotifyVarRef uintptr | |||
| 877 | + | if cbRefPtr, ok := GetCallback(NotifyVarPtr); ok { | |||
| 878 | + | NotifyVarRef = cbRefPtr | |||
| 879 | + | } else { | |||
| 880 | + | fcb := func(arg0 uintptr) { | |||
| 881 | + | cbFn := *NotifyVar | |||
| 882 | + | cbFn(arg0) | |||
| 883 | + | } | |||
| 884 | + | NotifyVarRef = purego.NewCallback(fcb) | |||
| 885 | + | SaveCallback(NotifyVarPtr, NotifyVarRef) | |||
| 886 | + | } | |||
| 887 | + | ||||
| 888 | + | xStaticPrivateSet(x.GoPointer(), DataVar, NotifyVarRef) | |||
| 863 | 889 | ||||
| 864 | } | 890 | } | ||
| 865 | 891 | ||||
| @@ -1250,7 +1276,20 @@ var xNewThread func(string, uintptr, uintptr) *Thread | |||||
| 1250 | // POSIX and all threads inherit their parent thread's priority. | 1276 | // POSIX and all threads inherit their parent thread's priority. | ||
| 1251 | func NewThread(NameVar string, FuncVar *ThreadFunc, DataVar uintptr) *Thread { | 1277 | func NewThread(NameVar string, FuncVar *ThreadFunc, DataVar uintptr) *Thread { | ||
| 1252 | 1278 | ||||
| 1253 | - | cret := xNewThread(NameVar, NewCallback(FuncVar), DataVar) | 1279 | + | FuncVarPtr := uintptr(unsafe.Pointer(FuncVar)) |
| 1280 | + | var FuncVarRef uintptr | |||
| 1281 | + | if cbRefPtr, ok := GetCallback(FuncVarPtr); ok { | |||
| 1282 | + | FuncVarRef = cbRefPtr | |||
| 1283 | + | } else { | |||
| 1284 | + | fcb := func(arg0 uintptr) uintptr { | |||
| 1285 | + | cbFn := *FuncVar | |||
| 1286 | + | return cbFn(arg0) | |||
| 1287 | + | } | |||
| 1288 | + | FuncVarRef = purego.NewCallback(fcb) | |||
| 1289 | + | SaveCallback(FuncVarPtr, FuncVarRef) | |||
| 1290 | + | } | |||
| 1291 | + | ||||
| 1292 | + | cret := xNewThread(NameVar, FuncVarRef, DataVar) | |||
| 1254 | return cret | 1293 | return cret | ||
| 1255 | } | 1294 | } | ||
| 1256 | 1295 | ||||
| @@ -1264,7 +1303,20 @@ var xThreadTryNew func(string, uintptr, uintptr, **Error) *Thread | |||||
| 1264 | func ThreadTryNew(NameVar string, FuncVar *ThreadFunc, DataVar uintptr) (*Thread, error) { | 1303 | func ThreadTryNew(NameVar string, FuncVar *ThreadFunc, DataVar uintptr) (*Thread, error) { | ||
| 1265 | var cerr *Error | 1304 | var cerr *Error | ||
| 1266 | 1305 | ||||
| 1267 | - | cret := xThreadTryNew(NameVar, NewCallback(FuncVar), DataVar, &cerr) | 1306 | + | FuncVarPtr := uintptr(unsafe.Pointer(FuncVar)) |
| 1307 | + | var FuncVarRef uintptr | |||
| 1308 | + | if cbRefPtr, ok := GetCallback(FuncVarPtr); ok { | |||
| 1309 | + | FuncVarRef = cbRefPtr | |||
| 1310 | + | } else { | |||
| 1311 | + | fcb := func(arg0 uintptr) uintptr { | |||
| 1312 | + | cbFn := *FuncVar | |||
| 1313 | + | return cbFn(arg0) | |||
| 1314 | + | } | |||
| 1315 | + | FuncVarRef = purego.NewCallback(fcb) | |||
| 1316 | + | SaveCallback(FuncVarPtr, FuncVarRef) | |||
| 1317 | + | } | |||
| 1318 | + | ||||
| 1319 | + | cret := xThreadTryNew(NameVar, FuncVarRef, DataVar, &cerr) | |||
| 1268 | if cerr == nil { | 1320 | if cerr == nil { | ||
| 1269 | return cret, nil | 1321 | return cret, nil | ||
| 1270 | } | 1322 | } | ||
| @@ -2160,7 +2212,20 @@ var xPrivateNew func(uintptr) *Private | |||||
| 2160 | // Creates a new #GPrivate. | 2212 | // Creates a new #GPrivate. | ||
| 2161 | func PrivateNew(NotifyVar *DestroyNotify) *Private { | 2213 | func PrivateNew(NotifyVar *DestroyNotify) *Private { | ||
| 2162 | 2214 | ||||
| 2163 | - | cret := xPrivateNew(NewCallback(NotifyVar)) | 2215 | + | NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar)) |
| 2216 | + | var NotifyVarRef uintptr | |||
| 2217 | + | if cbRefPtr, ok := GetCallback(NotifyVarPtr); ok { | |||
| 2218 | + | NotifyVarRef = cbRefPtr | |||
| 2219 | + | } else { | |||
| 2220 | + | fcb := func(arg0 uintptr) { | |||
| 2221 | + | cbFn := *NotifyVar | |||
| 2222 | + | cbFn(arg0) | |||
| 2223 | + | } | |||
| 2224 | + | NotifyVarRef = purego.NewCallback(fcb) | |||
| 2225 | + | SaveCallback(NotifyVarPtr, NotifyVarRef) | |||
| 2226 | + | } | |||
| 2227 | + | ||||
| 2228 | + | cret := xPrivateNew(NotifyVarRef) | |||
| 2164 | return cret | 2229 | return cret | ||
| 2165 | } | 2230 | } | ||
| 2166 | 2231 | ||||
| @@ -2181,7 +2246,20 @@ var xThreadCreate func(uintptr, uintptr, bool, **Error) *Thread | |||||
| 2181 | func ThreadCreate(FuncVar *ThreadFunc, DataVar uintptr, JoinableVar bool) (*Thread, error) { | 2246 | func ThreadCreate(FuncVar *ThreadFunc, DataVar uintptr, JoinableVar bool) (*Thread, error) { | ||
| 2182 | var cerr *Error | 2247 | var cerr *Error | ||
| 2183 | 2248 | ||||
| 2184 | - | cret := xThreadCreate(NewCallback(FuncVar), DataVar, JoinableVar, &cerr) | 2249 | + | FuncVarPtr := uintptr(unsafe.Pointer(FuncVar)) |
| 2250 | + | var FuncVarRef uintptr | |||
| 2251 | + | if cbRefPtr, ok := GetCallback(FuncVarPtr); ok { | |||
| 2252 | + | FuncVarRef = cbRefPtr | |||
| 2253 | + | } else { | |||
| 2254 | + | fcb := func(arg0 uintptr) uintptr { | |||
| 2255 | + | cbFn := *FuncVar | |||
| 2256 | + | return cbFn(arg0) | |||
| 2257 | + | } | |||
| 2258 | + | FuncVarRef = purego.NewCallback(fcb) | |||
| 2259 | + | SaveCallback(FuncVarPtr, FuncVarRef) | |||
| 2260 | + | } | |||
| 2261 | + | ||||
| 2262 | + | cret := xThreadCreate(FuncVarRef, DataVar, JoinableVar, &cerr) | |||
| 2185 | if cerr == nil { | 2263 | if cerr == nil { | ||
| 2186 | return cret, nil | 2264 | return cret, nil | ||
| 2187 | } | 2265 | } | ||
| @@ -2195,7 +2273,20 @@ var xThreadCreateFull func(uintptr, uintptr, uint32, bool, bool, ThreadPriority, | |||||
| 2195 | func ThreadCreateFull(FuncVar *ThreadFunc, DataVar uintptr, StackSizeVar uint32, JoinableVar bool, BoundVar bool, PriorityVar ThreadPriority) (*Thread, error) { | 2273 | func ThreadCreateFull(FuncVar *ThreadFunc, DataVar uintptr, StackSizeVar uint32, JoinableVar bool, BoundVar bool, PriorityVar ThreadPriority) (*Thread, error) { | ||
| 2196 | var cerr *Error | 2274 | var cerr *Error | ||
| 2197 | 2275 | ||||
| 2198 | - | cret := xThreadCreateFull(NewCallback(FuncVar), DataVar, StackSizeVar, JoinableVar, BoundVar, PriorityVar, &cerr) | 2276 | + | FuncVarPtr := uintptr(unsafe.Pointer(FuncVar)) |
| 2277 | + | var FuncVarRef uintptr | |||
| 2278 | + | if cbRefPtr, ok := GetCallback(FuncVarPtr); ok { | |||
| 2279 | + | FuncVarRef = cbRefPtr | |||
| 2280 | + | } else { | |||
| 2281 | + | fcb := func(arg0 uintptr) uintptr { | |||
| 2282 | + | cbFn := *FuncVar | |||
| 2283 | + | return cbFn(arg0) | |||
| 2284 | + | } | |||
| 2285 | + | FuncVarRef = purego.NewCallback(fcb) | |||
| 2286 | + | SaveCallback(FuncVarPtr, FuncVarRef) | |||
| 2287 | + | } | |||
| 2288 | + | ||||
| 2289 | + | cret := xThreadCreateFull(FuncVarRef, DataVar, StackSizeVar, JoinableVar, BoundVar, PriorityVar, &cerr) | |||
| 2199 | if cerr == nil { | 2290 | if cerr == nil { | ||
| 2200 | return cret, nil | 2291 | return cret, nil | ||
| 2201 | } | 2292 | } | ||
| @@ -2239,7 +2330,20 @@ var xThreadForeach func(uintptr, uintptr) | |||||
| 2239 | // which is quadratic in the number of existing threads. | 2330 | // which is quadratic in the number of existing threads. | ||
| 2240 | func ThreadForeach(ThreadFuncVar *Func, UserDataVar uintptr) { | 2331 | func ThreadForeach(ThreadFuncVar *Func, UserDataVar uintptr) { | ||
| 2241 | 2332 | ||||
| 2242 | - | xThreadForeach(NewCallback(ThreadFuncVar), UserDataVar) | 2333 | + | ThreadFuncVarPtr := uintptr(unsafe.Pointer(ThreadFuncVar)) |
| 2334 | + | var ThreadFuncVarRef uintptr | |||
| 2335 | + | if cbRefPtr, ok := GetCallback(ThreadFuncVarPtr); ok { | |||
| 2336 | + | ThreadFuncVarRef = cbRefPtr | |||
| 2337 | + | } else { | |||
| 2338 | + | fcb := func(arg0 uintptr, arg1 uintptr) { | |||
| 2339 | + | cbFn := *ThreadFuncVar | |||
| 2340 | + | cbFn(arg0, arg1) | |||
| 2341 | + | } | |||
| 2342 | + | ThreadFuncVarRef = purego.NewCallback(fcb) | |||
| 2343 | + | SaveCallback(ThreadFuncVarPtr, ThreadFuncVarRef) | |||
| 2344 | + | } | |||
| 2345 | + | ||||
| 2346 | + | xThreadForeach(ThreadFuncVarRef, UserDataVar) | |||
| 2243 | 2347 | ||||
| 2244 | } | 2348 | } | ||
| 2245 | 2349 | ||||
M v4/glib/gthreadpool.go +14 -1
| @@ -172,7 +172,20 @@ var xThreadPoolSetSortFunction func(uintptr, uintptr, uintptr) | |||||
| 172 | // created. | 172 | // created. | ||
| 173 | func (x *ThreadPool) SetSortFunction(FuncVar *CompareDataFunc, UserDataVar uintptr) { | 173 | func (x *ThreadPool) SetSortFunction(FuncVar *CompareDataFunc, UserDataVar uintptr) { | ||
| 174 | 174 | ||||
| 175 | - | xThreadPoolSetSortFunction(x.GoPointer(), NewCallback(FuncVar), UserDataVar) | 175 | + | FuncVarPtr := uintptr(unsafe.Pointer(FuncVar)) |
| 176 | + | var FuncVarRef uintptr | |||
| 177 | + | if cbRefPtr, ok := GetCallback(FuncVarPtr); ok { | |||
| 178 | + | FuncVarRef = cbRefPtr | |||
| 179 | + | } else { | |||
| 180 | + | fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int { | |||
| 181 | + | cbFn := *FuncVar | |||
| 182 | + | return cbFn(arg0, arg1, arg2) | |||
| 183 | + | } | |||
| 184 | + | FuncVarRef = purego.NewCallback(fcb) | |||
| 185 | + | SaveCallback(FuncVarPtr, FuncVarRef) | |||
| 186 | + | } | |||
| 187 | + | ||||
| 188 | + | xThreadPoolSetSortFunction(x.GoPointer(), FuncVarRef, UserDataVar) | |||
| 176 | 189 | ||||
| 177 | } | 190 | } | ||
| 178 | 191 | ||||
M v4/glib/gtree.go +138 -8
| @@ -44,7 +44,20 @@ var xNewTree func(uintptr) *Tree | |||||
| 44 | // Creates a new #GTree. | 44 | // Creates a new #GTree. | ||
| 45 | func NewTree(KeyCompareFuncVar *CompareFunc) *Tree { | 45 | func NewTree(KeyCompareFuncVar *CompareFunc) *Tree { | ||
| 46 | 46 | ||||
| 47 | - | cret := xNewTree(NewCallback(KeyCompareFuncVar)) | 47 | + | KeyCompareFuncVarPtr := uintptr(unsafe.Pointer(KeyCompareFuncVar)) |
| 48 | + | var KeyCompareFuncVarRef uintptr | |||
| 49 | + | if cbRefPtr, ok := GetCallback(KeyCompareFuncVarPtr); ok { | |||
| 50 | + | KeyCompareFuncVarRef = cbRefPtr | |||
| 51 | + | } else { | |||
| 52 | + | fcb := func(arg0 uintptr, arg1 uintptr) int { | |||
| 53 | + | cbFn := *KeyCompareFuncVar | |||
| 54 | + | return cbFn(arg0, arg1) | |||
| 55 | + | } | |||
| 56 | + | KeyCompareFuncVarRef = purego.NewCallback(fcb) | |||
| 57 | + | SaveCallback(KeyCompareFuncVarPtr, KeyCompareFuncVarRef) | |||
| 58 | + | } | |||
| 59 | + | ||||
| 60 | + | cret := xNewTree(KeyCompareFuncVarRef) | |||
| 48 | return cret | 61 | return cret | ||
| 49 | } | 62 | } | ||
| 50 | 63 | ||||
| @@ -55,7 +68,46 @@ var xNewTreeFull func(uintptr, uintptr, uintptr, uintptr) *Tree | |||||
| 55 | // removing the entry from the #GTree. | 68 | // removing the entry from the #GTree. | ||
| 56 | func NewTreeFull(KeyCompareFuncVar *CompareDataFunc, KeyCompareDataVar uintptr, KeyDestroyFuncVar *DestroyNotify, ValueDestroyFuncVar *DestroyNotify) *Tree { | 69 | func NewTreeFull(KeyCompareFuncVar *CompareDataFunc, KeyCompareDataVar uintptr, KeyDestroyFuncVar *DestroyNotify, ValueDestroyFuncVar *DestroyNotify) *Tree { | ||
| 57 | 70 | ||||
| 58 | - | cret := xNewTreeFull(NewCallback(KeyCompareFuncVar), KeyCompareDataVar, NewCallback(KeyDestroyFuncVar), NewCallback(ValueDestroyFuncVar)) | 71 | + | KeyCompareFuncVarPtr := uintptr(unsafe.Pointer(KeyCompareFuncVar)) |
| 72 | + | var KeyCompareFuncVarRef uintptr | |||
| 73 | + | if cbRefPtr, ok := GetCallback(KeyCompareFuncVarPtr); ok { | |||
| 74 | + | KeyCompareFuncVarRef = cbRefPtr | |||
| 75 | + | } else { | |||
| 76 | + | fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int { | |||
| 77 | + | cbFn := *KeyCompareFuncVar | |||
| 78 | + | return cbFn(arg0, arg1, arg2) | |||
| 79 | + | } | |||
| 80 | + | KeyCompareFuncVarRef = purego.NewCallback(fcb) | |||
| 81 | + | SaveCallback(KeyCompareFuncVarPtr, KeyCompareFuncVarRef) | |||
| 82 | + | } | |||
| 83 | + | ||||
| 84 | + | KeyDestroyFuncVarPtr := uintptr(unsafe.Pointer(KeyDestroyFuncVar)) | |||
| 85 | + | var KeyDestroyFuncVarRef uintptr | |||
| 86 | + | if cbRefPtr, ok := GetCallback(KeyDestroyFuncVarPtr); ok { | |||
| 87 | + | KeyDestroyFuncVarRef = cbRefPtr | |||
| 88 | + | } else { | |||
| 89 | + | fcb := func(arg0 uintptr) { | |||
| 90 | + | cbFn := *KeyDestroyFuncVar | |||
| 91 | + | cbFn(arg0) | |||
| 92 | + | } | |||
| 93 | + | KeyDestroyFuncVarRef = purego.NewCallback(fcb) | |||
| 94 | + | SaveCallback(KeyDestroyFuncVarPtr, KeyDestroyFuncVarRef) | |||
| 95 | + | } | |||
| 96 | + | ||||
| 97 | + | ValueDestroyFuncVarPtr := uintptr(unsafe.Pointer(ValueDestroyFuncVar)) | |||
| 98 | + | var ValueDestroyFuncVarRef uintptr | |||
| 99 | + | if cbRefPtr, ok := GetCallback(ValueDestroyFuncVarPtr); ok { | |||
| 100 | + | ValueDestroyFuncVarRef = cbRefPtr | |||
| 101 | + | } else { | |||
| 102 | + | fcb := func(arg0 uintptr) { | |||
| 103 | + | cbFn := *ValueDestroyFuncVar | |||
| 104 | + | cbFn(arg0) | |||
| 105 | + | } | |||
| 106 | + | ValueDestroyFuncVarRef = purego.NewCallback(fcb) | |||
| 107 | + | SaveCallback(ValueDestroyFuncVarPtr, ValueDestroyFuncVarRef) | |||
| 108 | + | } | |||
| 109 | + | ||||
| 110 | + | cret := xNewTreeFull(KeyCompareFuncVarRef, KeyCompareDataVar, KeyDestroyFuncVarRef, ValueDestroyFuncVarRef) | |||
| 59 | return cret | 111 | return cret | ||
| 60 | } | 112 | } | ||
| 61 | 113 | ||||
| @@ -65,7 +117,20 @@ var xNewTreeWithData func(uintptr, uintptr) *Tree | |||||
| 65 | // See g_tree_new() for more details. | 117 | // See g_tree_new() for more details. | ||
| 66 | func NewTreeWithData(KeyCompareFuncVar *CompareDataFunc, KeyCompareDataVar uintptr) *Tree { | 118 | func NewTreeWithData(KeyCompareFuncVar *CompareDataFunc, KeyCompareDataVar uintptr) *Tree { | ||
| 67 | 119 | ||||
| 68 | - | cret := xNewTreeWithData(NewCallback(KeyCompareFuncVar), KeyCompareDataVar) | 120 | + | KeyCompareFuncVarPtr := uintptr(unsafe.Pointer(KeyCompareFuncVar)) |
| 121 | + | var KeyCompareFuncVarRef uintptr | |||
| 122 | + | if cbRefPtr, ok := GetCallback(KeyCompareFuncVarPtr); ok { | |||
| 123 | + | KeyCompareFuncVarRef = cbRefPtr | |||
| 124 | + | } else { | |||
| 125 | + | fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int { | |||
| 126 | + | cbFn := *KeyCompareFuncVar | |||
| 127 | + | return cbFn(arg0, arg1, arg2) | |||
| 128 | + | } | |||
| 129 | + | KeyCompareFuncVarRef = purego.NewCallback(fcb) | |||
| 130 | + | SaveCallback(KeyCompareFuncVarPtr, KeyCompareFuncVarRef) | |||
| 131 | + | } | |||
| 132 | + | ||||
| 133 | + | cret := xNewTreeWithData(KeyCompareFuncVarRef, KeyCompareDataVar) | |||
| 69 | return cret | 134 | return cret | ||
| 70 | } | 135 | } | ||
| 71 | 136 | ||||
| @@ -95,7 +160,20 @@ var xTreeForeach func(uintptr, uintptr, uintptr) | |||||
| 95 | // the tree, then walk the list and remove each item. | 160 | // the tree, then walk the list and remove each item. | ||
| 96 | func (x *Tree) Foreach(FuncVar *TraverseFunc, UserDataVar uintptr) { | 161 | func (x *Tree) Foreach(FuncVar *TraverseFunc, UserDataVar uintptr) { | ||
| 97 | 162 | ||||
| 98 | - | xTreeForeach(x.GoPointer(), NewCallback(FuncVar), UserDataVar) | 163 | + | FuncVarPtr := uintptr(unsafe.Pointer(FuncVar)) |
| 164 | + | var FuncVarRef uintptr | |||
| 165 | + | if cbRefPtr, ok := GetCallback(FuncVarPtr); ok { | |||
| 166 | + | FuncVarRef = cbRefPtr | |||
| 167 | + | } else { | |||
| 168 | + | fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) bool { | |||
| 169 | + | cbFn := *FuncVar | |||
| 170 | + | return cbFn(arg0, arg1, arg2) | |||
| 171 | + | } | |||
| 172 | + | FuncVarRef = purego.NewCallback(fcb) | |||
| 173 | + | SaveCallback(FuncVarPtr, FuncVarRef) | |||
| 174 | + | } | |||
| 175 | + | ||||
| 176 | + | xTreeForeach(x.GoPointer(), FuncVarRef, UserDataVar) | |||
| 99 | 177 | ||||
| 100 | } | 178 | } | ||
| 101 | 179 | ||||
| @@ -111,7 +189,20 @@ var xTreeForeachNode func(uintptr, uintptr, uintptr) | |||||
| 111 | // the tree, then walk the list and remove each item. | 189 | // the tree, then walk the list and remove each item. | ||
| 112 | func (x *Tree) ForeachNode(FuncVar *TraverseNodeFunc, UserDataVar uintptr) { | 190 | func (x *Tree) ForeachNode(FuncVar *TraverseNodeFunc, UserDataVar uintptr) { | ||
| 113 | 191 | ||||
| 114 | - | xTreeForeachNode(x.GoPointer(), NewCallback(FuncVar), UserDataVar) | 192 | + | FuncVarPtr := uintptr(unsafe.Pointer(FuncVar)) |
| 193 | + | var FuncVarRef uintptr | |||
| 194 | + | if cbRefPtr, ok := GetCallback(FuncVarPtr); ok { | |||
| 195 | + | FuncVarRef = cbRefPtr | |||
| 196 | + | } else { | |||
| 197 | + | fcb := func(arg0 *TreeNode, arg1 uintptr) bool { | |||
| 198 | + | cbFn := *FuncVar | |||
| 199 | + | return cbFn(arg0, arg1) | |||
| 200 | + | } | |||
| 201 | + | FuncVarRef = purego.NewCallback(fcb) | |||
| 202 | + | SaveCallback(FuncVarPtr, FuncVarRef) | |||
| 203 | + | } | |||
| 204 | + | ||||
| 205 | + | xTreeForeachNode(x.GoPointer(), FuncVarRef, UserDataVar) | |||
| 115 | 206 | ||||
| 116 | } | 207 | } | ||
| 117 | 208 | ||||
| @@ -317,7 +408,20 @@ var xTreeSearch func(uintptr, uintptr, uintptr) uintptr | |||||
| 317 | // pairs that have a larger key. | 408 | // pairs that have a larger key. | ||
| 318 | func (x *Tree) Search(SearchFuncVar *CompareFunc, UserDataVar uintptr) uintptr { | 409 | func (x *Tree) Search(SearchFuncVar *CompareFunc, UserDataVar uintptr) uintptr { | ||
| 319 | 410 | ||||
| 320 | - | cret := xTreeSearch(x.GoPointer(), NewCallback(SearchFuncVar), UserDataVar) | 411 | + | SearchFuncVarPtr := uintptr(unsafe.Pointer(SearchFuncVar)) |
| 412 | + | var SearchFuncVarRef uintptr | |||
| 413 | + | if cbRefPtr, ok := GetCallback(SearchFuncVarPtr); ok { | |||
| 414 | + | SearchFuncVarRef = cbRefPtr | |||
| 415 | + | } else { | |||
| 416 | + | fcb := func(arg0 uintptr, arg1 uintptr) int { | |||
| 417 | + | cbFn := *SearchFuncVar | |||
| 418 | + | return cbFn(arg0, arg1) | |||
| 419 | + | } | |||
| 420 | + | SearchFuncVarRef = purego.NewCallback(fcb) | |||
| 421 | + | SaveCallback(SearchFuncVarPtr, SearchFuncVarRef) | |||
| 422 | + | } | |||
| 423 | + | ||||
| 424 | + | cret := xTreeSearch(x.GoPointer(), SearchFuncVarRef, UserDataVar) | |||
| 321 | return cret | 425 | return cret | ||
| 322 | } | 426 | } | ||
| 323 | 427 | ||||
| @@ -334,7 +438,20 @@ var xTreeSearchNode func(uintptr, uintptr, uintptr) *TreeNode | |||||
| 334 | // pairs that have a larger key. | 438 | // pairs that have a larger key. | ||
| 335 | func (x *Tree) SearchNode(SearchFuncVar *CompareFunc, UserDataVar uintptr) *TreeNode { | 439 | func (x *Tree) SearchNode(SearchFuncVar *CompareFunc, UserDataVar uintptr) *TreeNode { | ||
| 336 | 440 | ||||
| 337 | - | cret := xTreeSearchNode(x.GoPointer(), NewCallback(SearchFuncVar), UserDataVar) | 441 | + | SearchFuncVarPtr := uintptr(unsafe.Pointer(SearchFuncVar)) |
| 442 | + | var SearchFuncVarRef uintptr | |||
| 443 | + | if cbRefPtr, ok := GetCallback(SearchFuncVarPtr); ok { | |||
| 444 | + | SearchFuncVarRef = cbRefPtr | |||
| 445 | + | } else { | |||
| 446 | + | fcb := func(arg0 uintptr, arg1 uintptr) int { | |||
| 447 | + | cbFn := *SearchFuncVar | |||
| 448 | + | return cbFn(arg0, arg1) | |||
| 449 | + | } | |||
| 450 | + | SearchFuncVarRef = purego.NewCallback(fcb) | |||
| 451 | + | SaveCallback(SearchFuncVarPtr, SearchFuncVarRef) | |||
| 452 | + | } | |||
| 453 | + | ||||
| 454 | + | cret := xTreeSearchNode(x.GoPointer(), SearchFuncVarRef, UserDataVar) | |||
| 338 | return cret | 455 | return cret | ||
| 339 | } | 456 | } | ||
| 340 | 457 | ||||
| @@ -355,7 +472,20 @@ var xTreeTraverse func(uintptr, uintptr, TraverseType, uintptr) | |||||
| 355 | // Calls the given function for each node in the #GTree. | 472 | // Calls the given function for each node in the #GTree. | ||
| 356 | func (x *Tree) Traverse(TraverseFuncVar *TraverseFunc, TraverseTypeVar TraverseType, UserDataVar uintptr) { | 473 | func (x *Tree) Traverse(TraverseFuncVar *TraverseFunc, TraverseTypeVar TraverseType, UserDataVar uintptr) { | ||
| 357 | 474 | ||||
| 358 | - | xTreeTraverse(x.GoPointer(), NewCallback(TraverseFuncVar), TraverseTypeVar, UserDataVar) | 475 | + | TraverseFuncVarPtr := uintptr(unsafe.Pointer(TraverseFuncVar)) |
| 476 | + | var TraverseFuncVarRef uintptr | |||
| 477 | + | if cbRefPtr, ok := GetCallback(TraverseFuncVarPtr); ok { | |||
| 478 | + | TraverseFuncVarRef = cbRefPtr | |||
| 479 | + | } else { | |||
| 480 | + | fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) bool { | |||
| 481 | + | cbFn := *TraverseFuncVar | |||
| 482 | + | return cbFn(arg0, arg1, arg2) | |||
| 483 | + | } | |||
| 484 | + | TraverseFuncVarRef = purego.NewCallback(fcb) | |||
| 485 | + | SaveCallback(TraverseFuncVarPtr, TraverseFuncVarRef) | |||
| 486 | + | } | |||
| 487 | + | ||||
| 488 | + | xTreeTraverse(x.GoPointer(), TraverseFuncVarRef, TraverseTypeVar, UserDataVar) | |||
| 359 | 489 | ||||
| 360 | } | 490 | } | ||
| 361 | 491 | ||||
M v4/glib/gutils.go +14 -1
| @@ -121,7 +121,20 @@ var xAtexit func(uintptr) | |||||
| 121 | // program. | 121 | // program. | ||
| 122 | func Atexit(FuncVar *VoidFunc) { | 122 | func Atexit(FuncVar *VoidFunc) { | ||
| 123 | 123 | ||||
| 124 | - | xAtexit(NewCallback(FuncVar)) | 124 | + | FuncVarPtr := uintptr(unsafe.Pointer(FuncVar)) |
| 125 | + | var FuncVarRef uintptr | |||
| 126 | + | if cbRefPtr, ok := GetCallback(FuncVarPtr); ok { | |||
| 127 | + | FuncVarRef = cbRefPtr | |||
| 128 | + | } else { | |||
| 129 | + | fcb := func() { | |||
| 130 | + | cbFn := *FuncVar | |||
| 131 | + | cbFn() | |||
| 132 | + | } | |||
| 133 | + | FuncVarRef = purego.NewCallback(fcb) | |||
| 134 | + | SaveCallback(FuncVarPtr, FuncVarRef) | |||
| 135 | + | } | |||
| 136 | + | ||||
| 137 | + | xAtexit(FuncVarRef) | |||
| 125 | 138 | ||||
| 126 | } | 139 | } | ||
| 127 | 140 | ||||
M v4/glib/gvariant.go +14 -1
| @@ -466,7 +466,20 @@ var xNewVariantFromData func(*VariantType, []byte, uint, bool, uintptr, uintptr) | |||||
| 466 | // process. | 466 | // process. | ||
| 467 | func NewVariantFromData(TypeVar *VariantType, DataVar []byte, SizeVar uint, TrustedVar bool, NotifyVar *DestroyNotify, UserDataVar uintptr) *Variant { | 467 | func NewVariantFromData(TypeVar *VariantType, DataVar []byte, SizeVar uint, TrustedVar bool, NotifyVar *DestroyNotify, UserDataVar uintptr) *Variant { | ||
| 468 | 468 | ||||
| 469 | - | cret := xNewVariantFromData(TypeVar, DataVar, SizeVar, TrustedVar, NewCallback(NotifyVar), UserDataVar) | 469 | + | NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar)) |
| 470 | + | var NotifyVarRef uintptr | |||
| 471 | + | if cbRefPtr, ok := GetCallback(NotifyVarPtr); ok { | |||
| 472 | + | NotifyVarRef = cbRefPtr | |||
| 473 | + | } else { | |||
| 474 | + | fcb := func(arg0 uintptr) { | |||
| 475 | + | cbFn := *NotifyVar | |||
| 476 | + | cbFn(arg0) | |||
| 477 | + | } | |||
| 478 | + | NotifyVarRef = purego.NewCallback(fcb) | |||
| 479 | + | SaveCallback(NotifyVarPtr, NotifyVarRef) | |||
| 480 | + | } | |||
| 481 | + | ||||
| 482 | + | cret := xNewVariantFromData(TypeVar, DataVar, SizeVar, TrustedVar, NotifyVarRef, UserDataVar) | |||
| 470 | return cret | 483 | return cret | ||
| 471 | } | 484 | } | ||
| 472 | 485 | ||||
M v4/gobject/gbindinggroup.go +46 -1
| @@ -2,6 +2,8 @@ | |||||
| 2 | package gobject | 2 | package gobject | ||
| 3 | 3 | ||||
| 4 | import ( | 4 | import ( | ||
| 5 | + | "unsafe" | |||
| 6 | + | ||||
| 5 | "github.com/jwijenbergh/purego" | 7 | "github.com/jwijenbergh/purego" | ||
| 6 | "github.com/jwijenbergh/puregotk/pkg/core" | 8 | "github.com/jwijenbergh/puregotk/pkg/core" | ||
| 7 | "github.com/jwijenbergh/puregotk/v4/glib" | 9 | "github.com/jwijenbergh/puregotk/v4/glib" | ||
| @@ -71,7 +73,50 @@ var xBindingGroupBindFull func(uintptr, string, uintptr, string, BindingFlags, u | |||||
| 71 | // See g_object_bind_property_full() for more information. | 73 | // See g_object_bind_property_full() for more information. | ||
| 72 | func (x *BindingGroup) BindFull(SourcePropertyVar string, TargetVar *Object, TargetPropertyVar string, FlagsVar BindingFlags, TransformToVar *BindingTransformFunc, TransformFromVar *BindingTransformFunc, UserDataVar uintptr, UserDataDestroyVar *glib.DestroyNotify) { | 74 | func (x *BindingGroup) BindFull(SourcePropertyVar string, TargetVar *Object, TargetPropertyVar string, FlagsVar BindingFlags, TransformToVar *BindingTransformFunc, TransformFromVar *BindingTransformFunc, UserDataVar uintptr, UserDataDestroyVar *glib.DestroyNotify) { | ||
| 73 | 75 | ||||
| 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 | + | UserDataDestroyVarPtr := uintptr(unsafe.Pointer(UserDataDestroyVar)) | |||
| 107 | + | var UserDataDestroyVarRef uintptr | |||
| 108 | + | if cbRefPtr, ok := glib.GetCallback(UserDataDestroyVarPtr); ok { | |||
| 109 | + | UserDataDestroyVarRef = cbRefPtr | |||
| 110 | + | } else { | |||
| 111 | + | fcb := func(arg0 uintptr) { | |||
| 112 | + | cbFn := *UserDataDestroyVar | |||
| 113 | + | cbFn(arg0) | |||
| 114 | + | } | |||
| 115 | + | UserDataDestroyVarRef = purego.NewCallback(fcb) | |||
| 116 | + | glib.SaveCallback(UserDataDestroyVarPtr, UserDataDestroyVarRef) | |||
| 117 | + | } | |||
| 118 | + | ||||
| 119 | + | xBindingGroupBindFull(x.GoPointer(), SourcePropertyVar, TargetVar.GoPointer(), TargetPropertyVar, FlagsVar, TransformToVarRef, TransformFromVarRef, UserDataVar, UserDataDestroyVarRef) | |||
| 75 | 120 | ||||
| 76 | } | 121 | } | ||
| 77 | 122 | ||||
M v4/gobject/gboxed.go +29 -1
| @@ -2,6 +2,8 @@ | |||||
| 2 | package gobject | 2 | package gobject | ||
| 3 | 3 | ||||
| 4 | import ( | 4 | import ( | ||
| 5 | + | "unsafe" | |||
| 6 | + | ||||
| 5 | "github.com/jwijenbergh/purego" | 7 | "github.com/jwijenbergh/purego" | ||
| 6 | "github.com/jwijenbergh/puregotk/pkg/core" | 8 | "github.com/jwijenbergh/puregotk/pkg/core" | ||
| 7 | "github.com/jwijenbergh/puregotk/v4/glib" | 9 | "github.com/jwijenbergh/puregotk/v4/glib" | ||
| @@ -47,7 +49,33 @@ var xBoxedTypeRegisterStatic func(string, uintptr, uintptr) types.GType | |||||
| 47 | // will create the appropriate `*_get_type()` function for the boxed type. | 49 | // will create the appropriate `*_get_type()` function for the boxed type. | ||
| 48 | func BoxedTypeRegisterStatic(NameVar string, BoxedCopyVar *BoxedCopyFunc, BoxedFreeVar *BoxedFreeFunc) types.GType { | 50 | func BoxedTypeRegisterStatic(NameVar string, BoxedCopyVar *BoxedCopyFunc, BoxedFreeVar *BoxedFreeFunc) types.GType { | ||
| 49 | 51 | ||||
| 50 | - | cret := xBoxedTypeRegisterStatic(NameVar, glib.NewCallback(BoxedCopyVar), glib.NewCallback(BoxedFreeVar)) | 52 | + | BoxedCopyVarPtr := uintptr(unsafe.Pointer(BoxedCopyVar)) |
| 53 | + | var BoxedCopyVarRef uintptr | |||
| 54 | + | if cbRefPtr, ok := glib.GetCallback(BoxedCopyVarPtr); ok { | |||
| 55 | + | BoxedCopyVarRef = cbRefPtr | |||
| 56 | + | } else { | |||
| 57 | + | fcb := func(arg0 uintptr) uintptr { | |||
| 58 | + | cbFn := *BoxedCopyVar | |||
| 59 | + | return cbFn(arg0) | |||
| 60 | + | } | |||
| 61 | + | BoxedCopyVarRef = purego.NewCallback(fcb) | |||
| 62 | + | glib.SaveCallback(BoxedCopyVarPtr, BoxedCopyVarRef) | |||
| 63 | + | } | |||
| 64 | + | ||||
| 65 | + | BoxedFreeVarPtr := uintptr(unsafe.Pointer(BoxedFreeVar)) | |||
| 66 | + | var BoxedFreeVarRef uintptr | |||
| 67 | + | if cbRefPtr, ok := glib.GetCallback(BoxedFreeVarPtr); ok { | |||
| 68 | + | BoxedFreeVarRef = cbRefPtr | |||
| 69 | + | } else { | |||
| 70 | + | fcb := func(arg0 uintptr) { | |||
| 71 | + | cbFn := *BoxedFreeVar | |||
| 72 | + | cbFn(arg0) | |||
| 73 | + | } | |||
| 74 | + | BoxedFreeVarRef = purego.NewCallback(fcb) | |||
| 75 | + | glib.SaveCallback(BoxedFreeVarPtr, BoxedFreeVarRef) | |||
| 76 | + | } | |||
| 77 | + | ||||
| 78 | + | cret := xBoxedTypeRegisterStatic(NameVar, BoxedCopyVarRef, BoxedFreeVarRef) | |||
| 51 | return cret | 79 | return cret | ||
| 52 | } | 80 | } | ||
| 53 | 81 | ||||
M v4/gobject/gclosure.go +165 -9
| @@ -203,7 +203,20 @@ var xClosureAddFinalizeNotifier func(uintptr, uintptr, uintptr) | |||||
| 203 | // notifiers will be run before the finalize notifiers. | 203 | // notifiers will be run before the finalize notifiers. | ||
| 204 | func (x *Closure) AddFinalizeNotifier(NotifyDataVar uintptr, NotifyFuncVar *ClosureNotify) { | 204 | func (x *Closure) AddFinalizeNotifier(NotifyDataVar uintptr, NotifyFuncVar *ClosureNotify) { | ||
| 205 | 205 | ||||
| 206 | - | xClosureAddFinalizeNotifier(x.GoPointer(), NotifyDataVar, glib.NewCallback(NotifyFuncVar)) | 206 | + | NotifyFuncVarPtr := uintptr(unsafe.Pointer(NotifyFuncVar)) |
| 207 | + | var NotifyFuncVarRef uintptr | |||
| 208 | + | if cbRefPtr, ok := glib.GetCallback(NotifyFuncVarPtr); ok { | |||
| 209 | + | NotifyFuncVarRef = cbRefPtr | |||
| 210 | + | } else { | |||
| 211 | + | fcb := func(arg0 uintptr, arg1 *Closure) { | |||
| 212 | + | cbFn := *NotifyFuncVar | |||
| 213 | + | cbFn(arg0, arg1) | |||
| 214 | + | } | |||
| 215 | + | NotifyFuncVarRef = purego.NewCallback(fcb) | |||
| 216 | + | glib.SaveCallback(NotifyFuncVarPtr, NotifyFuncVarRef) | |||
| 217 | + | } | |||
| 218 | + | ||||
| 219 | + | xClosureAddFinalizeNotifier(x.GoPointer(), NotifyDataVar, NotifyFuncVarRef) | |||
| 207 | 220 | ||||
| 208 | } | 221 | } | ||
| 209 | 222 | ||||
| @@ -216,7 +229,20 @@ var xClosureAddInvalidateNotifier func(uintptr, uintptr, uintptr) | |||||
| 216 | // in an unspecified order. | 229 | // in an unspecified order. | ||
| 217 | func (x *Closure) AddInvalidateNotifier(NotifyDataVar uintptr, NotifyFuncVar *ClosureNotify) { | 230 | func (x *Closure) AddInvalidateNotifier(NotifyDataVar uintptr, NotifyFuncVar *ClosureNotify) { | ||
| 218 | 231 | ||||
| 219 | - | xClosureAddInvalidateNotifier(x.GoPointer(), NotifyDataVar, glib.NewCallback(NotifyFuncVar)) | 232 | + | NotifyFuncVarPtr := uintptr(unsafe.Pointer(NotifyFuncVar)) |
| 233 | + | var NotifyFuncVarRef uintptr | |||
| 234 | + | if cbRefPtr, ok := glib.GetCallback(NotifyFuncVarPtr); ok { | |||
| 235 | + | NotifyFuncVarRef = cbRefPtr | |||
| 236 | + | } else { | |||
| 237 | + | fcb := func(arg0 uintptr, arg1 *Closure) { | |||
| 238 | + | cbFn := *NotifyFuncVar | |||
| 239 | + | cbFn(arg0, arg1) | |||
| 240 | + | } | |||
| 241 | + | NotifyFuncVarRef = purego.NewCallback(fcb) | |||
| 242 | + | glib.SaveCallback(NotifyFuncVarPtr, NotifyFuncVarRef) | |||
| 243 | + | } | |||
| 244 | + | ||||
| 245 | + | xClosureAddInvalidateNotifier(x.GoPointer(), NotifyDataVar, NotifyFuncVarRef) | |||
| 220 | 246 | ||||
| 221 | } | 247 | } | ||
| 222 | 248 | ||||
| @@ -230,7 +256,33 @@ var xClosureAddMarshalGuards func(uintptr, uintptr, uintptr, uintptr, uintptr) | |||||
| 230 | // example of marshal guards. | 256 | // example of marshal guards. | ||
| 231 | func (x *Closure) AddMarshalGuards(PreMarshalDataVar uintptr, PreMarshalNotifyVar *ClosureNotify, PostMarshalDataVar uintptr, PostMarshalNotifyVar *ClosureNotify) { | 257 | func (x *Closure) AddMarshalGuards(PreMarshalDataVar uintptr, PreMarshalNotifyVar *ClosureNotify, PostMarshalDataVar uintptr, PostMarshalNotifyVar *ClosureNotify) { | ||
| 232 | 258 | ||||
| 233 | - | xClosureAddMarshalGuards(x.GoPointer(), PreMarshalDataVar, glib.NewCallback(PreMarshalNotifyVar), PostMarshalDataVar, glib.NewCallback(PostMarshalNotifyVar)) | 259 | + | PreMarshalNotifyVarPtr := uintptr(unsafe.Pointer(PreMarshalNotifyVar)) |
| 260 | + | var PreMarshalNotifyVarRef uintptr | |||
| 261 | + | if cbRefPtr, ok := glib.GetCallback(PreMarshalNotifyVarPtr); ok { | |||
| 262 | + | PreMarshalNotifyVarRef = cbRefPtr | |||
| 263 | + | } else { | |||
| 264 | + | fcb := func(arg0 uintptr, arg1 *Closure) { | |||
| 265 | + | cbFn := *PreMarshalNotifyVar | |||
| 266 | + | cbFn(arg0, arg1) | |||
| 267 | + | } | |||
| 268 | + | PreMarshalNotifyVarRef = purego.NewCallback(fcb) | |||
| 269 | + | glib.SaveCallback(PreMarshalNotifyVarPtr, PreMarshalNotifyVarRef) | |||
| 270 | + | } | |||
| 271 | + | ||||
| 272 | + | PostMarshalNotifyVarPtr := uintptr(unsafe.Pointer(PostMarshalNotifyVar)) | |||
| 273 | + | var PostMarshalNotifyVarRef uintptr | |||
| 274 | + | if cbRefPtr, ok := glib.GetCallback(PostMarshalNotifyVarPtr); ok { | |||
| 275 | + | PostMarshalNotifyVarRef = cbRefPtr | |||
| 276 | + | } else { | |||
| 277 | + | fcb := func(arg0 uintptr, arg1 *Closure) { | |||
| 278 | + | cbFn := *PostMarshalNotifyVar | |||
| 279 | + | cbFn(arg0, arg1) | |||
| 280 | + | } | |||
| 281 | + | PostMarshalNotifyVarRef = purego.NewCallback(fcb) | |||
| 282 | + | glib.SaveCallback(PostMarshalNotifyVarPtr, PostMarshalNotifyVarRef) | |||
| 283 | + | } | |||
| 284 | + | ||||
| 285 | + | xClosureAddMarshalGuards(x.GoPointer(), PreMarshalDataVar, PreMarshalNotifyVarRef, PostMarshalDataVar, PostMarshalNotifyVarRef) | |||
| 234 | 286 | ||||
| 235 | } | 287 | } | ||
| 236 | 288 | ||||
| @@ -283,7 +335,20 @@ var xClosureRemoveFinalizeNotifier func(uintptr, uintptr, uintptr) | |||||
| 283 | // Notice that notifiers are automatically removed after they are run. | 335 | // Notice that notifiers are automatically removed after they are run. | ||
| 284 | func (x *Closure) RemoveFinalizeNotifier(NotifyDataVar uintptr, NotifyFuncVar *ClosureNotify) { | 336 | func (x *Closure) RemoveFinalizeNotifier(NotifyDataVar uintptr, NotifyFuncVar *ClosureNotify) { | ||
| 285 | 337 | ||||
| 286 | - | xClosureRemoveFinalizeNotifier(x.GoPointer(), NotifyDataVar, glib.NewCallback(NotifyFuncVar)) | 338 | + | NotifyFuncVarPtr := uintptr(unsafe.Pointer(NotifyFuncVar)) |
| 339 | + | var NotifyFuncVarRef uintptr | |||
| 340 | + | if cbRefPtr, ok := glib.GetCallback(NotifyFuncVarPtr); ok { | |||
| 341 | + | NotifyFuncVarRef = cbRefPtr | |||
| 342 | + | } else { | |||
| 343 | + | fcb := func(arg0 uintptr, arg1 *Closure) { | |||
| 344 | + | cbFn := *NotifyFuncVar | |||
| 345 | + | cbFn(arg0, arg1) | |||
| 346 | + | } | |||
| 347 | + | NotifyFuncVarRef = purego.NewCallback(fcb) | |||
| 348 | + | glib.SaveCallback(NotifyFuncVarPtr, NotifyFuncVarRef) | |||
| 349 | + | } | |||
| 350 | + | ||||
| 351 | + | xClosureRemoveFinalizeNotifier(x.GoPointer(), NotifyDataVar, NotifyFuncVarRef) | |||
| 287 | 352 | ||||
| 288 | } | 353 | } | ||
| 289 | 354 | ||||
| @@ -294,7 +359,20 @@ var xClosureRemoveInvalidateNotifier func(uintptr, uintptr, uintptr) | |||||
| 294 | // Notice that notifiers are automatically removed after they are run. | 359 | // Notice that notifiers are automatically removed after they are run. | ||
| 295 | func (x *Closure) RemoveInvalidateNotifier(NotifyDataVar uintptr, NotifyFuncVar *ClosureNotify) { | 360 | func (x *Closure) RemoveInvalidateNotifier(NotifyDataVar uintptr, NotifyFuncVar *ClosureNotify) { | ||
| 296 | 361 | ||||
| 297 | - | xClosureRemoveInvalidateNotifier(x.GoPointer(), NotifyDataVar, glib.NewCallback(NotifyFuncVar)) | 362 | + | NotifyFuncVarPtr := uintptr(unsafe.Pointer(NotifyFuncVar)) |
| 363 | + | var NotifyFuncVarRef uintptr | |||
| 364 | + | if cbRefPtr, ok := glib.GetCallback(NotifyFuncVarPtr); ok { | |||
| 365 | + | NotifyFuncVarRef = cbRefPtr | |||
| 366 | + | } else { | |||
| 367 | + | fcb := func(arg0 uintptr, arg1 *Closure) { | |||
| 368 | + | cbFn := *NotifyFuncVar | |||
| 369 | + | cbFn(arg0, arg1) | |||
| 370 | + | } | |||
| 371 | + | NotifyFuncVarRef = purego.NewCallback(fcb) | |||
| 372 | + | glib.SaveCallback(NotifyFuncVarPtr, NotifyFuncVarRef) | |||
| 373 | + | } | |||
| 374 | + | ||||
| 375 | + | xClosureRemoveInvalidateNotifier(x.GoPointer(), NotifyDataVar, NotifyFuncVarRef) | |||
| 298 | 376 | ||||
| 299 | } | 377 | } | ||
| 300 | 378 | ||||
| @@ -312,7 +390,20 @@ var xClosureSetMarshal func(uintptr, uintptr) | |||||
| 312 | // See also: g_closure_set_meta_marshal() | 390 | // See also: g_closure_set_meta_marshal() | ||
| 313 | func (x *Closure) SetMarshal(MarshalVar *ClosureMarshal) { | 391 | func (x *Closure) SetMarshal(MarshalVar *ClosureMarshal) { | ||
| 314 | 392 | ||||
| 315 | - | xClosureSetMarshal(x.GoPointer(), glib.NewCallback(MarshalVar)) | 393 | + | MarshalVarPtr := uintptr(unsafe.Pointer(MarshalVar)) |
| 394 | + | var MarshalVarRef uintptr | |||
| 395 | + | if cbRefPtr, ok := glib.GetCallback(MarshalVarPtr); ok { | |||
| 396 | + | MarshalVarRef = cbRefPtr | |||
| 397 | + | } else { | |||
| 398 | + | fcb := func(arg0 *Closure, arg1 *Value, arg2 uint, arg3 []Value, arg4 uintptr, arg5 uintptr) { | |||
| 399 | + | cbFn := *MarshalVar | |||
| 400 | + | cbFn(arg0, arg1, arg2, arg3, arg4, arg5) | |||
| 401 | + | } | |||
| 402 | + | MarshalVarRef = purego.NewCallback(fcb) | |||
| 403 | + | glib.SaveCallback(MarshalVarPtr, MarshalVarRef) | |||
| 404 | + | } | |||
| 405 | + | ||||
| 406 | + | xClosureSetMarshal(x.GoPointer(), MarshalVarRef) | |||
| 316 | 407 | ||||
| 317 | } | 408 | } | ||
| 318 | 409 | ||||
| @@ -337,7 +428,20 @@ var xClosureSetMetaMarshal func(uintptr, uintptr, uintptr) | |||||
| 337 | // @marshal_data argument. | 428 | // @marshal_data argument. | ||
| 338 | func (x *Closure) SetMetaMarshal(MarshalDataVar uintptr, MetaMarshalVar *ClosureMarshal) { | 429 | func (x *Closure) SetMetaMarshal(MarshalDataVar uintptr, MetaMarshalVar *ClosureMarshal) { | ||
| 339 | 430 | ||||
| 340 | - | xClosureSetMetaMarshal(x.GoPointer(), MarshalDataVar, glib.NewCallback(MetaMarshalVar)) | 431 | + | MetaMarshalVarPtr := uintptr(unsafe.Pointer(MetaMarshalVar)) |
| 432 | + | var MetaMarshalVarRef uintptr | |||
| 433 | + | if cbRefPtr, ok := glib.GetCallback(MetaMarshalVarPtr); ok { | |||
| 434 | + | MetaMarshalVarRef = cbRefPtr | |||
| 435 | + | } else { | |||
| 436 | + | fcb := func(arg0 *Closure, arg1 *Value, arg2 uint, arg3 []Value, arg4 uintptr, arg5 uintptr) { | |||
| 437 | + | cbFn := *MetaMarshalVar | |||
| 438 | + | cbFn(arg0, arg1, arg2, arg3, arg4, arg5) | |||
| 439 | + | } | |||
| 440 | + | MetaMarshalVarRef = purego.NewCallback(fcb) | |||
| 441 | + | glib.SaveCallback(MetaMarshalVarPtr, MetaMarshalVarRef) | |||
| 442 | + | } | |||
| 443 | + | ||||
| 444 | + | xClosureSetMetaMarshal(x.GoPointer(), MarshalDataVar, MetaMarshalVarRef) | |||
| 341 | 445 | ||||
| 342 | } | 446 | } | ||
| 343 | 447 | ||||
| @@ -467,7 +571,33 @@ var xCclosureNew func(uintptr, uintptr, uintptr) *Closure | |||||
| 467 | // @destroy_data will be called as a finalize notifier on the #GClosure. | 571 | // @destroy_data will be called as a finalize notifier on the #GClosure. | ||
| 468 | func CclosureNew(CallbackFuncVar *Callback, UserDataVar uintptr, DestroyDataVar *ClosureNotify) *Closure { | 572 | func CclosureNew(CallbackFuncVar *Callback, UserDataVar uintptr, DestroyDataVar *ClosureNotify) *Closure { | ||
| 469 | 573 | ||||
| 470 | - | cret := xCclosureNew(glib.NewCallback(CallbackFuncVar), UserDataVar, glib.NewCallback(DestroyDataVar)) | 574 | + | CallbackFuncVarPtr := uintptr(unsafe.Pointer(CallbackFuncVar)) |
| 575 | + | var CallbackFuncVarRef uintptr | |||
| 576 | + | if cbRefPtr, ok := glib.GetCallback(CallbackFuncVarPtr); ok { | |||
| 577 | + | CallbackFuncVarRef = cbRefPtr | |||
| 578 | + | } else { | |||
| 579 | + | fcb := func() { | |||
| 580 | + | cbFn := *CallbackFuncVar | |||
| 581 | + | cbFn() | |||
| 582 | + | } | |||
| 583 | + | CallbackFuncVarRef = purego.NewCallback(fcb) | |||
| 584 | + | glib.SaveCallback(CallbackFuncVarPtr, CallbackFuncVarRef) | |||
| 585 | + | } | |||
| 586 | + | ||||
| 587 | + | DestroyDataVarPtr := uintptr(unsafe.Pointer(DestroyDataVar)) | |||
| 588 | + | var DestroyDataVarRef uintptr | |||
| 589 | + | if cbRefPtr, ok := glib.GetCallback(DestroyDataVarPtr); ok { | |||
| 590 | + | DestroyDataVarRef = cbRefPtr | |||
| 591 | + | } else { | |||
| 592 | + | fcb := func(arg0 uintptr, arg1 *Closure) { | |||
| 593 | + | cbFn := *DestroyDataVar | |||
| 594 | + | cbFn(arg0, arg1) | |||
| 595 | + | } | |||
| 596 | + | DestroyDataVarRef = purego.NewCallback(fcb) | |||
| 597 | + | glib.SaveCallback(DestroyDataVarPtr, DestroyDataVarRef) | |||
| 598 | + | } | |||
| 599 | + | ||||
| 600 | + | cret := xCclosureNew(CallbackFuncVarRef, UserDataVar, DestroyDataVarRef) | |||
| 471 | return cret | 601 | return cret | ||
| 472 | } | 602 | } | ||
| 473 | 603 | ||||
| @@ -479,7 +609,33 @@ var xCclosureNewSwap func(uintptr, uintptr, uintptr) *Closure | |||||
| 479 | // @destroy_data will be called as a finalize notifier on the #GClosure. | 609 | // @destroy_data will be called as a finalize notifier on the #GClosure. | ||
| 480 | func CclosureNewSwap(CallbackFuncVar *Callback, UserDataVar uintptr, DestroyDataVar *ClosureNotify) *Closure { | 610 | func CclosureNewSwap(CallbackFuncVar *Callback, UserDataVar uintptr, DestroyDataVar *ClosureNotify) *Closure { | ||
| 481 | 611 | ||||
| 482 | - | cret := xCclosureNewSwap(glib.NewCallback(CallbackFuncVar), UserDataVar, glib.NewCallback(DestroyDataVar)) | 612 | + | CallbackFuncVarPtr := uintptr(unsafe.Pointer(CallbackFuncVar)) |
| 613 | + | var CallbackFuncVarRef uintptr | |||
| 614 | + | if cbRefPtr, ok := glib.GetCallback(CallbackFuncVarPtr); ok { | |||
| 615 | + | CallbackFuncVarRef = cbRefPtr | |||
| 616 | + | } else { | |||
| 617 | + | fcb := func() { | |||
| 618 | + | cbFn := *CallbackFuncVar | |||
| 619 | + | cbFn() | |||
| 620 | + | } | |||
| 621 | + | CallbackFuncVarRef = purego.NewCallback(fcb) | |||
| 622 | + | glib.SaveCallback(CallbackFuncVarPtr, CallbackFuncVarRef) | |||
| 623 | + | } | |||
| 624 | + | ||||
| 625 | + | DestroyDataVarPtr := uintptr(unsafe.Pointer(DestroyDataVar)) | |||
| 626 | + | var DestroyDataVarRef uintptr | |||
| 627 | + | if cbRefPtr, ok := glib.GetCallback(DestroyDataVarPtr); ok { | |||
| 628 | + | DestroyDataVarRef = cbRefPtr | |||
| 629 | + | } else { | |||
| 630 | + | fcb := func(arg0 uintptr, arg1 *Closure) { | |||
| 631 | + | cbFn := *DestroyDataVar | |||
| 632 | + | cbFn(arg0, arg1) | |||
| 633 | + | } | |||
| 634 | + | DestroyDataVarRef = purego.NewCallback(fcb) | |||
| 635 | + | glib.SaveCallback(DestroyDataVarPtr, DestroyDataVarRef) | |||
| 636 | + | } | |||
| 637 | + | ||||
| 638 | + | cret := xCclosureNewSwap(CallbackFuncVarRef, UserDataVar, DestroyDataVarRef) | |||
| 483 | return cret | 639 | return cret | ||
| 484 | } | 640 | } | ||
| 485 | 641 | ||||
M v4/gobject/gobject.go +240 -14
| @@ -931,7 +931,20 @@ var xCclosureNewObject func(uintptr, uintptr) *Closure | |||||
| 931 | // after the object is is freed. | 931 | // after the object is is freed. | ||
| 932 | func CclosureNewObject(CallbackFuncVar *Callback, ObjectVar *Object) *Closure { | 932 | func CclosureNewObject(CallbackFuncVar *Callback, ObjectVar *Object) *Closure { | ||
| 933 | 933 | ||||
| 934 | - | cret := xCclosureNewObject(glib.NewCallback(CallbackFuncVar), ObjectVar.GoPointer()) | 934 | + | CallbackFuncVarPtr := uintptr(unsafe.Pointer(CallbackFuncVar)) |
| 935 | + | var CallbackFuncVarRef uintptr | |||
| 936 | + | if cbRefPtr, ok := glib.GetCallback(CallbackFuncVarPtr); ok { | |||
| 937 | + | CallbackFuncVarRef = cbRefPtr | |||
| 938 | + | } else { | |||
| 939 | + | fcb := func() { | |||
| 940 | + | cbFn := *CallbackFuncVar | |||
| 941 | + | cbFn() | |||
| 942 | + | } | |||
| 943 | + | CallbackFuncVarRef = purego.NewCallback(fcb) | |||
| 944 | + | glib.SaveCallback(CallbackFuncVarPtr, CallbackFuncVarRef) | |||
| 945 | + | } | |||
| 946 | + | ||||
| 947 | + | cret := xCclosureNewObject(CallbackFuncVarRef, ObjectVar.GoPointer()) | |||
| 935 | return cret | 948 | return cret | ||
| 936 | } | 949 | } | ||
| 937 | 950 | ||||
| @@ -944,7 +957,20 @@ var xCclosureNewObjectSwap func(uintptr, uintptr) *Closure | |||||
| 944 | // after the object is is freed. | 957 | // after the object is is freed. | ||
| 945 | func CclosureNewObjectSwap(CallbackFuncVar *Callback, ObjectVar *Object) *Closure { | 958 | func CclosureNewObjectSwap(CallbackFuncVar *Callback, ObjectVar *Object) *Closure { | ||
| 946 | 959 | ||||
| 947 | - | cret := xCclosureNewObjectSwap(glib.NewCallback(CallbackFuncVar), ObjectVar.GoPointer()) | 960 | + | CallbackFuncVarPtr := uintptr(unsafe.Pointer(CallbackFuncVar)) |
| 961 | + | var CallbackFuncVarRef uintptr | |||
| 962 | + | if cbRefPtr, ok := glib.GetCallback(CallbackFuncVarPtr); ok { | |||
| 963 | + | CallbackFuncVarRef = cbRefPtr | |||
| 964 | + | } else { | |||
| 965 | + | fcb := func() { | |||
| 966 | + | cbFn := *CallbackFuncVar | |||
| 967 | + | cbFn() | |||
| 968 | + | } | |||
| 969 | + | CallbackFuncVarRef = purego.NewCallback(fcb) | |||
| 970 | + | glib.SaveCallback(CallbackFuncVarPtr, CallbackFuncVarRef) | |||
| 971 | + | } | |||
| 972 | + | ||||
| 973 | + | cret := xCclosureNewObjectSwap(CallbackFuncVarRef, ObjectVar.GoPointer()) | |||
| 948 | return cret | 974 | return cret | ||
| 949 | } | 975 | } | ||
| 950 | 976 | ||||
| @@ -986,7 +1012,20 @@ var xSignalConnectObject func(*TypeInstance, string, uintptr, uintptr, ConnectFl | |||||
| 986 | // details. | 1012 | // details. | ||
| 987 | func SignalConnectObject(InstanceVar *TypeInstance, DetailedSignalVar string, CHandlerVar *Callback, GobjectVar *Object, ConnectFlagsVar ConnectFlags) uint32 { | 1013 | func SignalConnectObject(InstanceVar *TypeInstance, DetailedSignalVar string, CHandlerVar *Callback, GobjectVar *Object, ConnectFlagsVar ConnectFlags) uint32 { | ||
| 988 | 1014 | ||||
| 989 | - | cret := xSignalConnectObject(InstanceVar, DetailedSignalVar, glib.NewCallback(CHandlerVar), GobjectVar.GoPointer(), ConnectFlagsVar) | 1015 | + | CHandlerVarPtr := uintptr(unsafe.Pointer(CHandlerVar)) |
| 1016 | + | var CHandlerVarRef uintptr | |||
| 1017 | + | if cbRefPtr, ok := glib.GetCallback(CHandlerVarPtr); ok { | |||
| 1018 | + | CHandlerVarRef = cbRefPtr | |||
| 1019 | + | } else { | |||
| 1020 | + | fcb := func() { | |||
| 1021 | + | cbFn := *CHandlerVar | |||
| 1022 | + | cbFn() | |||
| 1023 | + | } | |||
| 1024 | + | CHandlerVarRef = purego.NewCallback(fcb) | |||
| 1025 | + | glib.SaveCallback(CHandlerVarPtr, CHandlerVarRef) | |||
| 1026 | + | } | |||
| 1027 | + | ||||
| 1028 | + | cret := xSignalConnectObject(InstanceVar, DetailedSignalVar, CHandlerVarRef, GobjectVar.GoPointer(), ConnectFlagsVar) | |||
| 990 | return cret | 1029 | return cret | ||
| 991 | } | 1030 | } | ||
| 992 | 1031 | ||||
| @@ -1198,7 +1237,20 @@ var xObjectAddToggleRef func(uintptr, uintptr, uintptr) | |||||
| 1198 | // A g_object_add_toggle_ref() must be released with g_object_remove_toggle_ref(). | 1237 | // A g_object_add_toggle_ref() must be released with g_object_remove_toggle_ref(). | ||
| 1199 | func (x *Object) AddToggleRef(NotifyVar *ToggleNotify, DataVar uintptr) { | 1238 | func (x *Object) AddToggleRef(NotifyVar *ToggleNotify, DataVar uintptr) { | ||
| 1200 | 1239 | ||||
| 1201 | - | xObjectAddToggleRef(x.GoPointer(), glib.NewCallback(NotifyVar), DataVar) | 1240 | + | NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar)) |
| 1241 | + | var NotifyVarRef uintptr | |||
| 1242 | + | if cbRefPtr, ok := glib.GetCallback(NotifyVarPtr); ok { | |||
| 1243 | + | NotifyVarRef = cbRefPtr | |||
| 1244 | + | } else { | |||
| 1245 | + | fcb := func(arg0 uintptr, arg1 uintptr, arg2 bool) { | |||
| 1246 | + | cbFn := *NotifyVar | |||
| 1247 | + | cbFn(arg0, arg1, arg2) | |||
| 1248 | + | } | |||
| 1249 | + | NotifyVarRef = purego.NewCallback(fcb) | |||
| 1250 | + | glib.SaveCallback(NotifyVarPtr, NotifyVarRef) | |||
| 1251 | + | } | |||
| 1252 | + | ||||
| 1253 | + | xObjectAddToggleRef(x.GoPointer(), NotifyVarRef, DataVar) | |||
| 1202 | 1254 | ||||
| 1203 | } | 1255 | } | ||
| 1204 | 1256 | ||||
| @@ -1298,7 +1350,52 @@ var xObjectBindPropertyFull func(uintptr, string, uintptr, string, BindingFlags, | |||||
| 1298 | func (x *Object) BindPropertyFull(SourcePropertyVar string, TargetVar *Object, TargetPropertyVar string, FlagsVar BindingFlags, TransformToVar *BindingTransformFunc, TransformFromVar *BindingTransformFunc, UserDataVar uintptr, NotifyVar *glib.DestroyNotify) *Binding { | 1350 | func (x *Object) BindPropertyFull(SourcePropertyVar string, TargetVar *Object, TargetPropertyVar string, FlagsVar BindingFlags, TransformToVar *BindingTransformFunc, TransformFromVar *BindingTransformFunc, UserDataVar uintptr, NotifyVar *glib.DestroyNotify) *Binding { | ||
| 1299 | var cls *Binding | 1351 | var cls *Binding | ||
| 1300 | 1352 | ||||
| 1301 | - | cret := xObjectBindPropertyFull(x.GoPointer(), SourcePropertyVar, TargetVar.GoPointer(), TargetPropertyVar, FlagsVar, glib.NewCallbackNullable(TransformToVar), glib.NewCallbackNullable(TransformFromVar), UserDataVar, glib.NewCallbackNullable(NotifyVar)) | 1353 | + | var TransformToVarRef uintptr |
| 1354 | + | if TransformToVar != nil { | |||
| 1355 | + | TransformToVarPtr := uintptr(unsafe.Pointer(TransformToVar)) | |||
| 1356 | + | if cbRefPtr, ok := glib.GetCallback(TransformToVarPtr); ok { | |||
| 1357 | + | TransformToVarRef = cbRefPtr | |||
| 1358 | + | } else { | |||
| 1359 | + | fcb := func(arg0 uintptr, arg1 *Value, arg2 *Value, arg3 uintptr) bool { | |||
| 1360 | + | cbFn := *TransformToVar | |||
| 1361 | + | return cbFn(arg0, arg1, arg2, arg3) | |||
| 1362 | + | } | |||
| 1363 | + | TransformToVarRef = purego.NewCallback(fcb) | |||
| 1364 | + | glib.SaveCallback(TransformToVarPtr, TransformToVarRef) | |||
| 1365 | + | } | |||
| 1366 | + | } | |||
| 1367 | + | ||||
| 1368 | + | var TransformFromVarRef uintptr | |||
| 1369 | + | if TransformFromVar != nil { | |||
| 1370 | + | TransformFromVarPtr := uintptr(unsafe.Pointer(TransformFromVar)) | |||
| 1371 | + | if cbRefPtr, ok := glib.GetCallback(TransformFromVarPtr); ok { | |||
| 1372 | + | TransformFromVarRef = cbRefPtr | |||
| 1373 | + | } else { | |||
| 1374 | + | fcb := func(arg0 uintptr, arg1 *Value, arg2 *Value, arg3 uintptr) bool { | |||
| 1375 | + | cbFn := *TransformFromVar | |||
| 1376 | + | return cbFn(arg0, arg1, arg2, arg3) | |||
| 1377 | + | } | |||
| 1378 | + | TransformFromVarRef = purego.NewCallback(fcb) | |||
| 1379 | + | glib.SaveCallback(TransformFromVarPtr, TransformFromVarRef) | |||
| 1380 | + | } | |||
| 1381 | + | } | |||
| 1382 | + | ||||
| 1383 | + | var NotifyVarRef uintptr | |||
| 1384 | + | if NotifyVar != nil { | |||
| 1385 | + | NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar)) | |||
| 1386 | + | if cbRefPtr, ok := glib.GetCallback(NotifyVarPtr); ok { | |||
| 1387 | + | NotifyVarRef = cbRefPtr | |||
| 1388 | + | } else { | |||
| 1389 | + | fcb := func(arg0 uintptr) { | |||
| 1390 | + | cbFn := *NotifyVar | |||
| 1391 | + | cbFn(arg0) | |||
| 1392 | + | } | |||
| 1393 | + | NotifyVarRef = purego.NewCallback(fcb) | |||
| 1394 | + | glib.SaveCallback(NotifyVarPtr, NotifyVarRef) | |||
| 1395 | + | } | |||
| 1396 | + | } | |||
| 1397 | + | ||||
| 1398 | + | cret := xObjectBindPropertyFull(x.GoPointer(), SourcePropertyVar, TargetVar.GoPointer(), TargetPropertyVar, FlagsVar, TransformToVarRef, TransformFromVarRef, UserDataVar, NotifyVarRef) | |||
| 1302 | 1399 | ||||
| 1303 | if cret == 0 { | 1400 | if cret == 0 { | ||
| 1304 | return nil | 1401 | return nil | ||
| @@ -1407,7 +1504,22 @@ var xObjectDupData func(uintptr, string, uintptr, uintptr) uintptr | |||||
| 1407 | // object. | 1504 | // object. | ||
| 1408 | func (x *Object) DupData(KeyVar string, DupFuncVar *glib.DuplicateFunc, UserDataVar uintptr) uintptr { | 1505 | func (x *Object) DupData(KeyVar string, DupFuncVar *glib.DuplicateFunc, UserDataVar uintptr) uintptr { | ||
| 1409 | 1506 | ||||
| 1410 | - | cret := xObjectDupData(x.GoPointer(), KeyVar, glib.NewCallbackNullable(DupFuncVar), UserDataVar) | 1507 | + | var DupFuncVarRef uintptr |
| 1508 | + | if DupFuncVar != nil { | |||
| 1509 | + | DupFuncVarPtr := uintptr(unsafe.Pointer(DupFuncVar)) | |||
| 1510 | + | if cbRefPtr, ok := glib.GetCallback(DupFuncVarPtr); ok { | |||
| 1511 | + | DupFuncVarRef = cbRefPtr | |||
| 1512 | + | } else { | |||
| 1513 | + | fcb := func(arg0 uintptr, arg1 uintptr) uintptr { | |||
| 1514 | + | cbFn := *DupFuncVar | |||
| 1515 | + | return cbFn(arg0, arg1) | |||
| 1516 | + | } | |||
| 1517 | + | DupFuncVarRef = purego.NewCallback(fcb) | |||
| 1518 | + | glib.SaveCallback(DupFuncVarPtr, DupFuncVarRef) | |||
| 1519 | + | } | |||
| 1520 | + | } | |||
| 1521 | + | ||||
| 1522 | + | cret := xObjectDupData(x.GoPointer(), KeyVar, DupFuncVarRef, UserDataVar) | |||
| 1411 | return cret | 1523 | return cret | ||
| 1412 | } | 1524 | } | ||
| 1413 | 1525 | ||||
| @@ -1429,7 +1541,22 @@ var xObjectDupQdata func(uintptr, glib.Quark, uintptr, uintptr) uintptr | |||||
| 1429 | // object. | 1541 | // object. | ||
| 1430 | func (x *Object) DupQdata(QuarkVar glib.Quark, DupFuncVar *glib.DuplicateFunc, UserDataVar uintptr) uintptr { | 1542 | func (x *Object) DupQdata(QuarkVar glib.Quark, DupFuncVar *glib.DuplicateFunc, UserDataVar uintptr) uintptr { | ||
| 1431 | 1543 | ||||
| 1432 | - | cret := xObjectDupQdata(x.GoPointer(), QuarkVar, glib.NewCallbackNullable(DupFuncVar), UserDataVar) | 1544 | + | var DupFuncVarRef uintptr |
| 1545 | + | if DupFuncVar != nil { | |||
| 1546 | + | DupFuncVarPtr := uintptr(unsafe.Pointer(DupFuncVar)) | |||
| 1547 | + | if cbRefPtr, ok := glib.GetCallback(DupFuncVarPtr); ok { | |||
| 1548 | + | DupFuncVarRef = cbRefPtr | |||
| 1549 | + | } else { | |||
| 1550 | + | fcb := func(arg0 uintptr, arg1 uintptr) uintptr { | |||
| 1551 | + | cbFn := *DupFuncVar | |||
| 1552 | + | return cbFn(arg0, arg1) | |||
| 1553 | + | } | |||
| 1554 | + | DupFuncVarRef = purego.NewCallback(fcb) | |||
| 1555 | + | glib.SaveCallback(DupFuncVarPtr, DupFuncVarRef) | |||
| 1556 | + | } | |||
| 1557 | + | } | |||
| 1558 | + | ||||
| 1559 | + | cret := xObjectDupQdata(x.GoPointer(), QuarkVar, DupFuncVarRef, UserDataVar) | |||
| 1433 | return cret | 1560 | return cret | ||
| 1434 | } | 1561 | } | ||
| 1435 | 1562 | ||||
| @@ -1703,7 +1830,20 @@ var xObjectRemoveToggleRef func(uintptr, uintptr, uintptr) | |||||
| 1703 | // you must take care of that yourself. | 1830 | // you must take care of that yourself. | ||
| 1704 | func (x *Object) RemoveToggleRef(NotifyVar *ToggleNotify, DataVar uintptr) { | 1831 | func (x *Object) RemoveToggleRef(NotifyVar *ToggleNotify, DataVar uintptr) { | ||
| 1705 | 1832 | ||||
| 1706 | - | xObjectRemoveToggleRef(x.GoPointer(), glib.NewCallback(NotifyVar), DataVar) | 1833 | + | NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar)) |
| 1834 | + | var NotifyVarRef uintptr | |||
| 1835 | + | if cbRefPtr, ok := glib.GetCallback(NotifyVarPtr); ok { | |||
| 1836 | + | NotifyVarRef = cbRefPtr | |||
| 1837 | + | } else { | |||
| 1838 | + | fcb := func(arg0 uintptr, arg1 uintptr, arg2 bool) { | |||
| 1839 | + | cbFn := *NotifyVar | |||
| 1840 | + | cbFn(arg0, arg1, arg2) | |||
| 1841 | + | } | |||
| 1842 | + | NotifyVarRef = purego.NewCallback(fcb) | |||
| 1843 | + | glib.SaveCallback(NotifyVarPtr, NotifyVarRef) | |||
| 1844 | + | } | |||
| 1845 | + | ||||
| 1846 | + | xObjectRemoveToggleRef(x.GoPointer(), NotifyVarRef, DataVar) | |||
| 1707 | 1847 | ||||
| 1708 | } | 1848 | } | ||
| 1709 | 1849 | ||||
| @@ -1738,7 +1878,22 @@ var xObjectReplaceData func(uintptr, string, uintptr, uintptr, uintptr, *glib.De | |||||
| 1738 | // for @key. | 1878 | // for @key. | ||
| 1739 | func (x *Object) ReplaceData(KeyVar string, OldvalVar uintptr, NewvalVar uintptr, DestroyVar *glib.DestroyNotify, OldDestroyVar *glib.DestroyNotify) bool { | 1879 | func (x *Object) ReplaceData(KeyVar string, OldvalVar uintptr, NewvalVar uintptr, DestroyVar *glib.DestroyNotify, OldDestroyVar *glib.DestroyNotify) bool { | ||
| 1740 | 1880 | ||||
| 1741 | - | cret := xObjectReplaceData(x.GoPointer(), KeyVar, OldvalVar, NewvalVar, glib.NewCallbackNullable(DestroyVar), OldDestroyVar) | 1881 | + | var DestroyVarRef uintptr |
| 1882 | + | if DestroyVar != nil { | |||
| 1883 | + | DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar)) | |||
| 1884 | + | if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok { | |||
| 1885 | + | DestroyVarRef = cbRefPtr | |||
| 1886 | + | } else { | |||
| 1887 | + | fcb := func(arg0 uintptr) { | |||
| 1888 | + | cbFn := *DestroyVar | |||
| 1889 | + | cbFn(arg0) | |||
| 1890 | + | } | |||
| 1891 | + | DestroyVarRef = purego.NewCallback(fcb) | |||
| 1892 | + | glib.SaveCallback(DestroyVarPtr, DestroyVarRef) | |||
| 1893 | + | } | |||
| 1894 | + | } | |||
| 1895 | + | ||||
| 1896 | + | cret := xObjectReplaceData(x.GoPointer(), KeyVar, OldvalVar, NewvalVar, DestroyVarRef, OldDestroyVar) | |||
| 1742 | return cret | 1897 | return cret | ||
| 1743 | } | 1898 | } | ||
| 1744 | 1899 | ||||
| @@ -1759,7 +1914,22 @@ var xObjectReplaceQdata func(uintptr, glib.Quark, uintptr, uintptr, uintptr, *gl | |||||
| 1759 | // should not destroy the object in the normal way. | 1914 | // should not destroy the object in the normal way. | ||
| 1760 | func (x *Object) ReplaceQdata(QuarkVar glib.Quark, OldvalVar uintptr, NewvalVar uintptr, DestroyVar *glib.DestroyNotify, OldDestroyVar *glib.DestroyNotify) bool { | 1915 | func (x *Object) ReplaceQdata(QuarkVar glib.Quark, OldvalVar uintptr, NewvalVar uintptr, DestroyVar *glib.DestroyNotify, OldDestroyVar *glib.DestroyNotify) bool { | ||
| 1761 | 1916 | ||||
| 1762 | - | cret := xObjectReplaceQdata(x.GoPointer(), QuarkVar, OldvalVar, NewvalVar, glib.NewCallbackNullable(DestroyVar), OldDestroyVar) | 1917 | + | var DestroyVarRef uintptr |
| 1918 | + | if DestroyVar != nil { | |||
| 1919 | + | DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar)) | |||
| 1920 | + | if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok { | |||
| 1921 | + | DestroyVarRef = cbRefPtr | |||
| 1922 | + | } else { | |||
| 1923 | + | fcb := func(arg0 uintptr) { | |||
| 1924 | + | cbFn := *DestroyVar | |||
| 1925 | + | cbFn(arg0) | |||
| 1926 | + | } | |||
| 1927 | + | DestroyVarRef = purego.NewCallback(fcb) | |||
| 1928 | + | glib.SaveCallback(DestroyVarPtr, DestroyVarRef) | |||
| 1929 | + | } | |||
| 1930 | + | } | |||
| 1931 | + | ||||
| 1932 | + | cret := xObjectReplaceQdata(x.GoPointer(), QuarkVar, OldvalVar, NewvalVar, DestroyVarRef, OldDestroyVar) | |||
| 1763 | return cret | 1933 | return cret | ||
| 1764 | } | 1934 | } | ||
| 1765 | 1935 | ||||
| @@ -1820,7 +1990,22 @@ var xObjectSetDataFull func(uintptr, string, uintptr, uintptr) | |||||
| 1820 | // Note that the @destroy callback is not called if @data is %NULL. | 1990 | // Note that the @destroy callback is not called if @data is %NULL. | ||
| 1821 | func (x *Object) SetDataFull(KeyVar string, DataVar uintptr, DestroyVar *glib.DestroyNotify) { | 1991 | func (x *Object) SetDataFull(KeyVar string, DataVar uintptr, DestroyVar *glib.DestroyNotify) { | ||
| 1822 | 1992 | ||||
| 1823 | - | xObjectSetDataFull(x.GoPointer(), KeyVar, DataVar, glib.NewCallbackNullable(DestroyVar)) | 1993 | + | var DestroyVarRef uintptr |
| 1994 | + | if DestroyVar != nil { | |||
| 1995 | + | DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar)) | |||
| 1996 | + | if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok { | |||
| 1997 | + | DestroyVarRef = cbRefPtr | |||
| 1998 | + | } else { | |||
| 1999 | + | fcb := func(arg0 uintptr) { | |||
| 2000 | + | cbFn := *DestroyVar | |||
| 2001 | + | cbFn(arg0) | |||
| 2002 | + | } | |||
| 2003 | + | DestroyVarRef = purego.NewCallback(fcb) | |||
| 2004 | + | glib.SaveCallback(DestroyVarPtr, DestroyVarRef) | |||
| 2005 | + | } | |||
| 2006 | + | } | |||
| 2007 | + | ||||
| 2008 | + | xObjectSetDataFull(x.GoPointer(), KeyVar, DataVar, DestroyVarRef) | |||
| 1824 | 2009 | ||||
| 1825 | } | 2010 | } | ||
| 1826 | 2011 | ||||
| @@ -1858,7 +2043,22 @@ var xObjectSetQdataFull func(uintptr, glib.Quark, uintptr, uintptr) | |||||
| 1858 | // with the same @quark. | 2043 | // with the same @quark. | ||
| 1859 | func (x *Object) SetQdataFull(QuarkVar glib.Quark, DataVar uintptr, DestroyVar *glib.DestroyNotify) { | 2044 | func (x *Object) SetQdataFull(QuarkVar glib.Quark, DataVar uintptr, DestroyVar *glib.DestroyNotify) { | ||
| 1860 | 2045 | ||||
| 1861 | - | xObjectSetQdataFull(x.GoPointer(), QuarkVar, DataVar, glib.NewCallbackNullable(DestroyVar)) | 2046 | + | var DestroyVarRef uintptr |
| 2047 | + | if DestroyVar != nil { | |||
| 2048 | + | DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar)) | |||
| 2049 | + | if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok { | |||
| 2050 | + | DestroyVarRef = cbRefPtr | |||
| 2051 | + | } else { | |||
| 2052 | + | fcb := func(arg0 uintptr) { | |||
| 2053 | + | cbFn := *DestroyVar | |||
| 2054 | + | cbFn(arg0) | |||
| 2055 | + | } | |||
| 2056 | + | DestroyVarRef = purego.NewCallback(fcb) | |||
| 2057 | + | glib.SaveCallback(DestroyVarPtr, DestroyVarRef) | |||
| 2058 | + | } | |||
| 2059 | + | } | |||
| 2060 | + | ||||
| 2061 | + | xObjectSetQdataFull(x.GoPointer(), QuarkVar, DataVar, DestroyVarRef) | |||
| 1862 | 2062 | ||||
| 1863 | } | 2063 | } | ||
| 1864 | 2064 | ||||
| @@ -2054,7 +2254,20 @@ var xObjectWeakRef func(uintptr, uintptr, uintptr) | |||||
| 2054 | // Use #GWeakRef if thread-safety is required. | 2254 | // Use #GWeakRef if thread-safety is required. | ||
| 2055 | func (x *Object) WeakRef(NotifyVar *WeakNotify, DataVar uintptr) { | 2255 | func (x *Object) WeakRef(NotifyVar *WeakNotify, DataVar uintptr) { | ||
| 2056 | 2256 | ||||
| 2057 | - | xObjectWeakRef(x.GoPointer(), glib.NewCallback(NotifyVar), DataVar) | 2257 | + | NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar)) |
| 2258 | + | var NotifyVarRef uintptr | |||
| 2259 | + | if cbRefPtr, ok := glib.GetCallback(NotifyVarPtr); ok { | |||
| 2260 | + | NotifyVarRef = cbRefPtr | |||
| 2261 | + | } else { | |||
| 2262 | + | fcb := func(arg0 uintptr, arg1 uintptr) { | |||
| 2263 | + | cbFn := *NotifyVar | |||
| 2264 | + | cbFn(arg0, arg1) | |||
| 2265 | + | } | |||
| 2266 | + | NotifyVarRef = purego.NewCallback(fcb) | |||
| 2267 | + | glib.SaveCallback(NotifyVarPtr, NotifyVarRef) | |||
| 2268 | + | } | |||
| 2269 | + | ||||
| 2270 | + | xObjectWeakRef(x.GoPointer(), NotifyVarRef, DataVar) | |||
| 2058 | 2271 | ||||
| 2059 | } | 2272 | } | ||
| 2060 | 2273 | ||||
| @@ -2063,7 +2276,20 @@ var xObjectWeakUnref func(uintptr, uintptr, uintptr) | |||||
| 2063 | // Removes a weak reference callback to an object. | 2276 | // Removes a weak reference callback to an object. | ||
| 2064 | func (x *Object) WeakUnref(NotifyVar *WeakNotify, DataVar uintptr) { | 2277 | func (x *Object) WeakUnref(NotifyVar *WeakNotify, DataVar uintptr) { | ||
| 2065 | 2278 | ||||
| 2066 | - | xObjectWeakUnref(x.GoPointer(), glib.NewCallback(NotifyVar), DataVar) | 2279 | + | NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar)) |
| 2280 | + | var NotifyVarRef uintptr | |||
| 2281 | + | if cbRefPtr, ok := glib.GetCallback(NotifyVarPtr); ok { | |||
| 2282 | + | NotifyVarRef = cbRefPtr | |||
| 2283 | + | } else { | |||
| 2284 | + | fcb := func(arg0 uintptr, arg1 uintptr) { | |||
| 2285 | + | cbFn := *NotifyVar | |||
| 2286 | + | cbFn(arg0, arg1) | |||
| 2287 | + | } | |||
| 2288 | + | NotifyVarRef = purego.NewCallback(fcb) | |||
| 2289 | + | glib.SaveCallback(NotifyVarPtr, NotifyVarRef) | |||
| 2290 | + | } | |||
| 2291 | + | ||||
| 2292 | + | xObjectWeakUnref(x.GoPointer(), NotifyVarRef, DataVar) | |||
| 2067 | 2293 | ||||
| 2068 | } | 2294 | } | ||
| 2069 | 2295 | ||||
M v4/gobject/gparam.go +16 -1
| @@ -770,7 +770,22 @@ var xParamSpecSetQdataFull func(uintptr, glib.Quark, uintptr, uintptr) | |||||
| 770 | // g_param_spec_set_qdata() with the same @quark. | 770 | // g_param_spec_set_qdata() with the same @quark. | ||
| 771 | func (x *ParamSpec) SetQdataFull(QuarkVar glib.Quark, DataVar uintptr, DestroyVar *glib.DestroyNotify) { | 771 | func (x *ParamSpec) SetQdataFull(QuarkVar glib.Quark, DataVar uintptr, DestroyVar *glib.DestroyNotify) { | ||
| 772 | 772 | ||||
| 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) | |||
| 774 | 789 | ||||
| 775 | } | 790 | } | ||
| 776 | 791 | ||||
M v4/gobject/gsignal.go +151 -7
| @@ -228,7 +228,35 @@ var xSignalAddEmissionHook func(uint, glib.Quark, uintptr, uintptr, uintptr) uin | |||||
| 228 | // for signals which don't have %G_SIGNAL_NO_HOOKS flag set. | 228 | // for signals which don't have %G_SIGNAL_NO_HOOKS flag set. | ||
| 229 | func SignalAddEmissionHook(SignalIdVar uint, DetailVar glib.Quark, HookFuncVar *SignalEmissionHook, HookDataVar uintptr, DataDestroyVar *glib.DestroyNotify) uint32 { | 229 | func SignalAddEmissionHook(SignalIdVar uint, DetailVar glib.Quark, HookFuncVar *SignalEmissionHook, HookDataVar uintptr, DataDestroyVar *glib.DestroyNotify) uint32 { | ||
| 230 | 230 | ||||
| 231 | - | cret := xSignalAddEmissionHook(SignalIdVar, DetailVar, glib.NewCallback(HookFuncVar), HookDataVar, glib.NewCallbackNullable(DataDestroyVar)) | 231 | + | HookFuncVarPtr := uintptr(unsafe.Pointer(HookFuncVar)) |
| 232 | + | var HookFuncVarRef uintptr | |||
| 233 | + | if cbRefPtr, ok := glib.GetCallback(HookFuncVarPtr); ok { | |||
| 234 | + | HookFuncVarRef = cbRefPtr | |||
| 235 | + | } else { | |||
| 236 | + | fcb := func(arg0 *SignalInvocationHint, arg1 uint, arg2 []Value, arg3 uintptr) bool { | |||
| 237 | + | cbFn := *HookFuncVar | |||
| 238 | + | return cbFn(arg0, arg1, arg2, arg3) | |||
| 239 | + | } | |||
| 240 | + | HookFuncVarRef = purego.NewCallback(fcb) | |||
| 241 | + | glib.SaveCallback(HookFuncVarPtr, HookFuncVarRef) | |||
| 242 | + | } | |||
| 243 | + | ||||
| 244 | + | var DataDestroyVarRef uintptr | |||
| 245 | + | if DataDestroyVar != nil { | |||
| 246 | + | DataDestroyVarPtr := uintptr(unsafe.Pointer(DataDestroyVar)) | |||
| 247 | + | if cbRefPtr, ok := glib.GetCallback(DataDestroyVarPtr); ok { | |||
| 248 | + | DataDestroyVarRef = cbRefPtr | |||
| 249 | + | } else { | |||
| 250 | + | fcb := func(arg0 uintptr) { | |||
| 251 | + | cbFn := *DataDestroyVar | |||
| 252 | + | cbFn(arg0) | |||
| 253 | + | } | |||
| 254 | + | DataDestroyVarRef = purego.NewCallback(fcb) | |||
| 255 | + | glib.SaveCallback(DataDestroyVarPtr, DataDestroyVarRef) | |||
| 256 | + | } | |||
| 257 | + | } | |||
| 258 | + | ||||
| 259 | + | cret := xSignalAddEmissionHook(SignalIdVar, DetailVar, HookFuncVarRef, HookDataVar, DataDestroyVarRef) | |||
| 232 | return cret | 260 | return cret | ||
| 233 | } | 261 | } | ||
| 234 | 262 | ||||
| @@ -313,7 +341,35 @@ var xSignalConnectData func(uintptr, string, uintptr, uintptr, uintptr, ConnectF | |||||
| 313 | // details. | 341 | // details. | ||
| 314 | func SignalConnectData(InstanceVar *Object, DetailedSignalVar string, CHandlerVar *Callback, DataVar uintptr, DestroyDataVar *ClosureNotify, ConnectFlagsVar ConnectFlags) uint32 { | 342 | func SignalConnectData(InstanceVar *Object, DetailedSignalVar string, CHandlerVar *Callback, DataVar uintptr, DestroyDataVar *ClosureNotify, ConnectFlagsVar ConnectFlags) uint32 { | ||
| 315 | 343 | ||||
| 316 | - | cret := xSignalConnectData(InstanceVar.GoPointer(), DetailedSignalVar, glib.NewCallback(CHandlerVar), DataVar, glib.NewCallbackNullable(DestroyDataVar), ConnectFlagsVar) | 344 | + | CHandlerVarPtr := uintptr(unsafe.Pointer(CHandlerVar)) |
| 345 | + | var CHandlerVarRef uintptr | |||
| 346 | + | if cbRefPtr, ok := glib.GetCallback(CHandlerVarPtr); ok { | |||
| 347 | + | CHandlerVarRef = cbRefPtr | |||
| 348 | + | } else { | |||
| 349 | + | fcb := func() { | |||
| 350 | + | cbFn := *CHandlerVar | |||
| 351 | + | cbFn() | |||
| 352 | + | } | |||
| 353 | + | CHandlerVarRef = purego.NewCallback(fcb) | |||
| 354 | + | glib.SaveCallback(CHandlerVarPtr, CHandlerVarRef) | |||
| 355 | + | } | |||
| 356 | + | ||||
| 357 | + | var DestroyDataVarRef uintptr | |||
| 358 | + | if DestroyDataVar != nil { | |||
| 359 | + | DestroyDataVarPtr := uintptr(unsafe.Pointer(DestroyDataVar)) | |||
| 360 | + | if cbRefPtr, ok := glib.GetCallback(DestroyDataVarPtr); ok { | |||
| 361 | + | DestroyDataVarRef = cbRefPtr | |||
| 362 | + | } else { | |||
| 363 | + | fcb := func(arg0 uintptr, arg1 *Closure) { | |||
| 364 | + | cbFn := *DestroyDataVar | |||
| 365 | + | cbFn(arg0, arg1) | |||
| 366 | + | } | |||
| 367 | + | DestroyDataVarRef = purego.NewCallback(fcb) | |||
| 368 | + | glib.SaveCallback(DestroyDataVarPtr, DestroyDataVarRef) | |||
| 369 | + | } | |||
| 370 | + | } | |||
| 371 | + | ||||
| 372 | + | cret := xSignalConnectData(InstanceVar.GoPointer(), DetailedSignalVar, CHandlerVarRef, DataVar, DestroyDataVarRef, ConnectFlagsVar) | |||
| 317 | return cret | 373 | return cret | ||
| 318 | } | 374 | } | ||
| 319 | 375 | ||||
| @@ -634,7 +690,22 @@ var xSignalNew func(string, types.GType, SignalFlags, uint, uintptr, uintptr, ui | |||||
| 634 | // be used. | 690 | // be used. | ||
| 635 | 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 { | 691 | 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 { | ||
| 636 | 692 | ||||
| 637 | - | cret := xSignalNew(SignalNameVar, ItypeVar, SignalFlagsVar, ClassOffsetVar, glib.NewCallbackNullable(AccumulatorVar), AccuDataVar, glib.NewCallbackNullable(CMarshallerVar), ReturnTypeVar, NParamsVar, varArgs...) | 693 | + | var AccumulatorVarRef uintptr |
| 694 | + | if AccumulatorVar != nil { | |||
| 695 | + | AccumulatorVarPtr := uintptr(unsafe.Pointer(AccumulatorVar)) | |||
| 696 | + | if cbRefPtr, ok := glib.GetCallback(AccumulatorVarPtr); ok { | |||
| 697 | + | AccumulatorVarRef = cbRefPtr | |||
| 698 | + | } else { | |||
| 699 | + | fcb := func(arg0 *SignalInvocationHint, arg1 *Value, arg2 *Value, arg3 uintptr) bool { | |||
| 700 | + | cbFn := *AccumulatorVar | |||
| 701 | + | return cbFn(arg0, arg1, arg2, arg3) | |||
| 702 | + | } | |||
| 703 | + | AccumulatorVarRef = purego.NewCallback(fcb) | |||
| 704 | + | glib.SaveCallback(AccumulatorVarPtr, AccumulatorVarRef) | |||
| 705 | + | } | |||
| 706 | + | } | |||
| 707 | + | ||||
| 708 | + | cret := xSignalNew(SignalNameVar, ItypeVar, SignalFlagsVar, ClassOffsetVar, AccumulatorVarRef, AccuDataVar, glib.NewCallbackNullable(CMarshallerVar), ReturnTypeVar, NParamsVar, varArgs...) | |||
| 638 | return cret | 709 | return cret | ||
| 639 | } | 710 | } | ||
| 640 | 711 | ||||
| @@ -658,7 +729,37 @@ var xSignalNewClassHandler func(string, types.GType, SignalFlags, uintptr, uintp | |||||
| 658 | // the marshaller for this signal. | 729 | // the marshaller for this signal. | ||
| 659 | 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 { | 730 | 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 { | ||
| 660 | 731 | ||||
| 661 | - | cret := xSignalNewClassHandler(SignalNameVar, ItypeVar, SignalFlagsVar, glib.NewCallbackNullable(ClassHandlerVar), glib.NewCallbackNullable(AccumulatorVar), AccuDataVar, glib.NewCallbackNullable(CMarshallerVar), ReturnTypeVar, NParamsVar, varArgs...) | 732 | + | var ClassHandlerVarRef uintptr |
| 733 | + | if ClassHandlerVar != nil { | |||
| 734 | + | ClassHandlerVarPtr := uintptr(unsafe.Pointer(ClassHandlerVar)) | |||
| 735 | + | if cbRefPtr, ok := glib.GetCallback(ClassHandlerVarPtr); ok { | |||
| 736 | + | ClassHandlerVarRef = cbRefPtr | |||
| 737 | + | } else { | |||
| 738 | + | fcb := func() { | |||
| 739 | + | cbFn := *ClassHandlerVar | |||
| 740 | + | cbFn() | |||
| 741 | + | } | |||
| 742 | + | ClassHandlerVarRef = purego.NewCallback(fcb) | |||
| 743 | + | glib.SaveCallback(ClassHandlerVarPtr, ClassHandlerVarRef) | |||
| 744 | + | } | |||
| 745 | + | } | |||
| 746 | + | ||||
| 747 | + | var AccumulatorVarRef uintptr | |||
| 748 | + | if AccumulatorVar != nil { | |||
| 749 | + | AccumulatorVarPtr := uintptr(unsafe.Pointer(AccumulatorVar)) | |||
| 750 | + | if cbRefPtr, ok := glib.GetCallback(AccumulatorVarPtr); ok { | |||
| 751 | + | AccumulatorVarRef = cbRefPtr | |||
| 752 | + | } else { | |||
| 753 | + | fcb := func(arg0 *SignalInvocationHint, arg1 *Value, arg2 *Value, arg3 uintptr) bool { | |||
| 754 | + | cbFn := *AccumulatorVar | |||
| 755 | + | return cbFn(arg0, arg1, arg2, arg3) | |||
| 756 | + | } | |||
| 757 | + | AccumulatorVarRef = purego.NewCallback(fcb) | |||
| 758 | + | glib.SaveCallback(AccumulatorVarPtr, AccumulatorVarRef) | |||
| 759 | + | } | |||
| 760 | + | } | |||
| 761 | + | ||||
| 762 | + | cret := xSignalNewClassHandler(SignalNameVar, ItypeVar, SignalFlagsVar, ClassHandlerVarRef, AccumulatorVarRef, AccuDataVar, glib.NewCallbackNullable(CMarshallerVar), ReturnTypeVar, NParamsVar, varArgs...) | |||
| 662 | return cret | 763 | return cret | ||
| 663 | } | 764 | } | ||
| 664 | 765 | ||||
| @@ -672,7 +773,22 @@ var xSignalNewValist func(string, types.GType, SignalFlags, *Closure, uintptr, u | |||||
| 672 | // the marshaller for this signal. | 773 | // the marshaller for this signal. | ||
| 673 | 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 { | 774 | 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 { | ||
| 674 | 775 | ||||
| 675 | - | cret := xSignalNewValist(SignalNameVar, ItypeVar, SignalFlagsVar, ClassClosureVar, glib.NewCallbackNullable(AccumulatorVar), AccuDataVar, glib.NewCallbackNullable(CMarshallerVar), ReturnTypeVar, NParamsVar, ArgsVar) | 776 | + | var AccumulatorVarRef uintptr |
| 777 | + | if AccumulatorVar != nil { | |||
| 778 | + | AccumulatorVarPtr := uintptr(unsafe.Pointer(AccumulatorVar)) | |||
| 779 | + | if cbRefPtr, ok := glib.GetCallback(AccumulatorVarPtr); ok { | |||
| 780 | + | AccumulatorVarRef = cbRefPtr | |||
| 781 | + | } else { | |||
| 782 | + | fcb := func(arg0 *SignalInvocationHint, arg1 *Value, arg2 *Value, arg3 uintptr) bool { | |||
| 783 | + | cbFn := *AccumulatorVar | |||
| 784 | + | return cbFn(arg0, arg1, arg2, arg3) | |||
| 785 | + | } | |||
| 786 | + | AccumulatorVarRef = purego.NewCallback(fcb) | |||
| 787 | + | glib.SaveCallback(AccumulatorVarPtr, AccumulatorVarRef) | |||
| 788 | + | } | |||
| 789 | + | } | |||
| 790 | + | ||||
| 791 | + | cret := xSignalNewValist(SignalNameVar, ItypeVar, SignalFlagsVar, ClassClosureVar, AccumulatorVarRef, AccuDataVar, glib.NewCallbackNullable(CMarshallerVar), ReturnTypeVar, NParamsVar, ArgsVar) | |||
| 676 | return cret | 792 | return cret | ||
| 677 | } | 793 | } | ||
| 678 | 794 | ||||
| @@ -686,7 +802,22 @@ var xSignalNewv func(string, types.GType, SignalFlags, *Closure, uintptr, uintpt | |||||
| 686 | // the marshaller for this signal. | 802 | // the marshaller for this signal. | ||
| 687 | 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 { | 803 | 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 { | ||
| 688 | 804 | ||||
| 689 | - | cret := xSignalNewv(SignalNameVar, ItypeVar, SignalFlagsVar, ClassClosureVar, glib.NewCallbackNullable(AccumulatorVar), AccuDataVar, glib.NewCallbackNullable(CMarshallerVar), ReturnTypeVar, NParamsVar, ParamTypesVar) | 805 | + | var AccumulatorVarRef uintptr |
| 806 | + | if AccumulatorVar != nil { | |||
| 807 | + | AccumulatorVarPtr := uintptr(unsafe.Pointer(AccumulatorVar)) | |||
| 808 | + | if cbRefPtr, ok := glib.GetCallback(AccumulatorVarPtr); ok { | |||
| 809 | + | AccumulatorVarRef = cbRefPtr | |||
| 810 | + | } else { | |||
| 811 | + | fcb := func(arg0 *SignalInvocationHint, arg1 *Value, arg2 *Value, arg3 uintptr) bool { | |||
| 812 | + | cbFn := *AccumulatorVar | |||
| 813 | + | return cbFn(arg0, arg1, arg2, arg3) | |||
| 814 | + | } | |||
| 815 | + | AccumulatorVarRef = purego.NewCallback(fcb) | |||
| 816 | + | glib.SaveCallback(AccumulatorVarPtr, AccumulatorVarRef) | |||
| 817 | + | } | |||
| 818 | + | } | |||
| 819 | + | ||||
| 820 | + | cret := xSignalNewv(SignalNameVar, ItypeVar, SignalFlagsVar, ClassClosureVar, AccumulatorVarRef, AccuDataVar, glib.NewCallbackNullable(CMarshallerVar), ReturnTypeVar, NParamsVar, ParamTypesVar) | |||
| 690 | return cret | 821 | return cret | ||
| 691 | } | 822 | } | ||
| 692 | 823 | ||||
| @@ -717,7 +848,20 @@ var xSignalOverrideClassHandler func(string, types.GType, uintptr) | |||||
| 717 | // parent class closure from inside the overridden one. | 848 | // parent class closure from inside the overridden one. | ||
| 718 | func SignalOverrideClassHandler(SignalNameVar string, InstanceTypeVar types.GType, ClassHandlerVar *Callback) { | 849 | func SignalOverrideClassHandler(SignalNameVar string, InstanceTypeVar types.GType, ClassHandlerVar *Callback) { | ||
| 719 | 850 | ||||
| 720 | - | xSignalOverrideClassHandler(SignalNameVar, InstanceTypeVar, glib.NewCallback(ClassHandlerVar)) | 851 | + | ClassHandlerVarPtr := uintptr(unsafe.Pointer(ClassHandlerVar)) |
| 852 | + | var ClassHandlerVarRef uintptr | |||
| 853 | + | if cbRefPtr, ok := glib.GetCallback(ClassHandlerVarPtr); ok { | |||
| 854 | + | ClassHandlerVarRef = cbRefPtr | |||
| 855 | + | } else { | |||
| 856 | + | fcb := func() { | |||
| 857 | + | cbFn := *ClassHandlerVar | |||
| 858 | + | cbFn() | |||
| 859 | + | } | |||
| 860 | + | ClassHandlerVarRef = purego.NewCallback(fcb) | |||
| 861 | + | glib.SaveCallback(ClassHandlerVarPtr, ClassHandlerVarRef) | |||
| 862 | + | } | |||
| 863 | + | ||||
| 864 | + | xSignalOverrideClassHandler(SignalNameVar, InstanceTypeVar, ClassHandlerVarRef) | |||
| 721 | 865 | ||||
| 722 | } | 866 | } | ||
| 723 | 867 | ||||
M v4/gobject/gsignalgroup.go +83 -5
| @@ -82,7 +82,20 @@ var xSignalGroupConnect func(uintptr, string, uintptr, uintptr) | |||||
| 82 | // You cannot connect a signal handler after #GSignalGroup:target has been set. | 82 | // You cannot connect a signal handler after #GSignalGroup:target has been set. | ||
| 83 | func (x *SignalGroup) Connect(DetailedSignalVar string, CHandlerVar *Callback, DataVar uintptr) { | 83 | func (x *SignalGroup) Connect(DetailedSignalVar string, CHandlerVar *Callback, DataVar uintptr) { | ||
| 84 | 84 | ||||
| 85 | - | xSignalGroupConnect(x.GoPointer(), DetailedSignalVar, glib.NewCallback(CHandlerVar), DataVar) | 85 | + | CHandlerVarPtr := uintptr(unsafe.Pointer(CHandlerVar)) |
| 86 | + | var CHandlerVarRef uintptr | |||
| 87 | + | if cbRefPtr, ok := glib.GetCallback(CHandlerVarPtr); ok { | |||
| 88 | + | CHandlerVarRef = cbRefPtr | |||
| 89 | + | } else { | |||
| 90 | + | fcb := func() { | |||
| 91 | + | cbFn := *CHandlerVar | |||
| 92 | + | cbFn() | |||
| 93 | + | } | |||
| 94 | + | CHandlerVarRef = purego.NewCallback(fcb) | |||
| 95 | + | glib.SaveCallback(CHandlerVarPtr, CHandlerVarRef) | |||
| 96 | + | } | |||
| 97 | + | ||||
| 98 | + | xSignalGroupConnect(x.GoPointer(), DetailedSignalVar, CHandlerVarRef, DataVar) | |||
| 86 | 99 | ||||
| 87 | } | 100 | } | ||
| 88 | 101 | ||||
| @@ -96,7 +109,20 @@ var xSignalGroupConnectAfter func(uintptr, string, uintptr, uintptr) | |||||
| 96 | // You cannot connect a signal handler after #GSignalGroup:target has been set. | 109 | // You cannot connect a signal handler after #GSignalGroup:target has been set. | ||
| 97 | func (x *SignalGroup) ConnectAfter(DetailedSignalVar string, CHandlerVar *Callback, DataVar uintptr) { | 110 | func (x *SignalGroup) ConnectAfter(DetailedSignalVar string, CHandlerVar *Callback, DataVar uintptr) { | ||
| 98 | 111 | ||||
| 99 | - | xSignalGroupConnectAfter(x.GoPointer(), DetailedSignalVar, glib.NewCallback(CHandlerVar), DataVar) | 112 | + | CHandlerVarPtr := uintptr(unsafe.Pointer(CHandlerVar)) |
| 113 | + | var CHandlerVarRef uintptr | |||
| 114 | + | if cbRefPtr, ok := glib.GetCallback(CHandlerVarPtr); ok { | |||
| 115 | + | CHandlerVarRef = cbRefPtr | |||
| 116 | + | } else { | |||
| 117 | + | fcb := func() { | |||
| 118 | + | cbFn := *CHandlerVar | |||
| 119 | + | cbFn() | |||
| 120 | + | } | |||
| 121 | + | CHandlerVarRef = purego.NewCallback(fcb) | |||
| 122 | + | glib.SaveCallback(CHandlerVarPtr, CHandlerVarRef) | |||
| 123 | + | } | |||
| 124 | + | ||||
| 125 | + | xSignalGroupConnectAfter(x.GoPointer(), DetailedSignalVar, CHandlerVarRef, DataVar) | |||
| 100 | 126 | ||||
| 101 | } | 127 | } | ||
| 102 | 128 | ||||
| @@ -119,7 +145,33 @@ var xSignalGroupConnectData func(uintptr, string, uintptr, uintptr, uintptr, Con | |||||
| 119 | // You cannot connect a signal handler after #GSignalGroup:target has been set. | 145 | // You cannot connect a signal handler after #GSignalGroup:target has been set. | ||
| 120 | func (x *SignalGroup) ConnectData(DetailedSignalVar string, CHandlerVar *Callback, DataVar uintptr, NotifyVar *ClosureNotify, FlagsVar ConnectFlags) { | 146 | func (x *SignalGroup) ConnectData(DetailedSignalVar string, CHandlerVar *Callback, DataVar uintptr, NotifyVar *ClosureNotify, FlagsVar ConnectFlags) { | ||
| 121 | 147 | ||||
| 122 | - | xSignalGroupConnectData(x.GoPointer(), DetailedSignalVar, glib.NewCallback(CHandlerVar), DataVar, glib.NewCallback(NotifyVar), FlagsVar) | 148 | + | CHandlerVarPtr := uintptr(unsafe.Pointer(CHandlerVar)) |
| 149 | + | var CHandlerVarRef uintptr | |||
| 150 | + | if cbRefPtr, ok := glib.GetCallback(CHandlerVarPtr); ok { | |||
| 151 | + | CHandlerVarRef = cbRefPtr | |||
| 152 | + | } else { | |||
| 153 | + | fcb := func() { | |||
| 154 | + | cbFn := *CHandlerVar | |||
| 155 | + | cbFn() | |||
| 156 | + | } | |||
| 157 | + | CHandlerVarRef = purego.NewCallback(fcb) | |||
| 158 | + | glib.SaveCallback(CHandlerVarPtr, CHandlerVarRef) | |||
| 159 | + | } | |||
| 160 | + | ||||
| 161 | + | NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar)) | |||
| 162 | + | var NotifyVarRef uintptr | |||
| 163 | + | if cbRefPtr, ok := glib.GetCallback(NotifyVarPtr); ok { | |||
| 164 | + | NotifyVarRef = cbRefPtr | |||
| 165 | + | } else { | |||
| 166 | + | fcb := func(arg0 uintptr, arg1 *Closure) { | |||
| 167 | + | cbFn := *NotifyVar | |||
| 168 | + | cbFn(arg0, arg1) | |||
| 169 | + | } | |||
| 170 | + | NotifyVarRef = purego.NewCallback(fcb) | |||
| 171 | + | glib.SaveCallback(NotifyVarPtr, NotifyVarRef) | |||
| 172 | + | } | |||
| 173 | + | ||||
| 174 | + | xSignalGroupConnectData(x.GoPointer(), DetailedSignalVar, CHandlerVarRef, DataVar, NotifyVarRef, FlagsVar) | |||
| 123 | 175 | ||||
| 124 | } | 176 | } | ||
| 125 | 177 | ||||
| @@ -134,7 +186,20 @@ var xSignalGroupConnectObject func(uintptr, string, uintptr, uintptr, ConnectFla | |||||
| 134 | // You cannot connect a signal handler after #GSignalGroup:target has been set. | 186 | // You cannot connect a signal handler after #GSignalGroup:target has been set. | ||
| 135 | func (x *SignalGroup) ConnectObject(DetailedSignalVar string, CHandlerVar *Callback, ObjectVar uintptr, FlagsVar ConnectFlags) { | 187 | func (x *SignalGroup) ConnectObject(DetailedSignalVar string, CHandlerVar *Callback, ObjectVar uintptr, FlagsVar ConnectFlags) { | ||
| 136 | 188 | ||||
| 137 | - | xSignalGroupConnectObject(x.GoPointer(), DetailedSignalVar, glib.NewCallback(CHandlerVar), ObjectVar, FlagsVar) | 189 | + | CHandlerVarPtr := uintptr(unsafe.Pointer(CHandlerVar)) |
| 190 | + | var CHandlerVarRef uintptr | |||
| 191 | + | if cbRefPtr, ok := glib.GetCallback(CHandlerVarPtr); ok { | |||
| 192 | + | CHandlerVarRef = cbRefPtr | |||
| 193 | + | } else { | |||
| 194 | + | fcb := func() { | |||
| 195 | + | cbFn := *CHandlerVar | |||
| 196 | + | cbFn() | |||
| 197 | + | } | |||
| 198 | + | CHandlerVarRef = purego.NewCallback(fcb) | |||
| 199 | + | glib.SaveCallback(CHandlerVarPtr, CHandlerVarRef) | |||
| 200 | + | } | |||
| 201 | + | ||||
| 202 | + | xSignalGroupConnectObject(x.GoPointer(), DetailedSignalVar, CHandlerVarRef, ObjectVar, FlagsVar) | |||
| 138 | 203 | ||||
| 139 | } | 204 | } | ||
| 140 | 205 | ||||
| @@ -149,7 +214,20 @@ var xSignalGroupConnectSwapped func(uintptr, string, uintptr, uintptr) | |||||
| 149 | // You cannot connect a signal handler after #GSignalGroup:target has been set. | 214 | // You cannot connect a signal handler after #GSignalGroup:target has been set. | ||
| 150 | func (x *SignalGroup) ConnectSwapped(DetailedSignalVar string, CHandlerVar *Callback, DataVar uintptr) { | 215 | func (x *SignalGroup) ConnectSwapped(DetailedSignalVar string, CHandlerVar *Callback, DataVar uintptr) { | ||
| 151 | 216 | ||||
| 152 | - | xSignalGroupConnectSwapped(x.GoPointer(), DetailedSignalVar, glib.NewCallback(CHandlerVar), DataVar) | 217 | + | CHandlerVarPtr := uintptr(unsafe.Pointer(CHandlerVar)) |
| 218 | + | var CHandlerVarRef uintptr | |||
| 219 | + | if cbRefPtr, ok := glib.GetCallback(CHandlerVarPtr); ok { | |||
| 220 | + | CHandlerVarRef = cbRefPtr | |||
| 221 | + | } else { | |||
| 222 | + | fcb := func() { | |||
| 223 | + | cbFn := *CHandlerVar | |||
| 224 | + | cbFn() | |||
| 225 | + | } | |||
| 226 | + | CHandlerVarRef = purego.NewCallback(fcb) | |||
| 227 | + | glib.SaveCallback(CHandlerVarPtr, CHandlerVarRef) | |||
| 228 | + | } | |||
| 229 | + | ||||
| 230 | + | xSignalGroupConnectSwapped(x.GoPointer(), DetailedSignalVar, CHandlerVarRef, DataVar) | |||
| 153 | 231 | ||||
| 154 | } | 232 | } | ||
| 155 | 233 | ||||
M v4/gobject/gtype.go +83 -5
| @@ -810,7 +810,20 @@ var xTypeAddClassCacheFunc func(uintptr, uintptr) | |||||
| 810 | // chain. | 810 | // chain. | ||
| 811 | func TypeAddClassCacheFunc(CacheDataVar uintptr, CacheFuncVar *TypeClassCacheFunc) { | 811 | func TypeAddClassCacheFunc(CacheDataVar uintptr, CacheFuncVar *TypeClassCacheFunc) { | ||
| 812 | 812 | ||||
| 813 | - | xTypeAddClassCacheFunc(CacheDataVar, glib.NewCallback(CacheFuncVar)) | 813 | + | CacheFuncVarPtr := uintptr(unsafe.Pointer(CacheFuncVar)) |
| 814 | + | var CacheFuncVarRef uintptr | |||
| 815 | + | if cbRefPtr, ok := glib.GetCallback(CacheFuncVarPtr); ok { | |||
| 816 | + | CacheFuncVarRef = cbRefPtr | |||
| 817 | + | } else { | |||
| 818 | + | fcb := func(arg0 uintptr, arg1 *TypeClass) bool { | |||
| 819 | + | cbFn := *CacheFuncVar | |||
| 820 | + | return cbFn(arg0, arg1) | |||
| 821 | + | } | |||
| 822 | + | CacheFuncVarRef = purego.NewCallback(fcb) | |||
| 823 | + | glib.SaveCallback(CacheFuncVarPtr, CacheFuncVarRef) | |||
| 824 | + | } | |||
| 825 | + | ||||
| 826 | + | xTypeAddClassCacheFunc(CacheDataVar, CacheFuncVarRef) | |||
| 814 | 827 | ||||
| 815 | } | 828 | } | ||
| 816 | 829 | ||||
| @@ -853,7 +866,20 @@ var xTypeAddInterfaceCheck func(uintptr, uintptr) | |||||
| 853 | // interfaces. | 866 | // interfaces. | ||
| 854 | func TypeAddInterfaceCheck(CheckDataVar uintptr, CheckFuncVar *TypeInterfaceCheckFunc) { | 867 | func TypeAddInterfaceCheck(CheckDataVar uintptr, CheckFuncVar *TypeInterfaceCheckFunc) { | ||
| 855 | 868 | ||||
| 856 | - | xTypeAddInterfaceCheck(CheckDataVar, glib.NewCallback(CheckFuncVar)) | 869 | + | CheckFuncVarPtr := uintptr(unsafe.Pointer(CheckFuncVar)) |
| 870 | + | var CheckFuncVarRef uintptr | |||
| 871 | + | if cbRefPtr, ok := glib.GetCallback(CheckFuncVarPtr); ok { | |||
| 872 | + | CheckFuncVarRef = cbRefPtr | |||
| 873 | + | } else { | |||
| 874 | + | fcb := func(arg0 uintptr, arg1 *TypeInterface) { | |||
| 875 | + | cbFn := *CheckFuncVar | |||
| 876 | + | cbFn(arg0, arg1) | |||
| 877 | + | } | |||
| 878 | + | CheckFuncVarRef = purego.NewCallback(fcb) | |||
| 879 | + | glib.SaveCallback(CheckFuncVarPtr, CheckFuncVarRef) | |||
| 880 | + | } | |||
| 881 | + | ||||
| 882 | + | xTypeAddInterfaceCheck(CheckDataVar, CheckFuncVarRef) | |||
| 857 | 883 | ||||
| 858 | } | 884 | } | ||
| 859 | 885 | ||||
| @@ -1474,7 +1500,33 @@ var xTypeRegisterStaticSimple func(types.GType, string, uint, uintptr, uint, uin | |||||
| 1474 | // struct and calling g_type_register_static(). | 1500 | // struct and calling g_type_register_static(). | ||
| 1475 | func TypeRegisterStaticSimple(ParentTypeVar types.GType, TypeNameVar string, ClassSizeVar uint, ClassInitVar *ClassInitFunc, InstanceSizeVar uint, InstanceInitVar *InstanceInitFunc, FlagsVar TypeFlags) types.GType { | 1501 | func TypeRegisterStaticSimple(ParentTypeVar types.GType, TypeNameVar string, ClassSizeVar uint, ClassInitVar *ClassInitFunc, InstanceSizeVar uint, InstanceInitVar *InstanceInitFunc, FlagsVar TypeFlags) types.GType { | ||
| 1476 | 1502 | ||||
| 1477 | - | cret := xTypeRegisterStaticSimple(ParentTypeVar, TypeNameVar, ClassSizeVar, glib.NewCallback(ClassInitVar), InstanceSizeVar, glib.NewCallback(InstanceInitVar), FlagsVar) | 1503 | + | ClassInitVarPtr := uintptr(unsafe.Pointer(ClassInitVar)) |
| 1504 | + | var ClassInitVarRef uintptr | |||
| 1505 | + | if cbRefPtr, ok := glib.GetCallback(ClassInitVarPtr); ok { | |||
| 1506 | + | ClassInitVarRef = cbRefPtr | |||
| 1507 | + | } else { | |||
| 1508 | + | fcb := func(arg0 *TypeClass, arg1 uintptr) { | |||
| 1509 | + | cbFn := *ClassInitVar | |||
| 1510 | + | cbFn(arg0, arg1) | |||
| 1511 | + | } | |||
| 1512 | + | ClassInitVarRef = purego.NewCallback(fcb) | |||
| 1513 | + | glib.SaveCallback(ClassInitVarPtr, ClassInitVarRef) | |||
| 1514 | + | } | |||
| 1515 | + | ||||
| 1516 | + | InstanceInitVarPtr := uintptr(unsafe.Pointer(InstanceInitVar)) | |||
| 1517 | + | var InstanceInitVarRef uintptr | |||
| 1518 | + | if cbRefPtr, ok := glib.GetCallback(InstanceInitVarPtr); ok { | |||
| 1519 | + | InstanceInitVarRef = cbRefPtr | |||
| 1520 | + | } else { | |||
| 1521 | + | fcb := func(arg0 *TypeInstance, arg1 *TypeClass) { | |||
| 1522 | + | cbFn := *InstanceInitVar | |||
| 1523 | + | cbFn(arg0, arg1) | |||
| 1524 | + | } | |||
| 1525 | + | InstanceInitVarRef = purego.NewCallback(fcb) | |||
| 1526 | + | glib.SaveCallback(InstanceInitVarPtr, InstanceInitVarRef) | |||
| 1527 | + | } | |||
| 1528 | + | ||||
| 1529 | + | cret := xTypeRegisterStaticSimple(ParentTypeVar, TypeNameVar, ClassSizeVar, ClassInitVarRef, InstanceSizeVar, InstanceInitVarRef, FlagsVar) | |||
| 1478 | return cret | 1530 | return cret | ||
| 1479 | } | 1531 | } | ||
| 1480 | 1532 | ||||
| @@ -1485,7 +1537,20 @@ var xTypeRemoveClassCacheFunc func(uintptr, uintptr) | |||||
| 1485 | // g_type_remove_class_cache_func() to avoid leaks. | 1537 | // g_type_remove_class_cache_func() to avoid leaks. | ||
| 1486 | func TypeRemoveClassCacheFunc(CacheDataVar uintptr, CacheFuncVar *TypeClassCacheFunc) { | 1538 | func TypeRemoveClassCacheFunc(CacheDataVar uintptr, CacheFuncVar *TypeClassCacheFunc) { | ||
| 1487 | 1539 | ||||
| 1488 | - | xTypeRemoveClassCacheFunc(CacheDataVar, glib.NewCallback(CacheFuncVar)) | 1540 | + | CacheFuncVarPtr := uintptr(unsafe.Pointer(CacheFuncVar)) |
| 1541 | + | var CacheFuncVarRef uintptr | |||
| 1542 | + | if cbRefPtr, ok := glib.GetCallback(CacheFuncVarPtr); ok { | |||
| 1543 | + | CacheFuncVarRef = cbRefPtr | |||
| 1544 | + | } else { | |||
| 1545 | + | fcb := func(arg0 uintptr, arg1 *TypeClass) bool { | |||
| 1546 | + | cbFn := *CacheFuncVar | |||
| 1547 | + | return cbFn(arg0, arg1) | |||
| 1548 | + | } | |||
| 1549 | + | CacheFuncVarRef = purego.NewCallback(fcb) | |||
| 1550 | + | glib.SaveCallback(CacheFuncVarPtr, CacheFuncVarRef) | |||
| 1551 | + | } | |||
| 1552 | + | ||||
| 1553 | + | xTypeRemoveClassCacheFunc(CacheDataVar, CacheFuncVarRef) | |||
| 1489 | 1554 | ||||
| 1490 | } | 1555 | } | ||
| 1491 | 1556 | ||||
| @@ -1495,7 +1560,20 @@ var xTypeRemoveInterfaceCheck func(uintptr, uintptr) | |||||
| 1495 | // g_type_add_interface_check(). | 1560 | // g_type_add_interface_check(). | ||
| 1496 | func TypeRemoveInterfaceCheck(CheckDataVar uintptr, CheckFuncVar *TypeInterfaceCheckFunc) { | 1561 | func TypeRemoveInterfaceCheck(CheckDataVar uintptr, CheckFuncVar *TypeInterfaceCheckFunc) { | ||
| 1497 | 1562 | ||||
| 1498 | - | xTypeRemoveInterfaceCheck(CheckDataVar, glib.NewCallback(CheckFuncVar)) | 1563 | + | CheckFuncVarPtr := uintptr(unsafe.Pointer(CheckFuncVar)) |
| 1564 | + | var CheckFuncVarRef uintptr | |||
| 1565 | + | if cbRefPtr, ok := glib.GetCallback(CheckFuncVarPtr); ok { | |||
| 1566 | + | CheckFuncVarRef = cbRefPtr | |||
| 1567 | + | } else { | |||
| 1568 | + | fcb := func(arg0 uintptr, arg1 *TypeInterface) { | |||
| 1569 | + | cbFn := *CheckFuncVar | |||
| 1570 | + | cbFn(arg0, arg1) | |||
| 1571 | + | } | |||
| 1572 | + | CheckFuncVarRef = purego.NewCallback(fcb) | |||
| 1573 | + | glib.SaveCallback(CheckFuncVarPtr, CheckFuncVarRef) | |||
| 1574 | + | } | |||
| 1575 | + | ||||
| 1576 | + | xTypeRemoveInterfaceCheck(CheckDataVar, CheckFuncVarRef) | |||
| 1499 | 1577 | ||||
| 1500 | } | 1578 | } | ||
| 1501 | 1579 | ||||
M v4/gobject/gvalue.go +14 -1
| @@ -848,7 +848,20 @@ var xValueRegisterTransformFunc func(types.GType, types.GType, uintptr) | |||||
| 848 | // @dest_type will be replaced. | 848 | // @dest_type will be replaced. | ||
| 849 | func ValueRegisterTransformFunc(SrcTypeVar types.GType, DestTypeVar types.GType, TransformFuncVar *ValueTransform) { | 849 | func ValueRegisterTransformFunc(SrcTypeVar types.GType, DestTypeVar types.GType, TransformFuncVar *ValueTransform) { | ||
| 850 | 850 | ||||
| 851 | - | xValueRegisterTransformFunc(SrcTypeVar, DestTypeVar, glib.NewCallback(TransformFuncVar)) | 851 | + | TransformFuncVarPtr := uintptr(unsafe.Pointer(TransformFuncVar)) |
| 852 | + | var TransformFuncVarRef uintptr | |||
| 853 | + | if cbRefPtr, ok := glib.GetCallback(TransformFuncVarPtr); ok { | |||
| 854 | + | TransformFuncVarRef = cbRefPtr | |||
| 855 | + | } else { | |||
| 856 | + | fcb := func(arg0 *Value, arg1 *Value) { | |||
| 857 | + | cbFn := *TransformFuncVar | |||
| 858 | + | cbFn(arg0, arg1) | |||
| 859 | + | } | |||
| 860 | + | TransformFuncVarRef = purego.NewCallback(fcb) | |||
| 861 | + | glib.SaveCallback(TransformFuncVarPtr, TransformFuncVarRef) | |||
| 862 | + | } | |||
| 863 | + | ||||
| 864 | + | xValueRegisterTransformFunc(SrcTypeVar, DestTypeVar, TransformFuncVarRef) | |||
| 852 | 865 | ||||
| 853 | } | 866 | } | ||
| 854 | 867 | ||||
M v4/gobject/gvaluearray.go +28 -2
| @@ -145,7 +145,20 @@ var xValueArraySort func(uintptr, uintptr) *ValueArray | |||||
| 145 | // C qsort() function. | 145 | // C qsort() function. | ||
| 146 | func (x *ValueArray) Sort(CompareFuncVar *glib.CompareFunc) *ValueArray { | 146 | func (x *ValueArray) Sort(CompareFuncVar *glib.CompareFunc) *ValueArray { | ||
| 147 | 147 | ||||
| 148 | - | cret := xValueArraySort(x.GoPointer(), glib.NewCallback(CompareFuncVar)) | 148 | + | CompareFuncVarPtr := uintptr(unsafe.Pointer(CompareFuncVar)) |
| 149 | + | var CompareFuncVarRef uintptr | |||
| 150 | + | if cbRefPtr, ok := glib.GetCallback(CompareFuncVarPtr); ok { | |||
| 151 | + | CompareFuncVarRef = cbRefPtr | |||
| 152 | + | } else { | |||
| 153 | + | fcb := func(arg0 uintptr, arg1 uintptr) int { | |||
| 154 | + | cbFn := *CompareFuncVar | |||
| 155 | + | return cbFn(arg0, arg1) | |||
| 156 | + | } | |||
| 157 | + | CompareFuncVarRef = purego.NewCallback(fcb) | |||
| 158 | + | glib.SaveCallback(CompareFuncVarPtr, CompareFuncVarRef) | |||
| 159 | + | } | |||
| 160 | + | ||||
| 161 | + | cret := xValueArraySort(x.GoPointer(), CompareFuncVarRef) | |||
| 149 | return cret | 162 | return cret | ||
| 150 | } | 163 | } | ||
| 151 | 164 | ||||
| @@ -158,7 +171,20 @@ var xValueArraySortWithData func(uintptr, uintptr, uintptr) *ValueArray | |||||
| 158 | // C qsort() function. | 171 | // C qsort() function. | ||
| 159 | func (x *ValueArray) SortWithData(CompareFuncVar *glib.CompareDataFunc, UserDataVar uintptr) *ValueArray { | 172 | func (x *ValueArray) SortWithData(CompareFuncVar *glib.CompareDataFunc, UserDataVar uintptr) *ValueArray { | ||
| 160 | 173 | ||||
| 161 | - | cret := xValueArraySortWithData(x.GoPointer(), glib.NewCallback(CompareFuncVar), UserDataVar) | 174 | + | CompareFuncVarPtr := uintptr(unsafe.Pointer(CompareFuncVar)) |
| 175 | + | var CompareFuncVarRef uintptr | |||
| 176 | + | if cbRefPtr, ok := glib.GetCallback(CompareFuncVarPtr); ok { | |||
| 177 | + | CompareFuncVarRef = cbRefPtr | |||
| 178 | + | } else { | |||
| 179 | + | fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int { | |||
| 180 | + | cbFn := *CompareFuncVar | |||
| 181 | + | return cbFn(arg0, arg1, arg2) | |||
| 182 | + | } | |||
| 183 | + | CompareFuncVarRef = purego.NewCallback(fcb) | |||
| 184 | + | glib.SaveCallback(CompareFuncVarPtr, CompareFuncVarRef) | |||
| 185 | + | } | |||
| 186 | + | ||||
| 187 | + | cret := xValueArraySortWithData(x.GoPointer(), CompareFuncVarRef, UserDataVar) | |||
| 162 | return cret | 188 | return cret | ||
| 163 | } | 189 | } | ||
| 164 | 190 | ||||
M v4/gsk/gskrendernode.go +16 -1
| @@ -298,7 +298,22 @@ var xRenderNodeDeserialize func(*glib.Bytes, uintptr, uintptr) uintptr | |||||
| 298 | func RenderNodeDeserialize(BytesVar *glib.Bytes, ErrorFuncVar *ParseErrorFunc, UserDataVar uintptr) *RenderNode { | 298 | func RenderNodeDeserialize(BytesVar *glib.Bytes, ErrorFuncVar *ParseErrorFunc, UserDataVar uintptr) *RenderNode { | ||
| 299 | var cls *RenderNode | 299 | var cls *RenderNode | ||
| 300 | 300 | ||||
| 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) | |||
| 302 | 317 | ||||
| 303 | if cret == 0 { | 318 | if cret == 0 { | ||
| 304 | return nil | 319 | return nil | ||
M v4/gsk/gsktypes.go +28 -2
| @@ -247,7 +247,20 @@ var xPathForeach func(uintptr, PathForeachFlags, uintptr, uintptr) bool | |||||
| 247 | // an approximation of the path using just the allowed operations. | 247 | // an approximation of the path using just the allowed operations. | ||
| 248 | func (x *Path) Foreach(FlagsVar PathForeachFlags, FuncVar *PathForeachFunc, UserDataVar uintptr) bool { | 248 | func (x *Path) Foreach(FlagsVar PathForeachFlags, FuncVar *PathForeachFunc, UserDataVar uintptr) bool { | ||
| 249 | 249 | ||||
| 250 | - | cret := xPathForeach(x.GoPointer(), FlagsVar, glib.NewCallback(FuncVar), UserDataVar) | 250 | + | FuncVarPtr := uintptr(unsafe.Pointer(FuncVar)) |
| 251 | + | var FuncVarRef uintptr | |||
| 252 | + | if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok { | |||
| 253 | + | FuncVarRef = cbRefPtr | |||
| 254 | + | } else { | |||
| 255 | + | fcb := func(arg0 PathOperation, arg1 []graphene.Point, arg2 uint, arg3 float32, arg4 uintptr) bool { | |||
| 256 | + | cbFn := *FuncVar | |||
| 257 | + | return cbFn(arg0, arg1, arg2, arg3, arg4) | |||
| 258 | + | } | |||
| 259 | + | FuncVarRef = purego.NewCallback(fcb) | |||
| 260 | + | glib.SaveCallback(FuncVarPtr, FuncVarRef) | |||
| 261 | + | } | |||
| 262 | + | ||||
| 263 | + | cret := xPathForeach(x.GoPointer(), FlagsVar, FuncVarRef, UserDataVar) | |||
| 251 | return cret | 264 | return cret | ||
| 252 | } | 265 | } | ||
| 253 | 266 | ||||
| @@ -270,7 +283,20 @@ var xPathForeachIntersection func(uintptr, *Path, uintptr, uintptr) bool | |||||
| 270 | // If @func returns `FALSE`, the iteration is stopped. | 283 | // If @func returns `FALSE`, the iteration is stopped. | ||
| 271 | func (x *Path) ForeachIntersection(Path2Var *Path, FuncVar *PathIntersectionFunc, UserDataVar uintptr) bool { | 284 | func (x *Path) ForeachIntersection(Path2Var *Path, FuncVar *PathIntersectionFunc, UserDataVar uintptr) bool { | ||
| 272 | 285 | ||||
| 273 | - | cret := xPathForeachIntersection(x.GoPointer(), Path2Var, glib.NewCallback(FuncVar), UserDataVar) | 286 | + | FuncVarPtr := uintptr(unsafe.Pointer(FuncVar)) |
| 287 | + | var FuncVarRef uintptr | |||
| 288 | + | if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok { | |||
| 289 | + | FuncVarRef = cbRefPtr | |||
| 290 | + | } else { | |||
| 291 | + | fcb := func(arg0 *Path, arg1 *PathPoint, arg2 *Path, arg3 *PathPoint, arg4 PathIntersection, arg5 uintptr) bool { | |||
| 292 | + | cbFn := *FuncVar | |||
| 293 | + | return cbFn(arg0, arg1, arg2, arg3, arg4, arg5) | |||
| 294 | + | } | |||
| 295 | + | FuncVarRef = purego.NewCallback(fcb) | |||
| 296 | + | glib.SaveCallback(FuncVarPtr, FuncVarRef) | |||
| 297 | + | } | |||
| 298 | + | ||||
| 299 | + | cret := xPathForeachIntersection(x.GoPointer(), Path2Var, FuncVarRef, UserDataVar) | |||
| 274 | return cret | 300 | return cret | ||
| 275 | } | 301 | } | ||
| 276 | 302 | ||||
M v4/gtk/gtkalertdialog.go +16 -1
| @@ -74,7 +74,22 @@ var xAlertDialogChoose func(uintptr, uintptr, uintptr, uintptr, uintptr) | |||||
| 74 | // this case is [method@Gtk.AlertDialog.show]. | 74 | // this case is [method@Gtk.AlertDialog.show]. | ||
| 75 | func (x *AlertDialog) Choose(ParentVar *Window, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) { | 75 | func (x *AlertDialog) Choose(ParentVar *Window, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) { | ||
| 76 | 76 | ||||
| 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 *AsyncResult, 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) | |||
| 78 | 93 | ||||
| 79 | } | 94 | } | ||
| 80 | 95 | ||||
M v4/gtk/gtkassistant.go +29 -1
| @@ -360,7 +360,35 @@ var xAssistantSetForwardPageFunc func(uintptr, uintptr, uintptr, uintptr) | |||||
| 360 | // next visible page. | 360 | // next visible page. | ||
| 361 | func (x *Assistant) SetForwardPageFunc(PageFuncVar *AssistantPageFunc, DataVar uintptr, DestroyVar *glib.DestroyNotify) { | 361 | func (x *Assistant) SetForwardPageFunc(PageFuncVar *AssistantPageFunc, DataVar uintptr, DestroyVar *glib.DestroyNotify) { | ||
| 362 | 362 | ||||
| 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 | + | DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar)) | |||
| 379 | + | var DestroyVarRef uintptr | |||
| 380 | + | if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok { | |||
| 381 | + | DestroyVarRef = cbRefPtr | |||
| 382 | + | } else { | |||
| 383 | + | fcb := func(arg0 uintptr) { | |||
| 384 | + | cbFn := *DestroyVar | |||
| 385 | + | cbFn(arg0) | |||
| 386 | + | } | |||
| 387 | + | DestroyVarRef = purego.NewCallback(fcb) | |||
| 388 | + | glib.SaveCallback(DestroyVarPtr, DestroyVarRef) | |||
| 389 | + | } | |||
| 390 | + | ||||
| 391 | + | xAssistantSetForwardPageFunc(x.GoPointer(), PageFuncVarRef, DataVar, DestroyVarRef) | |||
| 364 | 392 | ||||
| 365 | } | 393 | } | ||
| 366 | 394 | ||||
M v4/gtk/gtkbuilderscope.go +28 -2
| @@ -274,7 +274,20 @@ var xBuilderCScopeAddCallbackSymbol func(uintptr, string, uintptr) | |||||
| 274 | // namespace. | 274 | // namespace. | ||
| 275 | func (x *BuilderCScope) AddCallbackSymbol(CallbackNameVar string, CallbackSymbolVar *gobject.Callback) { | 275 | func (x *BuilderCScope) AddCallbackSymbol(CallbackNameVar string, CallbackSymbolVar *gobject.Callback) { | ||
| 276 | 276 | ||||
| 277 | - | xBuilderCScopeAddCallbackSymbol(x.GoPointer(), CallbackNameVar, glib.NewCallback(CallbackSymbolVar)) | 277 | + | CallbackSymbolVarPtr := uintptr(unsafe.Pointer(CallbackSymbolVar)) |
| 278 | + | var CallbackSymbolVarRef uintptr | |||
| 279 | + | if cbRefPtr, ok := glib.GetCallback(CallbackSymbolVarPtr); ok { | |||
| 280 | + | CallbackSymbolVarRef = cbRefPtr | |||
| 281 | + | } else { | |||
| 282 | + | fcb := func() { | |||
| 283 | + | cbFn := *CallbackSymbolVar | |||
| 284 | + | cbFn() | |||
| 285 | + | } | |||
| 286 | + | CallbackSymbolVarRef = purego.NewCallback(fcb) | |||
| 287 | + | glib.SaveCallback(CallbackSymbolVarPtr, CallbackSymbolVarRef) | |||
| 288 | + | } | |||
| 289 | + | ||||
| 290 | + | xBuilderCScopeAddCallbackSymbol(x.GoPointer(), CallbackNameVar, CallbackSymbolVarRef) | |||
| 278 | 291 | ||||
| 279 | } | 292 | } | ||
| 280 | 293 | ||||
| @@ -286,7 +299,20 @@ var xBuilderCScopeAddCallbackSymbols func(uintptr, string, uintptr, ...interface | |||||
| 286 | // for each symbol. | 299 | // for each symbol. | ||
| 287 | func (x *BuilderCScope) AddCallbackSymbols(FirstCallbackNameVar string, FirstCallbackSymbolVar *gobject.Callback, varArgs ...interface{}) { | 300 | func (x *BuilderCScope) AddCallbackSymbols(FirstCallbackNameVar string, FirstCallbackSymbolVar *gobject.Callback, varArgs ...interface{}) { | ||
| 288 | 301 | ||||
| 289 | - | xBuilderCScopeAddCallbackSymbols(x.GoPointer(), FirstCallbackNameVar, glib.NewCallback(FirstCallbackSymbolVar), varArgs...) | 302 | + | FirstCallbackSymbolVarPtr := uintptr(unsafe.Pointer(FirstCallbackSymbolVar)) |
| 303 | + | var FirstCallbackSymbolVarRef uintptr | |||
| 304 | + | if cbRefPtr, ok := glib.GetCallback(FirstCallbackSymbolVarPtr); ok { | |||
| 305 | + | FirstCallbackSymbolVarRef = cbRefPtr | |||
| 306 | + | } else { | |||
| 307 | + | fcb := func() { | |||
| 308 | + | cbFn := *FirstCallbackSymbolVar | |||
| 309 | + | cbFn() | |||
| 310 | + | } | |||
| 311 | + | FirstCallbackSymbolVarRef = purego.NewCallback(fcb) | |||
| 312 | + | glib.SaveCallback(FirstCallbackSymbolVarPtr, FirstCallbackSymbolVarRef) | |||
| 313 | + | } | |||
| 314 | + | ||||
| 315 | + | xBuilderCScopeAddCallbackSymbols(x.GoPointer(), FirstCallbackNameVar, FirstCallbackSymbolVarRef, varArgs...) | |||
| 290 | 316 | ||||
| 291 | } | 317 | } | ||
| 292 | 318 | ||||
M v4/gtk/gtkcellarea.go +28 -2
| @@ -1299,7 +1299,20 @@ var xCellAreaForeach func(uintptr, uintptr, uintptr) | |||||
| 1299 | // Calls @callback for every `GtkCellRenderer` in @area. | 1299 | // Calls @callback for every `GtkCellRenderer` in @area. | ||
| 1300 | func (x *CellArea) Foreach(CallbackVar *CellCallback, CallbackDataVar uintptr) { | 1300 | func (x *CellArea) Foreach(CallbackVar *CellCallback, CallbackDataVar uintptr) { | ||
| 1301 | 1301 | ||||
| 1302 | - | xCellAreaForeach(x.GoPointer(), glib.NewCallback(CallbackVar), CallbackDataVar) | 1302 | + | CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar)) |
| 1303 | + | var CallbackVarRef uintptr | |||
| 1304 | + | if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok { | |||
| 1305 | + | CallbackVarRef = cbRefPtr | |||
| 1306 | + | } else { | |||
| 1307 | + | fcb := func(arg0 uintptr, arg1 uintptr) bool { | |||
| 1308 | + | cbFn := *CallbackVar | |||
| 1309 | + | return cbFn(arg0, arg1) | |||
| 1310 | + | } | |||
| 1311 | + | CallbackVarRef = purego.NewCallback(fcb) | |||
| 1312 | + | glib.SaveCallback(CallbackVarPtr, CallbackVarRef) | |||
| 1313 | + | } | |||
| 1314 | + | ||||
| 1315 | + | xCellAreaForeach(x.GoPointer(), CallbackVarRef, CallbackDataVar) | |||
| 1303 | 1316 | ||||
| 1304 | } | 1317 | } | ||
| 1305 | 1318 | ||||
| @@ -1309,7 +1322,20 @@ var xCellAreaForeachAlloc func(uintptr, uintptr, uintptr, *gdk.Rectangle, *gdk.R | |||||
| 1309 | // allocated rectangle inside @cell_area. | 1322 | // allocated rectangle inside @cell_area. | ||
| 1310 | func (x *CellArea) ForeachAlloc(ContextVar *CellAreaContext, WidgetVar *Widget, CellAreaVar *gdk.Rectangle, BackgroundAreaVar *gdk.Rectangle, CallbackVar *CellAllocCallback, CallbackDataVar uintptr) { | 1323 | func (x *CellArea) ForeachAlloc(ContextVar *CellAreaContext, WidgetVar *Widget, CellAreaVar *gdk.Rectangle, BackgroundAreaVar *gdk.Rectangle, CallbackVar *CellAllocCallback, CallbackDataVar uintptr) { | ||
| 1311 | 1324 | ||||
| 1312 | - | xCellAreaForeachAlloc(x.GoPointer(), ContextVar.GoPointer(), WidgetVar.GoPointer(), CellAreaVar, BackgroundAreaVar, glib.NewCallback(CallbackVar), CallbackDataVar) | 1325 | + | CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar)) |
| 1326 | + | var CallbackVarRef uintptr | |||
| 1327 | + | if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok { | |||
| 1328 | + | CallbackVarRef = cbRefPtr | |||
| 1329 | + | } else { | |||
| 1330 | + | fcb := func(arg0 uintptr, arg1 *gdk.Rectangle, arg2 *gdk.Rectangle, arg3 uintptr) bool { | |||
| 1331 | + | cbFn := *CallbackVar | |||
| 1332 | + | return cbFn(arg0, arg1, arg2, arg3) | |||
| 1333 | + | } | |||
| 1334 | + | CallbackVarRef = purego.NewCallback(fcb) | |||
| 1335 | + | glib.SaveCallback(CallbackVarPtr, CallbackVarRef) | |||
| 1336 | + | } | |||
| 1337 | + | ||||
| 1338 | + | xCellAreaForeachAlloc(x.GoPointer(), ContextVar.GoPointer(), WidgetVar.GoPointer(), CellAreaVar, BackgroundAreaVar, CallbackVarRef, CallbackDataVar) | |||
| 1313 | 1339 | ||||
| 1314 | } | 1340 | } | ||
| 1315 | 1341 | ||||
M v4/gtk/gtkcolordialog.go +16 -1
| @@ -72,7 +72,22 @@ var xColorDialogChooseRgba func(uintptr, uintptr, *gdk.RGBA, uintptr, uintptr, u | |||||
| 72 | // Presents a color chooser dialog to the user. | 72 | // Presents a color chooser dialog to the user. | ||
| 73 | func (x *ColorDialog) ChooseRgba(ParentVar *Window, InitialColorVar *gdk.RGBA, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) { | 73 | func (x *ColorDialog) ChooseRgba(ParentVar *Window, InitialColorVar *gdk.RGBA, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) { | ||
| 74 | 74 | ||||
| 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 *AsyncResult, 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) | |||
| 76 | 91 | ||||
| 77 | } | 92 | } | ||
| 78 | 93 | ||||
M v4/gtk/gtkcombobox.go +31 -1
| @@ -565,7 +565,37 @@ var xComboBoxSetRowSeparatorFunc func(uintptr, uintptr, uintptr, uintptr) | |||||
| 565 | // This is the default value. | 565 | // This is the default value. | ||
| 566 | func (x *ComboBox) SetRowSeparatorFunc(FuncVar *TreeViewRowSeparatorFunc, DataVar uintptr, DestroyVar *glib.DestroyNotify) { | 566 | func (x *ComboBox) SetRowSeparatorFunc(FuncVar *TreeViewRowSeparatorFunc, DataVar uintptr, DestroyVar *glib.DestroyNotify) { | ||
| 567 | 567 | ||||
| 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) | |||
| 569 | 599 | ||||
| 570 | } | 600 | } | ||
| 571 | 601 | ||||
M v4/gtk/gtkcustomfilter.go +58 -2
| @@ -55,7 +55,35 @@ var xNewCustomFilter func(uintptr, uintptr, uintptr) uintptr | |||||
| 55 | func NewCustomFilter(MatchFuncVar *CustomFilterFunc, UserDataVar uintptr, UserDestroyVar *glib.DestroyNotify) *CustomFilter { | 55 | func NewCustomFilter(MatchFuncVar *CustomFilterFunc, UserDataVar uintptr, UserDestroyVar *glib.DestroyNotify) *CustomFilter { | ||
| 56 | var cls *CustomFilter | 56 | var cls *CustomFilter | ||
| 57 | 57 | ||||
| 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 | + | UserDestroyVarPtr := uintptr(unsafe.Pointer(UserDestroyVar)) | |||
| 74 | + | var UserDestroyVarRef uintptr | |||
| 75 | + | if cbRefPtr, ok := glib.GetCallback(UserDestroyVarPtr); ok { | |||
| 76 | + | UserDestroyVarRef = cbRefPtr | |||
| 77 | + | } else { | |||
| 78 | + | fcb := func(arg0 uintptr) { | |||
| 79 | + | cbFn := *UserDestroyVar | |||
| 80 | + | cbFn(arg0) | |||
| 81 | + | } | |||
| 82 | + | UserDestroyVarRef = purego.NewCallback(fcb) | |||
| 83 | + | glib.SaveCallback(UserDestroyVarPtr, UserDestroyVarRef) | |||
| 84 | + | } | |||
| 85 | + | ||||
| 86 | + | cret := xNewCustomFilter(MatchFuncVarRef, UserDataVar, UserDestroyVarRef) | |||
| 59 | 87 | ||||
| 60 | if cret == 0 { | 88 | if cret == 0 { | ||
| 61 | return nil | 89 | return nil | ||
| @@ -78,7 +106,35 @@ var xCustomFilterSetFilterFunc func(uintptr, uintptr, uintptr, uintptr) | |||||
| 78 | // will be called. | 106 | // will be called. | ||
| 79 | func (x *CustomFilter) SetFilterFunc(MatchFuncVar *CustomFilterFunc, UserDataVar uintptr, UserDestroyVar *glib.DestroyNotify) { | 107 | func (x *CustomFilter) SetFilterFunc(MatchFuncVar *CustomFilterFunc, UserDataVar uintptr, UserDestroyVar *glib.DestroyNotify) { | ||
| 80 | 108 | ||||
| 81 | - | xCustomFilterSetFilterFunc(x.GoPointer(), glib.NewCallbackNullable(MatchFuncVar), UserDataVar, glib.NewCallback(UserDestroyVar)) | 109 | + | var MatchFuncVarRef uintptr |
| 110 | + | if MatchFuncVar != nil { | |||
| 111 | + | MatchFuncVarPtr := uintptr(unsafe.Pointer(MatchFuncVar)) | |||
| 112 | + | if cbRefPtr, ok := glib.GetCallback(MatchFuncVarPtr); ok { | |||
| 113 | + | MatchFuncVarRef = cbRefPtr | |||
| 114 | + | } else { | |||
| 115 | + | fcb := func(arg0 uintptr, arg1 uintptr) bool { | |||
| 116 | + | cbFn := *MatchFuncVar | |||
| 117 | + | return cbFn(arg0, arg1) | |||
| 118 | + | } | |||
| 119 | + | MatchFuncVarRef = purego.NewCallback(fcb) | |||
| 120 | + | glib.SaveCallback(MatchFuncVarPtr, MatchFuncVarRef) | |||
| 121 | + | } | |||
| 122 | + | } | |||
| 123 | + | ||||
| 124 | + | UserDestroyVarPtr := uintptr(unsafe.Pointer(UserDestroyVar)) | |||
| 125 | + | var UserDestroyVarRef uintptr | |||
| 126 | + | if cbRefPtr, ok := glib.GetCallback(UserDestroyVarPtr); ok { | |||
| 127 | + | UserDestroyVarRef = cbRefPtr | |||
| 128 | + | } else { | |||
| 129 | + | fcb := func(arg0 uintptr) { | |||
| 130 | + | cbFn := *UserDestroyVar | |||
| 131 | + | cbFn(arg0) | |||
| 132 | + | } | |||
| 133 | + | UserDestroyVarRef = purego.NewCallback(fcb) | |||
| 134 | + | glib.SaveCallback(UserDestroyVarPtr, UserDestroyVarRef) | |||
| 135 | + | } | |||
| 136 | + | ||||
| 137 | + | xCustomFilterSetFilterFunc(x.GoPointer(), MatchFuncVarRef, UserDataVar, UserDestroyVarRef) | |||
| 82 | 138 | ||||
| 83 | } | 139 | } | ||
| 84 | 140 | ||||
M v4/gtk/gtkcustomlayout.go +42 -1
| @@ -62,7 +62,48 @@ var xNewCustomLayout func(uintptr, uintptr, uintptr) uintptr | |||||
| 62 | func NewCustomLayout(RequestModeVar *CustomRequestModeFunc, MeasureVar *CustomMeasureFunc, AllocateVar *CustomAllocateFunc) *CustomLayout { | 62 | func NewCustomLayout(RequestModeVar *CustomRequestModeFunc, MeasureVar *CustomMeasureFunc, AllocateVar *CustomAllocateFunc) *CustomLayout { | ||
| 63 | var cls *CustomLayout | 63 | var cls *CustomLayout | ||
| 64 | 64 | ||||
| 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 | + | MeasureVarPtr := uintptr(unsafe.Pointer(MeasureVar)) | |||
| 81 | + | var MeasureVarRef uintptr | |||
| 82 | + | if cbRefPtr, ok := glib.GetCallback(MeasureVarPtr); ok { | |||
| 83 | + | MeasureVarRef = cbRefPtr | |||
| 84 | + | } else { | |||
| 85 | + | fcb := func(arg0 uintptr, arg1 Orientation, arg2 int, arg3 *int, arg4 *int, arg5 *int, arg6 *int) { | |||
| 86 | + | cbFn := *MeasureVar | |||
| 87 | + | cbFn(arg0, arg1, arg2, arg3, arg4, arg5, arg6) | |||
| 88 | + | } | |||
| 89 | + | MeasureVarRef = purego.NewCallback(fcb) | |||
| 90 | + | glib.SaveCallback(MeasureVarPtr, MeasureVarRef) | |||
| 91 | + | } | |||
| 92 | + | ||||
| 93 | + | AllocateVarPtr := uintptr(unsafe.Pointer(AllocateVar)) | |||
| 94 | + | var AllocateVarRef uintptr | |||
| 95 | + | if cbRefPtr, ok := glib.GetCallback(AllocateVarPtr); ok { | |||
| 96 | + | AllocateVarRef = cbRefPtr | |||
| 97 | + | } else { | |||
| 98 | + | fcb := func(arg0 uintptr, arg1 int, arg2 int, arg3 int) { | |||
| 99 | + | cbFn := *AllocateVar | |||
| 100 | + | cbFn(arg0, arg1, arg2, arg3) | |||
| 101 | + | } | |||
| 102 | + | AllocateVarRef = purego.NewCallback(fcb) | |||
| 103 | + | glib.SaveCallback(AllocateVarPtr, AllocateVarRef) | |||
| 104 | + | } | |||
| 105 | + | ||||
| 106 | + | cret := xNewCustomLayout(RequestModeVarRef, MeasureVarRef, AllocateVarRef) | |||
| 66 | 107 | ||||
| 67 | if cret == 0 { | 108 | if cret == 0 { | ||
| 68 | return nil | 109 | return nil | ||
M v4/gtk/gtkcustomsorter.go +60 -2
| @@ -47,7 +47,37 @@ var xNewCustomSorter func(uintptr, uintptr, uintptr) uintptr | |||||
| 47 | func NewCustomSorter(SortFuncVar *glib.CompareDataFunc, UserDataVar uintptr, UserDestroyVar *glib.DestroyNotify) *CustomSorter { | 47 | func NewCustomSorter(SortFuncVar *glib.CompareDataFunc, UserDataVar uintptr, UserDestroyVar *glib.DestroyNotify) *CustomSorter { | ||
| 48 | var cls *CustomSorter | 48 | var cls *CustomSorter | ||
| 49 | 49 | ||||
| 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) | |||
| 51 | 81 | ||||
| 52 | if cret == 0 { | 82 | if cret == 0 { | ||
| 53 | return nil | 83 | return nil | ||
| @@ -70,7 +100,35 @@ var xCustomSorterSetSortFunc func(uintptr, uintptr, uintptr, uintptr) | |||||
| 70 | // called now. | 100 | // called now. | ||
| 71 | func (x *CustomSorter) SetSortFunc(SortFuncVar *glib.CompareDataFunc, UserDataVar uintptr, UserDestroyVar *glib.DestroyNotify) { | 101 | func (x *CustomSorter) SetSortFunc(SortFuncVar *glib.CompareDataFunc, UserDataVar uintptr, UserDestroyVar *glib.DestroyNotify) { | ||
| 72 | 102 | ||||
| 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 | + | UserDestroyVarPtr := uintptr(unsafe.Pointer(UserDestroyVar)) | |||
| 119 | + | var UserDestroyVarRef uintptr | |||
| 120 | + | if cbRefPtr, ok := glib.GetCallback(UserDestroyVarPtr); ok { | |||
| 121 | + | UserDestroyVarRef = cbRefPtr | |||
| 122 | + | } else { | |||
| 123 | + | fcb := func(arg0 uintptr) { | |||
| 124 | + | cbFn := *UserDestroyVar | |||
| 125 | + | cbFn(arg0) | |||
| 126 | + | } | |||
| 127 | + | UserDestroyVarRef = purego.NewCallback(fcb) | |||
| 128 | + | glib.SaveCallback(UserDestroyVarPtr, UserDestroyVarRef) | |||
| 129 | + | } | |||
| 130 | + | ||||
| 131 | + | xCustomSorterSetSortFunc(x.GoPointer(), SortFuncVarRef, UserDataVar, UserDestroyVarRef) | |||
| 74 | 132 | ||||
| 75 | } | 133 | } | ||
| 76 | 134 | ||||
M v4/gtk/gtkdrawingarea.go +29 -1
| @@ -244,7 +244,35 @@ var xDrawingAreaSetDrawFunc func(uintptr, uintptr, uintptr, uintptr) | |||||
| 244 | // on the drawing area. This will cause a redraw and will call @draw_func again. | 244 | // on the drawing area. This will cause a redraw and will call @draw_func again. | ||
| 245 | func (x *DrawingArea) SetDrawFunc(DrawFuncVar *DrawingAreaDrawFunc, UserDataVar uintptr, DestroyVar *glib.DestroyNotify) { | 245 | func (x *DrawingArea) SetDrawFunc(DrawFuncVar *DrawingAreaDrawFunc, UserDataVar uintptr, DestroyVar *glib.DestroyNotify) { | ||
| 246 | 246 | ||||
| 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 | + | DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar)) | |||
| 263 | + | var DestroyVarRef uintptr | |||
| 264 | + | if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok { | |||
| 265 | + | DestroyVarRef = cbRefPtr | |||
| 266 | + | } else { | |||
| 267 | + | fcb := func(arg0 uintptr) { | |||
| 268 | + | cbFn := *DestroyVar | |||
| 269 | + | cbFn(arg0) | |||
| 270 | + | } | |||
| 271 | + | DestroyVarRef = purego.NewCallback(fcb) | |||
| 272 | + | glib.SaveCallback(DestroyVarPtr, DestroyVarRef) | |||
| 273 | + | } | |||
| 274 | + | ||||
| 275 | + | xDrawingAreaSetDrawFunc(x.GoPointer(), DrawFuncVarRef, UserDataVar, DestroyVarRef) | |||
| 248 | 276 | ||||
| 249 | } | 277 | } | ||
| 250 | 278 | ||||
M v4/gtk/gtkentrycompletion.go +27 -1
| @@ -285,7 +285,33 @@ var xEntryCompletionSetMatchFunc func(uintptr, uintptr, uintptr, uintptr) | |||||
| 285 | // should not be in the completion list. | 285 | // should not be in the completion list. | ||
| 286 | func (x *EntryCompletion) SetMatchFunc(FuncVar *EntryCompletionMatchFunc, FuncDataVar uintptr, FuncNotifyVar *glib.DestroyNotify) { | 286 | func (x *EntryCompletion) SetMatchFunc(FuncVar *EntryCompletionMatchFunc, FuncDataVar uintptr, FuncNotifyVar *glib.DestroyNotify) { | ||
| 287 | 287 | ||||
| 288 | - | xEntryCompletionSetMatchFunc(x.GoPointer(), glib.NewCallback(FuncVar), FuncDataVar, glib.NewCallback(FuncNotifyVar)) | 288 | + | FuncVarPtr := uintptr(unsafe.Pointer(FuncVar)) |
| 289 | + | var FuncVarRef uintptr | |||
| 290 | + | if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok { | |||
| 291 | + | FuncVarRef = cbRefPtr | |||
| 292 | + | } else { | |||
| 293 | + | fcb := func(arg0 uintptr, arg1 string, arg2 *TreeIter, arg3 uintptr) bool { | |||
| 294 | + | cbFn := *FuncVar | |||
| 295 | + | return cbFn(arg0, arg1, arg2, arg3) | |||
| 296 | + | } | |||
| 297 | + | FuncVarRef = purego.NewCallback(fcb) | |||
| 298 | + | glib.SaveCallback(FuncVarPtr, FuncVarRef) | |||
| 299 | + | } | |||
| 300 | + | ||||
| 301 | + | FuncNotifyVarPtr := uintptr(unsafe.Pointer(FuncNotifyVar)) | |||
| 302 | + | var FuncNotifyVarRef uintptr | |||
| 303 | + | if cbRefPtr, ok := glib.GetCallback(FuncNotifyVarPtr); ok { | |||
| 304 | + | FuncNotifyVarRef = cbRefPtr | |||
| 305 | + | } else { | |||
| 306 | + | fcb := func(arg0 uintptr) { | |||
| 307 | + | cbFn := *FuncNotifyVar | |||
| 308 | + | cbFn(arg0) | |||
| 309 | + | } | |||
| 310 | + | FuncNotifyVarRef = purego.NewCallback(fcb) | |||
| 311 | + | glib.SaveCallback(FuncNotifyVarPtr, FuncNotifyVarRef) | |||
| 312 | + | } | |||
| 313 | + | ||||
| 314 | + | xEntryCompletionSetMatchFunc(x.GoPointer(), FuncVarRef, FuncDataVar, FuncNotifyVarRef) | |||
| 289 | 315 | ||||
| 290 | } | 316 | } | ||
| 291 | 317 | ||||
M v4/gtk/gtkexpression.go +71 -2
| @@ -181,7 +181,50 @@ var xNewCClosureExpression func(types.GType, uintptr, uint, uintptr, uintptr, ui | |||||
| 181 | func NewCClosureExpression(ValueTypeVar types.GType, MarshalVar *gobject.ClosureMarshal, NParamsVar uint, ParamsVar uintptr, CallbackFuncVar *gobject.Callback, UserDataVar uintptr, UserDestroyVar *gobject.ClosureNotify) *CClosureExpression { | 181 | func NewCClosureExpression(ValueTypeVar types.GType, MarshalVar *gobject.ClosureMarshal, NParamsVar uint, ParamsVar uintptr, CallbackFuncVar *gobject.Callback, UserDataVar uintptr, UserDestroyVar *gobject.ClosureNotify) *CClosureExpression { | ||
| 182 | var cls *CClosureExpression | 182 | var cls *CClosureExpression | ||
| 183 | 183 | ||||
| 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 *Closure, arg1 *Value, arg2 uint, arg3 []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 | + | CallbackFuncVarPtr := uintptr(unsafe.Pointer(CallbackFuncVar)) | |||
| 200 | + | var CallbackFuncVarRef uintptr | |||
| 201 | + | if cbRefPtr, ok := glib.GetCallback(CallbackFuncVarPtr); ok { | |||
| 202 | + | CallbackFuncVarRef = cbRefPtr | |||
| 203 | + | } else { | |||
| 204 | + | fcb := func() { | |||
| 205 | + | cbFn := *CallbackFuncVar | |||
| 206 | + | cbFn() | |||
| 207 | + | } | |||
| 208 | + | CallbackFuncVarRef = purego.NewCallback(fcb) | |||
| 209 | + | glib.SaveCallback(CallbackFuncVarPtr, CallbackFuncVarRef) | |||
| 210 | + | } | |||
| 211 | + | ||||
| 212 | + | var UserDestroyVarRef uintptr | |||
| 213 | + | if UserDestroyVar != nil { | |||
| 214 | + | UserDestroyVarPtr := uintptr(unsafe.Pointer(UserDestroyVar)) | |||
| 215 | + | if cbRefPtr, ok := glib.GetCallback(UserDestroyVarPtr); ok { | |||
| 216 | + | UserDestroyVarRef = cbRefPtr | |||
| 217 | + | } else { | |||
| 218 | + | fcb := func(arg0 uintptr, arg1 *Closure) { | |||
| 219 | + | cbFn := *UserDestroyVar | |||
| 220 | + | cbFn(arg0, arg1) | |||
| 221 | + | } | |||
| 222 | + | UserDestroyVarRef = purego.NewCallback(fcb) | |||
| 223 | + | glib.SaveCallback(UserDestroyVarPtr, UserDestroyVarRef) | |||
| 224 | + | } | |||
| 225 | + | } | |||
| 226 | + | ||||
| 227 | + | cret := xNewCClosureExpression(ValueTypeVar, MarshalVarRef, NParamsVar, ParamsVar, CallbackFuncVarRef, UserDataVar, UserDestroyVarRef) | |||
| 185 | 228 | ||||
| 186 | if cret == 0 { | 229 | if cret == 0 { | ||
| 187 | return nil | 230 | return nil | ||
| @@ -629,7 +672,33 @@ var xExpressionWatch func(uintptr, uintptr, uintptr, uintptr, uintptr) *Expressi | |||||
| 629 | // the @notify will be invoked. | 672 | // the @notify will be invoked. | ||
| 630 | func (x *Expression) Watch(ThisVar *gobject.Object, NotifyVar *ExpressionNotify, UserDataVar uintptr, UserDestroyVar *glib.DestroyNotify) *ExpressionWatch { | 673 | func (x *Expression) Watch(ThisVar *gobject.Object, NotifyVar *ExpressionNotify, UserDataVar uintptr, UserDestroyVar *glib.DestroyNotify) *ExpressionWatch { | ||
| 631 | 674 | ||||
| 632 | - | cret := xExpressionWatch(x.GoPointer(), ThisVar.GoPointer(), glib.NewCallback(NotifyVar), UserDataVar, glib.NewCallback(UserDestroyVar)) | 675 | + | NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar)) |
| 676 | + | var NotifyVarRef uintptr | |||
| 677 | + | if cbRefPtr, ok := glib.GetCallback(NotifyVarPtr); ok { | |||
| 678 | + | NotifyVarRef = cbRefPtr | |||
| 679 | + | } else { | |||
| 680 | + | fcb := func(arg0 uintptr) { | |||
| 681 | + | cbFn := *NotifyVar | |||
| 682 | + | cbFn(arg0) | |||
| 683 | + | } | |||
| 684 | + | NotifyVarRef = purego.NewCallback(fcb) | |||
| 685 | + | glib.SaveCallback(NotifyVarPtr, NotifyVarRef) | |||
| 686 | + | } | |||
| 687 | + | ||||
| 688 | + | UserDestroyVarPtr := uintptr(unsafe.Pointer(UserDestroyVar)) | |||
| 689 | + | var UserDestroyVarRef uintptr | |||
| 690 | + | if cbRefPtr, ok := glib.GetCallback(UserDestroyVarPtr); ok { | |||
| 691 | + | UserDestroyVarRef = cbRefPtr | |||
| 692 | + | } else { | |||
| 693 | + | fcb := func(arg0 uintptr) { | |||
| 694 | + | cbFn := *UserDestroyVar | |||
| 695 | + | cbFn(arg0) | |||
| 696 | + | } | |||
| 697 | + | UserDestroyVarRef = purego.NewCallback(fcb) | |||
| 698 | + | glib.SaveCallback(UserDestroyVarPtr, UserDestroyVarRef) | |||
| 699 | + | } | |||
| 700 | + | ||||
| 701 | + | cret := xExpressionWatch(x.GoPointer(), ThisVar.GoPointer(), NotifyVarRef, UserDataVar, UserDestroyVarRef) | |||
| 633 | return cret | 702 | return cret | ||
| 634 | } | 703 | } | ||
| 635 | 704 | ||||
M v4/gtk/gtkfiledialog.go +128 -8
| @@ -181,7 +181,22 @@ var xFileDialogOpen func(uintptr, uintptr, uintptr, uintptr, uintptr) | |||||
| 181 | // The @callback will be called when the dialog is closed. | 181 | // The @callback will be called when the dialog is closed. | ||
| 182 | func (x *FileDialog) Open(ParentVar *Window, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) { | 182 | func (x *FileDialog) Open(ParentVar *Window, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) { | ||
| 183 | 183 | ||||
| 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 *AsyncResult, 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) | |||
| 185 | 200 | ||||
| 186 | } | 201 | } | ||
| 187 | 202 | ||||
| @@ -221,7 +236,22 @@ var xFileDialogOpenMultiple func(uintptr, uintptr, uintptr, uintptr, uintptr) | |||||
| 221 | // The @callback will be called when the dialog is closed. | 236 | // The @callback will be called when the dialog is closed. | ||
| 222 | func (x *FileDialog) OpenMultiple(ParentVar *Window, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) { | 237 | func (x *FileDialog) OpenMultiple(ParentVar *Window, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) { | ||
| 223 | 238 | ||||
| 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 *AsyncResult, 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) | |||
| 225 | 255 | ||||
| 226 | } | 256 | } | ||
| 227 | 257 | ||||
| @@ -264,7 +294,22 @@ var xFileDialogOpenMultipleTextFiles func(uintptr, uintptr, uintptr, uintptr, ui | |||||
| 264 | // The @callback will be called when the dialog is closed. | 294 | // The @callback will be called when the dialog is closed. | ||
| 265 | func (x *FileDialog) OpenMultipleTextFiles(ParentVar *Window, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) { | 295 | func (x *FileDialog) OpenMultipleTextFiles(ParentVar *Window, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) { | ||
| 266 | 296 | ||||
| 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 *AsyncResult, 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) | |||
| 268 | 313 | ||||
| 269 | } | 314 | } | ||
| 270 | 315 | ||||
| @@ -303,7 +348,22 @@ var xFileDialogOpenTextFile func(uintptr, uintptr, uintptr, uintptr, uintptr) | |||||
| 303 | // The @callback will be called when the dialog is closed. | 348 | // The @callback will be called when the dialog is closed. | ||
| 304 | func (x *FileDialog) OpenTextFile(ParentVar *Window, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) { | 349 | func (x *FileDialog) OpenTextFile(ParentVar *Window, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) { | ||
| 305 | 350 | ||||
| 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 *AsyncResult, 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) | |||
| 307 | 367 | ||||
| 308 | } | 368 | } | ||
| 309 | 369 | ||||
| @@ -346,7 +406,22 @@ var xFileDialogSave func(uintptr, uintptr, uintptr, uintptr, uintptr) | |||||
| 346 | // The @callback will be called when the dialog is closed. | 406 | // The @callback will be called when the dialog is closed. | ||
| 347 | func (x *FileDialog) Save(ParentVar *Window, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) { | 407 | func (x *FileDialog) Save(ParentVar *Window, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) { | ||
| 348 | 408 | ||||
| 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 *AsyncResult, 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) | |||
| 350 | 425 | ||||
| 351 | } | 426 | } | ||
| 352 | 427 | ||||
| @@ -386,7 +461,22 @@ var xFileDialogSaveTextFile func(uintptr, uintptr, uintptr, uintptr, uintptr) | |||||
| 386 | // The @callback will be called when the dialog is closed. | 461 | // The @callback will be called when the dialog is closed. | ||
| 387 | func (x *FileDialog) SaveTextFile(ParentVar *Window, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) { | 462 | func (x *FileDialog) SaveTextFile(ParentVar *Window, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) { | ||
| 388 | 463 | ||||
| 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 *AsyncResult, 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) | |||
| 390 | 480 | ||||
| 391 | } | 481 | } | ||
| 392 | 482 | ||||
| @@ -436,7 +526,22 @@ var xFileDialogSelectFolder func(uintptr, uintptr, uintptr, uintptr, uintptr) | |||||
| 436 | // The @callback will be called when the dialog is closed. | 526 | // The @callback will be called when the dialog is closed. | ||
| 437 | func (x *FileDialog) SelectFolder(ParentVar *Window, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) { | 527 | func (x *FileDialog) SelectFolder(ParentVar *Window, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) { | ||
| 438 | 528 | ||||
| 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 *AsyncResult, 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) | |||
| 440 | 545 | ||||
| 441 | } | 546 | } | ||
| 442 | 547 | ||||
| @@ -477,7 +582,22 @@ var xFileDialogSelectMultipleFolders func(uintptr, uintptr, uintptr, uintptr, ui | |||||
| 477 | // The @callback will be called when the dialog is closed. | 582 | // The @callback will be called when the dialog is closed. | ||
| 478 | func (x *FileDialog) SelectMultipleFolders(ParentVar *Window, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) { | 583 | func (x *FileDialog) SelectMultipleFolders(ParentVar *Window, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) { | ||
| 479 | 584 | ||||
| 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 *AsyncResult, 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) | |||
| 481 | 601 | ||||
| 482 | } | 602 | } | ||
| 483 | 603 | ||||
M v4/gtk/gtkfilelauncher.go +32 -2
| @@ -108,7 +108,22 @@ var xFileLauncherLaunch func(uintptr, uintptr, uintptr, uintptr, uintptr) | |||||
| 108 | // This may present an app chooser dialog to the user. | 108 | // This may present an app chooser dialog to the user. | ||
| 109 | func (x *FileLauncher) Launch(ParentVar *Window, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) { | 109 | func (x *FileLauncher) Launch(ParentVar *Window, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) { | ||
| 110 | 110 | ||||
| 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 *AsyncResult, 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) | |||
| 112 | 127 | ||||
| 113 | } | 128 | } | ||
| 114 | 129 | ||||
| @@ -135,7 +150,22 @@ var xFileLauncherOpenContainingFolder func(uintptr, uintptr, uintptr, uintptr, u | |||||
| 135 | // is e.g. a http:// uri. | 150 | // is e.g. a http:// uri. | ||
| 136 | func (x *FileLauncher) OpenContainingFolder(ParentVar *Window, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) { | 151 | func (x *FileLauncher) OpenContainingFolder(ParentVar *Window, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) { | ||
| 137 | 152 | ||||
| 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 *AsyncResult, 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) | |||
| 139 | 169 | ||||
| 140 | } | 170 | } | ||
| 141 | 171 | ||||
M v4/gtk/gtkflowbox.go +99 -4
| @@ -198,7 +198,33 @@ var xFlowBoxBindModel func(uintptr, uintptr, uintptr, uintptr, uintptr) | |||||
| 198 | // should be implemented by the model. | 198 | // should be implemented by the model. | ||
| 199 | func (x *FlowBox) BindModel(ModelVar gio.ListModel, CreateWidgetFuncVar *FlowBoxCreateWidgetFunc, UserDataVar uintptr, UserDataFreeFuncVar *glib.DestroyNotify) { | 199 | func (x *FlowBox) BindModel(ModelVar gio.ListModel, CreateWidgetFuncVar *FlowBoxCreateWidgetFunc, UserDataVar uintptr, UserDataFreeFuncVar *glib.DestroyNotify) { | ||
| 200 | 200 | ||||
| 201 | - | xFlowBoxBindModel(x.GoPointer(), ModelVar.GoPointer(), glib.NewCallback(CreateWidgetFuncVar), UserDataVar, glib.NewCallback(UserDataFreeFuncVar)) | 201 | + | CreateWidgetFuncVarPtr := uintptr(unsafe.Pointer(CreateWidgetFuncVar)) |
| 202 | + | var CreateWidgetFuncVarRef uintptr | |||
| 203 | + | if cbRefPtr, ok := glib.GetCallback(CreateWidgetFuncVarPtr); ok { | |||
| 204 | + | CreateWidgetFuncVarRef = cbRefPtr | |||
| 205 | + | } else { | |||
| 206 | + | fcb := func(arg0 uintptr, arg1 uintptr) uintptr { | |||
| 207 | + | cbFn := *CreateWidgetFuncVar | |||
| 208 | + | return cbFn(arg0, arg1) | |||
| 209 | + | } | |||
| 210 | + | CreateWidgetFuncVarRef = purego.NewCallback(fcb) | |||
| 211 | + | glib.SaveCallback(CreateWidgetFuncVarPtr, CreateWidgetFuncVarRef) | |||
| 212 | + | } | |||
| 213 | + | ||||
| 214 | + | UserDataFreeFuncVarPtr := uintptr(unsafe.Pointer(UserDataFreeFuncVar)) | |||
| 215 | + | var UserDataFreeFuncVarRef uintptr | |||
| 216 | + | if cbRefPtr, ok := glib.GetCallback(UserDataFreeFuncVarPtr); ok { | |||
| 217 | + | UserDataFreeFuncVarRef = cbRefPtr | |||
| 218 | + | } else { | |||
| 219 | + | fcb := func(arg0 uintptr) { | |||
| 220 | + | cbFn := *UserDataFreeFuncVar | |||
| 221 | + | cbFn(arg0) | |||
| 222 | + | } | |||
| 223 | + | UserDataFreeFuncVarRef = purego.NewCallback(fcb) | |||
| 224 | + | glib.SaveCallback(UserDataFreeFuncVarPtr, UserDataFreeFuncVarRef) | |||
| 225 | + | } | |||
| 226 | + | ||||
| 227 | + | xFlowBoxBindModel(x.GoPointer(), ModelVar.GoPointer(), CreateWidgetFuncVarRef, UserDataVar, UserDataFreeFuncVarRef) | |||
| 202 | 228 | ||||
| 203 | } | 229 | } | ||
| 204 | 230 | ||||
| @@ -414,7 +440,20 @@ var xFlowBoxSelectedForeach func(uintptr, uintptr, uintptr) | |||||
| 414 | // this function. | 440 | // this function. | ||
| 415 | func (x *FlowBox) SelectedForeach(FuncVar *FlowBoxForeachFunc, DataVar uintptr) { | 441 | func (x *FlowBox) SelectedForeach(FuncVar *FlowBoxForeachFunc, DataVar uintptr) { | ||
| 416 | 442 | ||||
| 417 | - | xFlowBoxSelectedForeach(x.GoPointer(), glib.NewCallback(FuncVar), DataVar) | 443 | + | FuncVarPtr := uintptr(unsafe.Pointer(FuncVar)) |
| 444 | + | var FuncVarRef uintptr | |||
| 445 | + | if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok { | |||
| 446 | + | FuncVarRef = cbRefPtr | |||
| 447 | + | } else { | |||
| 448 | + | fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) { | |||
| 449 | + | cbFn := *FuncVar | |||
| 450 | + | cbFn(arg0, arg1, arg2) | |||
| 451 | + | } | |||
| 452 | + | FuncVarRef = purego.NewCallback(fcb) | |||
| 453 | + | glib.SaveCallback(FuncVarPtr, FuncVarRef) | |||
| 454 | + | } | |||
| 455 | + | ||||
| 456 | + | xFlowBoxSelectedForeach(x.GoPointer(), FuncVarRef, DataVar) | |||
| 418 | 457 | ||||
| 419 | } | 458 | } | ||
| 420 | 459 | ||||
| @@ -454,7 +493,35 @@ var xFlowBoxSetFilterFunc func(uintptr, uintptr, uintptr, uintptr) | |||||
| 454 | // (see [method@Gtk.FlowBox.bind_model]). | 493 | // (see [method@Gtk.FlowBox.bind_model]). | ||
| 455 | func (x *FlowBox) SetFilterFunc(FilterFuncVar *FlowBoxFilterFunc, UserDataVar uintptr, DestroyVar *glib.DestroyNotify) { | 494 | func (x *FlowBox) SetFilterFunc(FilterFuncVar *FlowBoxFilterFunc, UserDataVar uintptr, DestroyVar *glib.DestroyNotify) { | ||
| 456 | 495 | ||||
| 457 | - | xFlowBoxSetFilterFunc(x.GoPointer(), glib.NewCallbackNullable(FilterFuncVar), UserDataVar, glib.NewCallback(DestroyVar)) | 496 | + | var FilterFuncVarRef uintptr |
| 497 | + | if FilterFuncVar != nil { | |||
| 498 | + | FilterFuncVarPtr := uintptr(unsafe.Pointer(FilterFuncVar)) | |||
| 499 | + | if cbRefPtr, ok := glib.GetCallback(FilterFuncVarPtr); ok { | |||
| 500 | + | FilterFuncVarRef = cbRefPtr | |||
| 501 | + | } else { | |||
| 502 | + | fcb := func(arg0 uintptr, arg1 uintptr) bool { | |||
| 503 | + | cbFn := *FilterFuncVar | |||
| 504 | + | return cbFn(arg0, arg1) | |||
| 505 | + | } | |||
| 506 | + | FilterFuncVarRef = purego.NewCallback(fcb) | |||
| 507 | + | glib.SaveCallback(FilterFuncVarPtr, FilterFuncVarRef) | |||
| 508 | + | } | |||
| 509 | + | } | |||
| 510 | + | ||||
| 511 | + | DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar)) | |||
| 512 | + | var DestroyVarRef uintptr | |||
| 513 | + | if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok { | |||
| 514 | + | DestroyVarRef = cbRefPtr | |||
| 515 | + | } else { | |||
| 516 | + | fcb := func(arg0 uintptr) { | |||
| 517 | + | cbFn := *DestroyVar | |||
| 518 | + | cbFn(arg0) | |||
| 519 | + | } | |||
| 520 | + | DestroyVarRef = purego.NewCallback(fcb) | |||
| 521 | + | glib.SaveCallback(DestroyVarPtr, DestroyVarRef) | |||
| 522 | + | } | |||
| 523 | + | ||||
| 524 | + | xFlowBoxSetFilterFunc(x.GoPointer(), FilterFuncVarRef, UserDataVar, DestroyVarRef) | |||
| 458 | 525 | ||||
| 459 | } | 526 | } | ||
| 460 | 527 | ||||
| @@ -544,7 +611,35 @@ var xFlowBoxSetSortFunc func(uintptr, uintptr, uintptr, uintptr) | |||||
| 544 | // (see [method@Gtk.FlowBox.bind_model]). | 611 | // (see [method@Gtk.FlowBox.bind_model]). | ||
| 545 | func (x *FlowBox) SetSortFunc(SortFuncVar *FlowBoxSortFunc, UserDataVar uintptr, DestroyVar *glib.DestroyNotify) { | 612 | func (x *FlowBox) SetSortFunc(SortFuncVar *FlowBoxSortFunc, UserDataVar uintptr, DestroyVar *glib.DestroyNotify) { | ||
| 546 | 613 | ||||
| 547 | - | xFlowBoxSetSortFunc(x.GoPointer(), glib.NewCallbackNullable(SortFuncVar), UserDataVar, glib.NewCallback(DestroyVar)) | 614 | + | var SortFuncVarRef uintptr |
| 615 | + | if SortFuncVar != nil { | |||
| 616 | + | SortFuncVarPtr := uintptr(unsafe.Pointer(SortFuncVar)) | |||
| 617 | + | if cbRefPtr, ok := glib.GetCallback(SortFuncVarPtr); ok { | |||
| 618 | + | SortFuncVarRef = cbRefPtr | |||
| 619 | + | } else { | |||
| 620 | + | fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int { | |||
| 621 | + | cbFn := *SortFuncVar | |||
| 622 | + | return cbFn(arg0, arg1, arg2) | |||
| 623 | + | } | |||
| 624 | + | SortFuncVarRef = purego.NewCallback(fcb) | |||
| 625 | + | glib.SaveCallback(SortFuncVarPtr, SortFuncVarRef) | |||
| 626 | + | } | |||
| 627 | + | } | |||
| 628 | + | ||||
| 629 | + | DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar)) | |||
| 630 | + | var DestroyVarRef uintptr | |||
| 631 | + | if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok { | |||
| 632 | + | DestroyVarRef = cbRefPtr | |||
| 633 | + | } else { | |||
| 634 | + | fcb := func(arg0 uintptr) { | |||
| 635 | + | cbFn := *DestroyVar | |||
| 636 | + | cbFn(arg0) | |||
| 637 | + | } | |||
| 638 | + | DestroyVarRef = purego.NewCallback(fcb) | |||
| 639 | + | glib.SaveCallback(DestroyVarPtr, DestroyVarRef) | |||
| 640 | + | } | |||
| 641 | + | ||||
| 642 | + | xFlowBoxSetSortFunc(x.GoPointer(), SortFuncVarRef, UserDataVar, DestroyVarRef) | |||
| 548 | 643 | ||||
| 549 | } | 644 | } | ||
| 550 | 645 | ||||
M v4/gtk/gtkfontdialog.go +64 -4
| @@ -76,7 +76,22 @@ var xFontDialogChooseFace func(uintptr, uintptr, uintptr, uintptr, uintptr, uint | |||||
| 76 | // A font face represents a font family and style, but no specific font size. | 76 | // A font face represents a font family and style, but no specific font size. | ||
| 77 | func (x *FontDialog) ChooseFace(ParentVar *Window, InitialValueVar *pango.FontFace, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) { | 77 | func (x *FontDialog) ChooseFace(ParentVar *Window, InitialValueVar *pango.FontFace, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) { | ||
| 78 | 78 | ||||
| 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 *AsyncResult, 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) | |||
| 80 | 95 | ||||
| 81 | } | 96 | } | ||
| 82 | 97 | ||||
| @@ -111,7 +126,22 @@ var xFontDialogChooseFamily func(uintptr, uintptr, uintptr, uintptr, uintptr, ui | |||||
| 111 | // The font chooser dialog will be set up for selecting a font family. | 126 | // The font chooser dialog will be set up for selecting a font family. | ||
| 112 | func (x *FontDialog) ChooseFamily(ParentVar *Window, InitialValueVar *pango.FontFamily, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) { | 127 | func (x *FontDialog) ChooseFamily(ParentVar *Window, InitialValueVar *pango.FontFamily, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) { | ||
| 113 | 128 | ||||
| 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 *AsyncResult, 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) | |||
| 115 | 145 | ||||
| 116 | } | 146 | } | ||
| 117 | 147 | ||||
| @@ -149,7 +179,22 @@ var xFontDialogChooseFont func(uintptr, uintptr, *pango.FontDescription, uintptr | |||||
| 149 | // use [method@Gtk.FontDialog.choose_font_and_features] instead. | 179 | // use [method@Gtk.FontDialog.choose_font_and_features] instead. | ||
| 150 | func (x *FontDialog) ChooseFont(ParentVar *Window, InitialValueVar *pango.FontDescription, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) { | 180 | func (x *FontDialog) ChooseFont(ParentVar *Window, InitialValueVar *pango.FontDescription, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) { | ||
| 151 | 181 | ||||
| 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 *AsyncResult, 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) | |||
| 153 | 198 | ||||
| 154 | } | 199 | } | ||
| 155 | 200 | ||||
| @@ -164,7 +209,22 @@ var xFontDialogChooseFontAndFeatures func(uintptr, uintptr, *pango.FontDescripti | |||||
| 164 | // enabling glyph variants or ligatures. | 209 | // enabling glyph variants or ligatures. | ||
| 165 | func (x *FontDialog) ChooseFontAndFeatures(ParentVar *Window, InitialValueVar *pango.FontDescription, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) { | 210 | func (x *FontDialog) ChooseFontAndFeatures(ParentVar *Window, InitialValueVar *pango.FontDescription, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) { | ||
| 166 | 211 | ||||
| 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 *AsyncResult, 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) | |||
| 168 | 228 | ||||
| 169 | } | 229 | } | ||
| 170 | 230 | ||||
M v4/gtk/gtkiconview.go +14 -1
| @@ -536,7 +536,20 @@ var xIconViewSelectedForeach func(uintptr, uintptr, uintptr) | |||||
| 536 | // selection cannot be modified from within this function. | 536 | // selection cannot be modified from within this function. | ||
| 537 | func (x *IconView) SelectedForeach(FuncVar *IconViewForeachFunc, DataVar uintptr) { | 537 | func (x *IconView) SelectedForeach(FuncVar *IconViewForeachFunc, DataVar uintptr) { | ||
| 538 | 538 | ||||
| 539 | - | xIconViewSelectedForeach(x.GoPointer(), glib.NewCallback(FuncVar), DataVar) | 539 | + | FuncVarPtr := uintptr(unsafe.Pointer(FuncVar)) |
| 540 | + | var FuncVarRef uintptr | |||
| 541 | + | if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok { | |||
| 542 | + | FuncVarRef = cbRefPtr | |||
| 543 | + | } else { | |||
| 544 | + | fcb := func(arg0 uintptr, arg1 *TreePath, arg2 uintptr) { | |||
| 545 | + | cbFn := *FuncVar | |||
| 546 | + | cbFn(arg0, arg1, arg2) | |||
| 547 | + | } | |||
| 548 | + | FuncVarRef = purego.NewCallback(fcb) | |||
| 549 | + | glib.SaveCallback(FuncVarPtr, FuncVarRef) | |||
| 550 | + | } | |||
| 551 | + | ||||
| 552 | + | xIconViewSelectedForeach(x.GoPointer(), FuncVarRef, DataVar) | |||
| 540 | 553 | ||||
| 541 | } | 554 | } | ||
| 542 | 555 | ||||
M v4/gtk/gtklistbox.go +130 -5
| @@ -209,7 +209,35 @@ var xListBoxBindModel func(uintptr, uintptr, uintptr, uintptr, uintptr) | |||||
| 209 | // should be implemented by the model. | 209 | // should be implemented by the model. | ||
| 210 | func (x *ListBox) BindModel(ModelVar gio.ListModel, CreateWidgetFuncVar *ListBoxCreateWidgetFunc, UserDataVar uintptr, UserDataFreeFuncVar *glib.DestroyNotify) { | 210 | func (x *ListBox) BindModel(ModelVar gio.ListModel, CreateWidgetFuncVar *ListBoxCreateWidgetFunc, UserDataVar uintptr, UserDataFreeFuncVar *glib.DestroyNotify) { | ||
| 211 | 211 | ||||
| 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 | + | UserDataFreeFuncVarPtr := uintptr(unsafe.Pointer(UserDataFreeFuncVar)) | |||
| 228 | + | var UserDataFreeFuncVarRef uintptr | |||
| 229 | + | if cbRefPtr, ok := glib.GetCallback(UserDataFreeFuncVarPtr); ok { | |||
| 230 | + | UserDataFreeFuncVarRef = cbRefPtr | |||
| 231 | + | } else { | |||
| 232 | + | fcb := func(arg0 uintptr) { | |||
| 233 | + | cbFn := *UserDataFreeFuncVar | |||
| 234 | + | cbFn(arg0) | |||
| 235 | + | } | |||
| 236 | + | UserDataFreeFuncVarRef = purego.NewCallback(fcb) | |||
| 237 | + | glib.SaveCallback(UserDataFreeFuncVarPtr, UserDataFreeFuncVarRef) | |||
| 238 | + | } | |||
| 239 | + | ||||
| 240 | + | xListBoxBindModel(x.GoPointer(), ModelVar.GoPointer(), CreateWidgetFuncVarRef, UserDataVar, UserDataFreeFuncVarRef) | |||
| 213 | 241 | ||||
| 214 | } | 242 | } | ||
| 215 | 243 | ||||
| @@ -475,7 +503,20 @@ var xListBoxSelectedForeach func(uintptr, uintptr, uintptr) | |||||
| 475 | // Note that the selection cannot be modified from within this function. | 503 | // Note that the selection cannot be modified from within this function. | ||
| 476 | func (x *ListBox) SelectedForeach(FuncVar *ListBoxForeachFunc, DataVar uintptr) { | 504 | func (x *ListBox) SelectedForeach(FuncVar *ListBoxForeachFunc, DataVar uintptr) { | ||
| 477 | 505 | ||||
| 478 | - | xListBoxSelectedForeach(x.GoPointer(), glib.NewCallback(FuncVar), DataVar) | 506 | + | FuncVarPtr := uintptr(unsafe.Pointer(FuncVar)) |
| 507 | + | var FuncVarRef uintptr | |||
| 508 | + | if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok { | |||
| 509 | + | FuncVarRef = cbRefPtr | |||
| 510 | + | } else { | |||
| 511 | + | fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) { | |||
| 512 | + | cbFn := *FuncVar | |||
| 513 | + | cbFn(arg0, arg1, arg2) | |||
| 514 | + | } | |||
| 515 | + | FuncVarRef = purego.NewCallback(fcb) | |||
| 516 | + | glib.SaveCallback(FuncVarPtr, FuncVarRef) | |||
| 517 | + | } | |||
| 518 | + | ||||
| 519 | + | xListBoxSelectedForeach(x.GoPointer(), FuncVarRef, DataVar) | |||
| 479 | 520 | ||||
| 480 | } | 521 | } | ||
| 481 | 522 | ||||
| @@ -524,7 +565,35 @@ var xListBoxSetFilterFunc func(uintptr, uintptr, uintptr, uintptr) | |||||
| 524 | // (see [method@Gtk.ListBox.bind_model]). | 565 | // (see [method@Gtk.ListBox.bind_model]). | ||
| 525 | func (x *ListBox) SetFilterFunc(FilterFuncVar *ListBoxFilterFunc, UserDataVar uintptr, DestroyVar *glib.DestroyNotify) { | 566 | func (x *ListBox) SetFilterFunc(FilterFuncVar *ListBoxFilterFunc, UserDataVar uintptr, DestroyVar *glib.DestroyNotify) { | ||
| 526 | 567 | ||||
| 527 | - | xListBoxSetFilterFunc(x.GoPointer(), glib.NewCallbackNullable(FilterFuncVar), UserDataVar, glib.NewCallback(DestroyVar)) | 568 | + | var FilterFuncVarRef uintptr |
| 569 | + | if FilterFuncVar != nil { | |||
| 570 | + | FilterFuncVarPtr := uintptr(unsafe.Pointer(FilterFuncVar)) | |||
| 571 | + | if cbRefPtr, ok := glib.GetCallback(FilterFuncVarPtr); ok { | |||
| 572 | + | FilterFuncVarRef = cbRefPtr | |||
| 573 | + | } else { | |||
| 574 | + | fcb := func(arg0 uintptr, arg1 uintptr) bool { | |||
| 575 | + | cbFn := *FilterFuncVar | |||
| 576 | + | return cbFn(arg0, arg1) | |||
| 577 | + | } | |||
| 578 | + | FilterFuncVarRef = purego.NewCallback(fcb) | |||
| 579 | + | glib.SaveCallback(FilterFuncVarPtr, FilterFuncVarRef) | |||
| 580 | + | } | |||
| 581 | + | } | |||
| 582 | + | ||||
| 583 | + | DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar)) | |||
| 584 | + | var DestroyVarRef uintptr | |||
| 585 | + | if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok { | |||
| 586 | + | DestroyVarRef = cbRefPtr | |||
| 587 | + | } else { | |||
| 588 | + | fcb := func(arg0 uintptr) { | |||
| 589 | + | cbFn := *DestroyVar | |||
| 590 | + | cbFn(arg0) | |||
| 591 | + | } | |||
| 592 | + | DestroyVarRef = purego.NewCallback(fcb) | |||
| 593 | + | glib.SaveCallback(DestroyVarPtr, DestroyVarRef) | |||
| 594 | + | } | |||
| 595 | + | ||||
| 596 | + | xListBoxSetFilterFunc(x.GoPointer(), FilterFuncVarRef, UserDataVar, DestroyVarRef) | |||
| 528 | 597 | ||||
| 529 | } | 598 | } | ||
| 530 | 599 | ||||
| @@ -557,7 +626,35 @@ var xListBoxSetHeaderFunc func(uintptr, uintptr, uintptr, uintptr) | |||||
| 557 | // [method@Gtk.ListBox.invalidate_headers] is called. | 626 | // [method@Gtk.ListBox.invalidate_headers] is called. | ||
| 558 | func (x *ListBox) SetHeaderFunc(UpdateHeaderVar *ListBoxUpdateHeaderFunc, UserDataVar uintptr, DestroyVar *glib.DestroyNotify) { | 627 | func (x *ListBox) SetHeaderFunc(UpdateHeaderVar *ListBoxUpdateHeaderFunc, UserDataVar uintptr, DestroyVar *glib.DestroyNotify) { | ||
| 559 | 628 | ||||
| 560 | - | xListBoxSetHeaderFunc(x.GoPointer(), glib.NewCallbackNullable(UpdateHeaderVar), UserDataVar, glib.NewCallback(DestroyVar)) | 629 | + | var UpdateHeaderVarRef uintptr |
| 630 | + | if UpdateHeaderVar != nil { | |||
| 631 | + | UpdateHeaderVarPtr := uintptr(unsafe.Pointer(UpdateHeaderVar)) | |||
| 632 | + | if cbRefPtr, ok := glib.GetCallback(UpdateHeaderVarPtr); ok { | |||
| 633 | + | UpdateHeaderVarRef = cbRefPtr | |||
| 634 | + | } else { | |||
| 635 | + | fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) { | |||
| 636 | + | cbFn := *UpdateHeaderVar | |||
| 637 | + | cbFn(arg0, arg1, arg2) | |||
| 638 | + | } | |||
| 639 | + | UpdateHeaderVarRef = purego.NewCallback(fcb) | |||
| 640 | + | glib.SaveCallback(UpdateHeaderVarPtr, UpdateHeaderVarRef) | |||
| 641 | + | } | |||
| 642 | + | } | |||
| 643 | + | ||||
| 644 | + | DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar)) | |||
| 645 | + | var DestroyVarRef uintptr | |||
| 646 | + | if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok { | |||
| 647 | + | DestroyVarRef = cbRefPtr | |||
| 648 | + | } else { | |||
| 649 | + | fcb := func(arg0 uintptr) { | |||
| 650 | + | cbFn := *DestroyVar | |||
| 651 | + | cbFn(arg0) | |||
| 652 | + | } | |||
| 653 | + | DestroyVarRef = purego.NewCallback(fcb) | |||
| 654 | + | glib.SaveCallback(DestroyVarPtr, DestroyVarRef) | |||
| 655 | + | } | |||
| 656 | + | ||||
| 657 | + | xListBoxSetHeaderFunc(x.GoPointer(), UpdateHeaderVarRef, UserDataVar, DestroyVarRef) | |||
| 561 | 658 | ||||
| 562 | } | 659 | } | ||
| 563 | 660 | ||||
| @@ -606,7 +703,35 @@ var xListBoxSetSortFunc func(uintptr, uintptr, uintptr, uintptr) | |||||
| 606 | // (see [method@Gtk.ListBox.bind_model]). | 703 | // (see [method@Gtk.ListBox.bind_model]). | ||
| 607 | func (x *ListBox) SetSortFunc(SortFuncVar *ListBoxSortFunc, UserDataVar uintptr, DestroyVar *glib.DestroyNotify) { | 704 | func (x *ListBox) SetSortFunc(SortFuncVar *ListBoxSortFunc, UserDataVar uintptr, DestroyVar *glib.DestroyNotify) { | ||
| 608 | 705 | ||||
| 609 | - | xListBoxSetSortFunc(x.GoPointer(), glib.NewCallbackNullable(SortFuncVar), UserDataVar, glib.NewCallback(DestroyVar)) | 706 | + | var SortFuncVarRef uintptr |
| 707 | + | if SortFuncVar != nil { | |||
| 708 | + | SortFuncVarPtr := uintptr(unsafe.Pointer(SortFuncVar)) | |||
| 709 | + | if cbRefPtr, ok := glib.GetCallback(SortFuncVarPtr); ok { | |||
| 710 | + | SortFuncVarRef = cbRefPtr | |||
| 711 | + | } else { | |||
| 712 | + | fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) int { | |||
| 713 | + | cbFn := *SortFuncVar | |||
| 714 | + | return cbFn(arg0, arg1, arg2) | |||
| 715 | + | } | |||
| 716 | + | SortFuncVarRef = purego.NewCallback(fcb) | |||
| 717 | + | glib.SaveCallback(SortFuncVarPtr, SortFuncVarRef) | |||
| 718 | + | } | |||
| 719 | + | } | |||
| 720 | + | ||||
| 721 | + | DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar)) | |||
| 722 | + | var DestroyVarRef uintptr | |||
| 723 | + | if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok { | |||
| 724 | + | DestroyVarRef = cbRefPtr | |||
| 725 | + | } else { | |||
| 726 | + | fcb := func(arg0 uintptr) { | |||
| 727 | + | cbFn := *DestroyVar | |||
| 728 | + | cbFn(arg0) | |||
| 729 | + | } | |||
| 730 | + | DestroyVarRef = purego.NewCallback(fcb) | |||
| 731 | + | glib.SaveCallback(DestroyVarPtr, DestroyVarRef) | |||
| 732 | + | } | |||
| 733 | + | ||||
| 734 | + | xListBoxSetSortFunc(x.GoPointer(), SortFuncVarRef, UserDataVar, DestroyVarRef) | |||
| 610 | 735 | ||||
| 611 | } | 736 | } | ||
| 612 | 737 | ||||
M v4/gtk/gtkmaplistmodel.go +58 -2
| @@ -86,7 +86,35 @@ var xNewMapListModel func(uintptr, uintptr, uintptr, uintptr) uintptr | |||||
| 86 | func NewMapListModel(ModelVar gio.ListModel, MapFuncVar *MapListModelMapFunc, UserDataVar uintptr, UserDestroyVar *glib.DestroyNotify) *MapListModel { | 86 | func NewMapListModel(ModelVar gio.ListModel, MapFuncVar *MapListModelMapFunc, UserDataVar uintptr, UserDestroyVar *glib.DestroyNotify) *MapListModel { | ||
| 87 | var cls *MapListModel | 87 | var cls *MapListModel | ||
| 88 | 88 | ||||
| 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 | + | UserDestroyVarPtr := uintptr(unsafe.Pointer(UserDestroyVar)) | |||
| 105 | + | var UserDestroyVarRef uintptr | |||
| 106 | + | if cbRefPtr, ok := glib.GetCallback(UserDestroyVarPtr); ok { | |||
| 107 | + | UserDestroyVarRef = cbRefPtr | |||
| 108 | + | } else { | |||
| 109 | + | fcb := func(arg0 uintptr) { | |||
| 110 | + | cbFn := *UserDestroyVar | |||
| 111 | + | cbFn(arg0) | |||
| 112 | + | } | |||
| 113 | + | UserDestroyVarRef = purego.NewCallback(fcb) | |||
| 114 | + | glib.SaveCallback(UserDestroyVarPtr, UserDestroyVarRef) | |||
| 115 | + | } | |||
| 116 | + | ||||
| 117 | + | cret := xNewMapListModel(ModelVar.GoPointer(), MapFuncVarRef, UserDataVar, UserDestroyVarRef) | |||
| 90 | 118 | ||||
| 91 | if cret == 0 { | 119 | if cret == 0 { | ||
| 92 | return nil | 120 | return nil | ||
| @@ -137,7 +165,35 @@ var xMapListModelSetMapFunc func(uintptr, uintptr, uintptr, uintptr) | |||||
| 137 | // function returns items of the appropriate type. | 165 | // function returns items of the appropriate type. | ||
| 138 | func (x *MapListModel) SetMapFunc(MapFuncVar *MapListModelMapFunc, UserDataVar uintptr, UserDestroyVar *glib.DestroyNotify) { | 166 | func (x *MapListModel) SetMapFunc(MapFuncVar *MapListModelMapFunc, UserDataVar uintptr, UserDestroyVar *glib.DestroyNotify) { | ||
| 139 | 167 | ||||
| 140 | - | xMapListModelSetMapFunc(x.GoPointer(), glib.NewCallbackNullable(MapFuncVar), UserDataVar, glib.NewCallback(UserDestroyVar)) | 168 | + | var MapFuncVarRef uintptr |
| 169 | + | if MapFuncVar != nil { | |||
| 170 | + | MapFuncVarPtr := uintptr(unsafe.Pointer(MapFuncVar)) | |||
| 171 | + | if cbRefPtr, ok := glib.GetCallback(MapFuncVarPtr); ok { | |||
| 172 | + | MapFuncVarRef = cbRefPtr | |||
| 173 | + | } else { | |||
| 174 | + | fcb := func(arg0 uintptr, arg1 uintptr) uintptr { | |||
| 175 | + | cbFn := *MapFuncVar | |||
| 176 | + | return cbFn(arg0, arg1) | |||
| 177 | + | } | |||
| 178 | + | MapFuncVarRef = purego.NewCallback(fcb) | |||
| 179 | + | glib.SaveCallback(MapFuncVarPtr, MapFuncVarRef) | |||
| 180 | + | } | |||
| 181 | + | } | |||
| 182 | + | ||||
| 183 | + | UserDestroyVarPtr := uintptr(unsafe.Pointer(UserDestroyVar)) | |||
| 184 | + | var UserDestroyVarRef uintptr | |||
| 185 | + | if cbRefPtr, ok := glib.GetCallback(UserDestroyVarPtr); ok { | |||
| 186 | + | UserDestroyVarRef = cbRefPtr | |||
| 187 | + | } else { | |||
| 188 | + | fcb := func(arg0 uintptr) { | |||
| 189 | + | cbFn := *UserDestroyVar | |||
| 190 | + | cbFn(arg0) | |||
| 191 | + | } | |||
| 192 | + | UserDestroyVarRef = purego.NewCallback(fcb) | |||
| 193 | + | glib.SaveCallback(UserDestroyVarPtr, UserDestroyVarRef) | |||
| 194 | + | } | |||
| 195 | + | ||||
| 196 | + | xMapListModelSetMapFunc(x.GoPointer(), MapFuncVarRef, UserDataVar, UserDestroyVarRef) | |||
| 141 | 197 | ||||
| 142 | } | 198 | } | ||
| 143 | 199 | ||||
M v4/gtk/gtkmenubutton.go +31 -1
| @@ -347,7 +347,37 @@ var xMenuButtonSetCreatePopupFunc func(uintptr, uintptr, uintptr, uintptr) | |||||
| 347 | // @menu_button. Instead, this can be done manually in @func. | 347 | // @menu_button. Instead, this can be done manually in @func. | ||
| 348 | func (x *MenuButton) SetCreatePopupFunc(FuncVar *MenuButtonCreatePopupFunc, UserDataVar uintptr, DestroyNotifyVar *glib.DestroyNotify) { | 348 | func (x *MenuButton) SetCreatePopupFunc(FuncVar *MenuButtonCreatePopupFunc, UserDataVar uintptr, DestroyNotifyVar *glib.DestroyNotify) { | ||
| 349 | 349 | ||||
| 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) | |||
| 351 | 381 | ||||
| 352 | } | 382 | } | ||
| 353 | 383 | ||||
M v4/gtk/gtkprintdialog.go +48 -3
| @@ -226,7 +226,22 @@ var xPrintDialogPrint func(uintptr, uintptr, *PrintSetup, uintptr, uintptr, uint | |||||
| 226 | // The @callback will be called when the printing is done. | 226 | // The @callback will be called when the printing is done. | ||
| 227 | func (x *PrintDialog) Print(ParentVar *Window, SetupVar *PrintSetup, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) { | 227 | func (x *PrintDialog) Print(ParentVar *Window, SetupVar *PrintSetup, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) { | ||
| 228 | 228 | ||||
| 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 *AsyncResult, 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) | |||
| 230 | 245 | ||||
| 231 | } | 246 | } | ||
| 232 | 247 | ||||
| @@ -238,7 +253,22 @@ var xPrintDialogPrintFile func(uintptr, uintptr, *PrintSetup, uintptr, uintptr, | |||||
| 238 | // Otherwise, it will attempt to print directly, without user interaction. | 253 | // Otherwise, it will attempt to print directly, without user interaction. | ||
| 239 | func (x *PrintDialog) PrintFile(ParentVar *Window, SetupVar *PrintSetup, FileVar gio.File, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) { | 254 | func (x *PrintDialog) PrintFile(ParentVar *Window, SetupVar *PrintSetup, FileVar gio.File, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) { | ||
| 240 | 255 | ||||
| 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 *AsyncResult, 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) | |||
| 242 | 272 | ||||
| 243 | } | 273 | } | ||
| 244 | 274 | ||||
| @@ -359,7 +389,22 @@ var xPrintDialogSetup func(uintptr, uintptr, uintptr, uintptr, uintptr) | |||||
| 359 | // to do the printing without further user interaction. | 389 | // to do the printing without further user interaction. | ||
| 360 | func (x *PrintDialog) Setup(ParentVar *Window, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) { | 390 | func (x *PrintDialog) Setup(ParentVar *Window, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) { | ||
| 361 | 391 | ||||
| 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 *AsyncResult, 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) | |||
| 363 | 408 | ||||
| 364 | } | 409 | } | ||
| 365 | 410 | ||||
M v4/gtk/gtkprinter.go +27 -1
| @@ -75,7 +75,33 @@ var xEnumeratePrinters func(uintptr, uintptr, uintptr, bool) | |||||
| 75 | // If @func returns true, the enumeration is stopped. | 75 | // If @func returns true, the enumeration is stopped. | ||
| 76 | func EnumeratePrinters(FuncVar *PrinterFunc, DataVar uintptr, DestroyVar *glib.DestroyNotify, WaitVar bool) { | 76 | func EnumeratePrinters(FuncVar *PrinterFunc, DataVar uintptr, DestroyVar *glib.DestroyNotify, WaitVar bool) { | ||
| 77 | 77 | ||||
| 78 | - | xEnumeratePrinters(glib.NewCallback(FuncVar), DataVar, glib.NewCallback(DestroyVar), WaitVar) | 78 | + | FuncVarPtr := uintptr(unsafe.Pointer(FuncVar)) |
| 79 | + | var FuncVarRef uintptr | |||
| 80 | + | if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok { | |||
| 81 | + | FuncVarRef = cbRefPtr | |||
| 82 | + | } else { | |||
| 83 | + | fcb := func(arg0 uintptr, arg1 uintptr) bool { | |||
| 84 | + | cbFn := *FuncVar | |||
| 85 | + | return cbFn(arg0, arg1) | |||
| 86 | + | } | |||
| 87 | + | FuncVarRef = purego.NewCallback(fcb) | |||
| 88 | + | glib.SaveCallback(FuncVarPtr, FuncVarRef) | |||
| 89 | + | } | |||
| 90 | + | ||||
| 91 | + | DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar)) | |||
| 92 | + | var DestroyVarRef uintptr | |||
| 93 | + | if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok { | |||
| 94 | + | DestroyVarRef = cbRefPtr | |||
| 95 | + | } else { | |||
| 96 | + | fcb := func(arg0 uintptr) { | |||
| 97 | + | cbFn := *DestroyVar | |||
| 98 | + | cbFn(arg0) | |||
| 99 | + | } | |||
| 100 | + | DestroyVarRef = purego.NewCallback(fcb) | |||
| 101 | + | glib.SaveCallback(DestroyVarPtr, DestroyVarRef) | |||
| 102 | + | } | |||
| 103 | + | ||||
| 104 | + | xEnumeratePrinters(FuncVarRef, DataVar, DestroyVarRef, WaitVar) | |||
| 79 | 105 | ||||
| 80 | } | 106 | } | ||
| 81 | 107 | ||||
M v4/gtk/gtkprintjob.go +27 -1
| @@ -232,7 +232,33 @@ var xPrintJobSend func(uintptr, uintptr, uintptr, uintptr) | |||||
| 232 | // Sends the print job off to the printer. | 232 | // Sends the print job off to the printer. | ||
| 233 | func (x *PrintJob) Send(CallbackVar *PrintJobCompleteFunc, UserDataVar uintptr, DnotifyVar *glib.DestroyNotify) { | 233 | func (x *PrintJob) Send(CallbackVar *PrintJobCompleteFunc, UserDataVar uintptr, DnotifyVar *glib.DestroyNotify) { | ||
| 234 | 234 | ||||
| 235 | - | xPrintJobSend(x.GoPointer(), glib.NewCallback(CallbackVar), UserDataVar, glib.NewCallback(DnotifyVar)) | 235 | + | CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar)) |
| 236 | + | var CallbackVarRef uintptr | |||
| 237 | + | if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok { | |||
| 238 | + | CallbackVarRef = cbRefPtr | |||
| 239 | + | } else { | |||
| 240 | + | fcb := func(arg0 uintptr, arg1 uintptr, arg2 *glib.Error) { | |||
| 241 | + | cbFn := *CallbackVar | |||
| 242 | + | cbFn(arg0, arg1, arg2) | |||
| 243 | + | } | |||
| 244 | + | CallbackVarRef = purego.NewCallback(fcb) | |||
| 245 | + | glib.SaveCallback(CallbackVarPtr, CallbackVarRef) | |||
| 246 | + | } | |||
| 247 | + | ||||
| 248 | + | DnotifyVarPtr := uintptr(unsafe.Pointer(DnotifyVar)) | |||
| 249 | + | var DnotifyVarRef uintptr | |||
| 250 | + | if cbRefPtr, ok := glib.GetCallback(DnotifyVarPtr); ok { | |||
| 251 | + | DnotifyVarRef = cbRefPtr | |||
| 252 | + | } else { | |||
| 253 | + | fcb := func(arg0 uintptr) { | |||
| 254 | + | cbFn := *DnotifyVar | |||
| 255 | + | cbFn(arg0) | |||
| 256 | + | } | |||
| 257 | + | DnotifyVarRef = purego.NewCallback(fcb) | |||
| 258 | + | glib.SaveCallback(DnotifyVarPtr, DnotifyVarRef) | |||
| 259 | + | } | |||
| 260 | + | ||||
| 261 | + | xPrintJobSend(x.GoPointer(), CallbackVarRef, UserDataVar, DnotifyVarRef) | |||
| 236 | 262 | ||||
| 237 | } | 263 | } | ||
| 238 | 264 | ||||
M v4/gtk/gtkprintoperation.go +14 -1
| @@ -528,7 +528,20 @@ var xPrintRunPageSetupDialogAsync func(uintptr, uintptr, uintptr, uintptr, uintp | |||||
| 528 | // @done_cb from a signal handler for the ::response signal of the dialog. | 528 | // @done_cb from a signal handler for the ::response signal of the dialog. | ||
| 529 | func PrintRunPageSetupDialogAsync(ParentVar *Window, PageSetupVar *PageSetup, SettingsVar *PrintSettings, DoneCbVar *PageSetupDoneFunc, DataVar uintptr) { | 529 | func PrintRunPageSetupDialogAsync(ParentVar *Window, PageSetupVar *PageSetup, SettingsVar *PrintSettings, DoneCbVar *PageSetupDoneFunc, DataVar uintptr) { | ||
| 530 | 530 | ||||
| 531 | - | xPrintRunPageSetupDialogAsync(ParentVar.GoPointer(), PageSetupVar.GoPointer(), SettingsVar.GoPointer(), glib.NewCallback(DoneCbVar), DataVar) | 531 | + | DoneCbVarPtr := uintptr(unsafe.Pointer(DoneCbVar)) |
| 532 | + | var DoneCbVarRef uintptr | |||
| 533 | + | if cbRefPtr, ok := glib.GetCallback(DoneCbVarPtr); ok { | |||
| 534 | + | DoneCbVarRef = cbRefPtr | |||
| 535 | + | } else { | |||
| 536 | + | fcb := func(arg0 uintptr, arg1 uintptr) { | |||
| 537 | + | cbFn := *DoneCbVar | |||
| 538 | + | cbFn(arg0, arg1) | |||
| 539 | + | } | |||
| 540 | + | DoneCbVarRef = purego.NewCallback(fcb) | |||
| 541 | + | glib.SaveCallback(DoneCbVarPtr, DoneCbVarRef) | |||
| 542 | + | } | |||
| 543 | + | ||||
| 544 | + | xPrintRunPageSetupDialogAsync(ParentVar.GoPointer(), PageSetupVar.GoPointer(), SettingsVar.GoPointer(), DoneCbVarRef, DataVar) | |||
| 532 | 545 | ||||
| 533 | } | 546 | } | ||
| 534 | 547 | ||||
M v4/gtk/gtkprintsettings.go +14 -1
| @@ -253,7 +253,20 @@ var xPrintSettingsForeach func(uintptr, uintptr, uintptr) | |||||
| 253 | // Calls @func for each key-value pair of @settings. | 253 | // Calls @func for each key-value pair of @settings. | ||
| 254 | func (x *PrintSettings) Foreach(FuncVar *PrintSettingsFunc, UserDataVar uintptr) { | 254 | func (x *PrintSettings) Foreach(FuncVar *PrintSettingsFunc, UserDataVar uintptr) { | ||
| 255 | 255 | ||||
| 256 | - | xPrintSettingsForeach(x.GoPointer(), glib.NewCallback(FuncVar), UserDataVar) | 256 | + | FuncVarPtr := uintptr(unsafe.Pointer(FuncVar)) |
| 257 | + | var FuncVarRef uintptr | |||
| 258 | + | if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok { | |||
| 259 | + | FuncVarRef = cbRefPtr | |||
| 260 | + | } else { | |||
| 261 | + | fcb := func(arg0 string, arg1 string, arg2 uintptr) { | |||
| 262 | + | cbFn := *FuncVar | |||
| 263 | + | cbFn(arg0, arg1, arg2) | |||
| 264 | + | } | |||
| 265 | + | FuncVarRef = purego.NewCallback(fcb) | |||
| 266 | + | glib.SaveCallback(FuncVarPtr, FuncVarRef) | |||
| 267 | + | } | |||
| 268 | + | ||||
| 269 | + | xPrintSettingsForeach(x.GoPointer(), FuncVarRef, UserDataVar) | |||
| 257 | 270 | ||||
| 258 | } | 271 | } | ||
| 259 | 272 | ||||
M v4/gtk/gtkscale.go +31 -1
| @@ -352,7 +352,37 @@ var xScaleSetFormatValueFunc func(uintptr, uintptr, uintptr, uintptr) | |||||
| 352 | // [property@Gtk.Scale:digits] property. | 352 | // [property@Gtk.Scale:digits] property. | ||
| 353 | func (x *Scale) SetFormatValueFunc(FuncVar *ScaleFormatValueFunc, UserDataVar uintptr, DestroyNotifyVar *glib.DestroyNotify) { | 353 | func (x *Scale) SetFormatValueFunc(FuncVar *ScaleFormatValueFunc, UserDataVar uintptr, DestroyNotifyVar *glib.DestroyNotify) { | ||
| 354 | 354 | ||||
| 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) | |||
| 356 | 386 | ||||
| 357 | } | 387 | } | ||
| 358 | 388 | ||||
M v4/gtk/gtkshortcutaction.go +27 -1
| @@ -164,7 +164,33 @@ var xNewCallbackAction func(uintptr, uintptr, uintptr) uintptr | |||||
| 164 | func NewCallbackAction(CallbackVar *ShortcutFunc, DataVar uintptr, DestroyVar *glib.DestroyNotify) *CallbackAction { | 164 | func NewCallbackAction(CallbackVar *ShortcutFunc, DataVar uintptr, DestroyVar *glib.DestroyNotify) *CallbackAction { | ||
| 165 | var cls *CallbackAction | 165 | var cls *CallbackAction | ||
| 166 | 166 | ||||
| 167 | - | cret := xNewCallbackAction(glib.NewCallback(CallbackVar), DataVar, glib.NewCallback(DestroyVar)) | 167 | + | CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar)) |
| 168 | + | var CallbackVarRef uintptr | |||
| 169 | + | if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok { | |||
| 170 | + | CallbackVarRef = cbRefPtr | |||
| 171 | + | } else { | |||
| 172 | + | fcb := func(arg0 uintptr, arg1 *glib.Variant, arg2 uintptr) bool { | |||
| 173 | + | cbFn := *CallbackVar | |||
| 174 | + | return cbFn(arg0, arg1, arg2) | |||
| 175 | + | } | |||
| 176 | + | CallbackVarRef = purego.NewCallback(fcb) | |||
| 177 | + | glib.SaveCallback(CallbackVarPtr, CallbackVarRef) | |||
| 178 | + | } | |||
| 179 | + | ||||
| 180 | + | DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar)) | |||
| 181 | + | var DestroyVarRef uintptr | |||
| 182 | + | if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok { | |||
| 183 | + | DestroyVarRef = cbRefPtr | |||
| 184 | + | } else { | |||
| 185 | + | fcb := func(arg0 uintptr) { | |||
| 186 | + | cbFn := *DestroyVar | |||
| 187 | + | cbFn(arg0) | |||
| 188 | + | } | |||
| 189 | + | DestroyVarRef = purego.NewCallback(fcb) | |||
| 190 | + | glib.SaveCallback(DestroyVarPtr, DestroyVarRef) | |||
| 191 | + | } | |||
| 192 | + | ||||
| 193 | + | cret := xNewCallbackAction(CallbackVarRef, DataVar, DestroyVarRef) | |||
| 168 | 194 | ||||
| 169 | if cret == 0 { | 195 | if cret == 0 { | ||
| 170 | return nil | 196 | return nil | ||
M v4/gtk/gtkshow.go +18 -1
| @@ -2,6 +2,8 @@ | |||||
| 2 | package gtk | 2 | package gtk | ||
| 3 | 3 | ||||
| 4 | import ( | 4 | import ( | ||
| 5 | + | "unsafe" | |||
| 6 | + | ||||
| 5 | "github.com/jwijenbergh/purego" | 7 | "github.com/jwijenbergh/purego" | ||
| 6 | "github.com/jwijenbergh/puregotk/pkg/core" | 8 | "github.com/jwijenbergh/puregotk/pkg/core" | ||
| 7 | "github.com/jwijenbergh/puregotk/v4/gio" | 9 | "github.com/jwijenbergh/puregotk/v4/gio" | ||
| @@ -29,7 +31,22 @@ var xShowUriFull func(uintptr, string, uint32, uintptr, uintptr, uintptr) | |||||
| 29 | // necessary for sandbox helpers to parent their dialogs properly. | 31 | // necessary for sandbox helpers to parent their dialogs properly. | ||
| 30 | func ShowUriFull(ParentVar *Window, UriVar string, TimestampVar uint32, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) { | 32 | func ShowUriFull(ParentVar *Window, UriVar string, TimestampVar uint32, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) { | ||
| 31 | 33 | ||||
| 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 *AsyncResult, 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) | |||
| 33 | 50 | ||||
| 34 | } | 51 | } | ||
| 35 | 52 | ||||
M v4/gtk/gtktextbuffer.go +27 -1
| @@ -627,7 +627,33 @@ var xTextBufferAddCommitNotify func(uintptr, TextBufferNotifyFlags, uintptr, uin | |||||
| 627 | // other signal handlers which may further modify the [type@Gtk.TextBuffer]. | 627 | // other signal handlers which may further modify the [type@Gtk.TextBuffer]. | ||
| 628 | func (x *TextBuffer) AddCommitNotify(FlagsVar TextBufferNotifyFlags, CommitNotifyVar *TextBufferCommitNotify, UserDataVar uintptr, DestroyVar *glib.DestroyNotify) uint { | 628 | func (x *TextBuffer) AddCommitNotify(FlagsVar TextBufferNotifyFlags, CommitNotifyVar *TextBufferCommitNotify, UserDataVar uintptr, DestroyVar *glib.DestroyNotify) uint { | ||
| 629 | 629 | ||||
| 630 | - | cret := xTextBufferAddCommitNotify(x.GoPointer(), FlagsVar, glib.NewCallback(CommitNotifyVar), UserDataVar, glib.NewCallback(DestroyVar)) | 630 | + | CommitNotifyVarPtr := uintptr(unsafe.Pointer(CommitNotifyVar)) |
| 631 | + | var CommitNotifyVarRef uintptr | |||
| 632 | + | if cbRefPtr, ok := glib.GetCallback(CommitNotifyVarPtr); ok { | |||
| 633 | + | CommitNotifyVarRef = cbRefPtr | |||
| 634 | + | } else { | |||
| 635 | + | fcb := func(arg0 uintptr, arg1 TextBufferNotifyFlags, arg2 uint, arg3 uint, arg4 uintptr) { | |||
| 636 | + | cbFn := *CommitNotifyVar | |||
| 637 | + | cbFn(arg0, arg1, arg2, arg3, arg4) | |||
| 638 | + | } | |||
| 639 | + | CommitNotifyVarRef = purego.NewCallback(fcb) | |||
| 640 | + | glib.SaveCallback(CommitNotifyVarPtr, CommitNotifyVarRef) | |||
| 641 | + | } | |||
| 642 | + | ||||
| 643 | + | DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar)) | |||
| 644 | + | var DestroyVarRef uintptr | |||
| 645 | + | if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok { | |||
| 646 | + | DestroyVarRef = cbRefPtr | |||
| 647 | + | } else { | |||
| 648 | + | fcb := func(arg0 uintptr) { | |||
| 649 | + | cbFn := *DestroyVar | |||
| 650 | + | cbFn(arg0) | |||
| 651 | + | } | |||
| 652 | + | DestroyVarRef = purego.NewCallback(fcb) | |||
| 653 | + | glib.SaveCallback(DestroyVarPtr, DestroyVarRef) | |||
| 654 | + | } | |||
| 655 | + | ||||
| 656 | + | cret := xTextBufferAddCommitNotify(x.GoPointer(), FlagsVar, CommitNotifyVarRef, UserDataVar, DestroyVarRef) | |||
| 631 | return cret | 657 | return cret | ||
| 632 | } | 658 | } | ||
| 633 | 659 | ||||
M v4/gtk/gtktextiter.go +28 -2
| @@ -136,7 +136,20 @@ var xTextIterBackwardFindChar func(uintptr, uintptr, uintptr, *TextIter) bool | |||||
| 136 | // but goes backward from @iter. | 136 | // but goes backward from @iter. | ||
| 137 | func (x *TextIter) BackwardFindChar(PredVar *TextCharPredicate, UserDataVar uintptr, LimitVar *TextIter) bool { | 137 | func (x *TextIter) BackwardFindChar(PredVar *TextCharPredicate, UserDataVar uintptr, LimitVar *TextIter) bool { | ||
| 138 | 138 | ||||
| 139 | - | cret := xTextIterBackwardFindChar(x.GoPointer(), glib.NewCallback(PredVar), UserDataVar, LimitVar) | 139 | + | PredVarPtr := uintptr(unsafe.Pointer(PredVar)) |
| 140 | + | var PredVarRef uintptr | |||
| 141 | + | if cbRefPtr, ok := glib.GetCallback(PredVarPtr); ok { | |||
| 142 | + | PredVarRef = cbRefPtr | |||
| 143 | + | } else { | |||
| 144 | + | fcb := func(arg0 uint32, arg1 uintptr) bool { | |||
| 145 | + | cbFn := *PredVar | |||
| 146 | + | return cbFn(arg0, arg1) | |||
| 147 | + | } | |||
| 148 | + | PredVarRef = purego.NewCallback(fcb) | |||
| 149 | + | glib.SaveCallback(PredVarPtr, PredVarRef) | |||
| 150 | + | } | |||
| 151 | + | ||||
| 152 | + | cret := xTextIterBackwardFindChar(x.GoPointer(), PredVarRef, UserDataVar, LimitVar) | |||
| 140 | return cret | 153 | return cret | ||
| 141 | } | 154 | } | ||
| 142 | 155 | ||||
| @@ -551,7 +564,20 @@ var xTextIterForwardFindChar func(uintptr, uintptr, uintptr, *TextIter) bool | |||||
| 551 | // @limit is non-%NULL, otherwise to the end iterator. | 564 | // @limit is non-%NULL, otherwise to the end iterator. | ||
| 552 | func (x *TextIter) ForwardFindChar(PredVar *TextCharPredicate, UserDataVar uintptr, LimitVar *TextIter) bool { | 565 | func (x *TextIter) ForwardFindChar(PredVar *TextCharPredicate, UserDataVar uintptr, LimitVar *TextIter) bool { | ||
| 553 | 566 | ||||
| 554 | - | cret := xTextIterForwardFindChar(x.GoPointer(), glib.NewCallback(PredVar), UserDataVar, LimitVar) | 567 | + | PredVarPtr := uintptr(unsafe.Pointer(PredVar)) |
| 568 | + | var PredVarRef uintptr | |||
| 569 | + | if cbRefPtr, ok := glib.GetCallback(PredVarPtr); ok { | |||
| 570 | + | PredVarRef = cbRefPtr | |||
| 571 | + | } else { | |||
| 572 | + | fcb := func(arg0 uint32, arg1 uintptr) bool { | |||
| 573 | + | cbFn := *PredVar | |||
| 574 | + | return cbFn(arg0, arg1) | |||
| 575 | + | } | |||
| 576 | + | PredVarRef = purego.NewCallback(fcb) | |||
| 577 | + | glib.SaveCallback(PredVarPtr, PredVarRef) | |||
| 578 | + | } | |||
| 579 | + | ||||
| 580 | + | cret := xTextIterForwardFindChar(x.GoPointer(), PredVarRef, UserDataVar, LimitVar) | |||
| 555 | return cret | 581 | return cret | ||
| 556 | } | 582 | } | ||
| 557 | 583 | ||||
M v4/gtk/gtktexttagtable.go +14 -1
| @@ -94,7 +94,20 @@ var xTextTagTableForeach func(uintptr, uintptr, uintptr) | |||||
| 94 | // over it (you can’t add/remove tags). | 94 | // over it (you can’t add/remove tags). | ||
| 95 | func (x *TextTagTable) Foreach(FuncVar *TextTagTableForeach, DataVar uintptr) { | 95 | func (x *TextTagTable) Foreach(FuncVar *TextTagTableForeach, DataVar uintptr) { | ||
| 96 | 96 | ||||
| 97 | - | xTextTagTableForeach(x.GoPointer(), glib.NewCallback(FuncVar), DataVar) | 97 | + | FuncVarPtr := uintptr(unsafe.Pointer(FuncVar)) |
| 98 | + | var FuncVarRef uintptr | |||
| 99 | + | if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok { | |||
| 100 | + | FuncVarRef = cbRefPtr | |||
| 101 | + | } else { | |||
| 102 | + | fcb := func(arg0 uintptr, arg1 uintptr) { | |||
| 103 | + | cbFn := *FuncVar | |||
| 104 | + | cbFn(arg0, arg1) | |||
| 105 | + | } | |||
| 106 | + | FuncVarRef = purego.NewCallback(fcb) | |||
| 107 | + | glib.SaveCallback(FuncVarPtr, FuncVarRef) | |||
| 108 | + | } | |||
| 109 | + | ||||
| 110 | + | xTextTagTableForeach(x.GoPointer(), FuncVarRef, DataVar) | |||
| 98 | 111 | ||||
| 99 | } | 112 | } | ||
| 100 | 113 | ||||
M v4/gtk/gtktreelistmodel.go +27 -1
| @@ -66,7 +66,33 @@ var xNewTreeListModel func(uintptr, bool, bool, uintptr, uintptr, uintptr) uintp | |||||
| 66 | func NewTreeListModel(RootVar gio.ListModel, PassthroughVar bool, AutoexpandVar bool, CreateFuncVar *TreeListModelCreateModelFunc, UserDataVar uintptr, UserDestroyVar *glib.DestroyNotify) *TreeListModel { | 66 | func NewTreeListModel(RootVar gio.ListModel, PassthroughVar bool, AutoexpandVar bool, CreateFuncVar *TreeListModelCreateModelFunc, UserDataVar uintptr, UserDestroyVar *glib.DestroyNotify) *TreeListModel { | ||
| 67 | var cls *TreeListModel | 67 | var cls *TreeListModel | ||
| 68 | 68 | ||||
| 69 | - | cret := xNewTreeListModel(RootVar.GoPointer(), PassthroughVar, AutoexpandVar, glib.NewCallback(CreateFuncVar), UserDataVar, glib.NewCallback(UserDestroyVar)) | 69 | + | CreateFuncVarPtr := uintptr(unsafe.Pointer(CreateFuncVar)) |
| 70 | + | var CreateFuncVarRef uintptr | |||
| 71 | + | if cbRefPtr, ok := glib.GetCallback(CreateFuncVarPtr); ok { | |||
| 72 | + | CreateFuncVarRef = cbRefPtr | |||
| 73 | + | } else { | |||
| 74 | + | fcb := func(arg0 uintptr, arg1 uintptr) uintptr { | |||
| 75 | + | cbFn := *CreateFuncVar | |||
| 76 | + | return cbFn(arg0, arg1) | |||
| 77 | + | } | |||
| 78 | + | CreateFuncVarRef = purego.NewCallback(fcb) | |||
| 79 | + | glib.SaveCallback(CreateFuncVarPtr, CreateFuncVarRef) | |||
| 80 | + | } | |||
| 81 | + | ||||
| 82 | + | UserDestroyVarPtr := uintptr(unsafe.Pointer(UserDestroyVar)) | |||
| 83 | + | var UserDestroyVarRef uintptr | |||
| 84 | + | if cbRefPtr, ok := glib.GetCallback(UserDestroyVarPtr); ok { | |||
| 85 | + | UserDestroyVarRef = cbRefPtr | |||
| 86 | + | } else { | |||
| 87 | + | fcb := func(arg0 uintptr) { | |||
| 88 | + | cbFn := *UserDestroyVar | |||
| 89 | + | cbFn(arg0) | |||
| 90 | + | } | |||
| 91 | + | UserDestroyVarRef = purego.NewCallback(fcb) | |||
| 92 | + | glib.SaveCallback(UserDestroyVarPtr, UserDestroyVarRef) | |||
| 93 | + | } | |||
| 94 | + | ||||
| 95 | + | cret := xNewTreeListModel(RootVar.GoPointer(), PassthroughVar, AutoexpandVar, CreateFuncVarRef, UserDataVar, UserDestroyVarRef) | |||
| 70 | 96 | ||||
| 71 | if cret == 0 { | 97 | if cret == 0 { | ||
| 72 | return nil | 98 | return nil | ||
M v4/gtk/gtktreemodelfilter.go +58 -2
| @@ -291,7 +291,35 @@ var xTreeModelFilterSetModifyFunc func(uintptr, int, []types.GType, uintptr, uin | |||||
| 291 | // can only be called once for a given filter model. | 291 | // can only be called once for a given filter model. | ||
| 292 | func (x *TreeModelFilter) SetModifyFunc(NColumnsVar int, TypesVar []types.GType, FuncVar *TreeModelFilterModifyFunc, DataVar uintptr, DestroyVar *glib.DestroyNotify) { | 292 | func (x *TreeModelFilter) SetModifyFunc(NColumnsVar int, TypesVar []types.GType, FuncVar *TreeModelFilterModifyFunc, DataVar uintptr, DestroyVar *glib.DestroyNotify) { | ||
| 293 | 293 | ||||
| 294 | - | xTreeModelFilterSetModifyFunc(x.GoPointer(), NColumnsVar, TypesVar, glib.NewCallback(FuncVar), DataVar, glib.NewCallbackNullable(DestroyVar)) | 294 | + | FuncVarPtr := uintptr(unsafe.Pointer(FuncVar)) |
| 295 | + | var FuncVarRef uintptr | |||
| 296 | + | if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok { | |||
| 297 | + | FuncVarRef = cbRefPtr | |||
| 298 | + | } else { | |||
| 299 | + | fcb := func(arg0 uintptr, arg1 *TreeIter, arg2 *gobject.Value, arg3 int, arg4 uintptr) { | |||
| 300 | + | cbFn := *FuncVar | |||
| 301 | + | cbFn(arg0, arg1, arg2, arg3, arg4) | |||
| 302 | + | } | |||
| 303 | + | FuncVarRef = purego.NewCallback(fcb) | |||
| 304 | + | glib.SaveCallback(FuncVarPtr, FuncVarRef) | |||
| 305 | + | } | |||
| 306 | + | ||||
| 307 | + | var DestroyVarRef uintptr | |||
| 308 | + | if DestroyVar != nil { | |||
| 309 | + | DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar)) | |||
| 310 | + | if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok { | |||
| 311 | + | DestroyVarRef = cbRefPtr | |||
| 312 | + | } else { | |||
| 313 | + | fcb := func(arg0 uintptr) { | |||
| 314 | + | cbFn := *DestroyVar | |||
| 315 | + | cbFn(arg0) | |||
| 316 | + | } | |||
| 317 | + | DestroyVarRef = purego.NewCallback(fcb) | |||
| 318 | + | glib.SaveCallback(DestroyVarPtr, DestroyVarRef) | |||
| 319 | + | } | |||
| 320 | + | } | |||
| 321 | + | ||||
| 322 | + | xTreeModelFilterSetModifyFunc(x.GoPointer(), NColumnsVar, TypesVar, FuncVarRef, DataVar, DestroyVarRef) | |||
| 295 | 323 | ||||
| 296 | } | 324 | } | ||
| 297 | 325 | ||||
| @@ -353,7 +381,35 @@ var xTreeModelFilterSetVisibleFunc func(uintptr, uintptr, uintptr, uintptr) | |||||
| 353 | // once for a given filter model. | 381 | // once for a given filter model. | ||
| 354 | func (x *TreeModelFilter) SetVisibleFunc(FuncVar *TreeModelFilterVisibleFunc, DataVar uintptr, DestroyVar *glib.DestroyNotify) { | 382 | func (x *TreeModelFilter) SetVisibleFunc(FuncVar *TreeModelFilterVisibleFunc, DataVar uintptr, DestroyVar *glib.DestroyNotify) { | ||
| 355 | 383 | ||||
| 356 | - | xTreeModelFilterSetVisibleFunc(x.GoPointer(), glib.NewCallback(FuncVar), DataVar, glib.NewCallbackNullable(DestroyVar)) | 384 | + | FuncVarPtr := uintptr(unsafe.Pointer(FuncVar)) |
| 385 | + | var FuncVarRef uintptr | |||
| 386 | + | if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok { | |||
| 387 | + | FuncVarRef = cbRefPtr | |||
| 388 | + | } else { | |||
| 389 | + | fcb := func(arg0 uintptr, arg1 *TreeIter, arg2 uintptr) bool { | |||
| 390 | + | cbFn := *FuncVar | |||
| 391 | + | return cbFn(arg0, arg1, arg2) | |||
| 392 | + | } | |||
| 393 | + | FuncVarRef = purego.NewCallback(fcb) | |||
| 394 | + | glib.SaveCallback(FuncVarPtr, FuncVarRef) | |||
| 395 | + | } | |||
| 396 | + | ||||
| 397 | + | var DestroyVarRef uintptr | |||
| 398 | + | if DestroyVar != nil { | |||
| 399 | + | DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar)) | |||
| 400 | + | if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok { | |||
| 401 | + | DestroyVarRef = cbRefPtr | |||
| 402 | + | } else { | |||
| 403 | + | fcb := func(arg0 uintptr) { | |||
| 404 | + | cbFn := *DestroyVar | |||
| 405 | + | cbFn(arg0) | |||
| 406 | + | } | |||
| 407 | + | DestroyVarRef = purego.NewCallback(fcb) | |||
| 408 | + | glib.SaveCallback(DestroyVarPtr, DestroyVarRef) | |||
| 409 | + | } | |||
| 410 | + | } | |||
| 411 | + | ||||
| 412 | + | xTreeModelFilterSetVisibleFunc(x.GoPointer(), FuncVarRef, DataVar, DestroyVarRef) | |||
| 357 | 413 | ||||
| 358 | } | 414 | } | ||
| 359 | 415 | ||||
M v4/gtk/gtktreeselection.go +43 -2
| @@ -213,7 +213,20 @@ var xTreeSelectionSelectedForeach func(uintptr, uintptr, uintptr) | |||||
| 213 | // gtk_tree_selection_get_selected_rows() might be more useful. | 213 | // gtk_tree_selection_get_selected_rows() might be more useful. | ||
| 214 | func (x *TreeSelection) SelectedForeach(FuncVar *TreeSelectionForeachFunc, DataVar uintptr) { | 214 | func (x *TreeSelection) SelectedForeach(FuncVar *TreeSelectionForeachFunc, DataVar uintptr) { | ||
| 215 | 215 | ||||
| 216 | - | xTreeSelectionSelectedForeach(x.GoPointer(), glib.NewCallback(FuncVar), DataVar) | 216 | + | FuncVarPtr := uintptr(unsafe.Pointer(FuncVar)) |
| 217 | + | var FuncVarRef uintptr | |||
| 218 | + | if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok { | |||
| 219 | + | FuncVarRef = cbRefPtr | |||
| 220 | + | } else { | |||
| 221 | + | fcb := func(arg0 uintptr, arg1 *TreePath, arg2 *TreeIter, arg3 uintptr) { | |||
| 222 | + | cbFn := *FuncVar | |||
| 223 | + | cbFn(arg0, arg1, arg2, arg3) | |||
| 224 | + | } | |||
| 225 | + | FuncVarRef = purego.NewCallback(fcb) | |||
| 226 | + | glib.SaveCallback(FuncVarPtr, FuncVarRef) | |||
| 227 | + | } | |||
| 228 | + | ||||
| 229 | + | xTreeSelectionSelectedForeach(x.GoPointer(), FuncVarRef, DataVar) | |||
| 217 | 230 | ||||
| 218 | } | 231 | } | ||
| 219 | 232 | ||||
| @@ -238,7 +251,35 @@ var xTreeSelectionSetSelectFunction func(uintptr, uintptr, uintptr, uintptr) | |||||
| 238 | // if the state of the node should be left unchanged. | 251 | // if the state of the node should be left unchanged. | ||
| 239 | func (x *TreeSelection) SetSelectFunction(FuncVar *TreeSelectionFunc, DataVar uintptr, DestroyVar *glib.DestroyNotify) { | 252 | func (x *TreeSelection) SetSelectFunction(FuncVar *TreeSelectionFunc, DataVar uintptr, DestroyVar *glib.DestroyNotify) { | ||
| 240 | 253 | ||||
| 241 | - | xTreeSelectionSetSelectFunction(x.GoPointer(), glib.NewCallbackNullable(FuncVar), DataVar, glib.NewCallback(DestroyVar)) | 254 | + | var FuncVarRef uintptr |
| 255 | + | if FuncVar != nil { | |||
| 256 | + | FuncVarPtr := uintptr(unsafe.Pointer(FuncVar)) | |||
| 257 | + | if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok { | |||
| 258 | + | FuncVarRef = cbRefPtr | |||
| 259 | + | } else { | |||
| 260 | + | fcb := func(arg0 uintptr, arg1 uintptr, arg2 *TreePath, arg3 bool, arg4 uintptr) bool { | |||
| 261 | + | cbFn := *FuncVar | |||
| 262 | + | return cbFn(arg0, arg1, arg2, arg3, arg4) | |||
| 263 | + | } | |||
| 264 | + | FuncVarRef = purego.NewCallback(fcb) | |||
| 265 | + | glib.SaveCallback(FuncVarPtr, FuncVarRef) | |||
| 266 | + | } | |||
| 267 | + | } | |||
| 268 | + | ||||
| 269 | + | DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar)) | |||
| 270 | + | var DestroyVarRef uintptr | |||
| 271 | + | if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok { | |||
| 272 | + | DestroyVarRef = cbRefPtr | |||
| 273 | + | } else { | |||
| 274 | + | fcb := func(arg0 uintptr) { | |||
| 275 | + | cbFn := *DestroyVar | |||
| 276 | + | cbFn(arg0) | |||
| 277 | + | } | |||
| 278 | + | DestroyVarRef = purego.NewCallback(fcb) | |||
| 279 | + | glib.SaveCallback(DestroyVarPtr, DestroyVarRef) | |||
| 280 | + | } | |||
| 281 | + | ||||
| 282 | + | xTreeSelectionSetSelectFunction(x.GoPointer(), FuncVarRef, DataVar, DestroyVarRef) | |||
| 242 | 283 | ||||
| 243 | } | 284 | } | ||
| 244 | 285 | ||||
M v4/gtk/gtktreeview.go +132 -5
| @@ -1193,7 +1193,33 @@ var xTreeViewInsertColumnWithDataFunc func(uintptr, int, string, uintptr, uintpt | |||||
| 1193 | // “sizing” property set to be GTK_TREE_VIEW_COLUMN_FIXED. | 1193 | // “sizing” property set to be GTK_TREE_VIEW_COLUMN_FIXED. | ||
| 1194 | func (x *TreeView) InsertColumnWithDataFunc(PositionVar int, TitleVar string, CellVar *CellRenderer, FuncVar *TreeCellDataFunc, DataVar uintptr, DnotifyVar *glib.DestroyNotify) int { | 1194 | func (x *TreeView) InsertColumnWithDataFunc(PositionVar int, TitleVar string, CellVar *CellRenderer, FuncVar *TreeCellDataFunc, DataVar uintptr, DnotifyVar *glib.DestroyNotify) int { | ||
| 1195 | 1195 | ||||
| 1196 | - | cret := xTreeViewInsertColumnWithDataFunc(x.GoPointer(), PositionVar, TitleVar, CellVar.GoPointer(), glib.NewCallback(FuncVar), DataVar, glib.NewCallback(DnotifyVar)) | 1196 | + | FuncVarPtr := uintptr(unsafe.Pointer(FuncVar)) |
| 1197 | + | var FuncVarRef uintptr | |||
| 1198 | + | if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok { | |||
| 1199 | + | FuncVarRef = cbRefPtr | |||
| 1200 | + | } else { | |||
| 1201 | + | fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr, arg3 *TreeIter, arg4 uintptr) { | |||
| 1202 | + | cbFn := *FuncVar | |||
| 1203 | + | cbFn(arg0, arg1, arg2, arg3, arg4) | |||
| 1204 | + | } | |||
| 1205 | + | FuncVarRef = purego.NewCallback(fcb) | |||
| 1206 | + | glib.SaveCallback(FuncVarPtr, FuncVarRef) | |||
| 1207 | + | } | |||
| 1208 | + | ||||
| 1209 | + | DnotifyVarPtr := uintptr(unsafe.Pointer(DnotifyVar)) | |||
| 1210 | + | var DnotifyVarRef uintptr | |||
| 1211 | + | if cbRefPtr, ok := glib.GetCallback(DnotifyVarPtr); ok { | |||
| 1212 | + | DnotifyVarRef = cbRefPtr | |||
| 1213 | + | } else { | |||
| 1214 | + | fcb := func(arg0 uintptr) { | |||
| 1215 | + | cbFn := *DnotifyVar | |||
| 1216 | + | cbFn(arg0) | |||
| 1217 | + | } | |||
| 1218 | + | DnotifyVarRef = purego.NewCallback(fcb) | |||
| 1219 | + | glib.SaveCallback(DnotifyVarPtr, DnotifyVarRef) | |||
| 1220 | + | } | |||
| 1221 | + | ||||
| 1222 | + | cret := xTreeViewInsertColumnWithDataFunc(x.GoPointer(), PositionVar, TitleVar, CellVar.GoPointer(), FuncVarRef, DataVar, DnotifyVarRef) | |||
| 1197 | return cret | 1223 | return cret | ||
| 1198 | } | 1224 | } | ||
| 1199 | 1225 | ||||
| @@ -1237,7 +1263,20 @@ var xTreeViewMapExpandedRows func(uintptr, uintptr, uintptr) | |||||
| 1237 | // Calls @func on all expanded rows. | 1263 | // Calls @func on all expanded rows. | ||
| 1238 | func (x *TreeView) MapExpandedRows(FuncVar *TreeViewMappingFunc, DataVar uintptr) { | 1264 | func (x *TreeView) MapExpandedRows(FuncVar *TreeViewMappingFunc, DataVar uintptr) { | ||
| 1239 | 1265 | ||||
| 1240 | - | xTreeViewMapExpandedRows(x.GoPointer(), glib.NewCallback(FuncVar), DataVar) | 1266 | + | FuncVarPtr := uintptr(unsafe.Pointer(FuncVar)) |
| 1267 | + | var FuncVarRef uintptr | |||
| 1268 | + | if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok { | |||
| 1269 | + | FuncVarRef = cbRefPtr | |||
| 1270 | + | } else { | |||
| 1271 | + | fcb := func(arg0 uintptr, arg1 *TreePath, arg2 uintptr) { | |||
| 1272 | + | cbFn := *FuncVar | |||
| 1273 | + | cbFn(arg0, arg1, arg2) | |||
| 1274 | + | } | |||
| 1275 | + | FuncVarRef = purego.NewCallback(fcb) | |||
| 1276 | + | glib.SaveCallback(FuncVarPtr, FuncVarRef) | |||
| 1277 | + | } | |||
| 1278 | + | ||||
| 1279 | + | xTreeViewMapExpandedRows(x.GoPointer(), FuncVarRef, DataVar) | |||
| 1241 | 1280 | ||||
| 1242 | } | 1281 | } | ||
| 1243 | 1282 | ||||
| @@ -1340,7 +1379,37 @@ var xTreeViewSetColumnDragFunction func(uintptr, uintptr, uintptr, uintptr) | |||||
| 1340 | // dropped everywhere. | 1379 | // dropped everywhere. | ||
| 1341 | func (x *TreeView) SetColumnDragFunction(FuncVar *TreeViewColumnDropFunc, UserDataVar uintptr, DestroyVar *glib.DestroyNotify) { | 1380 | func (x *TreeView) SetColumnDragFunction(FuncVar *TreeViewColumnDropFunc, UserDataVar uintptr, DestroyVar *glib.DestroyNotify) { | ||
| 1342 | 1381 | ||||
| 1343 | - | xTreeViewSetColumnDragFunction(x.GoPointer(), glib.NewCallbackNullable(FuncVar), UserDataVar, glib.NewCallbackNullable(DestroyVar)) | 1382 | + | var FuncVarRef uintptr |
| 1383 | + | if FuncVar != nil { | |||
| 1384 | + | FuncVarPtr := uintptr(unsafe.Pointer(FuncVar)) | |||
| 1385 | + | if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok { | |||
| 1386 | + | FuncVarRef = cbRefPtr | |||
| 1387 | + | } else { | |||
| 1388 | + | fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr, arg3 uintptr, arg4 uintptr) bool { | |||
| 1389 | + | cbFn := *FuncVar | |||
| 1390 | + | return cbFn(arg0, arg1, arg2, arg3, arg4) | |||
| 1391 | + | } | |||
| 1392 | + | FuncVarRef = purego.NewCallback(fcb) | |||
| 1393 | + | glib.SaveCallback(FuncVarPtr, FuncVarRef) | |||
| 1394 | + | } | |||
| 1395 | + | } | |||
| 1396 | + | ||||
| 1397 | + | var DestroyVarRef uintptr | |||
| 1398 | + | if DestroyVar != nil { | |||
| 1399 | + | DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar)) | |||
| 1400 | + | if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok { | |||
| 1401 | + | DestroyVarRef = cbRefPtr | |||
| 1402 | + | } else { | |||
| 1403 | + | fcb := func(arg0 uintptr) { | |||
| 1404 | + | cbFn := *DestroyVar | |||
| 1405 | + | cbFn(arg0) | |||
| 1406 | + | } | |||
| 1407 | + | DestroyVarRef = purego.NewCallback(fcb) | |||
| 1408 | + | glib.SaveCallback(DestroyVarPtr, DestroyVarRef) | |||
| 1409 | + | } | |||
| 1410 | + | } | |||
| 1411 | + | ||||
| 1412 | + | xTreeViewSetColumnDragFunction(x.GoPointer(), FuncVarRef, UserDataVar, DestroyVarRef) | |||
| 1344 | 1413 | ||||
| 1345 | } | 1414 | } | ||
| 1346 | 1415 | ||||
| @@ -1548,7 +1617,37 @@ var xTreeViewSetRowSeparatorFunc func(uintptr, uintptr, uintptr, uintptr) | |||||
| 1548 | // function is %NULL, no separators are drawn. This is the default value. | 1617 | // function is %NULL, no separators are drawn. This is the default value. | ||
| 1549 | func (x *TreeView) SetRowSeparatorFunc(FuncVar *TreeViewRowSeparatorFunc, DataVar uintptr, DestroyVar *glib.DestroyNotify) { | 1618 | func (x *TreeView) SetRowSeparatorFunc(FuncVar *TreeViewRowSeparatorFunc, DataVar uintptr, DestroyVar *glib.DestroyNotify) { | ||
| 1550 | 1619 | ||||
| 1551 | - | xTreeViewSetRowSeparatorFunc(x.GoPointer(), glib.NewCallbackNullable(FuncVar), DataVar, glib.NewCallbackNullable(DestroyVar)) | 1620 | + | var FuncVarRef uintptr |
| 1621 | + | if FuncVar != nil { | |||
| 1622 | + | FuncVarPtr := uintptr(unsafe.Pointer(FuncVar)) | |||
| 1623 | + | if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok { | |||
| 1624 | + | FuncVarRef = cbRefPtr | |||
| 1625 | + | } else { | |||
| 1626 | + | fcb := func(arg0 uintptr, arg1 *TreeIter, arg2 uintptr) bool { | |||
| 1627 | + | cbFn := *FuncVar | |||
| 1628 | + | return cbFn(arg0, arg1, arg2) | |||
| 1629 | + | } | |||
| 1630 | + | FuncVarRef = purego.NewCallback(fcb) | |||
| 1631 | + | glib.SaveCallback(FuncVarPtr, FuncVarRef) | |||
| 1632 | + | } | |||
| 1633 | + | } | |||
| 1634 | + | ||||
| 1635 | + | var DestroyVarRef uintptr | |||
| 1636 | + | if DestroyVar != nil { | |||
| 1637 | + | DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar)) | |||
| 1638 | + | if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok { | |||
| 1639 | + | DestroyVarRef = cbRefPtr | |||
| 1640 | + | } else { | |||
| 1641 | + | fcb := func(arg0 uintptr) { | |||
| 1642 | + | cbFn := *DestroyVar | |||
| 1643 | + | cbFn(arg0) | |||
| 1644 | + | } | |||
| 1645 | + | DestroyVarRef = purego.NewCallback(fcb) | |||
| 1646 | + | glib.SaveCallback(DestroyVarPtr, DestroyVarRef) | |||
| 1647 | + | } | |||
| 1648 | + | } | |||
| 1649 | + | ||||
| 1650 | + | xTreeViewSetRowSeparatorFunc(x.GoPointer(), FuncVarRef, DataVar, DestroyVarRef) | |||
| 1552 | 1651 | ||||
| 1553 | } | 1652 | } | ||
| 1554 | 1653 | ||||
| @@ -1600,7 +1699,35 @@ var xTreeViewSetSearchEqualFunc func(uintptr, uintptr, uintptr, uintptr) | |||||
| 1600 | // `GtkTreeView`SearchEqualFunc returns %FALSE on matches. | 1699 | // `GtkTreeView`SearchEqualFunc returns %FALSE on matches. | ||
| 1601 | func (x *TreeView) SetSearchEqualFunc(SearchEqualFuncVar *TreeViewSearchEqualFunc, SearchUserDataVar uintptr, SearchDestroyVar *glib.DestroyNotify) { | 1700 | func (x *TreeView) SetSearchEqualFunc(SearchEqualFuncVar *TreeViewSearchEqualFunc, SearchUserDataVar uintptr, SearchDestroyVar *glib.DestroyNotify) { | ||
| 1602 | 1701 | ||||
| 1603 | - | xTreeViewSetSearchEqualFunc(x.GoPointer(), glib.NewCallback(SearchEqualFuncVar), SearchUserDataVar, glib.NewCallbackNullable(SearchDestroyVar)) | 1702 | + | SearchEqualFuncVarPtr := uintptr(unsafe.Pointer(SearchEqualFuncVar)) |
| 1703 | + | var SearchEqualFuncVarRef uintptr | |||
| 1704 | + | if cbRefPtr, ok := glib.GetCallback(SearchEqualFuncVarPtr); ok { | |||
| 1705 | + | SearchEqualFuncVarRef = cbRefPtr | |||
| 1706 | + | } else { | |||
| 1707 | + | fcb := func(arg0 uintptr, arg1 int, arg2 string, arg3 *TreeIter, arg4 uintptr) bool { | |||
| 1708 | + | cbFn := *SearchEqualFuncVar | |||
| 1709 | + | return cbFn(arg0, arg1, arg2, arg3, arg4) | |||
| 1710 | + | } | |||
| 1711 | + | SearchEqualFuncVarRef = purego.NewCallback(fcb) | |||
| 1712 | + | glib.SaveCallback(SearchEqualFuncVarPtr, SearchEqualFuncVarRef) | |||
| 1713 | + | } | |||
| 1714 | + | ||||
| 1715 | + | var SearchDestroyVarRef uintptr | |||
| 1716 | + | if SearchDestroyVar != nil { | |||
| 1717 | + | SearchDestroyVarPtr := uintptr(unsafe.Pointer(SearchDestroyVar)) | |||
| 1718 | + | if cbRefPtr, ok := glib.GetCallback(SearchDestroyVarPtr); ok { | |||
| 1719 | + | SearchDestroyVarRef = cbRefPtr | |||
| 1720 | + | } else { | |||
| 1721 | + | fcb := func(arg0 uintptr) { | |||
| 1722 | + | cbFn := *SearchDestroyVar | |||
| 1723 | + | cbFn(arg0) | |||
| 1724 | + | } | |||
| 1725 | + | SearchDestroyVarRef = purego.NewCallback(fcb) | |||
| 1726 | + | glib.SaveCallback(SearchDestroyVarPtr, SearchDestroyVarRef) | |||
| 1727 | + | } | |||
| 1728 | + | } | |||
| 1729 | + | ||||
| 1730 | + | xTreeViewSetSearchEqualFunc(x.GoPointer(), SearchEqualFuncVarRef, SearchUserDataVar, SearchDestroyVarRef) | |||
| 1604 | 1731 | ||||
| 1605 | } | 1732 | } | ||
| 1606 | 1733 | ||||
M v4/gtk/gtktreeviewcolumn.go +29 -1
| @@ -523,7 +523,35 @@ var xTreeViewColumnSetCellDataFunc func(uintptr, uintptr, uintptr, uintptr, uint | |||||
| 523 | // older one. | 523 | // older one. | ||
| 524 | func (x *TreeViewColumn) SetCellDataFunc(CellRendererVar *CellRenderer, FuncVar *TreeCellDataFunc, FuncDataVar uintptr, DestroyVar *glib.DestroyNotify) { | 524 | func (x *TreeViewColumn) SetCellDataFunc(CellRendererVar *CellRenderer, FuncVar *TreeCellDataFunc, FuncDataVar uintptr, DestroyVar *glib.DestroyNotify) { | ||
| 525 | 525 | ||||
| 526 | - | xTreeViewColumnSetCellDataFunc(x.GoPointer(), CellRendererVar.GoPointer(), glib.NewCallbackNullable(FuncVar), FuncDataVar, glib.NewCallback(DestroyVar)) | 526 | + | var FuncVarRef uintptr |
| 527 | + | if FuncVar != nil { | |||
| 528 | + | FuncVarPtr := uintptr(unsafe.Pointer(FuncVar)) | |||
| 529 | + | if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok { | |||
| 530 | + | FuncVarRef = cbRefPtr | |||
| 531 | + | } else { | |||
| 532 | + | fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr, arg3 *TreeIter, arg4 uintptr) { | |||
| 533 | + | cbFn := *FuncVar | |||
| 534 | + | cbFn(arg0, arg1, arg2, arg3, arg4) | |||
| 535 | + | } | |||
| 536 | + | FuncVarRef = purego.NewCallback(fcb) | |||
| 537 | + | glib.SaveCallback(FuncVarPtr, FuncVarRef) | |||
| 538 | + | } | |||
| 539 | + | } | |||
| 540 | + | ||||
| 541 | + | DestroyVarPtr := uintptr(unsafe.Pointer(DestroyVar)) | |||
| 542 | + | var DestroyVarRef uintptr | |||
| 543 | + | if cbRefPtr, ok := glib.GetCallback(DestroyVarPtr); ok { | |||
| 544 | + | DestroyVarRef = cbRefPtr | |||
| 545 | + | } else { | |||
| 546 | + | fcb := func(arg0 uintptr) { | |||
| 547 | + | cbFn := *DestroyVar | |||
| 548 | + | cbFn(arg0) | |||
| 549 | + | } | |||
| 550 | + | DestroyVarRef = purego.NewCallback(fcb) | |||
| 551 | + | glib.SaveCallback(DestroyVarPtr, DestroyVarRef) | |||
| 552 | + | } | |||
| 553 | + | ||||
| 554 | + | xTreeViewColumnSetCellDataFunc(x.GoPointer(), CellRendererVar.GoPointer(), FuncVarRef, FuncDataVar, DestroyVarRef) | |||
| 527 | 555 | ||||
| 528 | } | 556 | } | ||
| 529 | 557 | ||||
M v4/gtk/gtkurilauncher.go +16 -1
| @@ -95,7 +95,22 @@ var xUriLauncherLaunch func(uintptr, uintptr, uintptr, uintptr, uintptr) | |||||
| 95 | // This may present an app chooser dialog to the user. | 95 | // This may present an app chooser dialog to the user. | ||
| 96 | func (x *UriLauncher) Launch(ParentVar *Window, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) { | 96 | func (x *UriLauncher) Launch(ParentVar *Window, CancellableVar *gio.Cancellable, CallbackVar *gio.AsyncReadyCallback, UserDataVar uintptr) { | ||
| 97 | 97 | ||||
| 98 | - | xUriLauncherLaunch(x.GoPointer(), ParentVar.GoPointer(), CancellableVar.GoPointer(), glib.NewCallbackNullable(CallbackVar), UserDataVar) | 98 | + | var CallbackVarRef uintptr |
| 99 | + | if CallbackVar != nil { | |||
| 100 | + | CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar)) | |||
| 101 | + | if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok { | |||
| 102 | + | CallbackVarRef = cbRefPtr | |||
| 103 | + | } else { | |||
| 104 | + | fcb := func(arg0 uintptr, arg1 *AsyncResult, arg2 uintptr) { | |||
| 105 | + | cbFn := *CallbackVar | |||
| 106 | + | cbFn(arg0, arg1, arg2) | |||
| 107 | + | } | |||
| 108 | + | CallbackVarRef = purego.NewCallback(fcb) | |||
| 109 | + | glib.SaveCallback(CallbackVarPtr, CallbackVarRef) | |||
| 110 | + | } | |||
| 111 | + | } | |||
| 112 | + | ||||
| 113 | + | xUriLauncherLaunch(x.GoPointer(), ParentVar.GoPointer(), CancellableVar.GoPointer(), CallbackVarRef, UserDataVar) | |||
| 99 | 114 | ||||
| 100 | } | 115 | } | ||
| 101 | 116 | ||||
M v4/gtk/gtkwidget.go +69 -4
| @@ -159,7 +159,20 @@ var xWidgetClassAddBinding func(uintptr, uint, gdk.ModifierType, uintptr, string | |||||
| 159 | // shortcut. | 159 | // shortcut. | ||
| 160 | func (x *WidgetClass) AddBinding(KeyvalVar uint, ModsVar gdk.ModifierType, CallbackVar *ShortcutFunc, FormatStringVar string, varArgs ...interface{}) { | 160 | func (x *WidgetClass) AddBinding(KeyvalVar uint, ModsVar gdk.ModifierType, CallbackVar *ShortcutFunc, FormatStringVar string, varArgs ...interface{}) { | ||
| 161 | 161 | ||||
| 162 | - | xWidgetClassAddBinding(x.GoPointer(), KeyvalVar, ModsVar, glib.NewCallback(CallbackVar), FormatStringVar, varArgs...) | 162 | + | CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar)) |
| 163 | + | var CallbackVarRef uintptr | |||
| 164 | + | if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok { | |||
| 165 | + | CallbackVarRef = cbRefPtr | |||
| 166 | + | } else { | |||
| 167 | + | fcb := func(arg0 uintptr, arg1 *glib.Variant, arg2 uintptr) bool { | |||
| 168 | + | cbFn := *CallbackVar | |||
| 169 | + | return cbFn(arg0, arg1, arg2) | |||
| 170 | + | } | |||
| 171 | + | CallbackVarRef = purego.NewCallback(fcb) | |||
| 172 | + | glib.SaveCallback(CallbackVarPtr, CallbackVarRef) | |||
| 173 | + | } | |||
| 174 | + | ||||
| 175 | + | xWidgetClassAddBinding(x.GoPointer(), KeyvalVar, ModsVar, CallbackVarRef, FormatStringVar, varArgs...) | |||
| 163 | 176 | ||||
| 164 | } | 177 | } | ||
| 165 | 178 | ||||
| @@ -228,7 +241,20 @@ var xWidgetClassBindTemplateCallbackFull func(uintptr, string, uintptr) | |||||
| 228 | // class initializer after calling [method@Gtk.WidgetClass.set_template]. | 241 | // class initializer after calling [method@Gtk.WidgetClass.set_template]. | ||
| 229 | func (x *WidgetClass) BindTemplateCallbackFull(CallbackNameVar string, CallbackSymbolVar *gobject.Callback) { | 242 | func (x *WidgetClass) BindTemplateCallbackFull(CallbackNameVar string, CallbackSymbolVar *gobject.Callback) { | ||
| 230 | 243 | ||||
| 231 | - | xWidgetClassBindTemplateCallbackFull(x.GoPointer(), CallbackNameVar, glib.NewCallback(CallbackSymbolVar)) | 244 | + | CallbackSymbolVarPtr := uintptr(unsafe.Pointer(CallbackSymbolVar)) |
| 245 | + | var CallbackSymbolVarRef uintptr | |||
| 246 | + | if cbRefPtr, ok := glib.GetCallback(CallbackSymbolVarPtr); ok { | |||
| 247 | + | CallbackSymbolVarRef = cbRefPtr | |||
| 248 | + | } else { | |||
| 249 | + | fcb := func() { | |||
| 250 | + | cbFn := *CallbackSymbolVar | |||
| 251 | + | cbFn() | |||
| 252 | + | } | |||
| 253 | + | CallbackSymbolVarRef = purego.NewCallback(fcb) | |||
| 254 | + | glib.SaveCallback(CallbackSymbolVarPtr, CallbackSymbolVarRef) | |||
| 255 | + | } | |||
| 256 | + | ||||
| 257 | + | xWidgetClassBindTemplateCallbackFull(x.GoPointer(), CallbackNameVar, CallbackSymbolVarRef) | |||
| 232 | 258 | ||||
| 233 | } | 259 | } | ||
| 234 | 260 | ||||
| @@ -328,7 +354,20 @@ var xWidgetClassInstallAction func(uintptr, string, string, uintptr) | |||||
| 328 | // with [method@Gtk.Widget.action_set_enabled]). | 354 | // with [method@Gtk.Widget.action_set_enabled]). | ||
| 329 | func (x *WidgetClass) InstallAction(ActionNameVar string, ParameterTypeVar string, ActivateVar *WidgetActionActivateFunc) { | 355 | func (x *WidgetClass) InstallAction(ActionNameVar string, ParameterTypeVar string, ActivateVar *WidgetActionActivateFunc) { | ||
| 330 | 356 | ||||
| 331 | - | xWidgetClassInstallAction(x.GoPointer(), ActionNameVar, ParameterTypeVar, glib.NewCallback(ActivateVar)) | 357 | + | ActivateVarPtr := uintptr(unsafe.Pointer(ActivateVar)) |
| 358 | + | var ActivateVarRef uintptr | |||
| 359 | + | if cbRefPtr, ok := glib.GetCallback(ActivateVarPtr); ok { | |||
| 360 | + | ActivateVarRef = cbRefPtr | |||
| 361 | + | } else { | |||
| 362 | + | fcb := func(arg0 uintptr, arg1 string, arg2 *glib.Variant) { | |||
| 363 | + | cbFn := *ActivateVar | |||
| 364 | + | cbFn(arg0, arg1, arg2) | |||
| 365 | + | } | |||
| 366 | + | ActivateVarRef = purego.NewCallback(fcb) | |||
| 367 | + | glib.SaveCallback(ActivateVarPtr, ActivateVarRef) | |||
| 368 | + | } | |||
| 369 | + | ||||
| 370 | + | xWidgetClassInstallAction(x.GoPointer(), ActionNameVar, ParameterTypeVar, ActivateVarRef) | |||
| 332 | 371 | ||||
| 333 | } | 372 | } | ||
| 334 | 373 | ||||
| @@ -1832,7 +1871,33 @@ var xWidgetAddTickCallback func(uintptr, uintptr, uintptr, uintptr) uint | |||||
| 1832 | // to [method@Gtk.Widget.remove_tick_callback]. | 1871 | // to [method@Gtk.Widget.remove_tick_callback]. | ||
| 1833 | func (x *Widget) AddTickCallback(CallbackVar *TickCallback, UserDataVar uintptr, NotifyVar *glib.DestroyNotify) uint { | 1872 | func (x *Widget) AddTickCallback(CallbackVar *TickCallback, UserDataVar uintptr, NotifyVar *glib.DestroyNotify) uint { | ||
| 1834 | 1873 | ||||
| 1835 | - | cret := xWidgetAddTickCallback(x.GoPointer(), glib.NewCallback(CallbackVar), UserDataVar, glib.NewCallback(NotifyVar)) | 1874 | + | CallbackVarPtr := uintptr(unsafe.Pointer(CallbackVar)) |
| 1875 | + | var CallbackVarRef uintptr | |||
| 1876 | + | if cbRefPtr, ok := glib.GetCallback(CallbackVarPtr); ok { | |||
| 1877 | + | CallbackVarRef = cbRefPtr | |||
| 1878 | + | } else { | |||
| 1879 | + | fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) bool { | |||
| 1880 | + | cbFn := *CallbackVar | |||
| 1881 | + | return cbFn(arg0, arg1, arg2) | |||
| 1882 | + | } | |||
| 1883 | + | CallbackVarRef = purego.NewCallback(fcb) | |||
| 1884 | + | glib.SaveCallback(CallbackVarPtr, CallbackVarRef) | |||
| 1885 | + | } | |||
| 1886 | + | ||||
| 1887 | + | NotifyVarPtr := uintptr(unsafe.Pointer(NotifyVar)) | |||
| 1888 | + | var NotifyVarRef uintptr | |||
| 1889 | + | if cbRefPtr, ok := glib.GetCallback(NotifyVarPtr); ok { | |||
| 1890 | + | NotifyVarRef = cbRefPtr | |||
| 1891 | + | } else { | |||
| 1892 | + | fcb := func(arg0 uintptr) { | |||
| 1893 | + | cbFn := *NotifyVar | |||
| 1894 | + | cbFn(arg0) | |||
| 1895 | + | } | |||
| 1896 | + | NotifyVarRef = purego.NewCallback(fcb) | |||
| 1897 | + | glib.SaveCallback(NotifyVarPtr, NotifyVarRef) | |||
| 1898 | + | } | |||
| 1899 | + | ||||
| 1900 | + | cret := xWidgetAddTickCallback(x.GoPointer(), CallbackVarRef, UserDataVar, NotifyVarRef) | |||
| 1836 | return cret | 1901 | return cret | ||
| 1837 | } | 1902 | } | ||
| 1838 | 1903 | ||||
M v4/pango/pango-attributes.go +45 -2
| @@ -390,7 +390,20 @@ var xAttrListFilter func(uintptr, uintptr, uintptr) *AttrList | |||||
| 390 | // inserts them into a new list. | 390 | // inserts them into a new list. | ||
| 391 | func (x *AttrList) Filter(FuncVar *AttrFilterFunc, DataVar uintptr) *AttrList { | 391 | func (x *AttrList) Filter(FuncVar *AttrFilterFunc, DataVar uintptr) *AttrList { | ||
| 392 | 392 | ||||
| 393 | - | cret := xAttrListFilter(x.GoPointer(), glib.NewCallback(FuncVar), DataVar) | 393 | + | FuncVarPtr := uintptr(unsafe.Pointer(FuncVar)) |
| 394 | + | var FuncVarRef uintptr | |||
| 395 | + | if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok { | |||
| 396 | + | FuncVarRef = cbRefPtr | |||
| 397 | + | } else { | |||
| 398 | + | fcb := func(arg0 *Attribute, arg1 uintptr) bool { | |||
| 399 | + | cbFn := *FuncVar | |||
| 400 | + | return cbFn(arg0, arg1) | |||
| 401 | + | } | |||
| 402 | + | FuncVarRef = purego.NewCallback(fcb) | |||
| 403 | + | glib.SaveCallback(FuncVarPtr, FuncVarRef) | |||
| 404 | + | } | |||
| 405 | + | ||||
| 406 | + | cret := xAttrListFilter(x.GoPointer(), FuncVarRef, DataVar) | |||
| 394 | return cret | 407 | return cret | ||
| 395 | } | 408 | } | ||
| 396 | 409 | ||||
| @@ -1323,7 +1336,37 @@ var xAttrShapeNewWithData func(*Rectangle, *Rectangle, uintptr, uintptr, uintptr | |||||
| 1323 | // rendering the glyph. | 1336 | // rendering the glyph. | ||
| 1324 | func AttrShapeNewWithData(InkRectVar *Rectangle, LogicalRectVar *Rectangle, DataVar uintptr, CopyFuncVar *AttrDataCopyFunc, DestroyFuncVar *glib.DestroyNotify) *Attribute { | 1337 | func AttrShapeNewWithData(InkRectVar *Rectangle, LogicalRectVar *Rectangle, DataVar uintptr, CopyFuncVar *AttrDataCopyFunc, DestroyFuncVar *glib.DestroyNotify) *Attribute { | ||
| 1325 | 1338 | ||||
| 1326 | - | cret := xAttrShapeNewWithData(InkRectVar, LogicalRectVar, DataVar, glib.NewCallbackNullable(CopyFuncVar), glib.NewCallbackNullable(DestroyFuncVar)) | 1339 | + | var CopyFuncVarRef uintptr |
| 1340 | + | if CopyFuncVar != nil { | |||
| 1341 | + | CopyFuncVarPtr := uintptr(unsafe.Pointer(CopyFuncVar)) | |||
| 1342 | + | if cbRefPtr, ok := glib.GetCallback(CopyFuncVarPtr); ok { | |||
| 1343 | + | CopyFuncVarRef = cbRefPtr | |||
| 1344 | + | } else { | |||
| 1345 | + | fcb := func(arg0 uintptr) uintptr { | |||
| 1346 | + | cbFn := *CopyFuncVar | |||
| 1347 | + | return cbFn(arg0) | |||
| 1348 | + | } | |||
| 1349 | + | CopyFuncVarRef = purego.NewCallback(fcb) | |||
| 1350 | + | glib.SaveCallback(CopyFuncVarPtr, CopyFuncVarRef) | |||
| 1351 | + | } | |||
| 1352 | + | } | |||
| 1353 | + | ||||
| 1354 | + | var DestroyFuncVarRef uintptr | |||
| 1355 | + | if DestroyFuncVar != nil { | |||
| 1356 | + | DestroyFuncVarPtr := uintptr(unsafe.Pointer(DestroyFuncVar)) | |||
| 1357 | + | if cbRefPtr, ok := glib.GetCallback(DestroyFuncVarPtr); ok { | |||
| 1358 | + | DestroyFuncVarRef = cbRefPtr | |||
| 1359 | + | } else { | |||
| 1360 | + | fcb := func(arg0 uintptr) { | |||
| 1361 | + | cbFn := *DestroyFuncVar | |||
| 1362 | + | cbFn(arg0) | |||
| 1363 | + | } | |||
| 1364 | + | DestroyFuncVarRef = purego.NewCallback(fcb) | |||
| 1365 | + | glib.SaveCallback(DestroyFuncVarPtr, DestroyFuncVarRef) | |||
| 1366 | + | } | |||
| 1367 | + | } | |||
| 1368 | + | ||||
| 1369 | + | cret := xAttrShapeNewWithData(InkRectVar, LogicalRectVar, DataVar, CopyFuncVarRef, DestroyFuncVarRef) | |||
| 1327 | return cret | 1370 | return cret | ||
| 1328 | } | 1371 | } | ||
| 1329 | 1372 | ||||
M v4/pango/pango-fontset.go +14 -1
| @@ -289,7 +289,20 @@ var xFontsetForeach func(uintptr, uintptr, uintptr) | |||||
| 289 | // If @func returns %TRUE, that stops the iteration. | 289 | // If @func returns %TRUE, that stops the iteration. | ||
| 290 | func (x *Fontset) Foreach(FuncVar *FontsetForeachFunc, DataVar uintptr) { | 290 | func (x *Fontset) Foreach(FuncVar *FontsetForeachFunc, DataVar uintptr) { | ||
| 291 | 291 | ||||
| 292 | - | xFontsetForeach(x.GoPointer(), glib.NewCallback(FuncVar), DataVar) | 292 | + | FuncVarPtr := uintptr(unsafe.Pointer(FuncVar)) |
| 293 | + | var FuncVarRef uintptr | |||
| 294 | + | if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok { | |||
| 295 | + | FuncVarRef = cbRefPtr | |||
| 296 | + | } else { | |||
| 297 | + | fcb := func(arg0 uintptr, arg1 uintptr, arg2 uintptr) bool { | |||
| 298 | + | cbFn := *FuncVar | |||
| 299 | + | return cbFn(arg0, arg1, arg2) | |||
| 300 | + | } | |||
| 301 | + | FuncVarRef = purego.NewCallback(fcb) | |||
| 302 | + | glib.SaveCallback(FuncVarPtr, FuncVarRef) | |||
| 303 | + | } | |||
| 304 | + | ||||
| 305 | + | xFontsetForeach(x.GoPointer(), FuncVarRef, DataVar) | |||
| 293 | 306 | ||||
| 294 | } | 307 | } | ||
| 295 | 308 | ||||
M v4/pangocairo/pangocairo.go +33 -1
| @@ -2,6 +2,8 @@ | |||||
| 2 | package pangocairo | 2 | package pangocairo | ||
| 3 | 3 | ||||
| 4 | import ( | 4 | import ( | ||
| 5 | + | "unsafe" | |||
| 6 | + | ||||
| 5 | "github.com/jwijenbergh/purego" | 7 | "github.com/jwijenbergh/purego" | ||
| 6 | "github.com/jwijenbergh/puregotk/pkg/core" | 8 | "github.com/jwijenbergh/puregotk/pkg/core" | ||
| 7 | "github.com/jwijenbergh/puregotk/v4/cairo" | 9 | "github.com/jwijenbergh/puregotk/v4/cairo" | ||
| @@ -236,7 +238,37 @@ var xContextSetShapeRenderer func(uintptr, uintptr, uintptr, uintptr) | |||||
| 236 | // See `PangoCairoShapeRendererFunc` for details. | 238 | // See `PangoCairoShapeRendererFunc` for details. | ||
| 237 | func ContextSetShapeRenderer(ContextVar *pango.Context, FuncVar *ShapeRendererFunc, DataVar uintptr, DnotifyVar *glib.DestroyNotify) { | 239 | func ContextSetShapeRenderer(ContextVar *pango.Context, FuncVar *ShapeRendererFunc, DataVar uintptr, DnotifyVar *glib.DestroyNotify) { | ||
| 238 | 240 | ||||
| 239 | - | xContextSetShapeRenderer(ContextVar.GoPointer(), glib.NewCallbackNullable(FuncVar), DataVar, glib.NewCallbackNullable(DnotifyVar)) | 241 | + | var FuncVarRef uintptr |
| 242 | + | if FuncVar != nil { | |||
| 243 | + | FuncVarPtr := uintptr(unsafe.Pointer(FuncVar)) | |||
| 244 | + | if cbRefPtr, ok := glib.GetCallback(FuncVarPtr); ok { | |||
| 245 | + | FuncVarRef = cbRefPtr | |||
| 246 | + | } else { | |||
| 247 | + | fcb := func(arg0 *cairo.Context, arg1 *pango.AttrShape, arg2 bool, arg3 uintptr) { | |||
| 248 | + | cbFn := *FuncVar | |||
| 249 | + | cbFn(arg0, arg1, arg2, arg3) | |||
| 250 | + | } | |||
| 251 | + | FuncVarRef = purego.NewCallback(fcb) | |||
| 252 | + | glib.SaveCallback(FuncVarPtr, FuncVarRef) | |||
| 253 | + | } | |||
| 254 | + | } | |||
| 255 | + | ||||
| 256 | + | var DnotifyVarRef uintptr | |||
| 257 | + | if DnotifyVar != nil { | |||
| 258 | + | DnotifyVarPtr := uintptr(unsafe.Pointer(DnotifyVar)) | |||
| 259 | + | if cbRefPtr, ok := glib.GetCallback(DnotifyVarPtr); ok { | |||
| 260 | + | DnotifyVarRef = cbRefPtr | |||
| 261 | + | } else { | |||
| 262 | + | fcb := func(arg0 uintptr) { | |||
| 263 | + | cbFn := *DnotifyVar | |||
| 264 | + | cbFn(arg0) | |||
| 265 | + | } | |||
| 266 | + | DnotifyVarRef = purego.NewCallback(fcb) | |||
| 267 | + | glib.SaveCallback(DnotifyVarPtr, DnotifyVarRef) | |||
| 268 | + | } | |||
| 269 | + | } | |||
| 270 | + | ||||
| 271 | + | xContextSetShapeRenderer(ContextVar.GoPointer(), FuncVarRef, DataVar, DnotifyVarRef) | |||
| 240 | 272 | ||||
| 241 | } | 273 | } | ||
| 242 | 274 | ||||