79f6dec101
This replaces the earlier 2.86 patch. One may consider bumping the source to something newer than the 8 year old release, but that's out of scope for this fix. Signed-off-by: benaryorg <binary@benary.org>
147 lines
5.5 KiB
Diff
147 lines
5.5 KiB
Diff
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()
|