Wie wechsle ich helle / dunkle Zeilen in GtkTreeView?

Ich habe die vorhandenen Lösungen für diese Frage gelesen und ausprobiert und kann sie nicht zum Laufen bringen. Ich hatte gehofft, jemand könnte darauf hinweisen, was ich falsch mache, oder mir sagen, warum diese Lösungen nicht mehr funktionieren.

https: //thegnomejournal.wordpress.com/2011/03/15/styling-gtk-with-css (5 Jahre alt)Widgets zum Auflisten von Dateien mit gtk (2 Jahre alt)Wie ändere ich die Hintergrundfarben einer gtk.TreeView in pygtk? (4 Jahre alt)https: //askubuntu.com/questions/285559/how-to-reenable-alternating-grey-lines-in-nautilus-files-3-6-list-vie (3 Jahre alt)

Ich wollte sichergehen, dass diese Lösungen nicht funktionieren, also habe ich ein Stylesheet wie das folgende erstellt:

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

mit grellen Farben, nur um den Unterschied in der Zeilenfarbe wirklich deutlich zu machen. Dann habe ich eine kleine Anwendung erstellt, um eine Baumansicht zu laden:

#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;
}

kompiliert mit:

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

Wenn ich die Anwendung starte, werden die drei Zeilen mit # 00FFFF als Hintergrundfarbe angezeigt. Sie wechseln sich nicht ab. Sie nehmen nur die Farbe aus dem Abschnitt "row: nth-child (odd)" an, und gerade Zeilen nehmen diese Farbe an. Das Spielen mit der CSS-Datei kann auch einige lustige Dinge bewirken. Gerade und ungerade schalten, zum Beispiel:

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

Jetzt werden alle Zeilen ohne Änderung als # FF00FF angezeigt. Ich denke, GTK kann die Pseudoklassen einfach nicht lesen, indem es versehentlich "GtkTreeView row: nth-child (odd)" in "GtkTreeView row" verwandelt und den Selektor "nth-child (even)" gänzlich verfehlt. Wenn ich den ungeraden Selektor entferne und nur gerade habe:

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

Jetzt hat es die Hintergrundfarbe # FF0000 und ignoriert (gerade) Regeln vollständig.

Ich habe versucht, den Regelhinweis in der Baumansicht festzulegen, und es hat nichts getan, außer sich darüber zu beschweren, dass das Festlegen des Regelhinweises veraltet ist. Ich verwende GTK 3.18.9 auf einem einfachen Arch-System mit XFCE als Fenstermanager. Mache ich hier etwas falsch? Oder ist meine GTK-Version nur irgendwie durcheinander?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage