[gjs/cairo] [override] Send in all arguments to to/from
- From: Johan Dahlin <johan src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gjs/cairo] [override] Send in all arguments to to/from
- Date: Thu, 18 Feb 2010 08:07:05 +0000 (UTC)
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]