X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/9a8909371b50c92753af2ab6d432aa8124122ec1..67fdb6f9af36cba7a0b06e61be320ce914dc3f4f:/src/common/popupcmn.cpp diff --git a/src/common/popupcmn.cpp b/src/common/popupcmn.cpp index bef08770aa..1638ce5760 100644 --- a/src/common/popupcmn.cpp +++ b/src/common/popupcmn.cpp @@ -43,9 +43,10 @@ #ifdef __WXGTK__ #include -#endif -#ifdef __WXX11__ -#include "wx/x11/private.h" +#elif defined(__WXMSW__) + #include "wx/msw/private.h" +#elif defined(__WXX11__) + #include "wx/x11/private.h" #endif IMPLEMENT_DYNAMIC_CLASS(wxPopupWindow, wxWindow) @@ -184,7 +185,7 @@ void wxPopupWindowBase::Position(const wxPoint& ptOrigin, void wxPopupTransientWindow::Init() { m_child = - m_focus = (wxWindow *)NULL; + m_focus = NULL; m_handlerFocus = NULL; m_handlerPopup = NULL; @@ -260,8 +261,16 @@ void wxPopupTransientWindow::Popup(wxWindow *winFocus) m_child->PushEventHandler(m_handlerPopup); - m_focus = winFocus ? winFocus : this; - m_focus->SetFocus(); +#if defined(__WXMSW__) + // Focusing on child of popup window does not work on MSW unless WS_POPUP + // style is set. We do not even want to try to set the focus, as it may + // provoke errors on some Windows versions (Vista and later). + if ( ::GetWindowLong(GetHwnd(), GWL_STYLE) & WS_POPUP ) +#endif + { + m_focus = winFocus ? winFocus : this; + m_focus->SetFocus(); + } #if defined( __WXMSW__ ) || defined( __WXMAC__) // MSW doesn't allow to set focus to the popup window, but we need to @@ -321,8 +330,8 @@ bool wxPopupTransientWindow::Show( bool show ) GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_POINTER_MOTION_MASK), - (GdkWindow *) NULL, - (GdkCursor *) NULL, + NULL, + NULL, (guint32)GDK_CURRENT_TIME ); } #endif @@ -507,7 +516,7 @@ void wxPopupWindowHandler::OnLeftDown(wxMouseEvent& event) winUnder->ScreenToClient(&event2.m_x, &event2.m_y); event2.SetEventObject(winUnder); - wxPostEvent(winUnder, event2); + wxPostEvent(winUnder->GetEventHandler(), event2); } } break;