X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=rcp%2Forg.argeo.cms.ui.rcp%2Fsrc%2Forg%2Fargeo%2Fcms%2Fui%2Frcp%2FCmsRcpDisplayFactory.java;h=ec471c0216785167044b6395189537a119175aaa;hb=5cbd7544d8243c7f0f0f5c1a78daac979aee20e4;hp=ceab08ab6887e3f8e24443bb0d177a1872e661a4;hpb=e1123c4b16bc6125c9b9e6827ab754d0a4be643a;p=lgpl%2Fargeo-commons.git diff --git a/rcp/org.argeo.cms.ui.rcp/src/org/argeo/cms/ui/rcp/CmsRcpDisplayFactory.java b/rcp/org.argeo.cms.ui.rcp/src/org/argeo/cms/ui/rcp/CmsRcpDisplayFactory.java index ceab08ab6..ec471c021 100644 --- a/rcp/org.argeo.cms.ui.rcp/src/org/argeo/cms/ui/rcp/CmsRcpDisplayFactory.java +++ b/rcp/org.argeo.cms.ui.rcp/src/org/argeo/cms/ui/rcp/CmsRcpDisplayFactory.java @@ -6,6 +6,7 @@ import org.argeo.api.cms.CmsApp; import org.argeo.util.OS; import org.eclipse.swt.widgets.Display; import org.osgi.service.event.EventAdmin; +import org.eclipse.swt.events.DisposeListener; /** Creates the SWT {@link Display} in a dedicated thread. */ public class CmsRcpDisplayFactory { @@ -22,7 +23,12 @@ public class CmsRcpDisplayFactory { public void init() { uiThread = new CmsUiThread(); uiThread.start(); - + while (display == null) + try { + Thread.sleep(100); + } catch (InterruptedException e) { + // silent + } } public void destroy() { @@ -46,6 +52,8 @@ public class CmsRcpDisplayFactory { @Override public void run() { display = Display.getDefault(); + display.setRuntimeExceptionHandler((e) -> e.printStackTrace()); + display.setErrorHandler((e) -> e.printStackTrace()); // for (String contextName : cmsApps.keySet()) { // openCmsApp(contextName); @@ -64,12 +72,15 @@ public class CmsRcpDisplayFactory { return display; } - public static void openCmsApp(EventAdmin eventAdmin, CmsApp cmsApp, String uiName) { + public static void openCmsApp(EventAdmin eventAdmin, CmsApp cmsApp, String uiName, + DisposeListener disposeListener) { CmsRcpDisplayFactory.getDisplay().syncExec(() -> { CmsRcpApp cmsRcpApp = new CmsRcpApp(uiName); cmsRcpApp.setEventAdmin(eventAdmin); cmsRcpApp.setCmsApp(cmsApp, null); cmsRcpApp.initRcpApp(); + if (disposeListener != null) + cmsRcpApp.getShell().addDisposeListener(disposeListener); }); }