necessarily the window itself) is disabled, new function IsThisEnabled()
with the same behaviour as old IsEnabled() was added.
+- Generating wxNavigationKeyEvent events doesn't work any more under wxGTK (and
+ other platforms in the future), use wxWindow::Navigate() or NavigateIn()
+ instead.
+
Changes in behaviour which may result in compilation errors
-----------------------------------------------------------
- Added wxJoystick::GetButtonState/Position() (Frank C Szczerba)
- Added wxGridUpdateLocker helper class (Evgeniy Tarassov)
- Support wxGRID_AUTOSIZE in wxGrid::SetRow/ColLabelSize() (Evgeniy Tarassov)
+- Added wxWindow::NavigateIn() in addition to existing Navigate()
- Add support for <data> tags to wxrc
wxGTK:
- Native implementation for wxHyperlinkCtrl (Francesco Montorsi)
+- Native keyboard navigation implementation
- Implemented support for underlined fonts in wxStaticText.
- wxTopLevelWindow::SetSizeHints size increments now work.
- wxTopLevelWindow::GetSize() returns the size including the WM decorations.
\texttt{\textsc{TAB}} key, hence the sample name) between different controls.
It shows the use of
\helpref{wxWindow::MoveBeforeInTabOrder()}{wxwindowmovebeforeintaborder} and
-\helpref{MoveAfterInTabOrder()}{wxwindowmoveafterintaborder} methods and of the
-wxNavigationKeyEvent.
+\helpref{MoveAfterInTabOrder()}{wxwindowmoveafterintaborder} methods to change
+the default order of the windows in the navigation chain and of
+\helpref{wxWindow::Navigate()}{wxwindownavigate} for moving focus along this
+chain.
\subsection{Text sample}\label{sampletext}
\func{bool}{Navigate}{\param{int}{ flags = wxNavigationKeyEvent::IsForward}}
-Does keyboard navigation from this window to another, by sending
-a wxNavigationKeyEvent.
+Performs a keyboard navigation action starting from this window. This method is
+equivalent to calling \helpref{NavigateIn()}{wxwindownavigatein} method on the
+parent window.
\wxheading{Parameters}
\docparam{flags}{A combination of wxNavigationKeyEvent::IsForward and wxNavigationKeyEvent::WinChange.}
+\wxheading{Return value}
+
+Returns \true if the focus was moved to another window or \false if nothing
+changed.
+
\wxheading{Remarks}
You may wish to call this from a text control custom keypress handler to do the default
and not navigate to the next control.
+\membersection{wxWindow::NavigateIn}\label{wxwindownavigatein}
+
+\func{bool}{NavigateIn}{\param{int}{ flags = wxNavigationKeyEvent::IsForward}}
+
+Performs a keyboard navigation action inside this window.
+
+See \helpref{Navigate}{wxwindownavigate} for more information.
+
+
\membersection{wxWindow::NextControlId}\label{wxwindownextcontrolid}
\func{static int}{NextControlId}{\param{int }{winid}}
void Init();
virtual void DoMoveInTabOrder(wxWindow *win, MoveKind move);
+ virtual bool DoNavigateIn(int flags);
+
// Copies m_children tab order to GTK focus chain:
void RealizeTabOrder();
#define wxHAS_NATIVE_ENABLED_MANAGEMENT
#endif
+// This is defined when the underlying toolkit handles tab traversal natively
+// (currently this only works under GTK+ 2)
+#ifdef __WXGTK20__
+ #define wxHAS_NATIVE_TAB_TRAVERSAL
+#endif
+
// ----------------------------------------------------------------------------
// forward declarations
// ----------------------------------------------------------------------------
bool CanAcceptFocusFromKeyboard() const
{ return AcceptsFocusFromKeyboard() && CanAcceptFocus(); }
- // navigates in the specified direction by sending a wxNavigationKeyEvent
- virtual bool Navigate(int flags = wxNavigationKeyEvent::IsForward);
+ // navigates inside this window
+ bool NavigateIn(int flags = wxNavigationKeyEvent::IsForward)
+ { return DoNavigateIn(flags); }
+
+ // navigates in the specified direction from this window, this is
+ // equivalent to GetParent()->NavigateIn()
+ bool Navigate(int flags = wxNavigationKeyEvent::IsForward)
+ { return m_parent && ((wxWindowBase *)m_parent)->DoNavigateIn(flags); }
// move this window just before/after the specified one in tab order
// (the other window must be our sibling!)
};
virtual void DoMoveInTabOrder(wxWindow *win, MoveKind move);
+ // implementation of Navigate() and NavigateIn()
+ virtual bool DoNavigateIn(int flags);
+
+
#if wxUSE_CONSTRAINTS
// satisfy the constraints for the windows but don't set the window sizes
void SatisfyConstraints();
// keyboard navigation
// ----------------------------------------------------------------------------
-// Navigates in the specified direction.
-bool wxWindowBase::Navigate(int flags)
+// Navigates in the specified direction inside this window
+bool wxWindowBase::DoNavigateIn(int flags)
{
+#ifdef wxHAS_NATIVE_TAB_TRAVERSAL
+ // native code doesn't process our wxNavigationKeyEvents anyhow
+ return false;
+#else // !wxHAS_NATIVE_TAB_TRAVERSAL
wxNavigationKeyEvent eventNav;
eventNav.SetFlags(flags);
- eventNav.SetEventObject(this);
- if ( GetParent()->GetEventHandler()->ProcessEvent(eventNav) )
- {
- return true;
- }
- return false;
+ eventNav.SetEventObject(FindFocus());
+ return GetEventHandler()->ProcessEvent(eventNav);
+#endif // wxHAS_NATIVE_TAB_TRAVERSAL/!wxHAS_NATIVE_TAB_TRAVERSAL
}
void wxWindowBase::DoMoveInTabOrder(wxWindow *win, MoveKind move)
wxapp_install_idle_handler();
}
+bool wxWindowGTK::DoNavigateIn(int flags)
+{
+ if ( flags & wxNavigationKeyEvent::WinChange )
+ {
+ wxFAIL_MSG( _T("not implemented") );
+
+ return false;
+ }
+ else // navigate inside the container
+ {
+ wxWindow *parent = wxGetTopLevelParent(this);
+ wxCHECK_MSG( parent, false, _T("every window must have a TLW parent") );
+
+ GtkDirectionType dir;
+ dir = flags & wxNavigationKeyEvent::IsForward ? GTK_DIR_TAB_FORWARD
+ : GTK_DIR_TAB_BACKWARD;
+
+ gboolean rc;
+ g_signal_emit_by_name(parent->m_widget, "focus", dir, &rc);
+
+ return rc == TRUE;
+ }
+}
+
bool wxWindowGTK::GTKWidgetNeedsMnemonic() const
{
// none needed by default