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 297373702e40b73c36017cae4653f1329b3cf94b
Author: [email protected] <[email protected]>
AuthorDate: Wed Apr 1 14:07:15 2026 -0600
feat(ego-gen): map Eina_Future to channel, Eina_Content to wrapper
Methods returning Eina_Future now return <-chan *efl.Value.
Methods taking Eina_Content now accept *efl.Content.
Unblocks Factory.create, Dnd.drag_start, Selection.selection_set.
Coverage 97.2% (1255/1291).
Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
---
cmd/ego-gen/generator.go | 2 ++
cmd/ego-gen/generator_test.go | 36 ++++++++++++++++++++++++++++++++++++
cmd/ego-gen/main.go | 9 +++------
cmd/ego-gen/templates/class.go.tmpl | 5 +++++
cmd/ego-gen/typemap.go | 23 +++++++++++++++++++++++
cmd/ego-stats/main.go | 8 +++-----
cmd/ego-stats/typemap.go | 22 +++++++++++++++++++++-
efl/canvas/textblock.go | 4 ++--
efl/eo/loop.go | 12 ++++++------
efl/eo/loop_consumer.go | 8 ++++----
efl/eo/loop_model.go | 12 ++++++------
efl/eo/model.go | 12 ++++++------
efl/net/control_access_point.go | 4 ++--
efl/net/control_technology.go | 4 ++--
efl/net/ip_address.go | 4 ++--
efl/ui/dnd.go | 11 +++++++++--
efl/ui/factory.go | 5 +++++
efl/ui/selection.go | 9 +++++++--
efl/ui/spotlight_container.go | 4 ++--
efl/ui/view_factory.go | 4 ++--
efl/ui/widget.go | 20 ++++++++++++++++----
efl/ui/widget_factory.go | 5 +++++
ego-stats | Bin 2791504 -> 2791624 bytes
23 files changed, 169 insertions(+), 54 deletions(-)
diff --git a/cmd/ego-gen/generator.go b/cmd/ego-gen/generator.go
index 52efba5..a2807f8 100644
--- a/cmd/ego-gen/generator.go
+++ b/cmd/ego-gen/generator.go
@@ -295,6 +295,8 @@ func NewGenerator(templateDir, outputDir string) (*Generator, error) {
"isEnumTypedefKey": IsEnumTypedefKey,
"isEinaValue": IsEinaValue,
"isEinaError": IsEinaError,
+ "isEinaFuture": IsEinaFuture,
+ "isEinaContent": IsEinaContent,
}
pattern := filepath.Join(templateDir, "*.tmpl")
diff --git a/cmd/ego-gen/generator_test.go b/cmd/ego-gen/generator_test.go
index fffa9af..d755dbe 100644
--- a/cmd/ego-gen/generator_test.go
+++ b/cmd/ego-gen/generator_test.go
@@ -1454,3 +1454,39 @@ func TestGenerateClass_StructReturnMethod(t *testing.T) {
}
}
}
+
+func TestGenerateClass_EinaContentParam(t *testing.T) {
+ g, outDir := newTestGenerator(t)
+ data := ClassData{
+ PackageName: "ui", GoName: "Selection",
+ EolianName: "Efl.Ui.Selection", CClassName: "EFL_UI_SELECTION_CLASS",
+ CClassGetFunc: "efl_ui_selection_class_get", CPrefix: "efl_ui_selection",
+ EOHeaderFile: "efl_ui_selection.eo.h", IsAbstract: true,
+ Methods: []MethodData{{
+ GoName: "SelectionSet", CName: "efl_ui_selection_set",
+ Params: []ParamData{
+ {GoName: "buffer", GoType: "unsafe.Pointer", CType: "Efl_Ui_Cnp_Buffer"},
+ {GoName: "content", GoType: "*efl.Content", CType: "Eina_Content *"},
+ {GoName: "seat", GoType: "uint", CType: "unsigned int"},
+ },
+ }},
+ }
+ if err := g.GenerateClass(data); err != nil {
+ t.Fatalf("GenerateClass: %v", err)
+ }
+ outFile := filepath.Join(outDir, "ui", "selection.go")
+ content, err := os.ReadFile(outFile)
+ if err != nil {
+ t.Fatalf("not found: %v", err)
+ }
+ src := string(content)
+ mustContain := []string{
+ "func (o *Selection) SelectionSet(buffer unsafe.Pointer, content *efl.Content, seat uint)",
+ ".Ptr()",
+ }
+ for _, want := range mustContain {
+ if !strings.Contains(src, want) {
+ t.Errorf("missing %q\n%s", want, src)
+ }
+ }
+}
diff --git a/cmd/ego-gen/main.go b/cmd/ego-gen/main.go
index 3c73792..6357864 100644
--- a/cmd/ego-gen/main.go
+++ b/cmd/ego-gen/main.go
@@ -86,8 +86,7 @@ var methodBlocklist = map[string]bool{
// efl.Net.Socket.Udp — init takes Efl_Net_Ip_Address* (not in Eolian definition); also needs
// EFL_NET_SOCKET_UDP_PROTECTED which is not defined in the template.
"efl_net_socket_udp_init": true,
- // efl.Ui.Factory — factory_create returns Eina_Future* (not a simple pointer)
- "efl_ui_factory_create": true,
+ // efl.Ui.Factory — factory_create: Eina_Future* now handled via isEinaFuture.
// efl.Ui.FocusUtil — static methods with non-Eo first arg; generator wraps incorrectly
"efl_ui_focus_util_focus": true,
"efl_ui_focus_util_direction_complement": true,
@@ -97,8 +96,7 @@ var methodBlocklist = map[string]bool{
// (3 extra params not reflected in Eolian's property model). Keep blocked to prevent
// the property wrapper from generating a broken C shim with too few arguments.
"efl_ui_format_func_set": true,
- // efl.Ui.Dnd — struct-by-value Eina_Content parameter
- "efl_ui_dnd_drag_start": true,
+ // efl.Ui.Dnd — drag_start: Eina_Content* now handled via isEinaContent.
// efl.Ui.FocusManager — returns struct by value
"efl_ui_focus_manager_logical_end": true,
// efl.Ui.PositionManagerEntity — returns Eina_Rect struct; out-param index
@@ -107,8 +105,7 @@ var methodBlocklist = map[string]bool{
// efl.Ui.PositionManagerDataAccessV1 — data_access setter takes callback+data+free_cb triplets;
// Eolian reports fewer params than the actual C declaration.
"efl_ui_position_manager_data_access_v1_data_access_set": true,
- // efl.Ui.Selection — struct-by-value Eina_Content parameter
- "efl_ui_selection_set": true,
+ // efl.Ui.Selection — selection_set: Eina_Content* now handled via isEinaContent.
// efl.Ui.ViewModel — property_logic_add has complex multi-callback + iterator params
// that the generator cannot handle (Eolian reports fewer params than the C declaration).
"efl_ui_view_model_property_logic_add": true,
diff --git a/cmd/ego-gen/templates/class.go.tmpl b/cmd/ego-gen/templates/class.go.tmpl
index 6d4043c..5c88a34 100644
--- a/cmd/ego-gen/templates/class.go.tmpl
+++ b/cmd/ego-gen/templates/class.go.tmpl
@@ -828,6 +828,8 @@ func (o *{{$.GoName}}) {{.GoName}}({{range $i, $p := .Params}}{{if $i}}, {{end}}
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 isEinaFuture .ReturnCType}}
+ return efl.FutureToChannel(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}}
@@ -1122,6 +1124,8 @@ func {{$gf.GoName}}({{range $i, $p := $gf.Params}}{{if $i}}, {{end}}{{$p.GoName}
return C.GoString(C.{{$gf.CName}}({{range $i, $p := $gf.Params}}{{if $i}}, {{end}}{{template "paramArg" $p}}{{end}}))
{{- else if isBoolType $gf.ReturnCType}}
return C.{{$gf.CName}}({{range $i, $p := $gf.Params}}{{if $i}}, {{end}}{{template "paramArg" $p}}{{end}}) != 0
+{{- else if isEinaFuture $gf.ReturnCType}}
+ return efl.FutureToChannel(unsafe.Pointer(C.{{$gf.CName}}({{range $i, $p := $gf.Params}}{{if $i}}, {{end}}{{template "paramArg" $p}}{{end}})))
{{- else if $gf.IsEoReturn}}
return unsafe.Pointer(C.{{$gf.CName}}({{range $i, $p := $gf.Params}}{{if $i}}, {{end}}{{template "paramArg" $p}}{{end}}))
{{- else}}
@@ -1140,6 +1144,7 @@ func {{$gf.GoName}}({{range $i, $p := $gf.Params}}{{if $i}}, {{end}}{{$p.GoName}
{{- if isCPointerType .CType}}(*C.Eina_Value)({{.GoName}}.Ptr())
{{- else}}*(*C.Eina_Value)({{.GoName}}.Ptr())
{{- end}}
+{{- else if isEinaContent .CType}}(*C.Eina_Content)({{.GoName}}.Ptr())
{{- 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 fe1619e..e041255 100644
--- a/cmd/ego-gen/typemap.go
+++ b/cmd/ego-gen/typemap.go
@@ -141,6 +141,13 @@ func CTypeToGo(ctype string) string {
return "error"
}
+ if IsEinaFuture(ctype) {
+ return "<-chan *efl.Value"
+ }
+ if IsEinaContent(ctype) {
+ return "*efl.Content"
+ }
+
// Any remaining pointer type (ends with "*") becomes an opaque pointer.
if strings.HasSuffix(ctype, "*") {
return "unsafe.Pointer"
@@ -308,6 +315,22 @@ func IsEnumTypedefKey(ctype string) bool {
return goType == "unsafe.Pointer"
}
+// IsEinaFuture reports whether a C type is Eina_Future* — an asynchronous
+// future that ego-gen maps to a Go receive channel (<-chan *efl.Value).
+func IsEinaFuture(ctype string) bool {
+ ct := strings.TrimSpace(ctype)
+ return ct == "Eina_Future *" || ct == "Eina_Future*"
+}
+
+// IsEinaContent reports whether a C type is Eina_Content or Eina_Content* —
+// a typed data blob that ego-gen maps to *efl.Content.
+func IsEinaContent(ctype string) bool {
+ ct := strings.TrimSpace(ctype)
+ ct = strings.TrimPrefix(ct, "const ")
+ ct = strings.TrimSpace(ct)
+ return ct == "Eina_Content" || ct == "Eina_Content *"
+}
+
// CTypeToCgo maps a C type to a valid cgo type identifier that can be used in
// expressions like C.<type>(value). Multi-word C types like "unsigned int" are
// mapped to their single-word cgo equivalents ("C.uint"). Leading "const "
diff --git a/cmd/ego-stats/main.go b/cmd/ego-stats/main.go
index 49a9654..c50fbab 100644
--- a/cmd/ego-stats/main.go
+++ b/cmd/ego-stats/main.go
@@ -94,8 +94,7 @@ var methodBlocklistAnnotated = []blockedEntry{
// efl.Canvas.Animation — global property getter/setter (no Eo* first arg)
{"efl_animation_default_duration_get", ReasonGlobalFunction},
{"efl_animation_default_duration_set", ReasonGlobalFunction},
- // efl.Ui.Factory — factory_create returns Eina_Future* (not a simple pointer)
- {"efl_ui_factory_create", ReasonEinaError},
+ // efl.Ui.Factory — factory_create: Eina_Future* now bound via isEinaFuture.
// efl.Ui.FocusManager — returns struct by value
{"efl_ui_focus_manager_logical_end", ReasonOutParamStruct},
// efl.Ui.FocusUtil — static methods with non-Eo first arg; generator wraps incorrectly
@@ -103,14 +102,13 @@ var methodBlocklistAnnotated = []blockedEntry{
{"efl_ui_focus_util_direction_complement", ReasonWrongArgCount},
// efl.Ui.Format — func_set takes callback+data+free_cb (3 extra params, not 1)
{"efl_ui_format_func_set", ReasonCallback},
- // efl.Ui.Dnd — struct-by-value Eina_Content parameter
- {"efl_ui_dnd_drag_start", ReasonStructByValue},
+ // efl.Ui.Dnd — drag_start: Eina_Content* now bound via isEinaContent.
// efl.Ui.PositionManagerEntity — struct/out-param issues
{"efl_ui_position_manager_entity_position_single_item", ReasonOutParamStruct},
{"efl_ui_position_manager_entity_relative_item", ReasonOutParamStruct},
// efl.Ui.PositionManagerDataAccessV1 — callback triplet params
{"efl_ui_position_manager_data_access_v1_data_access_set", ReasonCallback},
- {"efl_ui_selection_set", ReasonStructByValue},
+ // efl.Ui.Selection — selection_set: Eina_Content* now bound via isEinaContent.
// efl.Ui.Theme — global
{"efl_ui_theme_default_get", ReasonGlobalFunction},
// efl.Ui.ViewModel — callback params
diff --git a/cmd/ego-stats/typemap.go b/cmd/ego-stats/typemap.go
index 44fdebe..e49d15d 100644
--- a/cmd/ego-stats/typemap.go
+++ b/cmd/ego-stats/typemap.go
@@ -46,12 +46,32 @@ func CTypeToGo(ctype string) string {
case "void *", "Eo *", "const Eo *":
return "unsafe.Pointer"
}
+ if IsEinaFuture(ctype) {
+ return "<-chan *efl.Value"
+ }
+ if IsEinaContent(ctype) {
+ return "*efl.Content"
+ }
if strings.HasSuffix(ctype, "*") {
return "unsafe.Pointer"
}
return "unsafe.Pointer"
}
+// IsEinaFuture reports whether a C type is Eina_Future*.
+func IsEinaFuture(ctype string) bool {
+ ct := strings.TrimSpace(ctype)
+ return ct == "Eina_Future *" || ct == "Eina_Future*"
+}
+
+// IsEinaContent reports whether a C type is Eina_Content or Eina_Content*.
+func IsEinaContent(ctype string) bool {
+ ct := strings.TrimSpace(ctype)
+ ct = strings.TrimPrefix(ct, "const ")
+ ct = strings.TrimSpace(ct)
+ return ct == "Eina_Content" || ct == "Eina_Content *"
+}
+
// NeedsStringConversion reports whether a C type requires string conversion.
func NeedsStringConversion(ctype string) bool {
return strings.Contains(ctype, "char *") ||
@@ -69,7 +89,7 @@ func IsKnownStruct(ctype string) bool {
ct = strings.TrimSpace(ct)
switch ct {
case "Eina_Size2D", "Eina_Position2D", "Eina_Rect", "Eina_Vector2",
- "Eina_Slice", "Eina_Rw_Slice", "Eina_Value", "Efl_Time":
+ "Eina_Slice", "Eina_Rw_Slice", "Eina_Value", "Efl_Time", "Eina_Content":
return true
}
return false
diff --git a/efl/canvas/textblock.go b/efl/canvas/textblock.go
index 7cc0b3a..02072e9 100644
--- a/efl/canvas/textblock.go
+++ b/efl/canvas/textblock.go
@@ -1047,8 +1047,8 @@ func (o *Textblock) ObstaclesUpdate() {
}
// AsyncLayout calls the efl_canvas_textblock_async_layout method on Textblock.
-func (o *Textblock) AsyncLayout() unsafe.Pointer {
- return unsafe.Pointer(C.efl_canvas_textblock_async_layout((*C.Eo)(o.Eo())))
+func (o *Textblock) AsyncLayout() <-chan *efl.Value {
+ return efl.FutureToChannel(unsafe.Pointer(C.efl_canvas_textblock_async_layout((*C.Eo)(o.Eo()))))
}
// FilterInputAlpha calls the evas_filter_input_alpha method on Textblock.
diff --git a/efl/eo/loop.go b/efl/eo/loop.go
index 486583a..9a5d500 100644
--- a/efl/eo/loop.go
+++ b/efl/eo/loop.go
@@ -197,18 +197,18 @@ func (o *Loop) Quit(exitCode *efl.Value) {
}
// Job calls the efl_loop_job method on Loop.
-func (o *Loop) Job() unsafe.Pointer {
- return unsafe.Pointer(C.efl_loop_job((*C.Eo)(o.Eo())))
+func (o *Loop) Job() <-chan *efl.Value {
+ return efl.FutureToChannel(unsafe.Pointer(C.efl_loop_job((*C.Eo)(o.Eo()))))
}
// Idle calls the efl_loop_idle method on Loop.
-func (o *Loop) Idle() unsafe.Pointer {
- return unsafe.Pointer(C.efl_loop_idle((*C.Eo)(o.Eo())))
+func (o *Loop) Idle() <-chan *efl.Value {
+ return efl.FutureToChannel(unsafe.Pointer(C.efl_loop_idle((*C.Eo)(o.Eo()))))
}
// Timeout calls the efl_loop_timeout method on Loop.
-func (o *Loop) Timeout(time float64) unsafe.Pointer {
- return unsafe.Pointer(C.efl_loop_timeout((*C.Eo)(o.Eo()), C.double(time)))
+func (o *Loop) Timeout(time float64) <-chan *efl.Value {
+ return efl.FutureToChannel(unsafe.Pointer(C.efl_loop_timeout((*C.Eo)(o.Eo()), C.double(time))))
}
// OnIdleEnter registers fn as a callback for the EFL_LOOP_EVENT_IDLE_ENTER event on Loop.
diff --git a/efl/eo/loop_consumer.go b/efl/eo/loop_consumer.go
index 9d3cc67..312cd80 100644
--- a/efl/eo/loop_consumer.go
+++ b/efl/eo/loop_consumer.go
@@ -128,13 +128,13 @@ func (o *LoopConsumer) Loop() unsafe.Pointer {
}
// FutureResolved calls the efl_loop_future_resolved method on LoopConsumer.
-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())))
+func (o *LoopConsumer) FutureResolved(result *efl.Value) <-chan *efl.Value {
+ return efl.FutureToChannel(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.
-func (o *LoopConsumer) FutureRejected(error int) unsafe.Pointer {
- return unsafe.Pointer(C.efl_loop_future_rejected((*C.Eo)(o.Eo()), C.Eina_Error(error)))
+func (o *LoopConsumer) FutureRejected(error int) <-chan *efl.Value {
+ return efl.FutureToChannel(unsafe.Pointer(C.efl_loop_future_rejected((*C.Eo)(o.Eo()), C.Eina_Error(error))))
}
// PromiseNew calls the efl_loop_promise_new method on LoopConsumer.
diff --git a/efl/eo/loop_model.go b/efl/eo/loop_model.go
index 67a4162..f7b6a6d 100644
--- a/efl/eo/loop_model.go
+++ b/efl/eo/loop_model.go
@@ -161,20 +161,20 @@ func (o *LoopModel) VolatileMake() {
}
// PropertyReadyGet calls the efl_model_property_ready_get method on LoopModel.
-func (o *LoopModel) PropertyReadyGet(property string) unsafe.Pointer {
+func (o *LoopModel) PropertyReadyGet(property string) <-chan *efl.Value {
cproperty := C.CString(property)
defer C.free(unsafe.Pointer(cproperty))
- return unsafe.Pointer(C.efl_model_property_ready_get((*C.Eo)(o.Eo()), cproperty))
+ return efl.FutureToChannel(unsafe.Pointer(C.efl_model_property_ready_get((*C.Eo)(o.Eo()), cproperty)))
}
// ChildrenSliceGet calls the efl_model_children_slice_get method on LoopModel.
-func (o *LoopModel) ChildrenSliceGet(start uint, count uint) unsafe.Pointer {
- return unsafe.Pointer(C.efl_model_children_slice_get((*C.Eo)(o.Eo()), C.uint(start), C.uint(count)))
+func (o *LoopModel) ChildrenSliceGet(start uint, count uint) <-chan *efl.Value {
+ return efl.FutureToChannel(unsafe.Pointer(C.efl_model_children_slice_get((*C.Eo)(o.Eo()), C.uint(start), C.uint(count))))
}
// ChildrenIndexGet calls the efl_model_children_index_get method on LoopModel.
-func (o *LoopModel) ChildrenIndexGet(indices unsafe.Pointer) unsafe.Pointer {
- return unsafe.Pointer(C.efl_model_children_index_get((*C.Eo)(o.Eo()), (*C.Eina_Iterator)(indices)))
+func (o *LoopModel) ChildrenIndexGet(indices unsafe.Pointer) <-chan *efl.Value {
+ return efl.FutureToChannel(unsafe.Pointer(C.efl_model_children_index_get((*C.Eo)(o.Eo()), (*C.Eina_Iterator)(indices))))
}
// ChildAdd calls the efl_model_child_add method on LoopModel.
diff --git a/efl/eo/model.go b/efl/eo/model.go
index ef7c853..ae08851 100644
--- a/efl/eo/model.go
+++ b/efl/eo/model.go
@@ -153,20 +153,20 @@ func (o *Model) ChildrenCount() uint {
}
// PropertyReadyGet calls the efl_model_property_ready_get method on Model.
-func (o *Model) PropertyReadyGet(property string) unsafe.Pointer {
+func (o *Model) PropertyReadyGet(property string) <-chan *efl.Value {
cproperty := C.CString(property)
defer C.free(unsafe.Pointer(cproperty))
- return unsafe.Pointer(C.efl_model_property_ready_get((*C.Eo)(o.Eo()), cproperty))
+ return efl.FutureToChannel(unsafe.Pointer(C.efl_model_property_ready_get((*C.Eo)(o.Eo()), cproperty)))
}
// ChildrenSliceGet calls the efl_model_children_slice_get method on Model.
-func (o *Model) ChildrenSliceGet(start uint, count uint) unsafe.Pointer {
- return unsafe.Pointer(C.efl_model_children_slice_get((*C.Eo)(o.Eo()), C.uint(start), C.uint(count)))
+func (o *Model) ChildrenSliceGet(start uint, count uint) <-chan *efl.Value {
+ return efl.FutureToChannel(unsafe.Pointer(C.efl_model_children_slice_get((*C.Eo)(o.Eo()), C.uint(start), C.uint(count))))
}
// ChildrenIndexGet calls the efl_model_children_index_get method on Model.
-func (o *Model) ChildrenIndexGet(indices unsafe.Pointer) unsafe.Pointer {
- return unsafe.Pointer(C.efl_model_children_index_get((*C.Eo)(o.Eo()), (*C.Eina_Iterator)(indices)))
+func (o *Model) ChildrenIndexGet(indices unsafe.Pointer) <-chan *efl.Value {
+ return efl.FutureToChannel(unsafe.Pointer(C.efl_model_children_index_get((*C.Eo)(o.Eo()), (*C.Eina_Iterator)(indices))))
}
// ChildAdd calls the efl_model_child_add method on Model.
diff --git a/efl/net/control_access_point.go b/efl/net/control_access_point.go
index 9f52503..d30008c 100644
--- a/efl/net/control_access_point.go
+++ b/efl/net/control_access_point.go
@@ -416,8 +416,8 @@ func (o *ControlAccessPoint) SetConfigurationIpv6(method unsafe.Pointer, address
}
// Connect calls the efl_net_control_access_point_connect method on ControlAccessPoint.
-func (o *ControlAccessPoint) Connect() unsafe.Pointer {
- return unsafe.Pointer(C.efl_net_control_access_point_connect((*C.Eo)(o.Eo())))
+func (o *ControlAccessPoint) Connect() <-chan *efl.Value {
+ return efl.FutureToChannel(unsafe.Pointer(C.efl_net_control_access_point_connect((*C.Eo)(o.Eo()))))
}
// Disconnect calls the efl_net_control_access_point_disconnect method on ControlAccessPoint.
diff --git a/efl/net/control_technology.go b/efl/net/control_technology.go
index 1b6351e..892191e 100644
--- a/efl/net/control_technology.go
+++ b/efl/net/control_technology.go
@@ -203,8 +203,8 @@ func (o *ControlTechnology) Type() unsafe.Pointer {
}
// Scan calls the efl_net_control_technology_scan method on ControlTechnology.
-func (o *ControlTechnology) Scan() unsafe.Pointer {
- return unsafe.Pointer(C.efl_net_control_technology_scan((*C.Eo)(o.Eo())))
+func (o *ControlTechnology) Scan() <-chan *efl.Value {
+ return efl.FutureToChannel(unsafe.Pointer(C.efl_net_control_technology_scan((*C.Eo)(o.Eo()))))
}
// OnChanged registers fn as a callback for the EFL_NET_CONTROL_TECHNOLOGY_EVENT_CHANGED event on ControlTechnology.
diff --git a/efl/net/ip_address.go b/efl/net/ip_address.go
index 1b2d0c9..9627e45 100644
--- a/efl/net/ip_address.go
+++ b/efl/net/ip_address.go
@@ -295,8 +295,8 @@ func Parse(numericAddress string) unsafe.Pointer {
}
// Resolve is a package-level EFL function with no object receiver.
-func Resolve(address string, family int, flags int) unsafe.Pointer {
+func Resolve(address string, family int, flags int) <-chan *efl.Value {
caddress := C.CString(address)
defer C.free(unsafe.Pointer(caddress))
- return unsafe.Pointer(C.efl_net_ip_address_resolve(caddress, C.int(family), C.int(flags)))
+ return efl.FutureToChannel(unsafe.Pointer(C.efl_net_ip_address_resolve(caddress, C.int(family), C.int(flags))))
}
diff --git a/efl/ui/dnd.go b/efl/ui/dnd.go
index 0d58b08..64f0014 100644
--- a/efl/ui/dnd.go
+++ b/efl/ui/dnd.go
@@ -151,14 +151,21 @@ func wrapDnd(ptr unsafe.Pointer) *Dnd {
return o
}
+// DragStart calls the efl_ui_dnd_drag_start method on Dnd.
+func (o *Dnd) DragStart(content *efl.Content, action string, seat uint) unsafe.Pointer {
+ caction := C.CString(action)
+ defer C.free(unsafe.Pointer(caction))
+ return unsafe.Pointer(C.efl_ui_dnd_drag_start((*C.Eo)(o.Eo()), (*C.Eina_Content)(content.Ptr()), caction, C.uint(seat)))
+}
+
// DragCancel calls the efl_ui_dnd_drag_cancel method on Dnd.
func (o *Dnd) DragCancel(seat uint) {
C.efl_ui_dnd_drag_cancel((*C.Eo)(o.Eo()), C.uint(seat))
}
// DropDataGet calls the efl_ui_dnd_drop_data_get method on Dnd.
-func (o *Dnd) DropDataGet(seat uint, acceptableTypes unsafe.Pointer) unsafe.Pointer {
- return unsafe.Pointer(C.efl_ui_dnd_drop_data_get((*C.Eo)(o.Eo()), C.uint(seat), (*C.Eina_Iterator)(acceptableTypes)))
+func (o *Dnd) DropDataGet(seat uint, acceptableTypes unsafe.Pointer) <-chan *efl.Value {
+ return efl.FutureToChannel(unsafe.Pointer(C.efl_ui_dnd_drop_data_get((*C.Eo)(o.Eo()), C.uint(seat), (*C.Eina_Iterator)(acceptableTypes))))
}
type dndDragOffsetProperty struct {
diff --git a/efl/ui/factory.go b/efl/ui/factory.go
index 7fdca0e..2073b5f 100644
--- a/efl/ui/factory.go
+++ b/efl/ui/factory.go
@@ -152,6 +152,11 @@ func wrapFactory(ptr unsafe.Pointer) *Factory {
return o
}
+// Create calls the efl_ui_factory_create method on Factory.
+func (o *Factory) Create(models unsafe.Pointer) <-chan *efl.Value {
+ return efl.FutureToChannel(unsafe.Pointer(C.efl_ui_factory_create((*C.Eo)(o.Eo()), (*C.Eina_Iterator)(models))))
+}
+
// Release calls the efl_ui_factory_release method on Factory.
func (o *Factory) Release(uiViews unsafe.Pointer) {
C.efl_ui_factory_release((*C.Eo)(o.Eo()), (*C.Eina_Iterator)(uiViews))
diff --git a/efl/ui/selection.go b/efl/ui/selection.go
index f593c70..2c0fa8f 100644
--- a/efl/ui/selection.go
+++ b/efl/ui/selection.go
@@ -121,14 +121,19 @@ func wrapSelection(ptr unsafe.Pointer) *Selection {
return o
}
+// SelectionSet calls the efl_ui_selection_set method on Selection.
+func (o *Selection) SelectionSet(buffer unsafe.Pointer, content *efl.Content, seat uint) {
+ C.efl_ui_selection_set((*C.Eo)(o.Eo()), *(*C.Efl_Ui_Cnp_Buffer)(buffer), (*C.Eina_Content)(content.Ptr()), C.uint(seat))
+}
+
// SelectionClear calls the efl_ui_selection_clear method on Selection.
func (o *Selection) SelectionClear(buffer unsafe.Pointer, seat uint) {
C.efl_ui_selection_clear((*C.Eo)(o.Eo()), *(*C.Efl_Ui_Cnp_Buffer)(buffer), C.uint(seat))
}
// SelectionGet calls the efl_ui_selection_get method on Selection.
-func (o *Selection) SelectionGet(buffer unsafe.Pointer, seat uint, acceptableTypes unsafe.Pointer) unsafe.Pointer {
- return unsafe.Pointer(C.efl_ui_selection_get((*C.Eo)(o.Eo()), *(*C.Efl_Ui_Cnp_Buffer)(buffer), C.uint(seat), (*C.Eina_Iterator)(acceptableTypes)))
+func (o *Selection) SelectionGet(buffer unsafe.Pointer, seat uint, acceptableTypes unsafe.Pointer) <-chan *efl.Value {
+ return efl.FutureToChannel(unsafe.Pointer(C.efl_ui_selection_get((*C.Eo)(o.Eo()), *(*C.Efl_Ui_Cnp_Buffer)(buffer), C.uint(seat), (*C.Eina_Iterator)(acceptableTypes))))
}
// HasSelection calls the efl_ui_selection_has_selection method on Selection.
diff --git a/efl/ui/spotlight_container.go b/efl/ui/spotlight_container.go
index d26857b..353d647 100644
--- a/efl/ui/spotlight_container.go
+++ b/efl/ui/spotlight_container.go
@@ -308,12 +308,12 @@ func (o *SpotlightContainer) Push(widget efl.Objecter) {
}
// Pop calls the efl_ui_spotlight_pop method on SpotlightContainer.
-func (o *SpotlightContainer) Pop(deletionOnTransitionEnd bool) unsafe.Pointer {
+func (o *SpotlightContainer) Pop(deletionOnTransitionEnd bool) <-chan *efl.Value {
var cdeletionOnTransitionEnd C.Eina_Bool
if deletionOnTransitionEnd {
cdeletionOnTransitionEnd = 1
}
- return unsafe.Pointer(C.efl_ui_spotlight_pop((*C.Eo)(o.Eo()), cdeletionOnTransitionEnd))
+ return efl.FutureToChannel(unsafe.Pointer(C.efl_ui_spotlight_pop((*C.Eo)(o.Eo()), cdeletionOnTransitionEnd)))
}
// PackBegin calls the efl_pack_begin method on SpotlightContainer.
diff --git a/efl/ui/view_factory.go b/efl/ui/view_factory.go
index d529721..383ed87 100644
--- a/efl/ui/view_factory.go
+++ b/efl/ui/view_factory.go
@@ -144,6 +144,6 @@ func NewViewFactory(parent efl.Objecter, opts ...efl.Option) *ViewFactory {
}
// CreateWithEvent is a package-level EFL function with no object receiver.
-func CreateWithEvent(factory efl.Objecter, models unsafe.Pointer) unsafe.Pointer {
- return unsafe.Pointer(C.efl_ui_view_factory_create_with_event((*C.Eo)(factory.Eo()), (*C.Eina_Iterator)(models)))
+func CreateWithEvent(factory efl.Objecter, models unsafe.Pointer) <-chan *efl.Value {
+ return efl.FutureToChannel(unsafe.Pointer(C.efl_ui_view_factory_create_with_event((*C.Eo)(factory.Eo()), (*C.Eina_Iterator)(models))))
}
diff --git a/efl/ui/widget.go b/efl/ui/widget.go
index edfa5a1..9085cd3 100644
--- a/efl/ui/widget.go
+++ b/efl/ui/widget.go
@@ -1119,14 +1119,19 @@ func (o *Widget) TranslationUpdate() {
C.efl_ui_l10n_translation_update((*C.Eo)(o.Eo()))
}
+// SelectionSet calls the efl_ui_selection_set method on Widget.
+func (o *Widget) SelectionSet(buffer unsafe.Pointer, content *efl.Content, seat uint) {
+ C.efl_ui_selection_set((*C.Eo)(o.Eo()), *(*C.Efl_Ui_Cnp_Buffer)(buffer), (*C.Eina_Content)(content.Ptr()), C.uint(seat))
+}
+
// SelectionClear calls the efl_ui_selection_clear method on Widget.
func (o *Widget) SelectionClear(buffer unsafe.Pointer, seat uint) {
C.efl_ui_selection_clear((*C.Eo)(o.Eo()), *(*C.Efl_Ui_Cnp_Buffer)(buffer), C.uint(seat))
}
// SelectionGet calls the efl_ui_selection_get method on Widget.
-func (o *Widget) SelectionGet(buffer unsafe.Pointer, seat uint, acceptableTypes unsafe.Pointer) unsafe.Pointer {
- return unsafe.Pointer(C.efl_ui_selection_get((*C.Eo)(o.Eo()), *(*C.Efl_Ui_Cnp_Buffer)(buffer), C.uint(seat), (*C.Eina_Iterator)(acceptableTypes)))
+func (o *Widget) SelectionGet(buffer unsafe.Pointer, seat uint, acceptableTypes unsafe.Pointer) <-chan *efl.Value {
+ return efl.FutureToChannel(unsafe.Pointer(C.efl_ui_selection_get((*C.Eo)(o.Eo()), *(*C.Efl_Ui_Cnp_Buffer)(buffer), C.uint(seat), (*C.Eina_Iterator)(acceptableTypes))))
}
// HasSelection calls the efl_ui_selection_has_selection method on Widget.
@@ -1134,14 +1139,21 @@ func (o *Widget) HasSelection(buffer unsafe.Pointer, seat uint) bool {
return C.efl_ui_selection_has_selection((*C.Eo)(o.Eo()), *(*C.Efl_Ui_Cnp_Buffer)(buffer), C.uint(seat)) != 0
}
+// DragStart calls the efl_ui_dnd_drag_start method on Widget.
+func (o *Widget) DragStart(content *efl.Content, action string, seat uint) unsafe.Pointer {
+ caction := C.CString(action)
+ defer C.free(unsafe.Pointer(caction))
+ return unsafe.Pointer(C.efl_ui_dnd_drag_start((*C.Eo)(o.Eo()), (*C.Eina_Content)(content.Ptr()), caction, C.uint(seat)))
+}
+
// DragCancel calls the efl_ui_dnd_drag_cancel method on Widget.
func (o *Widget) DragCancel(seat uint) {
C.efl_ui_dnd_drag_cancel((*C.Eo)(o.Eo()), C.uint(seat))
}
// DropDataGet calls the efl_ui_dnd_drop_data_get method on Widget.
-func (o *Widget) DropDataGet(seat uint, acceptableTypes unsafe.Pointer) unsafe.Pointer {
- return unsafe.Pointer(C.efl_ui_dnd_drop_data_get((*C.Eo)(o.Eo()), C.uint(seat), (*C.Eina_Iterator)(acceptableTypes)))
+func (o *Widget) DropDataGet(seat uint, acceptableTypes unsafe.Pointer) <-chan *efl.Value {
+ return efl.FutureToChannel(unsafe.Pointer(C.efl_ui_dnd_drop_data_get((*C.Eo)(o.Eo()), C.uint(seat), (*C.Eina_Iterator)(acceptableTypes))))
}
// PropertyBind calls the efl_ui_property_bind method on Widget.
diff --git a/efl/ui/widget_factory.go b/efl/ui/widget_factory.go
index c7cc2c5..8ab813c 100644
--- a/efl/ui/widget_factory.go
+++ b/efl/ui/widget_factory.go
@@ -221,6 +221,11 @@ func (o *WidgetFactory) SetItemClass(val efl.Objecter) {
C.efl_ui_widget_factory_item_class_set((*C.Eo)(o.Eo()), (*C.Eo)(val.Eo()))
}
+// Create calls the efl_ui_factory_create method on WidgetFactory.
+func (o *WidgetFactory) Create(models unsafe.Pointer) <-chan *efl.Value {
+ return efl.FutureToChannel(unsafe.Pointer(C.efl_ui_factory_create((*C.Eo)(o.Eo()), (*C.Eina_Iterator)(models))))
+}
+
// Release calls the efl_ui_factory_release method on WidgetFactory.
func (o *WidgetFactory) Release(uiViews unsafe.Pointer) {
C.efl_ui_factory_release((*C.Eo)(o.Eo()), (*C.Eina_Iterator)(uiViews))
diff --git a/ego-stats b/ego-stats
index 2f3f56b..96d501d 100755
Binary files a/ego-stats and b/ego-stats differ
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.