1 /* GTK - The GIMP Toolkit
2 * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the
16 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17 * Boston, MA 02111-1307, USA.
21 * Modified by the GTK+ Team and others 1997-2000. See the AUTHORS
22 * file for a list of people on the GTK+ Team. See the ChangeLog
23 * files for a list of changes. These files are distributed with
24 * GTK+ at ftp://ftp.gtk.org/pub/gtk/.
30 #include "gtkobject.h"
31 #include "gtksignal.h"
44 ARG_OBJECT_SIGNAL_AFTER
48 extern void gtk_object_init_type (void); /* for gtktypeutils.h */
49 static void gtk_object_base_class_init (GtkObjectClass *class);
50 static void gtk_object_base_class_finalize (GtkObjectClass *class);
51 static void gtk_object_class_init (GtkObjectClass *klass);
52 static void gtk_object_init (GtkObject *object,
53 GtkObjectClass *klass);
54 static void gtk_object_set_arg (GtkObject *object,
57 static void gtk_object_get_arg (GtkObject *object,
60 static void gtk_object_shutdown (GObject *object);
61 static void gtk_object_real_destroy (GtkObject *object);
62 static void gtk_object_finalize (GObject *object);
63 static void gtk_object_notify_weaks (GtkObject *object);
65 static gpointer parent_class = NULL;
66 static guint object_signals[LAST_SIGNAL] = { 0 };
67 static GHashTable *object_arg_info_ht = NULL;
68 static GQuark quark_user_data = 0;
69 static GQuark quark_weakrefs = 0;
70 static GQuark quark_carg_history = 0;
73 /****************************************************
74 * GtkObject type, class and instance initialization
76 ****************************************************/
79 gtk_object_get_type (void)
81 static GtkType object_type = 0;
85 static const GTypeInfo object_info =
87 sizeof (GtkObjectClass),
88 (GBaseInitFunc) gtk_object_base_class_init,
89 (GBaseFinalizeFunc) gtk_object_base_class_finalize,
90 (GClassInitFunc) gtk_object_class_init,
91 NULL, /* class_finalize */
92 NULL, /* class_data */
95 (GInstanceInitFunc) gtk_object_init,
98 object_type = g_type_register_static (G_TYPE_OBJECT, "GtkObject", &object_info, 0);
105 gtk_object_base_class_init (GtkObjectClass *class)
107 /* reset instance specific fields that don't get inherited */
108 class->signals = NULL;
111 class->construct_args = NULL;
113 /* reset instance specifc methods that don't get inherited */
114 class->get_arg = NULL;
115 class->set_arg = NULL;
119 gtk_object_base_class_finalize (GtkObjectClass *class)
121 g_free (class->signals);
122 g_return_if_fail (class->construct_args == NULL);
126 gtk_object_class_init (GtkObjectClass *class)
128 GObjectClass *gobject_class = G_OBJECT_CLASS (class);
130 parent_class = g_type_class_ref (G_TYPE_OBJECT);
132 gobject_class->shutdown = gtk_object_shutdown;
133 gobject_class->finalize = gtk_object_finalize;
135 class->get_arg = gtk_object_get_arg;
136 class->set_arg = gtk_object_set_arg;
137 class->destroy = gtk_object_real_destroy;
139 quark_carg_history = g_quark_from_static_string ("gtk-construct-arg-history");
141 gtk_object_add_arg_type ("GtkObject::user_data",
145 gtk_object_add_arg_type ("GtkObject::signal",
149 gtk_object_add_arg_type ("GtkObject::signal_after",
153 gtk_object_add_arg_type ("GtkObject::object_signal",
157 gtk_object_add_arg_type ("GtkObject::object_signal_after",
160 ARG_OBJECT_SIGNAL_AFTER);
162 object_signals[DESTROY] =
163 gtk_signal_new ("destroy",
164 G_SIGNAL_RUN_CLEANUP | G_SIGNAL_NO_RECURSE | GTK_RUN_NO_HOOKS,
165 GTK_CLASS_TYPE (class),
166 GTK_SIGNAL_OFFSET (GtkObjectClass, destroy),
167 gtk_marshal_VOID__VOID,
170 gtk_object_class_add_signals (class, object_signals, LAST_SIGNAL);
174 gtk_object_init (GtkObject *object,
175 GtkObjectClass *klass)
177 gboolean needs_construction = FALSE;
179 GTK_OBJECT_FLAGS (object) = GTK_FLOATING;
182 needs_construction |= klass->construct_args != NULL;
183 klass = g_type_class_peek_parent (klass);
185 while (klass && GTK_IS_OBJECT_CLASS (klass) && !needs_construction);
186 if (!needs_construction)
187 GTK_OBJECT_FLAGS (object) |= GTK_CONSTRUCTED;
190 /********************************************
191 * Functions to end a GtkObject's life time
193 ********************************************/
195 gtk_object_destroy (GtkObject *object)
197 g_return_if_fail (object != NULL);
198 g_return_if_fail (GTK_IS_OBJECT (object));
199 g_return_if_fail (GTK_OBJECT_CONSTRUCTED (object));
201 if (!GTK_OBJECT_DESTROYED (object))
203 /* need to hold a reference count around all class method
206 gtk_object_ref (object);
207 G_OBJECT_GET_CLASS (object)->shutdown (G_OBJECT (object));
208 gtk_object_unref (object);
213 gtk_object_shutdown (GObject *gobject)
215 GtkObject *object = GTK_OBJECT (gobject);
217 /* guard against reinvocations during
218 * destruction with the GTK_DESTROYED flag.
220 if (!GTK_OBJECT_DESTROYED (object))
222 GTK_OBJECT_SET_FLAGS (object, GTK_DESTROYED);
224 gtk_signal_emit (object, object_signals[DESTROY]);
226 GTK_OBJECT_UNSET_FLAGS (object, GTK_DESTROYED);
229 G_OBJECT_CLASS (parent_class)->shutdown (gobject);
233 gtk_object_real_destroy (GtkObject *object)
235 _g_signal_handlers_destroy (G_OBJECT (object));
239 gtk_object_finalize (GObject *gobject)
241 GtkObject *object = GTK_OBJECT (gobject);
243 gtk_object_notify_weaks (object);
245 G_OBJECT_CLASS (parent_class)->finalize (gobject);
248 /*****************************************
249 * GtkObject argument handlers
251 *****************************************/
254 gtk_object_set_arg (GtkObject *object,
265 gtk_object_set_user_data (object, GTK_VALUE_POINTER (*arg));
267 case ARG_OBJECT_SIGNAL_AFTER:
269 case ARG_OBJECT_SIGNAL:
271 case ARG_SIGNAL_AFTER:
275 arg_name = gtk_arg_name_strip_type (arg->name);
277 arg_name[n] == ':' &&
278 arg_name[n + 1] == ':' &&
279 arg_name[n + 2] != 0)
281 gtk_signal_connect_full (object,
283 GTK_VALUE_SIGNAL (*arg).f, NULL,
284 GTK_VALUE_SIGNAL (*arg).d,
286 (arg_id == ARG_OBJECT_SIGNAL ||
287 arg_id == ARG_OBJECT_SIGNAL_AFTER),
288 (arg_id == ARG_OBJECT_SIGNAL_AFTER ||
289 arg_id == ARG_SIGNAL_AFTER));
292 g_warning ("gtk_object_set_arg(): invalid signal argument: \"%s\"\n", arg->name);
300 gtk_object_get_arg (GtkObject *object,
307 GTK_VALUE_POINTER (*arg) = gtk_object_get_user_data (object);
310 case ARG_OBJECT_SIGNAL:
312 arg->type = GTK_TYPE_INVALID;
317 /*****************************************
318 * gtk_object_class_add_signals:
323 *****************************************/
326 gtk_object_class_add_signals (GtkObjectClass *class,
330 g_return_if_fail (GTK_IS_OBJECT_CLASS (class));
333 g_return_if_fail (signals != NULL);
335 class->signals = g_renew (guint, class->signals, class->nsignals + nsignals);
336 memcpy (class->signals + class->nsignals, signals, nsignals * sizeof (guint));
337 class->nsignals += nsignals;
341 gtk_object_class_user_signal_new (GtkObjectClass *class,
343 GtkSignalRunType signal_flags,
344 GtkSignalMarshaller marshaller,
354 g_return_val_if_fail (class != NULL, 0);
358 params = g_new (GtkType, nparams);
360 va_start (args, nparams);
362 for (i = 0; i < nparams; i++)
363 params[i] = va_arg (args, GtkType);
370 signal_id = gtk_signal_newv (name,
372 GTK_CLASS_TYPE (class),
382 gtk_object_class_add_signals (class, &signal_id, 1);
388 gtk_object_class_user_signal_newv (GtkObjectClass *class,
390 GtkSignalRunType signal_flags,
391 GtkSignalMarshaller marshaller,
398 g_return_val_if_fail (class != NULL, 0);
401 g_return_val_if_fail (params != NULL, 0);
403 signal_id = gtk_signal_newv (name,
405 GTK_CLASS_TYPE (class),
413 gtk_object_class_add_signals (class, &signal_id, 1);
418 /*****************************************
424 *****************************************/
427 gtk_object_sink (GtkObject *object)
429 g_return_if_fail (object != NULL);
430 g_return_if_fail (GTK_IS_OBJECT (object));
432 if (GTK_OBJECT_FLOATING (object))
434 GTK_OBJECT_UNSET_FLAGS (object, GTK_FLOATING);
435 gtk_object_unref (object);
439 /*****************************************
442 * Weak refs are very similar to the old "destroy" signal. They allow
443 * one to register a callback that is called when the weakly
444 * referenced object is finalized.
446 * They are not implemented as a signal because they really are
447 * special and need to be used with great care. Unlike signals, which
448 * should be able to execute any code whatsoever.
450 * A weakref callback is not allowed to retain a reference to the
451 * object. Object data keys may be retrieved in a weak reference
454 * A weakref callback is called at most once.
456 *****************************************/
458 typedef struct _GtkWeakRef GtkWeakRef;
463 GtkDestroyNotify notify;
468 gtk_object_weakref (GtkObject *object,
469 GtkDestroyNotify notify,
474 g_return_if_fail (object != NULL);
475 g_return_if_fail (notify != NULL);
476 g_return_if_fail (GTK_IS_OBJECT (object));
479 quark_weakrefs = g_quark_from_static_string ("gtk-weakrefs");
481 weak = g_new (GtkWeakRef, 1);
482 weak->next = gtk_object_get_data_by_id (object, quark_weakrefs);
483 weak->notify = notify;
485 gtk_object_set_data_by_id (object, quark_weakrefs, weak);
489 gtk_object_weakunref (GtkObject *object,
490 GtkDestroyNotify notify,
493 GtkWeakRef *weaks, *w, **wp;
495 g_return_if_fail (object != NULL);
496 g_return_if_fail (GTK_IS_OBJECT (object));
501 weaks = gtk_object_get_data_by_id (object, quark_weakrefs);
502 for (wp = &weaks; *wp; wp = &(*wp)->next)
505 if (w->notify == notify && w->data == data)
508 gtk_object_set_data_by_id (object, quark_weakrefs, w->next);
518 gtk_object_notify_weaks (GtkObject *object)
524 w1 = gtk_object_get_data_by_id (object, quark_weakrefs);
528 w1->notify (w1->data);
536 /****************************************************
537 * GtkObject argument mechanism and object creation
539 ****************************************************/
542 gtk_object_new (GtkType object_type,
543 const gchar *first_arg_name,
548 GSList *arg_list = NULL;
549 GSList *info_list = NULL;
552 g_return_val_if_fail (GTK_TYPE_IS_OBJECT (object_type), NULL);
554 object = gtk_type_new (object_type);
556 va_start (var_args, first_arg_name);
557 error = gtk_object_args_collect (GTK_OBJECT_TYPE (object),
566 g_warning ("gtk_object_new(): %s", error);
574 slist_arg = arg_list;
575 slist_info = info_list;
578 gtk_object_arg_set (object, slist_arg->data, slist_info->data);
579 slist_arg = slist_arg->next;
580 slist_info = slist_info->next;
582 gtk_args_collect_cleanup (arg_list, info_list);
585 if (!GTK_OBJECT_CONSTRUCTED (object))
586 gtk_object_default_construct (object);
592 gtk_object_newv (GtkType object_type,
599 g_return_val_if_fail (GTK_TYPE_IS_OBJECT (object_type), NULL);
601 g_return_val_if_fail (args != NULL, NULL);
603 object = gtk_type_new (object_type);
605 for (max_args = args + n_args; args < max_args; args++)
606 gtk_object_arg_set (object, args, NULL);
608 if (!GTK_OBJECT_CONSTRUCTED (object))
609 gtk_object_default_construct (object);
615 gtk_object_setv (GtkObject *object,
621 g_return_if_fail (object != NULL);
622 g_return_if_fail (GTK_IS_OBJECT (object));
624 g_return_if_fail (args != NULL);
626 for (max_args = args + n_args; args < max_args; args++)
627 gtk_object_arg_set (object, args, NULL);
631 gtk_object_getv (GtkObject *object,
637 g_return_if_fail (object != NULL);
638 g_return_if_fail (GTK_IS_OBJECT (object));
640 g_return_if_fail (args != NULL);
642 for (max_args = args + n_args; args < max_args; args++)
643 gtk_object_arg_get (object, args, NULL);
647 gtk_object_get (GtkObject *object,
648 const gchar *first_arg_name,
654 g_return_if_fail (GTK_IS_OBJECT (object));
656 va_start (var_args, first_arg_name);
658 name = (gchar*) first_arg_name;
661 gpointer value_pointer = va_arg (var_args, gpointer);
669 error = gtk_arg_get_info (GTK_OBJECT_TYPE (object),
675 g_warning ("gtk_object_get(): %s", error);
681 gtk_object_arg_get (object, &arg, info);
682 gtk_arg_to_valueloc (&arg, value_pointer);
685 name = va_arg (var_args, gchar*);
690 gtk_object_set (GtkObject *object,
691 const gchar *first_arg_name,
695 GSList *arg_list = NULL;
696 GSList *info_list = NULL;
699 g_return_if_fail (object != NULL);
700 g_return_if_fail (GTK_IS_OBJECT (object));
702 va_start (var_args, first_arg_name);
703 error = gtk_object_args_collect (GTK_OBJECT_TYPE (object),
712 g_warning ("gtk_object_set(): %s", error);
720 slist_arg = arg_list;
721 slist_info = info_list;
724 gtk_object_arg_set (object, slist_arg->data, slist_info->data);
725 slist_arg = slist_arg->next;
726 slist_info = slist_info->next;
728 gtk_args_collect_cleanup (arg_list, info_list);
733 gtk_object_arg_set (GtkObject *object,
737 GtkObjectClass *oclass;
739 g_return_if_fail (object != NULL);
740 g_return_if_fail (GTK_IS_OBJECT (object));
741 g_return_if_fail (arg != NULL);
747 error = gtk_arg_get_info (GTK_OBJECT_TYPE (object),
753 g_warning ("gtk_object_arg_set(): %s", error);
759 if (info->arg_flags & GTK_ARG_CONSTRUCT_ONLY &&
760 GTK_OBJECT_CONSTRUCTED (object))
762 g_warning ("gtk_object_arg_set(): cannot set argument \"%s\" for constructed object",
766 if (!(info->arg_flags & GTK_ARG_WRITABLE))
768 g_warning ("gtk_object_arg_set(): argument \"%s\" is not writable",
772 if (info->type != arg->type)
774 g_warning ("gtk_object_arg_set(): argument \"%s\" has invalid type `%s'",
776 gtk_type_name (arg->type));
780 oclass = gtk_type_class (info->class_type);
781 g_assert (oclass->set_arg != NULL);
782 oclass->set_arg (object, arg, info->arg_id);
783 if (!GTK_OBJECT_CONSTRUCTED (object) &&
784 (info->arg_flags & GTK_ARG_CONSTRUCT_ONLY ||
785 info->arg_flags & GTK_ARG_CONSTRUCT))
789 slist = gtk_object_get_data_by_id (object, quark_carg_history);
790 gtk_object_set_data_by_id (object,
792 g_slist_prepend (slist, info));
797 gtk_object_arg_get (GtkObject *object,
801 GtkObjectClass *oclass;
803 g_return_if_fail (object != NULL);
804 g_return_if_fail (GTK_IS_OBJECT (object));
805 g_return_if_fail (arg != NULL);
811 error = gtk_arg_get_info (GTK_OBJECT_TYPE (object),
817 g_warning ("gtk_object_arg_get(): %s", error);
819 arg->type = GTK_TYPE_INVALID;
824 if (! (info->arg_flags & GTK_ARG_READABLE))
826 g_warning ("gtk_object_arg_get(): argument \"%s\" is not readable",
828 arg->type = GTK_TYPE_INVALID;
832 oclass = gtk_type_class (info->class_type);
833 g_assert (oclass->get_arg != NULL);
834 arg->type = info->type;
835 oclass->get_arg (object, arg, info->arg_id);
839 gtk_object_default_construct (GtkObject *object)
843 g_return_if_fail (object != NULL);
844 g_return_if_fail (GTK_IS_OBJECT (object));
846 if (!GTK_OBJECT_CONSTRUCTED (object))
848 for (slist = GTK_OBJECT_GET_CLASS (object)->construct_args;
849 slist && !GTK_OBJECT_CONSTRUCTED (object);
856 history = gtk_object_get_data_by_id (object, quark_carg_history);
857 if (!g_slist_find (history, info))
861 /* default application */
862 arg.type = info->type;
863 arg.name = info->name;
864 switch (G_TYPE_FUNDAMENTAL (arg.type))
867 GTK_VALUE_FLOAT (arg) = 0.0;
869 case GTK_TYPE_DOUBLE:
870 GTK_VALUE_DOUBLE (arg) = 0.0;
873 case GTK_TYPE_STRING:
874 case GTK_TYPE_POINTER:
876 GTK_VALUE_POINTER (arg) = NULL;
879 memset (&arg.d, 0, sizeof (arg.d));
882 gtk_object_arg_set (object, &arg, info);
886 if (!GTK_OBJECT_CONSTRUCTED (object))
887 gtk_object_constructed (object);
892 gtk_object_constructed (GtkObject *object)
894 g_return_if_fail (object != NULL);
895 g_return_if_fail (GTK_IS_OBJECT (object));
896 g_return_if_fail (GTK_OBJECT_CONSTRUCTED (object) == FALSE);
898 g_slist_free (gtk_object_get_data_by_id (object, quark_carg_history));
899 gtk_object_set_data_by_id (object, quark_carg_history, NULL);
900 GTK_OBJECT_FLAGS (object) |= GTK_CONSTRUCTED;
904 gtk_object_add_arg_type (const char *arg_name,
911 g_return_if_fail (arg_name != NULL);
912 g_return_if_fail (arg_type > GTK_TYPE_NONE);
913 g_return_if_fail (arg_id > 0);
914 g_return_if_fail ((arg_flags & GTK_ARG_CHILD_ARG) == 0);
915 if (arg_flags & GTK_ARG_CONSTRUCT)
916 g_return_if_fail ((arg_flags & GTK_ARG_READWRITE) == GTK_ARG_READWRITE);
918 g_return_if_fail ((arg_flags & GTK_ARG_READWRITE) != 0);
919 if (arg_flags & GTK_ARG_CONSTRUCT_ONLY)
920 g_return_if_fail ((arg_flags & GTK_ARG_WRITABLE) == GTK_ARG_WRITABLE);
922 if (!object_arg_info_ht)
923 object_arg_info_ht = g_hash_table_new (gtk_arg_info_hash,
926 info = gtk_arg_type_new_static (GTK_TYPE_OBJECT,
928 GTK_STRUCT_OFFSET (GtkObjectClass, n_args),
934 (info->arg_flags & GTK_ARG_CONSTRUCT ||
935 info->arg_flags & GTK_ARG_CONSTRUCT_ONLY))
937 GtkObjectClass *class;
939 class = gtk_type_class (info->class_type);
940 if (info->arg_flags & GTK_ARG_CONSTRUCT_ONLY)
941 class->construct_args = g_slist_prepend (class->construct_args, info);
943 class->construct_args = g_slist_append (class->construct_args, info);
948 gtk_object_args_collect (GtkType object_type,
950 GSList **info_list_p,
951 const gchar *first_arg_name,
954 return gtk_args_collect (object_type,
963 gtk_object_arg_get_info (GtkType object_type,
964 const gchar *arg_name,
967 return gtk_arg_get_info (object_type,
974 gtk_object_query_args (GtkType class_type,
978 g_return_val_if_fail (n_args != NULL, NULL);
980 g_return_val_if_fail (GTK_TYPE_IS_OBJECT (class_type), NULL);
982 return gtk_args_query (class_type, object_arg_info_ht, arg_flags, n_args);
985 /*****************************************
986 * GtkObject object_data mechanism
988 *****************************************/
991 gtk_object_set_data_by_id (GtkObject *object,
995 g_return_if_fail (GTK_IS_OBJECT (object));
997 g_datalist_id_set_data (&G_OBJECT (object)->qdata, data_id, data);
1001 gtk_object_set_data (GtkObject *object,
1005 g_return_if_fail (GTK_IS_OBJECT (object));
1006 g_return_if_fail (key != NULL);
1008 g_datalist_set_data (&G_OBJECT (object)->qdata, key, data);
1012 gtk_object_set_data_by_id_full (GtkObject *object,
1015 GtkDestroyNotify destroy)
1017 g_return_if_fail (GTK_IS_OBJECT (object));
1019 g_datalist_id_set_data_full (&G_OBJECT (object)->qdata, data_id, data, destroy);
1023 gtk_object_set_data_full (GtkObject *object,
1026 GtkDestroyNotify destroy)
1028 g_return_if_fail (GTK_IS_OBJECT (object));
1029 g_return_if_fail (key != NULL);
1031 g_datalist_set_data_full (&G_OBJECT (object)->qdata, key, data, destroy);
1035 gtk_object_get_data_by_id (GtkObject *object,
1038 g_return_val_if_fail (GTK_IS_OBJECT (object), NULL);
1040 return g_datalist_id_get_data (&G_OBJECT (object)->qdata, data_id);
1044 gtk_object_get_data (GtkObject *object,
1047 g_return_val_if_fail (GTK_IS_OBJECT (object), NULL);
1048 g_return_val_if_fail (key != NULL, NULL);
1050 return g_datalist_get_data (&G_OBJECT (object)->qdata, key);
1054 gtk_object_remove_data_by_id (GtkObject *object,
1057 g_return_if_fail (GTK_IS_OBJECT (object));
1059 g_datalist_id_remove_data (&G_OBJECT (object)->qdata, data_id);
1063 gtk_object_remove_data (GtkObject *object,
1066 g_return_if_fail (GTK_IS_OBJECT (object));
1067 g_return_if_fail (key != NULL);
1069 g_datalist_remove_data (&G_OBJECT (object)->qdata, key);
1073 gtk_object_remove_no_notify_by_id (GtkObject *object,
1076 g_return_if_fail (GTK_IS_OBJECT (object));
1078 g_datalist_id_remove_no_notify (&G_OBJECT (object)->qdata, key_id);
1082 gtk_object_remove_no_notify (GtkObject *object,
1085 g_return_if_fail (GTK_IS_OBJECT (object));
1086 g_return_if_fail (key != NULL);
1088 g_datalist_remove_no_notify (&G_OBJECT (object)->qdata, key);
1092 gtk_object_set_user_data (GtkObject *object,
1095 g_return_if_fail (GTK_IS_OBJECT (object));
1097 if (!quark_user_data)
1098 quark_user_data = g_quark_from_static_string ("user_data");
1100 g_datalist_id_set_data (&G_OBJECT (object)->qdata, quark_user_data, data);
1104 gtk_object_get_user_data (GtkObject *object)
1106 g_return_val_if_fail (GTK_IS_OBJECT (object), NULL);
1108 return g_datalist_id_get_data (&G_OBJECT (object)->qdata, quark_user_data);
1112 gtk_object_ref (GtkObject *object)
1114 g_return_val_if_fail (GTK_IS_OBJECT (object), NULL);
1116 return (GtkObject*) g_object_ref ((GObject*) object);
1120 gtk_object_unref (GtkObject *object)
1122 g_return_if_fail (GTK_IS_OBJECT (object));
1124 g_object_unref ((GObject*) object);