|
76 | 76 |
|
77 | 77 | -- Creates new enum/flags table with all values from specified gtype. |
78 | 78 | function ffi.load_enum(gtype, name) |
79 | | - local GObject = core.repo.GObject |
| 79 | + local GLib, GObject = core.repo.GLib, core.repo.GObject |
80 | 80 | local is_flags = GObject.Type.is_a(gtype, GObject.Type.FLAGS) |
81 | 81 | local enum_component = component.create( |
82 | 82 | gtype, is_flags and enum.bitflags_mt or enum.enum_mt, name) |
83 | | - local type_class = GObject.TypeClass.ref(gtype) |
| 83 | + local type_class |
| 84 | + -- GLib >= 2.86 deprecates GObject.TypeClass.ref() in favour of .get() |
| 85 | + if GLib.check_version(2, 86, 0) then |
| 86 | + type_class = GObject.TypeClass.ref(gtype) |
| 87 | + else |
| 88 | + type_class = GObject.TypeClass.get(gtype) |
| 89 | + end |
84 | 90 | local enum_class = core.record.cast( |
85 | 91 | type_class, is_flags and GObject.FlagsClass or GObject.EnumClass) |
86 | 92 | for i = 0, enum_class.n_values - 1 do |
87 | 93 | local val = core.record.fromarray(enum_class.values, i) |
88 | 94 | enum_component[core.upcase(val.value_nick):gsub('%-', '_')] = val.value |
89 | 95 | end |
90 | | - type_class:unref() |
| 96 | + -- For GLib versions below 2.86, type_class was ref'd and needs to be unref'd |
| 97 | + if GLib.check_version(2, 86, 0) then |
| 98 | + type_class:unref() |
| 99 | + end |
91 | 100 | return enum_component |
92 | 101 | end |
93 | 102 |
|
|
0 commit comments