[glade3] Fixed GtkTextView crashes.
- From: Tristan Van Berkom <tvb src gnome org>
- To: svn-commits-list gnome org
- Subject: [glade3] Fixed GtkTextView crashes.
- Date: Sat, 27 Jun 2009 22:00:27 +0000 (UTC)
commit 932c9c8aa9c7b9c6352ec0f4398cf7d5f389ea8e
Author: Tristan Van Berkom <vantr TheBully local>
Date: Sat Jun 27 17:59:58 2009 -0400
Fixed GtkTextView crashes.
* plugins/gtk+/gtk+.xml.in, glade/gtk+/glade-gtk.c: Fixed GtkTextView crashes when
editing the textview in line, now we update the associated GtkTextBuffer:text property
if available or the GtkTextView:text virtual property when in libglade mode.
ChangeLog | 6 +++
plugins/gtk+/glade-gtk.c | 87 +++++++++++++++++++++++++++++++++++++--------
plugins/gtk+/gtk+.xml.in | 1 +
3 files changed, 78 insertions(+), 16 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index 4e6fc4d..8824400 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2009-06-27 Tristan Van Berkom <tvb gnome org>
+
+ * plugins/gtk+/gtk+.xml.in, glade/gtk+/glade-gtk.c: Fixed GtkTextView crashes when
+ editing the textview in line, now we update the associated GtkTextBuffer:text property
+ if available or the GtkTextView:text virtual property when in libglade mode.
+
2009-06-25 Tristan Van Berkom <tvb gnome org>
* gladeui/glade-property.c: glade_property_sync_impl(), dont sync properties
diff --git a/plugins/gtk+/glade-gtk.c b/plugins/gtk+/glade-gtk.c
index 5f87a65..732dcde 100644
--- a/plugins/gtk+/glade-gtk.c
+++ b/plugins/gtk+/glade-gtk.c
@@ -6951,6 +6951,9 @@ glade_gtk_image_menu_item_set_label (GObject *object, const GValue *value)
image = gtk_image_new_from_stock (g_value_get_string (value), GTK_ICON_SIZE_MENU);
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (object), image);
+ if (use_underline)
+ gtk_label_set_use_underline (GTK_LABEL (label), TRUE);
+
/* Get the label string... */
if (text && gtk_stock_lookup (text, &item))
gtk_label_set_label (GTK_LABEL (label), item.label);
@@ -8456,22 +8459,67 @@ glade_gtk_label_create_editable (GladeWidgetAdaptor *adaptor,
return editable;
}
-/* ----------------------------- GtkTextView ------------------------------ */
+
+
+/* ----------------------------- GtkTextBuffer ------------------------------ */
static void
-glade_gtk_text_view_changed (GtkTextBuffer *buffer, GladeWidget *gtext)
+glade_gtk_text_buffer_changed (GtkTextBuffer *buffer, GladeWidget *gbuffy)
{
- const gchar *text_prop;
+ const gchar *text_prop = NULL;
GladeProperty *prop;
- gchar *text;
+ gchar *text = NULL;
g_object_get (buffer, "text", &text, NULL);
+
+ if ((prop = glade_widget_get_property (gbuffy, "text")))
+ {
+ glade_property_get (prop, &text_prop);
- glade_widget_property_get (gtext, "text", &text_prop);
-
- if (strcmp (text, text_prop))
- if ((prop = glade_widget_get_property (gtext, "text")))
+ g_print ("setting new text on buffer %s: %s\n", gbuffy->name, text);
+
+ if (text_prop == NULL || text == NULL || strcmp (text, text_prop))
glade_command_set_property (prop, text);
+ }
+ g_free (text);
+}
+
+void
+glade_gtk_text_buffer_post_create (GladeWidgetAdaptor *adaptor,
+ GObject *object,
+ GladeCreateReason reason)
+{
+ GladeWidget *gbuffy;
+
+ gbuffy = glade_widget_get_from_gobject (object);
+
+ g_signal_connect (object, "changed",
+ G_CALLBACK (glade_gtk_text_buffer_changed),
+ gbuffy);
+}
+
+/* ----------------------------- GtkTextView ------------------------------ */
+static void
+glade_gtk_text_view_changed (GtkTextBuffer *buffer, GladeWidget *gtext)
+{
+ const gchar *text_prop = NULL;
+ GladeProject *project;
+ GladeProperty *prop;
+ gchar *text = NULL;
+
+ g_object_get (buffer, "text", &text, NULL);
+
+ project = glade_widget_get_project (gtext);
+
+ if (glade_project_get_format (project) == GLADE_PROJECT_FORMAT_LIBGLADE)
+ {
+ if ((prop = glade_widget_get_property (gtext, "text")))
+ {
+ glade_property_get (prop, &text_prop);
+ if (text_prop == NULL || text == NULL || strcmp (text, text_prop))
+ glade_command_set_property (prop, text);
+ }
+ }
g_free (text);
}
@@ -8490,20 +8538,27 @@ glade_gtk_text_view_post_create (GladeWidgetAdaptor *adaptor,
GObject *object,
GladeCreateReason reason)
{
- GtkTextBuffer *buffy = gtk_text_buffer_new (NULL);
- GladeWidget *gtext;
+ GtkTextBuffer *buffy;
+ GladeWidget *gtext;
+ GladeProject *project;
gtext = glade_widget_get_from_gobject (object);
/* This makes gtk_text_view_set_buffer() stop complaing */
gtk_drag_dest_set (GTK_WIDGET (object), 0, NULL, 0, 0);
-
- gtk_text_view_set_buffer (GTK_TEXT_VIEW (object), buffy);
- g_signal_connect (buffy, "changed",
- G_CALLBACK (glade_gtk_text_view_changed),
- gtext);
+
+ project = glade_widget_get_project (gtext);
+
+ if (glade_project_get_format (project) == GLADE_PROJECT_FORMAT_LIBGLADE)
+ {
+ buffy = gtk_text_buffer_new (NULL);
+ 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));
+ g_object_unref (G_OBJECT (buffy));
+ }
/* Glade3 hangs when a TextView gets a double click. So we stop them */
g_signal_connect (object, "button-press-event",
diff --git a/plugins/gtk+/gtk+.xml.in b/plugins/gtk+/gtk+.xml.in
index 830bb75..d837035 100644
--- a/plugins/gtk+/gtk+.xml.in
+++ b/plugins/gtk+/gtk+.xml.in
@@ -3280,6 +3280,7 @@ embedded in another object</_tooltip>
<glade-widget-class name="GtkTextBuffer" generic-name="textbuffer" _title="Text Buffer"
libglade-unsupported="True" toplevel="True">
+ <post-create-function>glade_gtk_text_buffer_post_create</post-create-function>
<signals>
<signal id="paste-done" since="2.16"/>
</signals>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]