Improve UI timeout
authorMathieu Baudier <mbaudier@argeo.org>
Sun, 17 Dec 2023 06:23:43 +0000 (07:23 +0100)
committerMathieu Baudier <mbaudier@argeo.org>
Sun, 17 Dec 2023 06:23:43 +0000 (07:23 +0100)
swt/org.argeo.cms.swt/src/org/argeo/cms/swt/CmsSwtUi.java

index 1d15f87f0ab977d8ecbdf1a3955ea4ac25c203a9..b16eb0f9e2b3a8912ed782efeb514c7f8abdea3f 100644 (file)
@@ -41,28 +41,32 @@ public class CmsSwtUi extends Composite implements CmsUi {
        }
 
        public void setUiTimeout(long uiTimeout) {
-               if (timeoutTask != null)
-                       timeoutTask.cancel();
+               clearTimeoutTask();
                this.uiTimeout = uiTimeout;
                if (this.uiTimeout <= 0)
                        return;
+               final long timeoutTaskPeriod = 60 * 60 * 1000;// 1h
                timeoutTask = cmsView.schedule(() -> {
                        disposeIfTimedout();
-               }, 0, 60 * 1000);
+               }, timeoutTaskPeriod, timeoutTaskPeriod);
        }
 
+       /** Must be run in UI thread. */
        public void disposeIfTimedout() {
-               if (timeoutTask == null)
-                       return;
                if (isDisposed()) {
-                       timeoutTask.cancel();
-                       timeoutTask = null;
+                       clearTimeoutTask();
                        return;
                }
                if (System.currentTimeMillis() - getLastAccess() >= uiTimeout) {
+                       dispose();
+                       clearTimeoutTask();
+               }
+       }
+
+       private void clearTimeoutTask() {
+               if (timeoutTask != null) {
                        timeoutTask.cancel();
                        timeoutTask = null;
-                       dispose();
                }
        }