Re: passing object(widgets) references: preferred way [gtkbuilder, g_object(set/get)_data, or..]



2009/2/2 Fabio Mariotti <mariotti fabio gmail com>:
> Dears,
>
> I guess it is a beginner question. The problem is:

Hi,
   I recommend that you use structures or even objects
to store your pointers - a perfect simple example of this
is the DevHelp sources, which are marvelously cleanly
maintained and easy to understand.

Basically, you *want* to have some module specific or
at least one program specific structure to hold any
kind of module specific or global data (not only objects
but also possibly integers, strings etc), this is a perfect
object/structure to pass as user data to all signal callbacks
and store all the relevant widget (or GtkAction) pointers.

Libglade's GladeXML was severely memory intensive so
it was always important to free it up and store pointers
in advance (as opposed to calling glade_xml_get_widget
on the memory bloated object). GtkBuilder is not that
memory intensive - but the truth is that there is no reason
for you to need a hash table full of widget pointers by name
either, all you need is some pointers to a handful of widgets
relevant to your program flow control.

Based on these facts and requirements I currently conclude
that holding pointers to relevant widgets after building your
ui with builder and freeing the builder object; is still the
cleanest, most readable and most efficient way to write
libglade/gtkbuilder using UI code (using object qdata IMO is
just a convenient hack for people who need a quick fix
without properly refactoring their module, I would avoid it
as much as possible in fresh new code).

Hope this gives you some good insight.

Cheers,
                -Tristan

>
> At a given point you have to set the text of a textbox


> deep within your code. How do I retrieve the object?
> Or better I do I set the object to be found?
>
> The gtkbuilder option 1:
> I use gtkbuilder and I globally store the *builder reference
> so that I can always use:
> gtk_builder_get_object(builder,"myobject")
> [and free the builder only once I close the app]
>
> The gtkbuilder option 2:
> I use gtkbuilder and I set up a local function "mycode_reference_all()"
> in the style of the old glade which was "g_object_set_data()" for every
> entry and free the builder after allocation.
>
> I guess that the difference is on one side the memory of the builder
> and on the other a matter of style. At least for this simple picture.
> In more complex cases I guess it is also a matter of sharing
> information between parts of the code and OOP style stuff.
> But I need you to teach me. Which one?
>
> In this respect. What would be the difference if I set up a couple or more
> structures to store the pointers instead to use a "g_object_set_data()"
> to share the widgets references?
> I partially answer my question:
> We need a mechanism in order to create widgets which is consistent.
> But why can't we do it implicit? I mean: lookup_widget(parent,"name").
> It might be that it is already there... so sorry for double asking..
>
> In any case: in my pretty simple apps I can work it out.
> But what it will be the "best practice" for complex applications?
>
> cheers
> Fabio
>
>
> _______________________________________________
> gtk-list mailing list
> gtk-list gnome org
> http://mail.gnome.org/mailman/listinfo/gtk-list
>
>


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]