From fd5cd02b26b62be4739dbb399df8040062d57be5 Mon Sep 17 00:00:00 2001
From: Christophe Geuzaine <cgeuzaine@ulg.ac.be>
Date: Fri, 9 May 2014 14:26:45 +0000
Subject: [PATCH] better setChanged strategy (the last change would break for
 parameters shared by several solvers, in a loop)

---
 Fltk/onelabGroup.cpp | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/Fltk/onelabGroup.cpp b/Fltk/onelabGroup.cpp
index 44f15125f0..9d06327281 100644
--- a/Fltk/onelabGroup.cpp
+++ b/Fltk/onelabGroup.cpp
@@ -909,16 +909,14 @@ void onelab_cb(Fl_Widget *w, void *data)
       onelab::server::instance()->set(o);
       c->run();
       if(action == "compute"){
+        // after computing with this solver, mark the parameters exclusively
+        // owned by this solver as unchanged
+        onelab::server::instance()->setChanged(false, c->getName());
 	FlGui::instance()->onelab->checkForErrors(c->getName());
       }
       if(FlGui::instance()->onelab->stop()) break;
     }
 
-    // after computing, all parameters are set unchanged
-    if(action == "compute"){
-      onelab::server::instance()->setChanged(false);
-    }
-
     if(action != "initialize"){
       updateGraphs();
       FlGui::instance()->rebuildTree(action == "compute");
@@ -927,6 +925,11 @@ void onelab_cb(Fl_Widget *w, void *data)
   } while(action == "compute" && !FlGui::instance()->onelab->stop() &&
           incrementLoops());
 
+  if(action == "compute"){
+    // the computation is done; mark all parameters as unchanged
+    onelab::server::instance()->setChanged(false);
+  }
+
   if(action == "compute" && (CTX::instance()->solver.autoSaveDatabase ||
                              CTX::instance()->solver.autoArchiveOutputFiles)){
     std::string db = SplitFileName(GModel::current()->getFileName())[0] + "onelab.db";
-- 
GitLab