class GObject::Object

Overrides for GObject, GObject’s generic base class.

Public Class Methods

make_finalizer(ptr) click to toggle source
# File lib/ffi-gobject/object.rb, line 57
def self.make_finalizer(ptr)
  proc { finalize ptr }
end
new(*args, &block) click to toggle source
# File lib/ffi-gobject/object.rb, line 40
def self.new(*args, &block)
  obj = allocate
  obj.__send__ :initialize, *args, &block
  obj
end
new_with_properties(*args, &block) click to toggle source
# File lib/ffi-gobject/object.rb, line 14
def self.new_with_properties(*args, &block)
  obj = allocate
  obj.__send__ :initialize_with_properties, *args, &block
  obj
end

Protected Class Methods

finalize(ptr) click to toggle source
# File lib/ffi-gobject/object.rb, line 64
def finalize(ptr)
  rc = GObject::Object::Struct.new(ptr)[:ref_count]
  if rc == 0
    warn "not unreffing #{name}:#{ptr} (#{rc})"
  else
    GObject::Lib.g_object_unref ptr
  end
end

Public Instance Methods

initialize(properties = {})
Also aliased as: old_initialze, base_initialize
initialize_with_properties(properties = {}) click to toggle source

Starting with GLib 2.54.0, use g_object_new_with_properties, which takes an array of names and an array of values.

# File lib/ffi-gobject/object.rb, line 22
def initialize_with_properties(properties = {})
  names, gvalues = names_and_gvalues_for_properties(properties)

  n_properties = names.length
  names_arr = GirFFI::SizedArray.from(:utf8, -1, names)
  gvalues_arr = GirFFI::SizedArray.from(GObject::Value, -1, gvalues)

  ptr = GObject::Lib.g_object_new_with_properties(self.class.gtype,
                                                  n_properties,
                                                  names_arr,
                                                  gvalues_arr)
  store_pointer ptr
end
Also aliased as: initialize
old_initialze(properties = {})
Alias for: initialize
ref() click to toggle source
# File lib/ffi-gobject/object.rb, line 52
def ref
  Lib.g_object_ref self
  self
end
signal_connect(event, data = nil, &block) click to toggle source
# File lib/ffi-gobject/object.rb, line 74
def signal_connect(event, data = nil, &block)
  GObject.signal_connect(self, event, data, &block)
end
signal_connect_after(event, data = nil, &block) click to toggle source
# File lib/ffi-gobject/object.rb, line 78
def signal_connect_after(event, data = nil, &block)
  GObject.signal_connect_after(self, event, data, &block)
end

Private Instance Methods

base_initialize(properties = {})
Alias for: initialize
gvalue_for_property(property_name) click to toggle source
# File lib/ffi-gobject/object.rb, line 110
def gvalue_for_property(property_name)
  gtype = property_gtype property_name
  GObject::Value.for_gtype gtype
end
make_finalizer() click to toggle source
# File lib/ffi-gobject/object.rb, line 94
def make_finalizer
  ObjectSpace.define_finalizer self, self.class.make_finalizer(struct.to_ptr)
end
names_and_gvalues_for_properties(properties) click to toggle source
# File lib/ffi-gobject/object.rb, line 98
def names_and_gvalues_for_properties(properties)
  return [], [] unless properties.any?

  properties.map do |name, value|
    name = name.to_s
    gvalue = gvalue_for_property(name)
    gvalue.set_value value

    [name, gvalue]
  end.transpose
end
property_gtype(property_name) click to toggle source
# File lib/ffi-gobject/object.rb, line 115
def property_gtype(property_name)
  property_param_spec(property_name).value_type
end
property_param_spec(property_name) click to toggle source
# File lib/ffi-gobject/object.rb, line 119
def property_param_spec(property_name)
  class_struct.find_property property_name or
    raise GirFFI::PropertyNotFoundError.new(property_name, self.class)
end
store_pointer(ptr) click to toggle source
Calls superclass method
# File lib/ffi-gobject/object.rb, line 89
def store_pointer(ptr)
  super
  make_finalizer
end