gir_ffi 0.14.1 → 0.15.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (281) hide show
  1. checksums.yaml +4 -4
  2. data/Changelog.md +56 -0
  3. data/README.md +12 -12
  4. data/TODO.md +14 -35
  5. data/docs/Documentation.md +6 -0
  6. data/docs/Subclassing.md +38 -0
  7. data/lib/ffi-glib.rb +26 -21
  8. data/lib/ffi-glib/array.rb +14 -4
  9. data/lib/ffi-glib/byte_array.rb +9 -3
  10. data/lib/ffi-glib/container_class_methods.rb +1 -1
  11. data/lib/ffi-glib/destroy_notify.rb +2 -2
  12. data/lib/ffi-glib/error.rb +1 -1
  13. data/lib/ffi-glib/hash_table.rb +4 -5
  14. data/lib/ffi-glib/list.rb +12 -6
  15. data/lib/ffi-glib/list_methods.rb +13 -1
  16. data/lib/ffi-glib/main_loop.rb +3 -3
  17. data/lib/ffi-glib/ptr_array.rb +30 -8
  18. data/lib/ffi-glib/s_list.rb +11 -5
  19. data/lib/ffi-glib/variant.rb +1 -1
  20. data/lib/ffi-gobject.rb +13 -16
  21. data/lib/ffi-gobject/object.rb +82 -87
  22. data/lib/ffi-gobject/object_class.rb +1 -1
  23. data/lib/ffi-gobject/param_spec.rb +1 -1
  24. data/lib/ffi-gobject/ruby_closure.rb +2 -2
  25. data/lib/ffi-gobject/value.rb +136 -126
  26. data/lib/ffi-gobject_introspection.rb +20 -20
  27. data/lib/ffi-gobject_introspection/gobject_type_init.rb +2 -2
  28. data/lib/ffi-gobject_introspection/i_arg_info.rb +2 -2
  29. data/lib/ffi-gobject_introspection/i_base_info.rb +34 -23
  30. data/lib/ffi-gobject_introspection/i_callable_info.rb +4 -4
  31. data/lib/ffi-gobject_introspection/i_constant_info.rb +2 -2
  32. data/lib/ffi-gobject_introspection/i_enum_info.rb +1 -0
  33. data/lib/ffi-gobject_introspection/i_field_info.rb +1 -1
  34. data/lib/ffi-gobject_introspection/i_function_info.rb +1 -1
  35. data/lib/ffi-gobject_introspection/i_interface_info.rb +1 -1
  36. data/lib/ffi-gobject_introspection/i_object_info.rb +2 -2
  37. data/lib/ffi-gobject_introspection/i_property_info.rb +2 -2
  38. data/lib/ffi-gobject_introspection/i_repository.rb +9 -6
  39. data/lib/ffi-gobject_introspection/i_struct_info.rb +2 -1
  40. data/lib/ffi-gobject_introspection/i_type_info.rb +13 -7
  41. data/lib/ffi-gobject_introspection/i_unresolved_info.rb +1 -1
  42. data/lib/ffi-gobject_introspection/i_vfunc_info.rb +1 -1
  43. data/lib/ffi-gobject_introspection/lib.rb +30 -19
  44. data/lib/ffi-gobject_introspection/strv.rb +1 -1
  45. data/lib/gir_ffi-base.rb +1 -1
  46. data/lib/gir_ffi-base/gobject.rb +26 -25
  47. data/lib/gir_ffi-base/gobject/lib.rb +7 -2
  48. data/lib/gir_ffi.rb +3 -3
  49. data/lib/gir_ffi/allocation_helper.rb +1 -1
  50. data/lib/gir_ffi/arg_helper.rb +4 -4
  51. data/lib/gir_ffi/{in_out_pointer.rb → array_element_convertor.rb} +16 -24
  52. data/lib/gir_ffi/boolean.rb +1 -1
  53. data/lib/gir_ffi/boxed_base.rb +2 -6
  54. data/lib/gir_ffi/builder.rb +19 -11
  55. data/lib/gir_ffi/builder_helper.rb +10 -2
  56. data/lib/gir_ffi/builders/argument_builder.rb +19 -19
  57. data/lib/gir_ffi/builders/argument_builder_collection.rb +2 -2
  58. data/lib/gir_ffi/builders/base_argument_builder.rb +2 -1
  59. data/lib/gir_ffi/builders/base_method_builder.rb +8 -8
  60. data/lib/gir_ffi/builders/base_return_value_builder.rb +1 -1
  61. data/lib/gir_ffi/builders/base_type_builder.rb +2 -2
  62. data/lib/gir_ffi/builders/c_to_ruby_convertor.rb +5 -5
  63. data/lib/gir_ffi/builders/callback_argument_builder.rb +10 -8
  64. data/lib/gir_ffi/builders/callback_builder.rb +28 -14
  65. data/lib/gir_ffi/builders/callback_return_value_builder.rb +6 -8
  66. data/lib/gir_ffi/builders/class_struct_builder.rb +24 -0
  67. data/lib/gir_ffi/builders/closure_argument_builder.rb +1 -1
  68. data/lib/gir_ffi/builders/closure_return_value_builder.rb +1 -1
  69. data/lib/gir_ffi/builders/constant_builder.rb +1 -1
  70. data/lib/gir_ffi/builders/constructor_builder.rb +9 -9
  71. data/lib/gir_ffi/builders/enum_builder.rb +11 -7
  72. data/lib/gir_ffi/builders/field_builder.rb +20 -18
  73. data/lib/gir_ffi/builders/flags_builder.rb +2 -2
  74. data/lib/gir_ffi/builders/full_c_to_ruby_convertor.rb +1 -1
  75. data/lib/gir_ffi/builders/function_builder.rb +11 -5
  76. data/lib/gir_ffi/builders/initializer_builder.rb +3 -3
  77. data/lib/gir_ffi/builders/initializer_return_value_builder.rb +2 -2
  78. data/lib/gir_ffi/builders/interface_builder.rb +5 -3
  79. data/lib/gir_ffi/builders/mapping_method_builder.rb +10 -10
  80. data/lib/gir_ffi/builders/marshalling_method_builder.rb +12 -9
  81. data/lib/gir_ffi/builders/method_template.rb +5 -5
  82. data/lib/gir_ffi/builders/module_builder.rb +7 -7
  83. data/lib/gir_ffi/builders/null_argument_builder.rb +0 -2
  84. data/lib/gir_ffi/builders/null_return_value_builder.rb +0 -2
  85. data/lib/gir_ffi/builders/object_builder.rb +22 -12
  86. data/lib/gir_ffi/builders/property_argument_builder.rb +1 -1
  87. data/lib/gir_ffi/builders/property_builder.rb +14 -14
  88. data/lib/gir_ffi/builders/property_return_value_builder.rb +1 -1
  89. data/lib/gir_ffi/builders/registered_type_builder.rb +14 -5
  90. data/lib/gir_ffi/builders/return_value_builder.rb +4 -4
  91. data/lib/gir_ffi/builders/ruby_to_c_convertor.rb +6 -6
  92. data/lib/gir_ffi/builders/signal_closure_builder.rb +5 -7
  93. data/lib/gir_ffi/builders/struct_builder.rb +8 -6
  94. data/lib/gir_ffi/builders/struct_like.rb +1 -1
  95. data/lib/gir_ffi/builders/type_builder.rb +12 -12
  96. data/lib/gir_ffi/builders/unintrospectable_boxed_builder.rb +2 -2
  97. data/lib/gir_ffi/builders/unintrospectable_builder.rb +2 -2
  98. data/lib/gir_ffi/builders/union_builder.rb +4 -4
  99. data/lib/gir_ffi/builders/user_defined_builder.rb +10 -3
  100. data/lib/gir_ffi/builders/vfunc_argument_builder.rb +2 -2
  101. data/lib/gir_ffi/builders/vfunc_builder.rb +8 -8
  102. data/lib/gir_ffi/builders/with_layout.rb +2 -2
  103. data/lib/gir_ffi/callback_base.rb +7 -9
  104. data/lib/gir_ffi/class_base.rb +6 -5
  105. data/lib/gir_ffi/core.rb +36 -22
  106. data/lib/gir_ffi/enum_base.rb +1 -1
  107. data/lib/gir_ffi/enum_like_base.rb +2 -2
  108. data/lib/gir_ffi/error_argument_info.rb +2 -2
  109. data/lib/gir_ffi/error_type_info.rb +1 -1
  110. data/lib/gir_ffi/ffi_ext.rb +1 -1
  111. data/lib/gir_ffi/ffi_ext/pointer.rb +1 -1
  112. data/lib/gir_ffi/flags_base.rb +1 -1
  113. data/lib/gir_ffi/glib_error.rb +1 -2
  114. data/lib/gir_ffi/in_pointer.rb +17 -0
  115. data/lib/gir_ffi/info_ext.rb +15 -15
  116. data/lib/gir_ffi/info_ext/full_type_name.rb +3 -3
  117. data/lib/gir_ffi/info_ext/i_arg_info.rb +1 -1
  118. data/lib/gir_ffi/info_ext/i_callable_info.rb +1 -1
  119. data/lib/gir_ffi/info_ext/i_callback_info.rb +1 -1
  120. data/lib/gir_ffi/info_ext/i_field_info.rb +1 -1
  121. data/lib/gir_ffi/info_ext/i_function_info.rb +1 -1
  122. data/lib/gir_ffi/info_ext/i_property_info.rb +2 -2
  123. data/lib/gir_ffi/info_ext/i_registered_type_info.rb +4 -5
  124. data/lib/gir_ffi/info_ext/i_signal_info.rb +7 -3
  125. data/lib/gir_ffi/info_ext/i_type_info.rb +48 -26
  126. data/lib/gir_ffi/info_ext/i_unresolved_info.rb +1 -1
  127. data/lib/gir_ffi/info_ext/i_value_info.rb +2 -2
  128. data/lib/gir_ffi/info_ext/i_vfunc_info.rb +2 -2
  129. data/lib/gir_ffi/info_ext/safe_constant_name.rb +8 -8
  130. data/lib/gir_ffi/info_ext/safe_function_name.rb +2 -2
  131. data/lib/gir_ffi/interface_base.rb +3 -3
  132. data/lib/gir_ffi/lib_c.rb +1 -1
  133. data/lib/gir_ffi/method_stubber.rb +1 -1
  134. data/lib/gir_ffi/module_base.rb +1 -1
  135. data/lib/gir_ffi/object_base.rb +30 -4
  136. data/lib/gir_ffi/receiver_argument_info.rb +1 -1
  137. data/lib/gir_ffi/receiver_type_info.rb +2 -2
  138. data/lib/gir_ffi/registered_type_base.rb +1 -1
  139. data/lib/gir_ffi/return_value_info.rb +1 -2
  140. data/lib/gir_ffi/sized_array.rb +4 -2
  141. data/lib/gir_ffi/struct.rb +1 -1
  142. data/lib/gir_ffi/struct_base.rb +2 -10
  143. data/lib/gir_ffi/struct_like_base.rb +9 -5
  144. data/lib/gir_ffi/type_map.rb +2 -23
  145. data/lib/gir_ffi/unintrospectable_boxed_info.rb +2 -2
  146. data/lib/gir_ffi/unintrospectable_type_info.rb +6 -2
  147. data/lib/gir_ffi/union.rb +1 -1
  148. data/lib/gir_ffi/union_base.rb +2 -10
  149. data/lib/gir_ffi/user_defined_object_info.rb +9 -4
  150. data/lib/gir_ffi/user_defined_property_info.rb +33 -33
  151. data/lib/gir_ffi/version.rb +1 -1
  152. data/lib/gir_ffi/vfunc_implementation.rb +1 -0
  153. metadata +102 -155
  154. data/Gemfile +0 -12
  155. data/Rakefile +0 -9
  156. data/lib/ffi-glib/array_methods.rb +0 -16
  157. data/tasks/test.rake +0 -203
  158. data/test/base_test_helper.rb +0 -63
  159. data/test/ffi-glib/array_test.rb +0 -188
  160. data/test/ffi-glib/byte_array_test.rb +0 -22
  161. data/test/ffi-glib/bytes_test.rb +0 -56
  162. data/test/ffi-glib/closure_test.rb +0 -38
  163. data/test/ffi-glib/destroy_notify_test.rb +0 -18
  164. data/test/ffi-glib/hash_table_test.rb +0 -68
  165. data/test/ffi-glib/list_test.rb +0 -86
  166. data/test/ffi-glib/main_loop_test.rb +0 -53
  167. data/test/ffi-glib/ptr_array_test.rb +0 -112
  168. data/test/ffi-glib/ruby_closure_test.rb +0 -62
  169. data/test/ffi-glib/s_list_test.rb +0 -76
  170. data/test/ffi-glib/strv_test.rb +0 -60
  171. data/test/ffi-glib/variant_test.rb +0 -12
  172. data/test/ffi-gobject/gobject_test.rb +0 -72
  173. data/test/ffi-gobject/object_class_test.rb +0 -31
  174. data/test/ffi-gobject/object_test.rb +0 -140
  175. data/test/ffi-gobject/param_spec_test.rb +0 -32
  176. data/test/ffi-gobject/value_test.rb +0 -370
  177. data/test/ffi-gobject_introspection/gobject_type_init_test.rb +0 -26
  178. data/test/ffi-gobject_introspection/i_base_info_test.rb +0 -53
  179. data/test/ffi-gobject_introspection/i_constant_info_test.rb +0 -33
  180. data/test/ffi-gobject_introspection/i_enum_info_test.rb +0 -18
  181. data/test/ffi-gobject_introspection/i_function_info_test.rb +0 -6
  182. data/test/ffi-gobject_introspection/i_interface_info_test.rb +0 -23
  183. data/test/ffi-gobject_introspection/i_object_info_test.rb +0 -49
  184. data/test/ffi-gobject_introspection/i_property_info_test.rb +0 -47
  185. data/test/ffi-gobject_introspection/i_registered_type_info_test.rb +0 -27
  186. data/test/ffi-gobject_introspection/i_repository_test.rb +0 -81
  187. data/test/ffi-gobject_introspection/i_struct_info_test.rb +0 -23
  188. data/test/ffi-gobject_introspection/i_type_info_test.rb +0 -33
  189. data/test/ffi-gobject_introspection/i_union_info_test.rb +0 -17
  190. data/test/ffi-gobject_introspection/i_vfunc_info_test.rb +0 -41
  191. data/test/ffi-gobject_introspection/lib_test.rb +0 -13
  192. data/test/ffi-gobject_introspection/strv_test.rb +0 -46
  193. data/test/ffi-gobject_test.rb +0 -151
  194. data/test/gir_ffi/allocation_helper_test.rb +0 -36
  195. data/test/gir_ffi/arg_helper_test.rb +0 -140
  196. data/test/gir_ffi/boolean_test.rb +0 -43
  197. data/test/gir_ffi/boxed_base_test.rb +0 -65
  198. data/test/gir_ffi/builder_test.rb +0 -300
  199. data/test/gir_ffi/builders/argument_builder_test.rb +0 -657
  200. data/test/gir_ffi/builders/base_argument_builder_test.rb +0 -6
  201. data/test/gir_ffi/builders/callback_argument_builder_test.rb +0 -129
  202. data/test/gir_ffi/builders/callback_builder_test.rb +0 -118
  203. data/test/gir_ffi/builders/callback_return_value_builder_test.rb +0 -85
  204. data/test/gir_ffi/builders/constant_builder_test.rb +0 -6
  205. data/test/gir_ffi/builders/constructor_builder_test.rb +0 -37
  206. data/test/gir_ffi/builders/enum_builder_test.rb +0 -23
  207. data/test/gir_ffi/builders/field_builder_test.rb +0 -134
  208. data/test/gir_ffi/builders/function_builder_test.rb +0 -538
  209. data/test/gir_ffi/builders/initializer_builder_test.rb +0 -54
  210. data/test/gir_ffi/builders/interface_builder_test.rb +0 -32
  211. data/test/gir_ffi/builders/module_builder_test.rb +0 -43
  212. data/test/gir_ffi/builders/object_builder_test.rb +0 -98
  213. data/test/gir_ffi/builders/property_builder_test.rb +0 -161
  214. data/test/gir_ffi/builders/registered_type_builder_test.rb +0 -30
  215. data/test/gir_ffi/builders/return_value_builder_test.rb +0 -440
  216. data/test/gir_ffi/builders/signal_closure_builder_test.rb +0 -188
  217. data/test/gir_ffi/builders/struct_builder_test.rb +0 -93
  218. data/test/gir_ffi/builders/unintrospectable_boxed_builder_test.rb +0 -35
  219. data/test/gir_ffi/builders/unintrospectable_builder_test.rb +0 -73
  220. data/test/gir_ffi/builders/union_builder_test.rb +0 -31
  221. data/test/gir_ffi/builders/user_defined_builder_test.rb +0 -524
  222. data/test/gir_ffi/builders/vfunc_argument_builder_test.rb +0 -101
  223. data/test/gir_ffi/builders/vfunc_builder_test.rb +0 -253
  224. data/test/gir_ffi/callback_base_test.rb +0 -22
  225. data/test/gir_ffi/class_base_test.rb +0 -168
  226. data/test/gir_ffi/core_test.rb +0 -98
  227. data/test/gir_ffi/enum_base_test.rb +0 -43
  228. data/test/gir_ffi/error_type_info_test.rb +0 -50
  229. data/test/gir_ffi/ffi_ext/pointer_test.rb +0 -20
  230. data/test/gir_ffi/g_type_test.rb +0 -31
  231. data/test/gir_ffi/in_out_pointer_test.rb +0 -56
  232. data/test/gir_ffi/in_pointer_test.rb +0 -183
  233. data/test/gir_ffi/info_ext/i_callable_info_test.rb +0 -26
  234. data/test/gir_ffi/info_ext/i_callback_info_test.rb +0 -21
  235. data/test/gir_ffi/info_ext/i_field_info_test.rb +0 -37
  236. data/test/gir_ffi/info_ext/i_function_info_test.rb +0 -74
  237. data/test/gir_ffi/info_ext/i_signal_info_test.rb +0 -32
  238. data/test/gir_ffi/info_ext/i_type_info_test.rb +0 -697
  239. data/test/gir_ffi/info_ext/i_unresolved_info_test.rb +0 -19
  240. data/test/gir_ffi/info_ext/safe_constant_name_test.rb +0 -26
  241. data/test/gir_ffi/info_ext/safe_function_name_test.rb +0 -26
  242. data/test/gir_ffi/interface_base_test.rb +0 -20
  243. data/test/gir_ffi/method_stubber_test.rb +0 -65
  244. data/test/gir_ffi/object_base_test.rb +0 -64
  245. data/test/gir_ffi/object_store_test.rb +0 -41
  246. data/test/gir_ffi/receiver_argument_info_test.rb +0 -33
  247. data/test/gir_ffi/sized_array_test.rb +0 -206
  248. data/test/gir_ffi/struct_base_test.rb +0 -23
  249. data/test/gir_ffi/struct_like_base_test.rb +0 -167
  250. data/test/gir_ffi/type_map_test.rb +0 -17
  251. data/test/gir_ffi/unintrospectable_type_info_test.rb +0 -121
  252. data/test/gir_ffi/union_base_test.rb +0 -23
  253. data/test/gir_ffi/user_defined_object_info_test.rb +0 -119
  254. data/test/gir_ffi/user_defined_property_info_test.rb +0 -39
  255. data/test/gir_ffi/variable_name_generator_test.rb +0 -18
  256. data/test/gir_ffi/version_test.rb +0 -9
  257. data/test/gir_ffi/zero_terminated_test.rb +0 -108
  258. data/test/gir_ffi_test_helper.rb +0 -84
  259. data/test/integration/callback_exceptions_test.rb +0 -63
  260. data/test/integration/derived_classes_test.rb +0 -53
  261. data/test/integration/generated_everything_test.rb +0 -452
  262. data/test/integration/generated_gimarshallingtests_test.rb +0 -2995
  263. data/test/integration/generated_gio_test.rb +0 -116
  264. data/test/integration/generated_glib_test.rb +0 -12
  265. data/test/integration/generated_gobject_test.rb +0 -116
  266. data/test/integration/generated_gst_test.rb +0 -34
  267. data/test/integration/generated_gtk_source_test.rb +0 -27
  268. data/test/integration/generated_gtop_test.rb +0 -29
  269. data/test/integration/generated_pango_ft2_test.rb +0 -17
  270. data/test/integration/generated_pango_test.rb +0 -24
  271. data/test/integration/generated_regress_test.rb +0 -3850
  272. data/test/integration/generated_secret_test.rb +0 -17
  273. data/test/integration/generated_utility_test.rb +0 -174
  274. data/test/integration/generated_warnlib_test.rb +0 -49
  275. data/test/integration/method_lookup_test.rb +0 -34
  276. data/test/introspection_test_helper.rb +0 -52
  277. data/test/lib/Makefile.am +0 -110
  278. data/test/lib/autogen.sh +0 -4
  279. data/test/lib/configure.ac +0 -34
  280. data/test/lib/m4/jhflags.m4 +0 -21
  281. data/test/minitest/stats_plugin.rb +0 -30
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c32084045b640a22901bdd0d256ce8b8df1ace345930d3e4fccfd0e598b82b19
4
- data.tar.gz: 5ac1e06a4dd28b4589ca93e30c48218a4cffb40f18d9f8c87859fdd76460fc8c
3
+ metadata.gz: 1cd304c670b5b7b26e9bbaa939f2b5162ef3f92f7c0bd78d8e524b1586cbdb3b
4
+ data.tar.gz: ccf4916ed552cf23752fb6270a61cfffdea53269b7d4bdb0bb408f3e3de7ae59
5
5
  SHA512:
