forked from AuroraMiddleware/gtk
builderlistitemfactory: Add scope argument
This way, the scope used when creating builder instances can be influenced. This way, callbacks can be passed into the factory.
This commit is contained in:
parent
12e720fb23
commit
48a223abdf
@ -59,6 +59,7 @@ struct _GtkBuilderListItemFactory
|
||||
{
|
||||
GtkListItemFactory parent_instance;
|
||||
|
||||
GtkBuilderScope *scope;
|
||||
GBytes *bytes;
|
||||
char *resource;
|
||||
};
|
||||
@ -72,6 +73,7 @@ enum {
|
||||
PROP_0,
|
||||
PROP_BYTES,
|
||||
PROP_RESOURCE,
|
||||
PROP_SCOPE,
|
||||
|
||||
N_PROPS
|
||||
};
|
||||
@ -93,6 +95,8 @@ gtk_builder_list_item_factory_setup (GtkListItemFactory *factory,
|
||||
builder = gtk_builder_new ();
|
||||
|
||||
gtk_builder_set_current_object (builder, G_OBJECT (list_item));
|
||||
if (self->scope)
|
||||
gtk_builder_set_scope (builder, self->scope);
|
||||
|
||||
if (!gtk_builder_extend_with_template (builder, GTK_WIDGET (list_item), G_OBJECT_TYPE (list_item),
|
||||
(const gchar *)g_bytes_get_data (self->bytes, NULL),
|
||||
@ -130,6 +134,10 @@ gtk_builder_list_item_factory_get_property (GObject *object,
|
||||
g_value_set_string (value, self->resource);
|
||||
break;
|
||||
|
||||
case PROP_SCOPE:
|
||||
g_value_set_object (value, self->scope);
|
||||
break;
|
||||
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
|
||||
break;
|
||||
@ -192,6 +200,10 @@ gtk_builder_list_item_factory_set_property (GObject *object,
|
||||
}
|
||||
break;
|
||||
|
||||
case PROP_SCOPE:
|
||||
self->scope = g_value_dup_object (value);
|
||||
break;
|
||||
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
|
||||
break;
|
||||
@ -203,6 +215,7 @@ gtk_builder_list_item_factory_finalize (GObject *object)
|
||||
{
|
||||
GtkBuilderListItemFactory *self = GTK_BUILDER_LIST_ITEM_FACTORY (object);
|
||||
|
||||
g_clear_object (&self->scope);
|
||||
g_bytes_unref (self->bytes);
|
||||
g_free (self->resource);
|
||||
|
||||
@ -245,8 +258,19 @@ gtk_builder_list_item_factory_class_init (GtkBuilderListItemFactoryClass *klass)
|
||||
NULL,
|
||||
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
|
||||
|
||||
g_object_class_install_properties (gobject_class, N_PROPS, properties);
|
||||
/**
|
||||
* GtkBuilderListItemFactory:scope:
|
||||
*
|
||||
* scope to use when instantiating listitems
|
||||
*/
|
||||
properties[PROP_SCOPE] =
|
||||
g_param_spec_object ("scope",
|
||||
P_("Scope"),
|
||||
P_("scope to use when instantiating listitems"),
|
||||
GTK_TYPE_BUILDER_SCOPE,
|
||||
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
|
||||
|
||||
g_object_class_install_properties (gobject_class, N_PROPS, properties);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -256,6 +280,7 @@ gtk_builder_list_item_factory_init (GtkBuilderListItemFactory *self)
|
||||
|
||||
/**
|
||||
* gtk_builder_list_item_factory_new_from_bytes:
|
||||
* @scope: (nullable) (transfer none): A scope to use when instantiating
|
||||
* @bytes: the bytes containing the ui file to instantiate
|
||||
*
|
||||
* Creates s new #GtkBuilderListItemFactory that instantiates widgets
|
||||
@ -264,17 +289,20 @@ gtk_builder_list_item_factory_init (GtkBuilderListItemFactory *self)
|
||||
* Returns: a new #GtkBuilderListItemFactory
|
||||
**/
|
||||
GtkListItemFactory *
|
||||
gtk_builder_list_item_factory_new_from_bytes (GBytes *bytes)
|
||||
gtk_builder_list_item_factory_new_from_bytes (GtkBuilderScope *scope,
|
||||
GBytes *bytes)
|
||||
{
|
||||
g_return_val_if_fail (bytes != NULL, NULL);
|
||||
|
||||
return g_object_new (GTK_TYPE_BUILDER_LIST_ITEM_FACTORY,
|
||||
"bytes", bytes,
|
||||
"scope", scope,
|
||||
NULL);
|
||||
}
|
||||
|
||||
/**
|
||||
* gtk_builder_list_item_factory_new_from_resource:
|
||||
* @scope: (nullable) (transfer none): A scope to use when instantiating
|
||||
* @resource_path: valid path to a resource that contains the data
|
||||
*
|
||||
* Creates s new #GtkBuilderListItemFactory that instantiates widgets
|
||||
@ -283,12 +311,15 @@ gtk_builder_list_item_factory_new_from_bytes (GBytes *bytes)
|
||||
* Returns: a new #GtkBuilderListItemFactory
|
||||
**/
|
||||
GtkListItemFactory *
|
||||
gtk_builder_list_item_factory_new_from_resource (const char *resource_path)
|
||||
gtk_builder_list_item_factory_new_from_resource (GtkBuilderScope *scope,
|
||||
const char *resource_path)
|
||||
{
|
||||
g_return_val_if_fail (scope == NULL || GTK_IS_BUILDER_SCOPE (scope), NULL);
|
||||
g_return_val_if_fail (resource_path != NULL, NULL);
|
||||
|
||||
return g_object_new (GTK_TYPE_BUILDER_LIST_ITEM_FACTORY,
|
||||
"resource", resource_path,
|
||||
"scope", scope,
|
||||
NULL);
|
||||
}
|
||||
|
||||
@ -327,3 +358,19 @@ gtk_builder_list_item_factory_get_resource (GtkBuilderListItemFactory *self)
|
||||
return self->resource;
|
||||
}
|
||||
|
||||
/**
|
||||
* gtk_builder_list_item_factory_get_scope:
|
||||
* @self: a #GtkBuilderListItemFactory
|
||||
*
|
||||
* Gets the scope used when constructing listitems.
|
||||
*
|
||||
* Returns: (transfer none) (nullable): The scope used when constructing listitems
|
||||
**/
|
||||
GtkBuilderScope *
|
||||
gtk_builder_list_item_factory_get_scope (GtkBuilderListItemFactory *self)
|
||||
{
|
||||
g_return_val_if_fail (GTK_IS_BUILDER_LIST_ITEM_FACTORY (self), NULL);
|
||||
|
||||
return self->scope;
|
||||
}
|
||||
|
||||
|
@ -42,14 +42,18 @@ GDK_AVAILABLE_IN_ALL
|
||||
GType gtk_builder_list_item_factory_get_type (void) G_GNUC_CONST;
|
||||
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GtkListItemFactory * gtk_builder_list_item_factory_new_from_bytes (GBytes *bytes);
|
||||
GtkListItemFactory * gtk_builder_list_item_factory_new_from_bytes (GtkBuilderScope *scope,
|
||||
GBytes *bytes);
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GtkListItemFactory * gtk_builder_list_item_factory_new_from_resource (const char *resource_path);
|
||||
GtkListItemFactory * gtk_builder_list_item_factory_new_from_resource (GtkBuilderScope *scope,
|
||||
const char *resource_path);
|
||||
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GBytes * gtk_builder_list_item_factory_get_bytes (GtkBuilderListItemFactory *self) G_GNUC_PURE;
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
const char * gtk_builder_list_item_factory_get_resource (GtkBuilderListItemFactory *self) G_GNUC_PURE;
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GtkBuilderScope * gtk_builder_list_item_factory_get_scope (GtkBuilderListItemFactory *self) G_GNUC_PURE;
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user