[gtk+] GtkBuilder: Prefer "type-func" over "class" when looking for the GType
- From: Debarshi Ray <debarshir src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] GtkBuilder: Prefer "type-func" over "class" when looking for the GType
- Date: Tue, 29 Aug 2017 13:42:08 +0000 (UTC)
commit fd9aec27fce9629e889df57aaf04436b2739142b
Author: Debarshi Ray <debarshir gnome org>
Date: Mon Aug 28 18:58:50 2017 +0200
GtkBuilder: Prefer "type-func" over "class" when looking for the GType
https://bugzilla.gnome.org/show_bug.cgi?id=786932
gtk/gtkbuilderparser.c | 26 +++++++++++++-------------
testsuite/gtk/builder.c | 12 +++++++++++-
2 files changed, 24 insertions(+), 14 deletions(-)
---
diff --git a/gtk/gtkbuilderparser.c b/gtk/gtkbuilderparser.c
index 5dd6ed7..da890b4 100644
--- a/gtk/gtkbuilderparser.c
+++ b/gtk/gtkbuilderparser.c
@@ -279,34 +279,34 @@ parse_object (GMarkupParseContext *context,
return;
}
- if (object_class)
+ if (type_func)
{
- object_type = gtk_builder_get_type_from_name (data->builder, object_class);
+ /* Call the GType function, and return the GType, it's guaranteed afterwards
+ * that g_type_from_name on the name will return our GType
+ */
+ object_type = _get_type_by_symbol (type_func);
if (object_type == G_TYPE_INVALID)
{
g_set_error (error,
GTK_BUILDER_ERROR,
- GTK_BUILDER_ERROR_INVALID_VALUE,
- "Invalid object type '%s'", object_class);
+ GTK_BUILDER_ERROR_INVALID_TYPE_FUNCTION,
+ "Invalid type function '%s'", type_func);
_gtk_builder_prefix_error (data->builder, context, error);
return;
- }
+ }
}
- else if (type_func)
+ else if (object_class)
{
- /* Call the GType function, and return the GType, it's guaranteed afterwards
- * that g_type_from_name on the name will return our GType
- */
- object_type = _get_type_by_symbol (type_func);
+ object_type = gtk_builder_get_type_from_name (data->builder, object_class);
if (object_type == G_TYPE_INVALID)
{
g_set_error (error,
GTK_BUILDER_ERROR,
- GTK_BUILDER_ERROR_INVALID_TYPE_FUNCTION,
- "Invalid type function '%s'", type_func);
+ GTK_BUILDER_ERROR_INVALID_VALUE,
+ "Invalid object type '%s'", object_class);
_gtk_builder_prefix_error (data->builder, context, error);
return;
- }
+ }
}
else
{
diff --git a/testsuite/gtk/builder.c b/testsuite/gtk/builder.c
index daec566..cd48b37 100644
--- a/testsuite/gtk/builder.c
+++ b/testsuite/gtk/builder.c
@@ -668,6 +668,10 @@ test_types (void)
"</interface>";
const gchar buffer3[] =
"<interface>"
+ " <object class=\"XXXInvalidType\" type-func=\"gtk_window_get_type\" id=\"window\"/>"
+ "</interface>";
+ const gchar buffer4[] =
+ "<interface>"
" <object type-func=\"xxx_invalid_get_type_function\" id=\"window\"/>"
"</interface>";
GtkBuilder *builder;
@@ -684,10 +688,16 @@ test_types (void)
g_assert (GTK_IS_WINDOW (window));
gtk_widget_destroy (GTK_WIDGET (window));
g_object_unref (builder);
+
+ builder = builder_new_from_string (buffer3, -1, NULL);
+ window = gtk_builder_get_object (builder, "window");
+ g_assert (GTK_IS_WINDOW (window));
+ gtk_widget_destroy (GTK_WIDGET (window));
+ g_object_unref (builder);
error = NULL;
builder = gtk_builder_new ();
- gtk_builder_add_from_string (builder, buffer3, -1, &error);
+ gtk_builder_add_from_string (builder, buffer4, -1, &error);
g_assert_error (error, GTK_BUILDER_ERROR, GTK_BUILDER_ERROR_INVALID_TYPE_FUNCTION);
g_error_free (error);
g_object_unref (builder);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]