Class: GObject::Object
- Inherits:
-
Object
show all
- Defined in:
- lib/ffi-gobject/object.rb
Overview
Overrides for GObject, GObject’s generic base class.
Class Method Summary
collapse
Instance Method Summary
collapse
-
#get_property_extended(property_name) ⇒ Object
-
#get_property_with_override(property_name) ⇒ Object
(also: #get_property)
-
#initialize_with_automatic_gtype(properties = {}) ⇒ Object
(also: #initialize)
Before GLib 2.54.0, use g_object_newv, which takes an array of GParameter.
-
#initialize_with_properties(properties = {}) ⇒ Object
Starting with GLib 2.54.0, use g_object_new_with_properties, which takes an array of names and an array of values.
-
#method_missing(method, *args) ⇒ Object
TODO: Generate accessor methods from GIR at class definition time.
-
#ref ⇒ Object
-
#respond_to_missing? ⇒ Boolean
-
#set_property_extended(property_name, value) ⇒ Object
-
#set_property_with_override(property_name, value) ⇒ Object
(also: #set_property)
-
#signal_connect(event, data = nil, &block) ⇒ Object
-
#signal_connect_after(event, data = nil, &block) ⇒ Object
-
#store_pointer(ptr) ⇒ Object
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method, *args) ⇒ Object
TODO: Generate accessor methods from GIR at class definition time
94
95
96
97
98
99
100
101
102
103
|
# File 'lib/ffi-gobject/object.rb', line 94
def method_missing(method, *args)
getter_name = "get_#{method}"
return send(getter_name, *args) if respond_to?(getter_name)
if method.to_s =~ /(.*)=$/
setter_name = "set_#{Regexp.last_match[1]}"
return send(setter_name, *args) if respond_to?(setter_name)
end
super
end
|
Class Method Details
.make_finalizer(ptr) ⇒ Object
82
83
84
85
86
87
88
89
90
91
|
# 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) ⇒ Object
41
42
43
44
45
|
# 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) ⇒ Object
15
16
17
18
19
|
# 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
|
Instance Method Details
#get_property_extended(property_name) ⇒ Object
120
121
122
123
124
|
# File 'lib/ffi-gobject/object.rb', line 120
def get_property_extended(property_name)
value = get_property(property_name)
type_info = get_property_type property_name
property_value_post_conversion value, type_info
end
|
#get_property_with_override(property_name) ⇒ Object
Also known as:
get_property
126
127
128
129
130
|
# File 'lib/ffi-gobject/object.rb', line 126
def get_property_with_override(property_name)
gvalue = gvalue_for_property property_name
get_property_without_override property_name, gvalue
gvalue.get_value
end
|
#initialize_with_automatic_gtype(properties = {}) ⇒ Object
Also known as:
initialize
Before GLib 2.54.0, use g_object_newv, which takes an array of GParameter.
50
51
52
53
54
55
56
57
58
59
60
|
# 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
|
#initialize_with_properties(properties = {}) ⇒ Object
Starting with GLib 2.54.0, use g_object_new_with_properties, which takes an array of names and an array of values.
23
24
25
26
27
28
29
30
31
32
33
34
35
|
# 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
|
72
73
74
75
|
# File 'lib/ffi-gobject/object.rb', line 72
def ref
Lib.g_object_ref self
self
end
|
#respond_to_missing? ⇒ Boolean
105
106
107
|
# File 'lib/ffi-gobject/object.rb', line 105
def respond_to_missing?(*)
false
end
|
#set_property_extended(property_name, value) ⇒ Object
132
133
134
135
136
|
# File 'lib/ffi-gobject/object.rb', line 132
def set_property_extended(property_name, value)
type_info = get_property_type property_name
adjusted_value = property_value_pre_conversion(value, type_info)
set_property property_name, adjusted_value
end
|
#set_property_with_override(property_name, value) ⇒ Object
Also known as:
set_property
138
139
140
141
142
|
# File 'lib/ffi-gobject/object.rb', line 138
def set_property_with_override(property_name, value)
gvalue = gvalue_for_property(property_name)
gvalue.set_value value
set_property_without_override property_name, gvalue
end
|
#signal_connect(event, data = nil, &block) ⇒ Object
109
110
111
|
# File 'lib/ffi-gobject/object.rb', line 109
def signal_connect(event, data = nil, &block)
GObject.signal_connect(self, event, data, &block)
end
|
#signal_connect_after(event, data = nil, &block) ⇒ Object
113
114
115
|
# File 'lib/ffi-gobject/object.rb', line 113
def signal_connect_after(event, data = nil, &block)
GObject.signal_connect_after(self, event, data, &block)
end
|
#store_pointer(ptr) ⇒ Object
77
78
79
80
|
# File 'lib/ffi-gobject/object.rb', line 77
def store_pointer(ptr)
super
ObjectSpace.define_finalizer self, self.class.make_finalizer(ptr)
end
|