On Sat, 2008-03-22 at 19:23 +0000, Phil Housley wrote:
> On 22/03/2008, Mikael Hermansson <[EMAIL PROTECTED]> wrote:
> > 1:
> >
> >  If I want a copy of Gtk.TreePath I have to use weak but the problem
is
> >  howto free it after use?
> >
> >  TreePath a;
> >  weak TreePath b;
> >
> >  b=a.copy();
> >  b.[free/unref] <- does not work.
> 
> You should never have to free anything in Vala, except where you
> specifically choose not to use the automatic memory management (by
> using pointers.)  When you get a weak reference to an object, you are
> accepting that the object might be free'd even though you still have a
> reference to it - this usually implies that the actual management of
> that object is totally hidden away inside a library.

valac --pkg gtk+-2.0

If I take a copy of TreeView it will not free the object.

Example code here:

using Gtk;
public class Tree
{
TreeView tw;
construct 
{
TreeIter iter;
TreePath path;
weak TreePath path2;
tw = new TreeView.with_model(new ListStore(1, typeof(string)));
var model =(ListStore) tw.get_model();
model.append(out iter);
model.get_iter_first(out iter);
path = model.get_path(iter);
path2=path.copy();
}
}


Created C code last line in the tree_constructur:

                path2 = gtk_tree_path_copy (path);
                (path == NULL ? NULL : (path = (gtk_tree_path_free
(path), NULL)));
        }

This means app will leak the gtk.TreePath.... 



> >  List selection = tw.get_tree_selection().get_selected_rows();
> >
> Again, you never need to free.  Probably the weak ref is used because
> the library might decide to free the object as soon as it is no longer
> valid.

Well then the binding is wrong because Gtk reference API says returned
selection list should be free after use and if I take a close look in
the C source created it will not free the list and its objects.

I dont know howto fix the binding maybe I should send a bugreport about
this...

>  3: Also the model parameter should not be unrefed
>
>  TreeModel model;
>  selections=treeviewPlaylist.get_selection().get_selected_rows( out
>  model);
>  if (selection)
>   return ;
> Should it definitely not be unref'd?  Normally and out parameter will
> result in a strong reference being made, and so an unref is needed
> when the local variable goes out of scope.  You could well be right in
> this case though, I haven't looked at what this code actually does.
> 

If i not pass weak TreeModel to the .get_selected_rows(model) it will
unref the object and the result is a corrupt TreeModel.

Greets

Mikael Hermansson


_______________________________________________
Vala-list mailing list
Vala-list@gnome.org
http://mail.gnome.org/mailman/listinfo/vala-list

Reply via email to