+ // Mouse is inside the popup, which is fully shown
+
+ m_beenInside = true;
+
+ // Do not let the popup control respond to mouse events until
+ // mouse press used to display the popup has been lifted. This
+ // is important for users with slower mouse fingers or mouse
+ // drivers. Note that we have some redundancy here, just in
+ // case the popup is some native control that does not emit all
+ // mouse event types.
+ if ( evtType == wxEVT_MOTION )
+ {
+ if ( m_blockEventsToPopup )
+ {
+ if ( event.LeftIsDown() )
+ event.Skip(false);
+ else
+ m_blockEventsToPopup = false;
+ }
+ }
+ else if ( evtType == wxEVT_LEFT_DOWN )
+ {
+ if ( m_blockEventsToPopup )
+ m_blockEventsToPopup = false;
+ }
+ else if ( evtType == wxEVT_LEFT_UP )
+ {
+ if ( m_blockEventsToPopup )
+ {
+ // On first left up, stop blocking mouse events (but still
+ // block this one)
+ m_blockEventsToPopup = false;
+ event.Skip(false);
+
+ // Also, this button press was (probably) used to display
+ // the popup, so relay it back to the drop-down button
+ // (which supposedly originated it). This is necessary to
+ // refresh it properly.
+ relayToButton = true;
+ }
+ }
+ else if ( m_blockEventsToPopup )