Module: GObject

Defined in:
lib/ffi-gobject.rb,
lib/ffi-gobject/base.rb,
lib/ffi-gobject/value.rb,
lib/ffi-gobject/object.rb,
lib/ffi-gobject/closure.rb,
lib/gir_ffi-base/gobject.rb,
lib/ffi-gobject/object_class.rb,
lib/ffi-gobject/ruby_closure.rb,
lib/gir_ffi-base/gobject/lib.rb,
lib/ffi-gobject/initially_unowned.rb

Overview

The part of the GObject namespace that is needed by GObjectIntrospection.

Defined Under Namespace

Modules: Lib Classes: Closure, InitiallyUnowned, Object, ObjectClass, RubyClosure, Value

Constant Summary collapse

TYPE_ARRAY =
Lib.g_array_get_type
TYPE_BYTE_ARRAY =
Lib.g_byte_array_get_type
TYPE_HASH_TABLE =
Lib.g_hash_table_get_type
TYPE_STRV =
Lib.g_strv_get_type
TYPE_INVALID =
type_from_name('invalid')
TYPE_NONE =
type_from_name('void')
TYPE_INTERFACE =
type_from_name('GInterface')
TYPE_CHAR =
type_from_name('gchar')
TYPE_UCHAR =
type_from_name('guchar')
TYPE_BOOLEAN =
type_from_name('gboolean')
TYPE_INT =
type_from_name('gint')
TYPE_UINT =
type_from_name('guint')
TYPE_LONG =
type_from_name('glong')
TYPE_ULONG =
type_from_name('gulong')
TYPE_INT64 =
type_from_name('gint64')
TYPE_UINT64 =
type_from_name('guint64')
TYPE_ENUM =
type_from_name('GEnum')
TYPE_FLAGS =
type_from_name('GFlags')
TYPE_FLOAT =
type_from_name('gfloat')
TYPE_DOUBLE =
type_from_name('gdouble')
TYPE_STRING =
type_from_name('gchararray')
TYPE_POINTER =
type_from_name('gpointer')
TYPE_BOXED =
type_from_name('GBoxed')
TYPE_PARAM =
type_from_name('GParam')
TYPE_OBJECT =
type_from_name('GObject')
TYPE_GTYPE =
type_from_name('GType')
TYPE_VARIANT =
type_from_name('GVariant')

Class Method Summary collapse

Class Method Details

.object_class_from_instance(instance) ⇒ Object



31
32
33
# File 'lib/ffi-gobject.rb', line 31

def self.object_class_from_instance(instance)
  object_class_from_instance_pointer instance.to_ptr
end

.object_class_from_instance_pointer(inst_ptr) ⇒ Object



35
36
37
38
39
# File 'lib/ffi-gobject.rb', line 35

def self.object_class_from_instance_pointer(inst_ptr)
  return nil if inst_ptr.null?
  klsptr = inst_ptr.get_pointer 0
  ObjectClass.wrap klsptr
end

.param_spec_int(name, nick, blurb, minimum, maximum, default_value, flags) ⇒ Object

Smells of :reek:LongParameterList: due to the C interface. rubocop:disable Metrics/ParameterLists



79
80
81
82
83
# File 'lib/ffi-gobject.rb', line 79

def self.param_spec_int(name, nick, blurb, minimum, maximum, default_value, flags)
  ptr = Lib.g_param_spec_int(name, nick, blurb, minimum, maximum,
                             default_value, flags)
  ParamSpecInt.wrap(ptr)
end

.signal_connect(object, detailed_signal, data = nil, after = false, &block) ⇒ Object

Raises:

  • (ArgumentError)


61
62
63
64
65
66
67
68
69
70
71
# File 'lib/ffi-gobject.rb', line 61

def self.signal_connect(object, detailed_signal, data = nil, after = false, &block)
  raise ArgumentError, 'Block needed' unless block_given?
  signal_name, = detailed_signal.split('::')
  sig_info = object.class.find_signal signal_name

  closure = sig_info.wrap_in_closure do |*args|
    block.call(*args << data)
  end

  signal_connect_closure object, detailed_signal, closure, after
end

.signal_connect_after(object, detailed_signal, data = nil, &block) ⇒ Object



73
74
75
# File 'lib/ffi-gobject.rb', line 73

def self.signal_connect_after(object, detailed_signal, data = nil, &block)
  signal_connect object, detailed_signal, data, true, &block
end

.signal_emit(object, detailed_signal, *args) ⇒ Object



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/ffi-gobject.rb', line 45

def self.signal_emit(object, detailed_signal, *args)
  signal, detail = detailed_signal.split('::')
  signal_id = signal_lookup_from_instance signal, object
  detail_quark = GLib.quark_from_string(detail)

  sig_info = object.class.find_signal signal
  argument_gvalues = sig_info.arguments_to_gvalues object, args
  return_gvalue = sig_info.gvalue_for_return_value

  result = signal_emitv argument_gvalues, signal_id, detail_quark, return_gvalue
  # NOTE: Depending on the version of GObjectIntrospection, the result will
  # be stored in result or return_gvalue. This was changed between versions
  # 1.44 and 1.46.
  result || return_gvalue.get_value
end

.signal_lookup_from_instance(signal, object) ⇒ Object



41
42
43
# File 'lib/ffi-gobject.rb', line 41

def self.signal_lookup_from_instance(signal, object)
  signal_lookup signal, type_from_instance(object)
end

.type_from_instance(instance) ⇒ Object



23
24
25
# File 'lib/ffi-gobject.rb', line 23

def self.type_from_instance(instance)
  type_from_instance_pointer instance.to_ptr
end

.type_from_instance_pointer(inst_ptr) ⇒ Object



17
18
19
20
21
# File 'lib/ffi-gobject.rb', line 17

def self.type_from_instance_pointer(inst_ptr)
  return nil if inst_ptr.null?
  klsptr = inst_ptr.get_pointer 0
  GirFFI::InOutPointer.new(:GType, klsptr).to_value
end

.type_initObject



5
6
7
# File 'lib/gir_ffi-base/gobject.rb', line 5

def self.type_init
  Lib.g_type_init
end

.type_name_from_instance(instance) ⇒ Object



27
28
29
# File 'lib/ffi-gobject.rb', line 27

def self.type_name_from_instance(instance)
  type_name type_from_instance instance
end