📄 gsignal.h
字号:
/* GObject - GLib Type, Object, Parameter and Signal Library * Copyright (C) 2000-2001 Red Hat, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place, Suite 330, * Boston, MA 02111-1307, USA. */#if !defined (__GLIB_GOBJECT_H_INSIDE__) && !defined (GOBJECT_COMPILATION)#error "Only <glib-object.h> can be included directly."#endif#ifndef __G_SIGNAL_H__#define __G_SIGNAL_H__#include <gobject/gclosure.h>#include <gobject/gvalue.h>#include <gobject/gparam.h>#include <gobject/gmarshal.h>G_BEGIN_DECLS/* --- typedefs --- */typedef struct _GSignalQuery GSignalQuery;typedef struct _GSignalInvocationHint GSignalInvocationHint;/** * GSignalCMarshaller: * * This is the signature of marshaller functions, required to marshall * arrays of parameter values to signal emissions into C language callback * invocations. It is merely an alias to #GClosureMarshal since the #GClosure * mechanism takes over responsibility of actual function invocation for the * signal system. */typedef GClosureMarshal GSignalCMarshaller;/** * GSignalEmissionHook: * @ihint: Signal invocation hint, see #GSignalInvocationHint. * @n_param_values: the number of parameters to the function, including * the instance on which the signal was emitted. * @param_values: the instance on which the signal was emitted, followed by the * parameters of the emission. * @data: user data associated with the hook. * * A simple function pointer to get invoked when the signal is emitted. This * allows you to tie a hook to the signal type, so that it will trap all * emissions of that signal, from any object. * * You may not attach these to signals created with the #G_SIGNAL_NO_HOOKS flag. * * Returns: whether it wants to stay connected. If it returns %FALSE, the signal * hook is disconnected (and destroyed). */typedef gboolean (*GSignalEmissionHook) (GSignalInvocationHint *ihint, guint n_param_values, const GValue *param_values, gpointer data);/** * GSignalAccumulator: * @ihint: Signal invocation hint, see #GSignalInvocationHint. * @return_accu: Accumulator to collect callback return values in, this * is the return value of the current signal emission. * @handler_return: A #GValue holding the return value of the signal handler. * @data: Callback data that was specified when creating the signal. * * The signal accumulator is a special callback function that can be used * to collect return values of the various callbacks that are called * during a signal emission. The signal accumulator is specified at signal * creation time, if it is left %NULL, no accumulation of callback return * values is performed. The return value of signal emissions is then the * value returned by the last callback. * * Returns: The accumulator function returns whether the signal emission * should be aborted. Returning %FALSE means to abort the * current emission and %TRUE is returned for continuation. */typedef gboolean (*GSignalAccumulator) (GSignalInvocationHint *ihint, GValue *return_accu, const GValue *handler_return, gpointer data);/* --- run, match and connect types --- *//** * GSignalFlags: * @G_SIGNAL_RUN_FIRST: Invoke the object method handler in the first emission stage. * @G_SIGNAL_RUN_LAST: Invoke the object method handler in the third emission stage. * @G_SIGNAL_RUN_CLEANUP: Invoke the object method handler in the last emission stage. * @G_SIGNAL_NO_RECURSE: Signals being emitted for an object while currently being in * emission for this very object will not be emitted recursively, * but instead cause the first emission to be restarted. * @G_SIGNAL_DETAILED: This signal supports "::detail" appendices to the signal name * upon handler connections and emissions. * @G_SIGNAL_ACTION: Action signals are signals that may freely be emitted on alive * objects from user code via g_signal_emit() and friends, without * the need of being embedded into extra code that performs pre or * post emission adjustments on the object. They can also be thought * of as object methods which can be called generically by * third-party code. * @G_SIGNAL_NO_HOOKS: No emissions hooks are supported for this signal. * * The signal flags are used to specify a signal's behaviour, the overall * signal description outlines how especially the RUN flags control the * stages of a signal emission. */typedef enum{ G_SIGNAL_RUN_FIRST = 1 << 0, G_SIGNAL_RUN_LAST = 1 << 1, G_SIGNAL_RUN_CLEANUP = 1 << 2, G_SIGNAL_NO_RECURSE = 1 << 3, G_SIGNAL_DETAILED = 1 << 4, G_SIGNAL_ACTION = 1 << 5, G_SIGNAL_NO_HOOKS = 1 << 6} GSignalFlags;/** * G_SIGNAL_FLAGS_MASK: * * A mask for all #GSignalFlags bits. */#define G_SIGNAL_FLAGS_MASK 0x7f/** * GConnectFlags: * @G_CONNECT_AFTER: whether the handler should be called before or after the * default handler of the signal. * @G_CONNECT_SWAPPED: whether the instance and data should be swapped when * calling the handler. * * The connection flags are used to specify the behaviour of a signal's * connection. */typedef enum{ G_CONNECT_AFTER = 1 << 0, G_CONNECT_SWAPPED = 1 << 1} GConnectFlags;/** * GSignalMatchType: * @G_SIGNAL_MATCH_ID: The signal id must be equal. * @G_SIGNAL_MATCH_DETAIL: The signal detail be equal. * @G_SIGNAL_MATCH_CLOSURE: The closure must be the same. * @G_SIGNAL_MATCH_FUNC: The C closure callback must be the same. * @G_SIGNAL_MATCH_DATA: The closure data must be the same. * @G_SIGNAL_MATCH_UNBLOCKED: Only unblocked signals may matched. * * The match types specify what g_signal_handlers_block_matched(), * g_signal_handlers_unblock_matched() and g_signal_handlers_disconnect_matched() * match signals by. */typedef enum{ G_SIGNAL_MATCH_ID = 1 << 0, G_SIGNAL_MATCH_DETAIL = 1 << 1, G_SIGNAL_MATCH_CLOSURE = 1 << 2, G_SIGNAL_MATCH_FUNC = 1 << 3, G_SIGNAL_MATCH_DATA = 1 << 4, G_SIGNAL_MATCH_UNBLOCKED = 1 << 5} GSignalMatchType;/** * G_SIGNAL_MATCH_MASK: * * A mask for all #GSignalMatchType bits. */#define G_SIGNAL_MATCH_MASK 0x3f/** * G_SIGNAL_TYPE_STATIC_SCOPE: * * This macro flags signal argument types for which the signal system may * assume that instances thereof remain persistent across all signal emissions * they are used in. This is only useful for non ref-counted, value-copy types. * * To flag a signal argument in this way, add * <literal>| G_SIGNAL_TYPE_STATIC_SCOPE</literal> to the corresponding argument * of g_signal_new(). * |[ * g_signal_new ("size_request", * G_TYPE_FROM_CLASS (gobject_class), * G_SIGNAL_RUN_FIRST, * G_STRUCT_OFFSET (GtkWidgetClass, size_request), * NULL, NULL, * _gtk_marshal_VOID__BOXED, * G_TYPE_NONE, 1, * GTK_TYPE_REQUISITION | G_SIGNAL_TYPE_STATIC_SCOPE); * ]| */#define G_SIGNAL_TYPE_STATIC_SCOPE (G_TYPE_FLAG_RESERVED_ID_BIT)/* --- signal information --- *//** * GSignalInvocationHint: * @signal_id: The signal id of the signal invoking the callback * @detail: The detail passed on for this emission * @run_type: The stage the signal emission is currently in, this * field will contain one of %G_SIGNAL_RUN_FIRST, * %G_SIGNAL_RUN_LAST or %G_SIGNAL_RUN_CLEANUP. * * The #GSignalInvocationHint structure is used to pass on additional information * to callbacks during a signal emission. */struct _GSignalInvocationHint{ guint signal_id; GQuark detail; GSignalFlags run_type;};/** * GSignalQuery: * @signal_id: The signal id of the signal being queried, or 0 if the * signal to be queried was unknown. * @signal_name: The signal name. * @itype: The interface/instance type that this signal can be emitted for. * @signal_flags: The signal flags as passed in to g_signal_new(). * @return_type: The return type for user callbacks. * @n_params: The number of parameters that user callbacks take. * @param_types: The individual parameter types for user callbacks, note that the * effective callback signature is: * <programlisting> * @return_type callback (#gpointer data1, * [#param_types param_names,] * #gpointer data2); * </programlisting> * * A structure holding in-depth information for a specific signal. It is * filled in by the g_signal_query() function. */struct _GSignalQuery{ guint signal_id; const gchar *signal_name; GType itype; GSignalFlags signal_flags; GType return_type; /* mangled with G_SIGNAL_TYPE_STATIC_SCOPE flag */ guint n_params; const GType *param_types; /* mangled with G_SIGNAL_TYPE_STATIC_SCOPE flag */};/* --- signals --- */guint g_signal_newv (const gchar *signal_name, GType itype, GSignalFlags signal_flags, GClosure *class_closure, GSignalAccumulator accumulator, gpointer accu_data,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -