libadwaita:AdwComboRow 的不稳定行为——我的错还是错误?

libadwaita: erratic behaviour from AdwComboRow -- my fault or bug?

我正在尝试在 libadwaita 中创建一个 AdwComboRow,但是在我多次更改所选条目后,它会突然选择一个与我单击的条目不同的条目。这通常需要一段时间才能开始发生(大约 20 次更改),但似乎我对所选条目的了解越多,这种情况就越常见。

#include <gtk/gtk.h>
#include <adwaita.h>

GtkApplication *app;
GtkWidget *window;
GtkWidget *listbox;
GtkWidget *combo;
GtkStringList *slist;

const char *entries[] = {
    "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten"
};

const size_t n_entries = 10;

void app_startup(void)
{
    adw_init();
}

void app_activate(void)
{
    window = adw_application_window_new(app);
    listbox = gtk_list_box_new();
    combo = adw_combo_row_new();
    adw_preferences_row_set_title(ADW_PREFERENCES_ROW(combo), "Test");
    slist = gtk_string_list_new(NULL);

    for (size_t i = 0; i < n_entries; i++)
        gtk_string_list_append(slist, entries[i]);

    adw_combo_row_set_model(ADW_COMBO_ROW(combo), G_LIST_MODEL(slist));
    gtk_list_box_append(GTK_LIST_BOX(listbox), combo);

    adw_application_window_set_content(ADW_APPLICATION_WINDOW(window),
        listbox);

    gtk_widget_show(window);
}

int main(int argc, char **argv)
{
    app = gtk_application_new("org.null.null", G_APPLICATION_FLAGS_NONE);
    g_signal_connect(app, "startup", G_CALLBACK(app_startup), NULL);
    g_signal_connect(app, "activate", G_CALLBACK(app_activate), NULL);

    g_application_run(G_APPLICATION(app), argc, argv);

    g_object_unref(app);

    return 0;
}

此行为可在 Gentoo amd64(gui-libs/gtk-4.6.0gui-libs/libadwaita-1.0.1,以及 gui-libs/gtk-4.6.1gui-libs/libadwaita-1.0.2)上重现,同一系统上的 Debian Bookworm chroot( libgtk-4-dev/testing,now 4.6.1+ds-1 amd64libadwaita-1-dev/testing,now 1.1~rc-1 amd64),以及 PinePhone 上的 Mobian Bookworm(与 chroot 相同的包版本,但 arm64 构建),这让我担心这可能是我的错误而不是 libadwaita 中的错误。我在这里遗漏了什么吗?

进行了更多挖掘,发现我可以使用 gtk_drop_down_new_from_strings 创建的简单 GtkDropDown 重现它;根本不需要 libadwaita!从那里,很快就发现这实际上是 GTK bug #2877。不幸的是,这个错误在这一点上似乎非常陈旧,但至少我知道这毕竟不是我的错。