At time of writing this is equivalent to https://github.com/lgi-devs/lgi/pull/361.patch?full_index=1 The only difference is that this diff does not include the *tests/progress.lua* changes since that file does not exist in the source used by *nixpkgs*. --- a/lgi/ffi.lua +++ b/lgi/ffi.lua @@ -74,19 +74,39 @@ end -- Creates new enum/flags table with all values from specified gtype. +-- +-- Fixes https://github.com/lgi-devs/lgi/issues/358 +-- +-- Implementation for the fix was mirrored from the LGI fork: +-- https://github.com/vtrlx/LuaGObject/blob/0.10.5/LuaGObject/ffi.lua#L74-L104 function ffi.load_enum(gtype, name) - local GObject = core.repo.GObject + local GLib, GObject = core.repo.GLib, core.repo.GObject local is_flags = GObject.Type.is_a(gtype, GObject.Type.FLAGS) local enum_component = component.create( gtype, is_flags and enum.bitflags_mt or enum.enum_mt, name) - local type_class = GObject.TypeClass.ref(gtype) + local type_class + -- GLib >= 2.86 deprecates GObject.TypeClass.ref() in favour of .get() + if GLib.check_version(2, 86, 0) then + type_class = GObject.TypeClass.ref(gtype) + else + type_class = GObject.TypeClass.get(gtype) + end local enum_class = core.record.cast( type_class, is_flags and GObject.FlagsClass or GObject.EnumClass) - for i = 0, enum_class.n_values - 1 do - local val = core.record.fromarray(enum_class.values, i) - enum_component[core.upcase(val.value_nick):gsub('%-', '_')] = val.value + if GLib.check_version(2, 87, 0) then + for i = 0, enum_class.n_values - 1 do + local val = core.record.fromarray(enum_class.values, i) + enum_component[core.upcase(val.value_nick):gsub('%-', '_')] = val.value + end + else + for _, val in ipairs(enum_class.values) do + enum_component[core.upcase(val.value_nick):gsub('%-', '_')] = val.value + end + end + -- For GLib versions below 2.86, type_class was ref'd and needs to be unref'd + if GLib.check_version(2, 86, 0) then + type_class:unref() end - type_class:unref() return enum_component end --- a/lgi/ffi.lua +++ b/lgi/ffi.lua @@ -74,18 +74,12 @@ end -- Creates new enum/flags table with all values from specified gtype. --- --- Fixes https://github.com/lgi-devs/lgi/issues/358 --- --- Implementation for the fix was mirrored from the LGI fork: --- https://github.com/vtrlx/LuaGObject/blob/0.10.5/LuaGObject/ffi.lua#L74-L104 function ffi.load_enum(gtype, name) local GLib, GObject = core.repo.GLib, core.repo.GObject local is_flags = GObject.Type.is_a(gtype, GObject.Type.FLAGS) local enum_component = component.create( gtype, is_flags and enum.bitflags_mt or enum.enum_mt, name) local type_class - -- GLib >= 2.86 deprecates GObject.TypeClass.ref() in favour of .get() if GLib.check_version(2, 86, 0) then type_class = GObject.TypeClass.ref(gtype) else @@ -103,7 +97,6 @@ enum_component[core.upcase(val.value_nick):gsub('%-', '_')] = val.value end end - -- For GLib versions below 2.86, type_class was ref'd and needs to be unref'd if GLib.check_version(2, 86, 0) then type_class:unref() end --- a/lgi/ffi.lua +++ b/lgi/ffi.lua @@ -80,6 +80,7 @@ local enum_component = component.create( gtype, is_flags and enum.bitflags_mt or enum.enum_mt, name) local type_class + -- GLib >= 2.86 deprecates GObject.TypeClass.ref() in favour of .get() if GLib.check_version(2, 86, 0) then type_class = GObject.TypeClass.ref(gtype) else @@ -97,6 +98,7 @@ enum_component[core.upcase(val.value_nick):gsub('%-', '_')] = val.value end end + -- For GLib versions below 2.86, type_class was ref'd and needs to be unref'd if GLib.check_version(2, 86, 0) then type_class:unref() end --- a/tests/pango.lua +++ b/tests/pango.lua @@ -35,8 +35,24 @@ local offset = items[i].offset local length = items[i].length local analysis = items[i].analysis - local pgs = Pango.GlyphString() - Pango.shape(string.sub(s,1+offset), length, analysis, pgs) + -- + -- Fixes https://github.com/lgi-devs/lgi/issues/336 + -- + -- Implementation for the fix was a combination + -- of ideas from: + -- + -- 1) my own investigation plus trial-error + -- 2) the comment: https://github.com/lgi-devs/lgi/issues/336#issuecomment-2888361271 + -- 3) the LGI fork: https://github.com/vtrlx/LuaGObject/blob/0.10.5/tests/pango.lua#L38-L39 + -- + local pgs + if Pango.version_check(1, 56, 2) then + pgs = Pango.GlyphString() + Pango.shape(string.sub(s,1+offset), length, analysis, pgs) + else + pgs = Pango.shape(string.sub(s,1+offset), length, analysis) + end + -- Pull out individual glyphs with pgs.glyphs local glyphs = pgs.glyphs check(type(glyphs) == 'table') --- a/tests/pango.lua +++ b/tests/pango.lua @@ -35,16 +35,6 @@ local offset = items[i].offset local length = items[i].length local analysis = items[i].analysis - -- - -- Fixes https://github.com/lgi-devs/lgi/issues/336 - -- - -- Implementation for the fix was a combination - -- of ideas from: - -- - -- 1) my own investigation plus trial-error - -- 2) the comment: https://github.com/lgi-devs/lgi/issues/336#issuecomment-2888361271 - -- 3) the LGI fork: https://github.com/vtrlx/LuaGObject/blob/0.10.5/tests/pango.lua#L38-L39 - -- local pgs if Pango.version_check(1, 56, 2) then pgs = Pango.GlyphString()