when defaulting to the only item in the array, check if this is indeed the
authorKristian Rietveld <kris@imendio.com>
Fri, 13 Mar 2009 09:22:57 +0000 (09:22 +0000)
committerKristian Rietveld <kristian@src.gnome.org>
Fri, 13 Mar 2009 09:22:57 +0000 (09:22 +0000)
2009-03-13  Kristian Rietveld  <kris@imendio.com>

* gsignal.c (signal_lookup_closure): when defaulting to the only
item in the array, check if this is indeed the default closure.
(patch by Tim Janik).

svn path=/trunk/; revision=7979

gobject/ChangeLog
gobject/gsignal.c

index 9134e65..039211f 100644 (file)
@@ -1,3 +1,9 @@
+2009-03-13  Kristian Rietveld  <kris@imendio.com>
+
+       * gsignal.c (signal_lookup_closure): when defaulting to the only
+       item in the array, check if this is indeed the default closure.
+       (patch by Tim Janik).
+
 2009-03-13  Matthias Clasen  <mclasen@redhat.com>
 
        * === Released 2.20.0 ===
index 9908e16..d69b880 100644 (file)
@@ -1448,9 +1448,12 @@ signal_lookup_closure (SignalNode    *node,
   ClassClosure *cc;
 
   if (node->class_closure_bsa && g_bsearch_array_get_n_nodes (node->class_closure_bsa) == 1)
-    cc = g_bsearch_array_get_nth (node->class_closure_bsa, &g_class_closure_bconfig, 0);
-  else
-    cc = signal_find_class_closure (node, G_TYPE_FROM_INSTANCE (instance));
+    {
+      cc = g_bsearch_array_get_nth (node->class_closure_bsa, &g_class_closure_bconfig, 0);
+      if (cc && cc->instance_type == 0) /* check for default closure */
+        return cc->closure;
+    }
+  cc = signal_find_class_closure (node, G_TYPE_FROM_INSTANCE (instance));
   return cc ? cc->closure : NULL;
 }