Sha256: c590041e731f7ee06d9bbeebded626742de6be72ab14105174fee0b5a2f4280e

Contents?: true

Size: 1.38 KB

Versions: 17

Compression:

Stored size: 1.38 KB

Contents

# frozen_string_literal: true

GObject.load_class :Closure

module GObject
  # Overrides for GClosure, GObject's base class for closure objects.
  #
  # To create Closure objects wrapping Ruby code, use {RubyClosure}.
  class Closure
    setup_method! :new_simple
    setup_instance_method! :invoke
    remove_method :invoke

    # @override
    #
    # @param [Proc] marshal The marshaller to use for this closure object
    def set_marshal(marshal)
      callback = ClosureMarshal.from marshal
      Lib.g_closure_set_marshal self, callback
    end

    # @override
    #
    # This override of invoke ensures the return value location can be passed
    # in as the first argument, which is needed to ensure the GValue is
    # initialized with the proper type.
    #
    # @param [GObject::Value] return_value The GValue to store the return
    #   value, or nil if no return value is expected.
    # @param [Array] param_values the closure parameters.
    def invoke(return_value, param_values)
      rval = Value.from(return_value)
      n_params = param_values.length
      params = GirFFI::SizedArray.from(Value, -1, param_values)
      Lib.g_closure_invoke self, rval, n_params, params, nil
      rval.get_value
    end

    def store_pointer(ptr)
      # NOTE: Call C functions directly to avoid extra argument conversion
      Lib.g_closure_ref ptr
      Lib.g_closure_sink ptr
      super
    end
  end
end

Version data entries

17 entries across 17 versions & 1 rubygems

Version Path
gir_ffi-0.18.0 lib/ffi-gobject/closure.rb
gir_ffi-0.17.0 lib/ffi-gobject/closure.rb
gir_ffi-0.16.1 lib/ffi-gobject/closure.rb
gir_ffi-0.16.0 lib/ffi-gobject/closure.rb
gir_ffi-0.15.9 lib/ffi-gobject/closure.rb
gir_ffi-0.15.8 lib/ffi-gobject/closure.rb
gir_ffi-0.15.7 lib/ffi-gobject/closure.rb
gir_ffi-0.15.6 lib/ffi-gobject/closure.rb
gir_ffi-0.15.5 lib/ffi-gobject/closure.rb
gir_ffi-0.15.4 lib/ffi-gobject/closure.rb
gir_ffi-0.15.3 lib/ffi-gobject/closure.rb
gir_ffi-0.15.2 lib/ffi-gobject/closure.rb
gir_ffi-0.15.1 lib/ffi-gobject/closure.rb
gir_ffi-0.15.0 lib/ffi-gobject/closure.rb
gir_ffi-0.14.1 lib/ffi-gobject/closure.rb
gir_ffi-0.14.0 lib/ffi-gobject/closure.rb
gir_ffi-0.13.1 lib/ffi-gobject/closure.rb