Re: an additional argument flag
- From: Owen Taylor <owt1 cornell edu>
- To: Tero Pulkkinen <terop students cc tut fi>
- Cc: gtk-list redhat com
- Subject: Re: an additional argument flag
- Date: 22 Feb 1998 12:34:18 -0500
Tero Pulkkinen <terop@students.cc.tut.fi> writes:
> > > Therefore, either we duplicate all the "widget setup" code in each
> > > _new() into the gtk-- constructors (which is what we currently do,
> > > since it's quite tolerable for most widgets), or we get a new entry
> > > point in the construction chain right after the call to
> > > gtk_type_new().
>
> Owen Taylor <owt1@cornell.edu> writes:
> > Hmmm, some day I'm going to have to take a look at gtk-- and see
> > what is going on there. I get the feeling that there is some
> > horrible perversion of the GTK type system going on there. ;-)
> >
> > Does gtk-- actually _change_ the type of the created widget. I don't
> > see how this is necessary, or how it can successfully be integrated
> > with normal GTK+ code.
>
> For overriding virtual methods from C widgets, gtk-- "derives" from every
> gtk widget and thus it has separate type and more importantly, its own
> virtual function table. Then in the new type's class_init, gtk--
> replaces that existing entries in the C virtual function table with
> functions that call C++ virtual methods (these C++ virtual methods
> of course then call the default implementation of what the widget
> would have done anyway..). This way, you can after derivation override
> everything gtk provides in its widgets.
Interesting. Does gtk-- handle widgets that are not created ny
gtk-- correctly? (This seems necessary for dealing with widgets like
Dialog that create their own children) It seems like it should
conceptually work fine just to point a Gtk_Widget at an existing
widget - though the typically downcasting/RTTI problems
presumably occur. (Can you take a GtkWidget *, create a Gtk_Widget
for it, then narrow that to a Gtk_Button later?)
[...]
> * Calling Gtk_Object::destroy starts the following
> function calls:
> * Gtk_Object::destroy() (called by user)
> * gtk_object_destroy(o) (see NOTE1 below)
> * Gtk_Object::destroy_callback(o) (see NOTE2 below)
> * Gtk_Object::destroy_impl()
> * gtk_real_object_destroy(o) (see NOTE3 below)
>
> And this way, by overriding the destroy_impl function does work
> as supposed.
>
> NOTE1: that isnt done correctly currently (13 Dec 97), now it calls
> gtk_signal_emit instead and works in most cases, not all.
I hope this has been fixed. It will cause major problems in CVS GTK.
Thanks for the explanation. I think I understand the basics of
gtk-- now...
> Deriving from widgets is the only thing we need to do with gtk--. No
> black magic involved. Deriving from widgets currently requires that
> we rewrite all *_new() methods. On some widgets this cut/paste is kinda
> large as there is static methods called from *_new() methods :)
I think we should specify that _new() functions can't call
any static functions - presumably by moving all initialization
into a construct() function, instead of making everything
non-static.
Regards,
Owen
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]