Hi,
Here's a patch that fixes a crash when creating sheet object with
default size.
Emmanuel.
Index: src/sheet-control-gui.c
===================================================================
RCS file: /cvs/gnome/gnumeric/src/sheet-control-gui.c,v
retrieving revision 1.368
diff -u -r1.368 sheet-control-gui.c
--- src/sheet-control-gui.c 26 Jan 2005 20:26:36 -0000 1.368
+++ src/sheet-control-gui.c 12 Feb 2005 13:40:05 -0000
@@ -1853,23 +1853,24 @@
} ObjDragInfo;
static gboolean
-snap_pos_to_grid (GnmCanvas *gcanvas, gboolean is_col, int *pos, gboolean to_min, gboolean is_mouse_move)
+snap_pos_to_grid (ObjDragInfo *info, gboolean is_col, int *pos, gboolean to_min)
{
- Sheet *sheet = ((SheetControl *) gcanvas->simple.scg)->sheet;
+ GnmCanvas *gcanvas = info->gcanvas;
+ Sheet *sheet = SHEET_CONTROL (info->scg)->sheet;
int cell = is_col ? gcanvas->first.col : gcanvas->first.row;
int pixel = is_col ? gcanvas->first_offset.col : gcanvas->first_offset.row;
gboolean snap = FALSE;
int length = 0;
- ColRowInfo const *info;
+ ColRowInfo const *cr_info;
int sheet_max = is_col ? SHEET_MAX_COLS : SHEET_MAX_ROWS;
if (*pos < pixel) {
while (cell > 0 && *pos < pixel) {
- info = is_col ?
+ cr_info = is_col ?
sheet_col_get_info (sheet, --cell):
sheet_row_get_info (sheet, --cell);
- if (info->visible) {
- length = info->size_pixels;
+ if (cr_info->visible) {
+ length = cr_info->size_pixels;
pixel -= length;
}
}
@@ -1877,11 +1878,11 @@
*pos = pixel;
} else {
do {
- info = is_col ?
+ cr_info = is_col ?
sheet_col_get_info (sheet, cell):
sheet_row_get_info (sheet, cell);
- if (info->visible) {
- length = info->size_pixels;
+ if (cr_info->visible) {
+ length = cr_info->size_pixels;
if (pixel <= *pos && *pos <= pixel + length) {
snap = TRUE;
}
@@ -1892,7 +1893,7 @@
}
if (snap) {
- if (is_mouse_move)
+ if (info->is_mouse_move)
*pos = (abs (*pos - pixel) < abs (*pos - pixel - length)) ? pixel : pixel + length;
else
*pos = (pixel == *pos) ? pixel : (to_min ? pixel : pixel + length);
@@ -1902,26 +1903,23 @@
}
static void
-snap_to_grid (GnmCanvas *gcanvas,
+snap_to_grid (ObjDragInfo *info,
gboolean snap_x, gboolean snap_y,
double *x, double *y,
- gboolean to_left, gboolean to_top,
- gboolean is_mouse_move,
- gboolean rtl)
+ gboolean to_left, gboolean to_top)
{
int x_int, y_int;
- if (gcanvas == NULL)
- return;
+ g_return_if_fail (info->gcanvas != NULL);
- foo_canvas_w2c (FOO_CANVAS (gcanvas), *x, *y, &x_int, &y_int);
- if (rtl) x_int = GNUMERIC_CANVAS_FACTOR_X - x_int;
+ foo_canvas_w2c (FOO_CANVAS (info->gcanvas), *x, *y, &x_int, &y_int);
+ if (info->scg->rtl) x_int = GNUMERIC_CANVAS_FACTOR_X - x_int;
- if (snap_x) snap_pos_to_grid (gcanvas, TRUE, &x_int, to_left, is_mouse_move);
- if (snap_y) snap_pos_to_grid (gcanvas, FALSE, &y_int, to_top, is_mouse_move);
+ if (snap_x) snap_pos_to_grid (info, TRUE, &x_int, to_left);
+ if (snap_y) snap_pos_to_grid (info, FALSE, &y_int, to_top);
- if (rtl) x_int = GNUMERIC_CANVAS_FACTOR_X - x_int;
- foo_canvas_c2w (FOO_CANVAS (gcanvas), x_int, y_int, x, y);
+ if (info->scg->rtl) x_int = GNUMERIC_CANVAS_FACTOR_X - x_int;
+ foo_canvas_c2w (FOO_CANVAS (info->gcanvas), x_int, y_int, x, y);
}
static void
@@ -1930,15 +1928,14 @@
gboolean move_x = (x_idx >= 0);
gboolean move_y = (y_idx >= 0);
double x, y;
- gboolean rtl = info->gcanvas->simple.scg->rtl;
x = move_x ? coords[x_idx] + info->dx : 0;
y = move_y ? coords[y_idx] + info->dy : 0;
if (snap) {
- snap_to_grid (info->gcanvas, move_x, move_y, &x, &y,
- rtl ? info->dx > 0. : info->dx < 0.,
- info->dy < 0., info->is_mouse_move, rtl);
+ snap_to_grid (info, move_x, move_y, &x, &y,
+ info->scg->rtl ? info->dx > 0. : info->dx < 0.,
+ info->dy < 0.);
if (info->primary_object == so || NULL == info->primary_object) {
if (move_x) info->dx = x - coords[x_idx];
if (move_y) info->dy = y - coords[y_idx];
_______________________________________________
gnumeric-list mailing list
[email protected]
http://mail.gnome.org/mailman/listinfo/gnumeric-list