X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/430974f8c443dcbe1616a85238ead7db5fb88e43..8b49ecd77ad6163ffc378c01b7bb9e1ce152c8dd:/src/os2/button.cpp diff --git a/src/os2/button.cpp b/src/os2/button.cpp index 1a7ab387c0..397ee99eda 100644 --- a/src/os2/button.cpp +++ b/src/os2/button.cpp @@ -13,6 +13,7 @@ #include "wx/wxprec.h" #ifndef WX_PRECOMP + #include "wx/app.h" #include "wx/button.h" #include "wx/brush.h" #include "wx/panel.h" @@ -46,9 +47,7 @@ bool wxButton::Create( , const wxPoint& rPos , const wxSize& rSize , long lStyle -#if wxUSE_VALIDATORS , const wxValidator& rValidator -#endif , const wxString& rsName ) { @@ -162,13 +161,19 @@ wxSize wxButton::DoGetBestSize() const // nHeightButton += nHeightChar/1.5; - wxSize vSize = GetDefaultSize(); + if (!HasFlag(wxBU_EXACTFIT)) + { + wxSize vSize = GetDefaultSize(); - if (nWidthButton > vSize.x) - vSize.x = nWidthButton; - if (nHeightButton > vSize.y) - vSize.y = nHeightButton; - return vSize; + if (nWidthButton > vSize.x) + vSize.x = nWidthButton; + if (nHeightButton > vSize.y) + vSize.y = nHeightButton; + return vSize; + } + return wxSize( nWidthButton + ,nHeightButton + ); } // end of wxButton::DoGetBestSize /* static */ @@ -228,9 +233,13 @@ void wxButton::SetDefault() // Set this one as the default button both for wxWindows and Windows // wxWindow* pWinOldDefault = pParent->SetDefaultItem(this); - UpdateDefaultStyle( this - ,pWinOldDefault - ); + + SetDefaultStyle( wxDynamicCast(pWinOldDefault, wxButton) + ,FALSE + ); + SetDefaultStyle( this + ,TRUE + ); } // end of wxButton::SetDefault void wxButton::SetTmpDefault() @@ -240,14 +249,14 @@ void wxButton::SetTmpDefault() wxCHECK_RET( pParent, _T("button without parent?") ); wxWindow* pWinOldDefault = pParent->GetDefaultItem(); + pParent->SetTmpDefaultItem(this); - if (pWinOldDefault != this) - { - UpdateDefaultStyle( this - ,pWinOldDefault - ); - } - //else: no styles to update + SetDefaultStyle( wxDynamicCast(pWinOldDefault, wxButton) + ,FALSE + ); + SetDefaultStyle( this + ,TRUE + ); } // end of wxButton::SetTmpDefault void wxButton::UnsetTmpDefault() @@ -260,47 +269,60 @@ void wxButton::UnsetTmpDefault() wxWindow* pWinOldDefault = pParent->GetDefaultItem(); - if (pWinOldDefault != this) - { - UpdateDefaultStyle( pWinOldDefault - ,this - ); - } - //else: we had been default before anyhow + SetDefaultStyle( this + ,FALSE + ); + SetDefaultStyle( wxDynamicCast(pWinOldDefault, wxButton) + ,TRUE + ); } // end of wxButton::UnsetTmpDefault -void wxButton::UpdateDefaultStyle( - wxWindow* pWinDefault -, wxWindow* pWinOldDefault) +void wxButton::SetDefaultStyle( + wxButton* pBtn +, bool bOn +) { - wxButton* pBtnOldDefault = wxDynamicCast(pWinOldDefault, wxButton); long lStyle; + // + // We may be called with NULL pointer -- simpler to do the check here than + // in the caller which does wxDynamicCast() + // + if (!pBtn) + return; + + // + // First, let DefDlgProc() know about the new default button + // + if (bOn) + { + if (!wxTheApp->IsActive()) + return; - if ( pBtnOldDefault && pBtnOldDefault != pWinDefault ) + // + // In OS/2 the dialog/panel doesn't really know it has a default + // button, the default button simply has that style. We'll just + // simulate by setting focus to it + // + pBtn->SetFocus(); + } + lStyle = ::WinQueryWindowULong(GetHwndOf(pBtn), QWL_STYLE); + if (!(lStyle & BS_DEFAULT) == bOn) { - lStyle = ::WinQueryWindowULong(GetHwndOf(pBtnOldDefault), QWL_STYLE); if ((lStyle & BS_USERBUTTON) != BS_USERBUTTON) { - lStyle &= ~BS_DEFAULT; - ::WinSetWindowULong(GetHwndOf(pBtnOldDefault), QWL_STYLE, lStyle); + if (bOn) + lStyle | BS_DEFAULT; + else + lStyle &= ~BS_DEFAULT; + ::WinSetWindowULong(GetHwndOf(pBtn), QWL_STYLE, lStyle); } else { - // redraw the button - it will notice itself that it's not the + // + // Redraw the button - it will notice itself that it's not the // default one any longer - pBtnOldDefault->Refresh(); - } - } - - wxButton* pBtnDefault = wxDynamicCast(pWinDefault, wxButton); - - if (pBtnDefault) - { - lStyle = ::WinQueryWindowULong(GetHwndOf(pBtnDefault), QWL_STYLE); - if ((lStyle & BS_USERBUTTON) != BS_USERBUTTON) - { - lStyle != BS_DEFAULT; - ::WinSetWindowULong(GetHwndOf(pBtnDefault), QWL_STYLE, lStyle); + // + pBtn->Refresh(); } } } // end of wxButton::UpdateDefaultStyle