Sheet Grid Lines: Correct positioning.
[pspp] / src / ui / gui / pspp-sheet-view.c
index 25883cf44fc087ac8baae399f55506fbfdf82aef..709adea3918cce671c5ea330f307be89acbda23c 100644 (file)
@@ -2032,6 +2032,9 @@ pspp_sheet_view_size_allocate (GtkWidget     *widget,
   if (allocation->width != old_allocation.width)
     width_changed = TRUE;
 
+  if (gtk_widget_get_direction(widget) == GTK_TEXT_DIR_RTL)   
+    allocation->x += allocation->width - tree_view->priv->width ;
+
   gtk_widget_set_allocation (widget, allocation);
 
   /* We size-allocate the columns first because the width of the
@@ -3825,35 +3828,30 @@ pspp_sheet_view_draw_vertical_grid_lines (PsppSheetView    *tree_view,
                                          gint max_y)
 {
   GList *list = tree_view->priv->columns;
-  gint i = 0;
-  gint current_x = 0;
+  gint x = 0;
 
   if (tree_view->priv->grid_lines != PSPP_SHEET_VIEW_GRID_LINES_VERTICAL
       && tree_view->priv->grid_lines != PSPP_SHEET_VIEW_GRID_LINES_BOTH)
     return;
 
   /* Only draw the lines for visible rows and columns */
-  for (list = tree_view->priv->columns; list; list = list->next, i++)
+  gboolean rtl = (gtk_widget_get_direction (GTK_WIDGET (tree_view)) == GTK_TEXT_DIR_RTL);
+
+  for (list = (rtl ? g_list_last (tree_view->priv->columns) : g_list_first (tree_view->priv->columns));
+       list;
+       list = (rtl ? list->prev : list->next))
     {
       PsppSheetViewColumn *column = list->data;
-      gint x;
 
       if (! column->visible)
        continue;
 
-      current_x += column->width;
-
-      /* Generally the grid lines should fit within the column, but for the
-         last visible column we put it just past the end of the column.
-         (Otherwise horizontal grid lines sometimes stick out by one pixel.) */
-      x = current_x;
-      if (i != n_visible_columns - 1)
-        x--;
+      x += column->width;
 
       cairo_set_line_width (cr, 1.0);
       cairo_set_line_cap (cr, CAIRO_LINE_CAP_SQUARE);
       cairo_move_to (cr, x + 0.5, min_y);
-      cairo_line_to (cr, x + 0.5, max_y - min_y);
+      cairo_line_to (cr, x + 0.5, max_y - min_y - 0.5);
       cairo_stroke (cr);
     }
 }
@@ -5127,7 +5125,6 @@ validate_visible_area (PsppSheetView *tree_view)
   GtkTreePath *above_path = NULL;
   GtkTreeIter iter;
   int node = -1;
-  gboolean size_changed = FALSE;
   gint total_height;
   gint area_above = 0;
   gint area_below = 0;
@@ -5301,23 +5298,6 @@ validate_visible_area (PsppSheetView *tree_view)
   pspp_sheet_view_set_top_row (tree_view, above_path, -area_above);
   pspp_sheet_view_top_row_to_dy (tree_view);
 
-  /* update width/height and queue a resize */
-  if (size_changed)
-    {
-      GtkRequisition requisition;
-
-      /* We temporarily guess a size, under the assumption that it will be the
-       * same when we get our next size_allocate.  If we don't do this, we'll be
-       * in an inconsistent state if we call top_row_to_dy. */
-
-      gtk_widget_size_request (GTK_WIDGET (tree_view), &requisition);
-      gtk_adjustment_set_upper (tree_view->priv->hadjustment, MAX (gtk_adjustment_get_upper (tree_view->priv->hadjustment), (gfloat)requisition.width));
-      gtk_adjustment_set_upper (tree_view->priv->vadjustment, MAX (gtk_adjustment_get_upper (tree_view->priv->vadjustment), (gfloat)requisition.height));
-      gtk_adjustment_changed (tree_view->priv->hadjustment);
-      gtk_adjustment_changed (tree_view->priv->vadjustment);
-      gtk_widget_queue_resize (GTK_WIDGET (tree_view));
-    }
-
   gtk_tree_row_reference_free (tree_view->priv->scroll_to_path);
   tree_view->priv->scroll_to_path = NULL;