Martin Fischer
Martin Fischer

Reputation: 697

GTK Glade can't connect signal handlers

Im on GTK3. I have setup a GUI with glade and following handlers for the toplevel window:

here

And following 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;
}

At compiling I get warnings:

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(){
             ^

And at running the events defined by me arent called.

What did I wrong?

Upvotes: 2

Views: 2395

Answers (2)

Ho1
Ho1

Reputation: 1289

You can add callback symbols in this way:

gtk_builder_add_callback_symbol 
        (gtkBuilder,
         "on_wnd_delete_event",
          G_CALLBACK(on_wnd_delete_event));

You can also export symbols to become usable, but then you have to change compile flags as described here: https://stackoverflow.com/a/27931171/2316442

Upvotes: 0

Martin Fischer
Martin Fischer

Reputation: 697

For gtk_builder_connect_signals the callback functions can't be static cause the builder.c file needs access to them. ̣see here

It is also neccessary to gtk_builder_connect_signals(gtkBuilder, NULL); instead of gtk_builder_connect_signals(gtkBuilder, window); .

Upvotes: 2

Related Questions