Blame gtk/gtksignal.c

Packit 98cdb6
/* GTK - The GIMP Toolkit
Packit 98cdb6
 * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
Packit 98cdb6
 *
Packit 98cdb6
 * This library is free software; you can redistribute it and/or
Packit 98cdb6
 * modify it under the terms of the GNU Lesser General Public
Packit 98cdb6
 * License as published by the Free Software Foundation; either
Packit 98cdb6
 * version 2 of the License, or (at your option) any later version.
Packit 98cdb6
 *
Packit 98cdb6
 * This library is distributed in the hope that it will be useful,
Packit 98cdb6
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 98cdb6
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit 98cdb6
 * Lesser General Public License for more details.
Packit 98cdb6
 *
Packit 98cdb6
 * You should have received a copy of the GNU Lesser General Public
Packit 98cdb6
 * License along with this library; if not, write to the
Packit 98cdb6
 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Packit 98cdb6
 * Boston, MA 02111-1307, USA.
Packit 98cdb6
 */
Packit 98cdb6
Packit 98cdb6
#undef GTK_DISABLE_DEPRECATED
Packit 98cdb6
Packit 98cdb6
#include	<config.h>
Packit 98cdb6
#include	"gtksignal.h"
Packit 98cdb6
#include "gtkalias.h"
Packit 98cdb6
Packit 98cdb6
/* the real parameter limit is of course given by GSignal, bu we need
Packit 98cdb6
 * an upper limit for the implementations. so this should be adjusted
Packit 98cdb6
 * with any future changes on the GSignal side of things.
Packit 98cdb6
 */
Packit 98cdb6
#define	SIGNAL_MAX_PARAMS	12
Packit 98cdb6
Packit 98cdb6
Packit 98cdb6
/* --- functions --- */
Packit 98cdb6
guint
Packit 98cdb6
gtk_signal_newv (const gchar         *name,
Packit 98cdb6
		 GtkSignalRunType     signal_flags,
Packit 98cdb6
		 GType                object_type,
Packit 98cdb6
		 guint                function_offset,
Packit 98cdb6
		 GSignalCMarshaller   marshaller,
Packit 98cdb6
		 GType                return_val,
Packit 98cdb6
		 guint                n_params,
Packit 98cdb6
		 GType               *params)
