X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/76990f630b4b1692e0aa423812e3e7bb29a8ce1e..e5f741e5d467b1ce7105be96e9f3dcb553e8b89d:/src/os2/app.cpp diff --git a/src/os2/app.cpp b/src/os2/app.cpp index 6855dedd13..70342ca40f 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 // =========================================================================== @@ -142,10 +135,6 @@ bool wxApp::Initialize( wxClassInfo::InitializeClasses(); -#if wxUSE_RESOURCES - wxGetResource(wxT("wxWindows"), wxT("OsVersion"), &wxOsVersion); -#endif - #if wxUSE_THREADS wxPendingEventsLocker = new wxCriticalSection; #endif @@ -194,8 +183,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 +196,7 @@ bool wxApp::RegisterWindowClasses( if (!::WinRegisterClass( vHab ,wxFrameClassNameNoRedraw - ,(PFNWP)wxWndProc + ,NULL ,0 ,0 )) @@ -220,8 +209,8 @@ bool wxApp::RegisterWindowClasses( if (!::WinRegisterClass( vHab ,wxMDIFrameClassName - ,(PFNWP)wxWndProc - ,CS_SIZEREDRAW | CS_SYNCPAINT + ,NULL + ,CS_SIZEREDRAW | CS_MOVENOTIFY | CS_SYNCPAINT ,0 )) { @@ -233,7 +222,7 @@ bool wxApp::RegisterWindowClasses( if (!::WinRegisterClass( vHab ,wxMDIFrameClassNameNoRedraw - ,(PFNWP)wxWndProc + ,NULL ,0 ,0 )) @@ -246,7 +235,7 @@ bool wxApp::RegisterWindowClasses( if (!::WinRegisterClass( vHab ,wxMDIChildFrameClassName - ,(PFNWP)wxWndProc + ,NULL ,CS_MOVENOTIFY | CS_SIZEREDRAW | CS_SYNCPAINT | CS_HITTEST ,0 )) @@ -259,7 +248,7 @@ bool wxApp::RegisterWindowClasses( if (!::WinRegisterClass( vHab ,wxMDIChildFrameClassNameNoRedraw - ,(PFNWP)wxWndProc + ,NULL ,CS_HITTEST ,0 )) @@ -272,7 +261,7 @@ bool wxApp::RegisterWindowClasses( if (!::WinRegisterClass( vHab ,wxPanelClassName - ,(PFNWP)wxWndProc + ,NULL ,CS_MOVENOTIFY | CS_SIZEREDRAW | CS_HITTEST | CS_SAVEBITS | CS_SYNCPAINT ,0 )) @@ -285,8 +274,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 +375,10 @@ void wxApp::CleanUp() wxClassInfo::CleanUpClasses(); + // Delete Message queue + if (wxTheApp->m_hMq) + ::WinDestroyMsgQueue(wxTheApp->m_hMq); + delete wxTheApp; wxTheApp = NULL; @@ -522,6 +515,7 @@ wxApp::wxApp() m_nPrintMode = wxPRINT_WINDOWS; m_exitOnFrameDelete = TRUE; m_bAuto3D = TRUE; + m_hMq = 0; } // end of wxApp::wxApp wxApp::~wxApp() @@ -529,6 +523,7 @@ wxApp::~wxApp() // // Delete command-line args // +#if wxUSE_UNICODE int i; for (i = 0; i < argc; i++) @@ -536,6 +531,7 @@ wxApp::~wxApp() delete[] argv[i]; } delete[] argv; +#endif } // end of wxApp::~wxApp bool wxApp::Initialized() @@ -552,8 +548,9 @@ 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); +// wxUsleep(1000); if (bRc == 0) { // got WM_QUIT @@ -622,7 +619,7 @@ bool wxApp::DoMessage() #endif // wxUSE_THREADS // Process the message - if (!ProcessMessage((WXMSG *)&svCurrentMsg) ) + if (!ProcessMessage((WXMSG *)&svCurrentMsg)) { ::WinDispatchMsg(vHabmain, (PQMSG)&svCurrentMsg); } @@ -654,8 +651,9 @@ int wxApp::MainLoop() #if wxUSE_THREADS wxMutexGuiLeaveOrEnter(); #endif // wxUSE_THREADS - while (!Pending() && ProcessIdle()) + while (/*Pending() &&*/ ProcessIdle()) { +// wxUsleep(10000); } DoMessage(); } @@ -700,8 +698,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; @@ -710,7 +708,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) @@ -732,13 +730,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 @@ -751,7 +780,7 @@ void wxApp::OnIdle( // // Avoid recursion (via ProcessEvent default case) // - if (sbInOnIdle ) + if (sbInOnIdle) return; sbInOnIdle = TRUE;