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=e0f63e45e2eb85578428923964f1421fa1ba25fe;hpb=92e952dc93d7be465e8b7c03b78a857d33ab5ae0;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 e0f63e45e..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 @@ -10,17 +10,77 @@ public class CmsSwtUi extends Composite implements CmsUi { private static final long serialVersionUID = -107939076610406448L; + /** Last time the UI was accessed. */ + private long lastAccess = System.currentTimeMillis(); +// private TimerTask timeoutTask; + private long uiTimeout = 0; + private CmsView cmsView; public CmsSwtUi(Composite parent, int style) { super(parent, style); cmsView = CmsSwtUtils.getCmsView(parent); - setLayout(new GridLayout()); } + @Override public CmsView getCmsView() { return cmsView; } + @Override + public void updateLastAccess() { + this.lastAccess = System.currentTimeMillis(); + } + + public void setUiTimeout(long uiTimeout) { +// clearTimeoutTask(); + this.uiTimeout = uiTimeout; + if (this.uiTimeout <= 0) + return; + // 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() { +// 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