Added template_id parameter to gtk_container_class_set_template_from_*() functions

This way you can call your template "this" or "that" or as you wish.
This commit is contained in:
Juan Pablo Ugarte
2012-11-15 16:22:59 -03:00
parent 2b422848a3
commit e6007f10ac
2 changed files with 29 additions and 14 deletions

View File

@@ -255,7 +255,8 @@ struct _GtkContainerClassPrivate
{
GSList *tmpl_classes;
const gchar *tmpl;
const gchar *tmpl, *tmpl_id;
glong tmpl_len;
GtkContainerTemplateType tmpl_type;
GtkBuilderConnectFunc connect_func;
GList *internal_children; /* InternalChildData list */
@@ -442,6 +443,7 @@ gtk_container_base_class_init (GtkContainerClass *class)
GtkContainerClassPrivate);
priv->tmpl = NULL;
priv->tmpl_id = NULL;
priv->tmpl_classes = NULL;
priv->connect_func = NULL;
priv->internal_children = NULL;
@@ -1400,12 +1402,15 @@ gtk_container_class_list_child_properties (GObjectClass *cclass,
static void
gtk_container_class_set_template (GtkContainerClass *container_class,
const gchar *tmpl,
const gchar *template_id,
GtkContainerTemplateType tmpl_type)
{
GtkContainerClassPrivate *priv = container_class->priv;
GObjectClass *oclass;
priv->tmpl = tmpl;
priv->tmpl_len = g_utf8_strlen (tmpl, -1);
priv->tmpl_id = template_id;
priv->tmpl_type = tmpl_type;
if (priv->tmpl_classes)
@@ -1430,26 +1435,31 @@ gtk_container_class_set_template (GtkContainerClass *container_class,
* gtk_container_class_set_template_from_string:
* @container_class: a #GtkContainerClass
* @template_string: the #GtkBuilder xml string
* @template_id: the template id
*
* For type implementations it is recommended to use #gtk_container_class_set_template_from_resource
* instead of this function.
*
* Since: 3.6
* Since: 3.8
*/
void
gtk_container_class_set_template_from_string (GtkContainerClass *container_class,
const gchar *template_string)
const gchar *template_string,
const gchar *template_id)
{
g_return_if_fail (GTK_IS_CONTAINER_CLASS (container_class));
g_return_if_fail (template_string && template_string[0]);
g_return_if_fail (template_id && template_id[0]);
gtk_container_class_set_template (container_class, template_string, TMPL_STRING);
gtk_container_class_set_template (container_class, template_string,
template_id, TMPL_STRING);
}
/**
* gtk_container_class_set_template_from_resource:
* @container_class: a #GtkContainerClass
* @resource_path: the #GtkBuilder xml resource path
* @template_id: the template id
*
* This is used when implementing new composite widget types
* to specify a UI template for instances of this type.
@@ -1458,23 +1468,26 @@ gtk_container_class_set_template_from_string (GtkContainerClass *container_class
* format and are used to implement composite widget types in
* an automated way.
*
* Instances with an assigned template will have thier children
* built at object construct time.
* Instances with an assigned template will have their children built at object
* construct time.
*
* The provided xml is expected to have a <template> tag instead of <object>
* with id="this" and an extra 'parent' property specifying from with type
* with id=@template_id and an extra 'parent' property specifying from which type
* the new class derives from.
*
* Since: 3.6
* Since: 3.8
*/
void
gtk_container_class_set_template_from_resource (GtkContainerClass *container_class,
const gchar *resource_path)
const gchar *resource_path,
const gchar *template_id)
{
g_return_if_fail (GTK_IS_CONTAINER_CLASS (container_class));
g_return_if_fail (resource_path && resource_path[0]);
g_return_if_fail (template_id && template_id[0]);
gtk_container_class_set_template (container_class, resource_path, TMPL_RESOURCE);
gtk_container_class_set_template (container_class, resource_path,
template_id, TMPL_RESOURCE);
}
/**
@@ -1668,10 +1681,10 @@ gtk_container_constructor (GType type,
guint ret;
builder = gtk_builder_new ();
gtk_builder_expose_object (builder, "this", object);
gtk_builder_expose_object (builder, cpriv->tmpl_id, object);
if (cpriv->tmpl_type == TMPL_STRING)
ret = gtk_builder_add_from_string (builder, cpriv->tmpl, -1, &error);
ret = gtk_builder_add_from_string (builder, cpriv->tmpl, cpriv->tmpl_len, &error);
else if (cpriv->tmpl_type == TMPL_RESOURCE)
ret = gtk_builder_add_from_resource (builder, cpriv->tmpl, &error);
else

View File

@@ -225,9 +225,11 @@ void gtk_container_class_handle_border_width (GtkContainerClass *klass);
/* Class-level functions */
void gtk_container_class_set_template_from_string (GtkContainerClass *container_class,
const gchar *template_string);
const gchar *template_string,
const gchar *template_id);
void gtk_container_class_set_template_from_resource (GtkContainerClass *container_class,
const gchar *resource_path);
const gchar *resource_path,
const gchar *template_id);
void gtk_container_class_set_connect_func (GtkContainerClass *container_class,
GtkBuilderConnectFunc connect_func);
void gtk_container_class_declare_internal_child (GtkContainerClass *container_class,