X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;ds=sidebyside;f=swt%2Forg.argeo.cms.swt%2Fsrc%2Forg%2Fargeo%2Fcms%2Fswt%2FCmsSwtUi.java;h=d02ad3aec371202cb8f4c42364b15a45277b5605;hb=HEAD;hp=1d15f87f0ab977d8ecbdf1a3955ea4ac25c203a9;hpb=a60e1d15c4916e6fe809e82182f300f6f3d4fa2c;p=lgpl%2Fargeo-commons.git diff --git a/swt/org.argeo.cms.swt/src/org/argeo/cms/swt/CmsSwtUi.java b/swt/org.argeo.cms.swt/src/org/argeo/cms/swt/CmsSwtUi.java index 1d15f87f0..d02ad3aec 100644 --- a/swt/org.argeo.cms.swt/src/org/argeo/cms/swt/CmsSwtUi.java +++ b/swt/org.argeo.cms.swt/src/org/argeo/cms/swt/CmsSwtUi.java @@ -1,7 +1,5 @@ package org.argeo.cms.swt; -import java.util.TimerTask; - import org.argeo.api.cms.ux.CmsUi; import org.argeo.api.cms.ux.CmsView; import org.eclipse.swt.layout.GridLayout; @@ -14,7 +12,7 @@ public class CmsSwtUi extends Composite implements CmsUi { /** Last time the UI was accessed. */ private long lastAccess = System.currentTimeMillis(); - private TimerTask timeoutTask; +// private TimerTask timeoutTask; private long uiTimeout = 0; private CmsView cmsView; @@ -30,40 +28,59 @@ public class CmsSwtUi extends Composite implements CmsUi { return cmsView; } - @Override - public long getLastAccess() { - return lastAccess; - } - @Override public void updateLastAccess() { this.lastAccess = System.currentTimeMillis(); } public void setUiTimeout(long uiTimeout) { - if (timeoutTask != null) - timeoutTask.cancel(); +// clearTimeoutTask(); this.uiTimeout = uiTimeout; if (this.uiTimeout <= 0) return; - timeoutTask = cmsView.schedule(() -> { - disposeIfTimedout(); - }, 0, 60 * 1000); + // TODO introduce mechanism to check whether the UI is "zombie" + // (that is the UI thread still exists, but cannot execute anything) +// final long timeoutTaskPeriod = 60 * 60 * 1000;// 1h +// timeoutTask = cmsView.schedule(() -> { +// disposeIfTimedout(); +// }, timeoutTaskPeriod, timeoutTaskPeriod); +// addDisposeListener((e) -> { +// clearTimeoutTask(); +// }); } - public void disposeIfTimedout() { - if (timeoutTask == null) - return; - if (isDisposed()) { - timeoutTask.cancel(); - timeoutTask = null; - return; - } - if (System.currentTimeMillis() - getLastAccess() >= uiTimeout) { - timeoutTask.cancel(); - timeoutTask = null; - dispose(); - } +// /** Must be run in UI thread. */ +// public void disposeIfTimedout() { +// System.out.println("Enter disposeIfTimedout"); +// if (isDisposed()) { +// clearTimeoutTask(); +// return; +// } +// if (isTimedOut()) { +// dispose(); +// clearTimeoutTask(); +// System.out.println("Disposed after timeout"); +// } +// } + +// private void clearTimeoutTask() { +// if (timeoutTask != null) { +// timeoutTask.cancel(); +// timeoutTask = null; +// } +// } + + @Override + public boolean isTimedOut() { + return uiTimeout > 0 && (System.currentTimeMillis() - lastAccess >= uiTimeout); } +// class DisposeIfTimedOutTask implements Runnable { +// public void run() { +// disposeIfTimedout(); +// getDisplay().timerExec(1000, new DisposeIfTimedOutTask()); +// } +// +// } + } \ No newline at end of file