Bug 164350 [JFace] Listener optimization in ToolTip
The hideListener in ToolTip is a bit too eager. If we're not handling mouse down events it doesn't need to be applied recursively. Also, the mouseExit hander doesn't need to be on anything under the shell. If fixed we should be careful to re-tool the listener in the event that the setHideOnMouseDown event changes state of that field.
bundles/org.eclipse.jface/src/org/eclipse/jface/window/ToolTip.java
}
					});
		}
	}
	private void toolTipHookRecursively(Control c, boolean add) {
		if (add) {
			c.addListener(SWT.MouseDown, hideListener);
			c.addListener(SWT.MouseExit, hideListener);
		} else {
			c.removeListener(SWT.MouseDown, hideListener);
			c.removeListener(SWT.MouseExit, hideListener);
		}
		if (c instanceof Composite) {
			Control[] children = ((Composite) c).getChildren();
			for (int i = 0; i < children.length; i++) {
				toolTipHookRecursively(children[i], add);
			}
		}
	}
	/**
	 * Creates the content area of the the tooltip. 
	 * 
	 * @param event
	 *            the event that triggered the activation of the tooltip
	 * @param parent
	 *            the parent of the content area
	 * @return the content area created
	 */
	protected abstract Composite createToolTipContentArea(Event event, Composite parent);