From bcbe6f4885a7101a6b4168d1174882cacc3dcc0b Mon Sep 17 00:00:00 2001 From: Tim Janik Date: Sun, 10 Jan 1999 19:05:36 +0000 Subject: if the lookup failed, try to initialize the object class and reattempt the 1999-01-10 Tim Janik * gtk/gtksignal.c (gtk_signal_lookup): if the lookup failed, try to initialize the object class and reattempt the lookup, reported by Paolo Molaro . --- gtk/gtksignal.c | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) (limited to 'gtk') diff --git a/gtk/gtksignal.c b/gtk/gtksignal.c index 198e3b9ea3..d3ce62d60c 100644 --- a/gtk/gtksignal.c +++ b/gtk/gtksignal.c @@ -402,27 +402,38 @@ gtk_signal_lookup (const gchar *name, GtkType object_type) { GtkSignalHash hash; - + GtkType lookup_type; + gpointer class = NULL; + g_return_val_if_fail (name != NULL, 0); g_return_val_if_fail (gtk_type_is_a (object_type, GTK_TYPE_OBJECT), 0); + relookup: + + lookup_type = object_type; hash.quark = g_quark_try_string (name); if (hash.quark) { - while (object_type) + while (lookup_type) { guint signal_id; - hash.object_type = object_type; + hash.object_type = lookup_type; signal_id = GPOINTER_TO_UINT (g_hash_table_lookup (gtk_signal_hash_table, &hash)); if (signal_id) return signal_id; - object_type = gtk_type_parent (object_type); + lookup_type = gtk_type_parent (lookup_type); } } - + + if (!class) + { + class = gtk_type_class (object_type); + goto relookup; + } + return 0; } -- cgit v1.2.1