Sign up

Using Glade signals with gtkd

I'm both a D noob and a GTK noob so I might be doing something trivially wrong here.

In glade I set up a button that has a click signal callback called onbuttonclicked. I use builder to read in that file.

If I define the function in D like:

extern(C) void onbuttonclicked() {

writeln("you pushed the button!!!");

}

All works great. But if I try to use the Button as a param in that D method (which I assume is supported as the gtk verison of this takes a pointer - https://developer.gnome.org/gtk3/stable/GtkButton.html#gtk-button-clicked)

extern(C) void onbuttonclicked(Button b) {

writeln("you pushed the button!!!");

b.getLabel();

}

I get a :

Program exited with code -11 on the b.getLabel() line.

Any idea what I am doing wrong?

Thanks in advance!

  • Damian

Re: Using Glade signals with gtkd

On 14-08-2019 21:11, Damian S wrote:

I'm both a D noob and a GTK noob so I might be doing something trivially wrong here.

In glade I set up a button that has a click signal callback called onbuttonclicked. I use builder to read in that file.

If I define the function in D like:

extern(C) void onbuttonclicked() {

writeln("you pushed the button!!!");

}

All works great. But if I try to use the Button as a param in that D method (which I assume is supported as the gtk verison of this takes a pointer - https://developer.gnome.org/gtk3/stable/GtkButton.html#gtk-button-clicked)

extern(C) void onbuttonclicked(Button b) {

writeln("you pushed the button!!!");

b.getLabel();

}

I get a :

Program exited with code -11 on the b.getLabel() line.

Any idea what I am doing wrong?

Thanks in advance!

  • Damian

Since we are dealing with Glade and C callbacks the button parameter is
actually a GtkButton* that you would also get when using C.

You can either create a GtkD object from the pointer using:

Button button = new Button(b);

Or use the C functions directly like: gtk_button_get_label()

Re: Using Glade signals with gtkd

extern(C) void on_button_clicked(GtkButton* gtkButton) {
	writeln("you pushed the button!!!");

	Button b = new Button(gtkButton);

	writeln("label = " ~ b.getLabel());

}

... works great. Thanks!!!

  • Damian