/* object.c : Glue to clean up GtkObject references. * * Author: Mike Kestner * * Copyright (c) 2002 Mike Kestner * * This program is free software; you can redistribute it and/or * modify it under the terms of version 2 of the Lesser GNU General * Public License as published by the Free Software Foundation. * * This program 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 program; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #include #include /* Forward declarations */ void gtksharp_object_unref_if_floating (GObject *obj); gboolean gtksharp_object_is_floating (GObject *obj); void gtksharp_object_set_floating (GtkObject *obj, gboolean val); void gtksharp_object_override_destroy (gpointer cb); /* */ void gtksharp_object_unref_if_floating (GObject *obj) { if (GTK_OBJECT_FLOATING (obj)) g_object_unref (obj); } gboolean gtksharp_object_is_floating (GObject *obj) { return GTK_OBJECT_FLOATING (obj); } void gtksharp_object_set_floating (GtkObject *obj, gboolean val) { if (val == TRUE) GTK_OBJECT_SET_FLAGS (obj, GTK_FLOATING); else gtk_object_sink (obj); } typedef void (* destroy_func) (GtkObject *obj); static destroy_func base_destroy; static destroy_func managed_destroy; static void my_destroy (GtkObject *obj) { (* managed_destroy) (obj); (* base_destroy) (obj); } void gtksharp_object_override_destroy (gpointer cb) { GtkObjectClass *klass = (GtkObjectClass *) g_type_class_ref (GTK_TYPE_OBJECT); base_destroy = klass->destroy; managed_destroy = cb; klass->destroy = my_destroy; }