gtk_container_get_children

geo*_*geo -1 c

在此输入图像描述当在预设列表中打印工作站列表并且您处于列表的开头或末尾时,您会看到许多空项目.我创建了大约20个站的列表并尝试显示它们,转到列表的开头和结尾.我认为问题在于这段代码:

static void add_button_clicked_cb(GtkWidget *widget, gpointer data)
{
    preset *ps;
    gchar *buffer;
    GtkTreeIter iter = {0};
    GtkAdjustment* v_scb;
    GtkTreePath *path = NULL;
    GList* menuitems;
    GtkWidget *menuitem;

    ps = malloc(sizeof(preset));
    ps->title = g_strdup(_("unnamed"));
    ps->freq = rint(gtk_adjustment_get_value(adj)) / STEPS;
    settings.presets = g_list_append(settings.presets, (gpointer) ps);
    buffer = g_strdup_printf("%.2f", ps->freq);

    gtk_list_store_append(list_store, &iter);
    gtk_list_store_set(list_store, &iter, 0, ps->title, 1, buffer, -1);

    g_free(buffer);
    gtk_tree_selection_unselect_all(selection);

    v_scb = gtk_scrollable_get_vadjustment(GTK_SCROLLABLE(list_view));
    gtk_adjustment_set_value(v_scb, gtk_adjustment_get_upper(v_scb));

    if (main_visible) {
        gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(preset_combo), ps->title);
        mom_ps = g_list_length(settings.presets) - 1;
        preset_combo_set_item(mom_ps);

        menuitems = gtk_container_get_children(GTK_CONTAINER(tray_menu));
        menuitem = gtk_menu_item_new_with_label(ps->title); 

        gtk_menu_shell_insert(GTK_MENU_SHELL(tray_menu), menuitem, mom_ps);     
        g_signal_connect(G_OBJECT(menuitem), "activate", (GCallback)preset_menuitem_activate_cb, (gpointer)mom_ps);
        gtk_widget_show(menuitem);
    }

    buffer = g_strdup_printf("%d", g_list_length(settings.presets) - 1);
    path = gtk_tree_path_new_from_string(buffer);
    g_free(buffer);
    gtk_tree_view_set_cursor(GTK_TREE_VIEW(list_view), path, NULL, FALSE);
    gtk_tree_path_free(path);
}
Run Code Online (Sandbox Code Playgroud)

你能建议我怎么纠正它?

zog*_*rtz 5

在里面if (main_visible),你有:

menuitems = gtk_container_get_children(GTK_CONTAINER(tray_menu));

也就是说,您将值设置menuitems为该函数调用的返回值.但是,其余的代码实际上都没有对menuitems做任何事情.所以,编译器会给你那个警告.

修复它可能就像简单地删除menuitems一样简单:

gtk_container_get_children(GTK_CONTAINER(tray_menu));

那肯定会摆脱警告.但你必须考虑一下:也许你应该用该函数调用的返回值做一些事情,而你没有做任何事情的原因是你忘了(或者其他).