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