Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
View | Details | Raw Unified | Return to bug 315618
Collapse All | Expand All

(-)src/org/eclipse/mylyn/context/ui/AbstractFocusViewAction.java (-2 / +11 lines)
Lines 416-422 Link Here
416
				}
416
				}
417
417
418
				installInterestFilter(viewer);
418
				installInterestFilter(viewer);
419
				ContextUiPlugin.getViewerManager().addFilteredViewer(viewer);
419
				ContextUiPlugin.getViewerManager().addFilteredViewer(viewer, this);
420
			} else {
420
			} else {
421
				if (showEmptyViewMessage && viewer instanceof TreeViewer) {
421
				if (showEmptyViewMessage && viewer instanceof TreeViewer) {
422
					Tree tree = ((TreeViewer) viewer).getTree();
422
					Tree tree = ((TreeViewer) viewer).getTree();
Lines 470-476 Link Here
470
		} else if (viewer.getControl().isDisposed() && manageViewer) {
470
		} else if (viewer.getControl().isDisposed() && manageViewer) {
471
			// TODO: do this with part listener, not lazily?
471
			// TODO: do this with part listener, not lazily?
472
			return false;
472
			return false;
473
		} else if (previousFilters.containsKey(viewer)) {
473
		} else if (previousFilters.containsKey(viewer) && hasInterestFilter(viewer)) {
474
			// install has already run, this can happen if AbstractAutoFocusViewAction.init() executes
474
			// install has already run, this can happen if AbstractAutoFocusViewAction.init() executes
475
			// initialization asynchronously
475
			// initialization asynchronously
476
			return false;
476
			return false;
Lines 510-515 Link Here
510
		return false;
510
		return false;
511
	}
511
	}
512
512
513
	private boolean hasInterestFilter(StructuredViewer viewer) {
514
		for (ViewerFilter filter : viewer.getFilters()) {
515
			if (filter == getInterestFilter()) {
516
				return true;
517
			}
518
		}
519
		return false;
520
	}
521
513
	/**
522
	/**
514
	 * Subclasses can provide additional viewer filters that should not be removed when focusing.
523
	 * Subclasses can provide additional viewer filters that should not be removed when focusing.
515
	 * 
524
	 * 
(-)src/org/eclipse/mylyn/internal/context/ui/FocusedViewerManager.java (-2 / +35 lines)
Lines 28-39 Link Here
28
import org.eclipse.jface.viewers.StructuredSelection;
28
import org.eclipse.jface.viewers.StructuredSelection;
29
import org.eclipse.jface.viewers.StructuredViewer;
29
import org.eclipse.jface.viewers.StructuredViewer;
30
import org.eclipse.jface.viewers.TreeViewer;
30
import org.eclipse.jface.viewers.TreeViewer;
31
import org.eclipse.jface.viewers.ViewerFilter;
31
import org.eclipse.mylyn.commons.core.StatusHandler;
32
import org.eclipse.mylyn.commons.core.StatusHandler;
32
import org.eclipse.mylyn.context.core.AbstractContextListener;
33
import org.eclipse.mylyn.context.core.AbstractContextListener;
33
import org.eclipse.mylyn.context.core.AbstractContextStructureBridge;
34
import org.eclipse.mylyn.context.core.AbstractContextStructureBridge;
34
import org.eclipse.mylyn.context.core.ContextChangeEvent;
35
import org.eclipse.mylyn.context.core.ContextChangeEvent;
35
import org.eclipse.mylyn.context.core.ContextCore;
36
import org.eclipse.mylyn.context.core.ContextCore;
36
import org.eclipse.mylyn.context.core.IInteractionElement;
37
import org.eclipse.mylyn.context.core.IInteractionElement;
38
import org.eclipse.mylyn.context.ui.AbstractFocusViewAction;
39
import org.eclipse.mylyn.context.ui.InterestFilter;
37
import org.eclipse.mylyn.internal.context.core.ContextCorePlugin;
40
import org.eclipse.mylyn.internal.context.core.ContextCorePlugin;
38
import org.eclipse.mylyn.internal.provisional.commons.ui.DelayedRefreshJob;
41
import org.eclipse.mylyn.internal.provisional.commons.ui.DelayedRefreshJob;
39
import org.eclipse.ui.ISelectionListener;
42
import org.eclipse.ui.ISelectionListener;
Lines 52-57 Link Here
52
55
53
	private final CopyOnWriteArrayList<StructuredViewer> filteredViewers = new CopyOnWriteArrayList<StructuredViewer>();
56
	private final CopyOnWriteArrayList<StructuredViewer> filteredViewers = new CopyOnWriteArrayList<StructuredViewer>();
54
57
58
	private final Map<StructuredViewer, AbstractFocusViewAction> focusActions = new HashMap<StructuredViewer, AbstractFocusViewAction>();
59
55
	private final Map<StructuredViewer, BrowseFilteredListener> listenerMap = new HashMap<StructuredViewer, BrowseFilteredListener>();
60
	private final Map<StructuredViewer, BrowseFilteredListener> listenerMap = new HashMap<StructuredViewer, BrowseFilteredListener>();
56
61
57
	private final Map<IWorkbenchPart, StructuredViewer> partToViewerMap = new HashMap<IWorkbenchPart, StructuredViewer>();
62
	private final Map<IWorkbenchPart, StructuredViewer> partToViewerMap = new HashMap<IWorkbenchPart, StructuredViewer>();
Lines 204-209 Link Here
204
		}
209
		}
205
	}
210
	}
206
211
212
	public void addFilteredViewer(StructuredViewer viewer, AbstractFocusViewAction action) {
213
		addFilteredViewer(viewer);
214
		if (viewer != null && action != null) {
215
			focusActions.put(viewer, action);
216
		}
217
	}
218
219
	@Deprecated
207
	public void addFilteredViewer(StructuredViewer viewer) {
220
	public void addFilteredViewer(StructuredViewer viewer) {
208
		if (viewer != null && !filteredViewers.contains(viewer)) {
221
		if (viewer != null && !filteredViewers.contains(viewer)) {
209
			filteredViewers.add(viewer);
222
			filteredViewers.add(viewer);
Lines 211-216 Link Here
211
	}
224
	}
212
225
213
	public void removeFilteredViewer(StructuredViewer viewer) {
226
	public void removeFilteredViewer(StructuredViewer viewer) {
227
		focusActions.remove(viewer);
214
		filteredViewers.remove(viewer);
228
		filteredViewers.remove(viewer);
215
	}
229
	}
216
230
Lines 353-360 Link Here
353
	private void updateExpansionState(StructuredViewer viewer, Object objectToRefresh) {
367
	private void updateExpansionState(StructuredViewer viewer, Object objectToRefresh) {
354
		if (viewer instanceof TreeViewer
368
		if (viewer instanceof TreeViewer
355
				&& filteredViewers.contains(viewer)
369
				&& filteredViewers.contains(viewer)
356
				&& ContextUiPlugin.getDefault().getPreferenceStore().getBoolean(
370
				&& hasInterestFilter(viewer, true)
357
						IContextUiPreferenceContstants.AUTO_MANAGE_EXPANSION)) {
371
				&& ContextUiPlugin.getDefault()
372
						.getPreferenceStore()
373
						.getBoolean(IContextUiPreferenceContstants.AUTO_MANAGE_EXPANSION)) {
358
			TreeViewer treeViewer = (TreeViewer) viewer;
374
			TreeViewer treeViewer = (TreeViewer) viewer;
359
375
360
			// HACK to fix bug 278569: [context] errors with Markers view and active Mylyn task
376
			// HACK to fix bug 278569: [context] errors with Markers view and active Mylyn task
Lines 371-376 Link Here
371
		}
387
		}
372
	}
388
	}
373
389
390
	private boolean hasInterestFilter(StructuredViewer viewer, boolean tryToReinstall) {
391
		for (ViewerFilter filter : viewer.getFilters()) {
392
			if (filter instanceof InterestFilter) {
393
				return true;
394
			}
395
		}
396
		if (tryToReinstall) {
397
			AbstractFocusViewAction action = focusActions.get(viewer);
398
			if (action != null) {
399
				action.run(action);
400
				viewer.refresh();
401
				return hasInterestFilter(viewer, false);
402
			}
403
		}
404
		return false;
405
	}
406
374
	/**
407
	/**
375
	 * Set to true for testing
408
	 * Set to true for testing
376
	 */
409
	 */

Return to bug 315618