Commit 48d5a61f authored by Morten Welinder's avatar Morten Welinder Committed by Morten Welinder

New function, extracted from wbcg_zoom_feedback. (wbcg_zoom_feedback):

2005-05-03  Morten Welinder  <terra@gnome.org>

	* src/workbook-control-gui.c (cb_zoom_change): New function,
	extracted from wbcg_zoom_feedback.
	(wbcg_zoom_feedback): Remove zoom_feedback method.
	(wbcg_sheet_add): Don't attach to sheet notify signals here.
	(wbcg_sheet_focus): Do it here so we only watch one sheet at a
	time.
	(wbcg_sheet_remove, wbcg_sheet_remove_all): Disconnect here too.

	* src/sheet.c (sheet_set_zoom_factor): Make static and add
	zoom-factor property.  All callers changed.
parent 0d94df42
2005-05-03 Morten Welinder <terra@gnome.org>
* src/workbook-control-gui.c (cb_zoom_change): New function,
extracted from wbcg_zoom_feedback.
(wbcg_zoom_feedback): Remove zoom_feedback method.
(wbcg_sheet_add): Don't attach to sheet notify signals here.
(wbcg_sheet_focus): Do it here so we only watch one sheet at a
time.
(wbcg_sheet_remove, wbcg_sheet_remove_all): Disconnect here too.
* src/sheet.c (sheet_set_zoom_factor): Make static and add
zoom-factor property. All callers changed.
* src/workbook-view.c (wb_view_prefs_update): Remove.
* src/workbook-control-priv.h: Remove prefs_update member.
......
2005-05-03 Morten Welinder <terra@gnome.org>
* src/workbook-control-gui.c (cb_zoom_change): New function,
extracted from wbcg_zoom_feedback.
(wbcg_zoom_feedback): Remove zoom_feedback method.
(wbcg_sheet_add): Don't attach to sheet notify signals here.
(wbcg_sheet_focus): Do it here so we only watch one sheet at a
time.
(wbcg_sheet_remove, wbcg_sheet_remove_all): Disconnect here too.
* src/sheet.c (sheet_set_zoom_factor): Make static and add
zoom-factor property. All callers changed.
* src/workbook-view.c (wb_view_prefs_update): Remove.
* src/workbook-control-priv.h: Remove prefs_update member.
......
......@@ -817,7 +817,7 @@ applix_fetch_sheet (ApplixReadState *state, char const *name)
if (sheet == NULL) {
sheet = sheet_new (state->wb, name);
workbook_sheet_attach (state->wb, sheet, NULL);
sheet_set_zoom_factor (sheet, (double )(state->zoom) / 100., FALSE, FALSE);
g_object_set (sheet, "zoom-factor", state->zoom / 100.0, NULL);
sheet_flag_recompute_spans (sheet);
}
......
......@@ -4962,8 +4962,7 @@ excel_read_SCL (BiffQuery *q, Sheet *sheet)
g_return_if_fail (denom != 0);
sheet_set_zoom_factor (sheet,
((double)num)/((double)denom), FALSE, FALSE);
g_object_set (sheet, "zoom-factor", num / (double)denom, NULL);
}
/**
......
......@@ -781,8 +781,7 @@ qpro_read_sheet (QProReadState *state)
gnm_io_warning (state->io_context,
_("Invalid zoom %hd %%"), high);
else
sheet_set_zoom_factor (sheet, ((double)high) / 100.,
FALSE, FALSE);
g_object_set (sheet, "zoom-factor", high / 100.0, NULL);
}
}
break;
......
......@@ -4369,8 +4369,7 @@ cmd_zoom_undo (GnmCommand *cmd,
for (i = 0, l = me->sheets; l != NULL; l = l->next, i++) {
Sheet *sheet = l->data;
sheet_set_zoom_factor (sheet, me->old_factors[i], FALSE, TRUE);
g_object_set (sheet, "zoom-factor", me->old_factors[i], NULL);
}
return FALSE;
......@@ -4388,8 +4387,7 @@ cmd_zoom_redo (GnmCommand *cmd,
for (l = me->sheets; l != NULL; l = l->next) {
Sheet *sheet = l->data;
sheet_set_zoom_factor (sheet, me->new_factor, FALSE, TRUE);
g_object_set (sheet, "zoom-factor", me->new_factor, NULL);
}
return FALSE;
......@@ -4400,10 +4398,8 @@ cmd_zoom_finalize (GObject *cmd)
{
CmdZoom *me = CMD_ZOOM (cmd);
if (me->sheets)
g_slist_free (me->sheets);
if (me->old_factors)
g_free (me->old_factors);
g_slist_free (me->sheets);
g_free (me->old_factors);
gnm_command_finalize (cmd);
}
......
......@@ -95,7 +95,8 @@ enum {
PROP_DISPLAY_OUTLINES_BELOW,
PROP_DISPLAY_OUTLINES_RIGHT,
PROP_TAB_FOREGROUND,
PROP_TAB_BACKGROUND
PROP_TAB_BACKGROUND,
PROP_ZOOM_FACTOR
};
static void sheet_finalize (GObject *obj);
......@@ -229,6 +230,56 @@ sheet_set_name (Sheet *sheet, char const *new_name)
sheet);
}
struct resize_colrow {
Sheet *sheet;
gboolean horizontal;
};
static gboolean
cb_colrow_compute_pixels_from_pts (ColRowInfo *cri, void *data)
{
struct resize_colrow *closure = data;
colrow_compute_pixels_from_pts (cri, closure->sheet, closure->horizontal);
return FALSE;
}
static void
cb_clear_rendered_cells (gpointer ignored, GnmCell *cell)
{
if (cell->rendered_value != NULL) {
cell->row_info->needs_respan = TRUE;
rendered_value_destroy (cell->rendered_value);
cell->rendered_value = NULL;
}
}
static void
sheet_set_zoom_factor (Sheet *sheet, double factor)
{
struct resize_colrow closure;
if (fabs (factor - sheet->last_zoom_factor_used) < 1e-6)
return;
sheet->last_zoom_factor_used = factor;
/* First, the default styles */
colrow_compute_pixels_from_pts (&sheet->rows.default_style, sheet, FALSE);
colrow_compute_pixels_from_pts (&sheet->cols.default_style, sheet, TRUE);
/* Then every column and row */
closure.sheet = sheet;
closure.horizontal = TRUE;
colrow_foreach (&sheet->cols, 0, SHEET_MAX_COLS - 1,
&cb_colrow_compute_pixels_from_pts, &closure);
closure.horizontal = FALSE;
colrow_foreach (&sheet->rows, 0, SHEET_MAX_ROWS - 1,
&cb_colrow_compute_pixels_from_pts, &closure);
g_hash_table_foreach (sheet->cell_hash, (GHFunc)&cb_clear_rendered_cells, NULL);
SHEET_FOREACH_CONTROL (sheet, view, control, sc_scale_changed (control););
}
static void
gnm_sheet_set_property (GObject *object, guint property_id,
const GValue *value, GParamSpec *pspec)
......@@ -284,6 +335,9 @@ gnm_sheet_set_property (GObject *object, guint property_id,
sheet->tab_color = color;
break;
}
case PROP_ZOOM_FACTOR:
sheet_set_zoom_factor (sheet, g_value_get_double (value));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break;
......@@ -339,6 +393,9 @@ gnm_sheet_get_property (GObject *object, guint property_id,
case PROP_TAB_BACKGROUND:
g_value_set_boxed (value, sheet->tab_color);
break;
case PROP_ZOOM_FACTOR:
g_value_set_double (value, sheet->last_zoom_factor_used);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break;
......@@ -375,7 +432,6 @@ gnm_sheet_init (Sheet *sheet)
sheet->sheet_objects = NULL;
sheet->max_object_extent.col = sheet->max_object_extent.row = 0;
sheet->last_zoom_factor_used = 1.0;
sheet->solver_parameters = solver_param_new ();
sheet->cols.max_used = -1;
......@@ -418,6 +474,12 @@ gnm_sheet_init (Sheet *sheet)
sheet->names = NULL;
sheet_style_init (sheet);
/*
* "zoom-factor" is a construction parameter and will thus
* override this.
*/
sheet->last_zoom_factor_used = -1;
}
static void
......@@ -555,6 +617,18 @@ gnm_sheet_class_init (GObjectClass *gobject_class)
GNM_STYLE_COLOR_TYPE,
GSF_PARAM_STATIC |
G_PARAM_READWRITE));
/* What is this doing in sheet? */
g_object_class_install_property
(gobject_class,
PROP_ZOOM_FACTOR,
g_param_spec_double ("zoom-factor",
_("Zoom Factor"),
_("The level of zoom used for this sheet."),
0.1, 5.0,
1.0,
GSF_PARAM_STATIC |
G_PARAM_CONSTRUCT |
G_PARAM_READWRITE));
signals[DETACHED_FROM_WORKBOOK] = g_signal_new
("detached_from_workbook",
......@@ -594,7 +668,9 @@ sheet_new_with_type (Workbook *wb, char const *name, GnmSheetType type)
g_return_val_if_fail (wb != NULL, NULL);
g_return_val_if_fail (name != NULL, NULL);
sheet = g_object_new (gnm_sheet_get_type (), NULL);
sheet = g_object_new (GNM_SHEET_TYPE,
"zoom-factor", (double)gnm_app_prefs->zoom,
NULL);
sheet->index_in_wb = -1;
sheet->workbook = wb;
......@@ -606,9 +682,6 @@ sheet_new_with_type (Workbook *wb, char const *name, GnmSheetType type)
g_utf8_casefold (sheet->name_unquoted, -1);
sheet->sheet_type = type;
/* Force the zoom change inorder to initialize things */
sheet_set_zoom_factor (sheet, gnm_app_prefs->zoom, TRUE, TRUE);
sheet->display_formulas = (type == GNM_SHEET_XLM);
sheet->hide_grid =
sheet->hide_col_header =
......@@ -636,19 +709,6 @@ sheet_new (Workbook *wb, char const *name)
return sheet_new_with_type (wb, name, GNM_SHEET_DATA);
}
struct resize_colrow {
Sheet *sheet;
gboolean horizontal;
};
static gboolean
cb_colrow_compute_pixels_from_pts (ColRowInfo *cri, void *data)
{
struct resize_colrow *closure = data;
colrow_compute_pixels_from_pts (cri, closure->sheet, closure->horizontal);
return FALSE;
}
/****************************************************************************/
static GnmValue *
......@@ -817,80 +877,6 @@ sheet_apply_style (Sheet *sheet,
/****************************************************************************/
static void
cb_clear_rendered_cells (gpointer ignored, GnmCell *cell)
{
if (cell->rendered_value != NULL) {
cell->row_info->needs_respan = TRUE;
rendered_value_destroy (cell->rendered_value);
cell->rendered_value = NULL;
}
}
/**
* sheet_set_zoom_factor : Change the zoom factor.
* @sheet : The sheet
* @f : The new zoom
* @force : Force the zoom to change irrespective of its current value.
* Most callers will want to say FALSE.
* @update : recalculate the spans too
**/
void
sheet_set_zoom_factor (Sheet *sheet, double f, gboolean force, gboolean update)
{
struct resize_colrow closure;
double factor;
g_return_if_fail (IS_SHEET (sheet));
/* Bound zoom between 10% and 500% */
factor = (f < .1) ? .1 : ((f > 5.) ? 5. : f);
if (!force) {
double const diff = sheet->last_zoom_factor_used - factor;
if (-.0001 < diff && diff < .0001)
return;
}
sheet->last_zoom_factor_used = factor;
/* First, the default styles */
colrow_compute_pixels_from_pts (&sheet->rows.default_style, sheet, FALSE);
colrow_compute_pixels_from_pts (&sheet->cols.default_style, sheet, TRUE);
/* Then every column and row */
closure.sheet = sheet;
closure.horizontal = TRUE;
colrow_foreach (&sheet->cols, 0, SHEET_MAX_COLS-1,
&cb_colrow_compute_pixels_from_pts, &closure);
closure.horizontal = FALSE;
colrow_foreach (&sheet->rows, 0, SHEET_MAX_ROWS-1,
&cb_colrow_compute_pixels_from_pts, &closure);
g_hash_table_foreach (sheet->cell_hash, (GHFunc)&cb_clear_rendered_cells, NULL);
SHEET_FOREACH_CONTROL (sheet, view, control, sc_scale_changed (control););
/*
* The font size does not scale linearly with the zoom factor
* we will need to recalculate the pixel sizes of all cells.
* We also need to render any cells which have not yet been
* rendered.
*/
if (update) {
sheet_flag_recompute_spans (sheet);
sheet->priv->recompute_visibility = TRUE;
sheet->priv->reposition_objects.col =
sheet->priv->reposition_objects.row = 0;
sheet_update_only_grid (sheet);
SHEET_FOREACH_VIEW (sheet, sv,
if (wb_view_cur_sheet (sv_wbv (sv)) == sheet)
WORKBOOK_VIEW_FOREACH_CONTROL (sv_wbv (sv), control,
wb_control_zoom_feedback (control););
);
}
}
ColRowInfo *
sheet_row_new (Sheet *sheet)
{
......@@ -4419,7 +4405,6 @@ sheet_dup (Sheet const *src)
TRUE, TRUE);
dst = sheet_new (wb, name);
g_free (name);
sheet_set_zoom_factor (dst, src->last_zoom_factor_used, FALSE, FALSE);
/* Copy the print info */
print_info_free (dst->print_info);
......@@ -4445,7 +4430,9 @@ sheet_dup (Sheet const *src)
/* Copy scenarios */
dst->scenarios = scenario_copy_all (src->scenarios, dst);
sheet_set_zoom_factor (dst, dst->last_zoom_factor_used, TRUE, TRUE);
/* We need a more general property copying solution. */
g_object_set (dst, "zoom-factor", src->last_zoom_factor_used, NULL);
sheet_set_dirty (dst, TRUE);
sheet_redraw_all (dst, TRUE);
......
......@@ -93,9 +93,6 @@ Sheet *sheet_dup (Sheet const *source_sheet);
void sheet_destroy (Sheet *sheet);
void sheet_destroy_contents (Sheet *sheet);
void sheet_set_zoom_factor (Sheet *sheet, double factor,
gboolean force, gboolean respan);
/* GnmCell management */
GnmCell *sheet_cell_get (Sheet const *sheet, int col, int row);
GnmCell *sheet_cell_fetch (Sheet *sheet, int col, int row);
......
......@@ -148,8 +148,6 @@ static GNM_ACTION_DEF (cb_zoom_activated)
* display consistent
*/
cmd_zoom (wbc, g_slist_append (NULL, sheet), factor / 100.);
else
wb_control_zoom_feedback (wbc);
}
static void
......
......@@ -342,22 +342,6 @@ wbcg_set_title (WorkbookControl *wbc, char const *title)
g_free (full_title);
}
static void
wbcg_zoom_feedback (WorkbookControl *wbc)
{
Sheet *sheet = wb_control_cur_sheet (wbc);
WorkbookControlGUI *wbcg = (WorkbookControlGUI *)wbc;
if (wbcg_ui_update_begin (wbcg)) {
int pct = sheet->last_zoom_factor_used * 100 + .5;
char *buffer = g_strdup_printf ("%d%%", pct);
WorkbookControlGUIClass *wbcg_class = WBCG_CLASS (wbcg);
wbcg_class->set_zoom_label (wbcg, buffer);
g_free (buffer);
wbcg_ui_update_end (wbcg);
}
}
static void
wbcg_edit_line_set (WorkbookControl *wbc, char const *text)
{
......@@ -879,6 +863,39 @@ cb_direction_change (G_GNUC_UNUSED Sheet *null_sheet,
g_object_set (scg->hs, "inverted", text_is_rtl, NULL);
}
static void
cb_zoom_change (Sheet *sheet,
G_GNUC_UNUSED GParamSpec *null_pspec,
WorkbookControlGUI *wbcg)
{
if (wbcg_ui_update_begin (wbcg)) {
int pct = sheet->last_zoom_factor_used * 100 + .5;
char *text = g_strdup_printf ("%d%%", pct);
WorkbookControlGUIClass *wbcg_class = WBCG_CLASS (wbcg);
wbcg_class->set_zoom_label (wbcg, text);
g_free (text);
wbcg_ui_update_end (wbcg);
}
}
static void
disconnect_sheet_signals (WorkbookControlGUI *wbcg, Sheet *sheet)
{
int i;
SheetControlGUI *scg;
if (!sheet)
return;
i = wbcg_sheet_to_page_index (wbcg, sheet, &scg);
g_return_if_fail (i >= 0);
g_signal_handlers_disconnect_by_func (sheet, cb_sheet_tab_change, scg->label);
g_signal_handlers_disconnect_by_func (sheet, cb_toggle_menu_item_changed, wbcg);
g_signal_handlers_disconnect_by_func (sheet, cb_direction_change, scg);
g_signal_handlers_disconnect_by_func (sheet, cb_zoom_change, wbcg);
}
/**
* wbcg_sheet_add:
* @sheet: a sheet
......@@ -920,21 +937,6 @@ wbcg_sheet_add (WorkbookControl *wbc, SheetView *sv)
"edit_finished",
G_CALLBACK (cb_sheet_label_edit_finished), wbcg);
g_object_connect (G_OBJECT (sheet),
"signal::notify::name", cb_sheet_tab_change, scg->label,
"signal::notify::tab-foreground", cb_sheet_tab_change, scg->label,
"signal::notify::tab-background", cb_sheet_tab_change, scg->label,
"signal::notify::display-formulas", cb_toggle_menu_item_changed, wbcg,
"signal::notify::display-zeros", cb_toggle_menu_item_changed, wbcg,
"signal::notify::display-grid", cb_toggle_menu_item_changed, wbcg,
"signal::notify::display-column-header", cb_toggle_menu_item_changed, wbcg,
"signal::notify::display-row-header", cb_toggle_menu_item_changed, wbcg,
"signal::notify::display-outlines", cb_toggle_menu_item_changed, wbcg,
"signal::notify::display-outlines-below", cb_toggle_menu_item_changed, wbcg,
"signal::notify::display-outlines-right", cb_toggle_menu_item_changed, wbcg,
"signal::notify::text-is-rtl", cb_direction_change, scg,
NULL);
/* do not preempt the editable label handler */
g_signal_connect_after (G_OBJECT (scg->label),
"button_press_event",
......@@ -989,9 +991,7 @@ wbcg_sheet_remove (WorkbookControl *wbc, Sheet *sheet)
i = wbcg_sheet_to_page_index (wbcg, sheet, &scg);
g_return_if_fail (i >= 0);
g_signal_handlers_disconnect_by_func (sheet, cb_sheet_tab_change, scg->label);
g_signal_handlers_disconnect_by_func (sheet, cb_toggle_menu_item_changed, wbcg);
g_signal_handlers_disconnect_by_func (sheet, cb_direction_change, scg);
disconnect_sheet_signals (wbcg, sheet);
gtk_notebook_remove_page (wbcg->notebook, i);
wbcg_menu_state_sheet_count (wbcg);
......@@ -1009,6 +1009,25 @@ wbcg_sheet_focus (WorkbookControl *wbc, Sheet *sheet)
gtk_notebook_set_current_page (wbcg->notebook, i);
if (wbcg->rangesel == NULL)
gnm_expr_entry_set_scg (wbcg->edit_line.entry, scg);
disconnect_sheet_signals (wbcg, wbcg_cur_sheet (wbcg));
g_object_connect
(G_OBJECT (sheet),
"signal::notify::name", cb_sheet_tab_change, scg->label,
"signal::notify::tab-foreground", cb_sheet_tab_change, scg->label,
"signal::notify::tab-background", cb_sheet_tab_change, scg->label,
"signal::notify::display-formulas", cb_toggle_menu_item_changed, wbcg,
"signal::notify::display-zeros", cb_toggle_menu_item_changed, wbcg,
"signal::notify::display-grid", cb_toggle_menu_item_changed, wbcg,
"signal::notify::display-column-header", cb_toggle_menu_item_changed, wbcg,
"signal::notify::display-row-header", cb_toggle_menu_item_changed, wbcg,
"signal::notify::display-outlines", cb_toggle_menu_item_changed, wbcg,
"signal::notify::display-outlines-below", cb_toggle_menu_item_changed, wbcg,
"signal::notify::display-outlines-right", cb_toggle_menu_item_changed, wbcg,
"signal::notify::text-is-rtl", cb_direction_change, scg,
"signal::notify::zoom-factor", cb_zoom_change, wbcg,
NULL);
}
}
......@@ -1037,6 +1056,8 @@ wbcg_sheet_remove_all (WorkbookControl *wbc)
/* Be sure we are no longer editing */
wbcg_edit_finish (wbcg, WBC_EDIT_REJECT, NULL);
disconnect_sheet_signals (wbcg, wbcg_cur_sheet (wbcg));
/* Clear notebook to disable updates as focus changes for pages
* during destruction */
wbcg->notebook = NULL;
......@@ -1573,7 +1594,7 @@ cb_notebook_switch_page (GtkNotebook *notebook, GtkNotebookPage *page,
sheet_flag_status_update_range (sheet, NULL);
sheet_update (sheet);
wb_view_sheet_focus (wb_control_view (WORKBOOK_CONTROL (wbcg)), sheet);
wb_control_zoom_feedback (WORKBOOK_CONTROL (wbcg));
cb_zoom_change (sheet, NULL, wbcg);
}
}
......@@ -2547,7 +2568,6 @@ workbook_control_gui_class_init (GObjectClass *object_class)
object_class->finalize = wbcg_finalize;
wbc_class->set_title = wbcg_set_title;
wbc_class->zoom_feedback = wbcg_zoom_feedback;
wbc_class->edit_line_set = wbcg_edit_line_set;
wbc_class->selection_descr_set = wbcg_edit_selection_descr_set;
wbc_class->auto_expr_value = wbcg_auto_expr_value;
......@@ -2643,7 +2663,7 @@ wbcg_create (WorkbookControlGUI *wbcg,
wb_control_menu_state_update (wbc, MS_ALL);
wb_control_update_action_sensitivity (wbc);
wb_control_style_feedback (wbc, NULL);
wb_control_zoom_feedback (wbc);
cb_zoom_change (sheet, NULL, wbcg);
}
if (optional_screen)
......
......@@ -27,7 +27,6 @@ typedef struct {
/* Actions on the workbook UI */
void (*set_title) (WorkbookControl *wbc, char const *title);
void (*style_feedback) (WorkbookControl *wbc, GnmStyle const *changes);
void (*zoom_feedback) (WorkbookControl *wbc);
void (*edit_line_set) (WorkbookControl *wbc, char const *text);
void (*edit_finish) (WorkbookControl *wbc, gboolean accept);
void (*selection_descr_set) (WorkbookControl *wbc, char const *text);
......
......@@ -93,8 +93,6 @@ wb_control_update_title (WorkbookControl *wbc)
WBC_VIRTUAL (style_feedback,
(WorkbookControl *wbc, GnmStyle const *changes), (wbc, changes))
WBC_VIRTUAL (zoom_feedback,
(WorkbookControl *wbc), (wbc))
WBC_VIRTUAL (edit_line_set,
(WorkbookControl *wbc, char const *text), (wbc, text))
WBC_VIRTUAL (selection_descr_set,
......
......@@ -22,7 +22,6 @@ WorkbookControl *wb_control_wrapper_new (WorkbookControl *wbc,
void wb_control_update_title (WorkbookControl *wbc);
void wb_control_style_feedback (WorkbookControl *wbc, GnmStyle const *changes);
void wb_control_zoom_feedback (WorkbookControl *wbc);
void wb_control_edit_line_set (WorkbookControl *wbc, char const *text);
void wb_control_selection_descr_set (WorkbookControl *wbc, char const *text);
void wb_control_auto_expr_value (WorkbookControl *wbc);
......
......@@ -3070,8 +3070,8 @@ xml_sheet_read (XmlParseContext *ctxt, xmlNodePtr tree)
g_hash_table_destroy (ctxt->style_table);
/* Init ColRowInfo's size_pixels and force a full respan */
g_object_set (sheet, "zoom-factor", zoom_factor, NULL);
sheet_flag_recompute_spans (sheet);
sheet_set_zoom_factor (sheet, zoom_factor, FALSE, FALSE);
return sheet;
}
......
......@@ -454,9 +454,8 @@ xml_sax_sheet_end (GsfXMLIn *gsf_state, G_GNUC_UNUSED GsfXMLBlob *blob)
g_return_if_fail (state->sheet != NULL);
/* Init ColRowInfo's size_pixels and force a full respan */
g_object_set (state->sheet, "zoom-factor", state->sheet_zoom, NULL);
sheet_flag_recompute_spans (state->sheet);
sheet_set_zoom_factor (state->sheet, state->sheet_zoom,
FALSE, FALSE);
state->sheet = NULL;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment