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 175655 | Differences between
and this patch

Collapse All | Expand All

(-)src/org/eclipse/mylyn/internal/context/ui/FilteredChildrenDecorationDrawer.java (-8 / +33 lines)
Lines 18-23 Link Here
18
import org.eclipse.swt.widgets.ToolTip;
18
import org.eclipse.swt.widgets.ToolTip;
19
import org.eclipse.swt.widgets.Tree;
19
import org.eclipse.swt.widgets.Tree;
20
import org.eclipse.swt.widgets.TreeItem;
20
import org.eclipse.swt.widgets.TreeItem;
21
import org.eclipse.ui.PlatformUI;
21
22
22
/**
23
/**
23
 * @author Mik Kersten
24
 * @author Mik Kersten
Lines 29-34 Link Here
29
30
30
		private TreeItem lastItem;
31
		private TreeItem lastItem;
31
32
33
		private TreeItem currentItem;
34
35
		private long lastMoveTime;
36
37
		private long startMoveTime;
38
32
		private final TreeViewer viewer;
39
		private final TreeViewer viewer;
33
40
34
		private final BrowseFilteredListener browseFilteredListener;
41
		private final BrowseFilteredListener browseFilteredListener;
Lines 114-136 Link Here
114
				return;
126
				return;
115
			}
127
			}
116
			Tree tree = (Tree) e.widget;
128
			Tree tree = (Tree) e.widget;
117
			TreeItem item = findItem(tree, e.y);
129
			final TreeItem item = findItem(tree, e.y);
118
			if (item != null && !item.isDisposed()) {
130
			if (item != null && !item.isDisposed()) {
119
				if (lastItem != null && !lastItem.isDisposed() && !lastItem.equals(item)) {
131
				if (lastItem != null && !lastItem.isDisposed() && !lastItem.equals(item)) {
132
					boolean redraw = lastItem.getData(ID_HOVER) != NodeState.LESS;
120
					lastItem.setData(ID_HOVER, NodeState.LESS);
133
					lastItem.setData(ID_HOVER, NodeState.LESS);
134
					if (redraw) {// hide the + immediately
135
						redrawTree(lastItem);
136
					}
121
				}
137
				}
122
138
				currentItem = item;
123
				if (item.getData(ID_HOVER) != NodeState.MORE_ERROR) {
139
				long currentTime = System.currentTimeMillis();
124
					item.setData(ID_HOVER, NodeState.MORE);
140
				if (currentTime - lastMoveTime > 250) {// user paused movement
125
				}
141
					startMoveTime = currentTime;
126
				if (lastItem == null || (!lastItem.isDisposed() && !lastItem.equals(item))) {
127
					redrawTree(lastItem);
128
				}
142
				}
129
				lastItem = item;
143
				lastMoveTime = currentTime;
144
				// be responsive for small moves but delay more for bigger ones
145
				int delay = Math.min(100, (int) ((currentTime - startMoveTime) / 4.0));
146
				PlatformUI.getWorkbench().getDisplay().timerExec(delay, new Runnable() {
147
					public void run() {// do nothing if we aren't using the most recent item
148
						if (currentItem == item && !item.isDisposed()) {
149
							if (item.getData(ID_HOVER) != NodeState.MORE_ERROR) {
150
								item.setData(ID_HOVER, NodeState.MORE);
151
							}
152
							if (lastItem == null || (!lastItem.isDisposed() && !lastItem.equals(item))) {
153
								redrawTree(lastItem);
154
								redrawTree(item);
155
							}
156
							lastItem = item;
157
						}
158
					}
159
				});
130
			} else {
160
			} else {
131
				if (lastItem != null && !lastItem.isDisposed() && !lastItem.equals(item)) {
161
				if (lastItem != null && !lastItem.isDisposed() && !lastItem.equals(item)) {
132
					lastItem.setData(ID_HOVER, NodeState.LESS);
162
					lastItem.setData(ID_HOVER, NodeState.LESS);

Return to bug 175655