Module: GObjectIntrospection

Defined in:
lib/gobject-introspection/version.rb,
lib/gobject-introspection.rb,
lib/gobject-introspection.rb,
lib/gobject-introspection/loader.rb,
lib/gobject-introspection/arg-info.rb,
lib/gobject-introspection/type-tag.rb,
lib/gobject-introspection/type-info.rb,
lib/gobject-introspection/boxed-info.rb,
lib/gobject-introspection/repository.rb,
lib/gobject-introspection/union-info.rb,
lib/gobject-introspection/object-info.rb,
lib/gobject-introspection/struct-info.rb,
lib/gobject-introspection/callable-info.rb,
lib/gobject-introspection/function-info.rb,
lib/gobject-introspection/interface-info.rb,
lib/gobject-introspection/collection-reader.rb,
lib/gobject-introspection/registered-type-info.rb,
ext/gobject-introspection/rb-gobject-introspection.c

Overview

Copyright © 2019 Ruby-GNOME Project Team

This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version.

This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA

Defined Under Namespace

Modules: CollectionReader, Version Classes: ArgInfo, BoxedInfo, CallableInfo, FunctionInfo, InterfaceInfo, Loader, ObjectInfo, RegisteredTypeInfo, Repository, StructInfo, TypeInfo, TypeTag, UnionInfo

Constant Summary collapse

LOG_DOMAIN =
"GObjectIntrospection"
BUILD_VERSION =
rb_ary_new3(3,
INT2FIX(GI_MAJOR_VERSION),
INT2FIX(GI_MINOR_VERSION),
INT2FIX(GI_MICRO_VERSION))

Class Method Summary collapse

Class Method Details

.hook_up_vfunc(rb_name, rb_vfunc_info, rb_gtype) ⇒ Object



210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
# File 'ext/gobject-introspection/rb-gobject-introspection.c', line 210

static VALUE
rb_gi_hook_up_vfunc(G_GNUC_UNUSED VALUE self,
                    VALUE rb_name,
                    VALUE rb_vfunc_info,
                    VALUE rb_gtype)
{
    GIVFuncInfo *vfunc_info = NULL;
    GType gtype = 0;
    gpointer implementor_vtable = NULL;
    GIFieldInfo *field_info = NULL;

    vfunc_info = RVAL2GI_BASE_INFO(rb_vfunc_info);
    gtype = NUM2LONG(rb_gtype);
    g_assert(G_TYPE_IS_CLASSED(gtype));

    find_vfunc_info(vfunc_info, gtype, &implementor_vtable, &field_info);

    if (field_info != NULL) {
        GITypeInfo *type_info = NULL;
        GIBaseInfo *interface_info = NULL;
        RBGIVFuncCallbackData *data = NULL;
        gint offset = 0;
        gpointer *method_ptr = NULL;

        type_info = g_field_info_get_type(field_info);

        interface_info = g_type_info_get_interface(type_info);
        g_assert(g_base_info_get_type(interface_info) == GI_INFO_TYPE_CALLBACK);

        data = ALLOC(RBGIVFuncCallbackData);
        data->name = rb_name;
        data->callable_info = g_base_info_ref(interface_info);
        data->closure = g_callable_info_prepare_closure(
                interface_info, &(data->cif), ffi_callback, data);

        if (data->closure) {
            offset = g_field_info_get_offset(field_info);
            method_ptr = G_STRUCT_MEMBER_P(implementor_vtable, offset);

            *method_ptr = data->closure;
        }

        g_base_info_unref (interface_info);
        g_base_info_unref (type_info);
        g_base_info_unref (field_info);
    }

    return Qnil;
}

.load(namespace, options = {}) ⇒ Object



40
41
42
43
44
45
46
# File 'lib/gobject-introspection.rb', line 40

def load(namespace, options={})
  base_module = Module.new
  loader = Loader.new(base_module)
  loader.version = options[:version]
  loader.load(namespace)
  base_module
end

.prepend_typelib_path(path) ⇒ Object



21
22
23
24
25
26
27
28
29
30
# File 'lib/gobject-introspection.rb', line 21

def prepend_typelib_path(path)
  path = Pathname(path) unless path.is_a?(Pathname)
  return unless path.exist?

  dir = path.to_s
  dir = dir.gsub("/", File::ALT_SEPARATOR) if File::ALT_SEPARATOR
  return if Repository.search_path.include?(dir)

  Repository.prepend_search_path(dir)
end