summaryrefslogtreecommitdiff
path: root/gtk/gtksignal.c
diff options
context:
space:
mode:
authorTim Janik <timj@gtk.org>2000-11-01 03:03:52 +0000
committerTim Janik <timj@src.gnome.org>2000-11-01 03:03:52 +0000
commitda5fdc1360a6002b06b0196e33e294527069a90c (patch)
treed50bccf961c5376eefca5b4940f431fd72861ad1 /gtk/gtksignal.c
parentc42cee3e7f635cd027ff4ccb548d430b079585e4 (diff)
downloadgtk+-da5fdc1360a6002b06b0196e33e294527069a90c.tar.gz
make use of g_signal_handlers_block_matched,
Wed Nov 1 03:43:42 2000 Tim Janik <timj@gtk.org> * gtk/gtksignal.c (gtk_signal_compat_matched): make use of g_signal_handlers_block_matched, g_signal_handlers_unblock_matched and g_signal_handlers_disconnect_matched to block/unblock and disconnect multiple handlers respectively, instead of only treating the first handler found (bug reported by owen).
Diffstat (limited to 'gtk/gtksignal.c')
-rw-r--r--gtk/gtksignal.c21
1 files changed, 10 insertions, 11 deletions
diff --git a/gtk/gtksignal.c b/gtk/gtksignal.c
index b911ae6a96..883d04792b 100644
--- a/gtk/gtksignal.c
+++ b/gtk/gtksignal.c
@@ -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, 0, NULL, func, data);
-
- if (!id)
+ if (!n_handlers)
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;
- }
}
static inline gboolean