X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/8df85a612341f176f06317d2867c502f282e7185..10992a81d39da31b79063387b7b71c0ff68737ce:/src/os2/app.cpp?ds=sidebyside diff --git a/src/os2/app.cpp b/src/os2/app.cpp index 5b4045dd7a..d918cd0d42 100644 --- a/src/os2/app.cpp +++ b/src/os2/app.cpp @@ -63,7 +63,6 @@ // --------------------------------------------------------------------------- extern wxChar* wxBuffer; -extern wxChar* wxOsVersion; extern wxList* wxWinHandleList; extern wxList WXDLLEXPORT wxPendingDelete; extern wxCursor* g_globalCursor; @@ -93,12 +92,6 @@ HICON wxDEFAULT_MDIPARENTFRAME_ICON = (HICON) NULL; HBRUSH wxDisableButtonBrush = (HBRUSH) 0; -MRESULT EXPENTRY wxWndProc( HWND - ,ULONG - ,MPARAM - ,MPARAM - ); - // =========================================================================== // implementation // =========================================================================== @@ -122,6 +115,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 // @@ -142,10 +157,6 @@ bool wxApp::Initialize( wxClassInfo::InitializeClasses(); -#if wxUSE_RESOURCES - wxGetResource(wxT("wxWindows"), wxT("OsVersion"), &wxOsVersion); -#endif - #if wxUSE_THREADS wxPendingEventsLocker = new wxCriticalSection; #endif @@ -180,6 +191,7 @@ bool wxApp::Initialize( return TRUE; } // end of wxApp::Initialize +const char* CANTREGISTERCLASS = " Can't register Class "; // --------------------------------------------------------------------------- // RegisterWindowClasses // --------------------------------------------------------------------------- @@ -194,8 +206,8 @@ bool wxApp::RegisterWindowClasses( if (!::WinRegisterClass( vHab ,wxFrameClassName - ,(PFNWP)wxWndProc - ,CS_SIZEREDRAW | CS_SYNCPAINT + ,NULL + ,CS_SIZEREDRAW | CS_MOVENOTIFY | CS_SYNCPAINT ,sizeof(ULONG) )) { @@ -207,7 +219,7 @@ bool wxApp::RegisterWindowClasses( if (!::WinRegisterClass( vHab ,wxFrameClassNameNoRedraw - ,(PFNWP)wxWndProc + ,NULL ,0 ,0 )) @@ -220,8 +232,8 @@ bool wxApp::RegisterWindowClasses( if (!::WinRegisterClass( vHab ,wxMDIFrameClassName - ,(PFNWP)wxWndProc - ,CS_SIZEREDRAW | CS_SYNCPAINT + ,NULL + ,CS_SIZEREDRAW | CS_MOVENOTIFY | CS_SYNCPAINT ,0 )) { @@ -233,7 +245,7 @@ bool wxApp::RegisterWindowClasses( if (!::WinRegisterClass( vHab ,wxMDIFrameClassNameNoRedraw - ,(PFNWP)wxWndProc + ,NULL ,0 ,0 )) @@ -246,7 +258,7 @@ bool wxApp::RegisterWindowClasses( if (!::WinRegisterClass( vHab ,wxMDIChildFrameClassName - ,(PFNWP)wxWndProc + ,NULL ,CS_MOVENOTIFY | CS_SIZEREDRAW | CS_SYNCPAINT | CS_HITTEST ,0 )) @@ -259,7 +271,7 @@ bool wxApp::RegisterWindowClasses( if (!::WinRegisterClass( vHab ,wxMDIChildFrameClassNameNoRedraw - ,(PFNWP)wxWndProc + ,NULL ,CS_HITTEST ,0 )) @@ -272,7 +284,7 @@ bool wxApp::RegisterWindowClasses( if (!::WinRegisterClass( vHab ,wxPanelClassName - ,(PFNWP)wxWndProc + ,NULL ,CS_MOVENOTIFY | CS_SIZEREDRAW | CS_HITTEST | CS_SAVEBITS | CS_SYNCPAINT ,0 )) @@ -285,8 +297,8 @@ bool wxApp::RegisterWindowClasses( if (!::WinRegisterClass( vHab ,wxCanvasClassName - ,(PFNWP)wxWndProc - ,CS_MOVENOTIFY | CS_SIZEREDRAW | CS_HITTEST | CS_SAVEBITS | CS_SYNCPAINT + ,NULL + ,0 // CS_MOVENOTIFY | CS_SIZEREDRAW | CS_HITTEST | CS_SAVEBITS | CS_SYNCPAINT ,0 )) { @@ -386,6 +398,10 @@ void wxApp::CleanUp() wxClassInfo::CleanUpClasses(); + // Delete Message queue + if (wxTheApp->m_hMq) + ::WinDestroyMsgQueue(wxTheApp->m_hMq); + delete wxTheApp; wxTheApp = NULL; @@ -409,6 +425,9 @@ void wxApp::CleanUp() #endif // wxUSE_LOG } // end of wxApp::CleanUp +//---------------------------------------------------------------------- +// Main wxWindows entry point +//---------------------------------------------------------------------- int wxEntry( int argc , char* argv[] @@ -467,7 +486,7 @@ int wxEntry( // nRetValue = -1; } } - +// Normal exit wxWindow* pTopWindow = wxTheApp->GetTopWindow(); if (pTopWindow) @@ -485,8 +504,24 @@ int wxEntry( 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 @@ -522,6 +557,7 @@ wxApp::wxApp() m_nPrintMode = wxPRINT_WINDOWS; m_exitOnFrameDelete = TRUE; m_bAuto3D = TRUE; + m_hMq = 0; } // end of wxApp::wxApp wxApp::~wxApp() @@ -529,6 +565,7 @@ wxApp::~wxApp() // // Delete command-line args // +#if wxUSE_UNICODE int i; for (i = 0; i < argc; i++) @@ -553,7 +590,7 @@ bool wxApp::Initialized() // bool wxApp::DoMessage() { - BOOL bRc = ::WinGetMsg(vHabmain, &m_vMsg, HWND(NULL), 0, 0); + BOOL bRc = ::WinGetMsg(vHabmain, &svCurrentMsg, HWND(NULL), 0, 0); if (bRc == 0) { @@ -623,7 +660,7 @@ bool wxApp::DoMessage() #endif // wxUSE_THREADS // Process the message - if (!ProcessMessage((WXMSG *)&svCurrentMsg) ) + if (!ProcessMessage((WXMSG *)&svCurrentMsg)) { ::WinDispatchMsg(vHabmain, (PQMSG)&svCurrentMsg); } @@ -655,8 +692,9 @@ int wxApp::MainLoop() #if wxUSE_THREADS wxMutexGuiLeaveOrEnter(); #endif // wxUSE_THREADS - while (!Pending() && ProcessIdle()) + while (/*Pending() &&*/ ProcessIdle()) { +// wxUsleep(10000); } DoMessage(); } @@ -701,8 +739,8 @@ bool wxApp::ProcessMessage( WXMSG* pWxmsg ) { - QMSG* vMsg = (PQMSG)pWxmsg; - HWND hWnd = vMsg->hwnd; + QMSG* pMsg = (PQMSG)pWxmsg; + HWND hWnd = pMsg->hwnd; wxWindow* pWndThis = wxFindWinFromHandle((WXHWND)hWnd); wxWindow* pWnd; @@ -711,7 +749,7 @@ bool wxApp::ProcessMessage( // We must relay WM_MOUSEMOVE events to the tooltip ctrl if we want it to // popup the tooltip bubbles // - if (pWndThis && (vMsg->msg == WM_MOUSEMOVE)) + if (pWndThis && (pMsg->msg == WM_MOUSEMOVE)) { wxToolTip* pToolTip = pWndThis->GetToolTip(); if (pToolTip) @@ -733,13 +771,44 @@ bool wxApp::ProcessMessage( } // - // Anyone for a non-translation message? Try youngest descendants first. + // Try translations first; find the youngest window with + // a translation table. OS/2 has case sensative accels, so + // this block, coded by BK, removes that and helps make them + // case insensative. // - for (pWnd = pWndThis; pWnd; pWnd = pWnd->GetParent()) + if(pMsg->msg == WM_CHAR) { - if (pWnd->OS2ProcessMessage(pWxmsg)) - return TRUE; + PBYTE pChmsg = (PBYTE)&(pMsg->msg); + USHORT uSch = CHARMSG(pChmsg)->chr; + bool bRc; + + // + // Do not process keyup events + // + if(!(CHARMSG(pChmsg)->fs & KC_KEYUP)) + { + 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; + } } + // + // Anyone for a non-translation message? Try youngest descendants first. + // +// for (pWnd = pWndThis; pWnd; pWnd = pWnd->GetParent()) +// { +// if (pWnd->OS2ProcessMessage(pWxmsg)) +// return TRUE; +// } return FALSE; } // end of wxApp::ProcessMessage @@ -752,7 +821,7 @@ void wxApp::OnIdle( // // Avoid recursion (via ProcessEvent default case) // - if (sbInOnIdle ) + if (sbInOnIdle) return; sbInOnIdle = TRUE; @@ -884,7 +953,7 @@ void wxExit() wxLogError(_("Fatal error: exiting")); wxApp::CleanUp(); -} // end of wxExit +} // end of wxExit // // Yield to incoming messages @@ -893,7 +962,7 @@ bool wxYield() { HAB vHab = 0; QMSG vMsg; - + // // Disable log flushing from here because a call to wxYield() shouldn't // normally result in message boxes popping up &c @@ -976,13 +1045,15 @@ void wxWakeUpIdle() } } // end of wxWakeUpIdle -HINSTANCE wxGetInstance() +HAB wxGetInstance() { - return wxhInstance; + return vHabmain; } -void wxSetInstance(HINSTANCE hInst) +void wxSetInstance( + HAB vHab +) { - wxhInstance = hInst; + vHabmain = vHab; }