X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=swt%2Forg.argeo.cms.swt%2Fsrc%2Forg%2Fargeo%2Fcms%2Fswt%2FCmsSwtUi.java;h=d02ad3aec371202cb8f4c42364b15a45277b5605;hb=bb682b8c9bceb730d827096c6d6fa715adf6c5f1;hp=b16eb0f9e2b3a8912ed782efeb514c7f8abdea3f;hpb=c0c4ad0145f0cb4d2af952e8c4573e66385fbd32;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 b16eb0f9e..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,44 +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) { - clearTimeoutTask(); +// clearTimeoutTask(); this.uiTimeout = uiTimeout; if (this.uiTimeout <= 0) return; - final long timeoutTaskPeriod = 60 * 60 * 1000;// 1h - timeoutTask = cmsView.schedule(() -> { - disposeIfTimedout(); - }, timeoutTaskPeriod, timeoutTaskPeriod); + // 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(); +// }); } - /** Must be run in UI thread. */ - public void disposeIfTimedout() { - if (isDisposed()) { - clearTimeoutTask(); - return; - } - if (System.currentTimeMillis() - getLastAccess() >= uiTimeout) { - dispose(); - clearTimeoutTask(); - } - } +// /** 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; +// } +// } - 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