private bool ProcessNonClientMouseDown(ref Message m)
{
// Extract the x and y mouse position from message
Point screenPt = new Point(PI.LOWORD((int)m.LParam), PI.HIWORD((int)m.LParam));
// Ask the popup if this message causes the entire stack to be killed
if (_current.DoesCurrentMouseDownEndAllTracking(m, ScreenPtToClientPt(screenPt)))
{
EndAllTracking();
}
// Do any of the current popups want the mouse down to be eaten?
bool processed = false;
if (_current != null)
{
processed = _current.DoesMouseDownGetEaten(m, screenPt);
if (!processed)
{
// Search from end towards the front, the last entry is the most recent 'Push'
VisualPopup[] popups = _stack.ToArray();
for (int i = 0; i < popups.Length; i++)
{
// Ignore disposed popups
VisualPopup popup = popups[i];
if (!popup.IsDisposed)
{
processed = popup.DoesMouseDownGetEaten(m, screenPt);
if (processed)
{
break;
}
}
}
}
}
return(processed);
}