[r352] Bug 291339 - validateEdit not called for launch configuration stored locally
diff --git a/org.eclipse.debug.ui/META-INF/MANIFEST.MF b/org.eclipse.debug.ui/META-INF/MANIFEST.MF
index d817253..ccb28b2 100644
--- a/org.eclipse.debug.ui/META-INF/MANIFEST.MF
+++ b/org.eclipse.debug.ui/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.debug.ui; singleton:=true
-Bundle-Version: 3.5.1.qualifier
+Bundle-Version: 3.5.2.qualifier
 Bundle-Activator: org.eclipse.debug.internal.ui.DebugUIPlugin
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationTabGroupViewer.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationTabGroupViewer.java
index 5a7a055..7ce280e 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationTabGroupViewer.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationTabGroupViewer.java
@@ -16,6 +16,8 @@
 import java.util.List;
 import java.util.Set;
 
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
@@ -499,10 +501,6 @@
 		if (fInitializingTabs) {
 			return;
 		}
-		if(fOriginal != null && fOriginal.isReadOnly()) {
-			updateButtons();
-			return;
-		}
 		ILaunchConfigurationTab[] tabs = getTabs();
 		if (tabs != null) {
 			// update the working copy from the active tab
@@ -1046,9 +1044,6 @@
 				return false;
 			}
 		}
-		if(getWorkingCopy() != null) {
-			return !getWorkingCopy().isReadOnly();
-		}
 		return true;
 	}	
 	
@@ -1190,9 +1185,6 @@
 				return temp.toString();
 			}
 		}
-		if(getWorkingCopy().isReadOnly()) {
-			return LaunchConfigurationsMessages.LaunchConfigurationTabGroupViewer_9;
-		}
 		if(!canLaunchWithModes()) {
 			Set modes = getCurrentModeSet();
 			List names = LaunchConfigurationPresentationManager.getDefault().getLaunchModeNames(modes);
@@ -1337,7 +1329,13 @@
 	/**
 	 * Notification that the 'Apply' button has been pressed
 	 */
-	protected void handleApplyPressed() {
+	protected boolean handleApplyPressed() {
+		if(fOriginal != null && fOriginal.isReadOnly()) {
+			IStatus status = ResourcesPlugin.getWorkspace().validateEdit(new IFile[] {fOriginal.getFile()}, fViewerControl.getShell());
+			if(!status.isOK()) {
+				return false;
+			}
+		}
 		Exception exception = null;
 		try {
 			// update launch config
@@ -1374,7 +1372,9 @@
 		catch (InterruptedException e) {exception = e;} 
 		if(exception != null) {
 			DebugUIPlugin.errorDialog(getShell(), LaunchConfigurationsMessages.LaunchConfigurationDialog_Launch_Configuration_Error_46, LaunchConfigurationsMessages.LaunchConfigurationDialog_Exception_occurred_while_saving_launch_configuration_47, exception); // 
-			return;
+			return false;
+		} else {
+			return true;
 		}
 	}
 
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationsDialog.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationsDialog.java
index 7b513af..336ecdd 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationsDialog.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationsDialog.java
@@ -931,11 +931,12 @@
 	protected void handleLaunchPressed() {
 		ILaunchConfiguration config = fTabViewer.getOriginal();
 		if (fTabViewer.isDirty() && fTabViewer.canSave()) {
-			fTabViewer.handleApplyPressed();
-			config = fTabViewer.getOriginal();
+			if (fTabViewer.handleApplyPressed())
+				config = fTabViewer.getOriginal();
+			else config = null;
 		}
-		close();
 		if(config != null) {
+			close();
 			DebugUITools.launch(config, getMode());
 		}
 	}
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationsMessages.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationsMessages.java
index 0d085d4..14d1911 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationsMessages.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationsMessages.java
@@ -96,7 +96,6 @@
 	public static String LaunchConfigurationTabGroupViewer_17;
 
 	public static String LaunchConfigurationTabGroupViewer_18;
-	public static String LaunchConfigurationTabGroupViewer_9;
 	public static String LaunchConfigurationTabGroupViewer_13;
 
 	public static String LaunchConfigurationTabGroupViewer_19;
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationsMessages.properties b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationsMessages.properties
index 71b4dad..900779b 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationsMessages.properties
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationsMessages.properties
@@ -55,7 +55,6 @@
 LaunchConfigurationTabGroupViewer_6=- Press the 'Duplicate' button to copy the selected configuration.
 LaunchConfigurationTabGroupViewer_5=Configure launch perspective settings from the <a>Perspectives</a> preference page.
 LaunchConfigurationTabGroupViewer_8=- Press the 'Filter' button to configure filtering options.
-LaunchConfigurationTabGroupViewer_9=The file associated with this launch configuration is read-only and cannot be modified.\n
 LaunchConfigurationTabGroupViewer_13=Select a supported <a>launch mode</a>.
 LaunchConfigurationTabGroupViewer_14=Mixed launch mode not supported: {0}
 LaunchConfigurationTabGroupViewer_15=More than one launcher available - <a>Select other...</a>