X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/3958ae62ba9d7dca5bec365837d8047c97b0712a..3c85ada9dbd66f72f174c049744e8cdaa444d99f:/src/os2/app.cpp diff --git a/src/os2/app.cpp b/src/os2/app.cpp index 8a5b65436c..6ef2a2253d 100644 --- a/src/os2/app.cpp +++ b/src/os2/app.cpp @@ -37,22 +37,28 @@ #include "wx/os2/private.h" -#if defined(__VISAGECPP__) && __IBMCPP__ < 400 -#include -#include -#include -#include -#else +#ifdef __EMX__ + #include #include + +#else + +#include +#include +#include + +#endif // ndef for __EMX__ + #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 *); -#endif + #endif #if wxUSE_THREADS @@ -133,22 +139,34 @@ struct GsocketCallbackInfo{ #define wxSockReadMask 0x01 #define wxSockWriteMask 0x02 +#ifdef __EMX__ extern "C" int wxAppAddSocketHandler(int handle, int mask, - void (*callback)(void*), void * gsock) + void (*callback)(void*), void * gsock) { return wxTheApp->AddSocketHandler(handle, mask, callback, gsock); } - extern "C" void wxAppRemoveSocketHandler(int handle) { wxTheApp->RemoveSocketHandler(handle); } +#else +// Linkage mode problems using callbacks with extern C in a .cpp module +int wxAppAddSocketHandler(int handle, int mask, + void (*callback)(void*), void * gsock) +{ + return wxTheApp->AddSocketHandler(handle, mask, callback, gsock); +} +void wxAppRemoveSocketHandler(int handle) +{ + wxTheApp->RemoveSocketHandler(handle); +} +#endif void wxApp::HandleSockets() { - bool pendingEvent = false; + bool pendingEvent = FALSE; // Check whether it's time for Gsocket operation if (m_maxSocketHandles > 0 && m_maxSocketNr > 0) @@ -179,7 +197,7 @@ void wxApp::HandleSockets() if (r < m_maxSocketHandles) { CallbackInfo[r].proc(CallbackInfo[r].gsock); - pendingEvent = true; + pendingEvent = TRUE; wxYield(); } } @@ -193,7 +211,7 @@ void wxApp::HandleSockets() if (r < m_maxSocketHandles) { CallbackInfo[r].proc(CallbackInfo[r].gsock); - pendingEvent = true; + pendingEvent = TRUE; wxYield(); } } @@ -769,15 +787,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 @@ -967,6 +994,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(MK_LBUTTON) && + !::WinGetKeyState(MK_MBUTTON) && + !::WinGetKeyState(MK_RBUTTON)) + wxDC::ClearCache(); +#endif // wxUSE_DC_CACHEING + // // Send OnIdle events to all windows // @@ -1126,7 +1163,7 @@ bool wxYieldIfNeeded() { if (gs_inYield) return FALSE; - + return wxYield(); }