Re: GTK_FLOATING broken in 2.9?
- From: Tim Janik <timj imendio com>
- To: Havoc Pennington <hp redhat com>
- Cc: Dave Benson <daveb idealab com>, Gtk+ Developers <gtk-devel-list gnome org>, Morten Welinder <mortenw gnome org>
- Subject: Re: GTK_FLOATING broken in 2.9?
- Date: Tue, 20 Dec 2005 17:27:01 +0100 (CET)
On Tue, 20 Dec 2005, Havoc Pennington wrote:
Hi,
[much theoretical rant that i don't think is worth discussing in detail again]
Full proposal:
- GObject has a floating flag, but it's false by default and
object creator owns a hard reference
- there's a method float() to set the floating flag to true;
you must own a reference to call it, and the ref you own
becomes community property / floating
- GFloatingObject calls float() at construct time to float the
initial reference; creator of GFloatingObject owns no ref
- GtkObject also calls float() at construct time, but does not
derive from GFloatingObject, just uses the same facilities
to implement floating
- it's an error to unref with the floating flag set
and refcount = 1
- (optionally) in the gtk+ stack, GFloatingObject is never used,
because it would be too confusing to mix these in with the old
APIs
- (definitely) something that's a GObject today can't be changed to
GFloatingObject or to call float(), this is incompatible
that'd mean you have g_floating_object_ref_sink() and gtk_object_sink(),
and you can't use the former on the latter without good reason.
also, why is the floating flag introduced on GObject right away
but can only be used on a GFLoatingObject?
to me it seems like, in your proposal the only reason to have
GFloatingObject at all is to change the floating default upon
creation, so GObject can stay a non-floating object base type
like Dave Benson already suggested here:
http://mail.gnome.org/archives/gtk-devel-list/2005-December/msg00213.html
picking up this particular idea will actually give us:
GObject:
- created with ref_count=1
- not initially floating
/* check whether a GObject is floating */
gboolean g_object_is_floating (gpointer object);
/* force a GObject to have a floating reference, reserved for
* object implementors (or eventually language bindings)
*/
void g_object_force_floating (GObject *object);
/* reference an object, remove possible floating reference */
gpointer g_object_ref_sink (gpointer object);
GFloatingObject, derived from GObject:
- created with ref_count=1
- initial reference is floating
GtkObject, derived from GFloating object:
- created with ref_count=1
- initial reference is floating
- floating flag is implemented as GtkObject.flags>K_FLOATING
via a compat hook, i.e. g_object_ref_sink() will work on this
and GTK_OBJECT_SET_FLAGS() will as well.
Havoc
---
ciaoTJ
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]