a few tiny fixes for glib 2.74
This commit is contained in:
parent
7a4497ef6e
commit
d7202861da
2 changed files with 42 additions and 16 deletions
|
|
@ -201,13 +201,17 @@ proc $1$2 {.cdecl.} =
|
||||||
if types[i] == "":
|
if types[i] == "":
|
||||||
resu.add(", " & names[i])
|
resu.add(", " & names[i])
|
||||||
else:
|
else:
|
||||||
resu.add(", " & names[i] & "1")
|
var namesi = names[i]
|
||||||
r1s.add(" var " & names[i] & "1 {.global.}: " & types[i] & "\n")
|
if namesi[0] == '`':
|
||||||
r1s.add(" if " & names[i] & "1" & ".isNil:\n")
|
assert(namesi[^1] == '`')
|
||||||
r1s.add(" new " & names[i] & "1" & "\n")
|
namesi = namesi[1 .. ^2]
|
||||||
r1s.add(" GC_ref(" & names[i] & "1)" & "\n") # never call destroy/finalizer on this global variable
|
resu.add(", " & namesi & "1")
|
||||||
r1s.add(" " & names[i] & "1.ignoreFinalizer = true" & "\n")
|
r1s.add(" var " & namesi & "1 {.global.}: " & types[i] & "\n")
|
||||||
r1s.add(" " & names[i] & "1.impl = " & names[i] & "\n")
|
r1s.add(" if " & namesi & "1" & ".isNil:\n")
|
||||||
|
r1s.add(" new " & namesi & "1" & "\n")
|
||||||
|
r1s.add(" GC_ref(" & namesi & "1)" & "\n") # never call destroy/finalizer on this global variable
|
||||||
|
r1s.add(" " & namesi & "1.ignoreFinalizer = true" & "\n")
|
||||||
|
r1s.add(" " & namesi & "1.impl = " & names[i] & "\n")
|
||||||
if not ignoreArg.boolVal:
|
if not ignoreArg.boolVal:
|
||||||
if getTypeInst(arg).typeKind == ntyRef:
|
if getTypeInst(arg).typeKind == ntyRef:
|
||||||
resu.add(", cast[$5](user_data)")
|
resu.add(", cast[$5](user_data)")
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,10 @@
|
||||||
# High level gobject-introspection based GTK4/GTK3 bindings for the Nim programming language
|
# High level gobject-introspection based GTK4/GTK3 bindings for the Nim programming language
|
||||||
# nimpretty --maxLineLen:130 gen.nim
|
# nimpretty --maxLineLen:130 gen.nim
|
||||||
# v 0.9.9 2022-OCT-10
|
# v 0.9.9 2022-OCT-20
|
||||||
# (c) S. Salewski 2018, 2019, 2020, 2021, 2022, 2023
|
# (c) S. Salewski 2018, 2019, 2020, 2021, 2022, 2023
|
||||||
|
|
||||||
|
# https://gnome.pages.gitlab.gnome.org/gobject-introspection/girepository/
|
||||||
|
|
||||||
# usefull for finding death code:
|
# usefull for finding death code:
|
||||||
# https://forum.nim-lang.org/t/5898
|
# https://forum.nim-lang.org/t/5898
|
||||||
|
|
||||||
|
|
@ -373,6 +375,7 @@ defaultParameters["pango_layout_set_text"] = "length int -1"
|
||||||
|
|
||||||
for i in keywords: mangledNames[i] = '`' & i & '`'
|
for i in keywords: mangledNames[i] = '`' & i & '`'
|
||||||
|
|
||||||
|
mangledNames["object"] = "obj"
|
||||||
mangledNames["CSET_A_2_Z"] = "CSET_A_2_Z_U"
|
mangledNames["CSET_A_2_Z"] = "CSET_A_2_Z_U"
|
||||||
mangledNames["CSET_a_2_z"] = "CSET_a_2_z_L"
|
mangledNames["CSET_a_2_z"] = "CSET_a_2_z_L"
|
||||||
mangledNames["2big"] = "tooBig"
|
mangledNames["2big"] = "tooBig"
|
||||||
|
|
@ -2908,7 +2911,8 @@ proc writeEnum(info: GIEnumInfo) =
|
||||||
var s: seq[T]
|
var s: seq[T]
|
||||||
var alias: HashSet[string] # double entry in gstvideo, see https://discourse.gnome.org/t/gstvideo-1-0-gir-double-entries/5442
|
var alias: HashSet[string] # double entry in gstvideo, see https://discourse.gnome.org/t/gstvideo-1-0-gir-double-entries/5442
|
||||||
var flags = ($gBaseInfoGetName(info)).endsWith("Flags")
|
var flags = ($gBaseInfoGetName(info)).endsWith("Flags")
|
||||||
var flagDefault: string
|
var flagDefault: string
|
||||||
|
var lags: string
|
||||||
output.writeLine("type")
|
output.writeLine("type")
|
||||||
let n = info.gEnumInfoGetNValues()
|
let n = info.gEnumInfoGetNValues()
|
||||||
for j in 0.cint ..< n:
|
for j in 0.cint ..< n:
|
||||||
|
|
@ -2922,15 +2926,26 @@ proc writeEnum(info: GIEnumInfo) =
|
||||||
result = cmp(x.v, y.v)
|
result = cmp(x.v, y.v)
|
||||||
if result == 0:
|
if result == 0:
|
||||||
result = cmp(x.n, y.n)
|
result = cmp(x.n, y.n)
|
||||||
|
|
||||||
|
if not flags and s[^1].v > 2:
|
||||||
|
flags = true
|
||||||
|
for j in 0 .. s.high: # v0.9.9, pull in some more flags?
|
||||||
|
if bitops.popCount(s[j].v) > 1:
|
||||||
|
flags = false
|
||||||
|
break
|
||||||
|
|
||||||
for j in 0 .. s.high:
|
for j in 0 .. s.high:
|
||||||
if s[j].v < 0:
|
if s[j].v < 0:
|
||||||
flags = false
|
flags = false
|
||||||
if j == 0 and s[j].v == 0:
|
# if j == 0 and s[j].v == 0: # wrong for GApplicationFlags for glib >= 2.74
|
||||||
|
if s[j].v == 0:
|
||||||
continue
|
continue
|
||||||
if bitops.popCount(s[j].v) != 1: flags = false
|
if bitops.popCount(s[j].v) != 1: flags = false
|
||||||
if s.len <= 1: flags = false
|
if s.len <= 1: flags = false
|
||||||
var tname = mangleName(gBaseInfoGetName(info))
|
var tname = mangleName(gBaseInfoGetName(info))
|
||||||
if flags: tname = tname[0 .. ^6]
|
if flags and tname.endsWith("Flags"):
|
||||||
|
tname = tname[0 .. ^6]
|
||||||
|
lags = "Flags"
|
||||||
if flags:
|
if flags:
|
||||||
output.writeLine(" ", tname & "Flag" & EM, " {.size: sizeof(cint), pure.} = enum")
|
output.writeLine(" ", tname & "Flag" & EM, " {.size: sizeof(cint), pure.} = enum")
|
||||||
if s[0].v != 0 and s[0].v != 1: # flags may start with none = 0 or with flag1 = 1
|
if s[0].v != 0 and s[0].v != 1: # flags may start with none = 0 or with flag1 = 1
|
||||||
|
|
@ -2943,14 +2958,21 @@ proc writeEnum(info: GIEnumInfo) =
|
||||||
var val = i.v
|
var val = i.v
|
||||||
if flags and j == 0 and val == 0:
|
if flags and j == 0 and val == 0:
|
||||||
# proc c(t: typedesc[B]): B ={}
|
# proc c(t: typedesc[B]): B ={}
|
||||||
flagDefault = (" " & tname & "Flags" & i.n.capitalizeAscii & EM & " = " & tname & "Flags" & "({})")
|
flagDefault = (" " & tname & lags & i.n.capitalizeAscii & EM & " = " & tname & lags & "({})")
|
||||||
flagDefault.add("\nproc " & i.n & "*(t: typedesc[" & tname & "Flags]): " & tname & "Flags = " & tname & "Flags" & "({})")
|
flagDefault.add("\nproc " & i.n & "*(t: typedesc[" & tname & lags & "]): " & tname & lags & " = " & tname & lags & "({})")
|
||||||
#echo flagDefault
|
#echo flagDefault
|
||||||
|
k = i
|
||||||
continue
|
continue
|
||||||
if j > 0 and i.v == k.v:
|
if j > 0 and i.v == k.v:
|
||||||
if i.n != k.n:
|
if i.n != k.n:
|
||||||
let h = if flags: "Flag" else: ""
|
let h = if flags: "Flag" else: ""
|
||||||
alias.incl(" " & tname & i.n.capitalizeAscii & EM & " = " & tname & h & '.' & k.n)
|
var vv: string
|
||||||
|
if flags and k.v == 0:
|
||||||
|
vv = tname & lags & "({})"
|
||||||
|
else:
|
||||||
|
vv = tname & h & '.' & k.n
|
||||||
|
|
||||||
|
alias.incl(" " & tname & i.n.capitalizeAscii & EM & " = " & vv)
|
||||||
continue
|
continue
|
||||||
if flags:
|
if flags:
|
||||||
val = countTrailingZeroBits(val) # firstSetBit(val)
|
val = countTrailingZeroBits(val) # firstSetBit(val)
|
||||||
|
|
@ -2958,7 +2980,7 @@ proc writeEnum(info: GIEnumInfo) =
|
||||||
k = i
|
k = i
|
||||||
|
|
||||||
if flags:
|
if flags:
|
||||||
output.writeLine("\n ", tname & "Flags" & EM, " {.size: sizeof(cint).} = set[$1Flag]" % [tname])
|
output.writeLine("\n ", tname & lags & EM, " {.size: sizeof(cint).} = set[$1Flag]" % [tname])
|
||||||
|
|
||||||
if alias.len > 0 or flagDefault.len > 0:
|
if alias.len > 0 or flagDefault.len > 0:
|
||||||
output.writeLine("\nconst")
|
output.writeLine("\nconst")
|
||||||
|
|
@ -4588,7 +4610,7 @@ launch()
|
||||||
# if not xcallerAlloc.contains(el):
|
# if not xcallerAlloc.contains(el):
|
||||||
# echo el
|
# echo el
|
||||||
|
|
||||||
# 4591 lines
|
# 4613 lines
|
||||||
# gtk_icon_view_get_tooltip_context bug Candidate ignoreFinalizer
|
# gtk_icon_view_get_tooltip_context bug Candidate ignoreFinalizer
|
||||||
# gtk_tree_view_get_cursor bug getBox genRec gisup4
|
# gtk_tree_view_get_cursor bug getBox genRec gisup4
|
||||||
#
|
#
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue