### Eclipse Workspace Patch 1.0 #P org.eclipse.cdt.debug.mi.core Index: src/org/eclipse/cdt/debug/mi/core/GDBProcess.java =================================================================== RCS file: /cvsroot/tools/org.eclipse.cdt/all/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/GDBProcess.java,v retrieving revision 1.5 diff -u -r1.5 GDBProcess.java --- src/org/eclipse/cdt/debug/mi/core/GDBProcess.java 23 Jun 2006 17:25:40 -0000 1.5 +++ src/org/eclipse/cdt/debug/mi/core/GDBProcess.java 7 Jan 2008 17:48:37 -0000 @@ -8,23 +8,25 @@ * Contributors: * QNX Software Systems - Initial API and implementation *******************************************************************************/ -package org.eclipse.cdt.debug.mi.core; +package org.eclipse.cdt.debug.mi.core; import java.util.Map; import org.eclipse.cdt.debug.mi.core.cdi.model.Target; import org.eclipse.debug.core.ILaunch; import org.eclipse.debug.core.model.RuntimeProcess; - -public class GDBProcess extends RuntimeProcess { +public class GDBProcess extends RuntimeProcess { private Target fTarget; - public GDBProcess( Target target, ILaunch launch, Process process, String name, Map attributes ) { - super( launch, process, name, attributes ); - fTarget = target; + public GDBProcess(Target target, ILaunch launch, Process process, String name, Map attributes) { + super(launch, process, name, attributes); + synchronized (this) { + fTarget = target; + } + fireChangeEvent(); } - public Target getTarget() { + public synchronized Target getTarget() { return fTarget; } } #P org.eclipse.cdt.debug.mi.ui Index: src/org/eclipse/cdt/debug/mi/ui/console/actions/MiConsoleVerboseModeAction.java =================================================================== RCS file: /cvsroot/tools/org.eclipse.cdt/all/org.eclipse.cdt.debug.mi.ui/src/org/eclipse/cdt/debug/mi/ui/console/actions/MiConsoleVerboseModeAction.java,v retrieving revision 1.1 diff -u -r1.1 MiConsoleVerboseModeAction.java --- src/org/eclipse/cdt/debug/mi/ui/console/actions/MiConsoleVerboseModeAction.java 31 Aug 2006 07:26:28 -0000 1.1 +++ src/org/eclipse/cdt/debug/mi/ui/console/actions/MiConsoleVerboseModeAction.java 7 Jan 2008 17:48:37 -0000 @@ -11,31 +11,40 @@ package org.eclipse.cdt.debug.mi.ui.console.actions; import org.eclipse.cdt.debug.mi.core.GDBProcess; +import org.eclipse.cdt.debug.mi.core.cdi.model.Target; import org.eclipse.cdt.debug.mi.internal.ui.MIUIPlugin; import org.eclipse.debug.ui.console.IConsole; import org.eclipse.jface.action.Action; /** * Verbose console mode switcher - * + * */ public class MiConsoleVerboseModeAction extends Action { - private IConsole fConsole; - + public MiConsoleVerboseModeAction(IConsole console) { - super(); - setToolTipText(MiConsoleMessages.verboseActionTooltip); - setImageDescriptor(MIUIPlugin.imageDescriptorFromPlugin(MIUIPlugin.PLUGIN_ID,IMiConsoleImagesConst.IMG_VERBOSE_CONSOLE)); - fConsole = console; - GDBProcess fProcess = (GDBProcess) fConsole.getProcess(); - setChecked(fProcess.getTarget().getMISession().isVerboseModeEnabled()); + super(); + setToolTipText(MiConsoleMessages.verboseActionTooltip); + setImageDescriptor(MIUIPlugin.imageDescriptorFromPlugin(MIUIPlugin.PLUGIN_ID, IMiConsoleImagesConst.IMG_VERBOSE_CONSOLE)); + fConsole = console; } - + + public void updateStateAndEnablement() { + // initialize button + GDBProcess gdbProcess = (GDBProcess) fConsole.getProcess(); + setEnabled(!gdbProcess.isTerminated()); + Target target = gdbProcess.getTarget(); + if (target != null) { + setChecked(target.isVerboseModeEnabled()); + } else { + setChecked(false); + } + } + public void run() { GDBProcess fProcess = (GDBProcess) fConsole.getProcess(); fProcess.getTarget().enableVerboseMode(isChecked()); } - } Index: src/org/eclipse/cdt/debug/mi/ui/console/MiConsolePageParticipant.java =================================================================== RCS file: /cvsroot/tools/org.eclipse.cdt/all/org.eclipse.cdt.debug.mi.ui/src/org/eclipse/cdt/debug/mi/ui/console/MiConsolePageParticipant.java,v retrieving revision 1.2 diff -u -r1.2 MiConsolePageParticipant.java --- src/org/eclipse/cdt/debug/mi/ui/console/MiConsolePageParticipant.java 1 Sep 2006 14:32:46 -0000 1.2 +++ src/org/eclipse/cdt/debug/mi/ui/console/MiConsolePageParticipant.java 7 Jan 2008 17:48:37 -0000 @@ -14,6 +14,7 @@ import java.util.Observer; import org.eclipse.cdt.debug.mi.core.GDBProcess; +import org.eclipse.cdt.debug.mi.core.cdi.model.Target; import org.eclipse.cdt.debug.mi.ui.console.actions.MiConsoleSaveAction; import org.eclipse.cdt.debug.mi.ui.console.actions.MiConsoleVerboseModeAction; import org.eclipse.debug.core.DebugEvent; @@ -44,7 +45,7 @@ } public void dispose() { - if(GDBProcess != null) { + if (GDBProcess != null) { DebugPlugin.getDefault().removeDebugEventListener(this); } fSaveConsole = null; @@ -73,9 +74,13 @@ // add a debug event listener DebugPlugin.getDefault().addDebugEventListener(this); - - // register this object as MISession observer - GDBProcess.getTarget().getMISession().addObserver(this); + // if we miss change event update enablement manually + fVerboseMode.updateStateAndEnablement(); + Target target = GDBProcess.getTarget(); + if (target != null) { + // register this object as MISession observer + target.getMISession().addObserver(this); + } } } } @@ -89,7 +94,12 @@ DebugEvent event = events[i]; if (event.getSource().equals(GDBProcess)) { if (fVerboseMode != null) { - fVerboseMode.setEnabled(!GDBProcess.isTerminated()); + fVerboseMode.updateStateAndEnablement(); + Target target = GDBProcess.getTarget(); + if (target != null) { + // register this object as MISession observer + target.getMISession().addObserver(this); + } } } } @@ -101,9 +111,9 @@ public void update(Observable arg0, Object arg1) { if((arg1!=null) && (arg1 instanceof VerboseModeChangedEvent) && (fVerboseMode != null)) { try { - fVerboseMode.setChecked(GDBProcess.getTarget().isVerboseModeEnabled()); - } catch (Exception e) { - } + fVerboseMode.updateStateAndEnablement(); + } catch (Exception e) { + } } }