2015-12-27 5 views
1

Im on GTK3. У меня настроить графический интерфейс с поляной и следующими обработчиками для окна верхнего уровня:GTK Glade не может подключить обработчики сигналов

here

И следующий main.c:

#include <gtk/gtk.h> 

static gboolean on_wnd_delete_event(GtkWidget *widget, GdkEvent *event, gpointer data){ 
    g_print ("delete event occurred\n"); 
    return TRUE; 
} 

static void on_wnd_destroy(GtkWidget *widget, gpointer data){ 
    gtk_main_quit(); 
} 

int main(int argc, char *argv[]){ 
    GtkBuilder *gtkBuilder; 
    GtkWidget *window; 

    gtk_init(&argc, &argv); 
    gtkBuilder = gtk_builder_new(); 

    gtk_builder_add_from_file(gtkBuilder, "gui.glade", NULL); 

    window = GTK_WIDGET(gtk_builder_get_object(gtkBuilder, "wnd")); 

    gtk_builder_connect_signals(gtkBuilder, window); 

    g_object_unref(G_OBJECT(gtkBuilder)); 
    gtk_widget_show(window); 

    gtk_main(); 

    return 0; 
} 

При компиляции я получаю предупреждение:

main.c:3:13: warning: ‘on_wnd_delete_event’ defined but not used [-Wunused-function] 
static void on_wnd_delete_event(){ 
      ^
main.c:8:13: warning: ‘on_wnd_destroy’ defined but not used [-Wunused-function] 
static void on_wnd_destroy(){ 
      ^

И при запуске событий, определенных мной, называется arent.

Что я не так понял?

ответ

1

Для функций gtk_builder_connect_signals функции обратного вызова не могут быть статическими, поскольку файл builder.c нуждается в доступе к ним. ̣see here

Также необходимо, чтобы gtk_builder_connect_signals(gtkBuilder, NULL); вместо gtk_builder_connect_signals(gtkBuilder, window);.