Bug 163461 [Field Assist] - API - ControlDecoration should work with image+text, not FieldDecoration
DecoratedField supported multiple decoration locations, so it was useful to expose a data structure that referred to a particular decoration. Hence FieldDecoration was defined. It is just an image+text data structure, but was useful for asking DecoratedField to "do things" to a particular decoration, such as hiding it, showing it, updating it, etc. The initial API for ControlDecoration also supported FieldDecoration, in an attempt to "explain itself" as being similar to DecoratedField. However, since a ControlDecoration only shows one decoration, there's not really a need for the image+text to have any kind of identity. It would be better if the ControlDecoration API worked in terms of having an image and a description text. Clients could still use FieldDecorations and the registry if desired, but the API shouldn't require it, since it's trivial to pull the image and text out of a decoration and feed it to ControlDecoration.
bundles/org.eclipse.jface/src/org/eclipse/jface/fieldassist/ControlDecoration.java
private MouseMoveListener mouseMoveListener;
	/**
	 * Control that we last installed a move listener on. We only want one at a
	 * time.
	 */
	private Control moveListeningTarget = null;
	/**
	 * Debug counter used to match add and remove listeners
	 */
	private int listenerInstalls = 0;
	/**
	 * The current rectangle used for tracking mouse moves
	 */
	private Rectangle decorationRectangle;
	/**
	 * An internal flag tracking whether we have focus. We use this rather than
	 * isFocusControl() so that we can set the flag as soon as we get the focus
	 * callback, rather than having to do an asyncExec in the middle of a focus
	 * callback to ensure that isFocusControl() represents the outcome of the
	 * event.
	 */
	private boolean hasFocus = false;
	/**
	 * The hover used for showing description text
	 */
	private Hover hover;
	/**
	 * The hover used to show a decoration image's description.
	 */
	class Hover {