This patch fixes bug 347850 definitely (grab_focus() thing) also has some improvement to GtkEntry and GtkTextView.
greets Juan Pablo PD: I didnt commit directly because i had changed glade_command_set_property prototype.
Index: ChangeLog =================================================================== RCS file: /cvs/gnome/glade3/ChangeLog,v retrieving revision 1.617 diff -u -u -p -r1.617 ChangeLog --- ChangeLog 26 Jul 2006 03:34:30 -0000 1.617 +++ ChangeLog 26 Jul 2006 22:09:53 -0000 @@ -1,3 +1,18 @@ +2006-07-26 Juan Pablo Ugarte <[EMAIL PROTECTED]> + + * src/glade-base-editor.c, src/glade-editor-property.c: + adapted to the new glade_command_set_property() prototype. + + * src/glade-command.[ch]: changed prototype of + glade_command_set_property(), added glade_command_set_property_value() + + * src/glade-fixed.c: do not call gtk_widget_grab_focus() in + glade_fixed_event() it makes widgets fight for the focus on some + situations. + + * src/glade-gtk.c: GtkEntry and GtkTextView support improved. + Now text property can be edited from the instance itself. + 2006-07-25 Vincent Geddes <[EMAIL PROTECTED]> * po/*.po: converted translations to utf8: da es ms nn pl pt ru sv ta tr Index: src/glade-base-editor.c =================================================================== RCS file: /cvs/gnome/glade3/src/glade-base-editor.c,v retrieving revision 1.2 diff -u -u -p -r1.2 glade-base-editor.c --- src/glade-base-editor.c 26 Jul 2006 03:09:02 -0000 1.2 +++ src/glade-base-editor.c 26 Jul 2006 22:09:59 -0000 @@ -575,23 +575,19 @@ glade_base_editor_reorder_children (Glad GladeWidget *gchild; GladeProperty *property; GtkTreeIter parent, iter; - GValue val = {0, }; gint position = 0; if (gtk_tree_model_iter_parent (model, &parent, child)) gtk_tree_model_iter_children (model, &iter, &parent); else gtk_tree_model_get_iter_first (model, &iter); - - g_value_init (&val, G_TYPE_INT); do { gtk_tree_model_get (model, &iter, GLADE_BASE_EDITOR_MENU_GWIDGET, &gchild, -1); - g_value_set_int (&val, position++); - + position++; if ((property = glade_widget_get_property (gchild, "position")) != NULL) - glade_command_set_property (property, &val); + glade_command_set_property (property, position); } while (gtk_tree_model_iter_next (model, &iter)); } Index: src/glade-command.c =================================================================== RCS file: /cvs/gnome/glade3/src/glade-command.c,v retrieving revision 1.81 diff -u -u -p -r1.81 glade-command.c --- src/glade-command.c 26 Jul 2006 03:09:02 -0000 1.81 +++ src/glade-command.c 26 Jul 2006 22:10:02 -0000 @@ -645,7 +645,7 @@ glade_command_set_properties (GladePrope } void -glade_command_set_property (GladeProperty *property, const GValue* pvalue) +glade_command_set_property_value (GladeProperty *property, const GValue* pvalue) { /* Dont generate undo/redo items for unchanging property values. @@ -654,6 +654,21 @@ glade_command_set_property (GladePropert return; glade_command_set_properties (property, property->value, pvalue, NULL); +} + +void +glade_command_set_property (GladeProperty *property, ...) +{ + GValue *value; + va_list args; + + g_return_if_fail (GLADE_IS_PROPERTY (property)); + + va_start (args, property); + value = glade_property_class_make_gvalue_from_vl (property->class, args); + va_end (args); + + glade_command_set_property_value (property, value); } /**************************************************/ Index: src/glade-command.h =================================================================== RCS file: /cvs/gnome/glade3/src/glade-command.h,v retrieving revision 1.20 diff -u -u -p -r1.20 glade-command.h --- src/glade-command.h 26 Jul 2006 03:09:02 -0000 1.20 +++ src/glade-command.h 26 Jul 2006 22:10:02 -0000 @@ -75,16 +75,19 @@ void glade_command_collapse /************************** properties *********************************/ LIBGLADEUI_API -void glade_command_set_property (GladeProperty *property, - const GValue *value); +void glade_command_set_property (GladeProperty *property, + ...); LIBGLADEUI_API -void glade_command_set_properties(GladeProperty *property, - const GValue *old_value, - const GValue *new_value, ...); - +void glade_command_set_property_value (GladeProperty *property, + const GValue *value); LIBGLADEUI_API -void glade_command_set_properties_list (GladeProject *project, - GList *props); // list of GCSetPropData +void glade_command_set_properties (GladeProperty *property, + const GValue *old_value, + const GValue *new_value, + ...); +LIBGLADEUI_API +void glade_command_set_properties_list (GladeProject *project, + GList *props); // list of GCSetPropData /************************** name ******************************/ LIBGLADEUI_API Index: src/glade-editor-property.c =================================================================== RCS file: /cvs/gnome/glade3/src/glade-editor-property.c,v retrieving revision 1.43 diff -u -u -p -r1.43 glade-editor-property.c --- src/glade-editor-property.c 19 Jul 2006 18:42:15 -0000 1.43 +++ src/glade-editor-property.c 26 Jul 2006 22:10:11 -0000 @@ -135,7 +135,7 @@ glade_editor_property_commit (GladeEdito if (eprop->use_command == FALSE) glade_property_set_value (eprop->property, value); else - glade_command_set_property (eprop->property, value); + glade_command_set_property_value (eprop->property, value); /* If the value was denied by a verify function, we'll have to * reload the real value. Index: src/glade-fixed.c =================================================================== RCS file: /cvs/gnome/glade3/src/glade-fixed.c,v retrieving revision 1.21 diff -u -u -p -r1.21 glade-fixed.c --- src/glade-fixed.c 26 Jul 2006 03:09:02 -0000 1.21 +++ src/glade-fixed.c 26 Jul 2006 22:10:12 -0000 @@ -768,10 +768,6 @@ glade_fixed_event (GtkWidget *widget, } - /* make sure to grab focus, since we may stop default handlers */ - if (GTK_WIDGET_CAN_FOCUS (widget) && !GTK_WIDGET_HAS_FOCUS (widget)) - gtk_widget_grab_focus (widget); - switch (event->type) { Index: src/glade-gtk.c =================================================================== RCS file: /cvs/gnome/glade3/src/glade-gtk.c,v retrieving revision 1.150 diff -u -u -p -r1.150 glade-gtk.c --- src/glade-gtk.c 26 Jul 2006 03:09:02 -0000 1.150 +++ src/glade-gtk.c 26 Jul 2006 22:10:21 -0000 @@ -2131,10 +2131,32 @@ glade_gtk_expander_add_child (GObject *o } /* -------------------------------- GtkEntry -------------------------------- */ +static void +glade_gtk_entry_changed (GtkEditable *editable, GladeWidget *gentry) +{ + const gchar *text, *text_prop; + GladeProperty *prop; + + text = gtk_entry_get_text (GTK_ENTRY (editable)); + + glade_widget_property_get (gentry, "text", &text_prop); + + if (strcmp (text, text_prop)) + if ((prop = glade_widget_get_property (gentry, "text"))) + glade_command_set_property (prop, text); +} + void GLADEGTK_API glade_gtk_entry_post_create (GObject *object, GladeCreateReason reason) { - gtk_entry_set_editable (GTK_ENTRY (object), FALSE); + GladeWidget *gentry; + + g_return_if_fail (GTK_IS_ENTRY (object)); + gentry = glade_widget_get_from_gobject (object); + g_return_if_fail (GLADE_IS_WIDGET (gentry)); + + g_signal_connect (object, "changed", + G_CALLBACK (glade_gtk_entry_changed), gentry); } /* ----------------------------- GtkFixed/GtkLayout ------------------------------ */ @@ -2420,18 +2442,11 @@ glade_gtk_font_button_refresh_font_name GladeWidget *gbutton) { GladeProperty *property; - GValue value = { 0, }; if ((property = glade_widget_get_property (gbutton, "font-name")) != NULL) - { - g_value_init (&value, G_TYPE_STRING); - g_value_set_string (&value, - gtk_font_button_get_font_name (button)); - - glade_command_set_property (property, &value); - g_value_unset (&value); - } + glade_command_set_property (property, + gtk_font_button_get_font_name (button)); } @@ -2442,19 +2457,9 @@ glade_gtk_color_button_refresh_color (Gt { GladeProperty *property; GdkColor color = { 0, }; - GValue value = { 0, }; - if ((property = - glade_widget_get_property (gbutton, "color")) != NULL) - { - g_value_init (&value, GDK_TYPE_COLOR); - - gtk_color_button_get_color (button, &color); - g_value_set_boxed (&value, &color); - - glade_command_set_property (property, &value); - g_value_unset (&value); - } + if ((property = glade_widget_get_property (gbutton, "color")) != NULL) + glade_command_set_property (property, &color); } /* ----------------------------- GtkButton ------------------------------ */ @@ -4183,21 +4188,60 @@ glade_gtk_label_set_label (GObject *obje } /* ----------------------------- GtkTextView ------------------------------ */ +static void +glade_gtk_text_view_changed (GtkTextBuffer *buffer, GladeWidget *gtext) +{ + const gchar *text_prop; + GladeProperty *prop; + gchar *text; + + g_object_get (buffer, "text", &text, NULL); + + glade_widget_property_get (gtext, "text", &text_prop); + + if (strcmp (text, text_prop)) + if ((prop = glade_widget_get_property (gtext, "text"))) + glade_command_set_property (prop, text); + + g_free (text); +} + +void GLADEGTK_API +glade_gtk_text_view_post_create (GObject *object, GladeCreateReason reason) +{ + GtkTextBuffer *buffy = gtk_text_buffer_new (NULL); + GladeWidget *gtext; + + g_return_if_fail (GTK_IS_TEXT_VIEW (object)); + gtext = glade_widget_get_from_gobject (object); + g_return_if_fail (GLADE_IS_WIDGET (gtext)); + + gtk_text_view_set_buffer (GTK_TEXT_VIEW (object), buffy); + g_signal_connect (buffy, "changed", + G_CALLBACK (glade_gtk_text_view_changed), + gtext); + + g_object_unref (G_OBJECT (buffy)); +} + void GLADEGTK_API glade_gtk_text_view_set_text (GObject *object, GValue *value) { - GtkTextBuffer *buffy; - const gchar *string; + GtkTextBuffer *buffy; + GladeWidget *gtext; + const gchar *text; + + g_return_if_fail (GTK_IS_TEXT_VIEW (object)); + gtext = glade_widget_get_from_gobject (object); + g_return_if_fail (GLADE_IS_WIDGET (gtext)); + + buffy = gtk_text_view_get_buffer (GTK_TEXT_VIEW (object)); + + if ((text = g_value_get_string (value)) == NULL) return; - if ((buffy = gtk_text_view_get_buffer (GTK_TEXT_VIEW (object))) == NULL) - { - buffy = gtk_text_buffer_new (NULL); - gtk_text_view_set_buffer (GTK_TEXT_VIEW (object), buffy); - g_object_unref (G_OBJECT (buffy)); - } - - string = g_value_get_string (value); - gtk_text_buffer_set_text (buffy, string, strlen (string)); + g_signal_handlers_block_by_func (buffy, glade_gtk_text_view_changed, gtext); + gtk_text_buffer_set_text (buffy, text, -1); + g_signal_handlers_unblock_by_func (buffy, glade_gtk_text_view_changed, gtext); } Index: widgets/gtk+.xml.in =================================================================== RCS file: /cvs/gnome/glade3/widgets/gtk+.xml.in,v retrieving revision 1.62 diff -u -u -p -r1.62 gtk+.xml.in --- widgets/gtk+.xml.in 25 Jul 2006 17:12:44 -0000 1.62 +++ widgets/gtk+.xml.in 26 Jul 2006 22:10:24 -0000 @@ -457,12 +457,11 @@ <spec>glade_standard_string_spec</spec> <visible-lines>2</visible-lines> </property> - <property id="editable" ignore="True"/> </properties> </glade-widget-class> <glade-widget-class name="GtkTextView" generic-name="textview" _title="Text View"> - <post-create-function>empty</post-create-function> + <post-create-function>glade_gtk_text_view_post_create</post-create-function> <properties> <!-- Text of the textview --> <property id="text" _name="Text" translatable="True"> @@ -571,6 +570,7 @@ </glade-widget-class> <glade-widget-class name="GtkSpinButton" generic-name="spinbutton" _title="Spin Button"> + <post-create-function>empty</post-create-function> <properties> <property id="text" disabled="True"/> <property id="value" disabled="True"/>
_______________________________________________ Glade-devel maillist - Glade-devel@lists.ximian.com http://lists.ximian.com/mailman/listinfo/glade-devel