示例#1
0
static gboolean
g_child_watch_closure_callback (GPid     pid,
                                gint     status,
                                gpointer data)
{
  GClosure *closure = data;

  GValue params[2] = { G_VALUE_INIT, G_VALUE_INIT };
  GValue result_value = G_VALUE_INIT;
  gboolean result;

  g_value_init (&result_value, G_TYPE_BOOLEAN);

#ifdef G_OS_UNIX
  g_value_init (&params[0], G_TYPE_ULONG);
  g_value_set_ulong (&params[0], pid);
#endif
#ifdef G_OS_WIN32
  g_value_init (&params[0], G_TYPE_POINTER);
  g_value_set_pointer (&params[0], pid);
#endif

  g_value_init (&params[1], G_TYPE_INT);
  g_value_set_int (&params[1], status);

  g_closure_invoke (closure, &result_value, 2, params, NULL);

  result = g_value_get_boolean (&result_value);
  g_value_unset (&result_value);
  g_value_unset (&params[0]);
  g_value_unset (&params[1]);

  return result;
}
示例#2
0
文件: mooplugin.c 项目: cmotc/medit
void
moo_plugin_call_methodv (const GValue *plugin_and_args,
                         const char   *name,
                         GValue       *return_val)
{
    gpointer plugin;
    MooPluginMeth *meth;

    g_return_if_fail (plugin_and_args != NULL);
    g_return_if_fail (name != NULL);

    plugin = g_value_get_object (plugin_and_args);
    g_return_if_fail (plugin != NULL);

    meth = moo_plugin_lookup_method (plugin, name);

    if (!meth)
    {
        g_warning ("plugin '%s' does not have method '%s'",
                   moo_plugin_id (plugin), name);
        return;
    }

    g_return_if_fail (meth->return_type == G_TYPE_NONE ||
                      (return_val != NULL && meth->return_type == G_VALUE_TYPE (return_val)));

    g_closure_invoke (meth->closure, return_val, meth->n_params + 1, plugin_and_args, NULL);
}
示例#3
0
static gint pacman_manager_fetch_cb (const gchar *url, const gchar *path, int force) {
	PacmanManagerPrivate *priv;
	GValue result = { 0 }, params[4] = { 0 };
	
	g_return_val_if_fail (url != NULL, -1);
	g_return_val_if_fail (path != NULL, -1);
	g_return_val_if_fail (pacman_manager != NULL, -1);
	
	priv = PACMAN_MANAGER_GET_PRIVATE (pacman_manager);
	
	g_value_init (&params[0], PACMAN_TYPE_MANAGER);
	g_value_set_instance (&params[0], pacman_manager);
	
	g_value_init (&params[1], G_TYPE_STRING);
	g_value_set_string (&params[1], url);
	
	g_value_init (&params[2], G_TYPE_STRING);
	g_value_set_string (&params[2], path);
	
	g_value_init (&params[3], G_TYPE_BOOLEAN);
	g_value_set_boolean (&params[3], force != 0);
	
	g_value_init (&result, G_TYPE_INT);
	g_closure_invoke (priv->transfer, &result, 4, params, NULL);
	
	return g_value_get_int (&result);
}
示例#4
0
/* returns 0 on success, prints a status msg if msg is true */
int owl_variable_set_fromstring(owl_variable *v, const char *value, int msg) {
  char *tostring;
  GValue values[] = {G_VALUE_INIT, G_VALUE_INIT};
  GValue return_box = G_VALUE_INIT;
  int set_successfully;

  g_value_init(&values[0], G_TYPE_POINTER);
  g_value_set_pointer(&values[0], NULL);
  g_value_init(&values[1], G_TYPE_STRING);
  g_value_set_static_string(&values[1], value);
  g_value_init(&return_box, G_TYPE_INT);
  g_closure_invoke(v->set_fromstring_fn, &return_box, 2, values, NULL);

  set_successfully = g_value_get_int(&return_box);
  if (0 != set_successfully) {
    if (msg) owl_function_error("Unable to set %s (must be %s)", owl_variable_get_name(v),
                                owl_variable_get_validsettings(v));
  } else if (msg) {
    tostring = owl_variable_get_tostring(v);
    if (tostring) {
      owl_function_makemsg("%s = '%s'", owl_variable_get_name(v), tostring);
    } else {
      owl_function_makemsg("%s = <null>", owl_variable_get_name(v));
    }
    g_free(tostring);
  }

  g_value_unset(&return_box);
  g_value_unset(&values[1]);
  g_value_unset(&values[0]);
  return set_successfully;
}
static gboolean
io_watch_closure_callback (GIOChannel   *channel,
			   GIOCondition  condition,
			   gpointer      data)
{
  GClosure *closure = data;

  GValue params[2] = { { 0, }, { 0, } };
  GValue result_value = { 0, };
  gboolean result;

  g_value_init (&result_value, G_TYPE_BOOLEAN);
  g_value_init (&params[0], G_TYPE_IO_CHANNEL);
  g_value_set_boxed (&params[0], channel);
		     
  g_value_init (&params[1], G_TYPE_IO_CONDITION);
  g_value_set_flags (&params[1], condition);

  g_closure_invoke (closure, &result_value, 2, params, NULL);

  result = g_value_get_boolean (&result_value);
  g_value_unset (&result_value);
  g_value_unset (&params[0]);
  g_value_unset (&params[1]);

  return result;
}
static gboolean
clutter_binding_entry_invoke (ClutterBindingEntry *entry,
                              GObject             *gobject)
{
  GValue params[4] = { { 0, }, { 0, }, { 0, }, { 0, } };
  GValue result = { 0, };
  gboolean retval = TRUE;

  g_value_init (&params[0], G_TYPE_OBJECT);
  g_value_set_object (&params[0], gobject);

  g_value_init (&params[1], G_TYPE_STRING);
  g_value_set_static_string (&params[1], entry->name);

  g_value_init (&params[2], G_TYPE_UINT);
  g_value_set_uint (&params[2], entry->key_val);

  g_value_init (&params[3], CLUTTER_TYPE_MODIFIER_TYPE);
  g_value_set_flags (&params[3], entry->modifiers);

  g_value_init (&result, G_TYPE_BOOLEAN);

  g_closure_invoke (entry->closure, &result, 4, params, NULL);

  retval = g_value_get_boolean (&result);

  g_value_unset (&result);

  g_value_unset (&params[0]);
  g_value_unset (&params[1]);
  g_value_unset (&params[2]);
  g_value_unset (&params[3]);

  return retval;
}
示例#7
0
static gboolean
g_unix_fd_source_closure_callback (int           fd,
                                   GIOCondition  condition,
                                   gpointer      data)
{
  GClosure *closure = data;

  GValue params[2] = { G_VALUE_INIT, G_VALUE_INIT };
  GValue result_value = G_VALUE_INIT;
  gboolean result;

  g_value_init (&result_value, G_TYPE_BOOLEAN);

  g_value_init (&params[0], G_TYPE_INT);
  g_value_set_int (&params[0], fd);

  g_value_init (&params[1], G_TYPE_IO_CONDITION);
  g_value_set_flags (&params[1], condition);

  g_closure_invoke (closure, &result_value, 2, params, NULL);

  result = g_value_get_boolean (&result_value);
  g_value_unset (&result_value);
  g_value_unset (&params[0]);
  g_value_unset (&params[1]);

  return result;
}
示例#8
0
static guint get_buffered_amount(OwrDataChannel *data_channel)
{
    OwrDataChannelPrivate *priv = data_channel->priv;
    guint64 bytes_sent = 0;

    if (priv->on_request_bytes_sent) {
        GValue ret_value = G_VALUE_INIT;
        GValue params[1] = { G_VALUE_INIT };

        g_value_init(&ret_value, G_TYPE_UINT64);
        g_value_init(&params[0], OWR_TYPE_DATA_CHANNEL);
        g_value_set_instance(&params[0], data_channel);

        g_closure_invoke(priv->on_request_bytes_sent, &ret_value, 1, (const GValue *)&params, NULL);

        bytes_sent = g_value_get_uint64(&ret_value);

        g_value_unset(&params[0]);
        g_value_unset(&ret_value);
    } else
        g_warning("on_request_bytes_sent closure not set. Cannot get buffered amount.");

    if (priv->bytes_sent < bytes_sent)
        bytes_sent = 0;
    else
        bytes_sent = priv->bytes_sent - bytes_sent;

    if (bytes_sent > G_MAXUINT)
        bytes_sent = G_MAXUINT;

    return (guint) bytes_sent;
}
static inline void
panel_lockdown_invoke_closures (PanelLockdown *lockdown)
{
        GSList *l;

        for (l = lockdown->closures; l; l = l->next)
                g_closure_invoke (l->data, NULL, 0, NULL, NULL);
}
示例#10
0
/**
 * pka_subscription_deliver_sample:
 * @subscription: A #PkaSubscription.
 *
 * Delivers @sample from @source to the @subscription.  @manifest should
 * be the current manifest for the source that has already been sent
 * to pka_subscription_deliver_manifest().
 *
 * Returns: None.
 * Side effects: None.
 */
