Как чередовать светлые / темные строки в GtkTreeView?

Я прочитал и попробовал существующие решения для этого вопроса, и я не могу заставить их работать. Я надеялся, что кто-то может указать, что я делаю неправильно, или сказать мне, почему эти решения больше не работают.

https://thegnomejournal.wordpress.com/2011/03/15/styling-gtk-with-css/ (5 лет)Виджеты для вывода списка файлов с помощью gtk (2 года)Как вы меняете чередующиеся цвета фона строки gtk.TreeView в pygtk? (4 года)https://askubuntu.com/questions/285559/how-to-reenable-alternating-grey-lines-in-nautilus-files-3-6-list-view (3 года)

Я хотел убедиться, что эти решения не работают, поэтому я создал таблицу стилей, подобную этой:

GtkTreeView row {
    color: #FFFFFF;
    background-color: #FF0000;
}
GtkTreeView row:nth-child(even) {
    background-color: #FF00FF;
}
GtkTreeView row:nth-child(odd) {
    background-color: #00FFFF;
}

с яркими цветами, чтобы сделать разницу в цвете строк действительно очевидной. Затем я сделал небольшое приложение для загрузки дерева:

#include <gtk/gtk.h>

int main(int argc, char *argv[])
{
  int i;
  gtk_init(&argc,&argv);
  //GtkBuilder* b = gtk_builder_new_from_file("derp.glade.xml");
  GtkWidget* top = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  GtkListStore* items = gtk_list_store_new(2,
             ,                              G_TYPE_STRING,
                                           G_TYPE_STRING);

  GtkWidget* view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(items));
  gtk_tree_view_insert_column_with_attributes
    (GTK_TREE_VIEW(view),
     0,
     "Herp",
     gtk_cell_renderer_text_new(),
     "text",0,
     NULL);
  gtk_tree_view_insert_column_with_attributes
    (GTK_TREE_VIEW(view),
     1,
     "Derp",
     gtk_cell_renderer_text_new(),
     "text",1,
     NULL);
  gtk_container_add(GTK_CONTAINER(top),view);
  GtkCssProvider* prov = gtk_css_provider_new();
  gtk_css_provider_load_from_path
    (prov,
    "derp.css",
     NULL);
  gtk_style_context_add_provider
    (gtk_widget_get_style_context(view),
     GTK_STYLE_PROVIDER(prov),
     GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);

  GtkTreeIter iter;
  gtk_tree_model_get_iter_first(GTK_TREE_MODEL(items),&iter);

  for(i=0;i<3;++i) {
    gtk_list_store_insert_with_values
      (items,&iter,0,
       0, "Row",
       1, "Row",
       -1);
  }
  gtk_widget_show_all(top);
  gtk_main();
  return 0;
}

составлено с:

gcc -o test teststyle.c `pkg-config gtk+-3.0 --cflags --libs`

Когда я запускаю приложение, три строки отображаются с цветом # 00FFFF в качестве фона. Они не чередуются. Они принимают цвет только из раздела "row: nth-child (odd)", а четные строки принимают этот цвет. Вмешательство в css-файл может также сделать некоторые забавные вещи. Переключение нечетное и четное, например:

GtkTreeView row {
    color: #FFFFFF;
    background-color: #FF0000;
}
GtkTreeView row:nth-child(odd) {
    background-color: #FF00FF;
}
GtkTreeView row:nth-child(even) {
    background-color: #00FFFF;
}

Теперь все строки отображаются как # FF00FF без чередования. Я думаю, что GTK просто не в состоянии каким-то образом прочитать псевдоклассы, случайно превратив «строку GtkTreeView: nth-child (odd)» в «строку GtkTreeView» и полностью пропустив селектор «nth-child (even)» полностью. Если я уберу нечетный селектор и получу только четное:

GtkTreeView row {
    color: #FFFFFF;
    background-color: #FF0000;
}
GtkTreeView row:nth-child(even) {
    background-color: #FF00FF;
}

Теперь у него есть цвет фона # FF0000, поэтому он полностью игнорирует (даже) правила.

Я попытался установить подсказку о правилах в древовидном представлении, и это ничего не сделало, кроме жалобы на то, что установка подсказки о правилах устарела. Я использую GTK 3.18.9 в базовой системе Arch с XFCE в качестве оконного менеджера. Я что-то здесь не так делаю? Или моя версия GTK как-то испортилась?

Ответы на вопрос(2)

Ваш ответ на вопрос