6
- metadata.gz: f70592c52c01f747ca9370007783231007ef535a0039337aaf42e46a17acbf2a54178b33c591ca8658e040496bb66a34ffd1f8126b2b323470783b97418418ae
7
- data.tar.gz: fd92518d3541a1c46ebfe4758af76e8f746cf7ae355797a7f5736cdb4bc4b8444f6e9b4be7bf08712155759b11e5d697c2bdb522f3a4241337446204e5fb13c3
6
+ metadata.gz: 59fa0cf7451808b87a1ff028c0b8309d7c46c2acbbc894c535db4e1b3f30be7d6ee9649472a6932dd1fea0747bda6f56ceb3c753c48370750966c06da509f5bf
7
+ data.tar.gz: e2bd4de38d2db08b17e20c1bc42556530b4b14312400d5b9e15dc201eaf1494606bfe56c7fcdf78d632d164f6b553e897f488d533d70ab6d35042e069e5c5f61
@@ -1,5 +1,61 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.15.4 / 2020-11-01
4
+
5
+ * Support disguised object class structs
6
+ * Handle the case where vfunc object arguments are null
7
+ * Bail out earlier when trying to register non-GObject class
8
+ * Small improvements
9
+ * Use `Module#prepend` for overrides
10
+ * Clean up initialization of structs, unions, and boxed types
11
+ * Make `GObject::Object#store_pointer` private like in the superclass
12
+ * Handle creating SizedArray of uint8 from a string
13
+ * Improve derived class setup
14
+ * Improve List and SList methods
15
+ * Make `ByteArray#append` return self
16
+ * Improve packaging infrastructure (thanks, utkarsh2102!)
17
+
18
+ ## 0.15.3 / 2020-06-14
19
+
20
+ * Officially support Ruby 2.7
21
+ * Officially drop support for Ruby 2.4
22
+ * Store classes representing inline callback types in the class that defines
23
+ them instead of in the main namespace, thus avoiding some potential name
24
+ clashes
25
+ * Update development dependencies
26
+ * Various code quality improvements
27
+ * Record approved licenses for dependencies
28
+
29
+ ## 0.15.2 / 2019-11-29
30
+
31
+ * Load girepository-1.0 library in a way that does not require installing a
32
+ development package.
33
+
34
+ ## 0.15.1 / 2019-10-20
35
+
36
+ * Allow access to properties for unintrospectable classes.
37
+
38
+ ## 0.15.0 / 2019-10-19
39
+
40
+ * Drop support for gobject-introspection below 1.46, the version available in
41
+ Ubuntu Xenial.
42
+ * Merge extended property getter and setter into regular ones. This means you
43
+ can always just use `#get_property` and `#set_property`. The methods
44
+ `#get_property_extended` and `#set_property_extended` are deprecated and will
45
+ be removed in GirFFI version 0.16 or later.
46
+ * Support setting ByteArray properties directly with string values.
47
+ * Target Ruby 2.4+
48
+ * Implement getting and setting of flag properties and GValues.
49
+ * Add support for basic hashtable values larger than pointer.
50
+ * Support unintrospectable classes not derived from GObject but from some other
51
+ fundamental object type.
52
+ * Make GPtrArray work with boxed types.
53
+ * Do not try to ref method reciever for struct instance methods marking the
54
+ instance receiver as transfer `:everything`.
55
+ * Support signals with GError arguments.
56
+ * Cache various methods on IBaseInfo and its subclasses.
57
+ * Generate aliases for accessor methods instead of relying on `method_missing`.
58
+
3
59
  ## 0.14.1 / 2018-09-27
