X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/df74e2d2510d0bf2e2ae6b888c5948a302a6e0eb..refs/heads/master:/src/msw/combobox.cpp diff --git a/src/msw/combobox.cpp b/src/msw/combobox.cpp index 076f3689ec..cb0885892e 100644 --- a/src/msw/combobox.cpp +++ b/src/msw/combobox.cpp @@ -4,7 +4,6 @@ // Author: Julian Smart // Modified by: // Created: 01/02/97 -// RCS-ID: $Id$ // Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -32,7 +31,7 @@ #include "wx/msw/wrapcctl.h" // include "properly" #include "wx/settings.h" #include "wx/log.h" - // for wxEVT_COMMAND_TEXT_ENTER + // for wxEVT_TEXT_ENTER #include "wx/textctrl.h" #include "wx/app.h" #include "wx/brush.h" @@ -234,7 +233,7 @@ bool wxComboBox::MSWProcessEditMsg(WXUINT msg, WXWPARAM wParam, WXLPARAM lParam) if (SendMessage(GetHwnd(), CB_GETDROPPEDSTATE, 0, 0)) return false; - wxCommandEvent event(wxEVT_COMMAND_TEXT_ENTER, m_windowId); + wxCommandEvent event(wxEVT_TEXT_ENTER, m_windowId); const int sel = GetSelection(); event.SetInt(sel); @@ -274,26 +273,27 @@ bool wxComboBox::MSWCommand(WXUINT param, WXWORD id) case CBN_DROPDOWN: // remember the last selection, just as wxChoice does m_lastAcceptedSelection = GetCurrentSelection(); - if ( m_lastAcceptedSelection == -1 ) { - // but unlike with wxChoice we may have no selection but still - // have some text and we should avoid erasing it if the drop - // down is cancelled (see #8474) - m_lastAcceptedSelection = wxID_NONE; - } - { - wxCommandEvent event(wxEVT_COMMAND_COMBOBOX_DROPDOWN, GetId()); + wxCommandEvent event(wxEVT_COMBOBOX_DROPDOWN, GetId()); event.SetEventObject(this); ProcessCommand(event); } break; + case CBN_CLOSEUP: + // Do the same thing as in wxChoice but using different event type. + if ( m_pendingSelection != wxID_NONE ) { - wxCommandEvent event(wxEVT_COMMAND_COMBOBOX_CLOSEUP, GetId()); + SendSelectionChangedEvent(wxEVT_COMBOBOX); + m_pendingSelection = wxID_NONE; + } + { + wxCommandEvent event(wxEVT_COMBOBOX_CLOSEUP, GetId()); event.SetEventObject(this); ProcessCommand(event); } break; + case CBN_SELENDOK: #ifndef __SMARTPHONE__ // we need to reset this to prevent the selection from being undone @@ -311,23 +311,16 @@ bool wxComboBox::MSWCommand(WXUINT param, WXWORD id) // could get a wrong value when it calls our GetValue() ::SetWindowText(GetHwnd(), value.t_str()); - { - wxCommandEvent event(wxEVT_COMMAND_COMBOBOX_SELECTED, GetId()); - event.SetInt(sel); - event.SetString(value); - InitCommandEventWithItems(event, sel); + SendSelectionChangedEvent(wxEVT_COMBOBOX); - ProcessCommand(event); - } - - // fall through: for compability with wxGTK, also send the text + // fall through: for compatibility with wxGTK, also send the text // update event when the selection changes (this also seems more // logical as the text does change) case CBN_EDITCHANGE: if ( m_allowTextEvents ) { - wxCommandEvent event(wxEVT_COMMAND_TEXT_UPDATED, GetId()); + wxCommandEvent event(wxEVT_TEXT, GetId()); // if sel != -1, value was already initialized above if ( sel == -1 ) @@ -377,9 +370,13 @@ bool wxComboBox::MSWShouldPreProcessMessage(WXMSG *pMsg) WXHWND wxComboBox::GetEditHWNDIfAvailable() const { + // FIXME-VC6: Only VC6 needs this guard, see WINVER definition in + // include/wx/msw/wrapwin.h +#if defined(WINVER) && WINVER >= 0x0500 WinStruct info; if ( MSWGetComboBoxInfo(&info) ) return info.hwndItem; +#endif // WINVER >= 0x0500 if (HasFlag(wxCB_SIMPLE)) { @@ -661,4 +658,20 @@ bool wxComboBox::SetHint(const wxString& hintOrig) #endif // wxUSE_UXTHEME +wxSize wxComboBox::DoGetSizeFromTextSize(int xlen, int ylen) const +{ + wxSize tsize( wxChoice::DoGetSizeFromTextSize(xlen, ylen) ); + + if ( !HasFlag(wxCB_READONLY) ) + { + // Add the margins we have previously set + wxPoint marg( GetMargins() ); + marg.x = wxMax(0, marg.x); + marg.y = wxMax(0, marg.y); + tsize.IncBy( marg ); + } + + return tsize; +} + #endif // wxUSE_COMBOBOX