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] == "":
|
||||
resu.add(", " & names[i])
|
||||
else:
|
||||
resu.add(", " & names[i] & "1")
|
||||
r1s.add(" var " & names[i] & "1 {.global.}: " & types[i] & "\n")
|
||||
r1s.add(" if " & names[i] & "1" & ".isNil:\n")
|
||||
r1s.add(" new " & names[i] & "1" & "\n")
|
||||
r1s.add(" GC_ref(" & names[i] & "1)" & "\n") # never call destroy/finalizer on this global variable
|
||||
r1s.add(" " & names[i] & "1.ignoreFinalizer = true" & "\n")
|
||||
r1s.add(" " & names[i] & "1.impl = " & names[i] & "\n")
|
||||
var namesi = names[i]
|
||||
if namesi[0] == '`':
|
||||
assert(namesi[^1] == '`')
|
||||
namesi = namesi[1 .. ^2]
|
||||
resu.add(", " & namesi & "1")
|
||||
r1s.add(" var " & namesi & "1 {.global.}: " & types[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 getTypeInst(arg).typeKind == ntyRef:
|
||||
resu.add(", cast[$5](user_data)")
|
||||
|
|
|
|||
|
|
@ -1,8 +1,10 @@
|
|||
# High level gobject-introspection based GTK4/GTK3 bindings for the Nim programming language
|
||||
# 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
|
||||
|
||||
# https://gnome.pages.gitlab.gnome.org/gobject-introspection/girepository/
|
||||
|
||||
# usefull for finding death code:
|
||||
# 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 & '`'
|
||||
|
||||
mangledNames["object"] = "obj"
|
||||
mangledNames["CSET_A_2_Z"] = "CSET_A_2_Z_U"
|
||||
mangledNames["CSET_a_2_z"] = "CSET_a_2_z_L"
|
||||
mangledNames["2big"] = "tooBig"
|
||||
|
|
@ -2908,7 +2911,8 @@ proc writeEnum(info: GIEnumInfo) =
|
|||
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 flags = ($gBaseInfoGetName(info)).endsWith("Flags")
|
||||
var flagDefault: string
|
||||
var flagDefault: string
|
||||
var lags: string
|
||||
output.writeLine("type")
|
||||
let n = info.gEnumInfoGetNValues()
|
||||
for j in 0.cint ..< n:
|
||||
|
|
@ -2922,15 +2926,26 @@ proc writeEnum(info: GIEnumInfo) =
|
|||
result = cmp(x.v, y.v)
|
||||
if result == 0:
|
||||
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:
|
||||
if s[j].v < 0:
|
||||
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
|
||||
if bitops.popCount(s[j].v) != 1: flags = false
|
||||
if s.len <= 1: flags = false
|
||||
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:
|
||||
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
|
||||
|
|
@ -2943,14 +2958,21 @@ proc writeEnum(info: GIEnumInfo) =
|
|||
var val = i.v
|
||||
if flags and j == 0 and val == 0:
|
||||
# proc c(t: typedesc[B]): B ={}
|
||||
flagDefault = (" " & tname & "Flags" & i.n.capitalizeAscii & EM & " = " & tname & "Flags" & "({})")
|
||||
flagDefault.add("\nproc " & i.n & "*(t: typedesc[" & tname & "Flags]): " & tname & "Flags = " & tname & "Flags" & "({})")
|
||||
flagDefault = (" " & tname & lags & i.n.capitalizeAscii & EM & " = " & tname & lags & "({})")
|
||||
flagDefault.add("\nproc " & i.n & "*(t: typedesc[" & tname & lags & "]): " & tname & lags & " = " & tname & lags & "({})")
|
||||
#echo flagDefault
|
||||
k = i
|
||||
continue
|
||||
if j > 0 and i.v == k.v:
|
||||
if i.n != k.n:
|
||||
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
|
||||
if flags:
|
||||
val = countTrailingZeroBits(val) # firstSetBit(val)
|
||||
|
|
@ -2958,7 +2980,7 @@ proc writeEnum(info: GIEnumInfo) =
|
|||
k = i
|
||||
|
||||
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:
|
||||
output.writeLine("\nconst")
|
||||
|
|
@ -4588,7 +4610,7 @@ launch()
|
|||
# if not xcallerAlloc.contains(el):
|
||||
# echo el
|
||||
|
||||
# 4591 lines
|
||||
# 4613 lines
|
||||
# gtk_icon_view_get_tooltip_context bug Candidate ignoreFinalizer
|
||||
# gtk_tree_view_get_cursor bug getBox genRec gisup4
|
||||
#
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue