[glade/glade-3-20] GladeWidgetAdaptor: fix glade_widget_adaptor_get_parent_adaptor()



commit 2405795a80c95a4e1002b41e94265e4d9d23ed7a
Author: Juan Pablo Ugarte <juanpablougarte gmail com>
Date:   Mon Feb 26 17:41:23 2018 -0300

    GladeWidgetAdaptor: fix glade_widget_adaptor_get_parent_adaptor()
    
    Use adaptor real_type instead of runtime type which could be a derived type
    
    glade_widget_adaptor_from_catalog() Add check for get-type-function return value

 gladeui/glade-widget-adaptor.c |   16 +++++++++++++++-
 1 files changed, 15 insertions(+), 1 deletions(-)
---
diff --git a/gladeui/glade-widget-adaptor.c b/gladeui/glade-widget-adaptor.c
index d9ada45..a174480 100644
--- a/gladeui/glade-widget-adaptor.c
+++ b/gladeui/glade-widget-adaptor.c
@@ -309,7 +309,7 @@ glade_widget_adaptor_get_parent_adaptor (GladeWidgetAdaptor *adaptor)
 {
   g_return_val_if_fail (GLADE_IS_WIDGET_ADAPTOR (adaptor), NULL);
 
-  return glade_widget_adaptor_get_parent_adaptor_by_type (adaptor->priv->type);
+  return glade_widget_adaptor_get_parent_adaptor_by_type (adaptor->priv->real_type);
 }
 
 gboolean
@@ -2711,7 +2711,21 @@ glade_widget_adaptor_from_catalog (GladeCatalog *catalog,
             glade_xml_get_property_string (class_node,
                                            GLADE_TAG_GET_TYPE_FUNCTION)) != NULL)
     {
+      GType real_type;
+
       object_type = glade_util_get_type_from_name (func_name, TRUE);
+      real_type = g_type_from_name (name);
+
+      if (object_type != G_TYPE_INVALID && !g_type_is_a (object_type, real_type))
+        {
+          g_warning ("Trying to define class '%s' with %s() function. "
+                     "But it returns a non derived class %s",
+                     name, func_name, g_type_name (object_type));
+          g_free (name);
+          g_free (func_name);
+          return NULL;
+        }
+
       g_free (func_name);
     }
   else


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]