disable the foreach macro for gtk4

This commit is contained in:
Stefan Salewski 2022-08-21 17:27:54 +02:00
commit 0a6bbb59eb

View file

@ -411,15 +411,18 @@ gtk_container_foreach (
gpointer callback_data gpointer callback_data
) )
]# ]#
# https://docs.gtk.org/gtk3/method.Container.foreach.html
macro foreach*(container: gtk.Container; p: untyped; arg: typed): untyped = when not declared(gtk4): # only for old gtk3, gtk4 has no gtk.Container widget.
# https://docs.gtk.org/gtk3/method.Container.foreach.html
macro foreach*(container: gtk.Container; p: untyped; arg: typed): untyped =
var foreachID {.compileTime, global.}: int var foreachID {.compileTime, global.}: int
inc(foreachID) inc(foreachID)
var ats = $getTypeInst(arg).toStrLit var ats = $getTypeInst(arg).toStrLit
let procName = "foreach_" & $foreachID let procName = "foreach_" & $foreachID
let procNameCdecl = "foreach_cdecl_" & $foreachID let procNameCdecl = "foreach_cdecl_" & $foreachID
var r1s = """ var r1s = """
proc $1(c: ptr gtk.Widget00; p: pointer) {.cdecl.} = proc $1(c: ptr gtk.Widget00; p: pointer) {.cdecl.} =
when $3 is ref: when $3 is ref:
let a = cast[$3](p) let a = cast[$3](p)
else: else:
@ -431,10 +434,10 @@ proc $1(c: ptr gtk.Widget00; p: pointer) {.cdecl.} =
$2(cn, a) $2(cn, a)
else: else:
$2(cn, a[]) $2(cn, a[])
""" % [$procNameCdecl, $p, ats] """ % [$procNameCdecl, $p, ats]
let r2s =""" let r2s ="""
proc $1(container: gtk.Container; a: $2) = proc $1(container: gtk.Container; a: $2) =
when a is ref: when a is ref:
GC_ref(a) GC_ref(a)
gtk_container_foreach(cast[ptr gtk.Container00](container.impl), $3, cast[pointer](a)) gtk_container_foreach(cast[ptr gtk.Container00](container.impl), $3, cast[pointer](a))
@ -444,10 +447,10 @@ proc $1(container: gtk.Container; a: $2) =
ar[] = a ar[] = a
GC_ref(ar) GC_ref(ar)
gtk_container_foreach(cast[ptr gtk.Container00](container.impl), $3, cast[pointer](ar)) gtk_container_foreach(cast[ptr gtk.Container00](container.impl), $3, cast[pointer](ar))
$1($5, $4) $1($5, $4)
""" % [$procName, ats, $procNameCdecl, $arg, $container] """ % [$procName, ats, $procNameCdecl, $arg, $container]
#echo r1s #echo r1s
#echo r2s #echo r2s
result = parseStmt(r1s & r2s) result = parseStmt(r1s & r2s)
# 453 lines # 456 lines