]> Pileus Git - ~andy/gtk/blobdiff - gtk/gtksignal.c
Remove reallocate-redraws property. This is something that only a widget
[~andy/gtk] / gtk / gtksignal.c
index 004b7293fcb2d4b4569f70363b4df123e747729e..b7ed0fb1fc24970964e1bd5cd5aeae1c6cc7540d 100644 (file)
@@ -44,9 +44,9 @@ gtk_signal_newv (const gchar         *name,
   
   g_return_val_if_fail (n_params < SIGNAL_MAX_PARAMS, 0);
   
-  closure = g_signal_type_closure_new (object_type, function_offset);
+  closure = g_signal_type_cclosure_new (object_type, function_offset);
   
-  return g_signal_newv (name, object_type, signal_flags, closure, NULL, marshaller, return_val, n_params, params);
+  return g_signal_newv (name, object_type, signal_flags, closure, NULL, NULL, marshaller, return_val, n_params, params);
 }
 
 guint
@@ -94,7 +94,7 @@ gtk_signal_emit_stop_by_name (GtkObject   *object,
 {
   g_return_if_fail (GTK_IS_OBJECT (object));
   
-  g_signal_stop_emission (object, g_signal_lookup (name, G_OBJECT_TYPE (object)));
+  g_signal_stop_emission (object, g_signal_lookup (name, G_OBJECT_TYPE (object)), 0);
 }
 
 void
@@ -105,10 +105,10 @@ gtk_signal_connect_object_while_alive (GtkObject    *object,
 {
   g_return_if_fail (GTK_IS_OBJECT (object));
   
-  g_signal_connect_closure (object,
-                           g_signal_lookup (signal, G_OBJECT_TYPE (object)),
-                           g_cclosure_new_object_swap (func, alive_object),
-                           FALSE);
+  g_signal_connect_closure_by_id (object,
+                                 g_signal_lookup (signal, G_OBJECT_TYPE (object)), 0,
+                                 g_cclosure_new_object_swap (func, alive_object),
+                                 FALSE);
 }
 
 void
@@ -124,10 +124,10 @@ 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 (object,
-                           g_signal_lookup (signal, G_OBJECT_TYPE (object)),
-                           closure,
-                           FALSE);
+  g_signal_connect_closure_by_id (object,
+                                 g_signal_lookup (signal, G_OBJECT_TYPE (object)), 0,
+                                 closure,
+                                 FALSE);
 }
 
 guint
@@ -143,14 +143,14 @@ gtk_signal_connect_full (GtkObject           *object,
   g_return_val_if_fail (GTK_IS_OBJECT (object), 0);
   g_return_val_if_fail (unsupported == NULL, 0);
   
-  return g_signal_connect_closure (object,
-                                  g_signal_lookup (name, G_OBJECT_TYPE (object)),
-                                  (object_signal
-                                   ? g_cclosure_new_swap
-                                   : g_cclosure_new) (func,
-                                                      data,
-                                                      (GClosureNotify) destroy_func),
-                                  after);
+  return g_signal_connect_closure_by_id (object,
+                                        g_signal_lookup (name, G_OBJECT_TYPE (object)), 0,
+                                        (object_signal
+                                         ? g_cclosure_new_swap
+                                         : g_cclosure_new) (func,
+                                                            data,
+                                                            (GClosureNotify) destroy_func),
+                                        after);
 }
 
 void
@@ -160,22 +160,21 @@ gtk_signal_compat_matched (GtkObject       *object,
                           GSignalMatchType match,
                           guint            action)
 {
-  guint id;
+  guint n_handlers;
   
   g_return_if_fail (GTK_IS_OBJECT (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;
+    default: n_handlers = 0;                                                                            break;
+    }
   
-  id = g_signal_handler_find (object, match, 0, NULL, func, data);
-  
-  if (!id)
-    g_warning ("unable to find signal handler for object(%p) with func(%p) and data(%p)",
-              object, func, data);
-  else
-    switch (action)
-      {
-      case 0: g_signal_handler_disconnect (object, id); break;
-      case 1: g_signal_handler_block (object, id);     break;
-      case 2: g_signal_handler_unblock (object, id);   break;
-      }
+  if (!n_handlers)
+    g_warning ("unable to find signal handler for object(%s:%p) with func(%p) and data(%p)",
+              G_OBJECT_TYPE_NAME (object), object, func, data);
 }
 
 static inline gboolean
@@ -205,6 +204,33 @@ gtk_arg_to_value (GtkArg *arg,
   return TRUE;
 }
 
+static inline gboolean
+gtk_arg_static_to_value (GtkArg *arg,
+                        GValue *value)
+{
+  switch (G_TYPE_FUNDAMENTAL (arg->type))
+    {
+    case G_TYPE_CHAR:          g_value_set_char (value, GTK_VALUE_CHAR (*arg));                break;
+    case G_TYPE_UCHAR:         g_value_set_uchar (value, GTK_VALUE_UCHAR (*arg));              break;
+    case G_TYPE_BOOLEAN:       g_value_set_boolean (value, GTK_VALUE_BOOL (*arg));             break;
+    case G_TYPE_INT:           g_value_set_int (value, GTK_VALUE_INT (*arg));                  break;
+    case G_TYPE_UINT:          g_value_set_uint (value, GTK_VALUE_UINT (*arg));                break;
+    case G_TYPE_LONG:          g_value_set_long (value, GTK_VALUE_LONG (*arg));                break;
+    case G_TYPE_ULONG:         g_value_set_ulong (value, GTK_VALUE_ULONG (*arg));              break;
+    case G_TYPE_ENUM:          g_value_set_enum (value, GTK_VALUE_ENUM (*arg));                break;
+    case G_TYPE_FLAGS:         g_value_set_flags (value, GTK_VALUE_FLAGS (*arg));              break;
+    case G_TYPE_FLOAT:         g_value_set_float (value, GTK_VALUE_FLOAT (*arg));              break;
+    case G_TYPE_DOUBLE:                g_value_set_double (value, GTK_VALUE_DOUBLE (*arg));            break;
+    case G_TYPE_STRING:                g_value_set_static_string (value, GTK_VALUE_STRING (*arg));     break;
+    case G_TYPE_BOXED:         g_value_set_static_boxed (value, GTK_VALUE_BOXED (*arg));       break;
+    case G_TYPE_POINTER:       g_value_set_pointer (value, GTK_VALUE_POINTER (*arg));          break;
+    case G_TYPE_OBJECT:                g_value_set_object (value, GTK_VALUE_POINTER (*arg));           break;
+    default:
+      return FALSE;
+    }
+  return TRUE;
+}
+
 static inline gboolean
 gtk_arg_set_from_value (GtkArg  *arg,
                        GValue  *value,
@@ -283,7 +309,7 @@ gtk_signal_emitv (GtkObject *object,
   
   g_signal_query (signal_id, &query);
   g_return_if_fail (query.signal_id != 0);
-  g_return_if_fail (g_type_conforms_to (GTK_OBJECT_TYPE (object), query.itype));
+  g_return_if_fail (g_type_is_a (GTK_OBJECT_TYPE (object), query.itype));
   g_return_if_fail (query.n_params < SIGNAL_MAX_PARAMS);
   if (query.n_params > 0)
     g_return_if_fail (args != NULL);
@@ -295,18 +321,19 @@ gtk_signal_emitv (GtkObject *object,
       GValue *value = params + 1 + i;
       GtkArg *arg = args + i;
       
-      g_value_init (value, arg->type);
-      if (!gtk_arg_to_value (arg, value))
+      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;
        }
     }
   if (query.return_type != G_TYPE_NONE)
     g_value_init (&rvalue, query.return_type);
   
-  g_signal_emitv (params, signal_id, &rvalue);
+  g_signal_emitv (params, signal_id, 0, &rvalue);
   
   if (query.return_type != G_TYPE_NONE)
     {
@@ -375,6 +402,7 @@ gtk_signal_collect_args (GtkArg        *args,
   return failed;
 }
 
+#if 0
 void
 gtk_signal_emit (GtkObject *object,
                 guint      signal_id,
@@ -402,6 +430,21 @@ gtk_signal_emit (GtkObject *object,
   if (!abort)
     gtk_signal_emitv (object, signal_id, args);
 }
+#endif
+
+void
+gtk_signal_emit (GtkObject *object,
+                guint      signal_id,
+                ...)
+{
+  va_list var_args;
+  
+  g_return_if_fail (GTK_IS_OBJECT (object));
+
+  va_start (var_args, signal_id);
+  g_signal_emit_valist (G_OBJECT (object), signal_id, 0, var_args);
+  va_end (var_args);
+}
 
 void
 gtk_signal_emit_by_name (GtkObject   *object,