Взялся я учить наконец-то GTK, но вот в программировании на Си я опыта не имею (весь опыт ограничен чтением К&Р), и у меня проблема возникла. Есть код:
#include <gtk/gtk.h>
typedef struct {
GtkWidget * widget;
void * cb;
void * arg;
} action;
void cb_test(action * handler) {
g_print("Test!\n");
g_signal_connect(handler->widget, "clicked", G_CALLBACK( handler->cb ) , handler->arg );
}
int main (int argc, char **argv) {
gtk_init(&argc, &argv);
GtkWidget
*window = gtk_window_new(GTK_WINDOW_TOPLEVEL)
, *button = gtk_button_new_with_label("Test")
;
action button_click = {
.widget = button
, .cb = gtk_widget_destroy
, .arg = window
};
g_signal_connect(button, "clicked", G_CALLBACK(cb_test), &button_click);
gtk_container_add(GTK_CONTAINER(window), button);
gtk_widget_show(button);
gtk_widget_show(window);
gtk_main();
return 0;
}
При компиляции ничего не выдает, а при нажатии на кнопку:
Test!
(hello-world:4613): GLib-GObject-WARNING **: instance of invalid non-instantiatable type `<unknown>'
(hello-world:4613): GLib-GObject-CRITICAL **: g_signal_connect_data: assertion `G_TYPE_CHECK_INSTANCE (instance)' failed
Опытные глаза, где же ошибка?