Browse Source

Fix buggy fucking XGetAtomNames garbage

master
Wesley Kerfoot 4 years ago
parent
commit
e146dfe78d
  1. 29
      src/nimwin.nim

29
src/nimwin.nim

@ -37,9 +37,9 @@ type Window = ref object of RootObj
screen : PScreen screen : PScreen
props : seq[WinProp] props : seq[WinProp]
proc unpackCardinal(typeFormat : int, proc unpackPropValue(typeFormat : int,
nItems : int, nItems : int,
buf : ptr cuchar) : seq[uint] = buf : ptr cuchar) : seq[uint] =
# See https://www.x.org/releases/current/doc/man/man3/XGetWindowProperty.3.xhtml # See https://www.x.org/releases/current/doc/man/man3/XGetWindowProperty.3.xhtml
@ -109,30 +109,27 @@ proc getPropertyValue(display : PDisplay, window : TWindow, property : TAtom) :
WinProp( WinProp(
name: atomName, name: atomName,
kind: pkCardinal, kind: pkCardinal,
cardinalProp: unpackCardinal(actualTypeFormat.int, nItemsReturn.int, propValue) cardinalProp: unpackPropValue(actualTypeFormat.int, nItemsReturn.int, propValue)
) )
) )
elif typeName == "ATOM": elif typeName == "ATOM":
var currentAtomName : cstring var currentAtomName : cstring
var atomNames : seq[string] var atomPropNames : seq[string]
discard display.XGetAtomNames(cast[PAtom](propValue), nItemsReturn.cint, currentAtomName.addr)
var currentAtomNames : ptr cstring = currentAtomName.addr
for i in 0..(nItemsReturn.int - 1): for atom in unpackPropValue(actualTypeFormat.int, nItemsReturn.int, propValue):
currentAtomName = (cast[ptr cstring]( let atomPropNameCS = display.XGetAtomName(atom.culong)
cast[int](currentAtomNames) + cast[int](i * currentAtomNames[].sizeof) var atomPropName = newString(atomPropNameCS.len)
))[] if atomPropName.len > 0:
copyMem(addr(atomPropName[0]), atomPropNameCS, atomPropNameCS.len)
atomPropNames &= atomPropName
var atomStrValue : string = newString(currentAtomName.len) discard atomPropNameCS.XFree
copyMem(addr(atomStrValue[0]), currentAtomName, currentAtomName.len)
if atomStrValue.len > 0:
atomNames &= atomStrValue
result = some( result = some(
WinProp( WinProp(
name: atomName, name: atomName,
kind: pkAtom, kind: pkAtom,
atomProps: atomNames atomProps: atomPropNames
) )
) )
else: else:

Loading…
Cancel
Save