Changelog.md
# Changelog
## 0.17.0 / 2023-12-31
* Support Ruby 3.0 and up, dropping support for Ruby 2.7 ([#356] by [mvz])
[#356]: https://github.com/mvz/gir_ffi/pull/356
## 0.16.1 / 2023-10-07
* Support Ruby 3.2 ([#331] by [mvz])
* Require at least ffi 1.16.3 to avoid 'Can't modify frozen Hash' error ([#350]
by [mvz])
[mvz]: https://github.com/mvz
[#331]: https://github.com/mvz/gir_ffi/pull/331
[#350]: https://github.com/mvz/gir_ffi/pull/350
## 0.16.0 / 2022-05-21
* Support Ruby 3.1
* Rename `#object_class` to `#class_struct`
* Remove `GObject.object_class_from_instance`
* Limit public interface of `BaseMethodBuilder`
* Remove deprecated methods from `GObject::Object`
* Stop accepting blocks when defining a type
* Check parameter direction in signal argument conversion
* Drop support for JRuby
* Drop support for Ruby 2.6
## 0.15.9 / 2021-12-05
* Skip setting destroy notifier state if types don't make sense
* Handle functions with multiple user-supplied callback arguments
## 0.15.8 / 2021-11-20
* Drop support for Ruby 2.5
* Bump minimum supported version of gobject-introspection to 1.56.0
* Bump minimum supported version of glib to 2.56.0
* Handle functions that have swapped closure annotation
* Handle GPtrArray arguments in signal handlers
## 0.15.7 / 2021-01-15
* Handle sized arrays with interface element types
## 0.15.6 / 2021-01-10
* Officially support Ruby 3.0
* Rely on `GObject.boxed_free` to free GValue objects
* Require 'set' in `callback_base.rb`, which needs it (thanks, Jordan Webb!)
* Make SizedArray handle `:filename` elements
## 0.15.5 / 2020-11-13
* Make building and finding metaclasses via `Builder.build_class` work again
## 0.15.4 / 2020-11-01
* Support disguised object class structs
* Handle the case where vfunc object arguments are null
* Bail out earlier when trying to register non-GObject class
* Small improvements
* Use `Module#prepend` for overrides
* Clean up initialization of structs, unions, and boxed types
* Make `GObject::Object#store_pointer` private like in the superclass
* Handle creating SizedArray of uint8 from a string
* Improve derived class setup
* Improve List and SList methods
* Make `ByteArray#append` return self
* Improve packaging infrastructure (thanks, utkarsh2102!)
## 0.15.3 / 2020-06-14
* Officially support Ruby 2.7
* Officially drop support for Ruby 2.4
* Store classes representing inline callback types in the class that defines
them instead of in the main namespace, thus avoiding some potential name
clashes
* Update development dependencies
* Various code quality improvements
* Record approved licenses for dependencies
## 0.15.2 / 2019-11-29
* Load girepository-1.0 library in a way that does not require installing a
development package.
## 0.15.1 / 2019-10-20
* Allow access to properties for unintrospectable classes.
## 0.15.0 / 2019-10-19
* Drop support for gobject-introspection below 1.46, the version available in
Ubuntu Xenial.
* Merge extended property getter and setter into regular ones. This means you
can always just use `#get_property` and `#set_property`. The methods
`#get_property_extended` and `#set_property_extended` are deprecated and will
be removed in GirFFI version 0.16 or later.
* Support setting ByteArray properties directly with string values.
* Target Ruby 2.4+
* Implement getting and setting of flag properties and GValues.
* Add support for basic hashtable values larger than pointer.
* Support unintrospectable classes not derived from GObject but from some other
fundamental object type.
* Make GPtrArray work with boxed types.
* Do not try to ref method reciever for struct instance methods marking the
instance receiver as transfer `:everything`.
* Support signals with GError arguments.
* Cache various methods on IBaseInfo and its subclasses.
* Generate aliases for accessor methods instead of relying on `method_missing`.
## 0.14.1 / 2018-09-27
* Add enum values as constants in the generated module.
## 0.14.0 / 2018-09-25
* Do not generate field accessors for Object types. Object data should normally
not be accessed directly.
## 0.13.1 / 2018-09-24
* Silence some warnings.
* Allow overrides to be applied using `Module#prepend`, as an alternative to
alias chaining.
* Make `ZeroTerminated` array work with enum elements.
* Various refactorings.
* Improve consistency of conversion between symbols and integers for enum
types.
## 0.13.0 / 2018-09-08
* Drop support for Ruby 2.1
* Support GLib 2.58
* Add `setup_method!` and `setup_instance_method!`, that raise an error when
the given method is not found.
## 0.12.1 / 2018-05-20
* Restore support for Ruby 2.1 and 2.2
## 0.12.0 / 2018-03-24
* Drop support for GLib::IConv, which is no longer introspectable in glib 2.56.
* Drop support for Ruby 2.1 and 2.2
* Add support for Ruby 2.5
## 0.11.4 / 2017-09-19
* Support glib 2.54 and gobject-introspection 1.54
## 0.11.3 / 2017-05-05
* Allow conversion to native Boolean from any Ruby value
## 0.11.2 / 2017-04-20
* Allow vfunc implementation using a regular method
## 0.11.1 / 2017-01-07
* Fix build on JRuby
* Allow clearing properties that take a GObject value
* Handle GLists requiring an Interface type
## 0.11.0 / 2016-10-16
* Internal test and code improvements. Some internal APIs have been removed or
changed.
* Make `Strv#each` thread-safe.
* Drop support for CRuby 2.0.
* Move `::type_init` and base `Strv` implementation into `GObjectIntrospection`,
making it stand-alone.
* Move `GLib::Boolean` to `GirFFI::Boolean`.
* Guard against instantiating abstract classes using the default constructor.
* Handle user-defined properties containing dashes
* Handle user-defined properties of a large number of types
## 0.10.2 / 2016-04-29
* Update `ffi-bit_masks` dependency and remove monkey-patch
* Support gobject-introspection version 1.48
## 0.10.1 / 2016-03-28
* Restore JRuby compatibility.
- Introduce #owned to flag unions and structs for release at garbage collection time.
In JRuby's implementation, FFI::Pointer does not implement #autorelease=
and #autorelease?, so this different technique is used to free pointers
allocated by GLib. It is in fact doubtful that setting autorelease had any
actual effect even on CRuby.
- Immediately free string pointers whose ownership is transfered. Again, the
#autorelease technique doesn't work on JRuby.
- Fix handling of callee-allocated out parameters in vfuncs. The `put_pointer`
method was wrongly called, and JRuby is more picky about what types that
method expects, exposing the bug.
## 0.10.0 / 2016-03-23
* Ensure ownership of created RubyClosure objects
## 0.10.0.pre1 / 2016-03-22
* Rework generated method code to use less indirection.
* Remove unused classes and methods
* Clearly distinguish boxed types from other structs
* Take ownership transfer into account in generated methods
* Properly free unions, structs and boxed types owned by GirFFI
* Block access to fields that have disguised types
## 0.9.5 / 2016-03-05
* Abort if modules were defined earlier, e.g., through the gems from the
ruby-gnome family.
* Extend integration testing with GObjectIntrospection's test libraries.
* Find signals on user-defined types.
* Allow getting and setting of properties with a callback value.
* Handle pointer-like signal arguments such as GList.
* Handle static methods on interface modules.
* Free most self-allocated boxed types using `GObject.boxed_free`.
* Correctly assign length arguments for zero-terminated arguments
## 0.9.4 / 2016-02-22
* Pass nil user data as null pointer, and store a missing callback as nil. This
avoids passing a null callback and a non-null user data value, which causes
problems with `vte_terminal_spawn_sync()` and perhaps other functions.
## 0.9.3 / 2016-02-20
* Make allow-none arguments optional in Ruby
* Add Clutter example
* Clean up mainloop example
* Use bit masks for relevant functions in GObjectIntrospection
## 0.9.2 / 2016-02-05
* Do not create a property accessor when a corresponding getter method exists
## 0.9.1 / 2016-02-04
* Add field accessors for Object types for fields that don't have corresponding
properties or getter methods
* Improve error handling for signals and properties that are not found
* Handle signals without GIR data
* Add interrupt handler to break out of main loops
## 0.9.0 / 2016-01-21
* Propagate exceptions from callbacks during event loops
* Make default object constructor take a hash of properties
* Fix implementation of `ObjectBase.object_class`
* Make object class struct types inherit from their parent structs. This makes
parent methods and fields available.
* Use `ObjectBase.object_class` instead of old `Object#type_class` to find
properties
* Remove `Object#type_class`
* Automatically unpack GValue return values
* Use a BitMask to handle flag values
* Handle callback arguments as Ruby block arguments
* Use user data and destroy notify arguments to automate callback cleanup. This
means you can no longer supply your own user data and notifiers.
* Support CRuby 2.3 and Rubinius 3.x
* Drop support for JRuby 1.7 and Rubinius 2.x.
## 0.8.6 / 2015-12-09
* Change handling of initializers in subclasses
* Subclasses with their own GType revert to the default GObject constructor
* Subclasses cannot use their parent classes' non-default contructors
* Find signals in ancestor classes of unintrospectable types
## 0.8.5 / 2015-12-04
* Improve GObject::Value
* Make `#wrap_ruby_value` work for object classes
* Use non-deprecated methods for getting and setting char values
* Make `set_value` and `get_value` work for interface types
## 0.8.4 / 2015-12-03
* Handle classes with lower-case names
* Make `ObjectBase` a `DataConverter` so FFI handles it natively
* Use more of gobject-introspection's test libraries for testing
* Simplify constructor overrides: Custom initializers will no longer be
overwritten when setting up the corresponding constructor.
* Override `GObject::Object.new` to not require a GType argument
## 0.8.3 / 2015-11-13
* Fix handling of signal handler return values
* Do not create setters for properties that cannot be set
## 0.8.2 / 2015-10-10
* Use inherited constructor for boxed types
* Make `InOutPointer` work correctly for boxed types
* Make `.for` work with boxed types
* Make `#set_value` work with boxed types
* Make GObject::Value support nil type:
* Make `.wrap_ruby_value(nil)` work
* Make `#set_value` and `#get_value` work when the type is `TYPE_INVALID`
* Make `.for_gtype` work with `TYPE_INVALID` and `TYPE_NONE`
* Make `.from(nil)` return a `GObject::Value` instead of nil
* Make `#set_ruby_value` private
* Make `GObject::Object.signal_emit` work with gobject-introspection 1.46
* Replace or remove all custom `.new` methods
* Make `setup_method` and `setup_instance_method` handle symbol arguments
## 0.8.1 / 2015-10-04
* Handle struct array fields with related length fields
* Update test library build process
## 0.8.0 / 2015-09-18
* Drop official support for CRuby 1.9.3
* Officially support JRuby 9.0.0.0
* Change handling of initializers in custom subclasses
## 0.7.10 / 2015-09-16
* Allow `ffi-gobject` and `ffi-glib` to be required directly
* Improve documentation
* Remove arbitrary refcount check from finalizer (by John Cupitt)
## 0.7.9 / 2015-05-05
* Unset GValues in finalizer
* Dereference GObjects in finalizer
* Increase refcount for ingoing :object arguments of functions with full
ownership transfer
* Increase refcount for receiver arguments with full ownership transfer
* Increase refcount for ingoing :object arguments of vfuncs with no ownership
transfer
* Increase refcount for :object return values of vfuncs with full transfer
* Increase refcount for outgoing :object arguments of vfuncs with full ownership
transfer
* Support Ruby 2.2
* Rename several methods. The old names are deprecated and will be removed in 0.8.0.
## 0.7.8 / 2014-12-09
* Support constants with a falsy value
* Support type aliases that resolve to a type that is not introspectable
* Support callback arguments with direction :inout
* Provide `GObject.signal_connect_after` and `GObject::Object.signal_connect_after`
* Handle setting GValues (and hence, properties) that have enum values
* Various refactorings & coding style cleanups
## 0.7.7 / 2014-10-21
* Handle introspecting boolean constants
* Provide `config.h` for versions of the test libs that need it
* Include gemspec in the gem
* Avoid needless casting from string to symbol by making `#setup_and_call` take a
string
* Avoid argument list unpacking by making `#setup_and_call` take an array of
arguments rather than a variable number of arguments
* Remove old example files
* Let rubygems know about required Ruby version
* Various clean-ups
## 0.7.6 / 2014-08-22
* Work around `respond_to?` behavior in JRuby 1.6.13
* Deprecate `setup_class` in favor of `load_class`
* Support GValue containing GArray
* Provide constant `TYPE_BYTE_ARRAY`
* Don't recurse looking for signals and properties
* Clean up generated code:
* Avoid use of an ignored dummy argument
* Clean up trailing whitespace
* Drop support for Ruby 1.9.2
* Allow data argument for `GObject::Object#signal_connect`
* Let Ruby threads run during GLib's main loop
* Make all dependencies versioned
* Various refactoring & code cleanup
## 0.7.5 / 2014-06-22
* Use closures as signal handlers, rather than callbacks
* Obtain reference to GVariant on creation
* Make struct arguments work in JRuby
* Various refactoring & code cleanup
## 0.7.4 / 2014-05-03
* Correctly handle closure data arguments originating from C
* Handle callee-allocated simple types for callbacks and functions
* Handle callback out parameters that are zero-terminated arrays
* Handle virtual functions with GError arguments
* Support the GBytes type
* Handle virtual functions returning GObjects
* Avoid overwriting methods with getters for properties with dashes in the name
## 0.7.3 / 2014-03-23
* Restore proper handling of enums in callback arguments
* Simplify Rake configuration
* Various small fixes
* Remove remaining Ruby 1.8 version checks
## 0.7.2 / 2014-01-18
* Officially drop Ruby 1.8 compatibility.
* Store GType of generated types in a constant, removing the need to generate a
separate `get_gtype` method for each type.
## 0.7.1 / 2014-01-17
* Handle method setup for methods with unsafe names (i.e., `g_iconv()`)
* Add override for GLib::IConv.open
## 0.7.0 / 2014-01-11
* Type handling:
* Handle c arrays with separate length argument for signals
* Handle GHashTable values of type `:gint8` and `:guint32`
* Handle signals with int64, Strv, uint64 arguments
* Handle arrays of integers cast as pointers
* Handle fields of callback type
* Handle nested GHashTable
* Argument handling:
* Refactor argument builder system
* Improve handling of user data arguments
* Handle signal and callback arguments with direction :out
* Handle aliases of container types by making the element type optional
* Handle signal and callback return values that need conversion
* User defined types:
* Pass explicit receiver to initialization block for UserDefinedTypeInfo
* Allow user defined types that are anonymous Ruby classes
* Register defined properties in a subclass
* Support setting virtual function implementations in a subclass
* Support adding an interface to a subclass
* Support implementing an interface's virtual functions in a subclass
* Use FFI's DataConvertor system to handle enums and callbacks
* Stop using deprecated GValueArray to construct argument array for `signal_emit`
* Make `ITypeInfo#g_type` return correct value for c arrays
* Make `get_property` and `set_property` less smart, moving conversion into the
property accessor definitions
* Make `GObject::Value#get_value` handle enums and flags
* Clean up deprecated methods
## 0.6.7 / 2013-09-28
* Uniform handling of callback, signal and method arguments
* Automatically convert array elements to GValue
* Support inline array fields
* Support struct fields
* Improved field setters and getters
* Support many more types of properties
* Support skipped arguments and return values
* Fix refcount for the result of IBaseInfo#container
* Check bounds in GLib::PtrArray#index and GLib::Array#index
* Deprecate several methods
* Lots of refactoring
## 0.6.6 / 2013-08-05
* Handle GArrays of booleans and structs
* Improve handling of gbooleans
## 0.6.5 / 2013-08-03
* Handle inline arrays of structs
* Implement equality operator for container types
* Fix element size calculation for GArray
## 0.6.4 / 2013-06-30
* Represent enum types by modules wrapping `FFI::Enum`
* Support functions on enums
* Handle zero-terminated arrays of types other than int32
* Add override for `GLib::Variant#get_string`
* Handle non-throwing arguments and return values of type GError
* Handle arguments and return values of type GPtrArray
* Handle caller-allocated arguments of type GArray
* Deprecate `GObject::Value#ruby_value`, replacing it with `#get_value`
## 0.6.3 / 2013-06-15
* Make use of enums as element type for GHashTable and other containers
work
## 0.6.2 / 2013-06-14
* Handle introspectable types with introspectable parent types
## 0.6.1 / 2013-06-09
* Handle SizedArray containing enums
## 0.6.0 / 2013-06-07
* Support Rubinius
* Lots of refactoring
## 0.5.2 / 2013-04-23
* Handle signal details in `GObject.signal_connect` and `.signal_emit`
* Make `GValue#set_value` check object GType compatibility
* Eliminate GObject::Helper module
* Handle more argument types
* Support Ruby 2.0.0
## 0.5.1 / 2013-02-01
* Properly handle zero-terminated arrays of `:filename`
* Loosen dependencies on ffi and minitest
## 0.5.0 / 2013-01-19
* Update ffi dependency
* Add finalizer to release memory for IBaseInfo and descendents
* Remove deprecated methods
* Remove pretty-printing functionality
* Refactor argument handling
## 0.4.3 / 2012-11-02
* Remove gobject-introspection version check
* Make tests pass with gobject-introspection 1.34
* Ongoing refactoring
## 0.4.2 / 2012-09-22
* Make objects and interfaces wrap poiners in the class that matches
their GType.
## 0.4.1 / 2012-09-18
* Remove workarounds for older versions of gobject-introspection
* Mark certain methods as deprecated. These will be removed in 0.5.0
* Handle :filename type arguments in InPointer
* Refactoring
## 0.4.0 / 2012-08-24
* Move Gtk+ bindings to their own gem (`gir_ffi-gtk`).
## 0.3.2 / 2012-08-24
* Correctly set FFI return type when callbacks that return GObjects have
incomplete type specification.
## 0.3.1 / 2012-05-13
* Correctly map Interface types in callbacks.
## 0.3.0 / 2012-04-09
* Improve process of defining initializers in derived classes.
* Make interfaces know their GType.
* Make classes created by the Unintrospectable builder know their GType.
* Create property accessors instead of field accessors for GObjects.
* Add Ruby-style getter and setter methods (by Antonio Terceiro).
* Add `#signal_connect` instance method (by Antonio Terceiro).
* Make GirFFI's tests pass with gobject-introspection 0.10.
* Improve unintrospectable type handling.
* Bug fixes and refactorings.
* Start implementing `#define_type`, for creating descendent types that
the GObject system knows about.
## 0.2.3 / 2011-12-31
* Fix issue #7: methods that take GValues will autoconvert other values.
* Fix method lookup when include'ing a module that is an Interface.
* Various refactorings.
## 0.2.2 / 2011-12-07
* Fix issue #19: Check if a GLib::PtrArray.add method was generated before
attempting to remove it.
* Fix two issues with pretty printing that made output for GLib have syntax
errors.
## 0.2.1 / 2011-11-20
* Fix handling of output parameters that are arrays of pointers to structures
(i.e., of type `Foo***`).
## 0.2.0 / 2011-11-19
* Add support for properties, with `#get_property` and `#set_property`.
* Add support for fields.
- Create field accessor methods.
- Get rid of `#[]` and `#[]=`.
* Explicitely load `libgirepository` with ABI version 1.
* Improve implementation of GLib container classes (GList etc.):
- Real constructors.
- `#append` and friends are instance methods now.
- Conversion methods to cast Ruby containers to GLib containers.
* Start implementing pretty printing.
* Various refactorings.
## 0.1.0 / 2011-10-28
* Put bindings for GObjectIntrospection in their own namespace.
* `GirFFI.setup` no longer loads overrides.
* Add `ffi-gtk2` and `ffi-gtk3` files for loading Gtk+ overrides.
## 0.0.14 / 2011-10-28
* Support GObject Introspection version 1.30:
- Add support for layouts with fixed-length arrays.
- Handle type names starting with underscores.
- Call `g_signal_emitv` directly to avoid conflict in introspection info
with earlier versions of GObject Introspection.
## 0.0.13 / 2011-09-09
* Remove IErrorDomain related code. This functinality was removed from
GObject Introspection in version 1.29.17
## 0.0.12 / 2011-09-04
* No longer use `_id2ref` to locate objects past as user data pointers.
* Fix failing tests on JRuby.
## 0.0.11 / 2011-08-22
* Change interface to the underlying builder in generated modules and
classes.
* Handle string, enum, union, flags signal arguments.
* Handle string arguments in `GObject.signal_emit`.
* Handle enum signal arguments.
* Fix finding signals in non-introspectable types.
* Fix method setup in non-introspectable types.
* Refactoring.
## 0.0.10 / 2011-05-18
* Handle GObject interfaces properly.
* Create types only defined by the GType system.
* Support GType array return values.
## 0.0.9 / 2011-05-02
* More complete support for the basic types.
* Improved support for GList, GSList, GStrv, and GValue.
* Add support for GHashTable, GVariant, GByteArray, and GArray.
* Generate constants.
* When setting up a module, set up its dependencies as well.
* Test against the GIMarshallingTests test namespace.
* Use minitest/spec for testing.
* Various bug fixes and internal improvements.
## 0.0.8 / 2011-04-08
* Generate modules with names starting with a lowercase letter (like
`cairo`).
* Allow specifying the typelib version on setup.
* Rename methods `#methods` and `#type` of the introspection classes to avoid
clashing with standard Ruby methods.
* Refactoring.
## 0.0.7 / 2011-04-01
* Support gobject-introspection 0.10, drop support for earlier versions.
- Use Regress, not Everything, for testing.
- Deal with functions that are no longer introspectable.
* Correctly handle constructors that declare their return type different
from their class.
* Implement `RubyClosure`, a `GObject::Closure` for handling ruby callbacks.
* Handle GLib's singly and doubly linked lists.
* Handle callback types defined in-place (like `Closure`'s `marshal`).
* Refactoring.
## 0.0.6 / 2011-03-01
* Cast returned GObjects to their actual type.
* Properly cast callback arguments.
* Handle the case where functions formally return interfaces.
* Make sure Gtk::Window has the correct number of references after creation.
* Refactoring and some small fixes.
## 0.0.5 / 2010-12-30
* Don't create instance methods out of functions and vice versa.
* Find signals on interfaces, too.
* Implement tests for most of Everything.
* Correctly handle array + size arguments.
* Handle most other argument types.
* Various internal changes and other fixes.
## 0.0.4 / 2010-12-14
* Lots of changes to the internals.
* Handle out-only arguments.
* Make use of callbacks from other namespaces work.
* Handle virtual methods where the invoker method has a different name.
* Implement usable `signal_connect` and `signal_emit`.
* Sink floating references when creating a GObject.
* Implement Union type.
* Many small bug fixes.
## 0.0.3 / 2010-11-19
* Update to restore Ruby 1.9 support.
* Handle functions with the 'throws' property set.
* Handle classes without specified fields.
## 0.0.2 / 2010-11-14
* Several fixes to method creation.
## 0.0.1 / 2010-10-25
* Initial release.