X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ad02525dadb780a4bacb6482ac633e90a10fe25c..02b94f4e73cd7423b27aafb388179a8c7e856df1:/src/os2/window.cpp diff --git a/src/os2/window.cpp b/src/os2/window.cpp index 43c6a8f13a..36548384d6 100644 --- a/src/os2/window.cpp +++ b/src/os2/window.cpp @@ -51,6 +51,8 @@ #include #endif +#include "wx/os2/dcclient.h" + #if wxUSE_OWNER_DRAWN #include "wx/ownerdrw.h" #endif @@ -121,7 +123,7 @@ QMSG s_currentMsg; #if wxUSE_MENUS_NATIVE -wxMenu* wxCurrentPopupMenu = NULL; +extern wxMenu* wxCurrentPopupMenu; #endif // wxUSE_MENUS_NATIVE // --------------------------------------------------------------------------- @@ -332,7 +334,7 @@ void wxWindowOS2::Init() // wxWindowOS2::~wxWindowOS2() { - m_isBeingDeleted = true; + SendDestroyEvent(); for (wxWindow* pWin = GetParent(); pWin; pWin = pWin->GetParent()) { @@ -512,7 +514,7 @@ void wxWindowOS2::Lower() void wxWindowOS2::SetLabel( const wxString& label ) { - ::WinSetWindowText(GetHwnd(), (PSZ)label.c_str()); + ::WinSetWindowText(GetHwnd(), label.c_str()); } // end of wxWindowOS2::SetLabel wxString wxWindowOS2::GetLabel() const @@ -543,7 +545,7 @@ void wxWindowOS2::DoReleaseMouse() /* static */ wxWindow* wxWindowBase::GetCapture() { HWND hwnd = ::WinQueryCapture(HWND_DESKTOP); - return hwnd ? wxFindWinFromHandle((WXHWND)hwnd) : (wxWindow *)NULL; + return hwnd ? wxFindWinFromHandle((WXHWND)hwnd) : NULL; } // end of wxWindowBase::GetCapture bool wxWindowOS2::SetFont( const wxFont& rFont ) @@ -1082,7 +1084,7 @@ void wxWindowOS2::OnIdle( ,vPoint.y ,nState ); - (void)GetEventHandler()->ProcessEvent(rEvent); + (void)HandleWindowEvent(rEvent); } } if (wxUpdateUIEvent::CanUpdate(this)) @@ -1092,7 +1094,7 @@ void wxWindowOS2::OnIdle( // // Set this window to be the child of 'parent'. // -bool wxWindowOS2::Reparent( wxWindow* pParent) +bool wxWindowOS2::Reparent( wxWindowBase* pParent) { if (!wxWindowBase::Reparent(pParent)) return false; @@ -1109,12 +1111,12 @@ void wxWindowOS2::Update() ::WinUpdateWindow(GetHwnd()); } // end of wxWindowOS2::Update -void wxWindowOS2::Freeze() +void wxWindowOS2::DoFreeze() { ::WinSendMsg(GetHwnd(), WM_VRNDISABLED, (MPARAM)0, (MPARAM)0); } // end of wxWindowOS2::Freeze -void wxWindowOS2::Thaw() +void wxWindowOS2::DoThaw() { ::WinSendMsg(GetHwnd(), WM_VRNENABLED, (MPARAM)TRUE, (MPARAM)0); @@ -1620,7 +1622,7 @@ void wxWindowOS2::DoSetClientSize( int nWidth, wxSize size( nWidth, nHeight ); wxSizeEvent vEvent( size, m_windowId ); vEvent.SetEventObject(this); - GetEventHandler()->ProcessEvent(vEvent); + HandleWindowEvent(vEvent); } // end of wxWindowOS2::DoSetClientSize // --------------------------------------------------------------------------- @@ -1673,7 +1675,6 @@ void wxWindowOS2::GetTextExtent( const wxString& rString, int l; FONTMETRICS vFM; // metrics structure BOOL bRc = FALSE; - char* pStr; HPS hPS; hPS = ::WinGetPS(GetHwnd()); @@ -1681,14 +1682,12 @@ void wxWindowOS2::GetTextExtent( const wxString& rString, l = rString.length(); if (l > 0L) { - pStr = (PCH)rString.c_str(); - // // In world coordinates. // bRc = ::GpiQueryTextBox( hPS, l, - pStr, + (char*) rString.wx_str(), TXTBOX_COUNT,// return maximum information avPoint // array of coordinates points ); @@ -1787,10 +1786,6 @@ bool wxWindowOS2::DoPopupMenu( wxMenu* pMenu, int nX, int nY ) bool bIsWaiting = true; int nHeight; - // Protect against recursion - if (wxCurrentPopupMenu) - return false; - pMenu->SetInvokingWindow(this); pMenu->UpdateUI(); @@ -1807,7 +1802,6 @@ bool wxWindowOS2::DoPopupMenu( wxMenu* pMenu, int nX, int nY ) DoGetSize(0,&nHeight); nY = nHeight - nY; } - wxCurrentPopupMenu = pMenu; ::WinPopupMenu( hWndParent ,hWndOwner @@ -1828,7 +1822,6 @@ bool wxWindowOS2::DoPopupMenu( wxMenu* pMenu, int nX, int nY ) ::WinDispatchMsg(vHabmain, (PQMSG)&vMsg); } - wxCurrentPopupMenu = NULL; pMenu->SetInvokingWindow(NULL); return true; } // end of wxWindowOS2::DoPopupMenu @@ -2004,7 +1997,7 @@ bool wxWindowOS2::OS2ProcessMessage( WXMSG* pMsg ) vEvent.SetWindowChange(bWindowChange); vEvent.SetEventObject(this); - if (GetEventHandler()->ProcessEvent(vEvent)) + if (HandleWindowEvent(vEvent)) { wxButton* pBtn = wxDynamicCast(FindFocus(), wxButton); @@ -2555,7 +2548,7 @@ MRESULT wxWindowOS2::OS2WindowProc( WXUINT uMsg, (pPage->ulPageIdNew > 0L && pPage->ulPageIdCur > 0L)) { wxWindowOS2* pWin = wxFindWinFromHandle(pPage->hwndBook); - wxNotebookEvent vEvent( wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED + wxBookCtrlEvent vEvent( wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED ,(int)SHORT1FROMMP(wParam) ,(int)pPage->ulPageIdNew ,(int)pPage->ulPageIdCur @@ -2944,6 +2937,7 @@ bool wxWindowOS2::OS2Create( PSZ zClass, long lControlId = 0L; wxWindowCreationHook vHook(this); wxString sClassName((wxChar*)zClass); + wxString sTitle(zTitle ? zTitle : wxEmptyString); OS2GetCreateWindowCoords( rPos ,rSize @@ -2971,8 +2965,8 @@ bool wxWindowOS2::OS2Create( PSZ zClass, sClassName += wxT("NR"); } m_hWnd = (WXHWND)::WinCreateWindow( (HWND)OS2GetParent() - ,(PSZ)sClassName.c_str() - ,(PSZ)(zTitle ? zTitle : wxEmptyString) + ,sClassName.c_str() + ,sTitle.c_str() ,(ULONG)dwStyle ,(LONG)0L ,(LONG)0L @@ -3029,7 +3023,7 @@ bool wxWindowOS2::HandleCreate( WXLPCREATESTRUCT WXUNUSED(vCs), { wxWindowCreateEvent vEvent((wxWindow*)this); - (void)GetEventHandler()->ProcessEvent(vEvent); + (void)HandleWindowEvent(vEvent); *pbMayCreate = true; return true; } // end of wxWindowOS2::HandleCreate @@ -3038,7 +3032,7 @@ bool wxWindowOS2::HandleDestroy() { wxWindowDestroyEvent vEvent((wxWindow*)this); vEvent.SetId(GetId()); - (void)GetEventHandler()->ProcessEvent(vEvent); + (void)HandleWindowEvent(vEvent); // // Delete our drop target if we've got one @@ -3077,7 +3071,7 @@ bool wxWindowOS2::HandleActivate( ,m_windowId ); vEvent.SetEventObject(this); - return GetEventHandler()->ProcessEvent(vEvent); + return HandleWindowEvent(vEvent); } // end of wxWindowOS2::HandleActivate bool wxWindowOS2::HandleSetFocus( WXHWND WXUNUSED(hWnd) ) @@ -3087,7 +3081,7 @@ bool wxWindowOS2::HandleSetFocus( WXHWND WXUNUSED(hWnd) ) // purposes that we got it // wxChildFocusEvent vEventFocus((wxWindow *)this); - (void)GetEventHandler()->ProcessEvent(vEventFocus); + (void)HandleWindowEvent(vEventFocus); #if wxUSE_CARET // @@ -3111,7 +3105,7 @@ bool wxWindowOS2::HandleSetFocus( WXHWND WXUNUSED(hWnd) ) wxFocusEvent vEvent(wxEVT_SET_FOCUS, m_windowId); vEvent.SetEventObject(this); - return GetEventHandler()->ProcessEvent(vEvent); + return HandleWindowEvent(vEvent); } // end of wxWindowOS2::HandleSetFocus bool wxWindowOS2::HandleKillFocus( WXHWND hWnd ) @@ -3158,7 +3152,7 @@ bool wxWindowOS2::HandleKillFocus( WXHWND hWnd ) // wxFindWinFromHandle() may return NULL, it is ok // vEvent.SetWindow(wxFindWinFromHandle(hWnd)); - return GetEventHandler()->ProcessEvent(vEvent); + return HandleWindowEvent(vEvent); } // end of wxWindowOS2::HandleKillFocus // --------------------------------------------------------------------------- @@ -3173,7 +3167,7 @@ bool wxWindowOS2::HandleShow( wxShowEvent vEvent(GetId(), bShow); vEvent.SetEventObject(this); - return GetEventHandler()->ProcessEvent(vEvent); + return HandleWindowEvent(vEvent); } // end of wxWindowOS2::HandleShow bool wxWindowOS2::HandleInitDialog( WXHWND WXUNUSED(hWndFocus) ) @@ -3181,7 +3175,7 @@ bool wxWindowOS2::HandleInitDialog( WXHWND WXUNUSED(hWndFocus) ) wxInitDialogEvent vEvent(GetId()); vEvent.SetEventObject(this); - return GetEventHandler()->ProcessEvent(vEvent); + return HandleWindowEvent(vEvent); } // end of wxWindowOS2::HandleInitDialog bool wxWindowOS2::HandleEndDrag(WXWPARAM WXUNUSED(wParam)) @@ -3208,7 +3202,7 @@ bool wxWindowOS2::OS2OnDrawItem( int vId, WXDRAWITEMSTRUCT* pItemStruct ) { #if wxUSE_OWNER_DRAWN - wxDC vDc; + wxClientDC vDc(this); #if wxUSE_MENUS_NATIVE // @@ -3227,8 +3221,10 @@ bool wxWindowOS2::OS2OnDrawItem( int vId, ,pMeasureStruct->rclItem.xRight - pMeasureStruct->rclItem.xLeft ,pMeasureStruct->rclItem.yTop - pMeasureStruct->rclItem.yBottom ); - vDc.SetHDC( hDC, false ); - vDc.SetHPS( pMeasureStruct->hps ); + + wxPMDCImpl *impl = (wxPMDCImpl*) vDc.GetImpl(); + impl->SetHDC( hDC, false ); + impl->SetHPS( pMeasureStruct->hps ); // // Load the wxWidgets Pallete and set to RGB mode // @@ -3418,7 +3414,7 @@ bool wxWindowOS2::HandleSysColorChange() wxSysColourChangedEvent vEvent; vEvent.SetEventObject(this); - return GetEventHandler()->ProcessEvent(vEvent); + return HandleWindowEvent(vEvent); } // end of wxWindowOS2::HandleSysColorChange bool wxWindowOS2::HandleCtlColor( WXHBRUSH* WXUNUSED(phBrush) ) @@ -3451,7 +3447,7 @@ bool wxWindowOS2::HandlePaletteChanged() vEvent.SetEventObject(this); vEvent.SetChangedWindow(wxFindWinFromHandle(hWndPalChange)); - return GetEventHandler()->ProcessEvent(vEvent); + return HandleWindowEvent(vEvent); } // end of wxWindowOS2::HandlePaletteChanged // @@ -3475,7 +3471,7 @@ void wxWindowOS2::OnSysColourChanged( wxSysColourChangedEvent vEvent; rEvent.SetEventObject(pWin); - pWin->GetEventHandler()->ProcessEvent(vEvent); + pWin->HandleWindowEvent(vEvent); } node = node->GetNext(); } @@ -3489,7 +3485,7 @@ void wxWindow::OnPaint ( wxPaintEvent& rEvent ) { - HDC hDC = (HDC)wxPaintDC::FindDCInCache((wxWindow*) rEvent.GetEventObject()); + HDC hDC = (HDC)wxPaintDCImpl::FindDCInCache((wxWindow*) rEvent.GetEventObject()); if (hDC != 0) { @@ -3560,7 +3556,7 @@ bool wxWindowOS2::HandlePaint() m_updateRegion = wxRegion(hRgn, hPS); vEvent.SetEventObject(this); - bProcessed = GetEventHandler()->ProcessEvent(vEvent); + bProcessed = HandleWindowEvent(vEvent); if (!bProcessed && IsKindOf(CLASSINFO(wxPanel)) && @@ -3674,25 +3670,26 @@ bool wxWindowOS2::HandleEraseBkgnd( WXHDC hDC ) if (vSwp.fl & SWP_MINIMIZE) return true; - wxDC vDC; - - vDC.m_hPS = (HPS)hDC; // this is really a PS - vDC.SetWindow((wxWindow*)this); + wxClientDC vDC(this); + wxPMDCImpl *impl = (wxPMDCImpl*) vDC.GetImpl(); + impl->SetHDC(hDC); + impl->SetHPS((HPS)hDC); // this is really a PS wxEraseEvent vEvent(m_windowId, &vDC); vEvent.SetEventObject(this); - rc = GetEventHandler()->ProcessEvent(vEvent); + rc = HandleWindowEvent(vEvent); - vDC.m_hPS = NULLHANDLE; + impl->SetHPS(NULLHANDLE); return true; } // end of wxWindowOS2::HandleEraseBkgnd void wxWindowOS2::OnEraseBackground(wxEraseEvent& rEvent) { RECTL vRect; - HPS hPS = rEvent.GetDC()->GetHPS(); + wxPMDCImpl *impl = (wxPMDCImpl*) rEvent.GetDC()->GetImpl(); + HPS hPS = impl->GetHPS(); APIRET rc; LONG lColor = m_backgroundColour.GetPixel(); @@ -3709,7 +3706,7 @@ bool wxWindowOS2::HandleMinimize() wxIconizeEvent vEvent(m_windowId); vEvent.SetEventObject(this); - return GetEventHandler()->ProcessEvent(vEvent); + return HandleWindowEvent(vEvent); } // end of wxWindowOS2::HandleMinimize bool wxWindowOS2::HandleMaximize() @@ -3717,7 +3714,7 @@ bool wxWindowOS2::HandleMaximize() wxMaximizeEvent vEvent(m_windowId); vEvent.SetEventObject(this); - return GetEventHandler()->ProcessEvent(vEvent); + return HandleWindowEvent(vEvent); } // end of wxWindowOS2::HandleMaximize bool wxWindowOS2::HandleMove( int nX, int nY ) @@ -3726,7 +3723,7 @@ bool wxWindowOS2::HandleMove( int nX, int nY ) wxMoveEvent vEvent(pt, m_windowId); vEvent.SetEventObject(this); - return GetEventHandler()->ProcessEvent(vEvent); + return HandleWindowEvent(vEvent); } // end of wxWindowOS2::HandleMove bool wxWindowOS2::HandleSize( int nWidth, @@ -3737,7 +3734,7 @@ bool wxWindowOS2::HandleSize( int nWidth, wxSizeEvent vEvent(sz, m_windowId); vEvent.SetEventObject(this); - return GetEventHandler()->ProcessEvent(vEvent); + return HandleWindowEvent(vEvent); } // end of wxWindowOS2::HandleSize bool wxWindowOS2::HandleGetMinMaxInfo( PSWP pSwp ) @@ -3882,7 +3879,7 @@ bool wxWindowOS2::HandleMouseEvent( WXUINT uMsg, ,uFlags ); - bProcessed = GetEventHandler()->ProcessEvent(vEvent); + bProcessed = HandleWindowEvent(vEvent); if (!bProcessed) { HPOINTER hCursor = (HPOINTER)GetCursor().GetHCURSOR(); @@ -3916,7 +3913,7 @@ bool wxWindowOS2::HandleMouseMove( int nX, ,uFlags ); - (void)GetEventHandler()->ProcessEvent(vEvent); + (void)HandleWindowEvent(vEvent); } return HandleMouseEvent( WM_MOUSEMOVE ,nX @@ -4038,7 +4035,7 @@ bool wxWindowOS2::HandleChar( WXWPARAM WXUNUSED(wParam), vEvent.m_controlDown = true; } - return (GetEventHandler()->ProcessEvent(vEvent)); + return (HandleWindowEvent(vEvent)); } bool wxWindowOS2::HandleKeyDown( WXWPARAM wParam, @@ -4062,7 +4059,7 @@ bool wxWindowOS2::HandleKeyDown( WXWPARAM wParam, ,(MPARAM)wParam )); - if (GetEventHandler()->ProcessEvent(vEvent)) + if (HandleWindowEvent(vEvent)) { return true; } @@ -4091,7 +4088,7 @@ bool wxWindowOS2::HandleKeyUp( WXWPARAM wParam, ,(MPARAM)wParam )); - if (GetEventHandler()->ProcessEvent(vEvent)) + if (HandleWindowEvent(vEvent)) return true; } return false; @@ -4157,7 +4154,7 @@ bool wxWindowOS2::OS2OnScroll( int nOrientation, default: return false; } - return GetEventHandler()->ProcessEvent(vEvent); + return HandleWindowEvent(vEvent); } // end of wxWindowOS2::OS2OnScroll //