]> git.saurik.com Git - wxWidgets.git/commitdiff
Fix focus handling logic in generic wxListCtrl.
authorVadim Zeitlin <vadim@wxwidgets.org>
Thu, 29 Mar 2012 00:10:53 +0000 (00:10 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Thu, 29 Mar 2012 00:10:53 +0000 (00:10 +0000)
Don't override SetFocus() to set the focus to the main window, this isn't
enough as we can be given the focus by the underlying toolkit itself, without
our SetFocus() being called -- this happened in wxGTK when focus was changed
from the keyboard using TAB and in this case it didn't get to the main window
but remaining on the wxListCtrl itself meaning that keyboard input wasn't
processed at all.

Use wxNavigationEnabled<> now to ensure that OnSetFocus() and related methods
do the right thing instead now.

Also get rid of OnSetFocus() in wxListHeaderWindow, it's better to override
AcceptsFocus() to return false to avoid getting focus in the first place.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@71039 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/generic/listctrl.h
include/wx/generic/private/listctrl.h
src/generic/listctrl.cpp

index 4117b7a9d1c25dcf4ecb8f7f876ffda0cfd969d0..b34315b4f139a3f2443dfe6b414e51c4216fdaa6 100644 (file)
@@ -11,6 +11,7 @@
 #ifndef _WX_GENERIC_LISTCTRL_H_
 #define _WX_GENERIC_LISTCTRL_H_
 
+#include "wx/containr.h"
 #include "wx/scrolwin.h"
 #include "wx/textctrl.h"
 
@@ -29,7 +30,7 @@ class WXDLLIMPEXP_FWD_CORE wxListMainWindow;
 // wxListCtrl
 //-----------------------------------------------------------------------------
 
-class WXDLLIMPEXP_CORE wxGenericListCtrl: public wxListCtrlBase,
+class WXDLLIMPEXP_CORE wxGenericListCtrl: public wxNavigationEnabled<wxListCtrlBase>,
                                           public wxScrollHelper
 {
 public:
@@ -188,7 +189,6 @@ public:
 #endif
 
     virtual bool ShouldInheritColours() const { return false; }
-    virtual void SetFocus();
 
     // implementation
     // --------------
index 8b4a3db082ed6e1a42564aedcf33c28ca6655e62..e39de04dbf5e39921f46c55cf65a4fb01d3f651f 100644 (file)
@@ -346,12 +346,14 @@ public:
 
     virtual ~wxListHeaderWindow();
 
+    // We never need focus as we don't have any keyboard interface.
+    virtual bool AcceptsFocus() const { return false; }
+
     void DrawCurrent();
     void AdjustDC( wxDC& dc );
 
     void OnPaint( wxPaintEvent &event );
     void OnMouse( wxMouseEvent &event );
-    void OnSetFocus( wxFocusEvent &event );
 
     // needs refresh
     bool m_dirty;
index 2b1a22df1e96a506c42e965bcc391c2d3bcd9fe5..834eac9ac3f49c2350b5da6409fbc82e207617d5 100644 (file)
@@ -934,7 +934,6 @@ void wxListLineData::ReverseHighlight( void )
 BEGIN_EVENT_TABLE(wxListHeaderWindow,wxWindow)
     EVT_PAINT         (wxListHeaderWindow::OnPaint)
     EVT_MOUSE_EVENTS  (wxListHeaderWindow::OnMouse)
-    EVT_SET_FOCUS     (wxListHeaderWindow::OnSetFocus)
 END_EVENT_TABLE()
 
 void wxListHeaderWindow::Init()
@@ -1341,12 +1340,6 @@ void wxListHeaderWindow::OnMouse( wxMouseEvent &event )
     }
 }
 
-void wxListHeaderWindow::OnSetFocus( wxFocusEvent &WXUNUSED(event) )
-{
-    m_owner->SetFocus();
-    m_owner->Update();
-}
-
 bool wxListHeaderWindow::SendListEvent(wxEventType type, const wxPoint& pos)
 {
     wxWindow *parent = GetParent();
@@ -5154,14 +5147,6 @@ void wxGenericListCtrl::DoScreenToClient( int *x, int *y ) const
         wxListCtrlBase::DoScreenToClient(x, y);
 }
 
-void wxGenericListCtrl::SetFocus()
-{
-    // The test in window.cpp fails as we are a composite
-    // window, so it checks against "this", but not m_mainWin.
-    if ( DoFindFocus() != this )
-        m_mainWin->SetFocus();
-}
-
 wxSize wxGenericListCtrl::DoGetBestClientSize() const
 {
     // Something is better than nothing even if this is completely arbitrary.