X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/43543d985b04d065178df50dbbc998786ff97282..b420fb6a37c3aa1c268983925280da7b4d7a2ee7:/src/os2/app.cpp diff --git a/src/os2/app.cpp b/src/os2/app.cpp index 72c419454c..ff0d9b43ed 100644 --- a/src/os2/app.cpp +++ b/src/os2/app.cpp @@ -62,7 +62,6 @@ extern wxChar* wxBuffer; extern wxChar* wxOsVersion; extern wxList* wxWinHandleList; extern wxList WXDLLEXPORT wxPendingDelete; -extern void wxSetKeyboardHook(bool doIt); extern wxCursor* g_globalCursor; HINSTANCE wxhInstance = 0; @@ -93,7 +92,11 @@ HICON wxDEFAULT_MDIPARENTFRAME_ICON = (HICON) NULL; HBRUSH wxDisableButtonBrush = (HBRUSH) 0; -MRESULT wxWndProc(HWND, UINT, MPARAM, MPARAM); +MRESULT EXPENTRY wxWndProc( HWND + ,ULONG + ,MPARAM + ,MPARAM + ); // =========================================================================== // implementation @@ -103,7 +106,6 @@ MRESULT wxWndProc(HWND, UINT, MPARAM, MPARAM); // wxApp // --------------------------------------------------------------------------- -#if !USE_SHARED_LIBRARY IMPLEMENT_DYNAMIC_CLASS(wxApp, wxEvtHandler) BEGIN_EVENT_TABLE(wxApp, wxEvtHandler) @@ -111,13 +113,22 @@ MRESULT wxWndProc(HWND, UINT, MPARAM, MPARAM); EVT_END_SESSION(wxApp::OnEndSession) EVT_QUERY_END_SESSION(wxApp::OnQueryEndSession) END_EVENT_TABLE() -#endif //// Initialize bool wxApp::Initialize( HAB vHab ) { + // + // OS2 has to have an anchorblock + // + vHab = WinInitialize(0); + + if (!vHab) + return FALSE; + else + vHabmain = vHab; + // Some people may wish to use this, but // probably it shouldn't be here by default. #ifdef __WXDEBUG__ @@ -162,12 +173,12 @@ bool wxApp::Initialize( // This is to foil optimizations in Visual C++ that throw out dummy.obj. // PLEASE DO NOT ALTER THIS. -#if !defined(WXMAKINGDLL) +#if !defined(WXMAKINGDLL) && defined(__VISAGECPP__) extern char wxDummyChar; if (wxDummyChar) wxDummyChar++; #endif - wxSetKeyboardHook(TRUE); + // wxSetKeyboardHook(TRUE); wxModule::RegisterModules(); if (!wxModule::InitializeModules()) @@ -187,100 +198,110 @@ bool wxApp::RegisterWindowClasses( ) { APIRET rc; + ERRORID vError = 0L; + wxString sError; - if ((rc = ::WinRegisterClass( vHab - ,wxFrameClassName - ,(PFNWP)wxWndProc - ,CS_SIZEREDRAW | CS_SYNCPAINT | CS_HITTEST | CS_CLIPCHILDREN | CS_FRAME - ,0 - )) != 0) + if (!::WinRegisterClass( vHab + ,wxFrameClassName + ,(PFNWP)wxWndProc + ,CS_SIZEREDRAW | CS_SYNCPAINT + ,0 + )) { - wxLogLastError("RegisterClass(frame)"); - + vError = ::WinGetLastError(vHab); + sError = wxPMErrorToStr(vError); + wxLogLastError(sError); return FALSE; } if (!::WinRegisterClass( vHab ,wxFrameClassNameNoRedraw ,(PFNWP)wxWndProc - ,CS_HITTEST | CS_CLIPCHILDREN | CS_FRAME + ,0 ,0 )) { - wxLogLastError("RegisterClass(no redraw frame)"); - + vError = ::WinGetLastError(vHab); + sError = wxPMErrorToStr(vError); + wxLogLastError(sError); return FALSE; } if (!::WinRegisterClass( vHab ,wxMDIFrameClassName ,(PFNWP)wxWndProc - ,CS_SIZEREDRAW | CS_SYNCPAINT | CS_HITTEST | CS_CLIPCHILDREN | CS_FRAME + ,CS_SIZEREDRAW | CS_SYNCPAINT ,0 )) { - wxLogLastError("RegisterClass(MDI parent)"); - + vError = ::WinGetLastError(vHab); + sError = wxPMErrorToStr(vError); + wxLogLastError(sError); return FALSE; } if (!::WinRegisterClass( vHab ,wxMDIFrameClassNameNoRedraw ,(PFNWP)wxWndProc - ,CS_HITTEST | CS_CLIPCHILDREN | CS_FRAME + ,0 ,0 )) { - wxLogLastError("RegisterClass(no redraw MDI parent)"); - + vError = ::WinGetLastError(vHab); + sError = wxPMErrorToStr(vError); + wxLogLastError(sError); return FALSE; } if (!::WinRegisterClass( vHab ,wxMDIChildFrameClassName ,(PFNWP)wxWndProc - ,CS_MOVENOTIFY | CS_SIZEREDRAW | CS_SYNCPAINT | CS_HITTEST | CS_CLIPSIBLINGS | CS_FRAME + ,CS_MOVENOTIFY | CS_SIZEREDRAW | CS_SYNCPAINT | CS_HITTEST ,0 )) { - wxLogLastError("RegisterClass(MDI child)"); - + vError = ::WinGetLastError(vHab); + sError = wxPMErrorToStr(vError); + wxLogLastError(sError); return FALSE; } if (!::WinRegisterClass( vHab ,wxMDIChildFrameClassNameNoRedraw ,(PFNWP)wxWndProc - ,CS_HITTEST | CS_CLIPSIBLINGS | CS_FRAME + ,CS_HITTEST ,0 )) { - wxLogLastError("RegisterClass(no redraw MDI child)"); - + vError = ::WinGetLastError(vHab); + sError = wxPMErrorToStr(vError); + wxLogLastError(sError); return FALSE; } if (!::WinRegisterClass( vHab ,wxPanelClassName ,(PFNWP)wxWndProc - ,CS_MOVENOTIFY | CS_SIZEREDRAW | CS_HITTEST | CS_CLIPSIBLINGS | CS_SAVEBITS | CS_SYNCPAINT + ,CS_MOVENOTIFY | CS_SIZEREDRAW | CS_HITTEST | CS_SAVEBITS | CS_SYNCPAINT ,0 )) { - wxLogLastError("RegisterClass(Panel)"); - + vError = ::WinGetLastError(vHab); + sError = wxPMErrorToStr(vError); + wxLogLastError(sError); return FALSE; } if (!::WinRegisterClass( vHab ,wxCanvasClassName ,(PFNWP)wxWndProc - ,CS_MOVENOTIFY | CS_SIZEREDRAW | CS_HITTEST | CS_CLIPSIBLINGS | CS_SAVEBITS | CS_SYNCPAINT + ,CS_MOVENOTIFY | CS_SIZEREDRAW | CS_HITTEST | CS_SAVEBITS | CS_SYNCPAINT ,0 )) { - wxLogLastError("RegisterClass(Canvas)"); - + vError = ::WinGetLastError(vHab); + sError = wxPMErrorToStr(vError); + wxLogLastError(sError); return FALSE; } return TRUE; @@ -300,13 +321,19 @@ void wxApp::CleanUp() wxLog::DontCreateOnDemand(); // this will flush the old messages if any +#if (!(defined(__VISAGECPP__) && __IBMCPP__ < 400)) + // another VA 3.0 memory problem here delete wxLog::SetActiveTarget(new wxLogStderr); +#endif #endif // wxUSE_LOG // One last chance for pending objects to be cleaned up wxTheApp->DeletePendingObjects(); +#if (!(defined(__VISAGECPP__) && __IBMCPP__ < 400)) + // another VA 3.0 memory problem here wxModule::CleanUpModules(); +#endif #if wxUSE_WX_RESOURCES wxCleanUpResourceSystem(); @@ -318,7 +345,10 @@ void wxApp::CleanUp() // by deleting the bitmap list before g_globalCursor goes out of scope // (double deletion of the cursor). wxSetCursor(wxNullCursor); +#if (!(defined(__VISAGECPP__) && __IBMCPP__ < 400)) + // another VA 3.0 memory problem here delete g_globalCursor; +#endif g_globalCursor = NULL; wxDeleteStockObjects(); @@ -336,7 +366,7 @@ void wxApp::CleanUp() //// WINDOWS-SPECIFIC CLEANUP - wxSetKeyboardHook(FALSE); + // wxSetKeyboardHook(FALSE); if (wxSTD_FRAME_ICON) ::WinFreeFileIcon(wxSTD_FRAME_ICON); @@ -399,7 +429,7 @@ int wxEntry( , char* argv[] ) { - HAB vHab; + HAB vHab = 0; if (!wxApp::Initialize(vHab)) return 0; @@ -409,17 +439,14 @@ int wxEntry( // if (!wxTheApp) { - wxCHECK_MSG( wxApp::GetInitializerFunction() - ,-1 - ,wxT("wxWindows error: No initializer - use IMPLEMENT_APP macro.\n") - ); - - wxAppInitializerFunction fnAppIni = wxApp::GetInitializerFunction(); - wxObject* pTest_app = fnAppIni(); - - wxTheApp = (wxApp*)pTest_app; + // The app may have declared a global application object, but we recommend + // the IMPLEMENT_APP macro is used instead, which sets an initializer + // function for delayed, dynamic app object construction. + wxCHECK_MSG( wxApp::GetInitializerFunction(), 0, + wxT("No initializer - use IMPLEMENT_APP macro.") ); + wxTheApp = (*wxApp::GetInitializerFunction()) (); } - wxCHECK_MSG( wxTheApp, -1, wxT("wxWindows error: no application object") ); + wxCHECK_MSG( wxTheApp, 0, wxT("You have to define an instance of wxApp!") ); wxTheApp->argc = argc; #if wxUSE_UNICODE @@ -482,9 +509,17 @@ int wxEntry( bool wxApp::OnInitGui() { - vHabmain = WinInitialize(0); - m_hMq = WinCreateMsgQueue(vHabmain, 0); + ERRORID vError; + wxString sError; + m_hMq = ::WinCreateMsgQueue(vHabmain, 0); + if (!m_hMq) + { + vError = ::WinGetLastError(vHabmain); + sError = wxPMErrorToStr(vError); + wxLogDebug(sError); + return FALSE; + } return TRUE; } @@ -508,6 +543,7 @@ wxApp::wxApp() wxApp::~wxApp() { +#if wxUSE_UNICODE // Delete command-line args int i; for (i = 0; i < argc; i++) @@ -515,6 +551,7 @@ wxApp::~wxApp() delete[] argv[i]; } delete[] argv; +#endif } bool wxApp::Initialized() @@ -874,7 +911,7 @@ void wxExit() // Yield to incoming messages bool wxYield() { - HAB vHab; + HAB vHab = 0; QMSG vMsg; // We want to go back to the main message loop // if we see a WM_QUIT. (?)