]> git.saurik.com Git - wxWidgets.git/blobdiff - src/generic/listctrl.cpp
Fix so OGL can build without wxBuffer
[wxWidgets.git] / src / generic / listctrl.cpp
index d5e1cb9e8e2ef45d1e5f43b1d93762e05ee90ab8..07141e897ec33543ec778a9cd48cfa65a2e981c2 100644 (file)
@@ -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 && 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, "listctrl" ) )
+    if ( !wxControl::Create( parent, id, pos, size, style, validator, name ) )
         return FALSE;
 
     // don't create the inner window with the border