X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/8e372bbe071de49935a1a7a910a1b268231de69e..d9359369af901bf2146b5ad6575f7aae13389a15:/src/os2/window.cpp diff --git a/src/os2/window.cpp b/src/os2/window.cpp index 61dd62db31..c1ec1c18f6 100644 --- a/src/os2/window.cpp +++ b/src/os2/window.cpp @@ -295,7 +295,6 @@ void wxWindowOS2::Init() m_bUseCtl3D = false; m_bMouseInWindow = false; m_bLastKeydownProcessed = false; - m_pChildrenDisabled = NULL; // // wxWnd @@ -357,7 +356,6 @@ wxWindowOS2::~wxWindowOS2() // wxRemoveHandleAssociation(this); } - delete m_pChildrenDisabled; } // end of wxWindowOS2::~wxWindowOS2 // real construction (Init() must have been called before!) @@ -479,70 +477,12 @@ wxWindow* wxWindowBase::DoFindFocus() return NULL; } // wxWindowBase::DoFindFocus -bool wxWindowOS2::Enable( bool bEnable ) +void wxWindowOS2::DoEnable( bool bEnable ) { - if (!wxWindowBase::Enable(bEnable)) - return false; - HWND hWnd = GetHwnd(); - if ( hWnd ) ::WinEnableWindow(hWnd, (BOOL)bEnable); - - // - // The logic below doesn't apply to the top level windows -- otherwise - // showing a modal dialog would result in total greying out (and ungreying - // out later) of everything which would be really ugly - // - if (IsTopLevel()) - return true; - - wxWindowList::compatibility_iterator node = GetChildren().GetFirst(); - - while (node) - { - wxWindow* pChild = node->GetData(); - - if (bEnable) - { - // - // Enable the child back unless it had been disabled before us - // - if (!m_pChildrenDisabled || !m_pChildrenDisabled->Find(pChild)) - pChild->Enable(); - } - else // we're being disabled - { - if (pChild->IsEnabled()) - { - // - // Disable it as children shouldn't stay enabled while the - // parent is not - // - pChild->Disable(); - } - else // child already disabled, remember it - { - // - // Have we created the list of disabled children already? - // - if (!m_pChildrenDisabled) - m_pChildrenDisabled = new wxWindowList; - m_pChildrenDisabled->Append(pChild); - } - } - node = node->GetNext(); - } - if (bEnable && m_pChildrenDisabled) - { - // - // We don't need this list any more, don't keep unused memory - // - delete m_pChildrenDisabled; - m_pChildrenDisabled = NULL; - } - return true; -} // end of wxWindowOS2::Enable +} bool wxWindowOS2::Show( bool bShow ) { @@ -572,7 +512,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 @@ -1142,7 +1082,7 @@ void wxWindowOS2::OnIdle( ,vPoint.y ,nState ); - (void)GetEventHandler()->ProcessEvent(rEvent); + (void)HandleWindowEvent(rEvent); } } if (wxUpdateUIEvent::CanUpdate(this)) @@ -1680,7 +1620,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 // --------------------------------------------------------------------------- @@ -1733,7 +1673,6 @@ void wxWindowOS2::GetTextExtent( const wxString& rString, int l; FONTMETRICS vFM; // metrics structure BOOL bRc = FALSE; - char* pStr; HPS hPS; hPS = ::WinGetPS(GetHwnd()); @@ -1741,14 +1680,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 ); @@ -1867,7 +1804,6 @@ bool wxWindowOS2::DoPopupMenu( wxMenu* pMenu, int nX, int nY ) DoGetSize(0,&nHeight); nY = nHeight - nY; } - wxCurrentPopupMenu = pMenu; ::WinPopupMenu( hWndParent ,hWndOwner @@ -1888,7 +1824,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 @@ -2021,9 +1956,13 @@ bool wxWindowOS2::OS2ProcessMessage( WXMSG* pMsg ) } else { - wxButton* pBtn = wxDynamicCast( GetDefaultItem() - ,wxButton - ); + wxTopLevelWindow *tlw = wxDynamicCast(wxGetTopLevelParent(this), wxTopLevelWindow); + wxButton* pBtn = NULL; + + if (tlw) + { + pBtn = wxDynamicCast(tlw->GetDefaultItem(), wxButton); + } if (pBtn && pBtn->IsEnabled()) { @@ -2060,7 +1999,7 @@ bool wxWindowOS2::OS2ProcessMessage( WXMSG* pMsg ) vEvent.SetWindowChange(bWindowChange); vEvent.SetEventObject(this); - if (GetEventHandler()->ProcessEvent(vEvent)) + if (HandleWindowEvent(vEvent)) { wxButton* pBtn = wxDynamicCast(FindFocus(), wxButton); @@ -2414,7 +2353,7 @@ MRESULT wxWindowOS2::OS2WindowProc( WXUINT uMsg, ); if (!pWin->IsOfStandardClass()) { - if (uMsg == WM_BUTTON1DOWN && pWin->AcceptsFocus() ) + if (uMsg == WM_BUTTON1DOWN && pWin->CanAcceptFocus() ) pWin->SetFocus(); } bProcessed = pWin->HandleMouseEvent( uMsg @@ -2637,6 +2576,7 @@ MRESULT wxWindowOS2::OS2WindowProc( WXUINT uMsg, } break; + case CBN_LBSELECT: case BN_CLICKED: // Dups as LN_SELECT and CBN_LBSELECT { HWND hWnd = ::WinWindowFromID((HWND)GetHwnd(), SHORT1FROMMP(wParam)); @@ -2693,11 +2633,19 @@ MRESULT wxWindowOS2::OS2WindowProc( WXUINT uMsg, ,(WXWORD)SHORT1FROMMP(wParam) ); } + if (pWin->IsKindOf(CLASSINFO(wxChoice))) + { + wxChoice* pChoice = wxDynamicCast(pWin, wxChoice); + + pChoice->OS2Command( (WXUINT)SHORT2FROMMP(wParam) + ,(WXWORD)SHORT1FROMMP(wParam) + ); + } return 0; } // break; - case LN_ENTER: /* dups as CBN_EFCHANGE */ + case LN_ENTER: { HWND hWnd = HWNDFROMMP(lParam); wxWindowOS2* pWin = wxFindWinFromHandle(hWnd); @@ -2991,6 +2939,7 @@ bool wxWindowOS2::OS2Create( PSZ zClass, long lControlId = 0L; wxWindowCreationHook vHook(this); wxString sClassName((wxChar*)zClass); + wxString sTitle(zTitle ? zTitle : wxEmptyString); OS2GetCreateWindowCoords( rPos ,rSize @@ -3018,8 +2967,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 @@ -3076,7 +3025,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 @@ -3085,7 +3034,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 @@ -3124,7 +3073,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) ) @@ -3134,7 +3083,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 // @@ -3158,7 +3107,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 ) @@ -3205,7 +3154,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 // --------------------------------------------------------------------------- @@ -3220,7 +3169,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) ) @@ -3228,7 +3177,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)) @@ -3465,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) ) @@ -3498,7 +3447,7 @@ bool wxWindowOS2::HandlePaletteChanged() vEvent.SetEventObject(this); vEvent.SetChangedWindow(wxFindWinFromHandle(hWndPalChange)); - return GetEventHandler()->ProcessEvent(vEvent); + return HandleWindowEvent(vEvent); } // end of wxWindowOS2::HandlePaletteChanged // @@ -3522,7 +3471,7 @@ void wxWindowOS2::OnSysColourChanged( wxSysColourChangedEvent vEvent; rEvent.SetEventObject(pWin); - pWin->GetEventHandler()->ProcessEvent(vEvent); + pWin->HandleWindowEvent(vEvent); } node = node->GetNext(); } @@ -3564,15 +3513,10 @@ bool wxWindowOS2::HandlePaint() wxLogLastError(wxT("CreateRectRgn")); return false; } - // Get all the rectangles from the region, convert the individual // rectangles to "the other" coordinate system and reassemble a // region from the rectangles, to be feed into m_updateRegion. // - // FIXME: This is a bad hack since OS/2 API specifies that rectangles - // passed into GpiSetRegion must not have Bottom > Top, - // however, at first sight, it _seems_ to work nonetheless. - // RGNRECT vRgnData; PRECTL pUpdateRects = NULL; vRgnData.ulDirection = RECTDIR_LFRT_TOPBOT; @@ -3602,18 +3546,17 @@ bool wxWindowOS2::HandlePaint() { int rectHeight; rectHeight = pUpdateRects[i].yTop - pUpdateRects[i].yBottom; - pUpdateRects[i].yTop = height - pUpdateRects[i].yTop; - pUpdateRects[i].yBottom = pUpdateRects[i].yTop + rectHeight; + pUpdateRects[i].yBottom = height - pUpdateRects[i].yTop; + pUpdateRects[i].yTop = pUpdateRects[i].yBottom + rectHeight; } ::GpiSetRegion(hPS, hRgn, vRgnData.crc, pUpdateRects); delete [] pUpdateRects; } } - m_updateRegion = wxRegion(hRgn, hPS); vEvent.SetEventObject(this); - bProcessed = GetEventHandler()->ProcessEvent(vEvent); + bProcessed = HandleWindowEvent(vEvent); if (!bProcessed && IsKindOf(CLASSINFO(wxPanel)) && @@ -3736,7 +3679,7 @@ bool wxWindowOS2::HandleEraseBkgnd( WXHDC hDC ) vEvent.SetEventObject(this); - rc = GetEventHandler()->ProcessEvent(vEvent); + rc = HandleWindowEvent(vEvent); vDC.m_hPS = NULLHANDLE; return true; @@ -3762,7 +3705,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() @@ -3770,7 +3713,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 ) @@ -3779,7 +3722,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, @@ -3790,7 +3733,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 ) @@ -3935,7 +3878,7 @@ bool wxWindowOS2::HandleMouseEvent( WXUINT uMsg, ,uFlags ); - bProcessed = GetEventHandler()->ProcessEvent(vEvent); + bProcessed = HandleWindowEvent(vEvent); if (!bProcessed) { HPOINTER hCursor = (HPOINTER)GetCursor().GetHCURSOR(); @@ -3969,7 +3912,7 @@ bool wxWindowOS2::HandleMouseMove( int nX, ,uFlags ); - (void)GetEventHandler()->ProcessEvent(vEvent); + (void)HandleWindowEvent(vEvent); } return HandleMouseEvent( WM_MOUSEMOVE ,nX @@ -4091,7 +4034,7 @@ bool wxWindowOS2::HandleChar( WXWPARAM WXUNUSED(wParam), vEvent.m_controlDown = true; } - return (GetEventHandler()->ProcessEvent(vEvent)); + return (HandleWindowEvent(vEvent)); } bool wxWindowOS2::HandleKeyDown( WXWPARAM wParam, @@ -4115,7 +4058,7 @@ bool wxWindowOS2::HandleKeyDown( WXWPARAM wParam, ,(MPARAM)wParam )); - if (GetEventHandler()->ProcessEvent(vEvent)) + if (HandleWindowEvent(vEvent)) { return true; } @@ -4144,7 +4087,7 @@ bool wxWindowOS2::HandleKeyUp( WXWPARAM wParam, ,(MPARAM)wParam )); - if (GetEventHandler()->ProcessEvent(vEvent)) + if (HandleWindowEvent(vEvent)) return true; } return false; @@ -4210,7 +4153,7 @@ bool wxWindowOS2::OS2OnScroll( int nOrientation, default: return false; } - return GetEventHandler()->ProcessEvent(vEvent); + return HandleWindowEvent(vEvent); } // end of wxWindowOS2::OS2OnScroll //