module GirFFI::InfoExt::ISignalInfo

Extensions for GObjectIntrospection::ISignalInfo needed by GirFFI

Public Instance Methods

arguments_to_gvalues(instance, arguments) click to toggle source
# File lib/gir_ffi/info_ext/i_signal_info.rb, line 19
def arguments_to_gvalues(instance, arguments)
  arg_g_values = args.zip(arguments).map do |arg_info, arg|
    case arg_info.direction
    when :in
      type = arg_info.argument_type
      type.make_g_value.tap { |it| it.set_value arg }
    else
      raise NotImplementedError
    end
  end

  arg_g_values.unshift GObject::Value.wrap_instance(instance)
end
gvalue_for_return_value() click to toggle source
# File lib/gir_ffi/info_ext/i_signal_info.rb, line 33
def gvalue_for_return_value
  return_type.make_g_value
end
wrap_in_closure(&block) click to toggle source

Create a signal hander closure. Wraps the given block in a custom descendent of RubyClosure with a marshaller tailored for this signal.

@param block The body of the signal handler

@return [GObject::RubyClosure] The signal handler closure, ready to be

passed as a GClosure to C.
# File lib/gir_ffi/info_ext/i_signal_info.rb, line 14
def wrap_in_closure(&block)
  bldr = Builders::SignalClosureBuilder.new(self)
  bldr.build_class.new(&block)
end