X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/5b3ed311352212a92f1a20f250fc1da325739b91..7d88e2447eefd4660060a7e40cdff40db467753d:/src/os2/app.cpp diff --git a/src/os2/app.cpp b/src/os2/app.cpp index 70342ca40f..7288a6e08c 100644 --- a/src/os2/app.cpp +++ b/src/os2/app.cpp @@ -27,8 +27,9 @@ #include "wx/msgdlg.h" #include "wx/intl.h" #include "wx/dynarray.h" -# include "wx/wxchar.h" -# include "wx/icon.h" + #include "wx/wxchar.h" + #include "wx/icon.h" + #include "wx/timer.h" #endif #include "wx/log.h" @@ -92,6 +93,9 @@ HICON wxDEFAULT_MDIPARENTFRAME_ICON = (HICON) NULL; HBRUSH wxDisableButtonBrush = (HBRUSH) 0; +MRESULT EXPENTRY wxWndProc( HWND hWnd,ULONG message,MPARAM mp1,MPARAM mp2); +MRESULT EXPENTRY wxFrameWndProc( HWND hWnd,ULONG message,MPARAM mp1,MPARAM mp2); + // =========================================================================== // implementation // =========================================================================== @@ -115,6 +119,28 @@ bool wxApp::Initialize( HAB vHab ) { +#if defined(wxUSE_CONSOLEDEBUG) + #if wxUSE_CONSOLEDEBUG +/***********************************************/ +/* Code for using stdout debug */ +/* To use it you mast link app as "Window" - EK*/ +/***********************************************/ + { + PPIB pib; + PTIB tib; + + printf("In console\n"); + + DosGetInfoBlocks(&tib, &pib); +/* Try morphing into a PM application. */ +// if(pib->pib_ultype == 2) /* VIO */ + pib->pib_ultype = 3; + } +/**********************************************/ +/**********************************************/ + #endif //wxUSE_CONSOLEDEBUG +#endif + // // OS2 has to have an anchorblock // @@ -169,6 +195,7 @@ bool wxApp::Initialize( return TRUE; } // end of wxApp::Initialize +const char* CANTREGISTERCLASS = " Can't register Class "; // --------------------------------------------------------------------------- // RegisterWindowClasses // --------------------------------------------------------------------------- @@ -183,8 +210,8 @@ bool wxApp::RegisterWindowClasses( if (!::WinRegisterClass( vHab ,wxFrameClassName - ,NULL - ,CS_SIZEREDRAW | CS_MOVENOTIFY | CS_SYNCPAINT + ,wxFrameWndProc + ,CS_SIZEREDRAW | CS_MOVENOTIFY | CS_SYNCPAINT | CS_CLIPCHILDREN ,sizeof(ULONG) )) { @@ -196,9 +223,9 @@ bool wxApp::RegisterWindowClasses( if (!::WinRegisterClass( vHab ,wxFrameClassNameNoRedraw - ,NULL - ,0 + ,wxWndProc ,0 + ,sizeof(ULONG) )) { vError = ::WinGetLastError(vHab); @@ -209,9 +236,9 @@ bool wxApp::RegisterWindowClasses( if (!::WinRegisterClass( vHab ,wxMDIFrameClassName - ,NULL + ,wxWndProc ,CS_SIZEREDRAW | CS_MOVENOTIFY | CS_SYNCPAINT - ,0 + ,sizeof(ULONG) )) { vError = ::WinGetLastError(vHab); @@ -222,9 +249,9 @@ bool wxApp::RegisterWindowClasses( if (!::WinRegisterClass( vHab ,wxMDIFrameClassNameNoRedraw - ,NULL - ,0 + ,wxWndProc ,0 + ,sizeof(ULONG) )) { vError = ::WinGetLastError(vHab); @@ -235,9 +262,9 @@ bool wxApp::RegisterWindowClasses( if (!::WinRegisterClass( vHab ,wxMDIChildFrameClassName - ,NULL + ,wxWndProc ,CS_MOVENOTIFY | CS_SIZEREDRAW | CS_SYNCPAINT | CS_HITTEST - ,0 + ,sizeof(ULONG) )) { vError = ::WinGetLastError(vHab); @@ -248,9 +275,9 @@ bool wxApp::RegisterWindowClasses( if (!::WinRegisterClass( vHab ,wxMDIChildFrameClassNameNoRedraw - ,NULL + ,wxWndProc ,CS_HITTEST - ,0 + ,sizeof(ULONG) )) { vError = ::WinGetLastError(vHab); @@ -261,9 +288,9 @@ bool wxApp::RegisterWindowClasses( if (!::WinRegisterClass( vHab ,wxPanelClassName - ,NULL + ,wxWndProc ,CS_MOVENOTIFY | CS_SIZEREDRAW | CS_HITTEST | CS_SAVEBITS | CS_SYNCPAINT - ,0 + ,sizeof(ULONG) )) { vError = ::WinGetLastError(vHab); @@ -274,9 +301,9 @@ bool wxApp::RegisterWindowClasses( if (!::WinRegisterClass( vHab ,wxCanvasClassName - ,NULL - ,0 // CS_MOVENOTIFY | CS_SIZEREDRAW | CS_HITTEST | CS_SAVEBITS | CS_SYNCPAINT - ,0 + ,wxWndProc + ,CS_MOVENOTIFY | CS_SIZEREDRAW | CS_HITTEST | CS_SAVEBITS | CS_SYNCPAINT | CS_CLIPCHILDREN + ,sizeof(ULONG) )) { vError = ::WinGetLastError(vHab); @@ -402,6 +429,9 @@ void wxApp::CleanUp() #endif // wxUSE_LOG } // end of wxApp::CleanUp +//---------------------------------------------------------------------- +// Main wxWindows entry point +//---------------------------------------------------------------------- int wxEntry( int argc , char* argv[] @@ -457,29 +487,43 @@ int wxEntry( if (wxTheApp->OnInit()) { nRetValue = wxTheApp->OnRun(); -// nRetValue = -1; - } - } - - wxWindow* pTopWindow = wxTheApp->GetTopWindow(); - - if (pTopWindow) - { - // Forcibly delete the window. - if (pTopWindow->IsKindOf(CLASSINFO(wxFrame)) || - pTopWindow->IsKindOf(CLASSINFO(wxDialog)) ) - { - pTopWindow->Close(TRUE); - wxTheApp->DeletePendingObjects(); } - else + // Normal exit + wxWindow* pTopWindow = wxTheApp->GetTopWindow(); + if (pTopWindow) { - delete pTopWindow; - wxTheApp->SetTopWindow(NULL); + // Forcibly delete the window. + if (pTopWindow->IsKindOf(CLASSINFO(wxFrame)) || + pTopWindow->IsKindOf(CLASSINFO(wxDialog)) ) + { + pTopWindow->Close(TRUE); + wxTheApp->DeletePendingObjects(); + } + else + { + delete pTopWindow; + wxTheApp->SetTopWindow(NULL); + } } } + else // app initialization failed + { + wxLogLastError(" Gui initialization failed, exitting"); + } +#if wxUSE_CONSOLEDEBUG + printf("wxTheApp->OnExit "); + fflush(stdout); +#endif wxTheApp->OnExit(); +#if wxUSE_CONSOLEDEBUG + printf("wxApp::CleanUp "); + fflush(stdout); +#endif wxApp::CleanUp(); +#if wxUSE_CONSOLEDEBUG + printf("return %i ", nRetValue); + fflush(stdout); +#endif return(nRetValue); } // end of wxEntry @@ -550,7 +594,6 @@ bool wxApp::DoMessage() { BOOL bRc = ::WinGetMsg(vHabmain, &svCurrentMsg, HWND(NULL), 0, 0); -// wxUsleep(1000); if (bRc == 0) { // got WM_QUIT @@ -718,6 +761,12 @@ bool wxApp::ProcessMessage( } #endif // wxUSE_TOOLTIPS + // + // We must relay Timer events to wxTimer's processing function + // + if (pMsg->msg == WM_TIMER) + wxTimerProc(NULL, 0, (int)pMsg->mp1, 0); + // // For some composite controls (like a combobox), wndThis might be NULL // because the subcontrol is not a wxWindow, but only the control itself @@ -749,13 +798,13 @@ bool wxApp::ProcessMessage( if((CHARMSG(pChmsg)->fs & (KC_ALT | KC_CTRL)) && CHARMSG(pChmsg)->chr != 0) CHARMSG(pChmsg)->chr = (USHORT)wxToupper((UCHAR)uSch); - + for(pWnd = pWndThis; pWnd; pWnd = pWnd->GetParent() ) { if((bRc = pWnd->OS2TranslateMessage(pWxmsg)) == TRUE) break; } - + if(!bRc) // untranslated, should restore original value CHARMSG(pChmsg)->chr = uSch; } @@ -914,6 +963,8 @@ void wxExit() wxApp::CleanUp(); } // end of wxExit +static bool gs_inYield = FALSE; + // // Yield to incoming messages // @@ -928,6 +979,8 @@ bool wxYield() // wxLog::Suspend(); + gs_inYield = TRUE; + // // We want to go back to the main message loop // if we see a WM_QUIT. (?) @@ -950,9 +1003,19 @@ bool wxYield() // Let the logs be flashed again // wxLog::Resume(); + gs_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