diff --git a/rse/plugins/org.eclipse.rse.files.ui/src/org/eclipse/rse/internal/files/ui/view/SystemViewRemoteFileAdapter.java b/rse/plugins/org.eclipse.rse.files.ui/src/org/eclipse/rse/internal/files/ui/view/SystemViewRemoteFileAdapter.java index 0128c2d4bba..281efc4b334 100644 --- a/rse/plugins/org.eclipse.rse.files.ui/src/org/eclipse/rse/internal/files/ui/view/SystemViewRemoteFileAdapter.java +++ b/rse/plugins/org.eclipse.rse.files.ui/src/org/eclipse/rse/internal/files/ui/view/SystemViewRemoteFileAdapter.java @@ -71,6 +71,7 @@ * David McKnight (IBM) - [324192] Cannot open a renamed file * David McKnight (IBM) - [228743] [usability][dnd] Paste into read-only folder fails silently * David McKnight (IBM) - [284157] [performance] too many jobs kicked off for getting file permissions for table + * David McKnight (IBM) - [330398] RSE leaks SWT resources *******************************************************************************/ package org.eclipse.rse.internal.files.ui.view; @@ -485,18 +486,13 @@ public class SystemViewRemoteFileAdapter if (moveAction == null) moveAction = new SystemMoveRemoteFileAction(shell); - //ISubSystem subsys = firstFile.getParentRemoteFileSubSystem(); - - // DKM - clipboard based copy actions - Clipboard clipboard = RSEUIPlugin.getTheSystemRegistryUI().getSystemClipboard(); - if (pasteClipboardAction == null) { - pasteClipboardAction = new SystemPasteFromClipboardAction(shell, clipboard); + pasteClipboardAction = new SystemPasteFromClipboardAction(shell, null); } if (copyClipboardAction == null) { - copyClipboardAction = new SystemCopyToClipboardAction(shell, clipboard); + copyClipboardAction = new SystemCopyToClipboardAction(shell, null); } if (searchAction == null) { diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/view/SystemTableViewPart.java b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/view/SystemTableViewPart.java index 0f15fa1c1bf..75387c07143 100644 --- a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/view/SystemTableViewPart.java +++ b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/view/SystemTableViewPart.java @@ -42,6 +42,7 @@ * Kevin Doyle (IBM) - [242431] Register a new unique context menu id, so contributions can be made to all our views * David McKnight (IBM) - [260346] RSE view for jobs does not remember resized columns * David McKnight (IBM) - [333702] Remote Systems details view does not maintain column width settings across sessions + * David McKnight (IBM) - [330398] RSE leaks SWT resources *******************************************************/ package org.eclipse.rse.internal.ui.view; @@ -1274,12 +1275,10 @@ public class SystemTableViewPart extends ViewPart _browsePosition = 0; // register global edit actions - Clipboard clipboard = RSEUIPlugin.getTheSystemRegistryUI().getSystemClipboard(); - CellEditorActionHandler editorActionHandler = new CellEditorActionHandler(getViewSite().getActionBars()); - _copyAction = new SystemCopyToClipboardAction(_viewer.getShell(), clipboard); - _pasteAction = new SystemPasteFromClipboardAction(_viewer.getShell(), clipboard); + _copyAction = new SystemCopyToClipboardAction(_viewer.getShell(), null); + _pasteAction = new SystemPasteFromClipboardAction(_viewer.getShell(), null); _deleteAction = new SystemCommonDeleteAction(_viewer.getShell(), _viewer); _renameAction = new SystemCommonRenameAction(_viewer.getShell(), _viewer); diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/view/SystemViewPart.java b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/view/SystemViewPart.java index 9f4885eb7e4..cbf317831d4 100644 --- a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/view/SystemViewPart.java +++ b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/view/SystemViewPart.java @@ -43,6 +43,7 @@ * Martin Oberhuber (Wind River) - [326910] RSE looses selection when creating a project * David McKnight (IBM) - [330386] RSE SystemView has Focus Problems with Eclipse SDK 4.1M3 * David McKnight (IBM) - [238365] Collapsing tree in new window collapses tree in Original window + * David McKnight (IBM) - [330398] RSE leaks SWT resources *******************************************************************************/ package org.eclipse.rse.internal.ui.view; @@ -386,12 +387,10 @@ public class SystemViewPart } // register global edit actions - Clipboard clipboard = RSEUIPlugin.getTheSystemRegistryUI().getSystemClipboard(); - CellEditorActionHandler editorActionHandler = new CellEditorActionHandler(getViewSite().getActionBars()); - _copyAction = new SystemCopyToClipboardAction(systemView.getShell(), clipboard); - _pasteAction = new SystemPasteFromClipboardAction(systemView.getShell(), clipboard); + _copyAction = new SystemCopyToClipboardAction(systemView.getShell(), null); + _pasteAction = new SystemPasteFromClipboardAction(systemView.getShell(), null); editorActionHandler.setCopyAction(_copyAction); editorActionHandler.setPasteAction(_pasteAction); diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/view/SystemViewScratchpadAdapter.java b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/view/SystemViewScratchpadAdapter.java index 5097b8b6270..650317e4583 100644 --- a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/view/SystemViewScratchpadAdapter.java +++ b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/view/SystemViewScratchpadAdapter.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2002, 2008 IBM Corporation and others. + * Copyright (c) 2002, 2011 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -17,6 +17,7 @@ * Martin Oberhuber (Wind River) - [186128] Move IProgressMonitor last in all API * Martin Oberhuber (Wind River) - [186773] split ISystemRegistryUI from ISystemRegistry * Xuan Chen (IBM) - [223126] [api][breaking] Remove API related to User Actions in RSE Core/UI + * David McKnight (IBM) - [330398] RSE leaks SWT resources *******************************************************************************/ package org.eclipse.rse.internal.ui.view; @@ -63,7 +64,7 @@ public class SystemViewScratchpadAdapter extends AbstractSystemViewAdapter imple { if (_pasteToScratchpadAction == null) { - _pasteToScratchpadAction = new SystemPasteFromClipboardAction(shell, RSEUIPlugin.getTheSystemRegistryUI().getSystemClipboard()); + _pasteToScratchpadAction = new SystemPasteFromClipboardAction(shell, null); } menu.add(menuGroup, _pasteToScratchpadAction); } diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/view/monitor/MonitorViewPage.java b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/view/monitor/MonitorViewPage.java index 775c5e63df1..40483d22f6b 100644 --- a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/view/monitor/MonitorViewPage.java +++ b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/view/monitor/MonitorViewPage.java @@ -1,5 +1,5 @@ /******************************************************************************** - * Copyright (c) 2002, 2008 IBM Corporation and others. All rights reserved. + * Copyright (c) 2002, 2011 IBM Corporation and others. All rights reserved. * This program and the accompanying materials are made available under the terms * of the Eclipse Public License v1.0 which accompanies this distribution, and is * available at http://www.eclipse.org/legal/epl-v10.html @@ -18,6 +18,7 @@ * Kevin Doyle (IBM) - [177587] changed wrapped selection provider in setFocus() * Kevin Doyle (IBM) - [212940] Duplicate Help Context Identifiers * David McKnight (IBM) - [225506] [api][breaking] RSE UI leaks non-API types + * David McKnight (IBM) - [330398] RSE leaks SWT resources ********************************************************************************/ package org.eclipse.rse.internal.ui.view.monitor; @@ -257,11 +258,10 @@ FocusListener createControl(_tabFolderPage); // global actions - Clipboard clipboard = RSEUIPlugin.getTheSystemRegistryUI().getSystemClipboard(); - _copyAction = new SystemCopyToClipboardAction(_viewer.getShell(), clipboard); + _copyAction = new SystemCopyToClipboardAction(_viewer.getShell(), null); _copyAction.setEnabled(false); - _pasteAction = new SystemPasteFromClipboardAction(_viewer.getShell(), clipboard); + _pasteAction = new SystemPasteFromClipboardAction(_viewer.getShell(), null); _pasteAction.setEnabled(false); editorActionHandler.setCopyAction(_copyAction); diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/view/scratchpad/SystemScratchpadViewPart.java b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/view/scratchpad/SystemScratchpadViewPart.java index 3ed88d110cc..4db07c82397 100644 --- a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/view/scratchpad/SystemScratchpadViewPart.java +++ b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/view/scratchpad/SystemScratchpadViewPart.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2002, 2008 IBM Corporation and others. + * Copyright (c) 2002, 2011 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -19,6 +19,7 @@ * Kevin Doyle (IBM) - [193155] Double Clicking on a String in Scratchpad Errors * Kevin Doyle (IBM) - [194867] Remote Scratchpad should have Refresh Action on toolbar * Kevin Doyle (IBM) - [242431] Register a new unique context menu id, so contributions can be made to all our views + * David McKnight (IBM) - [330398] RSE leaks SWT resources *******************************************************************************/ package org.eclipse.rse.internal.ui.view.scratchpad; @@ -137,12 +138,11 @@ public class SystemScratchpadViewPart extends ViewPart // register global edit actions ISystemRegistry registry = RSECorePlugin.getTheSystemRegistry(); - Clipboard clipboard = RSEUIPlugin.getTheSystemRegistryUI().getSystemClipboard(); CellEditorActionHandler editorActionHandler = new CellEditorActionHandler(getViewSite().getActionBars()); - _copyAction = new SystemCopyToClipboardAction(_viewer.getShell(), clipboard); - _pasteAction = new SystemPasteFromClipboardAction(_viewer.getShell(), clipboard); + _copyAction = new SystemCopyToClipboardAction(_viewer.getShell(), null); + _pasteAction = new SystemPasteFromClipboardAction(_viewer.getShell(), null); _deleteAction = new SystemCommonDeleteAction(_viewer.getShell(), _viewer); _renameAction = new SystemCommonRenameAction(_viewer.getShell(), _viewer); diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/view/search/SystemSearchViewPart.java b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/view/search/SystemSearchViewPart.java index cfec185ba12..d846b098389 100644 --- a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/view/search/SystemSearchViewPart.java +++ b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/view/search/SystemSearchViewPart.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2003, 2010 IBM Corporation and others. + * Copyright (c) 2003, 2011 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -19,6 +19,7 @@ * David McKnight (IBM) - [214395] Properties View not updated when clicking on Search Results * David McKnight (IBM) - [190015] [performance] Remove All Match's from Search Results Takes a while * David McKnight (IBM) - [296877] Allow user to choose the attributes for remote search result + * David McKnight (IBM) - [330398] RSE leaks SWT resources *******************************************************************************/ package org.eclipse.rse.internal.ui.view.search; @@ -713,11 +714,10 @@ public class SystemSearchViewPart extends ViewPart tbMgr.add(_selectColumnsAction); // clipboard - Clipboard clipboard = RSEUIPlugin.getTheSystemRegistryUI().getSystemClipboard(); Shell shell = RSEUIPlugin.getTheSystemRegistryUI().getShell(); - copyAction = new SystemSearchCopyToClipboardAction(shell, clipboard); - pasteAction = new SystemPasteFromClipboardAction(shell, clipboard); + copyAction = new SystemSearchCopyToClipboardAction(shell, null); + pasteAction = new SystemPasteFromClipboardAction(shell, null); CellEditorActionHandler editorActionHandler = new CellEditorActionHandler(getViewSite().getActionBars()); diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/actions/SystemCopyToClipboardAction.java b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/actions/SystemCopyToClipboardAction.java index 945b87356d7..ba18bb5e96f 100644 --- a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/actions/SystemCopyToClipboardAction.java +++ b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/actions/SystemCopyToClipboardAction.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2002, 2008 IBM Corporation and others. + * Copyright (c) 2002, 2011 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -17,6 +17,7 @@ * Martin Oberhuber (Wind River) - [186773] split ISystemRegistryUI from ISystemRegistry * David McKnight (IBM) - [223103] [cleanup] fix broken externalized strings * David McKnight (IBM) - [248339] [dnd][encodings] Cannot drag&drop / copy&paste files or folders with turkish or arabic names + * David McKnight (IBM) - [330398] RSE leaks SWT resources *******************************************************************************/ package org.eclipse.rse.ui.actions; @@ -40,6 +41,7 @@ import org.eclipse.rse.internal.ui.view.SystemViewDataDropAdapter; import org.eclipse.rse.services.clientserver.messages.SystemMessage; import org.eclipse.rse.ui.ISystemContextMenuConstants; import org.eclipse.rse.ui.RSEUIPlugin; +import org.eclipse.rse.ui.internal.model.SystemRegistryUI; import org.eclipse.rse.ui.validators.IValidatorRemoteSelection; import org.eclipse.rse.ui.view.ISystemEditableRemoteObject; import org.eclipse.rse.ui.view.ISystemRemoteElementAdapter; @@ -62,19 +64,24 @@ import org.eclipse.ui.part.ResourceTransfer; public class SystemCopyToClipboardAction extends SystemBaseAction implements IValidatorRemoteSelection { private IStructuredSelection _selection; - private Clipboard _clipboard; private boolean _doResourceTransfer = false; // determines whether or not to download on copy /** * Constructor + * -will deprecate this later since we don't use this clipboard now */ - public SystemCopyToClipboardAction(Shell shell, Clipboard clipboard) + public SystemCopyToClipboardAction(Shell shell, Clipboard clipboard){ + this(shell); + } + + /** + * Constructor + */ + private SystemCopyToClipboardAction(Shell shell) { super(SystemResources.ACTION_COPY_LABEL, PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(ISharedImages.IMG_TOOL_COPY), shell); - - _clipboard = clipboard; setToolTipText(SystemResources.ACTION_COPY_TOOLTIP); allowOnMultipleSelection(true); setContextMenuGroup(ISystemContextMenuConstants.GROUP_REORGANIZE); @@ -247,9 +254,10 @@ public class SystemCopyToClipboardAction extends SystemBaseAction implements IV { fn[j] = (String)fileNames.get(j); } - - _clipboard.setContents(new Object[] { data, ft, fn, textStream.toString() }, new Transfer[] { PluginTransfer.getInstance(), ResourceTransfer.getInstance(), FileTransfer.getInstance(), TextTransfer.getInstance()}); - + + Clipboard clipboard = SystemRegistryUI.getInstance().getSystemClipboard(); + clipboard.setContents(new Object[] { data, ft, fn, textStream.toString() }, new Transfer[] { PluginTransfer.getInstance(), ResourceTransfer.getInstance(), FileTransfer.getInstance(), TextTransfer.getInstance()}); + clipboard.dispose(); } else { @@ -259,14 +267,17 @@ public class SystemCopyToClipboardAction extends SystemBaseAction implements IV ft[i] = (String) fileNames.get(i); } + Clipboard clipboard = SystemRegistryUI.getInstance().getSystemClipboard(); + if (ft.length > 0) { - _clipboard.setContents(new Object[] { data, ft, textStream.toString() }, new Transfer[] { PluginTransfer.getInstance(), FileTransfer.getInstance(), TextTransfer.getInstance()}); + clipboard.setContents(new Object[] { data, ft, textStream.toString() }, new Transfer[] { PluginTransfer.getInstance(), FileTransfer.getInstance(), TextTransfer.getInstance()}); } else { - _clipboard.setContents(new Object[] { data, textStream.toString() }, new Transfer[] { PluginTransfer.getInstance(), TextTransfer.getInstance()}); + clipboard.setContents(new Object[] { data, textStream.toString() }, new Transfer[] { PluginTransfer.getInstance(), TextTransfer.getInstance()}); } + clipboard.dispose(); } } diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/actions/SystemPasteFromClipboardAction.java b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/actions/SystemPasteFromClipboardAction.java index 66847e8f7ad..9abd8da1926 100644 --- a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/actions/SystemPasteFromClipboardAction.java +++ b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/actions/SystemPasteFromClipboardAction.java @@ -1,5 +1,5 @@ /******************************************************************************** - * Copyright (c) 2002, 2009 IBM Corporation and others. All rights reserved. + * Copyright (c) 2002, 2011 IBM Corporation and others. All rights reserved. * This program and the accompanying materials are made available under the terms * of the Eclipse Public License v1.0 which accompanies this distribution, and is * available at http://www.eclipse.org/legal/epl-v10.html @@ -15,6 +15,7 @@ * Martin Oberhuber (Wind River) - [186773] split ISystemRegistryUI from ISystemRegistry * Kenya Ishimoto (IBM) - [241197] Paste action causes IllegalArgumentException at Resource.copy * Zhou Renjian (Kortide) - [282241] "Paste" is enabled on file system when text is in clipboard + * David McKnight (IBM) - [330398] RSE leaks SWT resources ********************************************************************************/ package org.eclipse.rse.ui.actions; @@ -36,6 +37,7 @@ import org.eclipse.rse.internal.ui.view.SystemDNDTransferRunnable; import org.eclipse.rse.services.clientserver.messages.SystemMessage; import org.eclipse.rse.ui.ISystemContextMenuConstants; import org.eclipse.rse.ui.RSEUIPlugin; +import org.eclipse.rse.ui.internal.model.SystemRegistryUI; import org.eclipse.rse.ui.validators.IValidatorRemoteSelection; import org.eclipse.rse.ui.view.ISystemRemoteElementAdapter; import org.eclipse.swt.dnd.Clipboard; @@ -54,21 +56,27 @@ import org.eclipse.ui.part.ResourceTransfer; */ public class SystemPasteFromClipboardAction extends SystemBaseAction implements IValidatorRemoteSelection { - - private int _srcType; private Object _selection; - private Clipboard _clipboard; + + /** + * Constructor + * -will deprecate this later since we don't use this clipboard now + */ + public SystemPasteFromClipboardAction(Shell shell, Clipboard clipboard) + { + this(shell); + } + /** * Constructor */ - public SystemPasteFromClipboardAction(Shell shell, Clipboard clipboard) + private SystemPasteFromClipboardAction(Shell shell) { super(SystemResources.ACTION_PASTE_LABEL, PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(ISharedImages.IMG_TOOL_PASTE), //RSEUIPlugin.getDefault().getImageDescriptor(ISystemConstants.ICON_SYSTEM_PASTE_ID), shell); - _clipboard = clipboard; _srcType = SystemDNDTransferRunnable.SRC_TYPE_RSE_RESOURCE; setEnabled(false); @@ -113,32 +121,7 @@ public class SystemPasteFromClipboardAction extends SystemBaseAction implements rulesList.add(srcObjects.get(i)); j++; } - /** FIXME - IREmoteFile is systems.core independent now - else if (srcObjects.get(i) instanceof IRemoteFile) - { - rulesList.add(new RemoteFileSchedulingRule((IRemoteFile)srcObjects.get(i))); - j++; - } - **/ } - /* - if (target instanceof ISchedulingRule) - { - rulesList.add(target); - } - */ - /** FIXME - IREmoteFile is systems.core independent now - else if (target instanceof IRemoteFile) - { - rulesList.add(new RemoteFileSchedulingRule((IRemoteFile)target)); - } - */ - /* - else - { - rulesList.add(targetSubSystem); - } - */ if (rulesList.size() > 0) { ISchedulingRule[] rules = (ISchedulingRule[])rulesList.toArray(new ISchedulingRule[rulesList.size()]); @@ -150,9 +133,6 @@ public class SystemPasteFromClipboardAction extends SystemBaseAction implements runnable.schedule(); RSEUIPlugin.getTheSystemRegistryUI().clearRunnableContext(); } - // clear clipboard - // _clipboard.setContents(new Object[] { null }, new Transfer[] { PluginTransfer.getInstance()}); - // setEnabled(false); } @@ -168,12 +148,13 @@ public class SystemPasteFromClipboardAction extends SystemBaseAction implements } public boolean hasSource() - { - synchronized (_clipboard) + { + Clipboard clipboard = SystemRegistryUI.getInstance().getSystemClipboard(); + try { - try + synchronized (clipboard) { - Object object = _clipboard.getContents(PluginTransfer.getInstance()); + Object object = clipboard.getContents(PluginTransfer.getInstance()); if (object != null) { if (object instanceof PluginTransferData) @@ -191,7 +172,7 @@ public class SystemPasteFromClipboardAction extends SystemBaseAction implements { // clipboard must have resources or files ResourceTransfer resTransfer = ResourceTransfer.getInstance(); - object = _clipboard.getContents(resTransfer); + object = clipboard.getContents(resTransfer); if (object != null) { IResource[] resourceData = (IResource[]) object; @@ -204,7 +185,7 @@ public class SystemPasteFromClipboardAction extends SystemBaseAction implements else { FileTransfer fileTransfer = FileTransfer.getInstance(); - object = _clipboard.getContents(fileTransfer); + object = clipboard.getContents(fileTransfer); if (object != null) { @@ -218,7 +199,7 @@ public class SystemPasteFromClipboardAction extends SystemBaseAction implements else { TextTransfer textTransfer = TextTransfer.getInstance(); - object = _clipboard.getContents(textTransfer); + object = clipboard.getContents(textTransfer); if (object != null) { @@ -230,9 +211,12 @@ public class SystemPasteFromClipboardAction extends SystemBaseAction implements } } } - catch (Exception e) - { - } + } + catch (Exception e) + { + } + finally { + clipboard.dispose(); } return false; } diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/filters/SystemChangeFilterPane.java b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/filters/SystemChangeFilterPane.java index 961e6756312..b44054133cd 100644 --- a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/filters/SystemChangeFilterPane.java +++ b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/filters/SystemChangeFilterPane.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2002, 2008 IBM Corporation and others. + * Copyright (c) 2002, 2011 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -16,6 +16,7 @@ * David McKnight(IBM) - [239257] Tooltip for Filter Pool label is incorrect * Kevin Doyle (IBM) - [235223] Duplicate Filter Strings * David McKnight (IBM) - [252708] Saving Profile Job happens when not changing Property Values on Connections + * David McKnight (IBM) - [330398] RSE leaks SWT resources *******************************************************************************/ package org.eclipse.rse.ui.filters; @@ -48,6 +49,7 @@ import org.eclipse.rse.ui.RSEUIPlugin; import org.eclipse.rse.ui.SystemBaseForm; import org.eclipse.rse.ui.SystemWidgetHelpers; import org.eclipse.rse.ui.actions.ISystemAction; +import org.eclipse.rse.ui.internal.model.SystemRegistryUI; import org.eclipse.rse.ui.messages.ISystemMessageLine; import org.eclipse.rse.ui.messages.SystemMessageDialog; import org.eclipse.rse.ui.validators.ISystemValidator; @@ -98,7 +100,6 @@ public class SystemChangeFilterPane extends SystemBaseForm private SystemChangeFilterActionMoveStringUp moveUpAction; private SystemChangeFilterActionMoveStringDown moveDownAction; private MenuManager menuMgr; - private Clipboard clipboard; private boolean menuListenerAdded; // inputs @@ -1364,12 +1365,12 @@ public class SystemChangeFilterPane extends SystemBaseForm */ public void doCopy() { - if (clipboard == null) - clipboard = new Clipboard(getShell().getDisplay()); + Clipboard clipboard = new Clipboard(getShell().getDisplay()); String selection = getCurrentSelection(); TextTransfer transfer = TextTransfer.getInstance(); clipboard.setContents(new Object[] {selection}, new Transfer[] {transfer}); + clipboard.dispose(); } /** * Decide if we can do the paste or not. @@ -1377,11 +1378,11 @@ public class SystemChangeFilterPane extends SystemBaseForm */ public boolean canPaste() { - if (clipboard == null) - return false; - TextTransfer textTransfer = TextTransfer.getInstance(); - String textData = (String)clipboard.getContents(textTransfer); - return ((textData != null) && (textData.length() > 0)); + Clipboard clipboard = new Clipboard(getShell().getDisplay()); + TextTransfer textTransfer = TextTransfer.getInstance(); + String textData = (String)clipboard.getContents(textTransfer); + clipboard.dispose(); + return ((textData != null) && (textData.length() > 0)); } /** * Actually do the copy of the current filter string to the clipboard. @@ -1389,8 +1390,7 @@ public class SystemChangeFilterPane extends SystemBaseForm */ public void doPaste() { - if (clipboard == null) - return; + Clipboard clipboard = SystemRegistryUI.getInstance().getSystemClipboard(); TextTransfer textTransfer = TextTransfer.getInstance(); String textData = (String)clipboard.getContents(textTransfer); @@ -1409,6 +1409,7 @@ public class SystemChangeFilterPane extends SystemBaseForm } processListSelect(); // defect 45790... setPageComplete(verify(false)); + clipboard.dispose(); } // -------------- diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/widgets/SystemCollapsableSection.java b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/widgets/SystemCollapsableSection.java index e40946624fc..8477fe50b2e 100644 --- a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/widgets/SystemCollapsableSection.java +++ b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/widgets/SystemCollapsableSection.java @@ -1,5 +1,5 @@ /******************************************************************************** - * Copyright (c) 2006 IBM Corporation. All rights reserved. + * Copyright (c) 2006, 2011 IBM Corporation. All rights reserved. * This program and the accompanying materials are made available under the terms * of the Eclipse Public License v1.0 which accompanies this distribution, and is * available at http://www.eclipse.org/legal/epl-v10.html @@ -12,6 +12,7 @@ * * Contributors: * {Name} (company) - description of contribution. + * David McKnight (IBM) - [330398] RSE leaks SWT resources ********************************************************************************/ package org.eclipse.rse.ui.widgets; @@ -139,11 +140,6 @@ public class SystemCollapsableSection extends Composite implements MouseListener super(compositeParent, SWT.NULL); - if (_colorCollapsable == null) - { - Display display = Display.getCurrent(); - _colorCollapsable = new Color(display, 0, 140, 140); - } setLayout(new RTwisteeLayout()); @@ -157,6 +153,14 @@ public class SystemCollapsableSection extends Composite implements MouseListener addPaintListener(this); addMouseListener(this); } + + private static Color getCollapsableColour(){ + if (_colorCollapsable == null || _colorCollapsable.isDisposed()){ + Display display = Display.getCurrent(); + _colorCollapsable = new Color(display, 0, 140, 140); + } + return _colorCollapsable; + } /** * Get the actual composite inside the collapsible section to @@ -298,13 +302,14 @@ public class SystemCollapsableSection extends Composite implements MouseListener int iY, boolean bCollapsed) { + Color ccolour = getCollapsableColour(); // Not collapsed: v //----------------- if (bCollapsed == false) { - gc.setForeground(_colorCollapsable); + gc.setForeground(ccolour); int iA = iX; int iB = iY + 3; @@ -333,7 +338,7 @@ public class SystemCollapsableSection extends Composite implements MouseListener //------------- else { - gc.setForeground(_colorCollapsable); + gc.setForeground(ccolour); int iA = iX + 2; int iB = iY; @@ -355,6 +360,7 @@ public class SystemCollapsableSection extends Composite implements MouseListener iB++; gc.drawLine(iA, iB, iA, iB); } + ccolour.dispose(); } /** diff --git a/rse/plugins/org.eclipse.rse.ui/model/org/eclipse/rse/ui/internal/model/SystemRegistryUI.java b/rse/plugins/org.eclipse.rse.ui/model/org/eclipse/rse/ui/internal/model/SystemRegistryUI.java index d3297ae6402..30ea582e417 100644 --- a/rse/plugins/org.eclipse.rse.ui/model/org/eclipse/rse/ui/internal/model/SystemRegistryUI.java +++ b/rse/plugins/org.eclipse.rse.ui/model/org/eclipse/rse/ui/internal/model/SystemRegistryUI.java @@ -1,5 +1,5 @@ /******************************************************************************** - * Copyright (c) 2006, 2008 IBM Corporation and others. All rights reserved. + * Copyright (c) 2006, 2011 IBM Corporation and others. All rights reserved. * This program and the accompanying materials are made available under the terms * of the Eclipse Public License v1.0 which accompanies this distribution, and is * available at http://www.eclipse.org/legal/epl-v10.html @@ -19,6 +19,7 @@ * Martin Oberhuber (Wind River) - [] Move SystemRegistry impl into Core * Martin Oberhuber (Wind River) - [215820] Move SystemRegistry implementation to Core * David McKnight (IBM) - [248339] [dnd][encodings] Cannot drag&drop / copy&paste files or folders with turkish or arabic names + * David McKnight (IBM) - [330398] RSE leaks SWT resources ********************************************************************************/ package org.eclipse.rse.ui.internal.model; @@ -80,7 +81,6 @@ public class SystemRegistryUI implements ISystemRegistryUI { private Vector previousRunnableContexts = new Vector(); private Vector previousRunnableContextShells = new Vector(); - private Clipboard clipboard = null; private SystemScratchpad scratchpad = null; /** @@ -277,22 +277,17 @@ public class SystemRegistryUI implements ISystemRegistryUI { */ public Clipboard getSystemClipboard() { - if (clipboard == null) + Display display = null; + Shell shell = getShell(); + if (shell == null) { - Display display = null; - Shell shell = getShell(); - if (shell == null) - { - display = Display.getDefault(); - } - else - { - display = shell.getDisplay(); - } - clipboard = new Clipboard(display); + display = Display.getDefault(); } - - return clipboard; + else + { + display = shell.getDisplay(); + } + return new Clipboard(display); } /** @@ -442,6 +437,7 @@ public class SystemRegistryUI implements ISystemRegistryUI { srcObjects.add(textData); } } + clipboard.dispose(); return srcObjects; }