4
60
 
5
61
  * Add enum values as constants in the generated module.
data/README.md CHANGED
@@ -12,7 +12,6 @@ Ruby bindings for GNOME using the GObject Introspection Repository.
12
12
  [![Depfu](https://badges.depfu.com/badges/d5a8e9bffd2462a7ab4921d2f7e6fc48/overview.svg)](https://depfu.com/github/mvz/gir_ffi)
13
13
  [![Build Status](https://travis-ci.org/mvz/gir_ffi.svg?branch=master)](https://travis-ci.org/mvz/gir_ffi)
14
14
  [![Code Climate](https://codeclimate.com/github/mvz/gir_ffi/badges/gpa.svg)](https://codeclimate.com/github/mvz/gir_ffi)
15
- [![Coverage Status](https://coveralls.io/repos/github/mvz/gir_ffi/badge.svg?branch=master)](https://coveralls.io/github/mvz/gir_ffi?branch=master)
16
15
  [![Documentation Status](https://inch-ci.org/github/mvz/gir_ffi.svg?branch=master)](https://inch-ci.org/github/mvz/gir_ffi/branch/master)
17
16
 
18
17
  ## Features
@@ -53,7 +52,7 @@ examples can be found in `gir_ffi-gtk` and `gir_ffi-gst`.
53
52
 
54
53
  ## Requirements
55
54
 
56
- GirFFI is supported on CRuby 2.2, 2.3, 2.4 and 2.5, and JRuby 9.1 and 9.2
55
+ GirFFI is supported on CRuby 2.5, 2.6 and 2.7, and JRuby 9.2.
57
56
 
58
57
  You will also need gobject-introspection installed with some
59
58
  introspection data.
@@ -63,17 +62,18 @@ available under the name ending in plain `.so`. If GirFFI complains that it
63
62
  cannot find the library, try installing development packages for those
64
63
  libraries.
65
64
 
66
- GirFFI should work with gobject-introspection 1.32.0 and up.
65
+ GirFFI should work with gobject-introspection 1.46.0 and up.
67
66
 
68
- On Debian and Ubuntu, installing `libgirepository1.0-1` and `gir1.2-glib-2.0`
67
+ On Debian and Ubuntu, installing `libgirepository-1.0-1` and `gir1.2-glib-2.0`
69
68
  should be enough to use GirFFI in your application.
70
69
 
71
70
  To run the tests, you should additionally install `libgirepository1.0-dev`,
72
- `libcairo2-dev`, `gobject-introspection`, `gir1.2-gtop-2.0`, `gir1.2-gtk-3.0`,
73
- `gir1.2-pango-1.0`, `gir1.2-secret-1` and `gir1.2-gstreamer-1.0`. This should
74
- be enough to get `rake test` working.
71
+ `gobject-introspection`, `libcairo2-dev`, `gir1.2-gtop-2.0`, `gir1.2-gtk-3.0`,
72
+ `gir1.2-pango-1.0`, `gir1.2-gtksource-3.0`, `gir1.2-secret-1` and
73
+ `gir1.2-gstreamer-1.0`. This should be enough to get `rake test` working.
75
74
 
76
- GirFFI has not been tested on Mac OS X or Microsoft Windows. YMMV.
75
+ GirFFI has not been tested on Mac OS X or Microsoft Windows. YMMV. Pull
76
+ requests to support these platforms are welcome.
77
77
 
78
78
  ## Overrides
79
79
 
@@ -96,9 +96,9 @@ Please feel free to file bugs or send pull requests!
96
96
  If you just want to help out but don't know where to start, have a look at
97
97
  TODO.md, and check the notes in the code (e.g., using `dnote`).
98
98
 
99
- If you want to send pull requests or patches, please try to follow these
100
- instructions. If you get stuck, make a pull request anyway and I'll try to help
101
- out.
99
+ If you want to send pull requests or patches, try to follow the instructions
100
+ below. **If you get stuck, please make a pull request anyway and I'll try to
101
+ help out.**
102
102
 
103
103
  * Make sure `rake test` runs without reporting any failures.
104
104
  * Add tests for your feature. Otherwise, I can't see if it works or if I
@@ -119,7 +119,7 @@ The following people have contributed to GirFFI over the years:
119
119
 
120
120
  ## License
121
121
 
122
- Copyright © 2009–2018 [Matijs van Zuijlen](http://www.matijs.net)
122
+ Copyright © 2009–2020 [Matijs van Zuijlen](http://www.matijs.net)
123
123
 
124
124
  GirFFI is free software, distributed under the terms of the GNU Lesser
125
125
  General Public License, version 2.1 or later. See the file COPYING.LIB for
data/TODO.md CHANGED
@@ -26,57 +26,36 @@ These in the order they occured to me, and may therefore be fixed in any order.
26
26
 
27
27
  ## Derived types
28
28
 
29
- Derived classes can now be registered with GObject, but the way to do this is
30
- not very nice:
29
+ Derived classes are now registered like so:
31
30
 
32
31
  class Derived < Base
33
- end
32
+ install_property GObject.param_spec_int("foo", "foo bar",
33
+ "The Foo Bar Property",
34
+ 10, 20, 15, 3)
34
35
 
35
- GirFFI.define_type Derived do |info|
36
- info.install_property GObject.param_spec_int("foo", "foo bar",
37
- "The Foo Bar Property",
38
- 10, 20, 15, 3)
39
36
  # assume Base defines a virtual function called 'some_vfunc'
40
- info.install_vfunc_implementation :some_vfunc, proc {|obj|
41
- #implementation goes here
37
+ install_vfunc_implementation :some_vfunc, proc {|obj|
38
+ # implementation goes here
42
39
  }
43
- end
44
40
 
45
- or
46
-
47
- class Derived < Base
48
- def some_vfunc
49
- #implementation goes here
41
+ def other_vfunc
42
+ # implementation
50
43
  end
51
- end
52
44
 
53
- GirFFI.define_type Derived do |info|
54
- info.install_property GObject.param_spec_int("foo", "foo bar",
55
- "The Foo Bar Property",
56
- 10, 20, 15, 3)
57
- info.install_vfunc_implementation :some_vfunc
45
+ # assume Base defines a virtual function called 'other_vfunc'
46
+ install_vfunc_implementation :other_vfunc
58
47
  end
59
48
 
49
+ GirFFI.define_type Derived
50
+
51
+ Potential improvements:
60
52
 
61
- It would be good to replace this with something that's easier to use:
53
+ * Allow `define_type` to be called in the class definition
62
54
  * Perhaps auto-register types, like Gtk# does
63
55
  * Perhaps automagically find vfunc implementations, like PyGObject and
64
56
  Ruby-GNOME do
65
57
  * What about properties?
66
58
 
67
- How about:
68
-
69
- class Derived < Base
70
- include SomeGObjectInterface
71
-
72
- register_type 'Derived'
73
-
74
- install_property ...
75
- install_vfunc_implementation ...
76
- end
77
-
78
- This needs issue #63 to be resolved.
79
-
80
59
  NOTE: When adding an interface module to a derived class, its prerequisites
81
60
  should be checked.
82
61
 
@@ -0,0 +1,6 @@
1
+ # Documentation
2
+
3
+ See [the README](../README.md) for basic usage.
4
+
5
+ See [Subclassing](Subclassing.md) for details on creating your own subclasses
6
+ of GObject classes.
@@ -0,0 +1,38 @@
1
+ # Subclassing
2
+
3
+ Creating a Ruby subclass of one of the GObject classes requires following some rules.
4
+
5
+ First of all, if you override the initializer, you **must** call `super`
6
+ otherwise, the underlying GObject pointer will not be created and stored.
7
+
8
+ Second, GObject objects often have several constructors. GirFFI creates a
9
+ separate initializer for each constructor. This allows customization of the
10
+ call to super for each initializer. This means you will have to override each
11
+ initializer separately, as needed.
12
+
13
+ As an example, here is a subclass of `Regress::TestSubObj`, a class from
14
+ GObjectIntrospection's test suite, adding an extra argument to some of its
15
+ constructors.
16
+
17
+ ```
18
+ class MyObj < Regress::TestSubObj
19
+ attr_reader :animal
20
+
21
+ def initialize animal
22
+ super()
23
+ @animal = animal
24
+ end
25
+
26
+ def initialize_from_file animal, file
27
+ super(file)
28
+ @animal = animal
29
+ end
30
+ end
31
+
32
+ o1 = MyObj.new 'dog'
33
+ o1.foo # => 'dog'
34
+ o2 = MyObj.constructor
35
+ o2.foo # => nil
36
+ o3 = MyObj.new_from_file 'cat', 'my_file.txt'
37
+ o3.foo # => 'cat'
38
+ ```
@@ -1,25 +1,26 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # Ensure GLib is defined by GirFFI itself
4
- raise 'The module GLib was already defined elsewhere' if Kernel.const_defined? :GLib
5
-
6
- require 'gir_ffi/core'
7
-
8
- # Bypass check for existing modules
9
- GirFFI::Builders::ModuleBuilder.new('GLib').generate
10
-
11
- require 'ffi-glib/array'
12
- require 'ffi-glib/byte_array'
13
- require 'ffi-glib/bytes'
14
- require 'ffi-glib/destroy_notify'
15
- require 'ffi-glib/error'
16
- require 'ffi-glib/hash_table'
17
- require 'ffi-glib/list'
18
- require 'ffi-glib/main_loop'
19
- require 'ffi-glib/ptr_array'
20
- require 'ffi-glib/s_list'
21
- require 'ffi-glib/strv'
22
- require 'ffi-glib/variant'
4
+ raise "The module GLib was already defined elsewhere" if Kernel.const_defined? :GLib
5
+
6
+ require "gir_ffi/core"
7
+
8
+ # Set up the GLib module, bypassing the check for existing modules. This also
9
+ # creates GLib::Lib.
10
+ GirFFI::Builders::ModuleBuilder.new("GLib").generate
11
+
12
+ require "ffi-glib/array"
13
+ require "ffi-glib/byte_array"
14
+ require "ffi-glib/bytes"
15
+ require "ffi-glib/destroy_notify"
16
+ require "ffi-glib/error"
17
+ require "ffi-glib/hash_table"
18
+ require "ffi-glib/list"
19
+ require "ffi-glib/main_loop"
20
+ require "ffi-glib/ptr_array"
21
+ require "ffi-glib/s_list"
22
+ require "ffi-glib/strv"
23
+ require "ffi-glib/variant"
23
24
 
24
25
  # Module representing GLib's GLib namespace.
25
26
  module GLib
@@ -28,12 +29,16 @@ module GLib
28
29
  load_class :EqualFunc
29
30
  load_class :Func
30
31
 
31
- # Module for attaching functions from the glib library.
32
- # NOTE: This module is defined by the call to GirFFI.setup above.
32
+ # Module for attaching functions from the glib library. This module is
33
+ # defined by the call to ModuleBuilder#generate above.
33
34
  module Lib
35
+ attach_function :g_slist_append, [:pointer, :pointer], :pointer
34
36
  attach_function :g_slist_prepend, [:pointer, :pointer], :pointer
37
+ attach_function :g_slist_reverse, [:pointer], :pointer
35
38
 
36
39
  attach_function :g_list_append, [:pointer, :pointer], :pointer
40
+ attach_function :g_list_prepend, [:pointer, :pointer], :pointer
41
+ attach_function :g_list_reverse, [:pointer], :pointer
37
42
 
38
43
  attach_function :g_hash_table_foreach, [:pointer, HFunc, :pointer], :void
39
44
  attach_function :g_hash_table_new, [HashFunc, EqualFunc], :pointer
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'ffi-glib/container_class_methods'
4
- require 'ffi-glib/array_methods'
3
+ require "ffi-glib/container_class_methods"
4
+ require "gir_ffi/array_element_convertor"
5
5
 
6
6
  GLib.load_class :Array
7
7
 
@@ -10,7 +10,6 @@ module GLib
10
10
  # be necessary to create objects of this class from Ruby directly.
11
11
  class Array
12
12
  include Enumerable
13
- include ArrayMethods
14
13
  extend ContainerClassMethods
15
14
 
16
15
  attr_reader :element_type
@@ -70,6 +69,17 @@ module GLib
70
69
  self
71
70
  end
72
71
 
72
+ # Re-implementation of the g_array_index macro
73
+ def index(idx)
74
+ unless (0...length).cover? idx
75
+ raise IndexError, "Index #{idx} outside of bounds 0..#{length - 1}"
76
+ end
77
+
78
+ item_ptr = data_ptr + idx * element_size
79
+ convertor = GirFFI::ArrayElementConvertor.new element_type, item_ptr
80
+ convertor.to_ruby_value
81
+ end
82
+
73
83
  private
74
84
 
75
85
  def data_ptr
@@ -83,7 +93,7 @@ module GLib
83
93
  def check_element_size_match
84
94
  return if calculated_element_size == get_element_size
85
95
 
86
- warn 'WARNING: Element sizes do not match'
96
+ warn "WARNING: Element sizes do not match"
87
97
  end
88
98
 
89
99
  def guess_element_type
@@ -12,11 +12,17 @@ module GLib
12
12
  def append(data)
13
13
  bytes = GirFFI::InPointer.from_utf8 data
14
14
  len = data.bytesize
15
- self.class.wrap Lib.g_byte_array_append(to_ptr, bytes, len)
15
+ Lib.g_byte_array_append(to_ptr, bytes, len)
16
+ self
16
17
  end
17
18
 
18
- def initialize
19
- store_pointer(Lib.g_byte_array_new)
19
+ def self.from(data)
20
+ case data
21
+ when self
22
+ data
23
+ else
24
+ new.append(data)
25
+ end
20
26
  end
21
27
  end
22
28
  end
@@ -18,7 +18,7 @@ module GLib
18
18
  end
19
19
 
20
20
  super(ptr).tap do |container|
21
- container.reset_typespec typespec if container
21
+ container&.reset_typespec typespec
22
22
  end
23
23
  end
24
24
 
@@ -9,8 +9,8 @@ module GLib
9
9
  class DestroyNotify
10
10
  def self.default
11
11
  @default ||= from proc { |user_data|
12
- callback_key = GirFFI::ArgHelper::OBJECT_STORE.fetch(user_data)
13
- drop_callback callback_key
12
+ callback = GirFFI::ArgHelper::OBJECT_STORE.fetch(user_data)
13
+ drop_callback callback
14
14
  }
15
15
  end
16
16
  end
@@ -5,7 +5,7 @@ GLib.load_class :Error
5
5
  module GLib
6
6
  # Overrides for GError, used by GLib for handling non-fatal errors.
7
7
  class Error
8
- GIR_FFI_DOMAIN = GLib.quark_from_string('gir_ffi')
8
+ GIR_FFI_DOMAIN = GLib.quark_from_string("gir_ffi")
9
9
 
10
10
  def self.from_exception(exception)
11
11
  new_literal GIR_FFI_DOMAIN, 0, exception.message
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'ffi-glib/container_class_methods'
3
+ require "ffi-glib/container_class_methods"
4
4
 
5
5
  GLib.load_class :HashTable
6
6
 
@@ -10,8 +10,7 @@ module GLib
10
10
  include Enumerable
11
11
  extend ContainerClassMethods
12
12
 
13
- attr_reader :key_type
14
- attr_reader :value_type
13
+ attr_reader :key_type, :value_type
15
14
 
16
15
  def initialize(key_type, value_type)
17
16
  @key_type = key_type
@@ -63,7 +62,7 @@ module GLib
63
62
  when :utf8
64
63
  FFI::Function.new(:uint,
65
64
  [:pointer],
66
- find_support_function('g_str_hash'))
65
+ find_support_function("g_str_hash"))
67
66
  end
68
67
  end
69
68
 
@@ -72,7 +71,7 @@ module GLib
72
71
  when :utf8
73
72
  FFI::Function.new(:int,
74
73
  [:pointer, :pointer],
75
- find_support_function('g_str_equal'))
74
+ find_support_function("g_str_equal"))
76
75
  end
77
76
  end
78
77