[gjs/cairo] [override] Send in all arguments to to/from



commit 742087b286a372470ac5697de147062218ed9a5d
Author: Johan Dahlin <johan gnome org>
Date:   Thu Feb 18 05:46:27 2010 -0200

    [override] Send in all arguments to to/from
    
    Send in all argument to the override callbacks and properly
    implement release

 gi/arg.c                |    7 ++++---
 gi/override.c           |   22 +++++++++++++++++-----
 gi/override.h           |   32 +++++++++++++++++++++++++-------
 modules/cairo-context.c |   22 +++++++++++++++++++++-
 4 files changed, 67 insertions(+), 16 deletions(-)
---
diff --git a/gi/arg.c b/gi/arg.c
index 43a6d36..002b3c4 100644
--- a/gi/arg.c
+++ b/gi/arg.c
@@ -748,7 +748,8 @@ gjs_value_to_g_argument(JSContext      *context,
             GIInfoType interface_type;
             GType gtype;
 
-            if (gjs_arg_override_convert_to_g_argument(context, type_info, value, arg))
+            if (gjs_arg_override_convert_to_g_argument(context, value, type_info, arg_name,
+                                                       arg_type, transfer, may_be_null, arg))
                 return JS_TRUE;
 
             interface_info = g_type_info_get_interface(type_info);
@@ -1374,7 +1375,7 @@ gjs_value_from_g_argument (JSContext  *context,
             GIInfoType interface_type;
             GType gtype;
 
-            if (gjs_arg_override_convert_from_g_argument(context, type_info, value_p, arg))
+            if (gjs_arg_override_convert_from_g_argument(context, value_p, type_info, arg))
                 return JS_TRUE;
 
             interface_info = g_type_info_get_interface(type_info);
@@ -1649,7 +1650,7 @@ gjs_g_arg_release_internal(JSContext  *context,
 
     failed = JS_FALSE;
 
-    if (gjs_arg_override_release_g_argument(context, type_info, arg))
+    if (gjs_arg_override_release_g_argument(context, transfer, type_info, arg))
         return JS_TRUE;
 
     switch (type_tag) {
diff --git a/gi/override.c b/gi/override.c
index 653e9dd..4e93326 100644
--- a/gi/override.c
+++ b/gi/override.c
@@ -36,6 +36,7 @@ typedef struct {
     char *type_name;
     GjsArgOverrideToGArgumentFunc to_func;
     GjsArgOverrideFromGArgumentFunc from_func;
+    GjsArgOverrideReleaseGArgumentFunc release_func;
 } GjsArgOverride;
 
 
@@ -51,7 +52,8 @@ JSBool
 gjs_arg_override_register(const char *namespace,
                           const char *type_name,
                           GjsArgOverrideToGArgumentFunc to_func,
-                          GjsArgOverrideFromGArgumentFunc from_func)
+                          GjsArgOverrideFromGArgumentFunc from_func,
+                          GjsArgOverrideReleaseGArgumentFunc release_func)
 {
     char *canonical_name;
     GjsArgOverride *override;
@@ -64,6 +66,7 @@ gjs_arg_override_register(const char *namespace,
     override->type_name = g_strdup(type_name);
     override->to_func = to_func;
     override->from_func = from_func;
+    override->release_func = release_func;
 
     canonical_name = g_strdup_printf("%s.%s", namespace, type_name);
     if (!arg_overrides_table) {
@@ -105,8 +108,12 @@ gjs_arg_override_lookup(GITypeInfo *type_info)
 
 JSBool
 gjs_arg_override_convert_to_g_argument(JSContext      *context,
-                                       GITypeInfo     *type_info,
                                        jsval           value,
+                                       GITypeInfo     *type_info,
+                                       const char     *arg_name,
+                                       GjsArgumentType argument_type,
+                                       GITransfer      transfer,
+                                       gboolean        may_be_null,
                                        GArgument      *arg)
 {
     GjsArgOverride *override;
@@ -118,7 +125,8 @@ gjs_arg_override_convert_to_g_argument(JSContext      *context,
     if (!override)
         return JS_FALSE;
 
-    if (!override->to_func(context, value, arg))
+    if (!override->to_func(context, value, type_info, arg_name,
+                           argument_type, transfer, may_be_null, arg))
         return JS_FALSE;
 
     return JS_TRUE;
@@ -126,8 +134,8 @@ gjs_arg_override_convert_to_g_argument(JSContext      *context,
 
 JSBool
 gjs_arg_override_convert_from_g_argument(JSContext  *context,
-                                         GITypeInfo *type_info,
                                          jsval      *value_p,
+                                         GITypeInfo *type_info,
                                          GArgument  *arg)
 {
     GjsArgOverride *override;
@@ -139,7 +147,7 @@ gjs_arg_override_convert_from_g_argument(JSContext  *context,
     if (!override)
         return JS_FALSE;
 
-    if (!override->from_func(context, value_p, arg))
+    if (!override->from_func(context, value_p, type_info, arg))
         return JS_FALSE;
 
     return JS_TRUE;
@@ -147,6 +155,7 @@ gjs_arg_override_convert_from_g_argument(JSContext  *context,
 
 JSBool
 gjs_arg_override_release_g_argument(JSContext  *context,
+                                    GITransfer  transfer,
                                     GITypeInfo *type_info,
                                     GArgument  *arg)
 {
@@ -159,6 +168,9 @@ gjs_arg_override_release_g_argument(JSContext  *context,
     if (!override)
         return JS_FALSE;
 
+    if (!override->release_func(context, transfer, type_info, arg))
+        return JS_FALSE;
+
     return JS_TRUE;
 }
 
diff --git a/gi/override.h b/gi/override.h
index bde92d2..5ece197 100644
--- a/gi/override.h
+++ b/gi/override.h
@@ -26,29 +26,47 @@
 
 #include <girepository.h>
 #include <gjs/gjs.h>
+#include "arg.h"
 
 typedef JSBool (*GjsArgOverrideToGArgumentFunc) (JSContext      *context,
-                                                jsval           value,
-                                                GArgument      *arg);
+                                                 jsval           value,
+                                                 GITypeInfo     *type_info,
+                                                 const char     *arg_name,
+                                                 GjsArgumentType argument_type,
+                                                 GITransfer      transfer,
+                                                 gboolean        may_be_null,
+                                                 GArgument      *arg);
 
 typedef JSBool (*GjsArgOverrideFromGArgumentFunc) (JSContext  *context,
                                                    jsval      *value_p,
+                                                   GITypeInfo *type_info,
                                                    GArgument  *arg);
+typedef JSBool (*GjsArgOverrideReleaseGArgumentFunc) (JSContext  *context,
+                                                      GITransfer  transfer,
+                                                      GITypeInfo *type_info,
+                                                      GArgument  *arg);
 
 JSBool gjs_arg_override_register(const char                     *namespace,
                                  const char                     *type_name,
                                  GjsArgOverrideToGArgumentFunc   to_func,
-                                 GjsArgOverrideFromGArgumentFunc from_func);
+                                 GjsArgOverrideFromGArgumentFunc from_func,
+                                 GjsArgOverrideReleaseGArgumentFunc release_func);
+
 
 JSBool gjs_arg_override_convert_to_g_argument  (JSContext  *context,
-                                                GITypeInfo *type_info,
-                                                jsval       value,
-                                                GArgument  *arg);
+                                                jsval           value,
+                                                GITypeInfo     *type_info,
+                                                const char     *arg_name,
+                                                GjsArgumentType argument_type,
+                                                GITransfer      transfer,
+                                                gboolean        may_be_null,
+                                                GArgument      *arg);
 JSBool gjs_arg_override_convert_from_g_argument(JSContext  *context,
-                                                GITypeInfo *type_info,
                                                 jsval      *value_p,
+                                                GITypeInfo *type_info,
                                                 GArgument  *arg);
 JSBool gjs_arg_override_release_g_argument(JSContext  *context,
+                                           GITransfer  transfer,
                                            GITypeInfo *type_info,
                                            GArgument  *arg);
 
diff --git a/modules/cairo-context.c b/modules/cairo-context.c
index 9d1ccb8..c2b7eb4 100644
--- a/modules/cairo-context.c
+++ b/modules/cairo-context.c
@@ -362,6 +362,11 @@ gjs_cairo_context_get_cr(JSContext *context,
 static JSBool
 context_to_g_argument(JSContext      *context,
                       jsval           value,
+                      GITypeInfo     *type_info,
+                      const char     *arg_name,
+                      GjsArgumentType argument_type,
+                      GITransfer      transfer,
+                      gboolean        may_be_null,
                       GArgument      *arg)
 {
     JSObject *obj;
@@ -379,6 +384,7 @@ context_to_g_argument(JSContext      *context,
 static JSBool
 context_from_g_argument (JSContext  *context,
                          jsval      *value_p,
+                         GITypeInfo *type_info,
                          GArgument  *arg)
 {
     JSObject *obj;
@@ -391,11 +397,25 @@ context_from_g_argument (JSContext  *context,
     return JS_TRUE;
 }
 
+static JSBool
+context_release_g_argument(JSContext  *context,
+                           GITransfer  transfer,
+                           GITypeInfo *type_info,
+                           GArgument  *arg)
+{
+    cairo_t *cr;
+
+    cr = (cairo_t*)arg->v_pointer;
+
+    return JS_TRUE;
+}
+
 void
 _cairo_context_init (JSContext *context)
 {
     gjs_arg_override_register("cairo", "Context",
                               context_to_g_argument,
-                              context_from_g_argument);
+                              context_from_g_argument,
+                              context_release_g_argument);
 }
 



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