mirror of
https://gitlab.gnome.org/GNOME/glade.git
synced 2025-09-24 00:04:33 -04:00
Applied patch from Pavel Kostyuchenko to prevent hangs in anjuta (bug
* gladeui/glade-widget.c: Applied patch from Pavel Kostyuchenko to prevent hangs in anjuta (bug 531585). * gladeui/glade-property.c, gladeui/glade-property-class.c: Applied patch from Pavel Kostyuchenko to unify duplicate implementation property comparisons (bug 532013) svn path=/trunk/; revision=1818
This commit is contained in:
parent
ef648a1a69
commit
85c334e505
@ -1,3 +1,11 @@
|
||||
2008-05-11 Tristan Van Berkom <tvb@gnome.org>
|
||||
|
||||
* gladeui/glade-widget.c: Applied patch from Pavel Kostyuchenko to prevent
|
||||
hangs in anjuta (bug 531585).
|
||||
|
||||
* gladeui/glade-property.c, gladeui/glade-property-class.c: Applied patch from
|
||||
Pavel Kostyuchenko to unify duplicate implementation property comparisons (bug 532013)
|
||||
|
||||
2008-05-05 Tristan Van Berkom <tvb@gnome.org>
|
||||
|
||||
* gladeui/glade-editor-property.c: Avoid feedback loops when committing properties,
|
||||
|
@ -1592,8 +1592,8 @@ glade_property_class_void_value (GladePropertyClass *klass,
|
||||
*/
|
||||
gint
|
||||
glade_property_class_compare (GladePropertyClass *klass,
|
||||
GValue *value1,
|
||||
GValue *value2)
|
||||
const GValue *value1,
|
||||
const GValue *value2)
|
||||
{
|
||||
gint retval;
|
||||
|
||||
@ -1616,7 +1616,24 @@ glade_property_class_compare (GladePropertyClass *klass,
|
||||
g_free (val2);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (G_IS_PARAM_SPEC_STRING (klass->pspec))
|
||||
{
|
||||
const gchar *value_str1, *value_str2;
|
||||
|
||||
/* in string specs; NULL and '\0' are
|
||||
* treated as equivalent.
|
||||
*/
|
||||
value_str1 = g_value_get_string (value1);
|
||||
value_str2 = g_value_get_string (value2);
|
||||
|
||||
if (value_str1 == NULL && value_str2 && value_str2[0] == '\0')
|
||||
return 0;
|
||||
else if (value_str2 == NULL && value_str1 && value_str1[0] == '\0')
|
||||
return 0;
|
||||
}
|
||||
retval = g_param_values_cmp (klass->pspec, value1, value2);
|
||||
}
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
@ -215,8 +215,9 @@ gboolean glade_property_class_void_value (GladePropertyC
|
||||
GValue *value);
|
||||
|
||||
gint glade_property_class_compare (GladePropertyClass *klass,
|
||||
GValue *value1,
|
||||
GValue *value2);
|
||||
const GValue *value1,
|
||||
const GValue *value2);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __GLADE_PROPERTY_CLASS_H__ */
|
||||
|
@ -111,24 +111,8 @@ static gboolean
|
||||
glade_property_equals_value_impl (GladeProperty *property,
|
||||
const GValue *value)
|
||||
{
|
||||
if (G_IS_PARAM_SPEC_STRING (property->klass->pspec))
|
||||
{
|
||||
const gchar *prop_str, *value_str;
|
||||
|
||||
/* in string specs; NULL and '\0' are
|
||||
* treated as equivalent.
|
||||
*/
|
||||
prop_str = g_value_get_string (property->value);
|
||||
value_str = g_value_get_string (value);
|
||||
|
||||
if (prop_str == NULL && value_str && value_str[0] == '\0')
|
||||
return TRUE;
|
||||
else if (value_str == NULL && prop_str && prop_str[0] == '\0')
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return !g_param_values_cmp (property->klass->pspec,
|
||||
property->value, value);
|
||||
return !glade_property_class_compare (property->klass,
|
||||
property->value, value);
|
||||
}
|
||||
|
||||
|
||||
|
@ -1831,14 +1831,15 @@ glade_widget_debug (GladeWidget *widget)
|
||||
glade_widget_debug_real (widget, 0);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
glade_widget_show_idle (GladeWidget *widget)
|
||||
static void
|
||||
glade_widget_add_to_layout (GladeWidget *widget, GtkWidget *layout)
|
||||
{
|
||||
/* This could be dangerous */
|
||||
if (GLADE_IS_WIDGET (widget))
|
||||
glade_widget_show (widget);
|
||||
if (gtk_bin_get_child (GTK_BIN (layout)) != NULL)
|
||||
gtk_container_remove (GTK_CONTAINER (layout), gtk_bin_get_child (GTK_BIN (layout)));
|
||||
|
||||
return FALSE;
|
||||
gtk_container_add (GTK_CONTAINER (layout), GTK_WIDGET (widget->object));
|
||||
|
||||
gtk_widget_show_all (GTK_WIDGET (widget->object));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1861,22 +1862,14 @@ glade_widget_show (GladeWidget *widget)
|
||||
view = glade_design_view_get_from_project (glade_widget_get_project (widget));
|
||||
layout = GTK_WIDGET (glade_design_view_get_layout (view));
|
||||
|
||||
/* This case causes a black window */
|
||||
if (layout && !GTK_WIDGET_REALIZED (layout))
|
||||
{
|
||||
/* XXX Dangerous !!! give her a little kick */
|
||||
g_idle_add ((GSourceFunc)glade_widget_show_idle, widget);
|
||||
return;
|
||||
}
|
||||
else if (!layout)
|
||||
if (!layout)
|
||||
return;
|
||||
|
||||
if (gtk_bin_get_child (GTK_BIN (layout)) != NULL)
|
||||
gtk_container_remove (GTK_CONTAINER (layout), gtk_bin_get_child (GTK_BIN (layout)));
|
||||
|
||||
gtk_container_add (GTK_CONTAINER (layout), GTK_WIDGET (widget->object));
|
||||
|
||||
gtk_widget_show_all (GTK_WIDGET (widget->object));
|
||||
if (GTK_WIDGET_REALIZED (layout))
|
||||
glade_widget_add_to_layout (widget, layout);
|
||||
else
|
||||
g_signal_connect_data (layout, "map", (GCallback) glade_widget_add_to_layout,
|
||||
widget, NULL, G_CONNECT_AFTER | G_CONNECT_SWAPPED);
|
||||
|
||||
} else if (GTK_IS_WIDGET (widget->object))
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user