[gjs: 1/2] Support interface signal handlers



commit 7b5e1f4516354ca4b8f039176f3ffca366d4fd77
Author: Tomasz Miąsko <tomasz miasko gmail com>
Date:   Wed May 9 00:00:00 2018 +0000

    Support interface signal handlers
    
    Use get_signal_info_if_available to obtain details about signal. It
    takes into account if signal is defined for an object or an interface
    and uses g_object_info_find_signal or g_interface_info_find_signal as
    appropriate.
    
    Fixes issue #147.

 gi/value.cpp | 14 ++------------
 1 file changed, 2 insertions(+), 12 deletions(-)
---
diff --git a/gi/value.cpp b/gi/value.cpp
index b264cc71..861b00f3 100644
--- a/gi/value.cpp
+++ b/gi/value.cpp
@@ -934,24 +934,15 @@ gjs_value_from_g_value_internal(JSContext             *context,
         bool res;
         GArgument arg;
         GIArgInfo *arg_info;
-        GIBaseInfo *obj;
         GISignalInfo *signal_info;
         GITypeInfo type_info;
 
-        obj = g_irepository_find_by_gtype(NULL, signal_query->itype);
-        if (!obj) {
-            gjs_throw(context, "Signal argument with GType %s isn't introspectable",
-                      g_type_name(signal_query->itype));
-            return false;
-        }
-
-        signal_info = g_object_info_find_signal((GIObjectInfo*)obj, signal_query->signal_name);
-
+        signal_info = get_signal_info_if_available(signal_query);
         if (!signal_info) {
             gjs_throw(context, "Unknown signal.");
-            g_base_info_unref((GIBaseInfo*)obj);
             return false;
         }
+
         arg_info = g_callable_info_get_arg(signal_info, arg_n - 1);
         g_arg_info_load_type(arg_info, &type_info);
 
@@ -965,7 +956,6 @@ gjs_value_from_g_value_internal(JSContext             *context,
 
         g_base_info_unref((GIBaseInfo*)arg_info);
         g_base_info_unref((GIBaseInfo*)signal_info);
-        g_base_info_unref((GIBaseInfo*)obj);
         return res;
     } else if (g_type_is_a(gtype, G_TYPE_POINTER)) {
         gpointer pointer;


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