void
pka_subscription_deliver_sample (PkaSubscription *subscription, /* IN */
                                 PkaSource       *source,       /* IN */
                                 PkaManifest     *manifest,     /* IN */
                                 PkaSample       *sample)       /* IN */
{
	GValue params[3] = { { 0 } };
	guint8 *buffer = NULL;
	gsize buffer_len = 0;
	PkaSample *samples[1] = { sample };

	g_return_if_fail(subscription != NULL);
	g_return_if_fail(sample != NULL);
	g_return_if_fail(PKA_IS_SOURCE(source));

	/*
	 * TODO: In the recent rewrite of this, we didn't implement buffering.
	 *   We need to add back support for buffering based on timeouts or
	 *   size of raw-data.
	 */

	ENTRY;
	g_static_rw_lock_reader_lock(&subscription->rw_lock);
	if (G_LIKELY(subscription->sample_closure)) {
		if (!pka_encoder_encode_samples(NULL, manifest, samples, 1,
		                                &buffer, &buffer_len)) {
			WARNING(Subscription, "Subscription %d failed to encode sample.",
			        subscription->id);
			GOTO(failed);
		}
		DUMP_BYTES(Sample, buffer, buffer_len);
		/*
		 * XXX: It should be obvious that this marshalling isn't very fast.
		 *   But I've certainly done worse.
		 */
		g_value_init(&params[0], PKA_TYPE_SUBSCRIPTION);
		g_value_init(&params[1], G_TYPE_POINTER);
		g_value_init(&params[2], G_TYPE_ULONG);
		g_value_set_boxed(&params[0], subscription);
		g_value_set_pointer(&params[1], buffer);
		g_value_set_ulong(&params[2], buffer_len);
		g_closure_invoke(subscription->sample_closure, NULL,
		                 3, &params[0], NULL);
		g_value_unset(&params[0]);
		g_value_unset(&params[1]);
		g_value_unset(&params[2]);
		g_free(buffer);
	}
  failed:
	g_static_rw_lock_reader_unlock(&subscription->rw_lock);
	EXIT;
}
void GObjectEventListener::handleEvent(ScriptExecutionContext*, Event* event)
{
    GValue parameters[2] = { G_VALUE_INIT, G_VALUE_INIT };
    g_value_init(&parameters[0], WEBKIT_DOM_TYPE_EVENT_TARGET);
    g_value_set_object(&parameters[0], m_target);

    GRefPtr<WebKitDOMEvent> domEvent = adoptGRef(WebKit::kit(event));
    g_value_init(&parameters[1], WEBKIT_DOM_TYPE_EVENT);
    g_value_set_object(&parameters[1], domEvent.get());

    g_closure_invoke(m_handler.get(), 0, 2, parameters, NULL);
    g_value_unset(parameters + 0);
    g_value_unset(parameters + 1);
}
示例#12
0
/*
 * Call the closure with the list as single argument.
 * @callback: (scope sync) (transfer full): the callback to be called with the list
 * @list: (transfer full): any list
 */
