diff --git a/ChangeLog b/ChangeLog index 222c39605c..546b62f14d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +Thu Dec 22 17:30:59 2005 Tim Janik + + * gtk/gtkobject.c: derive GtkObject from GUnowned if possible. + gtk_object_class_init(): install a floating flag handler with + libgobject, so for GtkObjects the flag is stored as GTK_FLOATING + in the ->flags member. + + * configure.in: depend on GLib-2.8.5. + 2005-12-21 Matthias Clasen * gtk/gtkiconview.c (adjust_wrap_width): Adjust the diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 222c39605c..546b62f14d 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,12 @@ +Thu Dec 22 17:30:59 2005 Tim Janik + + * gtk/gtkobject.c: derive GtkObject from GUnowned if possible. + gtk_object_class_init(): install a floating flag handler with + libgobject, so for GtkObjects the flag is stored as GTK_FLOATING + in the ->flags member. + + * configure.in: depend on GLib-2.8.5. + 2005-12-21 Matthias Clasen * gtk/gtkiconview.c (adjust_wrap_width): Adjust the diff --git a/configure.in b/configure.in index c827f9930c..62f9b0cf61 100644 --- a/configure.in +++ b/configure.in @@ -31,7 +31,7 @@ m4_define([gtk_api_version], [2.0]) m4_define([gtk_binary_version], [2.4.0]) # required versions of other packages -m4_define([glib_required_version], [2.7.1]) +m4_define([glib_required_version], [2.8.5]) m4_define([pango_required_version], [1.9.0]) m4_define([atk_required_version], [1.0.1]) m4_define([cairo_required_version], [0.9.2]) diff --git a/gtk/gtkobject.c b/gtk/gtkobject.c index 38fe200062..8adcd07160 100644 --- a/gtk/gtkobject.c +++ b/gtk/gtkobject.c @@ -95,7 +95,7 @@ gtk_object_get_type (void) NULL, /* value_table */ }; - object_type = g_type_register_static (G_TYPE_OBJECT, "GtkObject", + object_type = g_type_register_static (g_object_compat_control (1, 0), "GtkObject", &object_info, G_TYPE_FLAG_ABSTRACT); } @@ -313,6 +313,29 @@ gtk_object_add_arg_type (const gchar *arg_name, g_object_class_install_property (oclass, arg_id, pspec); } +static guint +gtk_object_floating_flag_handler (GtkObject *object, + gint job) +{ + /* FIXME: remove this whole thing once GTK+ breaks ABI */ + switch (job) + { + guint32 oldvalue; + case +1: /* force floating if possible */ + do + oldvalue = g_atomic_int_get (&object->flags); + while (!g_atomic_int_compare_and_exchange (&object->flags, oldvalue, oldvalue | GTK_FLOATING)); + return oldvalue & GTK_FLOATING; + case -1: /* sink if possible */ + do + oldvalue = g_atomic_int_get (&object->flags); + while (!g_atomic_int_compare_and_exchange (&object->flags, oldvalue, oldvalue & ~(guint32) GTK_FLOATING)); + return oldvalue & GTK_FLOATING; + default: /* check floating */ + return 0 != (g_atomic_int_get (&object->flags) & GTK_FLOATING); + } +} + static void gtk_object_class_init (GtkObjectClass *class) { @@ -320,6 +343,8 @@ gtk_object_class_init (GtkObjectClass *class) parent_class = g_type_class_ref (G_TYPE_OBJECT); + g_object_compat_control (2, gtk_object_floating_flag_handler); + gobject_class->set_property = gtk_object_set_property; gobject_class->get_property = gtk_object_get_property; gobject_class->dispose = gtk_object_dispose;