Index: E:/workspace-3.3.1.1/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/editor/IVisualController.java =================================================================== --- E:/workspace-3.3.1.1/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/editor/IVisualController.java (revision 5456) +++ E:/workspace-3.3.1.1/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/editor/IVisualController.java (working copy) @@ -11,6 +11,7 @@ package org.jboss.tools.jst.jsp.editor; import org.eclipse.jface.viewers.SelectionChangedEvent; +import org.eclipse.swt.events.SelectionListener; import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel; import org.w3c.dom.Node; @@ -15,7 +16,7 @@ import org.w3c.dom.Node; -public interface IVisualController { +public interface IVisualController extends SelectionListener { public IStructuredModel getModel(); public void drop(Node node, Node parentNode, int offset); public IVisualContext getPageContext(); Index: E:/workspace-3.3.1.1/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/editor/IVisualEditor.java =================================================================== --- E:/workspace-3.3.1.1/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/editor/IVisualEditor.java (revision 5456) +++ E:/workspace-3.3.1.1/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/editor/IVisualEditor.java (working copy) @@ -23,5 +23,9 @@ public void setVisualMode(int mode); public IVisualController getController(); + public Object getPreviewWebBrowser(); + public void createPreviewBrowser(); + public Object getVisualEditor(); + public void createVisualEditor(); } Index: E:/workspace-3.3.1.1/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/jspeditor/JSPMultiPageContributor.java =================================================================== --- E:/workspace-3.3.1.1/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/jspeditor/JSPMultiPageContributor.java (revision 5456) +++ E:/workspace-3.3.1.1/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/jspeditor/JSPMultiPageContributor.java (working copy) @@ -213,4 +213,19 @@ .get(STATUSFIELDS[i]), STATUSFIELDS[i]); } } + + public void dispose() { + if (fToggleOccurencesMarkUp != null) { + fToggleOccurencesMarkUp.setEditor(null); + fToggleOccurencesMarkUp = null; + } + super.dispose(); + fActiveEditorPart=null; + mainPart=null; + fContentAssist=null; + fContentAssistProposal=null; + fContentAssistTip=null; + fShowTooltipAction=null; + + } } Index: E:/workspace-3.3.1.1/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/jspeditor/JSPMultiPageEditor.java =================================================================== --- E:/workspace-3.3.1.1/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/jspeditor/JSPMultiPageEditor.java (revision 5456) +++ E:/workspace-3.3.1.1/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/jspeditor/JSPMultiPageEditor.java (working copy) @@ -109,7 +109,7 @@ private int sourceIndex; /** composite control for default web-browser */ - private IVisualEditor previewWebBrowser; + //private IVisualEditor previewWebBrowser; /** index of tab contain default web-browser */ private int previewIndex; @@ -213,13 +213,24 @@ protected void pageChange(int newPageIndex) { selectedPageIndex = newPageIndex; if (osWindows) { - if (newPageIndex == visualSourceIndex) + if (newPageIndex == visualSourceIndex) { + if (visualEditor.getVisualEditor() == null) { + visualEditor.createVisualEditor(); + } visualEditor.setVisualMode(IVisualEditor.VISUALSOURCE_MODE); - else if (newPageIndex == visualIndex) + } + else if (newPageIndex == visualIndex) { + if (visualEditor.getVisualEditor() == null) { + visualEditor.createVisualEditor(); + } visualEditor.setVisualMode(IVisualEditor.VISUAL_MODE); + } else if (newPageIndex == sourceIndex) visualEditor.setVisualMode(IVisualEditor.SOURCE_MODE); else if (newPageIndex == previewIndex) { + if (visualEditor.getPreviewWebBrowser() == null) { + visualEditor.createPreviewBrowser(); + } visualEditor.setVisualMode(IVisualEditor.PREVIEW_MODE); } @@ -278,8 +289,10 @@ */ private ISelectionProvider selectionProvider = null; + private JSPMultiPageEditorSite site; + protected IEditorSite createSite(IEditorPart editor) { - JSPMultiPageEditorSite site = new JSPMultiPageEditorSite(this, editor) { + site = new JSPMultiPageEditorSite(this, editor) { private ISelectionChangedListener postSelectionChangedListener = null; private ISelectionChangedListener getPostSelectionChangedListener() { @@ -347,6 +360,8 @@ .addPostSelectionChangedListener(getPostSelectionChangedListener()); } } + + } public Object getService(Class api) { @@ -358,6 +373,17 @@ // TODO megration to eclipse 3.2 return false; } + + public void dispose() { + ISelectionProvider provider = getSelectionProvider(); + if (provider instanceof IPostSelectionProvider && postSelectionChangedListener != null) { + ((IPostSelectionProvider) provider) + .removePostSelectionChangedListener(postSelectionChangedListener); + + } + postSelectionChangedListener = null; + super.dispose(); + } }; return site; } @@ -501,6 +527,7 @@ saveSelectedTab(); XModelObject o = getModelObject(); visualEditor.dispose(); + site.dispose(); super.dispose(); if (o != null) { o.getModel().removeModelTreeListener(syncListener); @@ -505,6 +532,9 @@ if (o != null) { o.getModel().removeModelTreeListener(syncListener); } + if (syncListener != null) + syncListener.dispose(); + syncListener=null; if (o != null && o.isModified() && o.isActive()) { try { ((FolderImpl) o.getParent()).discardChildFile(o); Index: E:/workspace-3.3.1.1/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/jspeditor/JSPMultiPageEditorPart.java =================================================================== --- E:/workspace-3.3.1.1/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/jspeditor/JSPMultiPageEditorPart.java (revision 5456) +++ E:/workspace-3.3.1.1/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/jspeditor/JSPMultiPageEditorPart.java (working copy) @@ -69,22 +69,23 @@ public int addPage(IEditorPart editor, IEditorInput input) throws PartInitException { - IEditorSite site = createSite(editor); - editor.init(site, input); Composite parent2; - if (ppp != null) { - parent2 = ppp; - } else { + if (ppp == null) { + IEditorSite site = createSite(editor); + editor.init(site, input); parent2 = new Composite(getContainer(), SWT.NONE); ppp = parent2; + parent2.setLayout(new FillLayout()); + editor.createPartControl(parent2); + editor.addPropertyListener(new IPropertyListener() { + public void propertyChanged(Object source, int propertyId) { + JSPMultiPageEditorPart.this + .handlePropertyChange(propertyId); + } + }); + } else { + parent2 = ppp; } - parent2.setLayout(new FillLayout()); - editor.createPartControl(parent2); - editor.addPropertyListener(new IPropertyListener() { - public void propertyChanged(Object source, int propertyId) { - JSPMultiPageEditorPart.this.handlePropertyChange(propertyId); - } - }); Item item = createItem(parent2); item.setData(editor); nestedEditors.add(editor); Index: E:/workspace-3.3.1.1/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/jspeditor/JSPMultiPageEditorSite.java =================================================================== --- E:/workspace-3.3.1.1/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/jspeditor/JSPMultiPageEditorSite.java (revision 5456) +++ E:/workspace-3.3.1.1/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/jspeditor/JSPMultiPageEditorSite.java (working copy) @@ -69,6 +69,12 @@ } fService = null; } + fEditor = null; + fEditorPart = null; + if (fSelChangeListener != null) { + getSelectionProvider().removeSelectionChangedListener(fSelChangeListener); + fSelChangeListener = null; + } } public IEditorActionBarContributor getActionBarContributor() { Index: E:/workspace-3.3.1.1/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/jspeditor/JSPTextEditor.java =================================================================== --- E:/workspace-3.3.1.1/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/jspeditor/JSPTextEditor.java (revision 5456) +++ E:/workspace-3.3.1.1/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/jspeditor/JSPTextEditor.java (working copy) @@ -634,6 +634,14 @@ } } } + + protected void handleDispose() { + if (editor != null && editor.getSourceViewer() != null && editor.getSourceViewer().getTextWidget() != null && editor.getVPEController() != null) { + StyledText widget = editor.getSourceViewer().getTextWidget(); + widget.removeSelectionListener(editor.getVPEController()); + } + super.handleDispose(); + } } public JSPMultiPageEditor getParentEditor() { @@ -1069,6 +1077,19 @@ } public void dispose() { + // some things in the configuration need to clean + // up after themselves + getSourceViewer().removeTextListener(this); + if (fOutlinePage != null) { + if (fOutlinePage instanceof ConfigurableContentOutlinePage && fOutlinePageListener != null) { + ((ConfigurableContentOutlinePage) fOutlinePage).removeDoubleClickListener(fOutlinePageListener); + } + if (fOutlinePageListener != null) { + fOutlinePage.removeSelectionChangedListener(fOutlinePageListener); + } + } + fOutlinePage=null; + fOutlinePageListener=null; if (fOccurrenceModelUpdater != null) { fOccurrenceModelUpdater.uninstall(); fOccurrenceModelUpdater = null; @@ -1074,6 +1095,10 @@ fOccurrenceModelUpdater = null; } super.dispose(); + if (wtpTextJspKbConnector != null) { + wtpTextJspKbConnector.setTaglibManagerProvider(null); + wtpTextJspKbConnector = null; + } if (listener != null) listener.dispose(); listener = null;