# HG changeset patch # User Ed Swartz # Date 1272307397 18000 # Node ID 28b3dbd000da202c081e9abcfaa8f40c55f1298e # Parent 7114a2177facddd2b201f5d5a6eec478b1100253 Fix more bugs with host paths appearing in the remote path dropdown; handle MRU behavior correctly when typing diff -r 7114a2177fac -r 28b3dbd000da debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/newwizard/DebugRunProcessDialog.java --- a/debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/newwizard/DebugRunProcessDialog.java Mon Apr 26 10:42:47 2010 -0500 +++ b/debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/newwizard/DebugRunProcessDialog.java Mon Apr 26 13:43:17 2010 -0500 @@ -48,6 +48,8 @@ import org.eclipse.swt.events.ControlEvent; import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.DisposeListener; +import org.eclipse.swt.events.FocusAdapter; +import org.eclipse.swt.events.FocusEvent; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.SelectionAdapter; @@ -149,7 +151,7 @@ for (Iterator iter = uniqueRemotePathEntries.iterator(); iter.hasNext(); ) { IPath path = iter.next(); - if (path.isEmpty() || data.getExes().contains(path)) + if (path.isEmpty() || getHostFileForRemoteLocation(path) != null) iter.remove(); } @@ -163,7 +165,6 @@ LaunchPlugin.getDefault().getPreferenceStore().setValue(USER_REMOTE_PATHS, pathSoup); } - /** * */ @@ -440,11 +441,9 @@ remotePath = createSuggestedRemotePath(exeSelectionPath); } else { // selection is already a remote path; map back to project if possible - for (IPath exe : data.getExes()) { - if (exe.lastSegment().equals(remotePath.lastSegment())) { - exeSelectionPath = exe; - break; - } + IPath projPath = getHostFileForRemoteLocation(exeSelectionPath); + if (projPath != null) { + exeSelectionPath = projPath; } } projectExecutableViewer.setSelection(new StructuredSelection(exeSelectionPath)); @@ -481,6 +480,23 @@ return PathUtils.createPath("C:/sys/bin").append(filename); //$NON-NLS-1$ } + + /** + * Get the host-side file for a given remote location. Opposite of + * {@link #createSuggestedRemotePath(IPath)}. + * @param path + * @return host path or null + */ + private IPath getHostFileForRemoteLocation(IPath path) { + for (IPath exe : data.getExes()) { + IPath remoteSuggested = createSuggestedRemotePath(exe); + if (remoteSuggested.equals(path)) { + return exe; + } + } + return null; + } + /** * Allow selecting an executable detected to be built by the program. * @param radioGroup @@ -566,7 +582,11 @@ remoteProgramViewer = new ComboViewer(radioGroup, SWT.BORDER); GridDataFactory.fillDefaults().grab(true, false).applyTo(remoteProgramViewer.getControl()); - remotePathEntries.addAll(data.getExes()); + // add the entries before the user MRU entries + int addIdx = 0; + for (IPath launchable : data.getLaunchableExes()) { + remotePathEntries.add(addIdx++, createSuggestedRemotePath(launchable)); + } remoteProgramViewer.setContentProvider(new ArrayContentProvider()); remoteProgramViewer.setLabelProvider(new LabelProvider() { @@ -596,12 +616,21 @@ public void modifyText(ModifyEvent e) { IPath path = PathUtils.createPath(remoteProgramViewer.getCombo().getText().trim()); data.setExeSelectionPath(path); + validate(); + } + }); + + remoteProgramViewer.getCombo().addFocusListener(new FocusAdapter() { + /* (non-Javadoc) + * @see org.eclipse.swt.events.FocusAdapter#focusLost(org.eclipse.swt.events.FocusEvent) + */ + @Override + public void focusLost(FocusEvent e) { + IPath path = PathUtils.createPath(remoteProgramViewer.getCombo().getText().trim()); // MRU behavior remotePathEntries.remove(path); remotePathEntries.add(0, path); - - validate(); } }); }