X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms.ui.rap%2Fsrc%2Forg%2Fargeo%2Fcms%2Fweb%2FCmsWebEntryPoint.java;h=1ad09d1022ba0cac6020782245de1dcb2e45b66e;hb=8347fed7b1f7f7ca1a7f66945e2f1876e597f2ab;hp=9a023d6bc780f999ee3afa281f46209be413ae7c;hpb=0e8e156b7f036a26901362ce66fb2522560680be;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.cms.ui.rap/src/org/argeo/cms/web/CmsWebEntryPoint.java b/org.argeo.cms.ui.rap/src/org/argeo/cms/web/CmsWebEntryPoint.java index 9a023d6bc..1ad09d102 100644 --- a/org.argeo.cms.ui.rap/src/org/argeo/cms/web/CmsWebEntryPoint.java +++ b/org.argeo.cms.ui.rap/src/org/argeo/cms/web/CmsWebEntryPoint.java @@ -4,6 +4,7 @@ import static org.eclipse.rap.rwt.internal.service.ContextProvider.getApplicatio import java.security.PrivilegedAction; import java.util.HashMap; +import java.util.Locale; import java.util.Map; import java.util.UUID; @@ -14,6 +15,7 @@ import javax.security.auth.login.LoginException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.argeo.api.NodeConstants; +import org.argeo.cms.LocaleUtils; import org.argeo.cms.auth.CmsSession; import org.argeo.cms.auth.CurrentUser; import org.argeo.cms.auth.HttpRequestCallbackHandler; @@ -33,6 +35,7 @@ import org.eclipse.rap.rwt.client.service.BrowserNavigationEvent; import org.eclipse.rap.rwt.client.service.BrowserNavigationListener; import org.eclipse.rap.rwt.internal.lifecycle.RWTLifeCycle; import org.eclipse.swt.SWT; +import org.eclipse.swt.SWTError; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; @@ -104,8 +107,13 @@ public class CmsWebEntryPoint implements EntryPoint, CmsView, BrowserNavigationL uxContext = new SimpleUxContext(); imageManager = new DefaultImageManager(); CmsSession cmsSession = getCmsSession(); - if (cmsSession != null) - RWT.setLocale(cmsSession.getLocale()); + if (cmsSession != null) { + UiContext.setLocale(cmsSession.getLocale()); + LocaleUtils.setThreadLocale(cmsSession.getLocale()); + } else { + Locale rwtLocale = RWT.getUISession().getLocale(); + LocaleUtils.setThreadLocale(rwtLocale); + } ui = cmsWebApp.getCmsApp().initUi(parent); ui.setData(CmsApp.UI_NAME_PROPERTY, uiName); ui.setLayoutData(CmsUiUtils.fillAll()); @@ -162,8 +170,13 @@ public class CmsWebEntryPoint implements EntryPoint, CmsView, BrowserNavigationL @Override public void exception(final Throwable e) { + if (e instanceof SWTError) { + SWTError swtError = (SWTError) e; + if (swtError.code == SWT.ERROR_FUNCTION_DISPOSED) + return; + } ui.getDisplay().syncExec(() -> { - CmsFeedback.show("Unexpected exception in CMS", e); +// CmsFeedback.show("Unexpected exception in CMS", e); exception = e; // log.error("Unexpected exception in CMS", e); doRefresh(); @@ -266,12 +279,34 @@ public class CmsWebEntryPoint implements EntryPoint, CmsView, BrowserNavigationL // } shell.open(); if (getApplicationContext().getLifeCycleFactory().getLifeCycle() instanceof RWTLifeCycle) { - while (!shell.isDisposed()) { - if (!display.readAndDispatch()) { - display.sleep(); + eventLoop: while (!shell.isDisposed()) { + try { + if (!display.readAndDispatch()) { + display.sleep(); + } + } catch (Throwable e) { + if (e instanceof SWTError) { + SWTError swtError = (SWTError) e; + if (swtError.code == SWT.ERROR_FUNCTION_DISPOSED) { + log.error("Unexpected SWT error in event loop, ignoring it. " + e.getMessage()); + continue eventLoop; + } else { + log.error("Unexpected SWT error in event loop, shutting down...", e); + break eventLoop; + } + } else if (e instanceof ThreadDeath) { + throw (ThreadDeath) e; + } else if (e instanceof Error) { + log.error("Unexpected error in event loop, shutting down...", e); + break eventLoop; + } else { + log.error("Unexpected exception in event loop, ignoring it. " + e.getMessage()); + continue eventLoop; + } } } - display.dispose(); + if (!display.isDisposed()) + display.dispose(); } return 0; }