diff options
author | Uwe Stieber | 2013-03-28 07:02:14 +0000 |
---|---|---|
committer | Uwe Stieber | 2013-03-28 07:02:14 +0000 |
commit | d725e3b69ab9329268a57eca1efc59d7d790ec51 (patch) | |
tree | 3c78034c1fe3e57836c041a800580f2e902f4edb /target_explorer/plugins | |
parent | 9f28fd160e04c277307f7807c743031f84f3a681 (diff) | |
download | org.eclipse.tcf-d725e3b69ab9329268a57eca1efc59d7d790ec51.tar.gz org.eclipse.tcf-d725e3b69ab9329268a57eca1efc59d7d790ec51.tar.xz org.eclipse.tcf-d725e3b69ab9329268a57eca1efc59d7d790ec51.zip |
Target Explorer: Do not auto-close open editors for static peers if the associated remote peer disappears
Diffstat (limited to 'target_explorer/plugins')
2 files changed, 147 insertions, 145 deletions
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/navigator/ModelListener.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/navigator/ModelListener.java index a9b136290..5af6cf57c 100644 --- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/navigator/ModelListener.java +++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/navigator/ModelListener.java @@ -77,8 +77,9 @@ public class ModelListener extends ModelAdapter { if (listener != null) { listener.locatorModelChanged(model, peerModel, added); } - // If no -> Default behavior is to close the editor (if any) - else if (!added) { + // If no -> Default behavior for dynamic discovered peers is to close the editor (if any). + // For static peers, leave the editor untouched. + else if (!added && !peerModel.isStatic()) { Display display = PlatformUI.getWorkbench().getDisplay(); if (display != null && !display.isDisposed()) { display.asyncExec(new Runnable() { diff --git a/target_explorer/plugins/org.eclipse.tcf.te.ui.views/src/org/eclipse/tcf/te/ui/views/editor/EditorEventListener.java b/target_explorer/plugins/org.eclipse.tcf.te.ui.views/src/org/eclipse/tcf/te/ui/views/editor/EditorEventListener.java index bb36fbec8..2ab7f98b9 100644 --- a/target_explorer/plugins/org.eclipse.tcf.te.ui.views/src/org/eclipse/tcf/te/ui/views/editor/EditorEventListener.java +++ b/target_explorer/plugins/org.eclipse.tcf.te.ui.views/src/org/eclipse/tcf/te/ui/views/editor/EditorEventListener.java @@ -1,143 +1,144 @@ -/*******************************************************************************
- * Copyright (c) 2011, 2012 Wind River Systems, Inc. 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
- *
- * Contributors:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tcf.te.ui.views.editor;
-
-import java.util.EventObject;
-
-import org.eclipse.core.runtime.Assert;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.tcf.te.runtime.events.ChangeEvent;
-import org.eclipse.tcf.te.runtime.events.EventManager;
-import org.eclipse.tcf.te.runtime.interfaces.IDisposable;
-import org.eclipse.tcf.te.runtime.interfaces.properties.IPropertiesContainer;
-import org.eclipse.tcf.te.ui.events.AbstractEventListener;
-import org.eclipse.tcf.te.ui.views.activator.UIPlugin;
-import org.eclipse.tcf.te.ui.views.interfaces.tracing.ITraceIds;
-import org.eclipse.ui.IEditorPart;
-import org.eclipse.ui.IPropertyListener;
-import org.eclipse.ui.ISources;
-import org.eclipse.ui.forms.editor.IFormPage;
-import org.eclipse.ui.services.IEvaluationService;
-
-/**
- * Editor event listener implementation.
- * <p>
- * The event listener is registered by an editor instance for a given editor input
- * and is supposed to receive events for the editor input only.
- */
-public final class EditorEventListener extends AbstractEventListener implements IDisposable, IPropertyListener {
- // Reference to the parent editor
- private final Editor editor;
- // Flag to remember the disposed state
- private boolean disposed = false;
-
- /**
- * Constructor.
- *
- * @param editor The parent editor. Must not be <code>null</code>.
- */
- public EditorEventListener(Editor editor) {
- super();
-
- Assert.isNotNull(editor);
- this.editor = editor;
-
- // Register the event listener if the editor input is a properties container
- Object node = editor.getEditorInput() != null ? editor.getEditorInput().getAdapter(Object.class) : null;
- if (node instanceof IPropertiesContainer) EventManager.getInstance().addEventListener(this, ChangeEvent.class, node);
-
- editor.addPropertyListener(this);
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tcf.te.runtime.interfaces.IDisposable#dispose()
- */
- @Override
- public void dispose() {
- disposed = true;
- EventManager.getInstance().removeEventListener(this);
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.tcf.te.runtime.interfaces.events.IEventListener#eventFired(java.util.EventObject)
- */
- @Override
- public void eventFired(EventObject event) {
- // Do nothing if already disposed
- if (disposed) return;
-
- // Ignore everything not being a change event
- if (!(event instanceof ChangeEvent)) return;
-
- ChangeEvent changeEvent = (ChangeEvent)event;
-
- if (UIPlugin.getTraceHandler().isSlotEnabled(0, ITraceIds.TRACE_EDITOR_EVENT_LISTENER)) {
- UIPlugin.getTraceHandler().trace("Entered eventFired(...). eventId='" + changeEvent.getEventId() + "'" //$NON-NLS-1$ //$NON-NLS-2$
- + ", oldValue='" + changeEvent.getOldValue() + "'" //$NON-NLS-1$ //$NON-NLS-2$
- + ", newValue='" + changeEvent.getNewValue() + "'", //$NON-NLS-1$ //$NON-NLS-2$
- 0, ITraceIds.TRACE_EDITOR_EVENT_LISTENER,
- IStatus.INFO, this);
- }
-
- // Get the event source
- Object source = event.getSource();
- // Double check with the parent editors input object
- Object node = editor.getEditorInput() != null ? editor.getEditorInput().getAdapter(Object.class) : null;
- // If the editor input cannot be determined or it does not match the event source
- // --> return immediately
- if (node == null || !node.equals(source)) {
- if (UIPlugin.getTraceHandler().isSlotEnabled(0, ITraceIds.TRACE_EDITOR_EVENT_LISTENER)) {
- UIPlugin.getTraceHandler().trace("Dropping out of eventFired(...). Event source does not match editor input.", //$NON-NLS-1$
- 0, ITraceIds.TRACE_EDITOR_EVENT_LISTENER,
- IStatus.WARNING, this);
- }
-
- return;
- }
-
- // Refresh the page list. Changing editor input element properties
- // may effect the page list -> Update in any case.
- editor.updatePageList();
-
- // If the event is a "editor.refreshTab" event, skip the rest
- if (!"editor.refreshTab".equals(changeEvent.getEventId())) { //$NON-NLS-1$
- // Update the active page content by calling IFormPage#setActive(boolean)
- Object page = editor.getSelectedPage();
- if (page instanceof IFormPage) {
- ((IFormPage)page).setActive(((IFormPage)page).isActive());
- }
-
- // Update the editor part name
- editor.updatePartName();
-
- // Request a re-evaluation if all expressions referring the "activeEditorInput" source.
- IEvaluationService service = (IEvaluationService)editor.getSite().getService(IEvaluationService.class);
- if (service != null) {
- service.requestEvaluation(ISources.ACTIVE_EDITOR_INPUT_NAME);
- }
- }
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.ui.IPropertyListener#propertyChanged(java.lang.Object, int)
- */
- @Override
- public void propertyChanged(Object source, int propId) {
- if (source == this.editor) {
- if (IEditorPart.PROP_DIRTY == propId) {
- // Request a re-evaluation if all expressions referring the "activeEditorInput" source.
- IEvaluationService service = (IEvaluationService)editor.getSite().getService(IEvaluationService.class);
- if (service != null) {
- service.requestEvaluation(ISources.ACTIVE_EDITOR_INPUT_NAME);
- }
- }
- }
- }
-}
+/******************************************************************************* + * Copyright (c) 2011, 2012 Wind River Systems, Inc. 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 + * + * Contributors: + * Wind River Systems - initial API and implementation + *******************************************************************************/ +package org.eclipse.tcf.te.ui.views.editor; + +import java.util.EventObject; + +import org.eclipse.core.runtime.Assert; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.tcf.te.runtime.events.ChangeEvent; +import org.eclipse.tcf.te.runtime.events.EventManager; +import org.eclipse.tcf.te.runtime.interfaces.IDisposable; +import org.eclipse.tcf.te.runtime.interfaces.properties.IPropertiesContainer; +import org.eclipse.tcf.te.ui.events.AbstractEventListener; +import org.eclipse.tcf.te.ui.views.activator.UIPlugin; +import org.eclipse.tcf.te.ui.views.interfaces.tracing.ITraceIds; +import org.eclipse.ui.IEditorPart; +import org.eclipse.ui.IPropertyListener; +import org.eclipse.ui.ISources; +import org.eclipse.ui.forms.editor.IFormPage; +import org.eclipse.ui.services.IEvaluationService; + +/** + * Editor event listener implementation. + * <p> + * The event listener is registered by an editor instance for a given editor input + * and is supposed to receive events for the editor input only. + */ +public final class EditorEventListener extends AbstractEventListener implements IDisposable, IPropertyListener { + // Reference to the parent editor + private final Editor editor; + // Flag to remember the disposed state + private boolean disposed = false; + + /** + * Constructor. + * + * @param editor The parent editor. Must not be <code>null</code>. + */ + public EditorEventListener(Editor editor) { + super(); + + Assert.isNotNull(editor); + this.editor = editor; + + // Register the event listener if the editor input is a properties container + Object node = editor.getEditorInput() != null ? editor.getEditorInput().getAdapter(Object.class) : null; + if (node instanceof IPropertiesContainer) EventManager.getInstance().addEventListener(this, ChangeEvent.class, node); + + editor.addPropertyListener(this); + } + + /* (non-Javadoc) + * @see org.eclipse.tcf.te.runtime.interfaces.IDisposable#dispose() + */ + @Override + public void dispose() { + disposed = true; + EventManager.getInstance().removeEventListener(this); + editor.removePropertyListener(this); + } + + /* (non-Javadoc) + * @see org.eclipse.tcf.te.runtime.interfaces.events.IEventListener#eventFired(java.util.EventObject) + */ + @Override + public void eventFired(EventObject event) { + // Do nothing if already disposed + if (disposed) return; + + // Ignore everything not being a change event + if (!(event instanceof ChangeEvent)) return; + + ChangeEvent changeEvent = (ChangeEvent)event; + + if (UIPlugin.getTraceHandler().isSlotEnabled(0, ITraceIds.TRACE_EDITOR_EVENT_LISTENER)) { + UIPlugin.getTraceHandler().trace("Entered eventFired(...). eventId='" + changeEvent.getEventId() + "'" //$NON-NLS-1$ //$NON-NLS-2$ + + ", oldValue='" + changeEvent.getOldValue() + "'" //$NON-NLS-1$ //$NON-NLS-2$ + + ", newValue='" + changeEvent.getNewValue() + "'", //$NON-NLS-1$ //$NON-NLS-2$ + 0, ITraceIds.TRACE_EDITOR_EVENT_LISTENER, + IStatus.INFO, this); + } + + // Get the event source + Object source = event.getSource(); + // Double check with the parent editors input object + Object node = editor.getEditorInput() != null ? editor.getEditorInput().getAdapter(Object.class) : null; + // If the editor input cannot be determined or it does not match the event source + // --> return immediately + if (node == null || !node.equals(source)) { + if (UIPlugin.getTraceHandler().isSlotEnabled(0, ITraceIds.TRACE_EDITOR_EVENT_LISTENER)) { + UIPlugin.getTraceHandler().trace("Dropping out of eventFired(...). Event source does not match editor input.", //$NON-NLS-1$ + 0, ITraceIds.TRACE_EDITOR_EVENT_LISTENER, + IStatus.WARNING, this); + } + + return; + } + + // Refresh the page list. Changing editor input element properties + // may effect the page list -> Update in any case. + editor.updatePageList(); + + // If the event is a "editor.refreshTab" event, skip the rest + if (!"editor.refreshTab".equals(changeEvent.getEventId())) { //$NON-NLS-1$ + // Update the active page content by calling IFormPage#setActive(boolean) + Object page = editor.getSelectedPage(); + if (page instanceof IFormPage) { + ((IFormPage)page).setActive(((IFormPage)page).isActive()); + } + + // Update the editor part name + editor.updatePartName(); + + // Request a re-evaluation if all expressions referring the "activeEditorInput" source. + IEvaluationService service = (IEvaluationService)editor.getSite().getService(IEvaluationService.class); + if (service != null) { + service.requestEvaluation(ISources.ACTIVE_EDITOR_INPUT_NAME); + } + } + } + + /* (non-Javadoc) + * @see org.eclipse.ui.IPropertyListener#propertyChanged(java.lang.Object, int) + */ + @Override + public void propertyChanged(Object source, int propId) { + if (source == this.editor) { + if (IEditorPart.PROP_DIRTY == propId) { + // Request a re-evaluation if all expressions referring the "activeEditorInput" source. + IEvaluationService service = (IEvaluationService)editor.getSite().getService(IEvaluationService.class); + if (service != null) { + service.requestEvaluation(ISources.ACTIVE_EDITOR_INPUT_NAME); + } + } + } + } +} |