Подробности

[В начало]

Проблема в реализации № D0078

Краткое описание

В случае несоответствия структуры класса заданному типу макрос G_TYPE_CHECK_CLASS_TYPE() не выдаёт предупреждающего сообщения

Подробное описание

В спецификации для макроса G_TYPE_CHECK_CLASS_TYPE() сказано: "Returns TRUE if g_class is a class structure of the type identified by g_type. Otherwise emits a warning and returns FALSE." В случае, когда тип структуры класса не совпадает со значением типа, переданного во втором параметре, предупреждающее сообщение не выдается.

Раздел стандарта

Linux Standard Base Desktop Specification 3.1, Chapter 12. Libraries, 12.5.1 glib-2.0/glib-object.h; http://www.gtk.org/api/2.6/gobject/gobject-Type-Information.html#G-TYPE-CHECK-CLASS-TYPE-CAPS

Пример

#include <stdio.h>
#include <glib-object.h>

gint warning_handler_call_count;
gchar *warning_handler_message;

void warning_handler (const gchar *log_domain, 
                      GLogLevelFlags log_level, 
                      const gchar *message, 
                      gpointer user_data)
{
    warning_handler_call_count++;
    warning_handler_message = g_strdup(message);
}

int main(int argc, char** argv)
{

    warning_handler_call_count = 0;
    warning_handler_message = NULL;

    g_type_init();

    gpointer g_class = g_type_class_ref(G_TYPE_OBJECT);

    g_log_set_default_handler (warning_handler, NULL);

    gboolean ret_value = 
        G_TYPE_CHECK_CLASS_TYPE(g_class, G_TYPE_INT);


    printf("ret_value=%d; message='%s'; call_count=%d\n",
        ret_value, warning_handler_message, 
        warning_handler_call_count);

    g_type_class_unref(g_class);
    if(warning_handler_message != NULL)
        g_free(warning_handler_message);


    return 0;
}

Компонент

gtk-gobject 2.6.2 or later

Принято

Gnome Bugzilla 526103

[В начало]