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 - [email protected]
http://lists.ximian.com/mailman/listinfo/glade-devel