Re: [Vala] broken gtk+ binding?



On Dec 9, 2007 9:23 PM, Phil Housley <undeconstructed gmail com> wrote:

On 09/12/2007, Nguyen Thai Ngoc Duy <pclouds gmail com> wrote:
Hi,

I tried this code:

class MyComp : Gtk.Window {
        construct {
                var b = new Gtk.Button.with_label("hellp");
                b.clicked += on_clicked;
                add(b);
        }

        void on_clicked() {
                GLib.stdout.printf("Help!\n");
        }

        static int main(string[] p) {
                Gtk.init(out p);
                MyComp w = new MyComp();
                w.show_all();
                Gtk.main();
                return 0;
        }
}

The generated code for signal "clicked" was

static void my_comp_on_clicked (MyComp* self) {
        g_return_if_fail (IS_MY_COMP (self));
        fprintf (stdout, "Help!\n");
}

It should have been *_clicked(GtkWidget*, MyComp*). Was it code
generation broken or did I write something wrong? Vala revision was
760.

Thanks
--
Duy

A signal handler function should be declared with a first argument of
the type of the object emitting the signal (GtkButton).  Then vala
will pass the object receiving it (MyComp) automatically as the
user_data argument.

void on_clicked(Gtk.Button btn) { ... }
Should work fine.

Indeed. I looked at gtk+-2.0.vapi to know the prototype and it was

public signal void clicked ();

I changed to on_clicked(Gtk.Button btn) and it worked.
But vala did not notice me I passed a function that did not match the
signal prototype? :(

Alternatively the equivalent lambda:

b.clicked += btn => { ... };

--
Phil Housley
_______________________________________________
Vala-list mailing list
Vala-list gnome org
http://mail.gnome.org/mailman/listinfo/vala-list




-- 
Duy



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]