]> Pileus Git - ~andy/gtk/blobdiff - gtk/gtksignal.c
Bug 131920 – gtkNotebook sends incorrect switch_page value
[~andy/gtk] / gtk / gtksignal.c
index 54a6c14f350e783dc4399c85b20f0bf86d95571c..2132088b84b440a26cec2a2f87e09b3ac93d0f89 100644 (file)
  * Boston, MA 02111-1307, USA.
  */
 
-#include       "gtksignal.h"
-#include       "gtkargcollector.c"
-#include       "gtkmarshal.c"
+#undef GTK_DISABLE_DEPRECATED
 
+#include       <config.h>
+#include       "gtksignal.h"
+#include "gtkalias.h"
 
 /* the real parameter limit is of course given by GSignal, bu we need
  * an upper limit for the implementations. so this should be adjusted
@@ -44,9 +45,10 @@ gtk_signal_newv (const gchar         *name,
   
   g_return_val_if_fail (n_params < SIGNAL_MAX_PARAMS, 0);
   
-  closure = g_signal_type_cclosure_new (object_type, function_offset);
+  closure = function_offset ? g_signal_type_cclosure_new (object_type, function_offset) : NULL;
   
-  return g_signal_newv (name, object_type, signal_flags, closure, NULL, NULL, marshaller, return_val, n_params, params);
+  return g_signal_newv (name, object_type, (GSignalFlags)signal_flags, closure,
+                       NULL, NULL, marshaller, return_val, n_params, params);
 }
 
 guint
@@ -99,21 +101,21 @@ gtk_signal_emit_stop_by_name (GtkObject   *object,
 
 void
 gtk_signal_connect_object_while_alive (GtkObject    *object,
-                                      const gchar  *signal,
+                                      const gchar  *name,
                                       GtkSignalFunc func,
                                       GtkObject    *alive_object)
 {
   g_return_if_fail (GTK_IS_OBJECT (object));
   
   g_signal_connect_closure_by_id (object,
-                                 g_signal_lookup (signal, G_OBJECT_TYPE (object)), 0,
-                                 g_cclosure_new_object_swap (func, alive_object),
+                                 g_signal_lookup (name, G_OBJECT_TYPE (object)), 0,
+                                 g_cclosure_new_object_swap (func, G_OBJECT (alive_object)),
                                  FALSE);
 }
 
 void
 gtk_signal_connect_while_alive (GtkObject    *object,
-                               const gchar  *signal,
+                               const gchar  *name,
                                GtkSignalFunc func,
                                gpointer      func_data,
                                GtkObject    *alive_object)
@@ -125,12 +127,12 @@ gtk_signal_connect_while_alive (GtkObject    *object,
   closure = g_cclosure_new (func, func_data, NULL);
   g_object_watch_closure (G_OBJECT (alive_object), closure);
   g_signal_connect_closure_by_id (object,
-                                 g_signal_lookup (signal, G_OBJECT_TYPE (object)), 0,
+                                 g_signal_lookup (name, G_OBJECT_TYPE (object)), 0,
                                  closure,
                                  FALSE);
 }
 
-guint
+gulong
 gtk_signal_connect_full (GtkObject           *object,
                         const gchar         *name,
                         GtkSignalFunc        func,
@@ -166,9 +168,9 @@ gtk_signal_compat_matched (GtkObject       *object,
 
   switch (action)
     {
-    case 0:  n_handlers = g_signal_handlers_disconnect_matched (object, match, 0, 0, NULL, func, data);         break;
-    case 1:  n_handlers = g_signal_handlers_block_matched (object, match, 0, 0, NULL, func, data);      break;
-    case 2:  n_handlers = g_signal_handlers_unblock_matched (object, match, 0, 0, NULL, func, data);    break;
+    case 0:  n_handlers = g_signal_handlers_disconnect_matched (object, match, 0, 0, NULL, (gpointer) func, data);      break;
+    case 1:  n_handlers = g_signal_handlers_block_matched (object, match, 0, 0, NULL, (gpointer) func, data);   break;
+    case 2:  n_handlers = g_signal_handlers_unblock_matched (object, match, 0, 0, NULL, (gpointer) func, data);         break;
     default: n_handlers = 0;                                                                            break;
     }
   
@@ -255,7 +257,7 @@ gtk_arg_set_from_value (GtkArg  *arg,
     case G_TYPE_STRING:                if (copy_string)
       GTK_VALUE_STRING (*arg) = g_value_dup_string (value);
     else
-      GTK_VALUE_STRING (*arg) = g_value_get_string (value);
+      GTK_VALUE_STRING (*arg) = (char *) g_value_get_string (value);
     break;
     default:
       return FALSE;
@@ -287,7 +289,7 @@ gtk_argloc_set_from_value (GtkArg  *arg,
     case G_TYPE_STRING:                if (copy_string)
       *GTK_RETLOC_STRING (*arg) = g_value_dup_string (value);
     else
-      *GTK_RETLOC_STRING (*arg) = g_value_get_string (value);
+      *GTK_RETLOC_STRING (*arg) = (char *) g_value_get_string (value);
     break;
     default:
       return FALSE;
@@ -321,11 +323,12 @@ gtk_signal_emitv (GtkObject *object,
       GValue *value = params + 1 + i;
       GtkArg *arg = args + i;
       
-      g_value_init (value, arg->type);
+      g_value_init (value, arg->type & ~G_SIGNAL_TYPE_STATIC_SCOPE);
       if (!gtk_arg_static_to_value (arg, value))
        {
          g_warning ("%s: failed to convert arg type `%s' to value type `%s'",
-                    G_STRLOC, g_type_name (arg->type), g_type_name (G_VALUE_TYPE (value)));
+                    G_STRLOC, g_type_name (arg->type & ~G_SIGNAL_TYPE_STATIC_SCOPE),
+                    g_type_name (G_VALUE_TYPE (value)));
          return;
        }
     }
@@ -344,93 +347,6 @@ gtk_signal_emitv (GtkObject *object,
   g_value_unset (params + 0);
 }
 
-static gboolean
-gtk_signal_collect_args (GtkArg        *args,
-                        guint          n_args,
-                        const GtkType *arg_types,
-                        GtkType        return_type,
-                        va_list        var_args)
-{
-  register GtkArg *last_arg;
-  register gboolean failed = FALSE;
-  
-  for (last_arg = args + n_args; args < last_arg; args++)
-    {
-      register gchar *error;
-      
-      args->name = NULL;
-      args->type = *(arg_types++);
-      GTK_ARG_COLLECT_VALUE (args,
-                            var_args,
-                            error);
-      if (error)
-       {
-         failed = TRUE;
-         g_warning ("gtk_signal_collect_args(): %s", error);
-         g_free (error);
-       }
-    }
-  
-  args->type = return_type;
-  args->name = NULL;
-  
-  return_type = GTK_FUNDAMENTAL_TYPE (return_type);
-  if (return_type != G_TYPE_NONE)
-    {
-      if (return_type != 0) /* FIXME: check for IS_ARG */
-       {
-         GTK_VALUE_POINTER (*args) = va_arg (var_args, gpointer);
-         
-         if (GTK_VALUE_POINTER (*args) == NULL)
-           {
-             failed = TRUE;
-             g_warning ("gtk_signal_collect_args(): invalid NULL pointer for return argument type `%s'",
-                        gtk_type_name (args->type));
-           }
-       }
-      else
-       {
-         failed = TRUE;
-         g_warning ("gtk_signal_collect_args(): unsupported return argument type `%s'",
-                    gtk_type_name (args->type));
-       }
-    }
-  else
-    GTK_VALUE_POINTER (*args) = NULL;
-  
-  return failed;
-}
-
-#if 0
-void
-gtk_signal_emit (GtkObject *object,
-                guint      signal_id,
-                ...)
-{
-  GtkArg args[SIGNAL_MAX_PARAMS + 1];
-  GSignalQuery query;
-  gboolean abort;
-  va_list var_args;
-  
-  g_return_if_fail (GTK_IS_OBJECT (object));
-  
-  g_signal_query (signal_id, &query);
-  g_return_if_fail (query.signal_id != 0);
-  g_return_if_fail (query.n_params < SIGNAL_MAX_PARAMS);
-  
-  va_start (var_args, signal_id);
-  abort = gtk_signal_collect_args (args,
-                                  query.n_params,
-                                  query.param_types,
-                                  query.return_type,
-                                  var_args);
-  va_end (var_args);
-  
-  if (!abort)
-    gtk_signal_emitv (object, signal_id, args);
-}
-#endif
-
 void
 gtk_signal_emit (GtkObject *object,
                 guint      signal_id,
@@ -450,9 +366,7 @@ gtk_signal_emit_by_name (GtkObject   *object,
                         const gchar *name,
                         ...)
 {
-  GtkArg args[SIGNAL_MAX_PARAMS + 1];
   GSignalQuery query;
-  gboolean abort;
   va_list var_args;
   
   g_return_if_fail (GTK_IS_OBJECT (object));
@@ -460,18 +374,10 @@ gtk_signal_emit_by_name (GtkObject   *object,
   
   g_signal_query (g_signal_lookup (name, GTK_OBJECT_TYPE (object)), &query);
   g_return_if_fail (query.signal_id != 0);
-  g_return_if_fail (query.n_params < SIGNAL_MAX_PARAMS);
   
   va_start (var_args, name);
-  abort = gtk_signal_collect_args (args,
-                                  query.n_params,
-                                  query.param_types,
-                                  query.return_type,
-                                  var_args);
+  g_signal_emit_valist (G_OBJECT (object), query.signal_id, 0, var_args);
   va_end (var_args);
-  
-  if (!abort)
-    gtk_signal_emitv (object, query.signal_id, args);
 }
 
 void
@@ -483,3 +389,6 @@ gtk_signal_emitv_by_name (GtkObject   *object,
   
   gtk_signal_emitv (object, g_signal_lookup (name, GTK_OBJECT_TYPE (object)), args);
 }
+
+#define __GTK_SIGNAL_C__
+#include "gtkaliasdef.c"