summaryrefslogtreecommitdiff
path: root/gtk/gtkinvisible.c
diff options
context:
space:
mode:
Diffstat (limited to 'gtk/gtkinvisible.c')
-rw-r--r--gtk/gtkinvisible.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/gtk/gtkinvisible.c b/gtk/gtkinvisible.c
index 36939c8798..f050630e67 100644
--- a/gtk/gtkinvisible.c
+++ b/gtk/gtkinvisible.c
@@ -29,6 +29,7 @@
static void gtk_invisible_class_init (GtkInvisibleClass *klass);
static void gtk_invisible_init (GtkInvisible *invisible);
+static void gtk_invisible_destroy (GtkObject *object);
static void gtk_invisible_realize (GtkWidget *widget);
static void gtk_invisible_show (GtkWidget *widget);
static void gtk_invisible_size_allocate (GtkWidget *widget,
@@ -62,13 +63,17 @@ gtk_invisible_get_type (void)
static void
gtk_invisible_class_init (GtkInvisibleClass *class)
{
+ GtkObjectClass *object_class;
GtkWidgetClass *widget_class;
widget_class = (GtkWidgetClass*) class;
+ object_class = (GtkObjectClass*) class;
widget_class->realize = gtk_invisible_realize;
widget_class->show = gtk_invisible_show;
widget_class->size_allocate = gtk_invisible_size_allocate;
+
+ object_class->destroy = gtk_invisible_destroy;
}
static void
@@ -78,6 +83,20 @@ gtk_invisible_init (GtkInvisible *invisible)
gtk_widget_ref (GTK_WIDGET (invisible));
gtk_object_sink (GTK_OBJECT (invisible));
+
+ invisible->has_user_ref_count = TRUE;
+}
+
+static void
+gtk_invisible_destroy (GtkObject *object)
+{
+ GtkInvisible *invisible = GTK_INVISIBLE (object);
+
+ if (invisible->has_user_ref_count)
+ {
+ invisible->has_user_ref_count = FALSE;
+ gtk_widget_unref (GTK_WIDGET (invisible));
+ }
}
GtkWidget*