ref #6595 Enhance selection propagation for name editor
authorPatrick Plitzner <p.plitzner@bgbm.org>
Fri, 10 Nov 2017 10:40:55 +0000 (11:40 +0100)
committerPatrick Plitzner <p.plitzner@bgbm.org>
Fri, 10 Nov 2017 10:41:44 +0000 (11:41 +0100)
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/e4/container/AbstractGroupedContainerE4.java

index 097e1d08f784529c445ca48940db58ab97251aee..5beec3c966d17cea29a056eaa8e6e5e56649098c 100755 (executable)
@@ -554,29 +554,49 @@ abstract public class AbstractGroupedContainerE4<T extends TaxonBase> implements
                }
        }
 
-       private boolean isExecuting = false;
+       private Delay delay = new Delay(Display.getCurrent());
+
+       private class Delay extends Thread{
+
+           private volatile boolean stop = false;
+        private Display display;
+
+        public Delay(Display display) {
+            this.display = display;
+        }
+        @Override
+        public void run() {
+
+            while (!stop) {
+                try {
+                    // my code goes here
+                    Thread.sleep(1000);
+                    if(!stop){
+                        display.syncExec(new Runnable() {
+                            @Override
+                            public void run() {
+                                getEditor().getManagedForm().setInput(selection);
+                            }
+                        });
+                    }
+                } catch (InterruptedException ex) {
+                    stop = true;
+                }
+            }
+        }
+        public void requestStop() {
+            stop = true;
+        }
+       }
 
        protected void setDelayedSelection() {
-               // TODO this might be done better
-               // this is the quickest solution i could come up with and it improves
-               // performance
-               // please reimplement if you know better.
                selection = this;
 
-               // start timer
                Display display = Display.getCurrent();
-               Runnable runnable = new Runnable() {
 
-                       @Override
-            public void run() {
-                               getEditor().getManagedForm().setInput(selection);
-                               isExecuting = false;
-                       }
-               };
-               if(!isExecuting){
-                   isExecuting = true;
-                   display.timerExec(1000, runnable);
-               }
+               delay.requestStop();
+               delay = new Delay(display);
+               delay.start();
 
        }