Packit 98cdb6
{
Packit 98cdb6
  GClosure *closure;
Packit 98cdb6
  
Packit 98cdb6
  g_return_val_if_fail (n_params < SIGNAL_MAX_PARAMS, 0);
Packit 98cdb6
  
Packit 98cdb6
  closure = function_offset ? g_signal_type_cclosure_new (object_type, function_offset) : NULL;
Packit 98cdb6
  
Packit 98cdb6
  return g_signal_newv (name, object_type, (GSignalFlags)signal_flags, closure,
Packit 98cdb6
			NULL, NULL, marshaller, return_val, n_params, params);
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
guint
Packit 98cdb6
gtk_signal_new (const gchar         *name,
Packit 98cdb6
		GtkSignalRunType     signal_flags,
Packit 98cdb6
		GType                object_type,
Packit 98cdb6
		guint                function_offset,
Packit 98cdb6
		GSignalCMarshaller   marshaller,
Packit 98cdb6
		GType                return_val,
Packit 98cdb6
		guint                n_params,
Packit 98cdb6
		...)
Packit 98cdb6
{
Packit 98cdb6
  GType *params;
Packit 98cdb6
  guint signal_id;
Packit 98cdb6
  
Packit 98cdb6
  if (n_params)
Packit 98cdb6
    {
Packit 98cdb6
      va_list args;
Packit 98cdb6
      guint i;
Packit 98cdb6
      
Packit 98cdb6
      params = g_new (GType, n_params);
Packit 98cdb6
      va_start (args, n_params);
Packit 98cdb6
      for (i = 0; i < n_params; i++)
Packit 98cdb6
	params[i] = va_arg (args, GType);
Packit 98cdb6
      va_end (args);
Packit 98cdb6
    }
Packit 98cdb6
  else
Packit 98cdb6
    params = NULL;
Packit 98cdb6
  signal_id = gtk_signal_newv (name,
Packit 98cdb6
			       signal_flags,
Packit 98cdb6
			       object_type,
Packit 98cdb6
			       function_offset,
Packit 98cdb6
			       marshaller,
Packit 98cdb6
			       return_val,
Packit 98cdb6
			       n_params,
Packit 98cdb6
			       params);
Packit 98cdb6
  g_free (params);
Packit 98cdb6
  
Packit 98cdb6
  return signal_id;
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
void
Packit 98cdb6
gtk_signal_emit_stop_by_name (GtkObject   *object,
Packit 98cdb6
			      const gchar *name)
Packit 98cdb6
{
Packit 98cdb6
  g_return_if_fail (GTK_IS_OBJECT (object));
Packit 98cdb6
  
Packit 98cdb6
  g_signal_stop_emission (object, g_signal_lookup (name, G_OBJECT_TYPE (object)), 0);
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
void
Packit 98cdb6
gtk_signal_connect_object_while_alive (GtkObject    *object,
Packit 98cdb6
				       const gchar  *name,
Packit 98cdb6
				       GCallback     func,
Packit 98cdb6
				       GtkObject    *alive_object)
Packit 98cdb6
{
Packit 98cdb6
  g_return_if_fail (GTK_IS_OBJECT (object));
Packit 98cdb6
  
Packit 98cdb6
  g_signal_connect_closure_by_id (object,
Packit 98cdb6
				  g_signal_lookup (name, G_OBJECT_TYPE (object)), 0,
Packit 98cdb6
				  g_cclosure_new_object_swap (func, G_OBJECT (alive_object)),
Packit 98cdb6
				  FALSE);
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
void
Packit 98cdb6
gtk_signal_connect_while_alive (GtkObject    *object,
Packit 98cdb6
				const gchar  *name,
Packit 98cdb6
				GCallback     func,
Packit 98cdb6
				gpointer      func_data,
Packit 98cdb6
				GtkObject    *alive_object)
Packit 98cdb6
{
Packit 98cdb6
  GClosure *closure;
Packit 98cdb6
Packit 98cdb6
  g_return_if_fail (GTK_IS_OBJECT (object));
Packit 98cdb6
Packit 98cdb6
  closure = g_cclosure_new (func, func_data, NULL);
Packit 98cdb6
  g_object_watch_closure (G_OBJECT (alive_object), closure);
Packit 98cdb6
  g_signal_connect_closure_by_id (object,
Packit 98cdb6
				  g_signal_lookup (name, G_OBJECT_TYPE (object)), 0,
Packit 98cdb6
				  closure,
Packit 98cdb6
				  FALSE);
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
gulong
Packit 98cdb6
gtk_signal_connect_full (GtkObject           *object,
Packit 98cdb6
			 const gchar         *name,
Packit 98cdb6
			 GCallback            func,
Packit 98cdb6
			 GtkCallbackMarshal   unsupported,
Packit 98cdb6
			 gpointer             data,
Packit 98cdb6
			 GDestroyNotify       destroy_func,
Packit 98cdb6
			 gint                 object_signal,
Packit 98cdb6
			 gint                 after)
Packit 98cdb6
{
Packit 98cdb6
  g_return_val_if_fail (GTK_IS_OBJECT (object), 0);
Packit 98cdb6
  g_return_val_if_fail (unsupported == NULL, 0);
Packit 98cdb6
  
Packit 98cdb6
  return g_signal_connect_closure_by_id (object,
Packit 98cdb6
					 g_signal_lookup (name, G_OBJECT_TYPE (object)), 0,
Packit 98cdb6
					 (object_signal
Packit 98cdb6
					  ? g_cclosure_new_swap
Packit 98cdb6
					  : g_cclosure_new) (func,
Packit 98cdb6
							     data,
Packit 98cdb6
							     (GClosureNotify) destroy_func),
Packit 98cdb6
					 after);
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
void
Packit 98cdb6
gtk_signal_compat_matched (GtkObject       *object,
Packit 98cdb6
			   GCallback        func,
Packit 98cdb6
			   gpointer         data,
Packit 98cdb6
			   GSignalMatchType match,
Packit 98cdb6
			   guint            action)
Packit 98cdb6
{
Packit 98cdb6
  guint n_handlers;
Packit 98cdb6
  
Packit 98cdb6
  g_return_if_fail (GTK_IS_OBJECT (object));
Packit 98cdb6
Packit 98cdb6
  switch (action)
Packit 98cdb6
    {
Packit 98cdb6
    case 0:  n_handlers = g_signal_handlers_disconnect_matched (object, match, 0, 0, NULL, (gpointer) func, data);	 break;
Packit 98cdb6
    case 1:  n_handlers = g_signal_handlers_block_matched (object, match, 0, 0, NULL, (gpointer) func, data);	 break;
Packit 98cdb6
    case 2:  n_handlers = g_signal_handlers_unblock_matched (object, match, 0, 0, NULL, (gpointer) func, data);	 break;
Packit 98cdb6
    default: n_handlers = 0;										 break;
Packit 98cdb6
    }
Packit 98cdb6
  
Packit 98cdb6
  if (!n_handlers)
Packit 98cdb6
    g_warning ("unable to find signal handler for object(%s:%p) with func(%p) and data(%p)",
Packit 98cdb6
	       G_OBJECT_TYPE_NAME (object), object, func, data);
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
static inline gboolean
Packit 98cdb6
gtk_arg_to_value (GtkArg *arg,
Packit 98cdb6
		  GValue *value)
Packit 98cdb6
{
Packit 98cdb6
  switch (G_TYPE_FUNDAMENTAL (arg->type))
Packit 98cdb6
    {
Packit 98cdb6
    case G_TYPE_CHAR:		g_value_set_char (value, GTK_VALUE_CHAR (*arg));	break;
Packit 98cdb6
    case G_TYPE_UCHAR:		g_value_set_uchar (value, GTK_VALUE_UCHAR (*arg));	break;
Packit 98cdb6
    case G_TYPE_BOOLEAN:	g_value_set_boolean (value, GTK_VALUE_BOOL (*arg));	break;
Packit 98cdb6
    case G_TYPE_INT:		g_value_set_int (value, GTK_VALUE_INT (*arg));		break;
Packit 98cdb6
    case G_TYPE_UINT:		g_value_set_uint (value, GTK_VALUE_UINT (*arg));	break;
Packit 98cdb6
    case G_TYPE_LONG:		g_value_set_long (value, GTK_VALUE_LONG (*arg));	break;
Packit 98cdb6
    case G_TYPE_ULONG:		g_value_set_ulong (value, GTK_VALUE_ULONG (*arg));	break;
Packit 98cdb6
    case G_TYPE_ENUM:		g_value_set_enum (value, GTK_VALUE_ENUM (*arg));	break;
Packit 98cdb6
    case G_TYPE_FLAGS:		g_value_set_flags (value, GTK_VALUE_FLAGS (*arg));	break;
Packit 98cdb6
    case G_TYPE_FLOAT:		g_value_set_float (value, GTK_VALUE_FLOAT (*arg));	break;
Packit 98cdb6
    case G_TYPE_DOUBLE:		g_value_set_double (value, GTK_VALUE_DOUBLE (*arg));	break;
Packit 98cdb6
    case G_TYPE_STRING:		g_value_set_string (value, GTK_VALUE_STRING (*arg));	break;
Packit 98cdb6
    case G_TYPE_BOXED:		g_value_set_boxed (value, GTK_VALUE_BOXED (*arg));	break;
Packit 98cdb6
    case G_TYPE_POINTER:	g_value_set_pointer (value, GTK_VALUE_POINTER (*arg));	break;
Packit 98cdb6
    case G_TYPE_OBJECT:		g_value_set_object (value, GTK_VALUE_POINTER (*arg));	break;
Packit 98cdb6
    default:
Packit 98cdb6
      return FALSE;
Packit 98cdb6
    }
Packit 98cdb6
  return TRUE;
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
static inline gboolean
Packit 98cdb6
gtk_arg_static_to_value (GtkArg *arg,
Packit 98cdb6
			 GValue *value)
Packit 98cdb6
{
Packit 98cdb6
  switch (G_TYPE_FUNDAMENTAL (arg->type))
Packit 98cdb6
    {
Packit 98cdb6
    case G_TYPE_CHAR:		g_value_set_char (value, GTK_VALUE_CHAR (*arg));		break;
Packit 98cdb6
    case G_TYPE_UCHAR:		g_value_set_uchar (value, GTK_VALUE_UCHAR (*arg));		break;
Packit 98cdb6
    case G_TYPE_BOOLEAN:	g_value_set_boolean (value, GTK_VALUE_BOOL (*arg));		break;
Packit 98cdb6
    case G_TYPE_INT:		g_value_set_int (value, GTK_VALUE_INT (*arg));			break;
Packit 98cdb6
    case G_TYPE_UINT:		g_value_set_uint (value, GTK_VALUE_UINT (*arg));		break;
Packit 98cdb6
    case G_TYPE_LONG:		g_value_set_long (value, GTK_VALUE_LONG (*arg));		break;
Packit 98cdb6
    case G_TYPE_ULONG:		g_value_set_ulong (value, GTK_VALUE_ULONG (*arg));		break;
Packit 98cdb6
    case G_TYPE_ENUM:		g_value_set_enum (value, GTK_VALUE_ENUM (*arg));		break;
Packit 98cdb6
    case G_TYPE_FLAGS:		g_value_set_flags (value, GTK_VALUE_FLAGS (*arg));		break;
Packit 98cdb6
    case G_TYPE_FLOAT:		g_value_set_float (value, GTK_VALUE_FLOAT (*arg));		break;
Packit 98cdb6
    case G_TYPE_DOUBLE:		g_value_set_double (value, GTK_VALUE_DOUBLE (*arg));		break;
Packit 98cdb6
    case G_TYPE_STRING:		g_value_set_static_string (value, GTK_VALUE_STRING (*arg));	break;
Packit 98cdb6
    case G_TYPE_BOXED:		g_value_set_static_boxed (value, GTK_VALUE_BOXED (*arg));	break;
Packit 98cdb6
    case G_TYPE_POINTER:	g_value_set_pointer (value, GTK_VALUE_POINTER (*arg));		break;
Packit 98cdb6
    case G_TYPE_OBJECT:		g_value_set_object (value, GTK_VALUE_POINTER (*arg));		break;
Packit 98cdb6
    default:
Packit 98cdb6
      return FALSE;
Packit 98cdb6
    }
Packit 98cdb6
  return TRUE;
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
static inline gboolean
Packit 98cdb6
gtk_arg_set_from_value (GtkArg  *arg,
Packit 98cdb6
			GValue  *value,
Packit 98cdb6
			gboolean copy_string)
Packit 98cdb6
{
Packit 98cdb6
  switch (G_TYPE_FUNDAMENTAL (arg->type))
Packit 98cdb6
    {
Packit 98cdb6
    case G_TYPE_CHAR:		GTK_VALUE_CHAR (*arg) = g_value_get_char (value);	break;
Packit 98cdb6
    case G_TYPE_UCHAR:		GTK_VALUE_UCHAR (*arg) = g_value_get_uchar (value);	break;
Packit 98cdb6
    case G_TYPE_BOOLEAN:	GTK_VALUE_BOOL (*arg) = g_value_get_boolean (value);	break;
Packit 98cdb6
    case G_TYPE_INT:		GTK_VALUE_INT (*arg) = g_value_get_int (value);		break;
Packit 98cdb6
    case G_TYPE_UINT:		GTK_VALUE_UINT (*arg) = g_value_get_uint (value);	break;
Packit 98cdb6
    case G_TYPE_LONG:		GTK_VALUE_LONG (*arg) = g_value_get_long (value);	break;
Packit 98cdb6
    case G_TYPE_ULONG:		GTK_VALUE_ULONG (*arg) = g_value_get_ulong (value);	break;
Packit 98cdb6
    case G_TYPE_ENUM:		GTK_VALUE_ENUM (*arg) = g_value_get_enum (value);	break;
Packit 98cdb6
    case G_TYPE_FLAGS:		GTK_VALUE_FLAGS (*arg) = g_value_get_flags (value);	break;
Packit 98cdb6
    case G_TYPE_FLOAT:		GTK_VALUE_FLOAT (*arg) = g_value_get_float (value);	break;
Packit 98cdb6
    case G_TYPE_DOUBLE:		GTK_VALUE_DOUBLE (*arg) = g_value_get_double (value);	break;
Packit 98cdb6
    case G_TYPE_BOXED:		GTK_VALUE_BOXED (*arg) = g_value_get_boxed (value);	break;
Packit 98cdb6
    case G_TYPE_POINTER:	GTK_VALUE_POINTER (*arg) = g_value_get_pointer (value);	break;
Packit 98cdb6
    case G_TYPE_OBJECT:		GTK_VALUE_POINTER (*arg) = g_value_get_object (value);	break;
Packit 98cdb6
    case G_TYPE_STRING:		if (copy_string)
Packit 98cdb6
      GTK_VALUE_STRING (*arg) = g_value_dup_string (value);
Packit 98cdb6
    else
Packit 98cdb6
      GTK_VALUE_STRING (*arg) = (char *) g_value_get_string (value);
Packit 98cdb6
    break;
Packit 98cdb6
    default:
Packit 98cdb6
      return FALSE;
Packit 98cdb6
    }
Packit 98cdb6
  return TRUE;
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
static inline gboolean
Packit 98cdb6
gtk_argloc_set_from_value (GtkArg  *arg,
Packit 98cdb6
			   GValue  *value,
Packit 98cdb6
			   gboolean copy_string)
Packit 98cdb6
{
Packit 98cdb6
  switch (G_TYPE_FUNDAMENTAL (arg->type))
Packit 98cdb6
    {
Packit 98cdb6
    case G_TYPE_CHAR:		*GTK_RETLOC_CHAR (*arg) = g_value_get_char (value);	  break;
Packit 98cdb6
    case G_TYPE_UCHAR:		*GTK_RETLOC_UCHAR (*arg) = g_value_get_uchar (value);	  break;
Packit 98cdb6
    case G_TYPE_BOOLEAN:	*GTK_RETLOC_BOOL (*arg) = g_value_get_boolean (value);	  break;
Packit 98cdb6
    case G_TYPE_INT:		*GTK_RETLOC_INT (*arg) = g_value_get_int (value);	  break;
Packit 98cdb6
    case G_TYPE_UINT:		*GTK_RETLOC_UINT (*arg) = g_value_get_uint (value);	  break;
Packit 98cdb6
    case G_TYPE_LONG:		*GTK_RETLOC_LONG (*arg) = g_value_get_long (value);	  break;
Packit 98cdb6
    case G_TYPE_ULONG:		*GTK_RETLOC_ULONG (*arg) = g_value_get_ulong (value);	  break;
Packit 98cdb6
    case G_TYPE_ENUM:		*GTK_RETLOC_ENUM (*arg) = g_value_get_enum (value);	  break;
Packit 98cdb6
    case G_TYPE_FLAGS:		*GTK_RETLOC_FLAGS (*arg) = g_value_get_flags (value);	  break;
Packit 98cdb6
    case G_TYPE_FLOAT:		*GTK_RETLOC_FLOAT (*arg) = g_value_get_float (value);	  break;
Packit 98cdb6
    case G_TYPE_DOUBLE:		*GTK_RETLOC_DOUBLE (*arg) = g_value_get_double (value);	  break;
Packit 98cdb6
    case G_TYPE_BOXED:		*GTK_RETLOC_BOXED (*arg) = g_value_get_boxed (value);	  break;
Packit 98cdb6
    case G_TYPE_POINTER:	*GTK_RETLOC_POINTER (*arg) = g_value_get_pointer (value); break;
Packit 98cdb6
    case G_TYPE_OBJECT:		*GTK_RETLOC_POINTER (*arg) = g_value_get_object (value);  break;
Packit 98cdb6
    case G_TYPE_STRING:		if (copy_string)
Packit 98cdb6
      *GTK_RETLOC_STRING (*arg) = g_value_dup_string (value);
Packit 98cdb6
    else
Packit 98cdb6
      *GTK_RETLOC_STRING (*arg) = (char *) g_value_get_string (value);
Packit 98cdb6
    break;
Packit 98cdb6
    default:
Packit 98cdb6
      return FALSE;
Packit 98cdb6
    }
Packit 98cdb6
  return TRUE;
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
void
Packit 98cdb6
gtk_signal_emitv (GtkObject *object,
Packit 98cdb6
		  guint      signal_id,
Packit 98cdb6
		  GtkArg    *args)
Packit 98cdb6
{
Packit 98cdb6
  GSignalQuery query;
Packit 98cdb6
  GValue params[SIGNAL_MAX_PARAMS + 1] = { { 0, }, };
Packit 98cdb6
  GValue rvalue = { 0, };
Packit 98cdb6
  guint i;
Packit 98cdb6
  
Packit 98cdb6
  g_return_if_fail (GTK_IS_OBJECT (object));
Packit 98cdb6
  
Packit 98cdb6
  g_signal_query (signal_id, &query);
Packit 98cdb6
  g_return_if_fail (query.signal_id != 0);
Packit 98cdb6
  g_return_if_fail (g_type_is_a (GTK_OBJECT_TYPE (object), query.itype));
Packit 98cdb6
  g_return_if_fail (query.n_params < SIGNAL_MAX_PARAMS);
Packit 98cdb6
  if (query.n_params > 0)
Packit 98cdb6
    g_return_if_fail (args != NULL);
Packit 98cdb6
  
Packit 98cdb6
  g_value_init (params + 0, GTK_OBJECT_TYPE (object));
Packit 98cdb6
  g_value_set_object (params + 0, G_OBJECT (object));
Packit 98cdb6
  for (i = 0; i < query.n_params; i++)
Packit 98cdb6
    {
Packit 98cdb6
      GValue *value = params + 1 + i;
Packit 98cdb6
      GtkArg *arg = args + i;
Packit 98cdb6
      
Packit 98cdb6
      g_value_init (value, arg->type & ~G_SIGNAL_TYPE_STATIC_SCOPE);
Packit 98cdb6
      if (!gtk_arg_static_to_value (arg, value))
Packit 98cdb6
	{
Packit 98cdb6
	  g_warning ("%s: failed to convert arg type `%s' to value type `%s'",
Packit 98cdb6
		     G_STRLOC, g_type_name (arg->type & ~G_SIGNAL_TYPE_STATIC_SCOPE),
Packit 98cdb6
		     g_type_name (G_VALUE_TYPE (value)));
Packit 98cdb6
	  return;
Packit 98cdb6
	}
Packit 98cdb6
    }
Packit 98cdb6
  if (query.return_type != G_TYPE_NONE)
Packit 98cdb6
    g_value_init (&rvalue, query.return_type);
Packit 98cdb6
  
Packit 98cdb6
  g_signal_emitv (params, signal_id, 0, &rvalue);
Packit 98cdb6
  
Packit 98cdb6
  if (query.return_type != G_TYPE_NONE)
Packit 98cdb6
    {
Packit 98cdb6
      gtk_argloc_set_from_value (args + query.n_params, &rvalue, TRUE);
Packit 98cdb6
      g_value_unset (&rvalue);
Packit 98cdb6
    }
Packit 98cdb6
  for (i = 0; i < query.n_params; i++)
Packit 98cdb6
    g_value_unset (params + 1 + i);
Packit 98cdb6
  g_value_unset (params + 0);
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
void
Packit 98cdb6
gtk_signal_emit (GtkObject *object,
Packit 98cdb6
		 guint      signal_id,
Packit 98cdb6
		 ...)
Packit 98cdb6
{
Packit 98cdb6
  va_list var_args;
Packit 98cdb6
  
Packit 98cdb6
  g_return_if_fail (GTK_IS_OBJECT (object));
Packit 98cdb6
Packit 98cdb6
  va_start (var_args, signal_id);
Packit 98cdb6
  g_signal_emit_valist (G_OBJECT (object), signal_id, 0, var_args);
Packit 98cdb6
  va_end (var_args);
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
void
Packit 98cdb6
gtk_signal_emit_by_name (GtkObject   *object,
Packit 98cdb6
			 const gchar *name,
Packit 98cdb6
			 ...)
Packit 98cdb6
{
Packit 98cdb6
  GSignalQuery query;
Packit 98cdb6
  va_list var_args;
Packit 98cdb6
  
Packit 98cdb6
  g_return_if_fail (GTK_IS_OBJECT (object));
Packit 98cdb6
  g_return_if_fail (name != NULL);
Packit 98cdb6
  
Packit 98cdb6
  g_signal_query (g_signal_lookup (name, GTK_OBJECT_TYPE (object)), &query);
Packit 98cdb6
  g_return_if_fail (query.signal_id != 0);
Packit 98cdb6
  
Packit 98cdb6
  va_start (var_args, name);
Packit 98cdb6
  g_signal_emit_valist (G_OBJECT (object), query.signal_id, 0, var_args);
Packit 98cdb6
  va_end (var_args);
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
void
Packit 98cdb6
gtk_signal_emitv_by_name (GtkObject   *object,
Packit 98cdb6
			  const gchar *name,
Packit 98cdb6
			  GtkArg      *args)
Packit 98cdb6
{
Packit 98cdb6
  g_return_if_fail (GTK_IS_OBJECT (object));
Packit 98cdb6
  
Packit 98cdb6
  gtk_signal_emitv (object, g_signal_lookup (name, GTK_OBJECT_TYPE (object)), args);
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
#define __GTK_SIGNAL_C__
Packit 98cdb6
#include "gtkaliasdef.c"