GdkAtom fix for listTargets()

This commit is contained in:
Stefan Salewski 2022-02-04 10:33:30 +01:00
commit 93df90aa24

View file

@ -1,7 +1,7 @@
# 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.7 2021-NOV-08 # v 0.9.8 2022-FEB-04
# (c) S. Salewski 2018, 2019, 2020, 2021 # (c) S. Salewski 2018, 2019, 2020, 2021, 2022
# usefull for finding death code: # usefull for finding death code:
# https://forum.nim-lang.org/t/5898 # https://forum.nim-lang.org/t/5898
@ -552,7 +552,6 @@ glib.SequenceIter
rsvg.Length rsvg.Length
gtk.TargetPair gtk.TargetPair
gtk.RequestedSize gtk.RequestedSize
gdk.Atom
gtk.TableChild gtk.TableChild
glib.Dir glib.Dir
glib.LogField glib.LogField
@ -2186,8 +2185,7 @@ proc writeMethod(info: GIBaseInfo; minfo: GIFunctionInfo) =
break break
elif ngrRet.res == glist: elif ngrRet.res == glist:
var elTransferFull = gCallableInfoGetCallerOwns(minfo) == GITransfer.EVERYTHING var elTransferFull = gCallableInfoGetCallerOwns(minfo) == GITransfer.EVERYTHING
if gCallableInfoCanThrowGerror(minfo) or gCallableInfoMayReturnNull(minfo) or gCallableInfoGetCallerOwns(minfo) != if gCallableInfoCanThrowGerror(minfo) or gCallableInfoMayReturnNull(minfo) or gCallableInfoGetCallerOwns(minfo) != GITransfer.NOTHING:
GITransfer.NOTHING:
methodBuffer.writeLine(" let resul0 = " & sym & pars.arglist) methodBuffer.writeLine(" let resul0 = " & sym & pars.arglist)
checkForGerror() checkForGerror()
if gCallableInfoMayReturnNull(minfo): if gCallableInfoMayReturnNull(minfo):
@ -2197,8 +2195,7 @@ proc writeMethod(info: GIBaseInfo; minfo: GIFunctionInfo) =
methodBuffer.writeLine(" result = glistObjects2seq($1, resul0, $2)" % [ngrRet.childName, $elTransferFull]) methodBuffer.writeLine(" result = glistObjects2seq($1, resul0, $2)" % [ngrRet.childName, $elTransferFull])
if ngrRet.infoType == GIInfoType.STRUCT: if ngrRet.infoType == GIInfoType.STRUCT:
if gBaseInfoGetName(gTypeInfoGetInterface(gTypeInfoGetParamType(ret2, 0))) notin ["Atom", "Variant", "TimedValue"]: # care later if gBaseInfoGetName(gTypeInfoGetInterface(gTypeInfoGetParamType(ret2, 0))) notin ["Atom", "Variant", "TimedValue"]: # care later
methodBuffer.writeLine(" result = glistStructs2seq[$1](resul0, $2)" % [ngrRet.childName, $( methodBuffer.writeLine(" result = glistStructs2seq[$1](resul0, $2)" % [ngrRet.childName, $(gCallableInfoGetCallerOwns(minfo) != GITransfer.EVERYTHING)])
gCallableInfoGetCallerOwns(minfo) != GITransfer.EVERYTHING)])
# caution TimedValue is a "light" entity, so we need a different glistStructs2seq() for that! # caution TimedValue is a "light" entity, so we need a different glistStructs2seq() for that!
if gCallableInfoGetCallerOwns(minfo) != GITransfer.NOTHING: if gCallableInfoGetCallerOwns(minfo) != GITransfer.NOTHING:
methodBuffer.writeLine(" g_list_free(resul0)") # only free the list itself, the elements are moved to the seq methodBuffer.writeLine(" g_list_free(resul0)") # only free the list itself, the elements are moved to the seq
@ -2206,10 +2203,17 @@ proc writeMethod(info: GIBaseInfo; minfo: GIFunctionInfo) =
if ngrRet.infoType == GIInfoType.OBJECT or ngrRet.infoType == GIInfoType.INTERFACE: if ngrRet.infoType == GIInfoType.OBJECT or ngrRet.infoType == GIInfoType.INTERFACE:
if ngrRet.infoType != GIInfoType.INTERFACE: if ngrRet.infoType != GIInfoType.INTERFACE:
assert findFreeObject(gTypeInfoGetInterface(gTypeInfoGetParamType(ret2, 0))).len == 0 assert findFreeObject(gTypeInfoGetInterface(gTypeInfoGetParamType(ret2, 0))).len == 0
methodBuffer.writeLine(" result = glistObjects2seq($1, $2, $3)" % [ngrRet.childName, sym & pars.arglist, methodBuffer.writeLine(" result = glistObjects2seq($1, $2, $3)" % [ngrRet.childName, sym & pars.arglist, $elTransferFull])
$elTransferFull]) elif ngrRet.infoType == GIInfoType.STRUCT:
if gBaseInfoGetName(gTypeInfoGetInterface(gTypeInfoGetParamType(ret2, 0))) in ["Atom"]:##notin ["Atom", "Variant", "TimedValue"]: # care later
methodBuffer.writeLine(" result = glistStructs2seq[$1]($2, $3)" % [ngrRet.childName, sym & pars.arglist, $(gCallableInfoGetCallerOwns(minfo) != GITransfer.EVERYTHING)])
# caution TimedValue is a "light" entity, so we need a different glistStructs2seq() for that!
else:
methodBuffer.writeLine(" discard")
else: else:
methodBuffer.writeLine(" discard") methodBuffer.writeLine(" discard")
if gCallableInfoGetCallerOwns(minfo) != GITransfer.NOTHING:
methodBuffer.writeLine(" g_list_free(resul0)") # only free the list itself, the elements are moved to the seq
assert(gCallableInfoGetCallerOwns(minfo) in {GITransfer.EVERYTHING, GITransfer.NOTHING, GITransfer.CONTAINER}) assert(gCallableInfoGetCallerOwns(minfo) in {GITransfer.EVERYTHING, GITransfer.NOTHING, GITransfer.CONTAINER})
elif ngrRet.res == gslist: elif ngrRet.res == gslist:
var elTransferFull = gCallableInfoGetCallerOwns(minfo) == GITransfer.EVERYTHING var elTransferFull = gCallableInfoGetCallerOwns(minfo) == GITransfer.EVERYTHING
@ -2488,9 +2492,11 @@ template genBoxedFree =
freeMe = gStructInfoFindMethod(info, "unref") freeMe = gStructInfoFindMethod(info, "unref")
template genDestroyFreeUnref = template genDestroyFreeUnref =
if not callerAlloc.contains(($gBaseInfoGetNamespace(info)).toLowerAscii & '.' & mangleName(gBaseInfoGetName(info))): if not callerAlloc.contains(($gBaseInfoGetNamespace(info)).toLowerAscii & '.' & mangleName(gBaseInfoGetName(info))):
if gRegisteredTypeInfoGetGType(info) == G_TYPE_NONE or gTypeFundamental(gRegisteredTypeInfoGetGType(info)) != G_TYPE_BOXED or if gRegisteredTypeInfoGetGType(info) == G_TYPE_NONE or gTypeFundamental(gRegisteredTypeInfoGetGType(info)) != G_TYPE_BOXED or
gBaseInfoGetName(info) == "VariantType": # we have no g_variant_type_get_gtype gBaseInfoGetName(info) == "VariantType" or gBaseInfoGetName(info) == "Atom": # we have no g_variant_type_get_gtype
if gBaseInfoGetType(info) == GIInfoType.UNION or gBaseInfoGetType(info) == GIInfoType.STRUCT and if gBaseInfoGetType(info) == GIInfoType.UNION or gBaseInfoGetType(info) == GIInfoType.STRUCT and
gBaseInfoGetName(info) != "ObjectClass" and gBaseInfoGetName(info) != "TypeFind": gBaseInfoGetName(info) != "ObjectClass" and gBaseInfoGetName(info) != "TypeFind":
var freeMe: GIFunctionInfo var freeMe: GIFunctionInfo
@ -2520,6 +2526,8 @@ template genDestroyFreeUnref =
methodBuffer.writeLine(" discard $1(self.impl)" % [$gFunctionInfoGetSymbol(freeMe)]) methodBuffer.writeLine(" discard $1(self.impl)" % [$gFunctionInfoGetSymbol(freeMe)])
methodBuffer.writeLine(" self.impl = nil") methodBuffer.writeLine(" self.impl = nil")
if freeMe != nil and gCallableInfoGetNArgs(freeMe) == (if gCallableInfoIsMethod(freeMe): 0 else: 1):
# new in v0.8.5 # CAUTION: newWithFinalizer() seems to be rarely used, can we remove it fully? # new in v0.8.5 # CAUTION: newWithFinalizer() seems to be rarely used, can we remove it fully?
methodBuffer.writeLine("\nproc newWithFinalizer*(x: var " & mangleName(gBaseInfoGetName(info)) & ") =") methodBuffer.writeLine("\nproc newWithFinalizer*(x: var " & mangleName(gBaseInfoGetName(info)) & ") =")
methodBuffer.writeLine(" when defined(gcDestructors):") methodBuffer.writeLine(" when defined(gcDestructors):")
@ -2527,6 +2535,10 @@ template genDestroyFreeUnref =
methodBuffer.writeLine(" else:") methodBuffer.writeLine(" else:")
# methodBuffer.writeLine(" new(x, $1)" % [$gBaseInfoGetName(freeMe)]) # methodBuffer.writeLine(" new(x, $1)" % [$gBaseInfoGetName(freeMe)])
methodBuffer.writeLine(" new(x, finalizer$1)" % [$gBaseInfoGetName(freeMe)]) # for v0.8.6 methodBuffer.writeLine(" new(x, finalizer$1)" % [$gBaseInfoGetName(freeMe)]) # for v0.8.6
else: # new for v0.9.7: create dummy newWithFinalizer() for GdkAtom, as there is no free()
if $gBaseInfoGetName(info) in ["Atom"]: # actually we need only this one
methodBuffer.writeLine("\nproc newWithFinalizer*(x: var " & mangleName(gBaseInfoGetName(info)) & ") =")
methodBuffer.writeLine(" new(x)")
template writeGetTypeProc = template writeGetTypeProc =
var getTypeProc {.inject.}: string var getTypeProc {.inject.}: string
@ -2805,7 +2817,7 @@ proc writeInterface(info: GIInterfaceInfo) =
# write a few of the strange enum sets # write a few of the strange enum sets
proc writeModifierType(info: GIEnumInfo) = proc writeModifierType(info: GIEnumInfo) =
let we = gBaseInfoGetName(info) let we = gBaseInfoGetName(info)
assert(we in ["ModifierType", "EventMask", "AccelFlags", "AttachOptions", "MessageType", "WindowHints", "IOCondition"]) assert(we in ["ModifierType", "EventMask", "AccelFlags", "AttachOptions", "MessageType", "WindowHints", "IOCondition", "DragAction", "DestDefaults"])
type T = tuple[v: int64; n: string] type T = tuple[v: int64; n: string]
var s: seq[T] var s: seq[T]
var alias: seq[string] var alias: seq[string]
@ -2858,7 +2870,7 @@ proc writeModifierType(info: GIEnumInfo) =
proc writeEnum(info: GIEnumInfo) = proc writeEnum(info: GIEnumInfo) =
if mangleName(gBaseInfoGetName(info)) in ["ModifierType", "EventMask", "AccelFlags", "AttachOptions", "WindowHints", if mangleName(gBaseInfoGetName(info)) in ["ModifierType", "EventMask", "AccelFlags", "AttachOptions", "WindowHints",
"IOCondition"] or "IOCondition", "DragAction", "DestDefaults"] or
(moduleNameSpace == "gst" and mangleName(gBaseInfoGetName(info)) == "MessageType"): (moduleNameSpace == "gst" and mangleName(gBaseInfoGetName(info)) == "MessageType"):
writeModifierType(info) writeModifierType(info)
return return
@ -4528,17 +4540,13 @@ launch()
# if not xcallerAlloc.contains(el): # if not xcallerAlloc.contains(el):
# echo el # echo el
# 4477 lines gisup4 genPars memo genRec QRS XXX seq List TODO seeq ttempResGL HHHHHH echo # 4543 lines
# gtk_icon_view_get_tooltip_context bug Candidate # gtk_icon_view_get_tooltip_context bug Candidate
# gtk_tree_view_get_cursor bug # gtk_tree_view_get_cursor bug
# #
# troubles: gTypeFundamental(gRegisteredTypeInfoGetGType(info)) == G_TYPE_BOXED: # troubles: gTypeFundamental(gRegisteredTypeInfoGetGType(info)) == G_TYPE_BOXED:
#[ #[
salewski@nuc ~/gintrotest/tests $ grep -A6 "listTargets\*" nim_gi/*
nim_gi/gdk.nim:proc listTargets*(self: DragContext): seq[Atom] =
nim_gi/gdk.nim- discard
proc gst_structure_take(oldstrPtr: var ptr Structure00; newstr: ptr Structure00): gboolean {. proc gst_structure_take(oldstrPtr: var ptr Structure00; newstr: ptr Structure00): gboolean {.
importc, libprag.} importc, libprag.}