X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/96d38c7e0df2138cff3505dbba7d93111254ba5f..7533ba252ba505f159f504a34877793fb32d8bca:/src/msw/evtloop.cpp diff --git a/src/msw/evtloop.cpp b/src/msw/evtloop.cpp index 4325bbdd0a..6534242141 100644 --- a/src/msw/evtloop.cpp +++ b/src/msw/evtloop.cpp @@ -85,6 +85,7 @@ private: // ============================================================================ wxEventLoop *wxEventLoopBase::ms_activeLoop = NULL; +wxWindowMSW *wxEventLoop::ms_winCritical = NULL; // ---------------------------------------------------------------------------- // ctor/dtor @@ -111,10 +112,24 @@ void wxEventLoop::ProcessMessage(WXMSG *msg) } } +bool wxEventLoop::IsChildOfCriticalWindow(wxWindowMSW *win) +{ + while ( win ) + { + if ( win == ms_winCritical ) + return true; + + win = win->GetParent(); + } + + return false; +} + bool wxEventLoop::PreProcessMessage(WXMSG *msg) { HWND hwnd = msg->hwnd; - wxWindow *wndThis = wxGetWindowFromHWND((WXHWND)hwnd); + wxWindow * const wndThis = wxGetWindowFromHWND((WXHWND)hwnd); + wxWindow *wnd; // this may happen if the event occurred in a standard modeless dialog (the // only example of which I know of is the find/replace dialog) - then call @@ -132,6 +147,17 @@ bool wxEventLoop::PreProcessMessage(WXMSG *msg) return hwnd && ::IsDialogMessage(hwnd, msg) != 0; } + if ( !AllowProcessing(wndThis) ) + { + // not a child of critical window, so we eat the event but take care to + // stop an endless stream of WM_PAINTs which would have resulted if we + // didn't validate the invalidated part of the window + if ( msg->message == WM_PAINT ) + ::ValidateRect(hwnd, NULL); + + return true; + } + #if wxUSE_TOOLTIPS // we must relay WM_MOUSEMOVE events to the tooltip ctrl if we want it to // popup the tooltip bubbles @@ -154,8 +180,6 @@ bool wxEventLoop::PreProcessMessage(WXMSG *msg) } // try translations first: the accelerators override everything - wxWindow *wnd; - for ( wnd = wndThis; wnd; wnd = wnd->GetParent() ) { if ( wnd->MSWTranslateMessage((WXMSG *)msg))