X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f16ba4e6fa93326578e347047f81fb4c1b237c22..e941874b17aa0393d8145c94587ad549eb127ea8:/src/generic/listctrl.cpp diff --git a/src/generic/listctrl.cpp b/src/generic/listctrl.cpp index 76b34f650b..4ec58a8c93 100644 --- a/src/generic/listctrl.cpp +++ b/src/generic/listctrl.cpp @@ -626,6 +626,8 @@ public: // suspend/resume redrawing the control void Freeze(); void Thaw(); + + void SetFocus(); void OnRenameTimer(); void OnRenameAccept(); @@ -2158,7 +2160,7 @@ void wxListTextCtrl::OnChar( wxKeyEvent &event ) m_owner->OnRenameAccept(); m_finished = TRUE; - m_owner->SetFocus(); // This doesn't work. TODO. + m_owner->SetFocus(); return; } @@ -2171,7 +2173,7 @@ void wxListTextCtrl::OnChar( wxKeyEvent &event ) wxPendingDelete.Append(this); m_finished = TRUE; - m_owner->SetFocus(); // This doesn't work. TODO. + m_owner->SetFocus(); return; } @@ -2192,7 +2194,7 @@ void wxListTextCtrl::OnKeyUp( wxKeyEvent &event ) wxPoint myPos = GetPosition(); wxSize mySize = GetSize(); int sx, sy; - GetTextExtent(GetValue() + _T("M"), &sx, &sy); // FIXME: MM?? + GetTextExtent(GetValue() + _T("MM"), &sx, &sy); if (myPos.x + sx > parentSize.x) sx = parentSize.x - myPos.x; if (mySize.x > sx) @@ -3428,6 +3430,26 @@ void wxListMainWindow::OnChar( wxKeyEvent &event ) extern wxWindow *g_focusWindow; #endif +void wxListMainWindow::SetFocus() +{ + // VS: wxListMainWindow derives from wxPanel (via wxScrolledWindow) and wxPanel + // overrides SetFocus in such way that it does never change focus from + // panel's child to the panel itself. Unfortunately, we must be able to change + // focus to the panel from wxListTextCtrl because the text control should + // disappear when the user clicks outside it. + + wxWindow *oldFocus = FindFocus(); + + if ( oldFocus->GetParent() == this ) + { + wxWindow::SetFocus(); + } + else + { + wxScrolledWindow::SetFocus(); + } +} + void wxListMainWindow::OnSetFocus( wxFocusEvent &WXUNUSED(event) ) { // wxGTK sends us EVT_SET_FOCUS events even if we had never got @@ -4581,7 +4603,7 @@ bool wxListCtrl::Create(wxWindow *parent, style = style | wxLC_LIST; } - if ( !wxControl::Create( parent, id, pos, size, style, validator, name ) ) + if ( !wxControl::Create( parent, id, pos, size, style, validator, "listctrl" ) ) return FALSE; // don't create the inner window with the border