Hi, I have a very strange problem, sometimes, g_signal_connect_object stopsworking (g_signal_connect is not affected by this problem). I use Valabut I also checked the C code generated and it seems correct. I have an application which has a main window, I want to be able toduplicate this main window to have different views of my program. Foreach different view I create a GtkBuilder and from it, I create widgetsI need for the view (a GtkWindow). And I bind the signals from thosewidgets to local callbacks. Now, when I start the application, I create a default view. There thesignals works, and when I click on a widget, the action gets executed. If I create another view, which itself will create a GtkBuilder, then aGtkWindow and setup signals. Then I execute gtk_widget_show_all() onthe GtkWindow. But the problem is that the actions bound usingg_signal_connect_object doesn't work at all with this new window. Onthe other hand, the signals bound using g_signal_connect worksperfectly. I checked with gdb, the functions are being called and the callbacksare not. The Vala code looks like: public class MailBrowserView : GLib.Object { private Gtk.Builder builder; private Gtk.Window main_window; private bool closed = false; public MailBrowser app { get; construct; } // // Constructor and setup // public MailBrowserView(MailBrowser mailbrowser){ this.app = mailbrowser; } public void setup() throws GLib.Error { builder = new Gtk.Builder(); //Gtk.Action menu_file_new; //Gtk.Action menu_file_close; //Gtk.Action menu_file_quit; //Gtk.Action menu_help_about; try { builder.add_from_file(app.cfg.file_mail_browser_ui); } catch (GLib.Error err) { var msg = new Gtk.MessageDialog ( null, Gtk.DialogFlags.MODAL, Gtk.MessageType.ERROR, Gtk.ButtonsType.CANCEL, "Failed to load UI\n" + err.message); msg.run(); throw err; } main_window = (Gtk.Window) builder.get_object("main_window"); var menu_file_new = (Gtk.Action) builder.get_object("menu_file_new_view"); var menu_file_close = (Gtk.Action) builder.get_object("menu_file_close_view"); var menu_file_quit = (Gtk.Action) builder.get_object("menu_file_quit"); var menu_help_about = (Gtk.Action) builder.get_object("menu_help_about"); main_window.destroy += this.do_close_view; menu_file_new.activate += this.do_new_view; menu_file_close.activate += this.do_close_view; menu_file_quit.activate += Gtk.main_quit; menu_help_about.activate += this.do_about; stdout.printf("main_window created: %p (%p)\n", main_window, this); } // // Callbacks // private void do_new_view(){ stdout.printf("new view for window %p\n", main_window); MailBrowserView v = new MailBrowserView(app); v.start(); // In fact we show an error if there is } private void do_close_view(){ if(closed) return; closed = true; stdout.printf("close view for window %p\n", main_window); main_window.destroy(); app.on_closed_view(); } private void do_quit(){ app.quit(); } private void do_about(){ app.show_about_dialog(); } // // show and start // public void show_all(){ main_window.show_all(); } public void start() throws GLib.Error { app.on_new_view(); setup(); show_all(); } } The C code looks like: //// Routines to create views// // (callback called when action on menu File->New View)static void mail_browser_view_do_new_view (MailBrowserView* self) { g_return_if_fail (IS_MAIL_BROWSER_VIEW (self)); MailBrowserView* v = mail_browser_view_new (self->priv->_app); mail_browser_view_start(v, NULL); // See below if(v != NULL) g_object_unref (v);} void mail_browser_view_start (MailBrowserView* self, GError** error) { GError * inner_error = NULL; g_return_if_fail (IS_MAIL_BROWSER_VIEW (self)); ... mail_browser_view_setup (self, &inner_error); // See below if (inner_error != NULL) { g_propagate_error (error, inner_error); return; } gtk_widget_show_all (GTK_WIDGET (self->priv->main_window));} //// Setup view// void mail_browser_view_setup (MailBrowserView* self, GError** error) { ... // Vala doesn't generate that code but I simplified it so // anyone can read it if(self->priv->builder != NULL){ g_object_unref (self->priv->builder); self->priv->builder = NULL; } self->priv->builder = gtk_builder_new (); gtk_builder_add_from_file ( self->priv->builder, mail_browser_get_cfg (self->priv->_app)->file_mail_browser_ui, &inner_error); if (inner_error != NULL) { ... } ... // works g_signal_connect (menu_file_quit, "activate", ((GCallback) (_gtk_main_quit_gtk_action_activate)), NULL); // doesn't work g_signal_connect_object (menu_help_about, "activate", ((GCallback) (_mail_browser_view_do_about_gtk_action_activate)), self, 0); ...} //// Closures// static void _gtk_main_quit_gtk_action_activate (GtkAction* _sender, gpointer self) { gtk_main_quit ();} static void _mail_browser_view_do_about_gtk_action_activate (GtkAction* _sender, gpointer self) { mail_browser_view_do_about (self);} What could be the problem? Thanks. Mildred -- Mildred Ki'Lya╭───────── mildred593@online.fr ──────────│ Jabber, GoogleTalk: <mildred@xxxxxxxxx>│ Site: <http://ki.lya.online.fr> GPG ID: 9A7D 2E2B│ Fingerprint: 197C A7E6 645B 4299 6D37 684B 6F9D A8D6 9A7D 2E2B_______________________________________________gtk-list mailing listgtk-list@xxxxxxxxxxxxx://mail.gnome.org/mailman/listinfo/gtk-list