2066 - TaskView should become visible after a build when hidden
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/EditorArea.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/EditorArea.java
index a912ad4..50be789 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/EditorArea.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/EditorArea.java
@@ -34,12 +34,12 @@
private DropTarget dropTarget;
private DropTargetAdapter dropTargetAdapter;
-public EditorArea(String editorId, IPartDropListener listener, Listener mouseDownListener, DropTargetAdapter dropTargetListener) {
+public EditorArea(String editorId, IPartDropListener listener, Listener mouseDownListener, WorkbenchPage page) {
super(editorId);
this.partDropListener = listener;
this.mouseDownListener = mouseDownListener;
- this.dropTargetAdapter = dropTargetListener;
+ this.dropTargetAdapter = new EditorAreaDropAdapter(page);
createDefaultWorkbook();
}
/**
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/EditorAreaDropAdapter.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/EditorAreaDropAdapter.java
index fa45051..063d7e3 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/EditorAreaDropAdapter.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/EditorAreaDropAdapter.java
@@ -41,7 +41,8 @@
IResource [] files = (IResource[]) event.data;
try { //open all the files
for (int i = 0; i < files.length; i++) {
- page.openInternalEditor((IFile)files[i]);
+ if (files[i] instanceof IFile)
+ page.openInternalEditor((IFile)files[i]);
}
} catch (PartInitException e) {
//do nothing, user may have been trying to drag a folder
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/EditorPresentation.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/EditorPresentation.java
index 5b786a3..2a6c664 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/EditorPresentation.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/EditorPresentation.java
@@ -41,9 +41,8 @@
this.page = workbenchPage;
- EditorAreaDropAdapter dropTargetAdapter = new EditorAreaDropAdapter(page);
this.editorArea = new EditorArea(IPageLayout.ID_EDITOR_AREA, partDropListener,
- mouseDownListener, dropTargetAdapter);
+ mouseDownListener, page);
}
/**
* Closes all of the editors.
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/IPreferenceConstants.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/IPreferenceConstants.java
index 1e0a284..b768aa3 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/IPreferenceConstants.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/IPreferenceConstants.java
@@ -124,5 +124,9 @@
// Sort criteria for EditorList
public static final String EDITOR_LIST_SORT_CRITERIA = "EDITOR_LIST_SORT_CRITERIA"; //$NON-NLS-1$
public static final int EDITOR_LIST_NAME_SORT = 0;
- public static final int EDITOR_LIST_MRU_SORT = 1;
+ public static final int EDITOR_LIST_MRU_SORT = 1;
+
+ // Show Tasks view to users when build contains errors
+ public static final String SHOW_TASKS_ON_BUILD = "SHOW_TASKS_ON_BUILD"; //$NON-NLS-1$
+
}
\ No newline at end of file
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/Perspective.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/Perspective.java
index 690cfdc..891b896 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/Perspective.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/Perspective.java
@@ -1405,15 +1405,15 @@
}
/**
* Method moveFastView. Moves draggedView to the position above
- * destinationView. If useDestination is false, add view to the end.
- * Otherwise, either place above destination view, or at the beginning if hte
+ * destinationView. If placeAtEnd is true, add view to the end. Otherwise,
+ * either place above destination view, or at the beginning if the
* destinationView is null
* @param draggedView
* @param destinationView
* @param useDestination
*/
-/*package*/ void moveFastView(IViewReference draggedView, IViewReference destinationView, boolean useDestination) {
+/*package*/ void moveFastView(IViewReference draggedView, IViewReference destinationView, boolean placeAtEnd) {
//PR 6988
//do nothing if views are the same
@@ -1422,14 +1422,14 @@
//move the view
fastViews.remove(draggedView);
- //should the destination be used to determine where to place the fast view?
- if (useDestination) {
+ //determine where to place the view
+ if (placeAtEnd) {//add it to the end
+ fastViews.add(draggedView);
+ } else {
if (destinationView == null) //add it to the beginning
fastViews.add(0, draggedView);
else
fastViews.add(fastViews.indexOf(destinationView), draggedView);
- } else { //add it to the end
- fastViews.add(draggedView);
}
}
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/PerspectivePresentation.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/PerspectivePresentation.java
index 514fe73..9b84207 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/PerspectivePresentation.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/PerspectivePresentation.java
Binary files differ
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchPage.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchPage.java
index b478fac..5c8712f 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchPage.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchPage.java
@@ -1713,30 +1713,7 @@
public IEditorPart openEditor(IMarker marker, boolean activate)
throws PartInitException
{
- // Get the resource.
- IFile file = (IFile)marker.getResource();
-
- // Get the preferred editor id.
- String editorID = null;
- try {
- editorID = (String)marker.getAttribute(EDITOR_ID_ATTR);
- }
- catch (CoreException e) {
- WorkbenchPlugin.log(WorkbenchMessages.getString("WorkbenchPage.ErrorExtractingEditorIDFromMarker"), e.getStatus()); //$NON-NLS-1$
- return null;
- }
-
- // Create a new editor.
- IEditorPart editor = null;
- if (editorID == null)
- editor = openEditor(new FileEditorInput(file),null,activate,false,null, false);
- else
- editor = openEditor(new FileEditorInput(file),editorID,activate,true,file, false);
-
- // Goto the bookmark.
- if (editor != null)
- editor.gotoMarker(marker);
- return editor;
+ return openMarker(marker, activate, false);
}
/**
* See IWorkbenchPage.
@@ -1770,6 +1747,12 @@
*/
public IEditorPart openInternalEditor(IMarker marker)
throws PartInitException {
+
+ return openMarker(marker, true, true);
+}
+
+private IEditorPart openMarker(IMarker marker, boolean activate, boolean forceInternal)
+ throws PartInitException {
// Get the resource.
IFile file = (IFile)marker.getResource();
@@ -1786,9 +1769,9 @@
// Create a new editor.
IEditorPart editor = null;
if (editorID == null)
- editor = openEditor(new FileEditorInput(file),null,true,false,null, true);
+ editor = openEditor(new FileEditorInput(file),null,activate,false,null, forceInternal);
else
- editor = openEditor(new FileEditorInput(file),editorID,true,true,file, true);
+ editor = openEditor(new FileEditorInput(file),editorID,activate,true,file, forceInternal);
// Goto the bookmark.
if (editor != null)
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchPlugin.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchPlugin.java
index ef15ee2..1cf93e2 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchPlugin.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchPlugin.java
@@ -11,24 +11,70 @@
package org.eclipse.ui.internal;
-import java.io.*;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
import java.util.Iterator;
import java.util.List;
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IMarkerDelta;
+import org.eclipse.core.resources.IResourceChangeEvent;
+import org.eclipse.core.resources.IResourceChangeListener;
+import org.eclipse.core.resources.IResourceDelta;
import org.eclipse.core.resources.IWorkspace;
import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.*;
-import org.eclipse.jface.preference.*;
-import org.eclipse.jface.resource.*;
-import org.eclipse.jface.util.OpenStrategy;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IPluginDescriptor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.Status;
+
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.BusyIndicator;
import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.graphics.RGB;
-import org.eclipse.ui.*;
-import org.eclipse.ui.internal.decorators.*;
+import org.eclipse.swt.widgets.Display;
+
+import org.eclipse.jface.preference.IPreferenceNode;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.preference.JFacePreferences;
+import org.eclipse.jface.preference.PreferenceConverter;
+import org.eclipse.jface.preference.PreferenceManager;
+import org.eclipse.jface.resource.FontRegistry;
+import org.eclipse.jface.resource.ImageRegistry;
+import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.jface.util.OpenStrategy;
+
+import org.eclipse.ui.IEditorRegistry;
+import org.eclipse.ui.IElementFactory;
+import org.eclipse.ui.IPerspectiveRegistry;
+import org.eclipse.ui.ISharedImages;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.IWorkingSetManager;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.internal.decorators.DecoratorManager;
import org.eclipse.ui.internal.misc.StatusUtil;
-import org.eclipse.ui.internal.registry.*;
+import org.eclipse.ui.internal.registry.ActionSetRegistry;
+import org.eclipse.ui.internal.registry.CapabilityRegistry;
+import org.eclipse.ui.internal.registry.EditorRegistry;
+import org.eclipse.ui.internal.registry.IViewRegistry;
+import org.eclipse.ui.internal.registry.MarkerHelpRegistry;
+import org.eclipse.ui.internal.registry.MarkerHelpRegistryReader;
+import org.eclipse.ui.internal.registry.MarkerImageProviderRegistry;
+import org.eclipse.ui.internal.registry.PerspectiveRegistry;
+import org.eclipse.ui.internal.registry.PreferencePageRegistryReader;
+import org.eclipse.ui.internal.registry.ProjectImageRegistry;
+import org.eclipse.ui.internal.registry.ViewRegistry;
+import org.eclipse.ui.internal.registry.ViewRegistryReader;
+import org.eclipse.ui.internal.registry.WorkingSetRegistry;
import org.eclipse.ui.plugin.AbstractUIPlugin;
/**
@@ -76,6 +122,11 @@
public static String PI_WORKBENCH = PlatformUI.PLUGIN_ID;
/**
+ * The id of the Tasks view.
+ */
+ private static final String TASK_LIST_ID = PI_WORKBENCH + ".views.TaskList";
+
+ /**
* The character used to separate preference page category ids
*/
private static char PREFERENCE_PAGE_CATEGORY_SEPARATOR = '/';
@@ -91,6 +142,7 @@
private ActionSetRegistry actionSetRegistry;
private SharedImages sharedImages;
private MarkerImageProviderRegistry markerImageProviderRegistry;
+
/**
* Create an instance of the WorkbenchPlugin.
* The workbench plugin is effectively the "application" for the workbench UI.
@@ -99,7 +151,61 @@
public WorkbenchPlugin(IPluginDescriptor descriptor) {
super(descriptor);
inst = this;
+ ResourcesPlugin.getWorkspace().addResourceChangeListener(
+ getShowTasksChangeListener(),
+ IResourceChangeEvent.POST_CHANGE);
}
+
+ /**
+ * Returns the resource change listener for noticing new errors.
+ * Processes the delta and shows the Tasks view if new errors
+ * have appeared. See PR 2066.
+ */
+ private IResourceChangeListener getShowTasksChangeListener() {
+ return new IResourceChangeListener() {
+ public void resourceChanged(final IResourceChangeEvent event) {
+ IPreferenceStore store = getWorkbench().getPreferenceStore();
+ if (store.getBoolean(IPreferenceConstants.SHOW_TASKS_ON_BUILD)) {
+ IMarker error = findError(event);
+ if (error != null) {
+ Display.getDefault().asyncExec(new Runnable() {
+ public void run() {
+ try {
+ IWorkbenchWindow window = getWorkbench().getActiveWorkbenchWindow();
+ if (window != null && !window.getShell().isDisposed()) {
+ IWorkbenchPage page = window.getActivePage();
+ // ensure user has view somewhere on their page
+ if (page != null && page.findView(TASK_LIST_ID) != null)
+ page.showView(TASK_LIST_ID);
+ }
+ } catch (PartInitException e) {
+ getLog().log(e.getStatus()); //$NON-NLS$
+ }
+ }
+ });
+ }
+ }
+ }
+ };
+ }
+
+ /**
+ * Finds the first error marker which has been added in the delta.
+ */
+ private IMarker findError(IResourceChangeEvent event) {
+ IMarkerDelta[] markerDeltas = event.findMarkerDeltas(IMarker.PROBLEM, true);
+ for (int i = 0; i < markerDeltas.length; i++) {
+ IMarkerDelta markerDelta = markerDeltas[i];
+ if (markerDelta.getKind() == IResourceDelta.ADDED) {
+ int severity = markerDelta.getAttribute(IMarker.SEVERITY, -1);
+ if (severity == IMarker.SEVERITY_ERROR) {
+ return markerDelta.getMarker();
+ }
+ }
+ }
+ return null;
+ }
+
/**
* Creates an extension. If the extension plugin has not
* been loaded a busy cursor will be activated during the duration of
@@ -392,6 +498,9 @@
store.setDefault(IPreferenceConstants.EDITOR_LIST_SELECTION_SCOPE, IPreferenceConstants.EDITOR_LIST_SET_PAGE_SCOPE); // Current Window
store.setDefault(IPreferenceConstants.EDITOR_LIST_SORT_CRITERIA, IPreferenceConstants.EDITOR_LIST_NAME_SORT); // Name Sort
+ // Set the default behaviour for showing the task list when there are compiles errors in the build
+ store.setDefault(IPreferenceConstants.SHOW_TASKS_ON_BUILD, true);
+
// Set the default configuration for the key binding service
store.setDefault(IWorkbenchConstants.ACCELERATOR_CONFIGURATION_ID, IWorkbenchConstants.DEFAULT_ACCELERATOR_CONFIGURATION_ID);
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/WorkbenchPreferencePage.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/WorkbenchPreferencePage.java
index 0590c12..d93fc4f 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/WorkbenchPreferencePage.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/WorkbenchPreferencePage.java
@@ -25,6 +25,7 @@
private Button autoBuildButton;
private Button autoSaveAllButton;
private Button refreshButton;
+ private Button showTasks;
private IntegerFieldEditor saveInterval;
private Button doubleClickButton;
@@ -91,6 +92,11 @@
refreshButton.setText(WorkbenchMessages.getString("WorkbenchPreference.refreshButton")); //$NON-NLS-1$
refreshButton.setFont(font);
setButtonLayoutData(refreshButton);
+
+ showTasks = new Button(composite, SWT.CHECK);
+ showTasks.setText(WorkbenchMessages.getString("WorkbenchPreference.showTasks")); //$NON-NLS-1$
+ showTasks.setFont(font);
+ setButtonLayoutData(showTasks);
createSpace(composite);
createSaveIntervalGroup(composite);
@@ -103,7 +109,8 @@
autoBuildButton.setSelection(ResourcesPlugin.getWorkspace().isAutoBuilding());
autoSaveAllButton.setSelection(store.getBoolean(IPreferenceConstants.SAVE_ALL_BEFORE_BUILD));
refreshButton.setSelection(store.getBoolean(IPreferenceConstants.REFRESH_WORKSPACE_ON_STARTUP));
-
+ showTasks.setSelection(store.getBoolean(IPreferenceConstants.SHOW_TASKS_ON_BUILD));
+
return composite;
}
@@ -303,6 +310,7 @@
autoBuildButton.setSelection(store.getDefaultBoolean(IPreferenceConstants.AUTO_BUILD));
autoSaveAllButton.setSelection(store.getDefaultBoolean(IPreferenceConstants.SAVE_ALL_BEFORE_BUILD));
refreshButton.setSelection(store.getDefaultBoolean(IPreferenceConstants.REFRESH_WORKSPACE_ON_STARTUP));
+ showTasks.setSelection(store.getBoolean(IPreferenceConstants.SHOW_TASKS_ON_BUILD));
saveInterval.loadDefault();
openOnSingleClick = store.getDefaultBoolean(IPreferenceConstants.OPEN_ON_SINGLE_CLICK); //$NON-NLS-1$
@@ -345,6 +353,9 @@
// store the link navigator to editor setting
store.setValue(IPreferenceConstants.REFRESH_WORKSPACE_ON_STARTUP, refreshButton.getSelection());
+ //store the preference for bringing task view to front on build
+ store.setValue(IPreferenceConstants.SHOW_TASKS_ON_BUILD, showTasks.getSelection());
+
long oldSaveInterval = description.getSnapshotInterval() / 60000;
long newSaveInterval = new Long(saveInterval.getStringValue()).longValue();
if(oldSaveInterval != newSaveInterval) {
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/messages.properties b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/messages.properties
index 10730b9..9b039c5 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/messages.properties
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/messages.properties
@@ -682,6 +682,7 @@
WorkbenchPreference.refreshButton = &Refresh Workspace on startup
WorkbenchPreference.editorsListButton = &Show Editors drop-down
WorkbenchPreference.closeEditorsButton = Close all editors on &exit
+WorkbenchPreference.showTasks = Show &Tasks view if build has errors
WorkbenchPreference.replaceCurrent = &Replace current
WorkbenchPreference.control = Ctrl
WorkbenchPreference.shift = Shift
@@ -1314,6 +1315,7 @@
ShowViewMenuAction.text=Show View Menu@Ctrl+F10
ShowViewMenuAction.toolTip=Show View Menu
+EditorInputTransfer.errorMessage=Received wrong transfer data.
# ==============================================================================
# Working Set Framework.
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/part/EditorInputTransfer.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/part/EditorInputTransfer.java
index 4ed7206..3f7d70f 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/part/EditorInputTransfer.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/part/EditorInputTransfer.java
@@ -14,6 +14,8 @@
import org.eclipse.swt.dnd.ByteArrayTransfer;
import org.eclipse.swt.dnd.TransferData;
import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.internal.WorkbenchMessages;
+import org.eclipse.ui.internal.WorkbenchPlugin;
/**
* The <code>EditorInputTransfer</code> class is used to transfer an
@@ -93,7 +95,8 @@
public Object nativeToJava(TransferData transferData) {
Object result = super.nativeToJava(transferData);
if (isInvalidNativeType(result)) {
- //TODO: something went wrong, log error message!
+ //something went wrong, log error message
+ WorkbenchPlugin.log(WorkbenchMessages.getString("EditorInputTransfer.errorMessage"));
}
return new Object [] {editorId, input};
}