GtkSharp/gtk/glue/object.c
Mike Kestner f3f0a62918 2008-05-28 Mike Kestner <mkestner@novell.com>
* gtk/Object.custom: move Dispose call to a vm override so that
	it runs after all signals and native overrides have run.
	* gtk/glue/object.c: destroy override implementation.

svn path=/trunk/gtk-sharp/; revision=104315
2008-05-28 18:59:53 +00:00

74 lines
1.9 KiB
C

/* object.c : Glue to clean up GtkObject references.
*
* Author: Mike Kestner <mkestner@speakeasy.net>
*
* 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 <glib-object.h>
#include <gtk/gtkobject.h>
/* 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;
}