summaryrefslogtreecommitdiffstats
path: root/pkgs/development/lua-modules/lgi/glib-2.88.patch
blob: 2fe3b1946170626e4adf1c39a1363c7b0ee7e59d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
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()