X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/9787a4b6ad61ad6f938c308069fabf45057af30f..abfcca57dd0d805ceec9e19c4be207614d79252a:/src/msw/app.cpp?ds=sidebyside diff --git a/src/msw/app.cpp b/src/msw/app.cpp index a0c1e2cda0..31e9ddfc8a 100644 --- a/src/msw/app.cpp +++ b/src/msw/app.cpp @@ -115,8 +115,7 @@ #define _WIN32_IE 0x0200 #endif -#if _WIN32_IE >= 0x0300 \ - && !( defined(__MINGW32__) && !wxCHECK_W32API_VERSION( 1, 0 ) ) +#if _WIN32_IE >= 0x0300 && !defined(__MINGW32__) #include #endif @@ -125,7 +124,6 @@ // --------------------------------------------------------------------------- extern wxChar *wxBuffer; -extern wxList *wxWinHandleList; extern wxList WXDLLEXPORT wxPendingDelete; #ifndef __WXMICROWIN__ extern void wxSetKeyboardHook(bool doIt); @@ -296,7 +294,7 @@ bool wxApp::Initialize() wxRegisterPenWin(); #endif - wxWinHandleList = new wxList(wxKEY_INTEGER); + wxWinHandleHash = new wxWinHashTable(wxKEY_INTEGER, 100); // This is to foil optimizations in Visual C++ that throw out dummy.obj. // PLEASE DO NOT ALTER THIS. @@ -702,8 +700,7 @@ void wxApp::CleanUp() Ctl3dUnregister(wxhInstance); #endif - if (wxWinHandleList) - delete wxWinHandleList; + delete wxWinHandleHash; // GL: I'm annoyed ... I don't know where to put this and I don't want to // create a module for that as it's part of the core. @@ -1156,12 +1153,12 @@ bool wxApp::ProcessMessage(WXMSG *wxmsg) // we need to find the dialog containing this control as // IsDialogMessage() just eats all the messages (i.e. returns TRUE for // them) if we call it for the control itself - while ( ::GetWindowLong(hwnd, GWL_STYLE) & WS_CHILD ) + while ( hwnd && ::GetWindowLong(hwnd, GWL_STYLE) & WS_CHILD ) { hwnd = ::GetParent(hwnd); } - return ::IsDialogMessage(hwnd, msg) != 0; + return hwnd && ::IsDialogMessage(hwnd, msg) != 0; } #if wxUSE_TOOLTIPS @@ -1436,20 +1433,26 @@ void wxExit() // Yield to incoming messages -static bool gs_inYield = FALSE; - -bool wxYield() +bool wxApp::Yield(bool onlyIfNeeded) { + // MT-FIXME + static bool s_inYield = FALSE; + // disable log flushing from here because a call to wxYield() shouldn't // normally result in message boxes popping up &c wxLog::Suspend(); -#ifdef __WXDEBUG__ - if (gs_inYield) - wxFAIL_MSG( wxT("wxYield called recursively" ) ); -#endif + if ( s_inYield ) + { + if ( !onlyIfNeeded ) + { + wxFAIL_MSG( wxT("wxYield called recursively" ) ); + } - gs_inYield = TRUE; + return FALSE; + } + + s_inYield = TRUE; // we don't want to process WM_QUIT from here - it should be processed in // the main event loop in order to stop it @@ -1465,27 +1468,17 @@ bool wxYield() break; } - // If they are pending events, we must process them. - if (wxTheApp) - wxTheApp->ProcessPendingEvents(); + // if there are pending events, we must process them. + ProcessPendingEvents(); // let the logs be flashed again wxLog::Resume(); - gs_inYield = FALSE; + s_inYield = FALSE; return TRUE; } -// Yield to incoming messages; but fail silently if recursion is detected. -bool wxYieldIfNeeded() -{ - if (gs_inYield) - return FALSE; - - return wxYield(); -} - bool wxHandleFatalExceptions(bool doit) { #if wxUSE_ON_FATAL_EXCEPTION @@ -1494,9 +1487,9 @@ bool wxHandleFatalExceptions(bool doit) return TRUE; #else - wxFAIL_MSG(_T("set wxUSE_ON_FATAL_EXCEPTION to 1 to sue this function")); - - (void)doit; + wxFAIL_MSG(_T("set wxUSE_ON_FATAL_EXCEPTION to 1 to use this function")); + + (void)doit; return FALSE; #endif }