From ceb8b9b40b1b5ee8e6ef24cf23a349d037e37038 Mon Sep 17 00:00:00 2001 From: Patrick Chuong Date: Wed, 6 Apr 2011 14:26:06 +0000 Subject: [PATCH] [Pin&Clone] Pinned view not update when stepping/running --- .../ui/pinclone/DebugContextPinProvider.java | 13 +++++------- .../eclipse/cdt/debug/ui/IPinProvider.java | 12 +++++------ .../dsf/gdb/internal/ui/GdbPinProvider.java | 21 ++++++++++--------- 3 files changed, 21 insertions(+), 25 deletions(-) diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/pinclone/DebugContextPinProvider.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/pinclone/DebugContextPinProvider.java index f0483b110a3..ff05de7fb52 100644 --- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/pinclone/DebugContextPinProvider.java +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/pinclone/DebugContextPinProvider.java @@ -54,14 +54,11 @@ public class DebugContextPinProvider extends AbstractDebugContextProvider implem fActiveContext = activeContext; fPinHandles = pin(part, activeContext, new IPinModelListener() { - public void modelChanged(int eventType) { + public void modelChanged(ISelection selection) { // send a change notification for the view to update - switch (eventType) { - case IPinModelListener.EXITED: - case IPinModelListener.RESUMED: - delegateEvent(new DebugContextEvent(DebugContextPinProvider.this, new StructuredSelection(), DebugContextEvent.ACTIVATED)); - break; - } + delegateEvent(new DebugContextEvent(DebugContextPinProvider.this, + selection == null ? new StructuredSelection() : selection, + DebugContextEvent.ACTIVATED)); } }); } @@ -118,8 +115,8 @@ public class DebugContextPinProvider extends AbstractDebugContextProvider implem * @param listener pin model listener * @return a set of pinned handle */ - private Set pin(IWorkbenchPart part, ISelection selection, IPinModelListener listener) { Set handles = new HashSet(); + private Set pin(IWorkbenchPart part, ISelection selection, IPinModelListener listener) { if (selection instanceof IStructuredSelection) { for (Object element : ((IStructuredSelection)selection).toList()) { diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/ui/IPinProvider.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/ui/IPinProvider.java index e89f52fa222..245d29f6eb4 100644 --- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/ui/IPinProvider.java +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/ui/IPinProvider.java @@ -12,6 +12,7 @@ package org.eclipse.cdt.debug.ui; import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.jface.viewers.ISelection; import org.eclipse.ui.IWorkbenchPart; /** @@ -105,18 +106,16 @@ public interface IPinProvider { * that the model has changed for a pinned view and that the view must be * refreshed. * - * @noimplement This interface is not intended to be implemented by clients. + * @noimplement This interface is not intended to be implemented by clients. */ public interface IPinModelListener { - static final int RESUMED = 0; - static final int EXITED = 1; - /** * Model changed handler that will cause the view to update. * - * @param eventType one of the event type. + * @param newSelection the new selection, if {@code null} the view will blank out. + * */ - void modelChanged(int eventType); + void modelChanged(ISelection newSelection); } /** @@ -135,7 +134,6 @@ public interface IPinProvider { * @param debugContext the debug context to pin to * @return a handle for the pinned debug context */ - IPinElementHandle pin(IWorkbenchPart part, Object debugContext, IPinModelListener listener); /** diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/GdbPinProvider.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/GdbPinProvider.java index 454801fc89b..94967cc6088 100644 --- a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/GdbPinProvider.java +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/GdbPinProvider.java @@ -48,6 +48,7 @@ import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.jface.viewers.ISelection; import org.eclipse.ui.IWorkbenchPart; /** @@ -278,7 +279,7 @@ public class GdbPinProvider implements IPinProvider { } return false; } - + /** * Dispatch the change event for the given DM context. * @@ -341,20 +342,20 @@ public class GdbPinProvider implements IPinProvider { @DsfServiceEventHandler public void handleEvent(final ICommandControlShutdownDMEvent event) { - doHandleEvent(event, IPinModelListener.EXITED); + handleInvalidModelContext(event); } @DsfServiceEventHandler public void handleEvent(final IExitedDMEvent event) { - doHandleEvent(event, IPinModelListener.EXITED); + handleInvalidModelContext(event); } @DsfServiceEventHandler public void handleEvent(final IResumedDMEvent event) { - doHandleEvent(event, IPinModelListener.RESUMED); + handleInvalidModelContext(event); } - private void doHandleEvent(IDMEvent event, final int notificationId) { + private void handleInvalidModelContext(IDMEvent event) { Set> entries = gsPinnedHandles.entrySet(); for (final Entry e : entries) { final IPinModelListener listener = e.getValue(); @@ -375,7 +376,7 @@ public class GdbPinProvider implements IPinProvider { if (execEventDmc != null && execHandleDmc != null) { // It is a thread event, but is it the same as the pin handle? if (execEventDmc.equals(execHandleDmc)) { - fireModleChangeEvent(listener, notificationId); + fireModleChangeEvent(listener, null); } continue; } @@ -386,14 +387,14 @@ public class GdbPinProvider implements IPinProvider { IMIContainerDMContext procHandleDmc = DMContexts.getAncestorOfType(handleDmc, IMIContainerDMContext.class); if (procEventDmc != null && procHandleDmc != null) { if (procEventDmc.equals(procHandleDmc)) { - fireModleChangeEvent(listener, notificationId); + fireModleChangeEvent(listener, null); } continue; } // If we got a shutdown event if (eventDmc instanceof ICommandControlDMContext) { - fireModleChangeEvent(listener, notificationId); + fireModleChangeEvent(listener, null); continue; } } @@ -401,12 +402,12 @@ public class GdbPinProvider implements IPinProvider { } } - private void fireModleChangeEvent(final IPinModelListener listener, final int notificationId) { + private void fireModleChangeEvent(final IPinModelListener listener, final ISelection selection) { new Job("Model Changed") { //$NON-NLS-1$ { setSystem(true); } @Override protected IStatus run(IProgressMonitor arg0) { - listener.modelChanged(notificationId); + listener.modelChanged(selection); return Status.OK_STATUS; } }.schedule();