[glade] gladeui/glade-template.c: add class_init function
- From: Juan Pablo Ugarte <jpu src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glade] gladeui/glade-template.c: add class_init function
- Date: Mon, 24 Aug 2020 22:52:20 +0000 (UTC)
commit 207dd760b41c825d359b7c88988307571a36f558
Author: Juan Pablo Ugarte <juanpablougarte gmail com>
Date: Mon Aug 24 17:44:29 2020 -0300
gladeui/glade-template.c: add class_init function
Use class init function to set template and only reset it
if _gtk_widget_class_template_unset_only_for_glade() is present
gladeui/glade-template.c | 33 ++++++++++++++++++++++-----------
1 file changed, 22 insertions(+), 11 deletions(-)
---
diff --git a/gladeui/glade-template.c b/gladeui/glade-template.c
index b5248ecb..6350024e 100644
--- a/gladeui/glade-template.c
+++ b/gladeui/glade-template.c
@@ -27,20 +27,29 @@
#if HAVE_GTK_TEMPLATE_UNSET
extern void
_gtk_widget_class_template_unset_only_for_glade (GtkWidgetClass *widget_class);
-#else
-#define _gtk_widget_class_template_unset_only_for_glade(void)
#endif
static GHashTable *templates = NULL;
+static void
+glade_template_class_init (gpointer g_class, gpointer class_data)
+{
+ const gchar *class_name = G_OBJECT_CLASS_NAME (g_class);
+ GBytes *template = g_hash_table_lookup (templates, class_name);
+
+ gtk_widget_class_set_template (g_class, template);
+}
+
static void
glade_template_instance_init (GTypeInstance *instance, gpointer g_class)
{
- /* Reset class template */
+#if HAVE_GTK_TEMPLATE_UNSET
+ /* Reset class template since it could have changed */
_gtk_widget_class_template_unset_only_for_glade (GTK_WIDGET_GET_CLASS (instance));
gtk_widget_class_set_template (GTK_WIDGET_GET_CLASS (instance),
g_hash_table_lookup (templates,
G_OBJECT_TYPE_NAME (instance)));
+#endif
/* Regular template initialization*/
gtk_widget_init_template ((GtkWidget *)instance);
@@ -83,12 +92,6 @@ _glade_template_parse (const gchar *tmpl, gchar **type, gchar **parent)
g_markup_parse_context_parse (context, tmpl, -1, NULL);
- /*
- while (g_markup_parse_context_parse (context, tmpl, 128, NULL) &&
- (data.class == NULL || data.parent == NULL))
- tmpl += 128;
-*/
-
g_markup_parse_context_end_parse (context, NULL);
if (data.class && data.parent)
@@ -144,10 +147,17 @@ _glade_template_load (const gchar *filename, gchar **type, gchar **parent)
g_file_get_contents (filename, &template, &len, &error);
if (error)
- g_warning ("Error loading template file %s - %s", filename, error->message);
+ {
+ g_warning ("Error loading template file %s - %s", filename, error->message);
+ g_error_free (error);
+ }
if (!template || !_glade_template_parse (template, type, parent))
- *type = *parent = NULL;
+ {
+ *type = NULL;
+ *parent = NULL;
+ g_free (template);
+ }
else
{
GType tmpl_type = get_type_from_name (*type);
@@ -196,6 +206,7 @@ _glade_template_generate_type (const gchar *type, const gchar *parent)
info = g_new0 (GTypeInfo, 1);
info->class_size = query.class_size;
+ info->class_init = glade_template_class_init;
info->instance_size = query.instance_size;
info->instance_init = glade_template_instance_init;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]