]> O.S.I.I.S - jp/crow.git/commitdiff
debug ds prop binding remove handler by name, should be retested exhaustively
authorjpbruyere <jp.bruyere@hotmail.com>
Tue, 28 Feb 2017 13:26:58 +0000 (14:26 +0100)
committerjpbruyere <jp.bruyere@hotmail.com>
Tue, 28 Feb 2017 13:26:58 +0000 (14:26 +0100)
src/GraphicObjects/TemplatedGroup.cs
src/Instantiator.cs

index 11ff7df5e1d9f8b6cbd8bbed4e18f25dd11fbbd1..b62407b6a664901464f1127d0b6b2add97e7a895 100644 (file)
@@ -154,7 +154,7 @@ namespace Crow
 
                                NotifyValueChanged ("Data", data);
 
-                               //lock (CurrentInterface.UpdateMutex)
+                               lock (CurrentInterface.LayoutMutex)
                                        ClearItems ();
 
                                if (data == null)
index 3be86ce46d6dbff759d1dddfdcfc63ec35507ea2..e080047845062f76e1ca239971dc9069e0755dff 100644 (file)
@@ -576,6 +576,11 @@ namespace Crow
                        int dmIdx = cachedDelegates.Count;
                        cachedDelegates.Add (dm.CreateDelegate (typeof(EventHandler<ValueChangeEventArgs>)));
                        ctx.emitCachedDelegateHandlerAddition (dmIdx, CompilerServices.eiValueChange, origine);
+
+                       #if DEBUG_BINDING
+                       Debug.WriteLine("\tCrow property binding: " + dm.Name);
+                       #endif
+
                }
                void emitTemplateBindings(Context ctx, Dictionary<string, List<MemberAddress>> bindings){
                        //value changed dyn method
@@ -803,23 +808,25 @@ namespace Crow
 
                        il.Emit (OpCodes.Nop);
 
-                       emitRemoveOldDataSourceHandler(il, "ValueChanged", delName,false);
+                       emitRemoveOldDataSourceHandler(il, "ValueChanged", delName, true);
 
                        if (!string.IsNullOrEmpty(bindingDef.TargetMember)){
                                if (bindingDef.TwoWay){
-                                       System.Reflection.Emit.Label cancelRemove = il.DefineLabel ();
-                                       //remove handler if not null
-                                       il.Emit (OpCodes.Ldarg_2);//load old parent
-                                       il.Emit (OpCodes.Ldfld, CompilerServices.fiDSCOldDS);
-                                       il.Emit (OpCodes.Brfalse, cancelRemove);//old parent is null
+//                                     System.Reflection.Emit.Label cancelRemove = il.DefineLabel ();
+//                                     //remove handler if not null
+//                                     il.Emit (OpCodes.Ldarg_2);//load old parent
+//                                     il.Emit (OpCodes.Ldfld, CompilerServices.fiDSCOldDS);
+//                                     il.Emit (OpCodes.Brfalse, cancelRemove);//old parent is null
 
                                        //remove handler
-                                       il.Emit (OpCodes.Ldarg_1);//3d arg: instance bound to delegate (the source)
-                                       il.Emit (OpCodes.Ldstr, "ValueChanged");//2nd arg event name
-                                       il.Emit (OpCodes.Ldarg_2);//1st arg load old datasource
-                                       il.Emit (OpCodes.Ldfld, CompilerServices.fiDSCOldDS);
-                                       il.Emit (OpCodes.Call, CompilerServices.miRemEvtHdlByTarget);
-                                       il.MarkLabel(cancelRemove);
+                                       emitRemoveOldDataSourceHandler(il, "ValueChanged", delName, false);
+
+//                                     il.Emit (OpCodes.Ldarg_1);//3d arg: instance bound to delegate (the source)
+//                                     il.Emit (OpCodes.Ldstr, "ValueChanged");//2nd arg event name
+//                                     il.Emit (OpCodes.Ldarg_2);//1st arg load old datasource
+//                                     il.Emit (OpCodes.Ldfld, CompilerServices.fiDSCOldDS);
+//                                     il.Emit (OpCodes.Call, CompilerServices.miRemEvtHdlByTarget);
+//                                     il.MarkLabel(cancelRemove);
                                }
                                il.Emit (OpCodes.Ldarg_2);//load datasource change arg
                                il.Emit (OpCodes.Ldfld, CompilerServices.fiDSCNewDS);
@@ -883,6 +890,11 @@ namespace Crow
                        #endregion
 
                        ctx.emitCachedDelegateHandlerAddition(delDSIndex, CompilerServices.eiDSChange);
+
+                       #if DEBUG_BINDING
+                       Debug.WriteLine("\tDataSource ValueChanged: " + delName);
+                       Debug.WriteLine("\tDataSource Changed: " + dm.Name);
+                       #endif
                }
                /// <summary>
                /// Two way binding for datasource, graphicObj=>dataSource link, datasource value has priority