protected:
// event handlers
void OnLeftDown(wxMouseEvent& event);
+ void OnCaptureLost(wxMouseCaptureLostEvent& event);
private:
wxPopupTransientWindow *m_popup;
BEGIN_EVENT_TABLE(wxPopupWindowHandler, wxEvtHandler)
EVT_LEFT_DOWN(wxPopupWindowHandler::OnLeftDown)
+ EVT_MOUSE_CAPTURE_LOST(wxPopupWindowHandler::OnCaptureLost)
END_EVENT_TABLE()
BEGIN_EVENT_TABLE(wxPopupFocusHandler, wxEvtHandler)
END_EVENT_TABLE()
BEGIN_EVENT_TABLE(wxPopupTransientWindow, wxPopupWindow)
-#if defined( __WXMSW__ ) || ( defined( __WXMAC__ ) && wxOSX_USE_CARBON )
+#if defined(__WXMSW__) ||(defined(__WXMAC__) && wxOSX_USE_CARBON)
EVT_IDLE(wxPopupTransientWindow::OnIdle)
#endif
END_EVENT_TABLE()
return false;
}
-#if defined( __WXMSW__ ) || ( defined( __WXMAC__ ) && wxOSX_USE_CARBON )
+#if defined(__WXMSW__) ||(defined(__WXMAC__) && wxOSX_USE_CARBON)
void wxPopupTransientWindow::OnIdle(wxIdleEvent& event)
{
event.Skip();
}
}
}
-#endif // __WXMSW__
+#endif // wxOSX/Carbon
#if wxUSE_COMBOBOX && defined(__WXUNIVERSAL__)
#endif // __WXUNIVERSAL__ && wxUSE_SCROLLBAR
}
+void
+wxPopupWindowHandler::OnCaptureLost(wxMouseCaptureLostEvent& WXUNUSED(event))
+{
+ m_popup->DismissAndNotify();
+
+ // There is no need to skip the event here, normally we've already dealt
+ // with the focus loss.
+}
+
// ----------------------------------------------------------------------------
// wxPopupFocusHandler
// ----------------------------------------------------------------------------