OK... according to this http://www.gtkforums.com/about6610.html, and I'm recalling some back and forth on the list about this.... So my mind is having a hard time figuring out how to nkow what widget is calling this generic function, given the interface is automatically build with gtkbuilder. Was I just using a bad hack here, what are others doing? From: shashaness hotmail com To: gtk-osx-users lists sourceforge net Subject: Widget name no longer working? Date: Tue, 28 Sep 2010 12:58:43 -0400 In GTK 2.18 i386, This code worked, and GTK_WIDGET(widget)->name would point to the name assigned to the widget in glade-3 builder. I have not changed anything in the XML files nor this code, but now that I am using GTK 2.20 i386, this value points to an empty string "". I have tried to get the string from the name property and it still gives me the same results an empty string "". I don't see any warnings about it not being a property either. What am I missing? Breakpoint 1, on_generic_entry_changed (widget=0x1812b50, user_data=0x10a1be8) at callbacks.c:190 190 for (i=0; i< num_widgets; i++){ (gdb) next 193 g_object_get((GObject*)widget,"name",&wname,NULL); (gdb) 196 if( cwid == -1 && !g_ascii_strcasecmp(wname,focus_widget_str[i])) { (gdb) print wname $1 = (gchar *) 0x2096820 "" (gdb) print widget $2 = (GtkEditable *) 0x1812b50 What am I missing? /* Widgets we can focus on */ guint num_widgets = 123; gchar *focus_widget_str[] = { "account_entry" ,"name_entry" ,"BLANK_BLANK_BLANK_BLANK_" , ... ... ... }; void on_generic_entry_changed(GtkEditable *widget, gpointer user_data) { gchar *ctext = NULL; gchar *wname = NULL; guint i = 0; gint cwid = -1; .... for (i=0; i< num_widgets; i++){ g_object_get((GObject*)widget,"name",&wname,NULL); /* THIS USE TO BE: */ // if( cwid == -1 && !g_ascii_strcasecmp(GTK_WIDGET(widget)->name,focus_widget_str[i])) { if( cwid == -1 && !g_ascii_strcasecmp(wname,focus_widget_str[i])) { .... } else if (cwid >= 0){ .... } } return;} /* THIS FUNCTION WORKS USING THE WIDGET NAME AS object GtkWidget * isi_display_get_widget(IsiDisplay *self, const gchar* object) { /* Sanity Check */ g_return_val_if_fail(self != NULL, FALSE); g_return_val_if_fail(self->priv != NULL, FALSE); g_return_val_if_fail(self->priv->dispose_has_run != TRUE, FALSE); /* Get teh XML File and load XML Object */ /* UPDATE 11272009 1102 NO BUG - migration to Gtkbuilder from libglade */ //return glade_xml_get_widget (self->priv->xml, object); return GTK_WIDGET (gtk_builder_get_object (self->priv->xml, object)); } |