|
@@ -66,6 +66,7 @@ public class SceneExplorerProperty<T> extends PropertySupport.Reflection<T> {
|
|
|
public static final String PROP_USER_CHANGE = "PROP_USER_CHANGE";
|
|
|
public static final String PROP_INIT_CHANGE = "PROP_INIT_CHANGE";
|
|
|
private T objectLocal;
|
|
|
+ private boolean changing = false;
|
|
|
private final boolean cloneable;
|
|
|
private final boolean instantiable;
|
|
|
private final boolean primitive;
|
|
@@ -123,6 +124,9 @@ public class SceneExplorerProperty<T> extends PropertySupport.Reflection<T> {
|
|
|
final T realValue = getSuperValue();
|
|
|
mutex.readAccess(new Runnable() {
|
|
|
public void run() {
|
|
|
+ if (changing) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
if ((objectLocal == null) && !inited) {
|
|
|
mutex.postWriteRequest(new Runnable() {
|
|
|
public void run() {
|
|
@@ -169,14 +173,20 @@ public class SceneExplorerProperty<T> extends PropertySupport.Reflection<T> {
|
|
|
public void setValue(final T val) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException {
|
|
|
mutex.postWriteRequest(new Runnable() {
|
|
|
public void run() {
|
|
|
- logger.log(Level.FINE, "Set local value of {0}", objectLocal);
|
|
|
+ logger.log(Level.FINE, "Set local value to {0}", val);
|
|
|
final T oldObject = objectLocal;
|
|
|
+ changing = true;
|
|
|
objectLocal = val;
|
|
|
final T sceneObject = duplicateObject(val);
|
|
|
notifyListeners(PROP_USER_CHANGE, oldObject, objectLocal);
|
|
|
SceneApplication.getApplication().enqueue(new Callable<Void>() {
|
|
|
public Void call() throws Exception {
|
|
|
- setSuperValue(sceneObject);
|
|
|
+ mutex.postWriteRequest(new Runnable() {
|
|
|
+ public void run() {
|
|
|
+ setSuperValue(sceneObject);
|
|
|
+ changing = false;
|
|
|
+ }
|
|
|
+ });
|
|
|
return null;
|
|
|
}
|
|
|
});
|
|
@@ -313,8 +323,9 @@ public class SceneExplorerProperty<T> extends PropertySupport.Reflection<T> {
|
|
|
private void setSuperValue(T val, boolean undo) {
|
|
|
try {
|
|
|
if (undo) {
|
|
|
- logger.log(Level.FINE, "Add undo for {0} on thread {1}");
|
|
|
- addUndo(duplicateObject(getSuperValue()), val);
|
|
|
+ T dupe = duplicateObject(getSuperValue());
|
|
|
+ logger.log(Level.FINE, "Add undo for {0}", dupe);
|
|
|
+ addUndo(dupe, val);
|
|
|
}
|
|
|
logger.log(Level.FINE, "Set super value on thread {0}", Thread.currentThread().getName());
|
|
|
super.setValue(val);
|