[Vala] Strange recursion behavoir
- From: "Konstantin P." <ria freelander gmail com>
- To: vala-list gnome org
- Subject: [Vala] Strange recursion behavoir
- Date: Tue, 10 Feb 2015 23:08:36 +0700
Hello! I have following C function:
gint apply_properties_to_menu(GList* widgets, GMenuModel* menu)
{
GList* l;
GMenuModel* menu_link;
GtkWidget* menuw;
int len = g_menu_model_get_n_items(menu);
int i, j ,ret;
for (i=0, l=widgets; (i<len) && (l!= NULL); i++,l = l->next)
{
while (GTK_IS_SEPARATOR_MENU_ITEM(l->data))
l = l->next;
menuw = gtk_menu_item_get_submenu(GTK_MENU_ITEM(l->data));
menu_link = g_menu_model_get_item_link(menu,i,"submenu");
if (menuw && menu_link)
{
apply_properties_to_menu(gtk_container_get_children(GTK_CONTAINER(menuw)),menu_link);
g_object_unref(menu_link);
}
menu_link = g_menu_model_get_item_link(menu,i,"section");
if (menu_link)
{
ret = apply_properties_to_menu(l,menu_link);
for (j = 0; j < ret; j++)
l=l->next;
g_object_unref(menu_link);
}
/* Apply some properties */
}
return i-1;
}
It works as expected. But straightforward rewrite to vala (below) is not:
public static int apply_menu_properties(List<Widget> widgets, MenuModel
menu)
{
var len = menu.get_n_items();
unowned List<Widget> l;
int i = 0;
for(i = 0, l = widgets;(i<len)&&(l!=null);i++,l=l.next)
{
while (l.data is SeparatorMenuItem) l = l.next;
var menuw = ( l.data as Gtk.MenuItem).get_submenu() as Gtk.Menu;
var submenu = menu.get_item_link(i,"submenu");
if (menuw !=null && submenu !=null)
apply_menu_properties(menuw.get_children(),submenu);
var section = menu.get_item_link(i,"section");
//Here is some strange vala behaviour, that I cannot catch
if (section != null)
{
var ret = apply_menu_properties(l,section);
for (var j=0;j<ret;j++) l = l.next;
}
//end here
/* Apply some properties */
}
return i-1;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]