+
+/* Number of rows in a step-increment */
+#define ROWS_PER_STEP 1
+
+
+static void
+page_vertical (GtkSheet *sheet, GtkScrollType dir)
+{
+ gint old_row = sheet->active_cell.row ;
+ glong vpixel = g_sheet_row_start_pixel (sheet->row_geometry, old_row);
+
+ gint new_row;
+
+ vpixel -= g_sheet_row_start_pixel (sheet->row_geometry,
+ min_visible_row (sheet));
+
+ switch ( dir)
+ {
+ case GTK_SCROLL_PAGE_DOWN:
+ gtk_adjustment_set_value (sheet->vadjustment,
+ sheet->vadjustment->value +
+ sheet->vadjustment->page_increment);
+ break;
+ case GTK_SCROLL_PAGE_UP:
+ gtk_adjustment_set_value (sheet->vadjustment,
+ sheet->vadjustment->value -
+ sheet->vadjustment->page_increment);
+
+ break;
+ default:
+ g_assert_not_reached ();
+ break;
+ }
+
+
+ vpixel += g_sheet_row_start_pixel (sheet->row_geometry,
+ min_visible_row (sheet));
+
+ new_row = yyy_row_ypixel_to_row (sheet, vpixel);
+
+ change_active_cell (sheet, new_row,
+ sheet->active_cell.col);
+}
+
+
+static void
+step_sheet (GtkSheet *sheet, GtkScrollType dir)
+{
+ gint current_row = sheet->active_cell.row;
+ gint current_col = sheet->active_cell.col;
+ gint new_row = current_row;
+ gint new_col = current_col;
+ gboolean forbidden = FALSE;
+
+ switch ( dir)
+ {
+ case GTK_SCROLL_STEP_DOWN:
+ new_row++;
+ break;
+ case GTK_SCROLL_STEP_UP:
+ new_row--;
+ break;
+ case GTK_SCROLL_STEP_RIGHT:
+ new_col++;
+ break;
+ case GTK_SCROLL_STEP_LEFT:
+ new_col--;
+ break;
+ default:
+ g_assert_not_reached ();
+ break;
+ }
+
+
+ maximize_int (&new_row, 0);
+ maximize_int (&new_col, 0);
+
+ minimize_int (&new_row,
+ g_sheet_row_get_row_count (sheet->row_geometry) - 1);
+
+ minimize_int (&new_col,
+ g_sheet_column_get_column_count (sheet->column_geometry) - 1);
+
+ g_signal_emit (sheet, sheet_signals[TRAVERSE], 0,
+ current_row, current_col,
+ &new_row, &new_col, &forbidden);
+
+ if (forbidden)
+ return;
+
+ change_active_cell (sheet, new_row, new_col);
+
+ if ( new_col > max_fully_visible_column (sheet))
+ {
+ glong hpos =
+ g_sheet_column_start_pixel (sheet->column_geometry,
+ new_col + 1);
+ hpos -= sheet->hadjustment->page_size;
+
+ gtk_adjustment_set_value (sheet->hadjustment,
+ hpos);
+ }
+ else if ( new_col < min_fully_visible_column (sheet))
+ {
+ glong hpos =
+ g_sheet_column_start_pixel (sheet->column_geometry,
+ new_col);
+
+ gtk_adjustment_set_value (sheet->hadjustment,
+ hpos);
+ }
+
+
+ if ( new_row > max_fully_visible_row (sheet))
+ {
+ glong vpos =
+ g_sheet_row_start_pixel (sheet->row_geometry,
+ new_row + 1);
+ vpos -= sheet->vadjustment->page_size;
+
+ gtk_adjustment_set_value (sheet->vadjustment,
+ vpos);
+ }
+ else if ( new_row < min_fully_visible_row (sheet))
+ {
+ glong vpos =
+ g_sheet_row_start_pixel (sheet->row_geometry,
+ new_row);
+
+ gtk_adjustment_set_value (sheet->vadjustment,
+ vpos);
+ }
+}
+
+
+static gboolean