[prev in list] [next in list] [prev in thread] [next in thread] 

List:       gtk-devel
Subject:    Re: Pluggable widget types and implementations
From:       Tim Janik <timj () imendio ! com>
Date:       2006-12-08 16:49:01
Message-ID: Pine.LNX.4.62.0612081735270.26260 () master ! birnet ! private
[Download RAW message or body]

On Fri, 8 Dec 2006, Tristan Van Berkom wrote:

> On Fri, 2006-12-08 at 16:27 +0100, Tim Janik wrote:
> [...]
>>>
>>> i.e.
>>> gtk_stock_appoint_type ("file-chooser",
>>>                         MYLIB_TYPE_SEXY_FILECHOOSER);
>>
>> this is simply not possible without introducing a seperate widget type
>> naming system which we aren't planning to do (e.g. because it'd be redundant
>> to the type names). it can also not be automated because type names are not
>> known before the first use of the corresponding _get_type function.
>
>  I really don't intend to start a shouting match here, I just honestly
> think you misunderstood the reason for my proposal, so please let me try
> and clarify just once.

i hope you understood the part where i said that you can't refer to
types (by name or by reference) before their corresponding _get_type
function has been called. which, for many object types, my be *never*
during a programs runtime.

>  A separate naming scheme is exactly what I propose, not a widget
> naming scheme but a "stock type" naming scheme, "GtkFileChooser" is a
> GType name, the GType name is only related to the stock name insofar as
> it happens to be the default implementation of the symbolic
> "file-chooser" identifier.

there is no point in having an extra naming scheme for widget types.
we have one already: widget type names.
there is also no point in having an extra naming scheme for interface
types (what you call "identifier" above).
we have one already: interface type names.

> This abstraction would ensure that there is no confusion at the GType
> level, if we start substituting types at the GType level then types
> will inevidably be substituted underneath unsuspecting code, that
> doesnt sound safe to me at all,

we will not do that. never ever. i've adressed that in another
email already:
   http://mail.gnome.org/archives/gtk-devel-list/2006-November/msg00133.html
i.e. we guarantee that:
   G_TYPE_FROM_INSTANCE (g_object_new (TYPE_FOO, NULL)) == TYPE_FOO.
holds, you may assert that in your code. we will not break that guarantee.

let me use your words: we will not substitute types at the GType level.

> ensuring that there is a proper
> abstraction will ensure that types will only be substituted for
> code that was suspecting that a dynamic implementation would be
> chosen for the given task.

in that same email, i did also suggest a proper abstraction.
it's just not a string, it's a factory API that you use to create
objects conforming to a certain type, but not necessarily exactly
of that type (g_object_new would be good for that):

   /* craete instance conforming to prerequisite_type */
   g_factory_create (GType prerequisite_type);

   /* appoint an implementaiton_type for a prerequisite_type */
   g_factory_appoint_type (GType prerequisite_type,
                           GType implementation_type);

> Maybe you can understand a little more what my concern is, if
> you do insist on aliasing types using actual types as aliases
> for other types, would you please elaborate on why my fears and
> concerns are unfounded ?

i don't quite understand that paragraph. but i hope the above
helped you with your fears. basically, my suggestion was to *not*
change (break) existing GType/GObject API, but to create objects
with g_factory_create() which creates instances conforming to the
type passed in, but not necessarily of exactly the same type.

> Best regards,
>                   -Tristan

---
ciaoTJ
_______________________________________________
gtk-devel-list mailing list
gtk-devel-list@gnome.org
http://mail.gnome.org/mailman/listinfo/gtk-devel-list
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic