GObject * peas_extension_gjs_new (GType exten_type, GType *interfaces, JSContext *js_context, JSObject *js_object) { PeasExtensionGjs *gexten; GType real_type; g_return_val_if_fail (js_context != NULL, NULL); g_return_val_if_fail (js_object != NULL, NULL); real_type = peas_extension_register_subclass (PEAS_TYPE_EXTENSION_GJS, interfaces); /* Already Warned */ if (real_type == G_TYPE_INVALID) { g_free (interfaces); return NULL; } gexten = PEAS_EXTENSION_GJS (g_object_new (real_type, NULL)); gexten->js_context = js_context; gexten->js_object = js_object; PEAS_EXTENSION_WRAPPER (gexten)->exten_type = exten_type; PEAS_EXTENSION_WRAPPER (gexten)->interfaces = interfaces; JS_AddObjectRoot (gexten->js_context, &gexten->js_object); return G_OBJECT (gexten); }
/** * peas_extension_get_extension_type: * @exten: A #PeasExtension. * * Get the type of the extension interface of the object proxied by @exten. * * Return value: The #GType proxied by @exten. */ GType peas_extension_get_extension_type (PeasExtension *exten) { if (PEAS_IS_EXTENSION_WRAPPER (exten)) { return peas_extension_wrapper_get_extension_type (PEAS_EXTENSION_WRAPPER (exten)); } else { return (GType) g_object_get_data (G_OBJECT (exten), "peas-extension-type"); } }
static void extension_subclass_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { PeasExtensionWrapper *exten = PEAS_EXTENSION_WRAPPER (object); /* This will have already been set on the real instance */ if ((pspec->flags & G_PARAM_CONSTRUCT_ONLY) != 0) return; /* Setting will fail if we are not constructed yet */ if ((pspec->flags & G_PARAM_CONSTRUCT) != 0 && !exten->constructed) return; g_debug ("Setting '%s:%s'", G_OBJECT_TYPE_NAME (object), g_param_spec_get_name (pspec)); G_OBJECT_CLASS (get_parent_class (object))->set_property (object, prop_id, value, pspec); }
GObject * peas_extension_seed_new (GType exten_type, SeedContext js_context, SeedObject js_object) { PeasExtensionSeed *sexten; GType real_type; g_return_val_if_fail (js_context != NULL, NULL); g_return_val_if_fail (js_object != NULL, NULL); real_type = peas_extension_register_subclass (PEAS_TYPE_EXTENSION_SEED, exten_type); sexten = PEAS_EXTENSION_SEED (g_object_new (real_type, NULL)); sexten->js_context = js_context; sexten->js_object = js_object; PEAS_EXTENSION_WRAPPER (sexten)->exten_type = exten_type; seed_context_ref (sexten->js_context); seed_value_protect (sexten->js_context, sexten->js_object); return G_OBJECT (sexten); }
/** * peas_extension_callv: * @exten: A #PeasExtension. * @method_name: the name of the method that should be called. * @args: the arguments for the method. * @return_value: the return falue for the method. * * Call a method of the object behind @extension, using @args as arguments. * * See peas_extension_call() for more information. * * Return value: (transfer full): %TRUE on successful call. * * Deprecated: 1.2. Use the dynamically implemented interface instead. * * Rename to: peas_extension_call */ gboolean peas_extension_callv (PeasExtension *exten, const gchar *method_name, GIArgument *args, GIArgument *return_value) { if (PEAS_IS_EXTENSION_WRAPPER (exten)) { return peas_extension_wrapper_callv (PEAS_EXTENSION_WRAPPER (exten), method_name, args, return_value); } else { GType gtype = peas_extension_get_extension_type (exten); return peas_method_apply (G_OBJECT (exten), gtype, method_name, args, return_value); } }