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 82 def self.make_finalizer(ptr) proc do 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 end
new(*args, &block)
click to toggle source
# File lib/ffi-gobject/object.rb, line 41 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 15 def self.new_with_properties(*args, &block) obj = allocate obj.__send__ :initialize_with_properties, *args, &block obj end
Public Instance Methods
get_property(property_name)
Also aliased as: get_property_without_override
Alias for: get_property_with_override
get_property_extended(property_name)
click to toggle source
@deprecated
# File lib/ffi-gobject/object.rb, line 105 def get_property_extended(property_name) get_property(property_name) end
get_property_with_override(property_name)
click to toggle source
# File lib/ffi-gobject/object.rb, line 109 def get_property_with_override(property_name) gvalue = gvalue_for_property property_name get_property_without_override property_name, gvalue value = gvalue.get_value type_info = get_property_type property_name value = property_value_post_conversion(value, type_info) if type_info value end
Also aliased as: get_property
initialize_with_automatic_gtype(properties = {})
click to toggle source
Before GLib
2.54.0, use g_object_newv, which takes an array of GParameter.
# File lib/ffi-gobject/object.rb, line 50 def initialize_with_automatic_gtype(properties = {}) gparameters = properties.map do |name, value| name = name.to_s property_param_spec(name) GObject::Parameter.new.tap do |gparam| gparam.name = name gparam.value = value end end initialize_without_automatic_gtype(self.class.gtype, gparameters) end
Also aliased as: 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 23 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
ref()
click to toggle source
# File lib/ffi-gobject/object.rb, line 72 def ref Lib.g_object_ref self self end
set_property(property_name, value)
Also aliased as: set_property_without_override
Alias for: set_property_with_override
set_property_extended(property_name, value)
click to toggle source
@deprecated
# File lib/ffi-gobject/object.rb, line 121 def set_property_extended(property_name, value) set_property property_name, value end
set_property_with_override(property_name, value)
click to toggle source
# File lib/ffi-gobject/object.rb, line 125 def set_property_with_override(property_name, value) type_info = get_property_type property_name value = property_value_pre_conversion(value, type_info) if type_info gvalue = gvalue_for_property(property_name) gvalue.set_value value set_property_without_override property_name, gvalue end
Also aliased as: set_property
signal_connect(event, data = nil, &block)
click to toggle source
# File lib/ffi-gobject/object.rb, line 93 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 97 def signal_connect_after(event, data = nil, &block) GObject.signal_connect_after(self, event, data, &block) end
store_pointer(ptr)
click to toggle source
Calls superclass method
# File lib/ffi-gobject/object.rb, line 77 def store_pointer(ptr) super ObjectSpace.define_finalizer self, self.class.make_finalizer(ptr) end
Private Instance Methods
get_property_type(property_name)
click to toggle source
# File lib/ffi-gobject/object.rb, line 158 def get_property_type(property_name) self.class.find_property(property_name)&.property_type end
gvalue_for_property(property_name)
click to toggle source
# File lib/ffi-gobject/object.rb, line 162 def gvalue_for_property(property_name) gtype = property_gtype property_name GObject::Value.for_gtype gtype end
names_and_gvalues_for_properties(properties)
click to toggle source
# File lib/ffi-gobject/object.rb, line 146 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 167 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 171 def property_param_spec(property_name) object_class.find_property property_name or raise GirFFI::PropertyNotFoundError.new(property_name, self.class) end
property_value_post_conversion(val, type_info)
click to toggle source
TODO: Move to ITypeInfo and unify with ArgHelper.cast_from_pointer
# File lib/ffi-gobject/object.rb, line 177 def property_value_post_conversion(val, type_info) case type_info.flattened_tag when :ghash GLib::HashTable.from type_info.element_type, val when :glist GLib::List.from type_info.element_type, val when :callback GirFFI::Builder.build_class(type_info.interface).wrap val else val end end
property_value_pre_conversion(val, type_info)
click to toggle source
TODO: Move to ITypeInfo and unify with ArgHelper.cast_from_pointer
# File lib/ffi-gobject/object.rb, line 191 def property_value_pre_conversion(val, type_info) case type_info.flattened_tag when :ghash GLib::HashTable.from type_info.element_type, val when :glist GLib::List.from type_info.element_type, val when :strv GLib::Strv.from val when :byte_array GLib::ByteArray.from val when :callback GirFFI::Builder.build_class(type_info.interface).from val else val end end