From: Mathieu Baudier Date: Mon, 18 Dec 2023 07:47:27 +0000 (+0100) Subject: UI time out working X-Git-Tag: v2.3.23~1 X-Git-Url: https://git.argeo.org/?p=gpl%2Fargeo-suite.git;a=commitdiff_plain;h=846518809f5f6a2e5c28e851d743ece803d95f6b UI time out working --- diff --git a/swt/org.argeo.app.swt/src/org/argeo/app/swt/ux/SwtArgeoApp.java b/swt/org.argeo.app.swt/src/org/argeo/app/swt/ux/SwtArgeoApp.java index b5ff82d..505c52d 100644 --- a/swt/org.argeo.app.swt/src/org/argeo/app/swt/ux/SwtArgeoApp.java +++ b/swt/org.argeo.app.swt/src/org/argeo/app/swt/ux/SwtArgeoApp.java @@ -95,7 +95,7 @@ public class SwtArgeoApp extends AbstractArgeoApp implements CmsEventSubscriber // private CmsUserManager cmsUserManager; // TODO make more optimal or via CmsSession/CmsView - private Timer janitorTimer = new Timer(true); + private static Timer janitorTimer = new Timer(true); private Map> managedUis = new HashMap<>(); // ACR @@ -137,21 +137,28 @@ public class SwtArgeoApp extends AbstractArgeoApp implements CmsEventSubscriber @Override public void run() { try { - Iterator> uiRefs = managedUis.values().iterator(); + Iterator>> uiRefs = managedUis.entrySet().iterator(); refs: while (uiRefs.hasNext()) { - WeakReference uiRef = uiRefs.next(); + Map.Entry> entry = uiRefs.next(); + String uiUuid = entry.getKey(); + WeakReference uiRef = entry.getValue(); SwtAppUi ui = uiRef.get(); if (ui == null) { if (log.isTraceEnabled()) - log.warn("Unreferenced UI in " + appPid + ", removing it"); + log.warn("Unreferenced UI " + uiUuid + " in " + appPid + ", removing it"); uiRefs.remove(); continue refs; } if (!ui.isDisposed() && !ui.getDisplay().isDisposed()) { - ui.getDisplay().asyncExec(() -> { - ui.disposeIfTimedout(); - }); - ui.getDisplay().wake(); + if (ui.isTimedOut()) { + if (log.isTraceEnabled()) + log.trace("Killing timed-out UI " + uiUuid + " in " + appPid); + UiContext.killDisplay(ui.getDisplay()); + } + } else { + if (log.isTraceEnabled()) + log.warn("Disposed UI " + uiUuid + " still in " + appPid + ", removing it"); + uiRefs.remove(); } } if (log.isTraceEnabled()) @@ -202,7 +209,7 @@ public class SwtArgeoApp extends AbstractArgeoApp implements CmsEventSubscriber CmsSwtUtils.registerCmsTheme(uiParent.getShell(), theme); SwtAppUi argeoSuiteUi = new SwtAppUi(uiParent, SWT.INHERIT_DEFAULT); // TODO make timeout configurable - argeoSuiteUi.setUiTimeout(12 * 60 * 60 * 1000);// 12 hours + argeoSuiteUi.setUiTimeout(6 * 60 * 60 * 1000);// 6 hours String uid = cmsView.getUid(); argeoSuiteUi.addDisposeListener(new CleanUpUi(uid)); managedUis.put(uid, new WeakReference<>(argeoSuiteUi));