mirror of
https://gitlab.gnome.org/GNOME/glade.git
synced 2025-10-08 00:04:35 -04:00
Installed unwanted garbage to pass distcheck.
* src/Makefile.am, widgets/Makefile.am: Installed unwanted garbage to pass distcheck. * src/glade-devhelp.c: Navigational buttons insensitive at startup. * src/glade-catalog.c: Unexposed a private function. * src/glade-xml-utils.c: made alloc_string glade_xml_alloc_string, alloc_propname: ditto. * src/glade-property.c, src/glade-signal.c: Adjustemtnts made for glade-xml api above * src/glade-widget.c: o Adjustemtnts made for glade-xml api above o Properties applied to new objects in two steps now, code around build_object cleaned up... now build_object used also in load code.
This commit is contained in:
parent
adc5b5594e
commit
fbb818c1ba
23
ChangeLog
23
ChangeLog
@ -1,3 +1,24 @@
|
||||
2006-05-22 Tristan Van Berkom <tvb@gnome.org>
|
||||
|
||||
* src/Makefile.am, widgets/Makefile.am: Installed unwanted garbage
|
||||
to pass distcheck.
|
||||
|
||||
* src/glade-devhelp.c: Navigational buttons insensitive at startup.
|
||||
|
||||
* src/glade-catalog.c: Unexposed a private function.
|
||||
|
||||
* src/glade-xml-utils.c: made alloc_string glade_xml_alloc_string,
|
||||
alloc_propname: ditto.
|
||||
|
||||
* src/glade-property.c, src/glade-signal.c:
|
||||
Adjustemtnts made for glade-xml api above
|
||||
|
||||
* src/glade-widget.c:
|
||||
o Adjustemtnts made for glade-xml api above
|
||||
o Properties applied to new objects in two steps now,
|
||||
code around build_object cleaned up... now build_object
|
||||
used also in load code.
|
||||
|
||||
2006-05-18 Tristan Van Berkom <tvb@gnome.org>
|
||||
|
||||
* src/glade.h, src/glade-catalog.c, src/glade-widget-class.[ch]:
|
||||
@ -5,7 +26,7 @@
|
||||
|
||||
* src/glade-editor.c, src/glade-editor-property.c: Now get the
|
||||
book name directly from the widget class.
|
||||
|
||||
|
||||
* doc/catalogintro.sgml: documented added "book" property.
|
||||
|
||||
* widgets/bonobo.xml.in: added gnome catalog dependancy
|
||||
|
@ -27,6 +27,7 @@ classes; it also provides an abstraction later to container apis.
|
||||
@type:
|
||||
@name:
|
||||
@catalog:
|
||||
@book:
|
||||
@icon:
|
||||
@generic_name:
|
||||
@palette_name:
|
||||
@ -145,6 +146,7 @@ classes; it also provides an abstraction later to container apis.
|
||||
@catname:
|
||||
@library:
|
||||
@domain:
|
||||
@book:
|
||||
@Returns:
|
||||
|
||||
|
||||
|
@ -38,9 +38,11 @@ libgladegtk_la_CFLAGS = \
|
||||
-I$(top_builddir) \
|
||||
$(GTK_CFLAGS)
|
||||
|
||||
libgladegtk_la_SOURCES = glade-gtk.c
|
||||
libgladegtk_la_LDFLAGS = -module -avoid-version
|
||||
libgladegtk_la_LIBADD = libgladeui-1.la $(GTK_LIBS)
|
||||
libgladegtk_la_SOURCES = glade-gtk.c
|
||||
libgladegtk_la_LDFLAGS = -module -avoid-version
|
||||
libgladegtk_la_LIBADD = libgladeui-1.la $(GTK_LIBS)
|
||||
libgladegtkincludedir = $(includedir)/libgladeui-1.0/libgladeui
|
||||
libgladegtkinclude_HEADERS = glade-gtk.h
|
||||
|
||||
|
||||
# The Devhelp plugin
|
||||
@ -55,9 +57,11 @@ libgladedevhelp_la_CFLAGS = \
|
||||
-I$(top_builddir) \
|
||||
$(DEVHELP_CFLAGS)
|
||||
|
||||
libgladedevhelp_la_SOURCES = glade-devhelp.c
|
||||
libgladedevhelp_la_LDFLAGS = -module -avoid-version
|
||||
libgladedevhelp_la_LIBADD = $(DEVHELP_LIBS)
|
||||
libgladedevhelp_la_SOURCES = glade-devhelp.c
|
||||
libgladedevhelp_la_LDFLAGS = -module -avoid-version
|
||||
libgladedevhelp_la_LIBADD = $(DEVHELP_LIBS)
|
||||
libgladedevhelpincludedir = $(includedir)/libgladeui-1.0/libgladeui
|
||||
libgladedevhelpinclude_HEADERS = glade-devhelp.h
|
||||
|
||||
endif
|
||||
|
||||
|
@ -83,7 +83,7 @@ static gboolean catalog_load_classes (GladeCatalog *catalog,
|
||||
static gboolean catalog_load_group (GladeCatalog *catalog,
|
||||
GladeXmlNode *group_node);
|
||||
|
||||
void widget_group_free (GladeWidgetGroup *group);
|
||||
static void widget_group_free (GladeWidgetGroup *group);
|
||||
|
||||
/* List of catalog names successfully loaded.
|
||||
*/
|
||||
@ -370,7 +370,7 @@ catalog_load_group (GladeCatalog *catalog, GladeXmlNode *group_node)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void
|
||||
static void
|
||||
widget_group_free (GladeWidgetGroup *group)
|
||||
{
|
||||
g_return_if_fail (group != NULL);
|
||||
|
@ -246,6 +246,9 @@ widget_create_nav_button (NavButtonType type)
|
||||
|
||||
gtk_widget_show_all (align);
|
||||
|
||||
if (type == NAV_FORWARD || type == NAV_BACK)
|
||||
gtk_widget_set_sensitive (button, FALSE);
|
||||
|
||||
gtk_container_add (GTK_CONTAINER (button), align);
|
||||
|
||||
return button;
|
||||
|
@ -125,9 +125,9 @@ create_widget_info(GladeInterface *interface, const xmlChar **attrs)
|
||||
|
||||
for (i = 0; attrs && attrs[i] != NULL; i += 2) {
|
||||
if (!xmlStrcmp(attrs[i], BAD_CAST("class")))
|
||||
info->classname = alloc_string (interface, CAST_BAD(attrs[i+1]));
|
||||
info->classname = glade_xml_alloc_string (interface, CAST_BAD(attrs[i+1]));
|
||||
else if (!xmlStrcmp(attrs[i], BAD_CAST("id")))
|
||||
info->name = alloc_string (interface, CAST_BAD(attrs[i+1]));
|
||||
info->name = glade_xml_alloc_string (interface, CAST_BAD(attrs[i+1]));
|
||||
else
|
||||
g_warning("unknown attribute `%s' for <widget>.", attrs[i]);
|
||||
}
|
||||
@ -233,9 +233,9 @@ handle_atk_action(GladeParseState *state, const xmlChar **attrs)
|
||||
|
||||
for (i = 0; attrs && attrs[i] != NULL; i += 2) {
|
||||
if (!xmlStrcmp(attrs[i], BAD_CAST("action_name")))
|
||||
info.action_name = alloc_string(state->interface, CAST_BAD(attrs[i+1]));
|
||||
info.action_name = glade_xml_alloc_string(state->interface, CAST_BAD(attrs[i+1]));
|
||||
else if (!xmlStrcmp(attrs[i], BAD_CAST("description")))
|
||||
info.description = alloc_string(state->interface, CAST_BAD(attrs[i+1]));
|
||||
info.description = glade_xml_alloc_string(state->interface, CAST_BAD(attrs[i+1]));
|
||||
else
|
||||
g_warning("unknown attribute `%s' for <action>.", attrs[i]);
|
||||
}
|
||||
@ -259,9 +259,9 @@ handle_atk_relation(GladeParseState *state, const xmlChar **attrs)
|
||||
|
||||
for (i = 0; attrs && attrs[i] != NULL; i += 2) {
|
||||
if (!xmlStrcmp(attrs[i], BAD_CAST("target")))
|
||||
info.target = alloc_string(state->interface, CAST_BAD(attrs[i+1]));
|
||||
info.target = glade_xml_alloc_string(state->interface, CAST_BAD(attrs[i+1]));
|
||||
else if (!xmlStrcmp(attrs[i], BAD_CAST("type")))
|
||||
info.type = alloc_string(state->interface, CAST_BAD(attrs[i+1]));
|
||||
info.type = glade_xml_alloc_string(state->interface, CAST_BAD(attrs[i+1]));
|
||||
else
|
||||
g_warning("unknown attribute `%s' for <signal>.", attrs[i]);
|
||||
}
|
||||
@ -286,15 +286,15 @@ handle_signal(GladeParseState *state, const xmlChar **attrs)
|
||||
info.after = FALSE;
|
||||
for (i = 0; attrs && attrs[i] != NULL; i += 2) {
|
||||
if (!xmlStrcmp(attrs[i], BAD_CAST("name")))
|
||||
info.name = alloc_string(state->interface, CAST_BAD(attrs[i+1]));
|
||||
info.name = glade_xml_alloc_string(state->interface, CAST_BAD(attrs[i+1]));
|
||||
else if (!xmlStrcmp(attrs[i], BAD_CAST("handler")))
|
||||
info.handler = alloc_string(state->interface, CAST_BAD(attrs[i+1]));
|
||||
info.handler = glade_xml_alloc_string(state->interface, CAST_BAD(attrs[i+1]));
|
||||
else if (!xmlStrcmp(attrs[i], BAD_CAST("after")))
|
||||
info.after = attrs[i+1][0] == 'y';
|
||||
else if (!xmlStrcmp(attrs[i], BAD_CAST("lookup")))
|
||||
info.lookup = attrs[i+1][0] == 'y';
|
||||
else if (!xmlStrcmp(attrs[i], BAD_CAST("object")))
|
||||
info.object = alloc_string(state->interface, CAST_BAD(attrs[i+1]));
|
||||
info.object = glade_xml_alloc_string(state->interface, CAST_BAD(attrs[i+1]));
|
||||
else if (!xmlStrcmp(attrs[i], BAD_CAST("last_modification_time")))
|
||||
/* Do nothing. */;
|
||||
else
|
||||
@ -378,7 +378,7 @@ handle_accel(GladeParseState *state, const xmlChar **attrs)
|
||||
} else
|
||||
pos++;
|
||||
} else if (!xmlStrcmp(attrs[i], BAD_CAST("signal")))
|
||||
info.signal = alloc_string(state->interface, CAST_BAD(attrs[i+1]));
|
||||
info.signal = glade_xml_alloc_string(state->interface, CAST_BAD(attrs[i+1]));
|
||||
else
|
||||
g_warning("unknown attribute `%s' for <accelerator>.", attrs[i]);
|
||||
}
|
||||
@ -416,7 +416,7 @@ handle_child(GladeParseState *state, const xmlChar **attrs)
|
||||
|
||||
for (i = 0; attrs && attrs[i] != NULL; i += 2) {
|
||||
if (!xmlStrcmp(attrs[i], BAD_CAST("internal-child")))
|
||||
info->internal_child = alloc_string(state->interface, CAST_BAD(attrs[i+1]));
|
||||
info->internal_child = glade_xml_alloc_string(state->interface, CAST_BAD(attrs[i+1]));
|
||||
else
|
||||
g_warning("unknown attribute `%s' for <child>.", attrs[i]);
|
||||
}
|
||||
@ -499,7 +499,7 @@ glade_parser_start_element(GladeParseState *state,
|
||||
iface->requires = g_renew(gchar *, iface->requires,
|
||||
iface->n_requires);
|
||||
iface->requires[iface->n_requires-1] =
|
||||
alloc_string(iface, CAST_BAD(attrs[i+1]));
|
||||
glade_xml_alloc_string(iface, CAST_BAD(attrs[i+1]));
|
||||
} else
|
||||
g_warning("unknown attribute `%s' for <requires>.",
|
||||
attrs[i]);
|
||||
@ -547,14 +547,14 @@ glade_parser_start_element(GladeParseState *state,
|
||||
state->translate_prop = FALSE;
|
||||
for (i = 0; attrs && attrs[i] != NULL; i += 2) {
|
||||
if (!xmlStrcmp(attrs[i], BAD_CAST("name")))
|
||||
state->prop_name = alloc_propname(state->interface,
|
||||
state->prop_name = glade_xml_alloc_propname(state->interface,
|
||||
CAST_BAD(attrs[i+1]));
|
||||
else if (!xmlStrcmp(attrs[i], BAD_CAST("translatable")))
|
||||
state->translate_prop = !xmlStrcmp(attrs[i+1], BAD_CAST("yes"));
|
||||
else if (!xmlStrcmp(attrs[i], BAD_CAST("context")))
|
||||
state->context_prop = !xmlStrcmp(attrs[i+1], BAD_CAST("yes"));
|
||||
else if (!xmlStrcmp(attrs[i], BAD_CAST("comments")))
|
||||
state->comment = alloc_propname(state->interface,
|
||||
state->comment = glade_xml_alloc_propname(state->interface,
|
||||
CAST_BAD(attrs[i+1]));
|
||||
else if (!xmlStrcmp(attrs[i], BAD_CAST("agent")))
|
||||
bad_agent = xmlStrcmp(attrs[i], BAD_CAST("libglade")) != 0;
|
||||
@ -608,14 +608,14 @@ glade_parser_start_element(GladeParseState *state,
|
||||
state->translate_prop = FALSE;
|
||||
for (i = 0; attrs && attrs[i] != NULL; i += 2) {
|
||||
if (!xmlStrcmp(attrs[i], BAD_CAST("name")))
|
||||
state->prop_name = alloc_propname(state->interface,
|
||||
state->prop_name = glade_xml_alloc_propname(state->interface,
|
||||
CAST_BAD(attrs[i+1]));
|
||||
else if (!xmlStrcmp(attrs[i], BAD_CAST("translatable")))
|
||||
state->translate_prop = !xmlStrcmp(attrs[i+1], BAD_CAST("yes"));
|
||||
else if (!xmlStrcmp(attrs[i], BAD_CAST("context")))
|
||||
state->context_prop = !xmlStrcmp(attrs[i+1], BAD_CAST("yes"));
|
||||
else if (!xmlStrcmp(attrs[i], BAD_CAST("comments")))
|
||||
state->comment = alloc_propname(state->interface,
|
||||
state->comment = glade_xml_alloc_propname(state->interface,
|
||||
CAST_BAD(attrs[i+1]));
|
||||
else
|
||||
g_warning("unknown attribute `%s' for <atkproperty>.",
|
||||
@ -764,14 +764,14 @@ glade_parser_start_element(GladeParseState *state,
|
||||
state->translate_prop = FALSE;
|
||||
for (i = 0; attrs && attrs[i] != NULL; i += 2) {
|
||||
if (!xmlStrcmp(attrs[i], BAD_CAST("name")))
|
||||
state->prop_name = alloc_propname(state->interface,
|
||||
state->prop_name = glade_xml_alloc_propname(state->interface,
|
||||
CAST_BAD(attrs[i+1]));
|
||||
else if (!xmlStrcmp(attrs[i], BAD_CAST("translatable")))
|
||||
state->translate_prop = !xmlStrcmp(attrs[i+1], BAD_CAST("yes"));
|
||||
else if (!xmlStrcmp(attrs[i], BAD_CAST("context")))
|
||||
state->context_prop = !xmlStrcmp(attrs[i+1], BAD_CAST("yes"));
|
||||
else if (!xmlStrcmp(attrs[i], BAD_CAST("comments")))
|
||||
state->comment = alloc_propname(state->interface,
|
||||
state->comment = glade_xml_alloc_propname(state->interface,
|
||||
CAST_BAD(attrs[i+1]));
|
||||
else if (!xmlStrcmp(attrs[i], BAD_CAST("agent")))
|
||||
bad_agent = xmlStrcmp(attrs[i], BAD_CAST("libglade")) != 0;
|
||||
@ -890,7 +890,7 @@ glade_parser_end_element(GladeParseState *state, const xmlChar *name)
|
||||
prop.has_context = state->context_prop;
|
||||
prop.translatable = state->translate_prop;
|
||||
prop.comment = state->comment;
|
||||
prop.value = alloc_string(state->interface, state->content->str);
|
||||
prop.value = glade_xml_alloc_string(state->interface, state->content->str);
|
||||
|
||||
g_array_append_val(state->props, prop);
|
||||
state->prop_name = NULL;
|
||||
@ -912,7 +912,7 @@ glade_parser_end_element(GladeParseState *state, const xmlChar *name)
|
||||
prop.has_context = state->context_prop;
|
||||
prop.translatable = state->translate_prop;
|
||||
prop.comment = state->comment;
|
||||
prop.value = alloc_string(state->interface, state->content->str);
|
||||
prop.value = glade_xml_alloc_string(state->interface, state->content->str);
|
||||
|
||||
g_array_append_val(state->props, prop);
|
||||
state->prop_name = NULL;
|
||||
@ -976,7 +976,7 @@ glade_parser_end_element(GladeParseState *state, const xmlChar *name)
|
||||
prop.has_context = state->context_prop;
|
||||
prop.translatable = state->translate_prop;
|
||||
prop.comment = state->comment;
|
||||
prop.value = alloc_string(state->interface, state->content->str);
|
||||
prop.value = glade_xml_alloc_string(state->interface, state->content->str);
|
||||
|
||||
g_array_append_val(state->props, prop);
|
||||
state->prop_name = NULL;
|
||||
|
@ -1600,5 +1600,6 @@ glade_property_class_void_value (GladePropertyClass *class,
|
||||
else if (G_IS_PARAM_SPEC_BOXED (class->pspec) &&
|
||||
g_value_get_boxed (value) == NULL)
|
||||
return TRUE;
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
@ -102,15 +102,30 @@ glade_property_reset_impl (GladeProperty *property)
|
||||
gboolean
|
||||
glade_property_default_impl (GladeProperty *property)
|
||||
{
|
||||
return !g_param_values_cmp (property->class->pspec,
|
||||
property->value,
|
||||
property->class->def);
|
||||
return GLADE_PROPERTY_GET_KLASS (property)->equals_value
|
||||
(property, property->class->def);
|
||||
}
|
||||
|
||||
gboolean
|
||||
glade_property_equals_value_impl (GladeProperty *property,
|
||||
const GValue *value)
|
||||
{
|
||||
if (G_IS_PARAM_SPEC_STRING (property->class->pspec))
|
||||
{
|
||||
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->class->pspec,
|
||||
property->value, value);
|
||||
}
|
||||
@ -392,13 +407,12 @@ glade_property_write_impl (GladeProperty *property,
|
||||
}
|
||||
|
||||
/* convert the value of this property to a string */
|
||||
/* XXX Is this right to return here ??? */
|
||||
if ((value = glade_property_class_make_string_from_gvalue
|
||||
(property->class, property->value)) == NULL)
|
||||
{
|
||||
g_free (name);
|
||||
return FALSE;
|
||||
}
|
||||
/* make sure we keep the empty string, also... upcomming
|
||||
* funcs that may not like NULL.
|
||||
*/
|
||||
value = g_strdup ("");
|
||||
|
||||
switch (property->class->atk_type)
|
||||
{
|
||||
@ -408,15 +422,15 @@ glade_property_write_impl (GladeProperty *property,
|
||||
name = tmp;
|
||||
/* Dont break here ... */
|
||||
case GPC_ATK_NONE:
|
||||
info.name = alloc_propname(interface, name);
|
||||
info.value = alloc_string(interface, value);
|
||||
info.name = glade_xml_alloc_propname(interface, name);
|
||||
info.value = glade_xml_alloc_string(interface, value);
|
||||
|
||||
if (property->class->translatable)
|
||||
{
|
||||
info.translatable = property->i18n_translatable;
|
||||
info.has_context = property->i18n_has_context;
|
||||
if (property->i18n_comment)
|
||||
info.comment = alloc_string
|
||||
info.comment = glade_xml_alloc_string
|
||||
(interface, property->i18n_comment);
|
||||
}
|
||||
g_array_append_val (props, info);
|
||||
@ -427,16 +441,16 @@ glade_property_write_impl (GladeProperty *property,
|
||||
for (i = 0; split[i] != NULL; i++)
|
||||
{
|
||||
GladeAtkRelationInfo rinfo = { 0, };
|
||||
rinfo.type = alloc_string(interface, name);
|
||||
rinfo.target = alloc_string(interface, split[i]);
|
||||
rinfo.type = glade_xml_alloc_string(interface, name);
|
||||
rinfo.target = glade_xml_alloc_string(interface, split[i]);
|
||||
g_array_append_val (props, rinfo);
|
||||
}
|
||||
g_strfreev (split);
|
||||
}
|
||||
break;
|
||||
case GPC_ATK_ACTION:
|
||||
ainfo.action_name = alloc_string(interface, name);
|
||||
ainfo.description = alloc_string(interface, value);
|
||||
ainfo.action_name = glade_xml_alloc_string(interface, name);
|
||||
ainfo.description = glade_xml_alloc_string(interface, value);
|
||||
g_array_append_val (props, ainfo);
|
||||
break;
|
||||
default:
|
||||
@ -901,6 +915,8 @@ glade_property_read_atk_action (GladeProperty *property,
|
||||
|
||||
if (!strcmp (id, class_id))
|
||||
{
|
||||
/* Need special case for NULL values here ??? */
|
||||
|
||||
gvalue = glade_property_class_make_gvalue_from_string
|
||||
(pclass, ainfo->description, project);
|
||||
|
||||
|
@ -127,11 +127,11 @@ gboolean
|
||||
glade_signal_write (GladeSignalInfo *info, GladeSignal *signal,
|
||||
GladeInterface *interface)
|
||||
{
|
||||
info->name = alloc_string(interface, signal->name);
|
||||
info->handler = alloc_string(interface, signal->handler);
|
||||
info->name = glade_xml_alloc_string(interface, signal->name);
|
||||
info->handler = glade_xml_alloc_string(interface, signal->handler);
|
||||
info->object =
|
||||
signal->userdata ?
|
||||
alloc_string(interface, signal->userdata) : NULL;
|
||||
glade_xml_alloc_string(interface, signal->userdata) : NULL;
|
||||
info->after = signal->after;
|
||||
info->lookup = signal->lookup;
|
||||
return TRUE;
|
||||
|
@ -1186,6 +1186,90 @@ glade_widget_class_get_child_support (GladeWidgetClass *class,
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* glade_widget_class_default_params:
|
||||
* @class: a #GladeWidgetClass
|
||||
* @construct: whether to return construct params or not construct params
|
||||
* @n_params: return location if any defaults are specified for this class.
|
||||
*
|
||||
* Returns: A list of params for use in g_object_newv ()
|
||||
*/
|
||||
GParameter *
|
||||
glade_widget_class_default_params (GladeWidgetClass *class,
|
||||
gboolean construct,
|
||||
guint *n_params)
|
||||
{
|
||||
GArray *params;
|
||||
GObjectClass *oclass;
|
||||
GParamSpec **pspec;
|
||||
GladePropertyClass *pclass;
|
||||
guint n_props, i;
|
||||
|
||||
g_return_val_if_fail (GLADE_IS_WIDGET_CLASS (class), NULL);
|
||||
g_return_val_if_fail (n_params != NULL, NULL);
|
||||
|
||||
/* As a slight optimization, we never unref the class
|
||||
*/
|
||||
oclass = g_type_class_ref (class->type);
|
||||
pspec = g_object_class_list_properties (oclass, &n_props);
|
||||
params = g_array_new (FALSE, FALSE, sizeof (GParameter));
|
||||
|
||||
for (i = 0; i < n_props; i++)
|
||||
{
|
||||
GParameter parameter = { 0, };
|
||||
|
||||
pclass = glade_widget_class_get_property_class
|
||||
(class, pspec[i]->name);
|
||||
|
||||
/* Ignore properties based on some criteria
|
||||
*/
|
||||
if (pclass == NULL || /* Unaccounted for in the builder */
|
||||
pclass->set_function || /* should not be set before
|
||||
GladeWidget wrapper exists */
|
||||
pclass->ignore) /* Catalog explicitly ignores the object */
|
||||
continue;
|
||||
|
||||
if (construct &&
|
||||
(pspec[i]->flags &
|
||||
(G_PARAM_CONSTRUCT|G_PARAM_CONSTRUCT_ONLY)) == 0)
|
||||
continue;
|
||||
else if (!construct &&
|
||||
(pspec[i]->flags &
|
||||
(G_PARAM_CONSTRUCT|G_PARAM_CONSTRUCT_ONLY)) != 0)
|
||||
continue;
|
||||
|
||||
|
||||
if (g_value_type_compatible (G_VALUE_TYPE (pclass->def),
|
||||
pspec[i]->value_type) == FALSE)
|
||||
{
|
||||
g_critical ("Type mismatch on %s property of %s",
|
||||
parameter.name, class->name);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (g_param_values_cmp (pspec[i],
|
||||
pclass->def,
|
||||
pclass->orig_def) == 0)
|
||||
continue;
|
||||
|
||||
#if 0
|
||||
if (glade_property_class_void_value (pclass, pclass->def))
|
||||
continue;
|
||||
|
||||
#endif
|
||||
|
||||
parameter.name = pspec[i]->name; /* These are not copied/freed */
|
||||
g_value_init (¶meter.value, pspec[i]->value_type);
|
||||
g_value_copy (pclass->def, ¶meter.value);
|
||||
|
||||
g_array_append_val (params, parameter);
|
||||
}
|
||||
g_free (pspec);
|
||||
|
||||
*n_params = params->len;
|
||||
return (GParameter *)g_array_free (params, FALSE);
|
||||
}
|
||||
|
||||
void
|
||||
glade_widget_class_container_add (GladeWidgetClass *class,
|
||||
GObject *container,
|
||||
|
@ -285,7 +285,10 @@ GladePropertyClass *glade_widget_class_get_property_class (GladeWidgetClass *cl
|
||||
LIBGLADEUI_API
|
||||
GladeSupportedChild *glade_widget_class_get_child_support (GladeWidgetClass *class,
|
||||
GType child_type);
|
||||
|
||||
LIBGLADEUI_API
|
||||
GParameter *glade_widget_class_default_params (GladeWidgetClass *class,
|
||||
gboolean construct,
|
||||
guint *n_params);
|
||||
LIBGLADEUI_API
|
||||
void glade_widget_class_container_add (GladeWidgetClass *class,
|
||||
GObject *container,
|
||||
|
@ -540,28 +540,41 @@ glade_widget_dup_properties (GList *template_props)
|
||||
return g_list_reverse (properties);
|
||||
}
|
||||
|
||||
/**
|
||||
* glade_widget_build_object:
|
||||
* @klass: a #GladeWidgetClass
|
||||
* @widget: a #GladeWidget
|
||||
*
|
||||
* This function creates a new GObject who's parameters are based
|
||||
* on the GType of the GladeWidgetClass and its default values, if a
|
||||
* GladeWidget is specified, it will be used to apply the values currently in use.
|
||||
*
|
||||
* Returns: A newly created GObject
|
||||
*/
|
||||
static GObject *
|
||||
glade_widget_build_object (GladeWidgetClass *klass, GladeWidget *widget)
|
||||
static void
|
||||
glade_widget_params_free (GParameter *params, guint n_params)
|
||||
{
|
||||
gint i;
|
||||
for (i = 0; i < n_params; i++)
|
||||
g_value_unset (&(params[i].value));
|
||||
g_free (params);
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
* This function creates new GObject parameters based on the GType of the
|
||||
* GladeWidgetClass and its default values.
|
||||
*
|
||||
* If a GladeWidget is specified, it will be used to apply the
|
||||
* values currently in use.
|
||||
*/
|
||||
static GParameter *
|
||||
glade_widget_template_params (GladeWidget *widget,
|
||||
gboolean construct,
|
||||
guint *n_params)
|
||||
{
|
||||
GladeWidgetClass *klass;
|
||||
GArray *params;
|
||||
GObjectClass *oclass;
|
||||
GParamSpec **pspec;
|
||||
GladeProperty *glade_property;
|
||||
GladePropertyClass *glade_property_class;
|
||||
GObject *object;
|
||||
GladePropertyClass *pclass;
|
||||
guint n_props, i;
|
||||
|
||||
g_return_val_if_fail (GLADE_IS_WIDGET (widget), NULL);
|
||||
g_return_val_if_fail (n_params != NULL, NULL);
|
||||
|
||||
klass = widget->widget_class;
|
||||
|
||||
/* As a slight optimization, we never unref the class
|
||||
*/
|
||||
oclass = g_type_class_ref (klass->type);
|
||||
@ -572,85 +585,149 @@ glade_widget_build_object (GladeWidgetClass *klass, GladeWidget *widget)
|
||||
{
|
||||
GParameter parameter = { 0, };
|
||||
|
||||
glade_property_class =
|
||||
glade_widget_class_get_property_class (klass,
|
||||
pspec[i]->name);
|
||||
if (glade_property_class == NULL ||
|
||||
glade_property_class->set_function ||
|
||||
glade_property_class->ignore)
|
||||
/* Ignore properties that are not accounted for
|
||||
* by the GladeWidgetClass
|
||||
*/
|
||||
glade_property = glade_widget_get_property (widget, pspec[i]->name);
|
||||
pclass = glade_property->class;
|
||||
|
||||
/* Ignore properties based on some criteria
|
||||
*/
|
||||
if (pclass == NULL || /* Unaccounted for in the builder */
|
||||
pclass->set_function || /* should not be set before
|
||||
GladeWidget wrapper exists */
|
||||
pclass->ignore) /* Catalog explicitly ignores the object */
|
||||
continue;
|
||||
|
||||
parameter.name = pspec[i]->name; /* No need to dup this */
|
||||
|
||||
if (construct &&
|
||||
(pspec[i]->flags &
|
||||
(G_PARAM_CONSTRUCT|G_PARAM_CONSTRUCT_ONLY)) == 0)
|
||||
continue;
|
||||
else if (!construct &&
|
||||
(pspec[i]->flags &
|
||||
(G_PARAM_CONSTRUCT|G_PARAM_CONSTRUCT_ONLY)) != 0)
|
||||
continue;
|
||||
|
||||
if (g_value_type_compatible (G_VALUE_TYPE (pclass->def),
|
||||
pspec[i]->value_type) == FALSE)
|
||||
{
|
||||
g_critical ("Type mismatch on %s property of %s",
|
||||
parameter.name, klass->name);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (g_param_values_cmp (pspec[i],
|
||||
glade_property->value,
|
||||
pclass->orig_def) == 0)
|
||||
continue;
|
||||
|
||||
|
||||
parameter.name = pspec[i]->name; /* These are not copied/freed */
|
||||
g_value_init (¶meter.value, pspec[i]->value_type);
|
||||
|
||||
/* If a widget is specified and has a value set for that
|
||||
* property, then that value will be used (otherwise, we
|
||||
* use the default value)
|
||||
*/
|
||||
if (widget &&
|
||||
(glade_property =
|
||||
glade_widget_get_property (widget, parameter.name)) != NULL)
|
||||
{
|
||||
if (g_value_type_compatible (G_VALUE_TYPE (glade_property->value),
|
||||
G_VALUE_TYPE (¶meter.value)))
|
||||
g_value_copy (glade_property->value, ¶meter.value);
|
||||
else
|
||||
{
|
||||
g_critical ("Type mismatch on %s property of %s",
|
||||
parameter.name, klass->name);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
/* If the class has a default, use it.
|
||||
*/
|
||||
else if (glade_property_class->def != NULL)
|
||||
{
|
||||
if (g_value_type_compatible (G_VALUE_TYPE (glade_property_class->def),
|
||||
G_VALUE_TYPE (¶meter.value)))
|
||||
{
|
||||
if (glade_property_class_void_value
|
||||
(glade_property_class,
|
||||
glade_property_class->def))
|
||||
continue;
|
||||
#if 0
|
||||
if (g_type_is_a (G_VALUE_TYPE (glade_property_class->def), G_TYPE_OBJECT))
|
||||
if (g_value_get_object (glade_property_class->def) == NULL)
|
||||
continue;
|
||||
#endif
|
||||
|
||||
g_value_copy (glade_property_class->def, ¶meter.value);
|
||||
}
|
||||
else
|
||||
{
|
||||
g_critical ("Type mismatch on %s property of %s",
|
||||
parameter.name, klass->name);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
else
|
||||
g_param_value_set_default (pspec[i], ¶meter.value);
|
||||
|
||||
g_value_copy (glade_property->value, ¶meter.value);
|
||||
|
||||
g_array_append_val (params, parameter);
|
||||
}
|
||||
g_free (pspec);
|
||||
|
||||
*n_params = params->len;
|
||||
return (GParameter *)g_array_free (params, FALSE);
|
||||
}
|
||||
|
||||
static GParameter *
|
||||
glade_widget_info_params (GladeWidgetClass *widget_class,
|
||||
GladeWidgetInfo *info,
|
||||
gboolean construct,
|
||||
guint *n_params)
|
||||
{
|
||||
GladePropertyClass *glade_property_class;
|
||||
GObjectClass *oclass;
|
||||
GParamSpec **pspec;
|
||||
GArray *params;
|
||||
guint i, n_props;
|
||||
|
||||
oclass = g_type_class_ref (widget_class->type);
|
||||
pspec = g_object_class_list_properties (oclass, &n_props);
|
||||
params = g_array_new (FALSE, FALSE, sizeof (GParameter));
|
||||
|
||||
/* prepare parameters that have glade_property_class->def */
|
||||
for (i = 0; i < n_props; i++)
|
||||
{
|
||||
GParameter parameter = { 0, };
|
||||
GValue *value;
|
||||
|
||||
glade_property_class =
|
||||
glade_widget_class_get_property_class (widget_class,
|
||||
pspec[i]->name);
|
||||
if (glade_property_class == NULL ||
|
||||
glade_property_class->set_function ||
|
||||
glade_property_class->ignore)
|
||||
continue;
|
||||
|
||||
if (construct &&
|
||||
(pspec[i]->flags &
|
||||
(G_PARAM_CONSTRUCT|G_PARAM_CONSTRUCT_ONLY)) == 0)
|
||||
continue;
|
||||
else if (!construct &&
|
||||
(pspec[i]->flags &
|
||||
(G_PARAM_CONSTRUCT|G_PARAM_CONSTRUCT_ONLY)) != 0)
|
||||
continue;
|
||||
|
||||
|
||||
/* Try filling parameter with value from widget info.
|
||||
*/
|
||||
if ((value = glade_property_read (NULL, glade_property_class,
|
||||
loading_project, info, FALSE)) != NULL)
|
||||
{
|
||||
parameter.name = pspec[i]->name;
|
||||
g_value_init (¶meter.value, pspec[i]->value_type);
|
||||
|
||||
g_value_copy (value, ¶meter.value);
|
||||
g_value_unset (value);
|
||||
g_free (value);
|
||||
|
||||
g_array_append_val (params, parameter);
|
||||
}
|
||||
}
|
||||
g_free(pspec);
|
||||
|
||||
g_type_class_unref (oclass);
|
||||
|
||||
*n_params = params->len;
|
||||
return (GParameter *)g_array_free (params, FALSE);
|
||||
}
|
||||
|
||||
|
||||
static GObject *
|
||||
glade_widget_build_object (GladeWidgetClass *klass, GladeWidget *widget, GladeWidgetInfo *info)
|
||||
{
|
||||
GParameter *params;
|
||||
GObject *object;
|
||||
guint n_params, i;
|
||||
|
||||
if (widget)
|
||||
params = glade_widget_template_params (widget, TRUE, &n_params);
|
||||
else if (info)
|
||||
params = glade_widget_info_params (klass, info, TRUE, &n_params);
|
||||
else
|
||||
params = glade_widget_class_default_params (klass, TRUE, &n_params);
|
||||
|
||||
/* Create the new object with the correct parameters.
|
||||
*/
|
||||
object = g_object_newv (klass->type, params->len,
|
||||
(GParameter *)params->data);
|
||||
object = g_object_newv (klass->type, n_params, params);
|
||||
|
||||
/* Cleanup parameters
|
||||
*/
|
||||
for (i = 0; i < params->len; i++)
|
||||
glade_widget_params_free (params, n_params);
|
||||
|
||||
if (widget)
|
||||
params = glade_widget_template_params (widget, FALSE, &n_params);
|
||||
else if (info)
|
||||
params = glade_widget_info_params (klass, info, FALSE, &n_params);
|
||||
else
|
||||
params = glade_widget_class_default_params (klass, FALSE, &n_params);
|
||||
|
||||
for (i = 0; i < n_params; i++)
|
||||
{
|
||||
GParameter parameter = g_array_index (params, GParameter, i);
|
||||
g_value_unset (¶meter.value);
|
||||
g_object_set_property (object, params[i].name, &(params[i].value));
|
||||
}
|
||||
g_array_free (params, TRUE);
|
||||
|
||||
glade_widget_params_free (params, n_params);
|
||||
|
||||
return object;
|
||||
}
|
||||
@ -711,7 +788,7 @@ glade_widget_internal_new (const gchar *name,
|
||||
GObject *glade_widget;
|
||||
GList *properties = NULL;
|
||||
|
||||
object = glade_widget_build_object(klass, template);
|
||||
object = glade_widget_build_object(klass, template, NULL);
|
||||
if (template)
|
||||
properties = glade_widget_dup_properties (template->properties);
|
||||
|
||||
@ -1048,7 +1125,7 @@ glade_widget_rebuild (GladeWidget *glade_widget)
|
||||
/* Hold a reference to the old widget while we transport properties
|
||||
* and children from it
|
||||
*/
|
||||
new_object = glade_widget_build_object(klass, glade_widget);
|
||||
new_object = glade_widget_build_object(klass, glade_widget, NULL);
|
||||
old_object = g_object_ref(glade_widget_get_object(glade_widget));
|
||||
|
||||
glade_widget_set_object(glade_widget, new_object);
|
||||
@ -2541,8 +2618,8 @@ glade_widget_write (GladeWidget *widget, GladeInterface *interface)
|
||||
|
||||
info = g_new0 (GladeWidgetInfo, 1);
|
||||
|
||||
info->classname = alloc_string (interface, widget->widget_class->name);
|
||||
info->name = alloc_string (interface, widget->name);
|
||||
info->classname = glade_xml_alloc_string (interface, widget->widget_class->name);
|
||||
info->name = glade_xml_alloc_string (interface, widget->name);
|
||||
|
||||
/* Write the properties */
|
||||
props = g_array_new (FALSE, FALSE, sizeof (GladePropInfo));
|
||||
@ -2649,8 +2726,8 @@ glade_widget_write_special_child_prop (GArray *props,
|
||||
|
||||
if (support && support->special_child_type && buff)
|
||||
{
|
||||
info.name = alloc_propname (interface, support->special_child_type);
|
||||
info.value = alloc_string (interface, buff);
|
||||
info.name = glade_xml_alloc_propname (interface, support->special_child_type);
|
||||
info.value = glade_xml_alloc_string (interface, buff);
|
||||
g_array_append_val (props, info);
|
||||
return TRUE;
|
||||
}
|
||||
@ -2690,7 +2767,7 @@ glade_widget_write_child (GArray *children,
|
||||
return FALSE;
|
||||
|
||||
if (child_widget->internal)
|
||||
info.internal_child = alloc_string(interface, child_widget->internal);
|
||||
info.internal_child = glade_xml_alloc_string(interface, child_widget->internal);
|
||||
|
||||
info.child = glade_widget_write (child_widget, interface);
|
||||
if (!info.child)
|
||||
@ -2786,18 +2863,6 @@ glade_widget_fill_from_widget_info (GladeWidgetInfo *info,
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
glade_widget_params_free (GArray *params)
|
||||
{
|
||||
guint i;
|
||||
for (i = 0; i < params->len; i++)
|
||||
{
|
||||
GParameter parameter = g_array_index (params, GParameter, i);
|
||||
g_value_unset (¶meter.value);
|
||||
}
|
||||
g_array_free (params, TRUE);
|
||||
}
|
||||
|
||||
static GList *
|
||||
glade_widget_properties_from_widget_info (GladeWidgetClass *class,
|
||||
GladeWidgetInfo *info)
|
||||
@ -2823,93 +2888,6 @@ glade_widget_properties_from_widget_info (GladeWidgetClass *class,
|
||||
return g_list_reverse (properties);
|
||||
}
|
||||
|
||||
static GArray *
|
||||
glade_widget_params_from_widget_info (GladeWidgetClass *widget_class,
|
||||
GladeWidgetInfo *info)
|
||||
{
|
||||
GladePropertyClass *glade_property_class;
|
||||
GObjectClass *oclass;
|
||||
GParamSpec **pspec;
|
||||
GArray *params;
|
||||
guint i, n_props;
|
||||
|
||||
oclass = g_type_class_ref (widget_class->type);
|
||||
pspec = g_object_class_list_properties (oclass, &n_props);
|
||||
params = g_array_new (FALSE, FALSE, sizeof (GParameter));
|
||||
|
||||
/* prepare parameters that have glade_property_class->def */
|
||||
for (i = 0; i < n_props; i++)
|
||||
{
|
||||
GParameter parameter = { 0, };
|
||||
GValue *value;
|
||||
|
||||
glade_property_class =
|
||||
glade_widget_class_get_property_class (widget_class,
|
||||
pspec[i]->name);
|
||||
if (glade_property_class == NULL ||
|
||||
glade_property_class->set_function ||
|
||||
glade_property_class->ignore)
|
||||
continue;
|
||||
|
||||
parameter.name = pspec[i]->name;
|
||||
g_value_init (¶meter.value, pspec[i]->value_type);
|
||||
|
||||
/* Try filling parameter with value from widget info.
|
||||
*/
|
||||
if ((value = glade_property_read (NULL, glade_property_class,
|
||||
loading_project, info, FALSE)) != NULL)
|
||||
{
|
||||
if (g_value_type_compatible (G_VALUE_TYPE (value),
|
||||
G_VALUE_TYPE (¶meter.value)))
|
||||
{
|
||||
g_value_copy (value, ¶meter.value);
|
||||
g_value_unset (value);
|
||||
g_free (value);
|
||||
}
|
||||
else
|
||||
{
|
||||
g_critical ("Type mismatch on %s property of %s",
|
||||
parameter.name, widget_class->name);
|
||||
g_value_unset (value);
|
||||
g_free (value);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
/* Now try filling the parameter with the default on the GladeWidgetClass.
|
||||
*/
|
||||
else if (g_value_type_compatible (G_VALUE_TYPE (glade_property_class->orig_def),
|
||||
G_VALUE_TYPE (¶meter.value)))
|
||||
{
|
||||
if (glade_property_class_void_value
|
||||
(glade_property_class,
|
||||
glade_property_class->orig_def))
|
||||
continue;
|
||||
#if 0
|
||||
/* If its a NULL object property; disregard it.
|
||||
*/
|
||||
if (g_type_is_a (G_VALUE_TYPE (glade_property_class->orig_def),
|
||||
G_TYPE_OBJECT))
|
||||
if (g_value_get_object (glade_property_class->orig_def) == NULL)
|
||||
continue;
|
||||
#endif
|
||||
g_value_copy (glade_property_class->orig_def, ¶meter.value);
|
||||
}
|
||||
else
|
||||
{
|
||||
g_critical ("Type mismatch on %s property of %s",
|
||||
parameter.name, widget_class->name);
|
||||
continue;
|
||||
}
|
||||
|
||||
g_array_append_val (params, parameter);
|
||||
}
|
||||
g_free(pspec);
|
||||
|
||||
g_type_class_unref (oclass);
|
||||
|
||||
return params;
|
||||
}
|
||||
|
||||
static GladeWidget *
|
||||
glade_widget_new_from_widget_info (GladeWidgetInfo *info,
|
||||
GladeProject *project,
|
||||
@ -2918,7 +2896,6 @@ glade_widget_new_from_widget_info (GladeWidgetInfo *info,
|
||||
GladeWidgetClass *klass;
|
||||
GladeWidget *widget;
|
||||
GObject *object;
|
||||
GArray *params;
|
||||
GList *properties;
|
||||
|
||||
g_return_val_if_fail (info != NULL, NULL);
|
||||
@ -2931,21 +2908,15 @@ glade_widget_new_from_widget_info (GladeWidgetInfo *info,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
params = glade_widget_params_from_widget_info (klass, info);
|
||||
object = glade_widget_build_object (klass, NULL, info);
|
||||
properties = glade_widget_properties_from_widget_info (klass, info);
|
||||
|
||||
object = g_object_newv (klass->type, params->len,
|
||||
(GParameter *)params->data);
|
||||
|
||||
glade_widget_params_free (params);
|
||||
|
||||
widget = g_object_new (GLADE_TYPE_WIDGET,
|
||||
"parent", parent,
|
||||
"properties", properties,
|
||||
"class", klass,
|
||||
"project", project,
|
||||
"name", info->name,
|
||||
"object", object, NULL);
|
||||
widget = g_object_new (GLADE_TYPE_WIDGET,
|
||||
"parent", parent,
|
||||
"properties", properties,
|
||||
"class", klass,
|
||||
"project", project,
|
||||
"name", info->name,
|
||||
"object", object, NULL);
|
||||
|
||||
/* Only call this once the GladeWidget is completely built */
|
||||
if (klass->post_create_function)
|
||||
|
@ -695,7 +695,7 @@ glade_xml_doc_get_root (GladeXmlDoc *doc)
|
||||
}
|
||||
|
||||
gchar *
|
||||
alloc_string(GladeInterface *interface, const gchar *string)
|
||||
glade_xml_alloc_string(GladeInterface *interface, const gchar *string)
|
||||
{
|
||||
gchar *s;
|
||||
|
||||
@ -709,7 +709,7 @@ alloc_string(GladeInterface *interface, const gchar *string)
|
||||
}
|
||||
|
||||
gchar *
|
||||
alloc_propname(GladeInterface *interface, const gchar *string)
|
||||
glade_xml_alloc_propname(GladeInterface *interface, const gchar *string)
|
||||
{
|
||||
static GString *norm_str;
|
||||
guint i;
|
||||
@ -724,7 +724,7 @@ alloc_propname(GladeInterface *interface, const gchar *string)
|
||||
if (norm_str->str[i] == '-')
|
||||
norm_str->str[i] = '_';
|
||||
|
||||
return alloc_string(interface, norm_str->str);
|
||||
return glade_xml_alloc_string(interface, norm_str->str);
|
||||
}
|
||||
|
||||
|
||||
@ -734,7 +734,6 @@ glade_xml_load_sym_from_node (GladeXmlNode *node_in,
|
||||
gchar *tagname,
|
||||
gpointer *sym_location)
|
||||
{
|
||||
xmlNodePtr node = (xmlNodePtr) node_in;
|
||||
gchar *buff;
|
||||
|
||||
if ((buff = glade_xml_get_value_string (node_in, tagname)) != NULL)
|
||||
|
@ -70,8 +70,8 @@ GladeXmlContext * glade_xml_context_new_from_path (const gchar *full_path,
|
||||
const gchar *root_name);
|
||||
GladeXmlDoc * glade_xml_context_get_doc (GladeXmlContext *context);
|
||||
|
||||
gchar * alloc_string (GladeInterface *interface, const gchar *string);
|
||||
gchar * alloc_propname (GladeInterface *interface, const gchar *string);
|
||||
gchar * glade_xml_alloc_string (GladeInterface *interface, const gchar *string);
|
||||
gchar * glade_xml_alloc_propname (GladeInterface *interface, const gchar *string);
|
||||
|
||||
void glade_xml_load_sym_from_node (GladeXmlNode *node_in,
|
||||
GModule *module,
|
||||
|
@ -4,12 +4,12 @@ CLEANFILES = gtk+.xml
|
||||
|
||||
catalogsdir = $(glade_catalogsdir)
|
||||
|
||||
catalogs_DATA = gtk+.xml
|
||||
catalogs_DATA = gtk+.xml gtk+.xml.in
|
||||
|
||||
if BUILD_GNOME
|
||||
GNOME_CATALOGS = bonobo.xml canvas.xml gnome.xml
|
||||
CLEANFILES += $(GNOME_CATALOGS)
|
||||
catalogs_DATA += $(GNOME_CATALOGS)
|
||||
catalogs_DATA += $(GNOME_CATALOGS) bonobo.xml.in canvas.xml.in gnome.xml.in
|
||||
endif
|
||||
|
||||
EXTRA_DIST = \
|
||||
|
Loading…
x
Reference in New Issue
Block a user