void _owr_utils_call_closure_with_list(GClosure *callback, GList *list)
{
    GValue values[1] = { G_VALUE_INIT };

    g_return_if_fail(callback);

    g_value_init(&values[0], G_TYPE_POINTER);
    g_value_set_pointer(&values[0], list);

    g_closure_invoke(callback, NULL, 1, values, NULL);
    g_closure_unref(callback);

    g_value_unset(&values[0]);
}
示例#13
0
static gboolean add_remote_candidate(GHashTable *args)
{
    OwrSession *session;
    OwrSessionPrivate *priv;
    OwrCandidate *candidate;
    gboolean forced;
    GSList **candidates;
    GValue params[2] = { G_VALUE_INIT, G_VALUE_INIT };

    g_return_val_if_fail(args, FALSE);

    session = g_hash_table_lookup(args, "session");
    candidate = g_hash_table_lookup(args, "candidate");
    forced = GPOINTER_TO_INT(g_hash_table_lookup(args, "forced"));
    g_return_val_if_fail(session && candidate, FALSE);

    priv = session->priv;
    candidates = forced ? &priv->forced_remote_candidates : &priv->remote_candidates;

    if (g_slist_find(*candidates, candidate)) {
        g_warning("Fail: remote candidate already added.");
        goto end;
    }

    if (g_slist_find(priv->local_candidates, candidate)) {
        g_warning("Fail: candidate is local.");
        goto end;
    }

    *candidates = g_slist_append(*candidates, candidate);
    g_object_ref(candidate);

    if (priv->on_remote_candidate) {
        g_value_init(&params[0], OWR_TYPE_SESSION);
        g_value_set_object(&params[0], session);
        g_value_init(&params[1], G_TYPE_BOOLEAN);
        g_value_set_boolean(&params[1], forced);
        g_closure_invoke(priv->on_remote_candidate, NULL, 2, (const GValue *)&params, NULL);
        g_value_unset(&params[0]);
        g_value_unset(&params[1]);
    }

end:
    g_object_unref(candidate);
    g_object_unref(session);
    g_hash_table_unref(args);
    return FALSE;
}
static gboolean
source_closure_callback (gpointer data)
{
  GClosure *closure = data;
  GValue result_value = { 0, };
  gboolean result;

  g_value_init (&result_value, G_TYPE_BOOLEAN);
  
  g_closure_invoke (closure, &result_value, 0, NULL, NULL);

  result = g_value_get_boolean (&result_value);
  g_value_unset (&result_value);

  return result;
}
示例#15
0
static void
rb_plugin_install_done (RBPluginInstallContext *ctx, gboolean retry)
{
	GValue param[2] = { {0,}, {0,} };

	rb_debug ("invoking plugin install context %p callback: retry %d", ctx, retry);

	g_value_init (&param[0], G_TYPE_POINTER);
	g_value_set_pointer (&param[0], NULL);
	g_value_init (&param[1], G_TYPE_BOOLEAN);
	g_value_set_boolean (&param[1], retry);

	g_closure_invoke (ctx->closure, NULL, 2, param, NULL);
	g_value_unset (&param[0]);
	g_value_unset (&param[1]);
}
示例#16
0
CALLER_OWN char *owl_variable_get_tostring(const owl_variable *v)
{
  GValue instance = G_VALUE_INIT;
  GValue tostring_box = G_VALUE_INIT;
  char *ret = NULL;

  g_value_init(&instance, G_TYPE_POINTER);
  g_value_set_pointer(&instance, NULL);
  g_value_init(&tostring_box, G_TYPE_STRING);
  g_closure_invoke(v->get_tostring_fn, &tostring_box, 1, &instance, NULL);

  ret = g_value_dup_string(&tostring_box);

  g_value_unset(&tostring_box);
  g_value_unset(&instance);
  return ret;
}
示例#17
0
void
fo_doc_cairo_do_run_callbacks (cairo_t        *cr,
			       PangoLayoutRun *run,
			       gint            x, 
			       gint            y)
{
  GSList *extra_attrs_list = run->item->analysis.extra_attrs;

  g_return_if_fail (cr != NULL);
  g_return_if_fail (run != NULL);

  while (extra_attrs_list)
    {
      PangoAttribute *attr = extra_attrs_list->data;
      PangoAttrType attr_type = attr->klass->type;

      if (attr_type == libfo_pango_attr_callback_get_type ())
	{
	  GValue values[1] = { { 0, { {0}, {0} } } };

	  g_value_init (&values[0], G_TYPE_POINTER);
	  g_value_set_pointer (&values[0], cr);

#if 0
	  g_message ("Got a callback: callback: %p",
		     ((PangoAttrPointer *) attr)->pointer);
#endif

	  cairo_save (cr);

	  cairo_translate (cr,
			   x / PANGO_SCALE,
			   -y / PANGO_SCALE);

	  g_closure_invoke (((GClosure *) libfo_pango_attr_callback_get_callback(attr)),
			     NULL,
			     1,
			     values,
			     NULL);
	  cairo_restore (cr);
	}

      extra_attrs_list = extra_attrs_list->next;
    }
}
示例#18
0
static gboolean data_channel_send(GHashTable *args)
{
    OwrDataChannelPrivate *priv;
    OwrDataChannel *data_channel;
    guint8 *data;
    guint length;
    gboolean is_binary;

    OWR_UNUSED(priv);
    OWR_UNUSED(data_channel);
    OWR_UNUSED(data);
    OWR_UNUSED(is_binary);

    data_channel = g_hash_table_lookup(args, "data_channel");
    data = g_hash_table_lookup(args, "data");
    length = GPOINTER_TO_UINT(g_hash_table_lookup(args, "length"));
    is_binary = GPOINTER_TO_UINT(g_hash_table_lookup(args, "is_binary"));
    priv = data_channel->priv;

    if (priv->on_datachannel_send) {
        GValue params[4] = { G_VALUE_INIT, G_VALUE_INIT, G_VALUE_INIT, G_VALUE_INIT };

        g_value_init(&params[0], OWR_TYPE_DATA_CHANNEL);
        g_value_set_object(&params[0], data_channel);
        g_value_init(&params[1], G_TYPE_POINTER);
        g_value_set_pointer(&params[1], data);
        g_value_init(&params[2], G_TYPE_UINT);
        g_value_set_uint(&params[2], length);
        g_value_init(&params[3], G_TYPE_BOOLEAN);
        g_value_set_boolean(&params[3], is_binary);

        g_closure_invoke(priv->on_datachannel_send, NULL, 4, (const GValue *)&params, NULL);

        g_value_unset(&params[0]);
        g_value_unset(&params[1]);
        g_value_unset(&params[2]);
        g_value_unset(&params[3]);
    } else
        g_free(data);

    g_hash_table_unref(args);
    g_object_unref(data_channel);

    return FALSE;
}
示例#19
0
static void clearClipboardContentsCallback(GtkClipboard* clipboard, gpointer data)
{
    DataObjectGtk* dataObject = DataObjectGtk::forClipboard(clipboard);
    ASSERT(dataObject);

    // Only clear the DataObject for this clipboard if we are not currently setting it.
    if (dataObject != settingClipboardDataObject)
        dataObject->clearAll();

    if (!data)
        return;

    GRefPtr<GClosure> callback = adoptGRef(static_cast<GClosure*>(data));
    GValue firstArgument = {0, {{0}}};
    g_value_init(&firstArgument, G_TYPE_POINTER);
    g_value_set_pointer(&firstArgument, clipboard);
    g_closure_invoke(callback.get(), nullptr, 1, &firstArgument, 0);
}
示例#20
0
/**
 * pka_subscription_deliver_manifest:
 * @subscription: A #PkaSubscription.
 * @source: A #PkaSource.
 * @manifest: A #PkaManifest.
 *
 * Delivers @manifest from @souce to the subscriptions handlers.
 *
 * Returns: None.
 * Side effects: None.
 */
