This is an automated email from the git hooks/post-receive script.
git pushed a commit to branch main
in repository ego.
View the commit online.
commit 766925ba9281c7838885767a0e960446501a0c2b
Author: [email protected] <[email protected]>
AuthorDate: Tue Mar 31 11:10:17 2026 -0600
feat(ego-gen): map Eina_Value to *efl.Value in generated bindings
Add IsEinaValue detection and template dispatch for Value parameter
wrapping/unwrapping. Methods using any_value or any_value_ref now
generate typed *efl.Value instead of unsafe.Pointer. Unblocks
message_send and improves type safety across config, model, loop,
and format APIs.
Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
---
cmd/ego-gen/generator.go | 1 +
cmd/ego-gen/generator_test.go | 48 +++++++++++++++++++++++++++++++++++++
cmd/ego-gen/main.go | 2 --
cmd/ego-gen/templates/class.go.tmpl | 24 +++++++++++++++++++
cmd/ego-gen/typemap.go | 12 ++++++++++
efl/canvas/layout.go | 5 ++++
efl/eo/config.go | 8 +++----
efl/eo/config_global.go | 8 +++----
efl/eo/loop.go | 8 +++----
efl/eo/loop_consumer.go | 4 ++--
efl/eo/loop_model.go | 8 +++----
efl/eo/model.go | 8 +++----
efl/layout/signal.go | 5 ++++
efl/ui/calendar.go | 4 ++--
efl/ui/format.go | 4 ++--
efl/ui/image.go | 5 ++++
efl/ui/layout_base.go | 5 ++++
efl/ui/progressbar.go | 4 ++--
efl/ui/spin.go | 4 ++--
efl/ui/tags.go | 4 ++--
efl/ui/win.go | 29 +++++++---------------
21 files changed, 145 insertions(+), 55 deletions(-)
diff --git a/cmd/ego-gen/generator.go b/cmd/ego-gen/generator.go
index 44b646e..e1eb223 100644
--- a/cmd/ego-gen/generator.go
+++ b/cmd/ego-gen/generator.go
@@ -269,6 +269,7 @@ func NewGenerator(templateDir, outputDir string) (*Generator, error) {
"isKnownStruct": IsKnownStruct,
"getStructInfo": GetStructInfo,
"isEnumTypedefKey": IsEnumTypedefKey,
+ "isEinaValue": IsEinaValue,
}
pattern := filepath.Join(templateDir, "*.tmpl")
diff --git a/cmd/ego-gen/generator_test.go b/cmd/ego-gen/generator_test.go
index 9ba4014..b35c97c 100644
--- a/cmd/ego-gen/generator_test.go
+++ b/cmd/ego-gen/generator_test.go
@@ -1282,3 +1282,51 @@ func TestGenerateClass_SliceSetter(t *testing.T) {
}
}
}
+
+func TestGenerateClass_EinaValueParam(t *testing.T) {
+ g, outDir := newTestGenerator(t)
+
+ data := ClassData{
+ PackageName: "eo",
+ GoName: "Loop",
+ EolianName: "Efl.Loop",
+ CClassName: "EFL_LOOP_CLASS",
+ CClassGetFunc: "efl_loop_class_get",
+ CPrefix: "efl_loop",
+ EOHeaderFile: "efl_loop.eo.h",
+ IsAbstract: true,
+ Methods: []MethodData{
+ {
+ GoName: "Quit",
+ CName: "efl_loop_quit",
+ Params: []ParamData{
+ {GoName: "exitCode", GoType: "*efl.Value", CType: "const Eina_Value"},
+ },
+ },
+ },
+ }
+
+ if err := g.GenerateClass(data); err != nil {
+ t.Fatalf("GenerateClass: %v", err)
+ }
+
+ outFile := filepath.Join(outDir, "eo", "loop.go")
+ content, err := os.ReadFile(outFile)
+ if err != nil {
+ t.Fatalf("output file not found at %s: %v", outFile, err)
+ }
+
+ src := string(content)
+
+ mustContain := []string{
+ "func (o *Loop) Quit(exitCode *efl.Value)",
+ "efl_loop_quit",
+ ".Ptr()",
+ }
+
+ for _, want := range mustContain {
+ if !strings.Contains(src, want) {
+ t.Errorf("output missing expected pattern %q\nfile content:\n%s", want, src)
+ }
+ }
+}
diff --git a/cmd/ego-gen/main.go b/cmd/ego-gen/main.go
index 782812d..69f6b3f 100644
--- a/cmd/ego-gen/main.go
+++ b/cmd/ego-gen/main.go
@@ -37,8 +37,6 @@ var methodBlocklist = map[string]bool{
"efl_layout_calc_size_min": true,
"efl_layout_calc_parts_extends": true,
// efl.Layout.Signal — callback params handled via callback trampoline generation.
- // efl.Layout.Signal — takes const Eina_Value by value; struct-valued parameter
- "efl_layout_signal_message_send": true,
// efl.Access.Text — character_extents_get and range_extents_get take an extra Eina_Rect* out-param
// that the generator does not see from Eolian (struct-valued out-param pattern).
"efl_access_text_character_extents_get": true,
diff --git a/cmd/ego-gen/templates/class.go.tmpl b/cmd/ego-gen/templates/class.go.tmpl
index feba194..78ab935 100644
--- a/cmd/ego-gen/templates/class.go.tmpl
+++ b/cmd/ego-gen/templates/class.go.tmpl
@@ -400,6 +400,8 @@ func (o *{{$.GoName}}) {{$prop.GoGetter}}() {{$prop.GoType}} {
return C.GoString(cResult)
{{- else if isBoolType $prop.CType}}
return C.{{$prop.CGetName}}((*C.Eo)(o.Eo())) != 0
+{{- else if isEinaValue $prop.CType}}
+ return efl.WrapValue(unsafe.Pointer(C.{{$prop.CGetName}}((*C.Eo)(o.Eo()))))
{{- else if isPointerType $prop.GoType}}
return unsafe.Pointer(C._ego_get_{{$prop.CGetName}}((*C.Eo)(o.Eo())))
{{- else}}
@@ -444,6 +446,12 @@ func (o *{{$.GoName}}) {{$prop.GoSetter}}(val {{if $prop.IsEo}}efl.Objecter{{els
var cVal C.{{cTypeToCgo $prop.CType}}
if val { cVal = 1 }
C.{{$prop.CSetName}}((*C.Eo)(o.Eo()), cVal)
+{{- else if isEinaValue $prop.CType}}
+{{- if isCPointerType $prop.CType}}
+ C.{{$prop.CSetName}}((*C.Eo)(o.Eo()), (*C.Eina_Value)(val.Ptr()))
+{{- else}}
+ C.{{$prop.CSetName}}((*C.Eo)(o.Eo()), *(*C.Eina_Value)(val.Ptr()))
+{{- end}}
{{- else if isPointerType $prop.GoType}}
{{- if $prop.HasGet}}
C._ego_set_{{$prop.CSetName}}((*C.Eo)(o.Eo()), val)
@@ -486,6 +494,8 @@ func (o *{{$.GoName}}) {{$m.GoName}}({{range $i, $p := $m.Params}}{{if $i}}, {{e
return C.GoString(cResult)
{{- else if isBoolType $m.ReturnCType}}
return C.{{$m.CName}}((*C.Eo)(o.Eo()){{range $m.Params}}, {{template "paramArg" .}}{{end}}{{range $m.CallbackParams}}, unsafe.Pointer(id{{.GoName}}), C.{{.CallbackType.CTypedef}}(C.{{.CallbackType.GoTrampolineName}}), C.Eina_Free_Cb(C.egoCallbackFree){{end}}) != 0
+{{- else if isEinaValue $m.ReturnCType}}
+ return efl.WrapValue(unsafe.Pointer(C.{{$m.CName}}((*C.Eo)(o.Eo()){{range $m.Params}}, {{template "paramArg" .}}{{end}}{{range $m.CallbackParams}}, unsafe.Pointer(id{{.GoName}}), C.{{.CallbackType.CTypedef}}(C.{{.CallbackType.GoTrampolineName}}), C.Eina_Free_Cb(C.egoCallbackFree){{end}})))
{{- else if isPointerType $m.ReturnType}}
return unsafe.Pointer(C.{{$m.CName}}((*C.Eo)(o.Eo()){{range $m.Params}}, {{template "paramArg" .}}{{end}}{{range $m.CallbackParams}}, unsafe.Pointer(id{{.GoName}}), C.{{.CallbackType.CTypedef}}(C.{{.CallbackType.GoTrampolineName}}), C.Eina_Free_Cb(C.egoCallbackFree){{end}}))
{{- else}}
@@ -560,6 +570,8 @@ func (o *{{$.GoName}}) {{.GoName}}({{range $i, $p := .Params}}{{if $i}}, {{end}}
return C.GoString(cResult)
{{- else if isBoolType .ReturnCType}}
return C.{{.CName}}((*C.Eo)(o.Eo()){{range .Params}}, {{template "paramArg" .}}{{end}}) != 0
+{{- else if isEinaValue .ReturnCType}}
+ return efl.WrapValue(unsafe.Pointer(C.{{.CName}}((*C.Eo)(o.Eo()){{range .Params}}, {{template "paramArg" .}}{{end}})))
{{- else if isPointerType .ReturnType}}
return unsafe.Pointer(C.{{.CName}}((*C.Eo)(o.Eo()){{range .Params}}, {{template "paramArg" .}}{{end}}))
{{- else}}
@@ -636,6 +648,8 @@ func (p {{$ip.AccessorTypeName}}) Get() {{if $ip.IsStruct}}{{$ip.StructGoType}}{
return C.{{$ip.CGetName}}(p.obj{{range $ip.Keys}}, {{template "indexedKeyArg" .}}{{end}}) != 0
{{- else if isEnumTypedefKey $ip.CType}}
return unsafe.Pointer(uintptr(C.{{$ip.CGetName}}(p.obj{{range $ip.Keys}}, {{template "indexedKeyArg" .}}{{end}})))
+{{- else if isEinaValue $ip.CType}}
+ return efl.WrapValue(unsafe.Pointer(C.{{$ip.CGetName}}(p.obj{{range $ip.Keys}}, {{template "indexedKeyArg" .}}{{end}})))
{{- else if isPointerType $ip.GoType}}
return unsafe.Pointer(C.{{$ip.CGetName}}(p.obj{{range $ip.Keys}}, {{template "indexedKeyArg" .}}{{end}}))
{{- else}}
@@ -688,6 +702,12 @@ func (p {{$ip.AccessorTypeName}}) Set(val {{if $ip.IsStruct}}{{$ip.StructGoType}
C.{{$ip.CSetName}}(p.obj{{range $ip.Keys}}, {{template "indexedKeyArg" .}}{{end}}, cVal)
{{- else if isEnumTypedefKey $ip.CType}}
C.{{$ip.CSetName}}(p.obj{{range $ip.Keys}}, {{template "indexedKeyArg" .}}{{end}}, C.{{cTypeToCgo $ip.CType}}(uintptr(val)))
+{{- else if isEinaValue $ip.CType}}
+{{- if isCPointerType $ip.CType}}
+ C.{{$ip.CSetName}}(p.obj{{range $ip.Keys}}, {{template "indexedKeyArg" .}}{{end}}, (*C.Eina_Value)(val.Ptr()))
+{{- else}}
+ C.{{$ip.CSetName}}(p.obj{{range $ip.Keys}}, {{template "indexedKeyArg" .}}{{end}}, *(*C.Eina_Value)(val.Ptr()))
+{{- end}}
{{- else if isPointerType $ip.GoType}}
{{- if isVoidPointer $ip.CType}}
C.{{$ip.CSetName}}(p.obj{{range $ip.Keys}}, {{template "indexedKeyArg" .}}{{end}}, val)
@@ -807,6 +827,10 @@ func {{$gf.GoName}}({{range $i, $p := $gf.Params}}{{if $i}}, {{end}}{{$p.GoName}
{{- define "paramArg"}}
{{- if .IsEo}}(*C.Eo)({{.GoName}}.Eo())
{{- else if or (needsStringConversion .CType) (isBoolType .CType)}}c{{.GoName}}
+{{- else if isEinaValue .CType}}
+{{- if isCPointerType .CType}}(*C.Eina_Value)({{.GoName}}.Ptr())
+{{- else}}*(*C.Eina_Value)({{.GoName}}.Ptr())
+{{- end}}
{{- else if isPointerType .GoType}}
{{- if isVoidPointer .CType}}{{.GoName}}
{{- else if isCPointerType .CType}}(*C.{{stripPointerSuffix .CType}})({{.GoName}})
diff --git a/cmd/ego-gen/typemap.go b/cmd/ego-gen/typemap.go
index 97d9754..72c64c0 100644
--- a/cmd/ego-gen/typemap.go
+++ b/cmd/ego-gen/typemap.go
@@ -118,6 +118,10 @@ func CTypeToGo(ctype string) string {
return "unsafe.Pointer"
}
+ if IsEinaValue(ctype) {
+ return "*efl.Value"
+ }
+
// Any remaining pointer type (ends with "*") becomes an opaque pointer.
if strings.HasSuffix(ctype, "*") {
return "unsafe.Pointer"
@@ -250,6 +254,14 @@ func IsStructType(ctype string) bool {
return false
}
+// IsEinaValue reports whether a C type is Eina_Value (by-value or by-pointer).
+func IsEinaValue(ctype string) bool {
+ ct := strings.TrimSpace(ctype)
+ ct = strings.TrimPrefix(ct, "const ")
+ ct = strings.TrimSpace(ct)
+ return ct == "Eina_Value" || ct == "Eina_Value *"
+}
+
// IsEnumTypedefKey reports whether a C type is an enum typedef used as an
// indexed property key. Such types are non-pointer, non-struct C types (e.g.
// Efl_Gfx_Color_Class_Layer) that map to unsafe.Pointer in Go but should be
diff --git a/efl/canvas/layout.go b/efl/canvas/layout.go
index 88103fc..e6d6b58 100644
--- a/efl/canvas/layout.go
+++ b/efl/canvas/layout.go
@@ -528,6 +528,11 @@ func (o *Layout) CalcForce() {
C.efl_layout_calc_force((*C.Eo)(o.Eo()))
}
+// MessageSend calls the efl_layout_signal_message_send method on Layout.
+func (o *Layout) MessageSend(id int, msg *efl.Value) {
+ C.efl_layout_signal_message_send((*C.Eo)(o.Eo()), C.int(id), *(*C.Eina_Value)(msg.Ptr()))
+}
+
// SignalCallbackAdd calls the efl_layout_signal_callback_add method on Layout.
func (o *Layout) SignalCallbackAdd(emission string, source string, func_ func(unsafe.Pointer, string, string)) bool {
cemission := C.CString(emission)
diff --git a/efl/eo/config.go b/efl/eo/config.go
index 91a5a19..0528f90 100644
--- a/efl/eo/config.go
+++ b/efl/eo/config.go
@@ -128,17 +128,17 @@ func (o *Config) Config(name string) configConfigProperty {
}
// Get returns the value for the captured key(s).
-func (p configConfigProperty) Get() unsafe.Pointer {
+func (p configConfigProperty) Get() *efl.Value {
cname := C.CString(p.name)
defer C.free(unsafe.Pointer(cname))
- return unsafe.Pointer(C.efl_config_get(p.obj, cname))
+ return efl.WrapValue(unsafe.Pointer(C.efl_config_get(p.obj, cname)))
}
// Set sets the value for the captured key(s).
-func (p configConfigProperty) Set(val unsafe.Pointer) {
+func (p configConfigProperty) Set(val *efl.Value) {
cname := C.CString(p.name)
defer C.free(unsafe.Pointer(cname))
- C.efl_config_set(p.obj, cname, (*C.Eina_Value)(val))
+ C.efl_config_set(p.obj, cname, (*C.Eina_Value)(val.Ptr()))
}
// OnConfigChanged registers fn as a callback for the EFL_CONFIG_EVENT_CONFIG_CHANGED event on Config.
diff --git a/efl/eo/config_global.go b/efl/eo/config_global.go
index d4211a7..3ce0f98 100644
--- a/efl/eo/config_global.go
+++ b/efl/eo/config_global.go
@@ -222,17 +222,17 @@ func (o *ConfigGlobal) Config(name string) configGlobalConfigProperty {
}
// Get returns the value for the captured key(s).
-func (p configGlobalConfigProperty) Get() unsafe.Pointer {
+func (p configGlobalConfigProperty) Get() *efl.Value {
cname := C.CString(p.name)
defer C.free(unsafe.Pointer(cname))
- return unsafe.Pointer(C.efl_config_get(p.obj, cname))
+ return efl.WrapValue(unsafe.Pointer(C.efl_config_get(p.obj, cname)))
}
// Set sets the value for the captured key(s).
-func (p configGlobalConfigProperty) Set(val unsafe.Pointer) {
+func (p configGlobalConfigProperty) Set(val *efl.Value) {
cname := C.CString(p.name)
defer C.free(unsafe.Pointer(cname))
- C.efl_config_set(p.obj, cname, (*C.Eina_Value)(val))
+ C.efl_config_set(p.obj, cname, (*C.Eina_Value)(val.Ptr()))
}
// OnConfigChanged registers fn as a callback for the EFL_CONFIG_EVENT_CONFIG_CHANGED event on ConfigGlobal.
diff --git a/efl/eo/loop.go b/efl/eo/loop.go
index 8daae5c..84d69ab 100644
--- a/efl/eo/loop.go
+++ b/efl/eo/loop.go
@@ -180,13 +180,13 @@ func (o *Loop) IterateMayBlock(mayBlock int) int {
}
// Begin calls the efl_loop_begin method on Loop.
-func (o *Loop) Begin() unsafe.Pointer {
- return unsafe.Pointer(C.efl_loop_begin((*C.Eo)(o.Eo())))
+func (o *Loop) Begin() *efl.Value {
+ return efl.WrapValue(unsafe.Pointer(C.efl_loop_begin((*C.Eo)(o.Eo()))))
}
// Quit calls the efl_loop_quit method on Loop.
-func (o *Loop) Quit(exitCode unsafe.Pointer) {
- C.efl_loop_quit((*C.Eo)(o.Eo()), *(*C.Eina_Value)(exitCode))
+func (o *Loop) Quit(exitCode *efl.Value) {
+ C.efl_loop_quit((*C.Eo)(o.Eo()), *(*C.Eina_Value)(exitCode.Ptr()))
}
// Job calls the efl_loop_job method on Loop.
diff --git a/efl/eo/loop_consumer.go b/efl/eo/loop_consumer.go
index fda9ede..6738046 100644
--- a/efl/eo/loop_consumer.go
+++ b/efl/eo/loop_consumer.go
@@ -121,8 +121,8 @@ func (o *LoopConsumer) Loop() unsafe.Pointer {
}
// FutureResolved calls the efl_loop_future_resolved method on LoopConsumer.
-func (o *LoopConsumer) FutureResolved(result unsafe.Pointer) unsafe.Pointer {
- return unsafe.Pointer(C.efl_loop_future_resolved((*C.Eo)(o.Eo()), *(*C.Eina_Value)(result)))
+func (o *LoopConsumer) FutureResolved(result *efl.Value) unsafe.Pointer {
+ return unsafe.Pointer(C.efl_loop_future_resolved((*C.Eo)(o.Eo()), *(*C.Eina_Value)(result.Ptr())))
}
// FutureRejected calls the efl_loop_future_rejected method on LoopConsumer.
diff --git a/efl/eo/loop_model.go b/efl/eo/loop_model.go
index 9f734cd..8c9746f 100644
--- a/efl/eo/loop_model.go
+++ b/efl/eo/loop_model.go
@@ -194,17 +194,17 @@ func (o *LoopModel) Property(property string) loopModelPropertyProperty {
}
// Get returns the value for the captured key(s).
-func (p loopModelPropertyProperty) Get() unsafe.Pointer {
+func (p loopModelPropertyProperty) Get() *efl.Value {
cproperty := C.CString(p.property)
defer C.free(unsafe.Pointer(cproperty))
- return unsafe.Pointer(C.efl_model_property_get(p.obj, cproperty))
+ return efl.WrapValue(unsafe.Pointer(C.efl_model_property_get(p.obj, cproperty)))
}
// Set sets the value for the captured key(s).
-func (p loopModelPropertyProperty) Set(val unsafe.Pointer) {
+func (p loopModelPropertyProperty) Set(val *efl.Value) {
cproperty := C.CString(p.property)
defer C.free(unsafe.Pointer(cproperty))
- C.efl_model_property_set(p.obj, cproperty, (*C.Eina_Value)(val))
+ C.efl_model_property_set(p.obj, cproperty, (*C.Eina_Value)(val.Ptr()))
}
// OnPropertiesChanged registers fn as a callback for the EFL_MODEL_EVENT_PROPERTIES_CHANGED event on LoopModel.
diff --git a/efl/eo/model.go b/efl/eo/model.go
index 6fd394f..5fce931 100644
--- a/efl/eo/model.go
+++ b/efl/eo/model.go
@@ -186,17 +186,17 @@ func (o *Model) Property(property string) modelPropertyProperty {
}
// Get returns the value for the captured key(s).
-func (p modelPropertyProperty) Get() unsafe.Pointer {
+func (p modelPropertyProperty) Get() *efl.Value {
cproperty := C.CString(p.property)
defer C.free(unsafe.Pointer(cproperty))
- return unsafe.Pointer(C.efl_model_property_get(p.obj, cproperty))
+ return efl.WrapValue(unsafe.Pointer(C.efl_model_property_get(p.obj, cproperty)))
}
// Set sets the value for the captured key(s).
-func (p modelPropertyProperty) Set(val unsafe.Pointer) {
+func (p modelPropertyProperty) Set(val *efl.Value) {
cproperty := C.CString(p.property)
defer C.free(unsafe.Pointer(cproperty))
- C.efl_model_property_set(p.obj, cproperty, (*C.Eina_Value)(val))
+ C.efl_model_property_set(p.obj, cproperty, (*C.Eina_Value)(val.Ptr()))
}
// OnPropertiesChanged registers fn as a callback for the EFL_MODEL_EVENT_PROPERTIES_CHANGED event on Model.
diff --git a/efl/layout/signal.go b/efl/layout/signal.go
index 5b86a20..12eecb9 100644
--- a/efl/layout/signal.go
+++ b/efl/layout/signal.go
@@ -112,6 +112,11 @@ func wrapSignal(ptr unsafe.Pointer) *Signal {
return o
}
+// MessageSend calls the efl_layout_signal_message_send method on Signal.
+func (o *Signal) MessageSend(id int, msg *efl.Value) {
+ C.efl_layout_signal_message_send((*C.Eo)(o.Eo()), C.int(id), *(*C.Eina_Value)(msg.Ptr()))
+}
+
// SignalCallbackAdd calls the efl_layout_signal_callback_add method on Signal.
func (o *Signal) SignalCallbackAdd(emission string, source string, func_ func(unsafe.Pointer, string, string)) bool {
cemission := C.CString(emission)
diff --git a/efl/ui/calendar.go b/efl/ui/calendar.go
index 651cffa..59ad0b6 100644
--- a/efl/ui/calendar.go
+++ b/efl/ui/calendar.go
@@ -273,8 +273,8 @@ func (o *Calendar) Prepare() {
}
// FormattedValueGet calls the efl_ui_format_formatted_value_get method on Calendar.
-func (o *Calendar) FormattedValueGet(str unsafe.Pointer, value unsafe.Pointer) {
- C.efl_ui_format_formatted_value_get((*C.Eo)(o.Eo()), (*C.Eina_Strbuf)(str), *(*C.Eina_Value)(value))
+func (o *Calendar) FormattedValueGet(str unsafe.Pointer, value *efl.Value) {
+ C.efl_ui_format_formatted_value_get((*C.Eo)(o.Eo()), (*C.Eina_Strbuf)(str), *(*C.Eina_Value)(value.Ptr()))
}
// DecimalPlacesGet calls the efl_ui_format_decimal_places_get method on Calendar.
diff --git a/efl/ui/format.go b/efl/ui/format.go
index 09507dd..fc7842f 100644
--- a/efl/ui/format.go
+++ b/efl/ui/format.go
@@ -148,8 +148,8 @@ func (o *Format) SetFormatString(string string, type_ unsafe.Pointer) {
}
// FormattedValueGet calls the efl_ui_format_formatted_value_get method on Format.
-func (o *Format) FormattedValueGet(str unsafe.Pointer, value unsafe.Pointer) {
- C.efl_ui_format_formatted_value_get((*C.Eo)(o.Eo()), (*C.Eina_Strbuf)(str), *(*C.Eina_Value)(value))
+func (o *Format) FormattedValueGet(str unsafe.Pointer, value *efl.Value) {
+ C.efl_ui_format_formatted_value_get((*C.Eo)(o.Eo()), (*C.Eina_Strbuf)(str), *(*C.Eina_Value)(value.Ptr()))
}
// DecimalPlacesGet calls the efl_ui_format_decimal_places_get method on Format.
diff --git a/efl/ui/image.go b/efl/ui/image.go
index 6f15653..620c7fc 100644
--- a/efl/ui/image.go
+++ b/efl/ui/image.go
@@ -1186,6 +1186,11 @@ func (o *Image) CalcForce() {
C.efl_layout_calc_force((*C.Eo)(o.Eo()))
}
+// MessageSend calls the efl_layout_signal_message_send method on Image.
+func (o *Image) MessageSend(id int, msg *efl.Value) {
+ C.efl_layout_signal_message_send((*C.Eo)(o.Eo()), C.int(id), *(*C.Eina_Value)(msg.Ptr()))
+}
+
// SignalCallbackAdd calls the efl_layout_signal_callback_add method on Image.
func (o *Image) SignalCallbackAdd(emission string, source string, func_ func(unsafe.Pointer, string, string)) bool {
cemission := C.CString(emission)
diff --git a/efl/ui/layout_base.go b/efl/ui/layout_base.go
index ada9ad8..c88bd2f 100644
--- a/efl/ui/layout_base.go
+++ b/efl/ui/layout_base.go
@@ -282,6 +282,11 @@ func (o *LayoutBase) CalcForce() {
C.efl_layout_calc_force((*C.Eo)(o.Eo()))
}
+// MessageSend calls the efl_layout_signal_message_send method on LayoutBase.
+func (o *LayoutBase) MessageSend(id int, msg *efl.Value) {
+ C.efl_layout_signal_message_send((*C.Eo)(o.Eo()), C.int(id), *(*C.Eina_Value)(msg.Ptr()))
+}
+
// SignalCallbackAdd calls the efl_layout_signal_callback_add method on LayoutBase.
func (o *LayoutBase) SignalCallbackAdd(emission string, source string, func_ func(unsafe.Pointer, string, string)) bool {
cemission := C.CString(emission)
diff --git a/efl/ui/progressbar.go b/efl/ui/progressbar.go
index f4af63b..16133d6 100644
--- a/efl/ui/progressbar.go
+++ b/efl/ui/progressbar.go
@@ -336,8 +336,8 @@ func (o *Progressbar) SetMarkup(val string) {
}
// FormattedValueGet calls the efl_ui_format_formatted_value_get method on Progressbar.
-func (o *Progressbar) FormattedValueGet(str unsafe.Pointer, value unsafe.Pointer) {
- C.efl_ui_format_formatted_value_get((*C.Eo)(o.Eo()), (*C.Eina_Strbuf)(str), *(*C.Eina_Value)(value))
+func (o *Progressbar) FormattedValueGet(str unsafe.Pointer, value *efl.Value) {
+ C.efl_ui_format_formatted_value_get((*C.Eo)(o.Eo()), (*C.Eina_Strbuf)(str), *(*C.Eina_Value)(value.Ptr()))
}
// DecimalPlacesGet calls the efl_ui_format_decimal_places_get method on Progressbar.
diff --git a/efl/ui/spin.go b/efl/ui/spin.go
index f6d066d..c2c6ff3 100644
--- a/efl/ui/spin.go
+++ b/efl/ui/spin.go
@@ -236,8 +236,8 @@ func (o *Spin) ElmActions() unsafe.Pointer {
}
// FormattedValueGet calls the efl_ui_format_formatted_value_get method on Spin.
-func (o *Spin) FormattedValueGet(str unsafe.Pointer, value unsafe.Pointer) {
- C.efl_ui_format_formatted_value_get((*C.Eo)(o.Eo()), (*C.Eina_Strbuf)(str), *(*C.Eina_Value)(value))
+func (o *Spin) FormattedValueGet(str unsafe.Pointer, value *efl.Value) {
+ C.efl_ui_format_formatted_value_get((*C.Eo)(o.Eo()), (*C.Eina_Strbuf)(str), *(*C.Eina_Value)(value.Ptr()))
}
// DecimalPlacesGet calls the efl_ui_format_decimal_places_get method on Spin.
diff --git a/efl/ui/tags.go b/efl/ui/tags.go
index c1abaec..a55da1e 100644
--- a/efl/ui/tags.go
+++ b/efl/ui/tags.go
@@ -285,8 +285,8 @@ func (o *Tags) SetText(val string) {
}
// FormattedValueGet calls the efl_ui_format_formatted_value_get method on Tags.
-func (o *Tags) FormattedValueGet(str unsafe.Pointer, value unsafe.Pointer) {
- C.efl_ui_format_formatted_value_get((*C.Eo)(o.Eo()), (*C.Eina_Strbuf)(str), *(*C.Eina_Value)(value))
+func (o *Tags) FormattedValueGet(str unsafe.Pointer, value *efl.Value) {
+ C.efl_ui_format_formatted_value_get((*C.Eo)(o.Eo()), (*C.Eina_Strbuf)(str), *(*C.Eina_Value)(value.Ptr()))
}
// DecimalPlacesGet calls the efl_ui_format_decimal_places_get method on Tags.
diff --git a/efl/ui/win.go b/efl/ui/win.go
index ab8edde..ceaa042 100644
--- a/efl/ui/win.go
+++ b/efl/ui/win.go
@@ -179,19 +179,6 @@ static void _ego_set_efl_ui_win_wm_available_profiles_set(Eo *obj, void *val) {
(__typeof__(efl_ui_win_wm_available_profiles_get((const Eo *)0)))(uintptr_t)val;
efl_ui_win_wm_available_profiles_set(obj, typed);
}
-// _ego_get_efl_ui_win_exit_on_close_get wraps the getter, casting the return value through
-// uintptr_t so that both pointer and integer returns become void *.
-// This prevents C type conflicts when Eolian's type differs from the header.
-static void *_ego_get_efl_ui_win_exit_on_close_get(const Eo *obj) {
- return (void *)(uintptr_t)efl_ui_win_exit_on_close_get(obj);
-}
-// _ego_set_efl_ui_win_exit_on_close_set wraps the setter, using __typeof__ on the getter to
-// infer the actual parameter type so void * can be cast correctly.
-static void _ego_set_efl_ui_win_exit_on_close_set(Eo *obj, void *val) {
- __typeof__(efl_ui_win_exit_on_close_get((const Eo *)0)) typed =
- (__typeof__(efl_ui_win_exit_on_close_get((const Eo *)0)))(uintptr_t)val;
- efl_ui_win_exit_on_close_set(obj, typed);
-}
// _ego_get_efl_ui_win_icon_object_get wraps the getter, casting the return value through
// uintptr_t so that both pointer and integer returns become void *.
// This prevents C type conflicts when Eolian's type differs from the header.
@@ -906,13 +893,13 @@ func (o *Win) SetAutohide(val bool) {
}
// ExitOnClose returns the ExitOnClose property of the Win.
-func (o *Win) ExitOnClose() unsafe.Pointer {
- return unsafe.Pointer(C._ego_get_efl_ui_win_exit_on_close_get((*C.Eo)(o.Eo())))
+func (o *Win) ExitOnClose() *efl.Value {
+ return efl.WrapValue(unsafe.Pointer(C.efl_ui_win_exit_on_close_get((*C.Eo)(o.Eo()))))
}
// SetExitOnClose sets the ExitOnClose property of the Win.
-func (o *Win) SetExitOnClose(val unsafe.Pointer) {
- C._ego_set_efl_ui_win_exit_on_close_set((*C.Eo)(o.Eo()), val)
+func (o *Win) SetExitOnClose(val *efl.Value) {
+ C.efl_ui_win_exit_on_close_set((*C.Eo)(o.Eo()), (*C.Eina_Value)(val.Ptr()))
}
// IconObject returns the IconObject property of the Win.
@@ -1724,17 +1711,17 @@ func (o *Win) Config(name string) winConfigProperty {
}
// Get returns the value for the captured key(s).
-func (p winConfigProperty) Get() unsafe.Pointer {
+func (p winConfigProperty) Get() *efl.Value {
cname := C.CString(p.name)
defer C.free(unsafe.Pointer(cname))
- return unsafe.Pointer(C.efl_config_get(p.obj, cname))
+ return efl.WrapValue(unsafe.Pointer(C.efl_config_get(p.obj, cname)))
}
// Set sets the value for the captured key(s).
-func (p winConfigProperty) Set(val unsafe.Pointer) {
+func (p winConfigProperty) Set(val *efl.Value) {
cname := C.CString(p.name)
defer C.free(unsafe.Pointer(cname))
- C.efl_config_set(p.obj, cname, (*C.Eina_Value)(val))
+ C.efl_config_set(p.obj, cname, (*C.Eina_Value)(val.Ptr()))
}
type winActionNameProperty struct {
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.