]> Pileus Git - ~andy/gtk/commitdiff
treeview: propagate the selected state from the row
authorCosimo Cecchi <cosimoc@gnome.org>
Mon, 7 Mar 2011 05:17:08 +0000 (00:17 -0500)
committerMatthias Clasen <mclasen@redhat.com>
Mon, 7 Mar 2011 13:12:48 +0000 (08:12 -0500)
An expander in a row can't be selected on its own otherwise. This way
themes can override the expander colors when the row is selected.

https://bugzilla.gnome.org/show_bug.cgi?id=644089

gtk/gtktreeview.c

index be37219636bbda77c540e5d82e2698e141cec891..aefe6f62153c820f4c6a806f6c5cdf58c4d6b8ad 100644 (file)
@@ -10026,6 +10026,7 @@ gtk_tree_view_draw_arrow (GtkTreeView *tree_view,
   gint x2;
   gint vertical_separator;
   gint expander_size;
+  GtkCellRendererState flags;
 
   widget = GTK_WIDGET (tree_view);
   context = gtk_widget_get_style_context (widget);
@@ -10051,10 +10052,17 @@ gtk_tree_view_draw_arrow (GtkTreeView *tree_view,
     state |= GTK_STATE_FLAG_INSENSITIVE;
   else
     {
+      flags = 0;
+
+      if (GTK_RBNODE_FLAG_SET (node, GTK_RBNODE_IS_SELECTED))
+        flags |= GTK_CELL_RENDERER_SELECTED;
+
+      state = gtk_cell_renderer_get_state (NULL, widget, flags);
+
       if (node == tree_view->priv->button_pressed_node &&
           x >= area.x && x <= (area.x + area.width) &&
           y >= area.y && y <= (area.y + area.height))
-        state |= GTK_STATE_FLAG_SELECTED;
+        state |= GTK_STATE_FLAG_FOCUSED;
 
       if (node == tree_view->priv->prelight_node &&
           tree_view->priv->arrow_prelit)