[evolution] I#998 - ETree: Hard to see thread expander on selected row



commit d0a53492d5fb1b421e6a08c3ee3fd0116e488327
Author: Milan Crha <mcrha redhat com>
Date:   Tue Jul 7 18:52:12 2020 +0200

    I#998 - ETree: Hard to see thread expander on selected row
    
    Closes https://gitlab.gnome.org/GNOME/evolution/-/issues/998

 src/e-util/e-cell-tree.c  | 27 ++++++++++++++-------------
 src/e-util/e-table-item.c | 12 +++++++++++-
 src/e-util/e-table-item.h |  3 ++-
 3 files changed, 27 insertions(+), 15 deletions(-)
---
diff --git a/src/e-util/e-cell-tree.c b/src/e-util/e-cell-tree.c
index 7d5c56a9d3..ab7c4e972b 100644
--- a/src/e-util/e-cell-tree.c
+++ b/src/e-util/e-cell-tree.c
@@ -322,7 +322,9 @@ ect_draw (ECellView *ecell_view,
 
                        r = rect;
                        r.width -= 2;
-                       draw_expander (tree_view, cr, expanded ? GTK_EXPANDER_EXPANDED : 
GTK_EXPANDER_COLLAPSED, GTK_STATE_NORMAL, &r);
+                       draw_expander (tree_view, cr,
+                               expanded ? GTK_EXPANDER_EXPANDED : GTK_EXPANDER_COLLAPSED,
+                               (flags & E_CELL_SELECTED) != 0 ? GTK_STATE_SELECTED : GTK_STATE_NORMAL, &r);
                }
        }
 
@@ -392,6 +394,7 @@ typedef struct {
        ETreeTableAdapter *etta;
        ETreePath node;
        gboolean expanded;
+       gboolean selected;
        gboolean finish;
        GdkRectangle area;
 } animate_closure_t;
@@ -418,11 +421,9 @@ animate_expander (gpointer data)
 
        cr = gdk_cairo_create (window);
 
-       draw_expander (
-               closure->ectv, cr, closure->expanded ?
-               GTK_EXPANDER_SEMI_COLLAPSED :
-               GTK_EXPANDER_SEMI_EXPANDED,
-               GTK_STATE_NORMAL, &closure->area);
+       draw_expander (closure->ectv, cr,
+               closure->expanded ? GTK_EXPANDER_SEMI_COLLAPSED : GTK_EXPANDER_SEMI_EXPANDED,
+               closure->selected ? GTK_STATE_SELECTED : GTK_STATE_NORMAL, &closure->area);
        closure->finish = TRUE;
 
        cairo_destroy (cr);
@@ -449,6 +450,7 @@ ect_event (ECellView *ecell_view,
        ETreeTableAdapter *etta = e_cell_tree_get_tree_table_adapter (ecell_view->e_table_model, row);
        ETreePath node = e_cell_tree_get_node (ecell_view->e_table_model, row);
        gint offset = offset_of_node (tree_view, ecell_view->e_table_model, row, view_col);
+       gboolean selected = e_table_item_get_row_selected (tree_view->cell_view.e_table_item_view, row);
        gint result;
 
        layout = GTK_LAYOUT (tree_view->canvas);
@@ -477,17 +479,16 @@ ect_event (ECellView *ecell_view,
                                        area.height += hgt;
 
                                cr = gdk_cairo_create (window);
-                               draw_expander (
-                                       tree_view, cr, expanded ?
-                                       GTK_EXPANDER_SEMI_EXPANDED :
-                                       GTK_EXPANDER_SEMI_COLLAPSED,
-                                       GTK_STATE_NORMAL, &area);
+                               draw_expander (tree_view, cr,
+                                       expanded ? GTK_EXPANDER_SEMI_EXPANDED : GTK_EXPANDER_SEMI_COLLAPSED,
+                                       selected ? GTK_STATE_SELECTED : GTK_STATE_NORMAL, &area);
                                cairo_destroy (cr);
 
                                closure->ectv = tree_view;
                                closure->etta = etta;
                                closure->node = node;
                                closure->expanded = expanded;
+                               closure->selected = selected;
                                closure->area = area;
                                tree_view->animate_timeout =
                                        e_named_timeout_add_full (G_PRIORITY_DEFAULT,
@@ -521,7 +522,7 @@ ect_event (ECellView *ecell_view,
                                        tree_view, cr,
                                        e_tree_table_adapter_node_is_expanded (etta, node) ?
                                        GTK_EXPANDER_EXPANDED : GTK_EXPANDER_COLLAPSED,
-                                       in_expander ? GTK_STATE_PRELIGHT : GTK_STATE_NORMAL, &area);
+                                       selected ? GTK_STATE_SELECTED : in_expander ? GTK_STATE_PRELIGHT : 
GTK_STATE_NORMAL, &area);
                                cairo_destroy (cr);
 
                                tree_view->prelit = in_expander;
@@ -548,7 +549,7 @@ ect_event (ECellView *ecell_view,
                                tree_view, cr,
                                e_tree_table_adapter_node_is_expanded (etta, node) ?
                                GTK_EXPANDER_EXPANDED : GTK_EXPANDER_COLLAPSED,
-                               GTK_STATE_NORMAL, &area);
+                               selected ? GTK_STATE_SELECTED : GTK_STATE_NORMAL, &area);
                        cairo_destroy (cr);
 
                        tree_view->prelit = FALSE;
diff --git a/src/e-util/e-table-item.c b/src/e-util/e-table-item.c
index 0e96fac7f4..8184551bbd 100644
--- a/src/e-util/e-table-item.c
+++ b/src/e-util/e-table-item.c
@@ -1883,6 +1883,16 @@ eti_unrealize (GnomeCanvasItem *item)
                (*GNOME_CANVAS_ITEM_CLASS (e_table_item_parent_class)->unrealize)(item);
 }
 
+gboolean
+e_table_item_get_row_selected (ETableItem *eti,
+                              gint row)
+{
+       g_return_val_if_fail (E_IS_TABLE_ITEM (eti), FALSE);
+
+       return row >= 0 && row < eti->rows &&
+               e_selection_model_is_row_selected (E_SELECTION_MODEL (eti->selection), view_to_model_row 
(eti, row));
+}
+
 static void
 eti_draw_grid_line (ETableItem *eti,
                     cairo_t *cr,
@@ -2035,7 +2045,7 @@ eti_draw (GnomeCanvasItem *item,
 
                xd = x_offset;
 
-               selected = e_selection_model_is_row_selected (E_SELECTION_MODEL (eti->selection), 
view_to_model_row (eti,row));
+               selected = e_table_item_get_row_selected (eti, row);
 
                g_object_get (
                        eti->selection,
diff --git a/src/e-util/e-table-item.h b/src/e-util/e-table-item.h
index 4bd788fc1f..0e982d00d1 100644
--- a/src/e-util/e-table-item.h
+++ b/src/e-util/e-table-item.h
@@ -264,7 +264,8 @@ void                e_table_item_cursor_scrolled    (ETableItem *eti);
 
 void           e_table_item_cancel_scroll_to_cursor
                                                (ETableItem *eti);
-
+gboolean       e_table_item_get_row_selected   (ETableItem *eti,
+                                                gint row);
 void           e_table_item_freeze             (ETableItem *eti);
 void           e_table_item_thaw               (ETableItem *eti);
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]