mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-06-01 18:30:05 +02:00
destroy all signals that the finalized obejct type introduced.
Wed Nov 1 03:36:54 2000 Tim Janik <timj@gtk.org> * gobject.c (g_object_base_class_finalize): destroy all signals that the finalized obejct type introduced. * gsignal.c (g_signals_destroy): don't require itype to have signals. * gobject.c (g_object_do_finalize): make sure all signal handlers are destroyed. * gsignal.[hc]: (g_signal_handler_find): only match on non-0 masks. (g_signal_handlers_block_matched): (g_signal_handlers_unblock_matched): (g_signal_handlers_disconnect_matched): new functions to block/unblock or disconnect handlers in groups.
This commit is contained in:
parent
b6eb9a2e7d
commit
cfe0780d3e
@ -337,10 +337,13 @@ g_signal_name
|
||||
g_signal_query
|
||||
g_signal_list_ids
|
||||
g_signal_connect_closure
|
||||
g_signal_handler_find
|
||||
g_signal_handler_block
|
||||
g_signal_handler_unblock
|
||||
g_signal_handler_disconnect
|
||||
g_signal_handler_find
|
||||
g_signal_handlers_block_matched
|
||||
g_signal_handlers_unblock_matched
|
||||
g_signal_handlers_disconnect_matched
|
||||
g_signal_has_handler_pending
|
||||
g_signal_stop_emission
|
||||
g_signal_type_closure_new
|
||||
|
@ -255,46 +255,144 @@ g_signal_query().
|
||||
@Returns:
|
||||
|
||||
|
||||
<!-- ##### FUNCTION g_signal_handler_find ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
@instance:
|
||||
@mask:
|
||||
@signal_id:
|
||||
@detail:
|
||||
@closure:
|
||||
@func:
|
||||
@data:
|
||||
@Returns:
|
||||
|
||||
|
||||
<!-- ##### FUNCTION g_signal_handler_block ##### -->
|
||||
<para>
|
||||
|
||||
g_signal_handler_block() blocks a handler of an
|
||||
instance so it will not be called during any signal emissions
|
||||
unless it is unblocked again. Thus "blocking" a signal handler
|
||||
means to temporarily deactive it, a signal handler has to be
|
||||
unblocked exactly the same amount of times it has been blocked
|
||||
before to become active again.
|
||||
The @handler_id passed into g_signal_handler_block() has
|
||||
to be a valid signal handler id, connected to a signal of
|
||||
@instance.
|
||||
</para>
|
||||
|
||||
@instance:
|
||||
@handler_id:
|
||||
|
||||
@instance: The instance to block the signal handler of
|
||||
@handler_id: Handler id of the handler to be blocked
|
||||
|
||||
<!-- ##### FUNCTION g_signal_handler_unblock ##### -->
|
||||
<para>
|
||||
|
||||
g_signal_handler_unblock() undoes the effect of a previous
|
||||
g_signal_handler_block() call. A blocked handler is skipped
|
||||
during signal emissions and will not be invoked, unblocking
|
||||
it (for exactly the amount of times it has been blocked before)
|
||||
reverts its "blocked" state, so the handler will be recognized
|
||||
by the signal system and is called upon future or currently
|
||||
ongoing signal emissions (since the order in which handlers are
|
||||
called during signal emissions is deterministic, whether the
|
||||
unblocked handler in question is called as part of a currently
|
||||
ongoing emission depends on how far that emission has proceeded
|
||||
yet).
|
||||
The @handler_id passed into g_signal_handler_unblock() has
|
||||
to be a valid id of a signal handler that is connected to a
|
||||
signal of @instance and is currently blocked.
|
||||
</para>
|
||||
|
||||
@instance:
|
||||
@handler_id:
|
||||
@instance: The instance to unblock the signal handler of
|
||||
@handler_id: Handler id of the handler to be unblocked
|
||||
|
||||
|
||||
<!-- ##### FUNCTION g_signal_handler_disconnect ##### -->
|
||||
<para>
|
||||
|
||||
g_signal_handler_disconnect() disconnects a handler from an
|
||||
instance so it will not be called during any future or currently
|
||||
ongoing emissions of the signal it has been connected to.
|
||||
The @handler_id becomes invalid and may be reused.
|
||||
The @handler_id passed into g_signal_handler_disconnect() has
|
||||
to be a valid signal handler id, connected to a signal of
|
||||
@instance.
|
||||
</para>
|
||||
|
||||
@instance:
|
||||
@handler_id:
|
||||
@instance: The instance to remove the signal handler from
|
||||
@handler_id: Handler id of the handler to be disconnected
|
||||
|
||||
|
||||
<!-- ##### FUNCTION g_signal_handler_find ##### -->
|
||||
<para>
|
||||
Find the first signal handler that matches certain selection criteria.
|
||||
The criteria mask is passed as an OR-ed combination of #GSignalMatchType
|
||||
flags, and the criteria values are passed as arguments.
|
||||
The match @mask has to be non-0 for successfull matches.
|
||||
If no handler was found, 0 is returned.
|
||||
</para>
|
||||
|
||||
@instance: The instance owning the signal handler to be found
|
||||
@mask: Mask indicating which of @signal_id, @detail,
|
||||
@closure, @func and/or @data the handler has to match
|
||||
@signal_id: Signal the handler has to be connected to
|
||||
@detail: Signal detail the handler has to be connected to
|
||||
@closure: The closure the handler will invoke
|
||||
@func: The C closure callback of the handler (useless for non-C closures)
|
||||
@data: The closure data of the handler's closure
|
||||
@Returns: A valid non-0 signal handler id for a successfull match
|
||||
|
||||
|
||||
<!-- ##### FUNCTION g_signal_handlers_block_matched ##### -->
|
||||
<para>
|
||||
This function blocks all handlers on an instance that match a certain
|
||||
selection criteria. The criteria mask is passed as an OR-ed combination of
|
||||
#GSignalMatchType flags, and the criteria values are passed as arguments.
|
||||
Passing at least one of the %G_SIGNAL_MATCH_CLOSURE, %G_SIGNAL_MATCH_FUNC
|
||||
or %G_SIGNAL_MATCH_DATA match flags is required for successfull matches.
|
||||
If no handlers were found, 0 is returned, the number of blocked handlers
|
||||
otherwise.
|
||||
</para>
|
||||
|
||||
@instance: The instance to block handlers from
|
||||
@mask: Mask indicating which of @signal_id, @detail,
|
||||
@closure, @func and/or @data the handlers have to match
|
||||
@signal_id: Signal the handlers have to be connected to
|
||||
@detail: Signal detail the handlers have to be connected to
|
||||
@closure: The closure the handlers will invoke
|
||||
@func: The C closure callback of the handlers (useless for non-C closures)
|
||||
@data: The closure data of the handlers' closures
|
||||
@Returns: The amount of handlers that got blocked
|
||||
|
||||
|
||||
<!-- ##### FUNCTION g_signal_handlers_unblock_matched ##### -->
|
||||
<para>
|
||||
This function unblocks all handlers on an instance that match a certain
|
||||
selection criteria. The criteria mask is passed as an OR-ed combination of
|
||||
#GSignalMatchType flags, and the criteria values are passed as arguments.
|
||||
Passing at least one of the %G_SIGNAL_MATCH_CLOSURE, %G_SIGNAL_MATCH_FUNC
|
||||
or %G_SIGNAL_MATCH_DATA match flags is required for successfull matches.
|
||||
If no handlers were found, 0 is returned, the number of unblocked handlers
|
||||
otherwise. The match criteria should not apply to any handlers that are
|
||||
not currently blocked.
|
||||
</para>
|
||||
|
||||
@instance: The instance to unblock handlers from
|
||||
@mask: Mask indicating which of @signal_id, @detail,
|
||||
@closure, @func and/or @data the handlers have to match
|
||||
@signal_id: Signal the handlers have to be connected to
|
||||
@detail: Signal detail the handlers have to be connected to
|
||||
@closure: The closure the handlers will invoke
|
||||
@func: The C closure callback of the handlers (useless for non-C closures)
|
||||
@data: The closure data of the handlers' closures
|
||||
@Returns: The amount of handlers that got unblocked
|
||||
|
||||
|
||||
<!-- ##### FUNCTION g_signal_handlers_disconnect_matched ##### -->
|
||||
<para>
|
||||
This function disconnects all handlers on an instance that match a certain
|
||||
selection criteria. The criteria mask is passed as an OR-ed combination of
|
||||
#GSignalMatchType flags, and the criteria values are passed as arguments.
|
||||
Passing at least one of the %G_SIGNAL_MATCH_CLOSURE, %G_SIGNAL_MATCH_FUNC
|
||||
or %G_SIGNAL_MATCH_DATA match flags is required for successfull matches.
|
||||
If no handlers were found, 0 is returned, the number of disconnected handlers
|
||||
otherwise.
|
||||
</para>
|
||||
|
||||
@instance: The instance to remove handlers from
|
||||
@mask: Mask indicating which of @signal_id, @detail,
|
||||
@closure, @func and/or @data the handlers have to match
|
||||
@signal_id: Signal the handlers have to be connected to
|
||||
@detail: Signal detail the handlers have to be connected to
|
||||
@closure: The closure the handlers will invoke
|
||||
@func: The C closure callback of the handlers (useless for non-C closures)
|
||||
@data: The closure data of the handlers' closures
|
||||
@Returns: The amount of handlers that got disconnected
|
||||
|
||||
|
||||
<!-- ##### FUNCTION g_signal_has_handler_pending ##### -->
|
||||
|
@ -1,3 +1,21 @@
|
||||
Wed Nov 1 03:36:54 2000 Tim Janik <timj@gtk.org>
|
||||
|
||||
* gobject.c (g_object_base_class_finalize): destroy all signals that
|
||||
the finalized obejct type introduced.
|
||||
|
||||
* gsignal.c (g_signals_destroy): don't require itype to have
|
||||
signals.
|
||||
|
||||
* gobject.c (g_object_do_finalize): make sure all signal handlers
|
||||
are destroyed.
|
||||
|
||||
* gsignal.[hc]:
|
||||
(g_signal_handler_find): only match on non-0 masks.
|
||||
(g_signal_handlers_block_matched):
|
||||
(g_signal_handlers_unblock_matched):
|
||||
(g_signal_handlers_disconnect_matched): new functions to block/unblock
|
||||
or disconnect handlers in groups.
|
||||
|
||||
2000-10-30 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||
|
||||
* gvalue.c (exchange_entries_equal), gparam.c (param_spec_equals):
|
||||
|
@ -16,11 +16,12 @@
|
||||
* Free Software Foundation, Inc., 59 Temple Place, Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include "gobject.h"
|
||||
|
||||
|
||||
#include "gvaluecollector.h"
|
||||
#include "gsignal.h"
|
||||
#include <string.h>
|
||||
|
||||
|
||||
#define DEBUG_OBJECTS
|
||||
@ -163,6 +164,8 @@ g_object_base_class_finalize (GObjectClass *class)
|
||||
|
||||
g_message ("finallizing base class of %s", G_OBJECT_CLASS_NAME (class));
|
||||
|
||||
g_signals_destroy (G_OBJECT_CLASS_TYPE (class));
|
||||
|
||||
for (i = 0; i < class->n_param_specs; i++)
|
||||
{
|
||||
GParamSpec *pspec = class->param_specs[i];
|
||||
@ -292,6 +295,7 @@ g_object_do_shutdown (GObject *object)
|
||||
static void
|
||||
g_object_do_finalize (GObject *object)
|
||||
{
|
||||
g_signal_handlers_destroy (object);
|
||||
g_datalist_clear (&object->qdata);
|
||||
|
||||
#ifdef DEBUG_OBJECTS
|
||||
|
@ -571,7 +571,6 @@ void
|
||||
g_signals_destroy (GType itype)
|
||||
{
|
||||
guint i;
|
||||
gboolean found_one = FALSE;
|
||||
|
||||
G_LOCK (g_signal_mutex);
|
||||
for (i = 0; i < g_n_signal_nodes; i++)
|
||||
@ -585,15 +584,9 @@ g_signals_destroy (GType itype)
|
||||
node->name,
|
||||
g_type_name (node->itype));
|
||||
else
|
||||
{
|
||||
found_one = TRUE;
|
||||
signal_destroy_R (node);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!found_one)
|
||||
g_warning (G_STRLOC ": type `%s' has no signals that could be destroyed",
|
||||
g_type_name (itype));
|
||||
G_UNLOCK (g_signal_mutex);
|
||||
}
|
||||
|
||||
@ -917,6 +910,54 @@ g_signal_connect_closure (gpointer instance,
|
||||
return handler_id;
|
||||
}
|
||||
|
||||
void
|
||||
g_signal_handler_block (gpointer instance,
|
||||
guint handler_id)
|
||||
{
|
||||
Handler *handler;
|
||||
|
||||
g_return_if_fail (G_TYPE_CHECK_INSTANCE (instance));
|
||||
g_return_if_fail (handler_id > 0);
|
||||
|
||||
G_LOCK (g_signal_mutex);
|
||||
handler = handler_lookup (instance, handler_id, NULL);
|
||||
if (handler)
|
||||
{
|
||||
#ifndef G_DISABLE_CHECKS
|
||||
if (handler->block_count >= HANDLER_MAX_BLOCK_COUNT - 1)
|
||||
g_error (G_STRLOC ": handler block_count overflow, %s", REPORT_BUG);
|
||||
#endif
|
||||
|
||||
handler->block_count += 1;
|
||||
}
|
||||
else
|
||||
g_warning ("%s: instance `%p' has no handler with id `%u'", G_STRLOC, instance, handler_id);
|
||||
G_UNLOCK (g_signal_mutex);
|
||||
}
|
||||
|
||||
void
|
||||
g_signal_handler_unblock (gpointer instance,
|
||||
guint handler_id)
|
||||
{
|
||||
Handler *handler;
|
||||
|
||||
g_return_if_fail (G_TYPE_CHECK_INSTANCE (instance));
|
||||
g_return_if_fail (handler_id > 0);
|
||||
|
||||
G_LOCK (g_signal_mutex);
|
||||
handler = handler_lookup (instance, handler_id, NULL);
|
||||
if (handler)
|
||||
{
|
||||
if (handler->block_count)
|
||||
handler->block_count -= 1;
|
||||
else
|
||||
g_warning (G_STRLOC ": handler `%u' of instance `%p' is not blocked", handler_id, instance);
|
||||
}
|
||||
else
|
||||
g_warning ("%s: instance `%p' has no handler with id `%u'", G_STRLOC, instance, handler_id);
|
||||
G_UNLOCK (g_signal_mutex);
|
||||
}
|
||||
|
||||
void
|
||||
g_signal_handler_disconnect (gpointer instance,
|
||||
guint handler_id)
|
||||
@ -983,54 +1024,6 @@ g_signal_handlers_destroy (gpointer instance)
|
||||
G_UNLOCK (g_signal_mutex);
|
||||
}
|
||||
|
||||
void
|
||||
g_signal_handler_block (gpointer instance,
|
||||
guint handler_id)
|
||||
{
|
||||
Handler *handler;
|
||||
|
||||
g_return_if_fail (G_TYPE_CHECK_INSTANCE (instance));
|
||||
g_return_if_fail (handler_id > 0);
|
||||
|
||||
G_LOCK (g_signal_mutex);
|
||||
handler = handler_lookup (instance, handler_id, NULL);
|
||||
if (handler)
|
||||
{
|
||||
#ifndef G_DISABLE_CHECKS
|
||||
if (handler->block_count >= HANDLER_MAX_BLOCK_COUNT - 1)
|
||||
g_error (G_STRLOC ": handler block_count overflow, %s", REPORT_BUG);
|
||||
#endif
|
||||
|
||||
handler->block_count += 1;
|
||||
}
|
||||
else
|
||||
g_warning ("%s: instance `%p' has no handler with id `%u'", G_STRLOC, instance, handler_id);
|
||||
G_UNLOCK (g_signal_mutex);
|
||||
}
|
||||
|
||||
void
|
||||
g_signal_handler_unblock (gpointer instance,
|
||||
guint handler_id)
|
||||
{
|
||||
Handler *handler;
|
||||
|
||||
g_return_if_fail (G_TYPE_CHECK_INSTANCE (instance));
|
||||
g_return_if_fail (handler_id > 0);
|
||||
|
||||
G_LOCK (g_signal_mutex);
|
||||
handler = handler_lookup (instance, handler_id, NULL);
|
||||
if (handler)
|
||||
{
|
||||
if (handler->block_count)
|
||||
handler->block_count -= 1;
|
||||
else
|
||||
g_warning (G_STRLOC ": handler `%u' of instance `%p' is not blocked", handler_id, instance);
|
||||
}
|
||||
else
|
||||
g_warning ("%s: instance `%p' has no handler with id `%u'", G_STRLOC, instance, handler_id);
|
||||
G_UNLOCK (g_signal_mutex);
|
||||
}
|
||||
|
||||
guint
|
||||
g_signal_handler_find (gpointer instance,
|
||||
GSignalMatchType mask,
|
||||
@ -1040,22 +1033,131 @@ g_signal_handler_find (gpointer instance,
|
||||
gpointer func,
|
||||
gpointer data)
|
||||
{
|
||||
Handler *handler = NULL;
|
||||
guint handler_id;
|
||||
Handler *handler;
|
||||
guint handler_id = 0;
|
||||
|
||||
g_return_val_if_fail (G_TYPE_CHECK_INSTANCE (instance), 0);
|
||||
g_return_val_if_fail ((mask & ~G_SIGNAL_MATCH_MASK) == 0, 0);
|
||||
|
||||
if (mask & G_SIGNAL_MATCH_MASK)
|
||||
{
|
||||
G_LOCK (g_signal_mutex);
|
||||
handler = handler_find (instance, mask, signal_id, detail, closure, func, data);
|
||||
handler_id = handler ? handler->id : 0;
|
||||
G_UNLOCK (g_signal_mutex);
|
||||
}
|
||||
|
||||
return handler_id;
|
||||
}
|
||||
|
||||
static guint
|
||||
signal_handlers_foreach_matched (gpointer instance,
|
||||
GSignalMatchType mask,
|
||||
guint signal_id,
|
||||
GQuark detail,
|
||||
GClosure *closure,
|
||||
gpointer func,
|
||||
gpointer data,
|
||||
void (*callback) (gpointer instance,
|
||||
guint handler_id))
|
||||
{
|
||||
Handler *handler;
|
||||
guint n_handlers = 0;
|
||||
|
||||
handler = handler_find (instance, mask, signal_id, detail, closure, func, data);
|
||||
while (handler && handler->id)
|
||||
{
|
||||
n_handlers++;
|
||||
G_UNLOCK (g_signal_mutex);
|
||||
callback (instance, handler->id);
|
||||
G_LOCK (g_signal_mutex);
|
||||
/* need constant relookups due to callback */
|
||||
handler = handler_find (instance, mask, signal_id, detail, closure, func, data);
|
||||
}
|
||||
|
||||
return n_handlers;
|
||||
}
|
||||
|
||||
guint
|
||||
g_signal_handlers_block_matched (gpointer instance,
|
||||
GSignalMatchType mask,
|
||||
guint signal_id,
|
||||
GQuark detail,
|
||||
GClosure *closure,
|
||||
gpointer func,
|
||||
gpointer data)
|
||||
{
|
||||
guint n_handlers = 0;
|
||||
|
||||
g_return_val_if_fail (G_TYPE_CHECK_INSTANCE (instance), FALSE);
|
||||
g_return_val_if_fail ((mask & ~G_SIGNAL_MATCH_MASK) == 0, FALSE);
|
||||
|
||||
if (mask & (G_SIGNAL_MATCH_CLOSURE | G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA))
|
||||
{
|
||||
G_LOCK (g_signal_mutex);
|
||||
n_handlers = signal_handlers_foreach_matched (instance, mask, signal_id, detail,
|
||||
closure, func, data,
|
||||
g_signal_handler_block);
|
||||
G_UNLOCK (g_signal_mutex);
|
||||
}
|
||||
|
||||
return n_handlers;
|
||||
}
|
||||
|
||||
guint
|
||||
g_signal_handlers_unblock_matched (gpointer instance,
|
||||
GSignalMatchType mask,
|
||||
guint signal_id,
|
||||
GQuark detail,
|
||||
GClosure *closure,
|
||||
gpointer func,
|
||||
gpointer data)
|
||||
{
|
||||
guint n_handlers = 0;
|
||||
|
||||
g_return_val_if_fail (G_TYPE_CHECK_INSTANCE (instance), FALSE);
|
||||
g_return_val_if_fail ((mask & ~G_SIGNAL_MATCH_MASK) == 0, FALSE);
|
||||
|
||||
if (mask & (G_SIGNAL_MATCH_CLOSURE | G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA))
|
||||
{
|
||||
G_LOCK (g_signal_mutex);
|
||||
n_handlers = signal_handlers_foreach_matched (instance, mask, signal_id, detail,
|
||||
closure, func, data,
|
||||
g_signal_handler_unblock);
|
||||
G_UNLOCK (g_signal_mutex);
|
||||
}
|
||||
|
||||
return n_handlers;
|
||||
}
|
||||
|
||||
guint
|
||||
g_signal_handlers_disconnect_matched (gpointer instance,
|
||||
GSignalMatchType mask,
|
||||
guint signal_id,
|
||||
GQuark detail,
|
||||
GClosure *closure,
|
||||
gpointer func,
|
||||
gpointer data)
|
||||
{
|
||||
guint n_handlers = 0;
|
||||
|
||||
g_return_val_if_fail (G_TYPE_CHECK_INSTANCE (instance), FALSE);
|
||||
g_return_val_if_fail ((mask & ~G_SIGNAL_MATCH_MASK) == 0, FALSE);
|
||||
|
||||
if (mask & (G_SIGNAL_MATCH_CLOSURE | G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA))
|
||||
{
|
||||
G_LOCK (g_signal_mutex);
|
||||
n_handlers = signal_handlers_foreach_matched (instance, mask, signal_id, detail,
|
||||
closure, func, data,
|
||||
g_signal_handler_disconnect);
|
||||
G_UNLOCK (g_signal_mutex);
|
||||
}
|
||||
|
||||
return n_handlers;
|
||||
}
|
||||
|
||||
gboolean
|
||||
g_signal_handler_pending (gpointer instance,
|
||||
g_signal_has_handler_pending (gpointer instance,
|
||||
guint signal_id,
|
||||
GQuark detail,
|
||||
gboolean may_be_blocked)
|
||||
@ -1108,7 +1210,11 @@ g_signal_emitv (const GValue *instance_and_params,
|
||||
node = LOOKUP_SIGNAL_NODE (signal_id);
|
||||
#ifndef G_DISABLE_CHECKS
|
||||
if (!node || !g_type_conforms_to (G_TYPE_FROM_INSTANCE (instance), node->itype))
|
||||
{
|
||||
g_warning ("%s: signal id `%u' is invalid for instance `%p'", G_STRLOC, signal_id, instance);
|
||||
G_UNLOCK (g_signal_mutex);
|
||||
return;
|
||||
}
|
||||
if (detail && !(node->flags & G_SIGNAL_DETAILED))
|
||||
{
|
||||
g_warning ("%s: signal id `%u' does not support detail (%u)", G_STRLOC, signal_id, detail);
|
||||
|
@ -107,31 +107,6 @@ void g_signal_query (guint signal_id,
|
||||
guint* g_signal_list_ids (GType itype,
|
||||
guint *n_ids);
|
||||
|
||||
/* --- signal handlers --- */
|
||||
guint g_signal_connect_closure (gpointer instance,
|
||||
guint signal_id,
|
||||
GQuark detail,
|
||||
GClosure *closure,
|
||||
gboolean after);
|
||||
void g_signal_handler_disconnect (gpointer instance,
|
||||
guint handler_id);
|
||||
void g_signal_handler_block (gpointer instance,
|
||||
guint handler_id);
|
||||
void g_signal_handler_unblock (gpointer instance,
|
||||
guint handler_id);
|
||||
guint g_signal_handler_find (gpointer instance,
|
||||
GSignalMatchType mask,
|
||||
guint signal_id,
|
||||
GQuark detail,
|
||||
GClosure *closure,
|
||||
gpointer func,
|
||||
gpointer data);
|
||||
gboolean g_signal_has_handler_pending (gpointer instance,
|
||||
guint signal_id,
|
||||
GQuark detail,
|
||||
gboolean may_be_blocked);
|
||||
|
||||
|
||||
/* --- signal emissions --- */
|
||||
void g_signal_stop_emission (gpointer instance,
|
||||
guint signal_id,
|
||||
@ -141,6 +116,53 @@ guint g_signal_add_emission_hook_full (guint signal_id,
|
||||
void g_signal_remove_emission_hook (guint signal_id,
|
||||
guint hook_id);
|
||||
|
||||
|
||||
/* --- signal handlers --- */
|
||||
gboolean g_signal_has_handler_pending (gpointer instance,
|
||||
guint signal_id,
|
||||
GQuark detail,
|
||||
gboolean may_be_blocked);
|
||||
guint g_signal_connect_closure (gpointer instance,
|
||||
guint signal_id,
|
||||
GQuark detail,
|
||||
GClosure *closure,
|
||||
gboolean after);
|
||||
void g_signal_handler_block (gpointer instance,
|
||||
guint handler_id);
|
||||
void g_signal_handler_unblock (gpointer instance,
|
||||
guint handler_id);
|
||||
void g_signal_handler_disconnect (gpointer instance,
|
||||
guint handler_id);
|
||||
guint g_signal_handler_find (gpointer instance,
|
||||
GSignalMatchType mask,
|
||||
guint signal_id,
|
||||
GQuark detail,
|
||||
GClosure *closure,
|
||||
gpointer func,
|
||||
gpointer data);
|
||||
guint g_signal_handlers_block_matched (gpointer instance,
|
||||
GSignalMatchType mask,
|
||||
guint signal_id,
|
||||
GQuark detail,
|
||||
GClosure *closure,
|
||||
gpointer func,
|
||||
gpointer data);
|
||||
guint g_signal_handlers_unblock_matched (gpointer instance,
|
||||
GSignalMatchType mask,
|
||||
guint signal_id,
|
||||
GQuark detail,
|
||||
GClosure *closure,
|
||||
gpointer func,
|
||||
gpointer data);
|
||||
guint g_signal_handlers_disconnect_matched (gpointer instance,
|
||||
GSignalMatchType mask,
|
||||
guint signal_id,
|
||||
GQuark detail,
|
||||
GClosure *closure,
|
||||
gpointer func,
|
||||
gpointer data);
|
||||
|
||||
|
||||
/*< private >*/
|
||||
void g_signal_handlers_destroy (gpointer instance);
|
||||
void g_signals_destroy (GType itype);
|
||||
|
Loading…
x
Reference in New Issue
Block a user