summaryrefslogtreecommitdiff
path: root/tests/floatingtest.c
diff options
context:
space:
mode:
authorTim Janik <timj@imendio.com>2005-12-22 15:10:05 +0000
committerTim Janik <timj@src.gnome.org>2005-12-22 15:10:05 +0000
commit75e6b53a78140092a500dac9c71e438111f1cc9b (patch)
treee1ae9e8976edf902c69f26923243b28d46589f5b /tests/floatingtest.c
parentfe0fb8966d0bdb58e1cd5fe41082922c433be3ca (diff)
downloadgtk+-75e6b53a78140092a500dac9c71e438111f1cc9b.tar.gz
derive GtkObject from GUnowned, so it initially has a floating reference
Thu Dec 22 16:01:27 2005 Tim Janik <timj@imendio.com> * gtk/gtkobject.c: derive GtkObject from GUnowned, so it initially has a floating reference count. gtk_object_class_init(): installa floating flag handler with libgobject, so for GtkObjects the flag is stored as GTK_FLOATING in the ->flags member. * tests/floatingtest.c: test floating flag uses.
Diffstat (limited to 'tests/floatingtest.c')
-rw-r--r--tests/floatingtest.c64
1 files changed, 64 insertions, 0 deletions
diff --git a/tests/floatingtest.c b/tests/floatingtest.c
new file mode 100644
index 0000000000..458acd887b
--- /dev/null
+++ b/tests/floatingtest.c
@@ -0,0 +1,64 @@
+/* floatingtest.c - test floating flag uses
+ * Copyright (C) 2005 Tim Janik
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+#undef GTK_DISABLE_DEPRECATED
+#include "../gtk/gtk.h"
+
+static gboolean destroyed = FALSE;
+static void destroy (void) { destroyed = TRUE; }
+
+int
+main (int argc,
+ char *argv[])
+{
+ GtkWidget *widget;
+ gtk_init (&argc, &argv);
+
+ widget = g_object_new (GTK_TYPE_LABEL, NULL);
+ g_object_connect (widget, "signal::destroy", destroy, NULL, NULL);
+
+ g_assert (GTK_OBJECT_FLOATING (widget));
+ g_assert (g_object_is_floating (widget));
+
+ GTK_OBJECT_UNSET_FLAGS (widget, GTK_FLOATING);
+ g_assert (!GTK_OBJECT_FLOATING (widget));
+ g_assert (!g_object_is_floating (widget));
+
+ GTK_OBJECT_SET_FLAGS (widget, GTK_FLOATING);
+ g_assert (GTK_OBJECT_FLOATING (widget));
+ g_assert (g_object_is_floating (widget));
+
+ g_object_ref_sink (widget);
+ g_assert (!GTK_OBJECT_FLOATING (widget));
+ g_assert (!g_object_is_floating (widget));
+
+ g_object_force_floating (G_OBJECT (widget));
+ g_assert (GTK_OBJECT_FLOATING (widget));
+ g_assert (g_object_is_floating (widget));
+
+ g_object_ref (widget);
+ gtk_object_sink (GTK_OBJECT (widget));
+ g_assert (!GTK_OBJECT_FLOATING (widget));
+ g_assert (!g_object_is_floating (widget));
+
+ g_assert (!destroyed);
+ g_object_unref (widget);
+ g_assert (destroyed);
+
+ return 0;
+}