Пустые строки в GtkListBox

Я разрабатываю своё приложение (под десктоп) в котором прибегнул к помощи GtkListBox.

Заполнение виджета происходит следующим образом:

void __dial_fill_dir_list(GtkWidget *list_box, char *path) {
    GtkWidget *dir_element = NULL, *elm_box = NULL;

    struct dirent *entry = NULL;
    DIR *dirptr = NULL;
    int i = 0;

    dirptr = opendir(path);
    if (!dirptr) {
        perror("fd");
        return ;
    }

    entry = readdir(dirptr);
    while (entry) {
        elm_box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5);
        dir_element = gtk_label_new(entry->d_name);

        gtk_label_set_justify(GTK_LABEL(dir_element), GTK_JUSTIFY_LEFT);
        gtk_box_pack_start(GTK_BOX(elm_box), dir_element, FALSE, FALSE, 5);
        gtk_list_box_insert(GTK_LIST_BOX(list_box), elm_box, i++);

        entry = readdir(dirptr);
    }

    closedir(dirptr);
}

Далее, мне требуется изменить наполнение виджета, это происходит так:

void __dial_go_by_addr_bttn_click(GtkWidget *bttn, gpointer data) {
    GtkWidget *addr_entry, *list_box;
    char *path = NULL;

    addr_entry = *(GtkWidget**)pl_read("msg:dial_addr_entry");
    path = (char*)gtk_entry_get_text(GTK_ENTRY(addr_entry));

    list_box = *(GtkWidget**)pl_read("msg:dial_list_box");
    __dial_list_box_clear(list_box);
    __dial_fill_dir_list(list_box, path);
}

(Не обращайте внимания на функции с префиксом pl). Очистка GtkListBox выглядит так:

void __dial_remove_widget_glib_func(GtkWidget *element, GtkWidget *list_box) {
    gtk_container_remove(GTK_CONTAINER(list_box), element);
}

void __dial_list_box_clear(GtkWidget *list_box) {
    GList *child_list;

    child_list = gtk_container_get_children(GTK_CONTAINER(list_box));
    g_list_foreach(child_list, (GFunc)__dial_remove_widget_glib_func, list_box);
}

Однако, проблема в том, что после удаления и повторного наполнения виджета, вместо заведомых GtkLabel, появляется пустой список, в котором все строки пусты. Не знаю, с чем это может быть связано. Всё что знал - переползал, ничего не нашёл.


Ответы (0 шт):