summaryrefslogtreecommitdiff
path: root/gtk/gtkobject.h
diff options
context:
space:
mode:
authorTim Janik <timj@gtk.org>1998-05-06 01:43:56 +0000
committerTim Janik <timj@src.gnome.org>1998-05-06 01:43:56 +0000
commit518a8a9c4ed18ea4571e3c9c43c1dbc387e6627b (patch)
treeeb5b0af8fefd7e726af9b6d6d55d19f7f22997a9 /gtk/gtkobject.h
parentc3e04d86ec5a4cd6eb6f62e89e63381f9a70d1fc (diff)
downloadgtk+-518a8a9c4ed18ea4571e3c9c43c1dbc387e6627b.tar.gz
reimplemented the signal storage system to use a linear array rather than
Wed May 6 02:16:34 1998 Tim Janik <timj@gtk.org> * gtk/gtksignal.c: reimplemented the signal storage system to use a linear array rather than a hash table. be carefull *not* to keep any GtkSignal pointers across invokations of gtk_signal_next_and_invalidate() and therefore gtk_signal_new[v](). general code cleanups, made all allocations through memchunks. (gtk_signal_lookup): we now do the lookup of signals through a key_id for the signal names to avoid multiple hashing of the signal name on lookups for the several hirarchy levels of an object. Tue May 5 15:33:27 1998 Tim Janik <timj@gtk.org> * gtk/gtkmain.c (gtk_init): added gtk_signal_init() to avoid repeatedly checking for signal initialization in gtksignal.c. * gtk/gtktypeutils.c (TYPE_NODES_BLOCK_SIZE): reseted this to 200 after a long debugging period ;) Mon May 4 00:30:11 1998 Tim Janik <timj@gtk.org> * gtk/gtktypeutils.h (GTK_TYPE_IS_A): new macro to speedup gtk_type_is_a(). * gtk/gtktypeutils.c: reimplemented the type storage system to use a linear array rather than a hash table. it actually speeded up testgtk for a *considerable* amount. be carefull *not* to keep any GtkTypeNode pointers across invokations of gtk_type_node_next_and_invalidate() and therefore gtk_type_unique()! * gtk/gtkobject.h (GTK_IS_OBJECT_CLASS): new macro to test for the inheritance of a class pointer. (GTK_OBJECT): modifications for speedups. (GTK_IS_OBJECT): likewise. (GTK_OBJECT_CLASS): likewise. (suggested by owen). * gtk/gtkcontainer.h (GTK_IS_CONTAINER_CLASS): new macro. * gtk/gtkwidget.h (GTK_IS_WIDGET_CLASS): new macro. * gtk/gtk.defs (GtkTooltips): define GtkTooltips as object not as boxed, since its derivation changed 4 month ago ;(. showed up with the unique type name checking code in gtk_type_unique(). * random guint->GtkType and macro fixups.
Diffstat (limited to 'gtk/gtkobject.h')
-rw-r--r--gtk/gtkobject.h65
1 files changed, 44 insertions, 21 deletions
diff --git a/gtk/gtkobject.h b/gtk/gtkobject.h
index 37f7017cfb..7017498745 100644
--- a/gtk/gtkobject.h
+++ b/gtk/gtkobject.h
@@ -27,6 +27,7 @@
#ifdef __cplusplus
extern "C" {
+#pragma }
#endif /* __cplusplus */
@@ -51,18 +52,43 @@ extern "C" {
#endif /* GTK_NO_CHECK_CASTS */
-/* Determines whether 'obj' is a type of 'otype'.
+/* Determines whether `obj' and `klass' are a type of `otype'.
*/
-#define GTK_CHECK_TYPE(obj,otype) (gtk_type_is_a (((GtkObject*) (obj))->klass->type, (otype)))
-
-
-/* Macro for casting a pointer to a GtkObject pointer.
+#define GTK_CHECK_TYPE(obj,otype) ( \
+ GTK_TYPE_IS_A (((GtkObject*) (obj))->klass->type, (otype)) \
+)
+#define GTK_CHECK_CLASS_TYPE(klass,otype) ( \
+ GTK_TYPE_IS_A (((GtkObjectClass*) (klass))->type, (otype)) \
+)
+
+/* Macro for casting a pointer to a GtkObject or GtkObjectClass pointer.
+ * The second portion of the ?: statments are just in place to offer
+ * descriptive warning message.
+ */
+#define GTK_OBJECT(object) ( \
+ GTK_IS_OBJECT (object) ? \
+ (GtkObject*) (object) : \
+ (GtkObject*) gtk_object_check_cast ((GtkObject*) (object), GTK_TYPE_OBJECT) \
+)
+#define GTK_OBJECT_CLASS(klass) ( \
+ GTK_IS_OBJECT_CLASS (klass) ? \
+ (GtkObjectClass*) (klass) : \
+ (GtkObjectClass*) gtk_object_check_class_cast ((GtkObjectClass*) (klass), GTK_TYPE_OBJECT) \
+)
+
+/* Macro for testing whether `object' and `klass' are of type GTK_TYPE_OBJECT.
*/
-#define GTK_OBJECT(obj) GTK_CHECK_CAST ((obj), gtk_object_get_type (), GtkObject)
+#define GTK_IS_OBJECT(object) ( \
+ (object) != NULL && \
+ GTK_IS_OBJECT_CLASS (((GtkObject*) (object))->klass) \
+)
+#define GTK_IS_OBJECT_CLASS(klass) ( \
+ (klass) != NULL && \
+ GTK_FUNDAMENTAL_TYPE (((GtkObjectClass*) (klass))->type) == GTK_TYPE_OBJECT \
+)
/* Macros for extracting various fields from GtkObject and GtkObjectClass.
*/
-#define GTK_OBJECT_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), gtk_object_get_type (), GtkObjectClass))
#define GTK_OBJECT_TYPE(obj) (GTK_OBJECT (obj)->klass->type)
#define GTK_OBJECT_SIGNALS(obj) (GTK_OBJECT (obj)->klass->signals)
#define GTK_OBJECT_NSIGNALS(obj) (GTK_OBJECT (obj)->klass->nsignals)
@@ -81,17 +107,6 @@ enum
GTK_OBJECT_FLAG_LAST = GTK_RESERVED_2
};
-/* GtkArg flag bits for gtk_object_add_arg_type
- */
-enum
-{
- GTK_ARG_READABLE = 1 << 0,
- GTK_ARG_WRITABLE = 1 << 1,
- GTK_ARG_CONSTRUCT = 1 << 2
-};
-#define GTK_ARG_READWRITE (GTK_ARG_READABLE | GTK_ARG_WRITABLE)
-
-
/* Macros for extracting the object_flags from GtkObject.
*/
#define GTK_OBJECT_FLAGS(obj) (GTK_OBJECT (obj)->flags)
@@ -103,9 +118,17 @@ enum
#define GTK_OBJECT_SET_FLAGS(obj,flag) G_STMT_START{ (GTK_OBJECT_FLAGS (obj) |= (flag)); }G_STMT_END
#define GTK_OBJECT_UNSET_FLAGS(obj,flag) G_STMT_START{ (GTK_OBJECT_FLAGS (obj) &= ~(flag)); }G_STMT_END
-/* Macro for testing whether "obj" is of type GtkObject.
+/* GtkArg flag bits for gtk_object_add_arg_type
*/
-#define GTK_IS_OBJECT(obj) (GTK_CHECK_TYPE ((obj), gtk_object_get_type ()))
+enum
+{
+ GTK_ARG_READABLE = 1 << 0,
+ GTK_ARG_WRITABLE = 1 << 1,
+ GTK_ARG_CONSTRUCT = 1 << 2,
+ /* aliases
+ */
+ GTK_ARG_READWRITE = GTK_ARG_READABLE | GTK_ARG_WRITABLE
+};
typedef struct _GtkObjectClass GtkObjectClass;
@@ -193,7 +216,7 @@ typedef void (*GtkSignalMarshaller) (GtkObject *object,
/* Get the type identifier for GtkObject's.
*/
-guint gtk_object_get_type (void);
+GtkType gtk_object_get_type (void);
/* Append "signals" to those already defined in "class".
*/