containers don't always accept focus (patch 718913)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@20134 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -69,6 +69,9 @@ public:
|
|||||||
// the focus and the default processing should take place
|
// the focus and the default processing should take place
|
||||||
bool DoSetFocus();
|
bool DoSetFocus();
|
||||||
|
|
||||||
|
// can our child get the focus?
|
||||||
|
bool AcceptsFocus() const;
|
||||||
|
|
||||||
// called from OnChildFocus() handler, i.e. when one of our (grand)
|
// called from OnChildFocus() handler, i.e. when one of our (grand)
|
||||||
// children gets the focus
|
// children gets the focus
|
||||||
void SetLastFocus(wxWindow *win);
|
void SetLastFocus(wxWindow *win);
|
||||||
@@ -111,6 +114,7 @@ public: \
|
|||||||
virtual wxWindow *GetDefaultItem() const; \
|
virtual wxWindow *GetDefaultItem() const; \
|
||||||
virtual wxWindow *SetDefaultItem(wxWindow *child); \
|
virtual wxWindow *SetDefaultItem(wxWindow *child); \
|
||||||
virtual void SetTmpDefaultItem(wxWindow *win); \
|
virtual void SetTmpDefaultItem(wxWindow *win); \
|
||||||
|
virtual bool AcceptsFocus() const; \
|
||||||
\
|
\
|
||||||
protected: \
|
protected: \
|
||||||
wxControlContainer m_container
|
wxControlContainer m_container
|
||||||
@@ -164,6 +168,10 @@ void classname::OnChildFocus(wxChildFocusEvent& event) \
|
|||||||
void classname::OnFocus(wxFocusEvent& event) \
|
void classname::OnFocus(wxFocusEvent& event) \
|
||||||
{ \
|
{ \
|
||||||
m_container.HandleOnFocus(event); \
|
m_container.HandleOnFocus(event); \
|
||||||
|
} \
|
||||||
|
bool classname::AcceptsFocus() const \
|
||||||
|
{ \
|
||||||
|
return m_container.AcceptsFocus(); \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -49,6 +49,28 @@ wxControlContainer::wxControlContainer(wxWindow *winParent)
|
|||||||
m_winDefault = NULL;
|
m_winDefault = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool wxControlContainer::AcceptsFocus() const
|
||||||
|
{
|
||||||
|
// We can accept focus only when at last one child will accept focus
|
||||||
|
if ( m_winParent->IsShown() && m_winParent->IsEnabled() )
|
||||||
|
{
|
||||||
|
wxWindowList::Node *node = m_winParent->GetChildren().GetFirst();
|
||||||
|
while ( node )
|
||||||
|
{
|
||||||
|
wxWindow *child = node->GetData();
|
||||||
|
|
||||||
|
if ( child->AcceptsFocus() )
|
||||||
|
{
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
node = node->GetNext();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
void wxControlContainer::SetLastFocus(wxWindow *win)
|
void wxControlContainer::SetLastFocus(wxWindow *win)
|
||||||
{
|
{
|
||||||
// the panel itself should never get the focus at all but if it does happen
|
// the panel itself should never get the focus at all but if it does happen
|
||||||
@@ -386,3 +408,4 @@ bool wxSetFocusToChild(wxWindow *win, wxWindow **childLastFocused)
|
|||||||
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user