static VALUE
rg_get_signal(VALUE self, VALUE rb_n_or_name)
{
    GIInterfaceInfo *info;
    GISignalInfo *signal_info;

    info = SELF(self);
    if (RB_TYPE_P(rb_n_or_name, T_FIXNUM)) {
        gint n;
        n = NUM2INT(rb_n_or_name);
        signal_info = g_interface_info_get_signal(info, n);
    } else {
#ifdef HAVE_G_INTERFACE_INFO_FIND_SIGNAL
        const char *name;
        name = RVAL2CSTR(rb_n_or_name);
        signal_info = g_interface_info_find_signal(info, name);
#else
        rb_raise(rb_eArgError,
                 "g_interface_info_find_signal() is defined "
                 "since GObjectIntrospection 1.34");
#endif
    }

    return GI_BASE_INFO2RVAL_WITH_UNREF(signal_info);
}
/**
 * g_interface_info_find_signal:
 * @info: a #GIInterfaceInfo
 * @name: Name of signal
 *
 * TODO
 *
 * Returns: (transfer full): Info for the signal with name @name in @info, or
 * %NULL on failure.
 * Since: 1.34
 */
GISignalInfo *
g_interface_info_find_signal (GIInterfaceInfo *info,
                              const gchar  *name)
{
    gint n_signals;
    gint i;

    n_signals = g_interface_info_get_n_signals (info);
    for (i = 0; i < n_signals; i++)
    {
        GISignalInfo *siginfo = g_interface_info_get_signal (info, i);

        if (g_strcmp0 (g_base_info_get_name (siginfo), name) != 0)
        {
            g_base_info_unref ((GIBaseInfo*)siginfo);
            continue;
        }

        return siginfo;
    }
    return NULL;
}