[gnumeric] scenarios: fix undo.



commit f39d83c698b71d62a417c4c659222aa2db5827cd
Author: Morten Welinder <terra gnome org>
Date:   Mon Nov 30 10:17:49 2009 -0500

    scenarios: fix undo.

 src/commands.c                 |    8 +++++---
 src/commands.h                 |    5 ++---
 src/dialogs/dialog-scenarios.c |   10 +++++-----
 3 files changed, 12 insertions(+), 11 deletions(-)
---
diff --git a/src/commands.c b/src/commands.c
index 7361839..721653e 100644
--- a/src/commands.c
+++ b/src/commands.c
@@ -6035,7 +6035,8 @@ static gboolean
 cmd_scenario_mngr_redo (GnmCommand *cmd, WorkbookControl *wbc)
 {
 	CmdScenarioMngr *me = CMD_SCENARIO_MNGR (cmd);
-	me->undo = gnm_scenario_apply (me->sc);
+	if (!me->undo)
+		me->undo = gnm_scenario_apply (me->sc);
 	return FALSE;
 }
 
@@ -6063,16 +6064,17 @@ cmd_scenario_mngr_finalize (GObject *cmd)
 }
 
 gboolean
-cmd_scenario_mngr (WorkbookControl *wbc, GnmScenario *sc)
+cmd_scenario_mngr (WorkbookControl *wbc, GnmScenario *sc, GOUndo *undo)
 {
 	CmdScenarioMngr *me;
 
 	g_return_val_if_fail (IS_WORKBOOK_CONTROL (wbc), TRUE);
-	g_return_val_if_fail (GNM_IS_SCENARIO (wbc), TRUE);
+	g_return_val_if_fail (GNM_IS_SCENARIO (sc), TRUE);
 
 	me = g_object_new (CMD_SCENARIO_MNGR_TYPE, NULL);
 
 	me->sc = g_object_ref (sc);
+	me->undo = g_object_ref (undo);
 	me->cmd.sheet = sc->sheet;
 	me->cmd.size  = 1;
 	me->cmd.cmd_descriptor = g_strdup (_("Scenario Show"));
diff --git a/src/commands.h b/src/commands.h
index 2bf21f0..f6b79fa 100644
--- a/src/commands.h
+++ b/src/commands.h
@@ -112,10 +112,9 @@ gboolean cmd_define_name	(WorkbookControl *wbc, char const *name,
 				 char const *descriptor);
 gboolean cmd_remove_name        (WorkbookControl *wbc, GnmNamedExpr *nexpr);
 
-/* FIXME: figure out how to resolve this better.  */
-struct _scenario_cmd_t;
 gboolean cmd_scenario_add (WorkbookControl *wbc, GnmScenario *s, Sheet *sheet);
-gboolean cmd_scenario_mngr (WorkbookControl *wbc, GnmScenario *sc);
+gboolean cmd_scenario_mngr (WorkbookControl *wbc, GnmScenario *sc,
+			    GOUndo *undo);
 
 /* FIXME: figure out how to resolve this better.  */
 struct _data_shuffling_t;
diff --git a/src/dialogs/dialog-scenarios.c b/src/dialogs/dialog-scenarios.c
index cb23299..e66afa0 100644
--- a/src/dialogs/dialog-scenarios.c
+++ b/src/dialogs/dialog-scenarios.c
@@ -558,7 +558,7 @@ scenarios_ok_clicked_cb (G_GNUC_UNUSED GtkWidget *button,
 {
 	if (state->current) {
 		WorkbookControl *wbc = WORKBOOK_CONTROL (state->base.wbcg);
-		cmd_scenario_mngr (wbc, state->current);
+		cmd_scenario_mngr (wbc, state->current, state->undo);
 	}
 
 	scenario_manager_ok (state->base.sheet);
@@ -641,11 +641,11 @@ scenarios_show_clicked_cb (G_GNUC_UNUSED GtkWidget *button,
 
 	gtk_tree_model_get (GTK_TREE_MODEL (model), &iter,  0, &value, -1);
 
+	restore_old_values (state);
+
 	wbc = WORKBOOK_CONTROL (state->base.wbcg);
-	state->current =
-		gnm_sheet_scenario_find (state->base.sheet, value);
-	state->undo =
-		gnm_scenario_apply (state->current);
+	state->current = gnm_sheet_scenario_find (state->base.sheet, value);
+	state->undo = gnm_scenario_apply (state->current);
 }
 
 static void



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]