X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/65b851bbdd84a412bd47aa6ba7b3a7a131473087..a4fbdd76c156f235c319d13a5a4c6df99eee9517:/src/os2/app.cpp?ds=sidebyside diff --git a/src/os2/app.cpp b/src/os2/app.cpp index bd4b47a6cf..81d2ccbc1b 100644 --- a/src/os2/app.cpp +++ b/src/os2/app.cpp @@ -39,26 +39,26 @@ #ifdef __EMX__ -#include -#include +#include +#include #else #include -#include -#include +#include +#include +#include -#endif // ndef for __EMX__ +#endif // #ifndef __EMX__ #define select(a,b,c,d,e) bsdselect(a,b,c,d,e) -int _System bsdselect(int, - struct fd_set *, - struct fd_set *, - struct fd_set *, - struct timeval *); - +extern "C" int _System bsdselect(int, + struct fd_set *, + struct fd_set *, + struct fd_set *, + struct timeval *); #endif #if wxUSE_THREADS @@ -326,7 +326,6 @@ bool wxApp::RegisterWindowClasses( HAB vHab ) { - APIRET rc; ERRORID vError = 0L; wxString sError; @@ -654,6 +653,9 @@ bool wxApp::OnInitGui() ERRORID vError; wxString sError; + if (!wxAppBase::OnInitGui()) + return FALSE; + m_hMq = ::WinCreateMsgQueue(vHabmain, 0); if (!m_hMq) { @@ -662,6 +664,7 @@ bool wxApp::OnInitGui() wxLogDebug(sError); return FALSE; } + return TRUE; } // end of wxApp::OnInitGui @@ -787,15 +790,24 @@ bool wxApp::DoMessage() } #endif // wxUSE_THREADS + // // Process the message - if (!ProcessMessage((WXMSG *)&svCurrentMsg)) - { - ::WinDispatchMsg(vHabmain, (PQMSG)&svCurrentMsg); - } + // + DoMessage((WXMSG *)&svCurrentMsg); } return TRUE; } // end of wxApp::DoMessage +void wxApp::DoMessage( + WXMSG* pMsg +) +{ + if (!ProcessMessage((WXMSG *)&svCurrentMsg)) + { + ::WinDispatchMsg(vHabmain, (PQMSG)&svCurrentMsg); + } +} // end of wxApp::DoMessage + ////////////////////////////////////////////////////////////////////////////// // // Keep trying to process messages until WM_QUIT @@ -985,6 +997,16 @@ void wxApp::OnIdle( wxLog::FlushActive(); #endif // wxUSE_LOG +#if wxUSE_DC_CACHEING + // automated DC cache management: clear the cached DCs and bitmap + // if it's likely that the app has finished with them, that is, we + // get an idle event and we're not dragging anything. + if (!::WinGetKeyState(HWND_DESKTOP, VK_BUTTON1) && + !::WinGetKeyState(HWND_DESKTOP, VK_BUTTON3) && + !::WinGetKeyState(HWND_DESKTOP, VK_BUTTON2)) + wxDC::ClearCache(); +#endif // wxUSE_DC_CACHEING + // // Send OnIdle events to all windows // @@ -1095,13 +1117,23 @@ void wxExit() wxApp::CleanUp(); } // end of wxExit -static bool gs_inYield = FALSE; - // // Yield to incoming messages // -bool wxYield() +bool wxApp::Yield(bool onlyIfNeeded) { + static bool s_inYield = FALSE; + + if ( s_inYield ) + { + if ( !onlyIfNeeded ) + { + wxFAIL_MSG( _T("wxYield() called recursively") ); + } + + return FALSE; + } + HAB vHab = 0; QMSG vMsg; @@ -1111,7 +1143,7 @@ bool wxYield() // wxLog::Suspend(); - gs_inYield = TRUE; + s_inYield = TRUE; // // We want to go back to the main message loop @@ -1135,19 +1167,10 @@ bool wxYield() // Let the logs be flashed again // wxLog::Resume(); - gs_inYield = FALSE; + s_inYield = FALSE; return TRUE; } // end of wxYield -// Yield to incoming messages; but fail silently if recursion is detected. -bool wxYieldIfNeeded() -{ - if (gs_inYield) - return FALSE; - - return wxYield(); -} - wxIcon wxApp::GetStdIcon( int nWhich ) const