]> Pileus Git - ~andy/gtk/commitdiff
Correct calculation of the cell focus rectangle
authorKristian Rietveld <kris@gtk.org>
Wed, 15 Dec 2010 20:17:27 +0000 (21:17 +0100)
committerKristian Rietveld <kris@gtk.org>
Wed, 15 Dec 2010 20:17:27 +0000 (21:17 +0100)
The cell's focus rectangle is located around the cell's aligned area.
To get to the correct coordinates for this rectangle, we have to subtract
focus_line_width from the found aligned_area.

gtk/gtkcellarea.c

index 079ab56afed6c678c8101ecf04686c3a49bae6eb..10190214e672d6ae3c56a0152a142f2f6af94c91 100644 (file)
@@ -1056,10 +1056,21 @@ render_cell (GtkCellRenderer        *renderer,
        (renderer == focus_cell || 
         gtk_cell_area_is_focus_sibling (data->area, focus_cell, renderer)))))
     {
+      gint focus_line_width;
       GdkRectangle cell_focus;
 
       gtk_cell_renderer_get_aligned_area (renderer, data->widget, flags, &inner_area, &cell_focus);
 
+      gtk_widget_style_get (data->widget,
+                            "focus-line-width", &focus_line_width,
+                            NULL);
+
+      /* The focus rectangle is located around the aligned area of the cell */
+      cell_focus.x -= focus_line_width;
+      cell_focus.y -= focus_line_width;
+      cell_focus.width += 2 * focus_line_width;
+      cell_focus.height += 2 * focus_line_width;
+
       if (data->first_focus)
        {
          data->first_focus = FALSE;