View | Details | Raw Unified | Return to bug 302015 | Differences between
and this patch

Collapse All | Expand All

(-)src/org/eclipse/mylyn/internal/context/ui/BrowseFilteredListener.java (-11 / +17 lines)
Lines 27-32 Link Here
27
import org.eclipse.swt.events.MouseEvent;
27
import org.eclipse.swt.events.MouseEvent;
28
import org.eclipse.swt.events.MouseListener;
28
import org.eclipse.swt.events.MouseListener;
29
import org.eclipse.swt.graphics.Point;
29
import org.eclipse.swt.graphics.Point;
30
import org.eclipse.swt.widgets.Display;
30
import org.eclipse.swt.widgets.Table;
31
import org.eclipse.swt.widgets.Table;
31
import org.eclipse.swt.widgets.TableItem;
32
import org.eclipse.swt.widgets.TableItem;
32
import org.eclipse.swt.widgets.Tree;
33
import org.eclipse.swt.widgets.Tree;
Lines 55-61 Link Here
55
		InterestFilter filter = getInterestFilter(treeViewer);
56
		InterestFilter filter = getInterestFilter(treeViewer);
56
		Object targetObject = targetSelection.getFirstElement();
57
		Object targetObject = targetSelection.getFirstElement();
57
		if (filter != null && targetObject != null) {
58
		if (filter != null && targetObject != null) {
58
			filter.setTemporarilyUnfiltered(targetObject);
59
			filter.addTemporarilyUnfiltered(targetObject);
59
			if (targetObject instanceof Tree) {
60
			if (targetObject instanceof Tree) {
60
				treeViewer.refresh();
61
				treeViewer.refresh();
61
			} else {
62
			} else {
Lines 67-73 Link Here
67
68
68
	private void unfilter(final InterestFilter filter, final TreeViewer treeViewer, Object targetObject) {
69
	private void unfilter(final InterestFilter filter, final TreeViewer treeViewer, Object targetObject) {
69
		if (targetObject != null) {
70
		if (targetObject != null) {
70
			filter.setTemporarilyUnfiltered(targetObject);
71
			filter.addTemporarilyUnfiltered(targetObject);
71
			if (targetObject instanceof Tree) {
72
			if (targetObject instanceof Tree) {
72
				treeViewer.refresh();
73
				treeViewer.refresh();
73
			} else {
74
			} else {
Lines 132-154 Link Here
132
				if ((event.stateMask & SWT.MOD1) != 0) {
133
				if ((event.stateMask & SWT.MOD1) != 0) {
133
					viewer.refresh(selectedObject);
134
					viewer.refresh(selectedObject);
134
				} else {
135
				} else {
135
					final Object unfiltered = filter.getTemporarilyUnfiltered();
136
					final Object unfiltered = filter.getLastTemporarilyUnfiltered();
136
					if (unfiltered != null) {
137
					if (unfiltered != null) {
137
						// NOTE: delaying refresh to ensure double click is handled, see bug 208702
138
						// NOTE: delaying refresh to ensure double click is handled, see bug 208702
138
						new UIJob("") { //$NON-NLS-1$
139
						resetUnfiltered();
139
							@Override
140
							public IStatus runInUIThread(IProgressMonitor monitor) {
141
								filter.resetTemporarilyUnfiltered();
142
								viewer.refresh(unfiltered);
143
								return Status.OK_STATUS;
144
							}
145
						}.schedule(event.display.getDoubleClickTime() + 50);
146
					}
140
					}
147
				}
141
				}
148
			}
142
			}
149
		}
143
		}
150
	}
144
	}
151
145
146
	public void resetUnfiltered() {
147
		new UIJob("") { //$NON-NLS-1$
148
			@Override
149
			public IStatus runInUIThread(IProgressMonitor monitor) {
150
				final InterestFilter filter = getInterestFilter(viewer);
151
				filter.resetTemporarilyUnfiltered();
152
				viewer.refresh();
153
				return Status.OK_STATUS;
154
			}
155
		}.schedule(Display.getDefault().getDoubleClickTime() + 50);
156
	}
157
152
	private Object getClickedItem(MouseEvent event) {
158
	private Object getClickedItem(MouseEvent event) {
153
		if (event.getSource() instanceof Table) {
159
		if (event.getSource() instanceof Table) {
154
			TableItem item = ((Table) event.getSource()).getItem(new Point(event.x, event.y));
160
			TableItem item = ((Table) event.getSource()).getItem(new Point(event.x, event.y));
(-)src/org/eclipse/mylyn/context/ui/InterestFilter.java (-7 / +40 lines)
Lines 13-18 Link Here
13
13
14
package org.eclipse.mylyn.context.ui;
14
package org.eclipse.mylyn.context.ui;
15
15
16
import java.util.HashSet;
17
import java.util.Set;
18
16
import org.eclipse.core.resources.IProject;
19
import org.eclipse.core.resources.IProject;
17
import org.eclipse.core.resources.IProjectNature;
20
import org.eclipse.core.resources.IProjectNature;
18
import org.eclipse.core.resources.IResource;
21
import org.eclipse.core.resources.IResource;
Lines 42-48 Link Here
42
 */
45
 */
43
public class InterestFilter extends ViewerFilter {
46
public class InterestFilter extends ViewerFilter {
44
47
45
	private Object temporarilyUnfiltered = null;
48
	private Set<Object> temporarilyUnfiltered = null;
49
50
	private Object lastTemporarilyUnfiltered = null;
46
51
47
	@Override
52
	@Override
48
	public boolean select(Viewer viewer, Object parent, Object object) {
53
	public boolean select(Viewer viewer, Object parent, Object object) {
Lines 52-58 Link Here
52
			}
57
			}
53
			if (isTemporarilyUnfiltered(parent)) {
58
			if (isTemporarilyUnfiltered(parent)) {
54
				return true;
59
				return true;
55
			} else if (temporarilyUnfiltered instanceof Tree
60
			} else if (temporarilyUnfiltered != null && temporarilyUnfiltered.contains(Tree.class)
56
					&& (isRootElement(object) || isRootElement(viewer, parent, object))) {
61
					&& (isRootElement(object) || isRootElement(viewer, parent, object))) {
57
				return true;
62
				return true;
58
			}
63
			}
Lines 144-170 Link Here
144
			TreePath treePath = (TreePath) parent;
149
			TreePath treePath = (TreePath) parent;
145
			parent = treePath.getLastSegment();
150
			parent = treePath.getLastSegment();
146
		}
151
		}
147
		return temporarilyUnfiltered != null && temporarilyUnfiltered.equals(parent);
152
		return temporarilyUnfiltered != null && temporarilyUnfiltered.contains(parent);
153
148
	}
154
	}
149
155
150
	public void setTemporarilyUnfiltered(Object temprarilyUnfiltered) {
156
	@Deprecated
151
		this.temporarilyUnfiltered = temprarilyUnfiltered;
157
	public void setTemporarilyUnfiltered(Object temporarilyUnfiltered) {
158
		addTemporarilyUnfiltered(temporarilyUnfiltered);
159
	}
160
161
	/**
162
	 * @since 3.5
163
	 */
164
	public void addTemporarilyUnfiltered(Object temporarilyUnfilteredObject) {
165
		if (temporarilyUnfiltered == null) {
166
			temporarilyUnfiltered = new HashSet<Object>();
167
		}
168
		if (temporarilyUnfilteredObject instanceof Tree) {
169
			this.temporarilyUnfiltered.add(Tree.class);
170
		} else {
171
			// make sure to remove the tree so that we dont have weird performance issues
172
			this.temporarilyUnfiltered.remove(Tree.class);
173
			this.temporarilyUnfiltered.add(temporarilyUnfilteredObject);
174
		}
175
		this.lastTemporarilyUnfiltered = temporarilyUnfilteredObject;
152
	}
176
	}
153
177
154
	/**
178
	/**
155
	 * @return true if there was an unfiltered node
179
	 * @return true if there was an unfiltered node
156
	 */
180
	 */
157
	public boolean resetTemporarilyUnfiltered() {
181
	public boolean resetTemporarilyUnfiltered() {
158
		if (temporarilyUnfiltered != null) {
182
		if (temporarilyUnfiltered != null || lastTemporarilyUnfiltered != null) {
159
			this.temporarilyUnfiltered = null;
183
			this.temporarilyUnfiltered = null;
184
			this.lastTemporarilyUnfiltered = null;
160
			return true;
185
			return true;
161
		} else {
186
		} else {
162
			return false;
187
			return false;
163
		}
188
		}
164
	}
189
	}
165
190
191
	/**
192
	 * @since 3.5
193
	 */
194
	public Object getLastTemporarilyUnfiltered() {
195
		return lastTemporarilyUnfiltered;
196
	}
197
198
	@Deprecated
166
	public Object getTemporarilyUnfiltered() {
199
	public Object getTemporarilyUnfiltered() {
167
		return temporarilyUnfiltered;
200
		return getLastTemporarilyUnfiltered();
168
	}
201
	}
169
202
170
}
203
}

Return to bug 302015