GoObject.OnEnterLeave() question

Our application uses objects called DiagramNodes that are derived from GoIconicNode. For the Icon we are using different GoShape instances.

I have recently added a GoCollapsibleHandle to the DiagramNode class. We wanted the GoCollapsibleHandle to only be visible when collapsed (IsExpanded = false) or when the user moves the mouse over the node.
I have accomplished this by overriding DiagramNode.OnEnterLeave() and it works -- most of the time.
The problem I have is for DiagramNodes where the Icon's GoShape is not somewhat rectangular (for example, GoDiamond). Because we have positioned the GoCollapsibleHandle in the top left corner of the Icon (collapsibleHandle.SetSpotLocation(TopLeft, Icon, TopLeft);), in these cases, there is no portion of the GoShape Icon that actually falls underneath the handle (Look at the blue node labeled "Decision" in this screenshot: http://public.fotki.com/darrenjones/go-screenshot/screenshot.html).
OnEnterLeave tells me that the mouse pointer has left the node as soon as it leaves the blue area of the GoDiamond, so I then make the GoCollapsibleHandle not visible. Therefore, there is no way for the user to actually click on the handle because the handle disappears every time they try to move the mouse pointer to it.
What I'd like to know is if there is a way to get Enter/Leave notification when the mouse enters the bounding rectangle of the GoIconicNode rather than only when it is over one of the child objects of this GoGroup (the Icon, one of the ports, the text, etc.)?
Thanks in advance for your help.

The GoDrawing code that supports GoFigures like GoDiagram is careful to select inside the drawn shape. To change that behavior, you have to change the GoDrawing class.

this little class does that:

[Serializable]
public class GoDrawing2 : GoDrawing {

public GoDrawing2(GoFigure f) : base(f) { }

public override bool ContainsPoint(PointF p) {
  RectangleF rect = this.Bounds;
  float pw = this.PenWidth;
  rect = RectangleF.Inflate(rect, pw / 2, pw / 2);
  return ContainsRect(rect, p);
}

static bool ContainsRect(RectangleF a, PointF b) {
  return a.X <= b.X && b.X <= a.X + a.Width && a.Y <= b.Y && b.Y <= a.Y + a.Height;
}

}

and this code uses it:

  GoIconicNode icon1 = new GoIconicNode();
  icon1.Initialize(null, null, "Node with diamond");
  icon1.Icon = new <font color="#ff0000">GoDrawing2</font>(GoFigure.Diamond);
  icon1.Icon.Size = new SizeF(50,50);
 ...

Thanks for the help Jake.