From 22bac4f4b709262422f39b3a85d3bab4aa3b5a48 Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Sun, 13 Jan 2013 16:26:29 +0000 Subject: [PATCH] Fix SWT resource leak git-svn-id: https://svn.argeo.org/slc/trunk@6022 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- .../ui/decorators/ResultFailedDecorator.java | 45 ++++++++++++++++--- 1 file changed, 38 insertions(+), 7 deletions(-) diff --git a/plugins/org.argeo.slc.client.ui/src/main/java/org/argeo/slc/client/ui/decorators/ResultFailedDecorator.java b/plugins/org.argeo.slc.client.ui/src/main/java/org/argeo/slc/client/ui/decorators/ResultFailedDecorator.java index e71475648..a7c96927d 100644 --- a/plugins/org.argeo.slc.client.ui/src/main/java/org/argeo/slc/client/ui/decorators/ResultFailedDecorator.java +++ b/plugins/org.argeo.slc.client.ui/src/main/java/org/argeo/slc/client/ui/decorators/ResultFailedDecorator.java @@ -23,6 +23,7 @@ import javax.jcr.RepositoryException; import org.argeo.slc.SlcException; import org.argeo.slc.client.ui.ClientUiPlugin; +import org.argeo.slc.client.ui.SlcImages; import org.argeo.slc.client.ui.SlcUiConstants; import org.argeo.slc.client.ui.model.ResultParent; import org.argeo.slc.client.ui.model.SingleResultNode; @@ -35,17 +36,34 @@ import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.swt.graphics.Image; import org.eclipse.ui.ISharedImages; +/** Dynamically decorates the results tree. */ public class ResultFailedDecorator extends LabelProvider implements ILabelDecorator { + // FIXME why not use? org.eclipse.jface.viewers.DecoratingLabelProvider + // private final static Log log = LogFactory // .getLog(ResultFailedDecorator.class); private final static DateFormat dateFormat = new SimpleDateFormat( SlcUiConstants.DEFAULT_DISPLAY_DATE_TIME_FORMAT); + // hack for SWT resource leak + // see http://www.eclipse.org/articles/swt-design-2/swt-design-2.html + // see https://bugs.eclipse.org/bugs/show_bug.cgi?id=181215 + private final Image failedFolder; + private final Image failedSingleResult; + public ResultFailedDecorator() { super(); + ImageDescriptor desc = ClientUiPlugin.getDefault().getWorkbench() + .getSharedImages() + .getImageDescriptor(ISharedImages.IMG_DEC_FIELD_ERROR); + failedFolder = new DecorationOverlayIcon(SlcImages.FOLDER, desc, + IDecoration.TOP_LEFT).createImage(); + failedSingleResult = new DecorationOverlayIcon( + SlcImages.PROCESS_COMPLETED, desc, IDecoration.TOP_LEFT) + .createImage(); } // Method to decorate Image @@ -57,12 +75,17 @@ public class ResultFailedDecorator extends LabelProvider implements // by Eclipse if (object instanceof ResultParent) { if (!((ResultParent) object).isPassed()) { - ImageDescriptor desc = ClientUiPlugin.getDefault() - .getWorkbench().getSharedImages() - .getImageDescriptor(ISharedImages.IMG_DEC_FIELD_ERROR); - DecorationOverlayIcon decoratedImage = new DecorationOverlayIcon( - image, desc, IDecoration.TOP_LEFT); - return decoratedImage.createImage(); + // ImageDescriptor desc = ClientUiPlugin.getDefault() + // .getWorkbench().getSharedImages() + // .getImageDescriptor(ISharedImages.IMG_DEC_FIELD_ERROR); + // DecorationOverlayIcon decoratedImage = new + // DecorationOverlayIcon( + // image, desc, IDecoration.TOP_LEFT); + // return decoratedImage.createImage(); + if (object instanceof SingleResultNode) + return failedSingleResult; + else + return failedFolder; } else return null; } @@ -82,11 +105,19 @@ public class ResultFailedDecorator extends LabelProvider implements .getTime()); } catch (RepositoryException re) { throw new SlcException( - "Unexpected error defining text decoration for result", re); + "Unexpected error defining text decoration for result", + re); } return label + " [" + decoration + "]"; } else return null; } + @Override + public void dispose() { + failedFolder.dispose(); + failedSingleResult.dispose(); + super.dispose(); + } + } -- 2.39.2