[gjs] gi: Do not assume all gtypes with signals are objects



commit 92f84061528636515b3d4ad75164d9ab15bba462
Author: Florian Müllner <fmuellner gnome org>
Date:   Wed Feb 17 11:19:01 2016 +0100

    gi: Do not assume all gtypes with signals are objects
    
    Commit 67d7d2d55 added get_signal_info_if_available(), which looks
    up a GISignalInfo matching a given GType and name. Currently it
    assumes that the type corresponds to an object, however interfaces
    may have signals as well - make sure to use the right method to
    lookup the signal info in that case instead of spamming my logs :-)

 gi/value.cpp |   12 +++++++++---
 1 files changed, 9 insertions(+), 3 deletions(-)
---
diff --git a/gi/value.cpp b/gi/value.cpp
index aad2cd0..73f3669 100644
--- a/gi/value.cpp
+++ b/gi/value.cpp
@@ -57,7 +57,8 @@ static GISignalInfo *
 get_signal_info_if_available(GSignalQuery *signal_query)
 {
     GIBaseInfo *obj;
-    GISignalInfo *signal_info;
+    GIInfoType info_type;
+    GISignalInfo *signal_info = NULL;
 
     if (!signal_query->itype)
         return NULL;
@@ -66,8 +67,13 @@ get_signal_info_if_available(GSignalQuery *signal_query)
     if (!obj)
         return NULL;
 
-    signal_info = g_object_info_find_signal((GIObjectInfo*)obj,
-                                            signal_query->signal_name);
+    info_type = g_base_info_get_type (obj);
+    if (info_type == GI_INFO_TYPE_OBJECT)
+      signal_info = g_object_info_find_signal((GIObjectInfo*)obj,
+                                              signal_query->signal_name);
+    else if (info_type == GI_INFO_TYPE_INTERFACE)
+      signal_info = g_interface_info_find_signal((GIInterfaceInfo*)obj,
+                                                 signal_query->signal_name);
     g_base_info_unref((GIBaseInfo*)obj);
 
     return signal_info;


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