void
pka_subscription_deliver_manifest (PkaSubscription *subscription, /* IN */
                                   PkaSource       *source,       /* IN */
                                   PkaManifest     *manifest)     /* IN */
{
	GValue params[3] = { { 0 } };
	guint8 *buffer = NULL;
	gsize buffer_len = 0;

	g_return_if_fail(subscription != NULL);
	g_return_if_fail(manifest != NULL);
	g_return_if_fail(PKA_IS_SOURCE(source));

	ENTRY;
	g_static_rw_lock_reader_lock(&subscription->rw_lock);
	if (G_LIKELY(subscription->manifest_closure)) {
		if (!pka_encoder_encode_manifest(NULL, manifest, &buffer, &buffer_len)) {
			WARNING(Subscription, "Subscription %d failed to encode manifest.",
					subscription->id);
			GOTO(failed);
		}
		DUMP_BYTES(Manifest, buffer, buffer_len);
		/*
		 * XXX: It should be obvious that this marshalling isn't very fast.
		 *   But I've certainly done worse.  At least it handles things cleanly
		 *   with regard to using libffi.
		 */
		g_value_init(&params[0], PKA_TYPE_SUBSCRIPTION);
		g_value_init(&params[1], G_TYPE_POINTER);
		g_value_init(&params[2], G_TYPE_ULONG);
		g_value_set_boxed(&params[0], subscription);
		g_value_set_pointer(&params[1], buffer);
		g_value_set_ulong(&params[2], buffer_len);
		g_closure_invoke(subscription->manifest_closure, NULL,
		                 3, &params[0], NULL);
		g_value_unset(&params[0]);
		g_value_unset(&params[1]);
		g_value_unset(&params[2]);
		g_free(buffer);
	}
  failed:
	g_static_rw_lock_reader_unlock(&subscription->rw_lock);
	EXIT;
}
示例#21
0
static void
own_with_closures_on_name_lost (GDBusConnection *connection,
                                const gchar     *name,
                                gpointer         user_data)
{
  OwnNameData *data = user_data;
  GValue params[2] = { { 0, }, { 0, } };

  g_value_init (&params[0], G_TYPE_DBUS_CONNECTION);
  g_value_set_object (&params[0], connection);

  g_value_init (&params[1], G_TYPE_STRING);
  g_value_set_string (&params[1], name);

  g_closure_invoke (data->name_lost_closure, NULL, 2, params, NULL);

  g_value_unset (params + 0);
  g_value_unset (params + 1);
}
示例#22
0
static void
watch_with_closures_on_name_vanished (GDBusConnection *connection,
                                      const gchar     *name,
                                      gpointer         user_data)
{
  WatchNameData *data = user_data;
  GValue params[2] = { G_VALUE_INIT, G_VALUE_INIT };

  g_value_init (&params[0], G_TYPE_DBUS_CONNECTION);
  g_value_set_object (&params[0], connection);

  g_value_init (&params[1], G_TYPE_STRING);
  g_value_set_string (&params[1], name);

  g_closure_invoke (data->name_vanished_closure, NULL, 2, params, NULL);

  g_value_unset (params + 0);
  g_value_unset (params + 1);
}
示例#23
0
static void
panel_applet_setup (PanelApplet *applet)
{
	GValue   value = {0, };
	GArray  *params;
	gint     i;
	gboolean ret;

	g_assert (applet->priv->id != NULL &&
		  applet->priv->closure != NULL);

	params = g_array_sized_new (FALSE, TRUE, sizeof (GValue), 2);
	value.g_type = 0;
	g_value_init (&value, G_TYPE_OBJECT);
	g_value_set_object (&value, G_OBJECT (applet));
	g_array_append_val (params, value);

	value.g_type = 0;
	g_value_init (&value, G_TYPE_STRING);
	g_value_set_string (&value, applet->priv->id);
	g_array_append_val (params, value);

	value.g_type = 0;
	g_value_init (&value, G_TYPE_BOOLEAN);

	g_closure_invoke (applet->priv->closure,
			  &value, params->len,
			  (GValue *) params->data,
			  NULL);

	for (i = 0; i < params->len; i++)
		g_value_unset (&g_array_index (params, GValue, i));
	g_array_free (params, TRUE);

	ret = g_value_get_boolean (&value);
	g_value_unset (&value);

	if (!ret) { /* FIXME */
		g_warning ("need to free the control here");

		return;
	}
}
示例#24
0
static gboolean
bind_with_closures_transform_from (GBinding     *binding,
                                   const GValue *source,
                                   GValue       *target,
                                   gpointer      data)
{
  TransformData *t_data = data;
  GValue params[3] = { G_VALUE_INIT, G_VALUE_INIT, G_VALUE_INIT };
  GValue retval = G_VALUE_INIT;
  gboolean res;

  g_value_init (&params[0], G_TYPE_BINDING);
  g_value_set_object (&params[0], binding);

  g_value_init (&params[1], G_TYPE_VALUE);
  g_value_set_boxed (&params[1], source);

  g_value_init (&params[2], G_TYPE_VALUE);
  g_value_set_boxed (&params[2], target);

  g_value_init (&retval, G_TYPE_BOOLEAN);
  g_value_set_boolean (&retval, FALSE);

  g_closure_invoke (t_data->transform_from_closure, &retval, 3, params, NULL);

  res = g_value_get_boolean (&retval);
  if (res)
    {
      const GValue *out_value = g_value_get_boxed (&params[2]);

      g_assert (out_value != NULL);

      g_value_copy (out_value, target);
    }

  g_value_unset (&params[0]);
  g_value_unset (&params[1]);
  g_value_unset (&params[2]);
  g_value_unset (&retval);

  return res;
}
示例#25
0
static gboolean
component_source_closure_callback (GObject *pollable_stream, gpointer user_data)
{
  GClosure *closure = user_data;
  GValue param_value = G_VALUE_INIT;
  GValue result_value = G_VALUE_INIT;
  gboolean retval;

  g_value_init (&result_value, G_TYPE_BOOLEAN);
  g_value_init (&param_value, G_TYPE_OBJECT);
  g_value_set_object (&param_value, pollable_stream);

  g_closure_invoke (closure, &result_value, 1, &param_value, NULL);
  retval = g_value_get_boolean (&result_value);

  g_value_unset (&param_value);
  g_value_unset (&result_value);

  return retval;
}
示例#26
0
static void update_local_credentials(OwrCandidate *candidate, GParamSpec *pspec, OwrSession *session)
{
    OwrSessionPrivate *priv;
    GSList *item;
    GObject *local_candidate;
    gchar *ufrag = NULL, *password = NULL;
    GValue params[2] = { G_VALUE_INIT, G_VALUE_INIT };

    g_return_if_fail(OWR_IS_CANDIDATE(candidate));
    g_return_if_fail(G_IS_PARAM_SPEC(pspec));
    g_return_if_fail(OWR_IS_SESSION(session));
    priv = session->priv;

    g_object_get(G_OBJECT(candidate), "ufrag", &ufrag, "password", &password, NULL);

    for (item = priv->local_candidates; item; item = item->next) {
        local_candidate = G_OBJECT(item->data);
        if (local_candidate == G_OBJECT(candidate))
            continue;
        g_signal_handlers_block_matched(local_candidate, G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA,
            0, 0, NULL, G_CALLBACK(update_local_credentials), session);
        g_object_set(local_candidate, "ufrag", ufrag, "password", password, NULL);
        g_signal_handlers_unblock_matched(local_candidate, G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA,
            0, 0, NULL, G_CALLBACK(update_local_credentials), session);
    }

    g_free(ufrag);
    g_free(password);

    if (priv->on_local_candidate_change) {
        g_value_init(&params[0], OWR_TYPE_SESSION);
        g_value_set_object(&params[0], session);
        g_value_init(&params[1], OWR_TYPE_CANDIDATE);
        g_value_set_object(&params[1], candidate);
        g_closure_invoke(priv->on_local_candidate_change, NULL, 2, (const GValue *)&params, NULL);
        g_value_unset(&params[0]);
        g_value_unset(&params[1]);
    }
}
示例#27
0
static void async_callback_job_destructor(void *data_ptr)
{
  async_call_data* data = data_ptr;

  GList* cur_elt = data->extra;
  while(cur_elt) {
    GList * type_type_elt = cur_elt;
    cur_elt = g_list_next(cur_elt);
    //GList * type_elt = cur_elt;
    cur_elt = g_list_next(cur_elt);
    GList * data_elt = cur_elt;
    cur_elt = g_list_next(cur_elt);
    switch(GPOINTER_TO_INT(type_type_elt->data)) {
      case LUA_ASYNC_TYPEID_WITH_FREE:
      case LUA_ASYNC_TYPENAME_WITH_FREE:
        {
          GList *destructor_elt = cur_elt;
          cur_elt = g_list_next(cur_elt);
          GValue to_free = G_VALUE_INIT;
          g_value_init(&to_free,G_TYPE_POINTER);
          g_value_set_pointer(&to_free,data_elt->data);
          g_closure_invoke(destructor_elt->data,NULL,1,&to_free,NULL);
          g_closure_unref (destructor_elt->data);
        }
        break;
      case LUA_ASYNC_TYPEID:
      case LUA_ASYNC_TYPENAME:
        break;
      case LUA_ASYNC_DONE:
      default:
        // should never happen
        printf("%d\n",GPOINTER_TO_INT(type_type_elt->data));
        g_assert(false);
        break;
    }
  }
  g_list_free(data->extra);
  free(data);
}
示例#28
0
static gboolean
message_source_closure_callback (SoupMessage *msg,
				 gpointer     data)
{
	GClosure *closure = data;
	GValue param = G_VALUE_INIT;
	GValue result_value = G_VALUE_INIT;
	gboolean result;

	g_value_init (&result_value, G_TYPE_BOOLEAN);

	g_value_init (&param, SOUP_TYPE_MESSAGE);
	g_value_set_object (&param, msg);

	g_closure_invoke (closure, &result_value, 1, &param, NULL);

	result = g_value_get_boolean (&result_value);
	g_value_unset (&result_value);
	g_value_unset (&param);

	return result;
}
static gboolean
message_queue_source_closure_callback (gpointer message,
                                       gpointer user_data)
{
  GClosure *closure = user_data;
  GValue param_value = G_VALUE_INIT;
  GValue result_value = G_VALUE_INIT;
  gboolean retval;

  /* The invoked function is responsible for freeing @message. */
  g_value_init (&result_value, G_TYPE_BOOLEAN);
  g_value_init (&param_value, G_TYPE_POINTER);
  g_value_set_pointer (&param_value, message);

  g_closure_invoke (closure, &result_value, 1, &param_value, NULL);
  retval = g_value_get_boolean (&result_value);

  g_value_unset (&param_value);
  g_value_unset (&result_value);

  return retval;
}
示例#30
0
/**
 * clutter_alpha_get_alpha:
 * @alpha: A #ClutterAlpha
 *
 * Query the current alpha value.
 *
 * Return Value: The current alpha value for the alpha
 *
 * Since: 0.2
 *
 * Deprecated: 1.12
 */
gdouble
clutter_alpha_get_alpha (ClutterAlpha *alpha)
{
  ClutterAlphaPrivate *priv;
  gdouble retval = 0;

  g_return_val_if_fail (CLUTTER_IS_ALPHA (alpha), 0);

  priv = alpha->priv;

  if (G_LIKELY (priv->func))
    {
      return priv->func (alpha, priv->user_data);
    }
  else if (priv->closure)
    {
      GValue params = G_VALUE_INIT;
      GValue result_value = G_VALUE_INIT;

      g_object_ref (alpha);

      g_value_init (&result_value, G_TYPE_DOUBLE);

      g_value_init (&params, CLUTTER_TYPE_ALPHA);
      g_value_set_object (&params, alpha);

      g_closure_invoke (priv->closure, &result_value, 1, &params, NULL);

      retval = g_value_get_double (&result_value);

      g_value_unset (&result_value);
      g_value_unset (&params);

      g_object_unref (alpha);
    }

  return retval;
}