Commit Graph

93 Commits

Author SHA1 Message Date
PB
f57f214122 Remove BCC-specific hdrstop pragma from everywhere 2020-10-12 21:58:37 +02:00
Vadim Zeitlin
808ff104dc Don't compile wxGetSelectedButtonInGroup() if it's unused
Now that this function is static, not using it results in warnings when
building the ports not using it (e.g. wxX11).
2020-09-21 20:37:37 +02:00
Vadim Zeitlin
09060ed262 Move radio group navigation functions to wxRadioButtonBase
Now that this class is not a template any longer, we can have the code
for radio button group navigation directly in it, without making it
inline, so move the existing functions bodies into the new methods and
remove the old functions entirely.

No real changes, this is just a refactoring.
2020-09-21 18:01:47 +02:00
Vadim Zeitlin
1a4f628e40 Make radio button navigation functions const
This requires adding a couple of const_cast<>s in their implementation
in order to still allow them returning non-const wxRadioButton pointers,
but this seems preferable to not being able to call them on a const
wxRadioButton in the first place.
2020-09-21 15:36:41 +02:00
Vadim Zeitlin
b5fb9bd8d6 Compile radio button group navigation functions on all platforms
Previously they were only used, and compiled, on the platforms without
wxHAS_NATIVE_TAB_TRAVERSAL, i.e. were not compiled at all in wxGTK, but
we now need them everywhere as they're used to implement public API.
2020-09-21 15:34:55 +02:00
Vadim Zeitlin
0edc9d7eda Just use wxPrivate namespace
Writing "wxPrivate::wxFoo()" is a bit ugly, so just add a using
directive for the namespace, it's not a problem to do it in this file.
2020-09-21 15:09:38 +02:00
Stefan Csomor
200c1af697 Going private with the implementations
Although they’re still exported of course …
2020-09-17 23:13:44 +02:00
Vadim Zeitlin
724621929d Improve the check for TLW in focus handling code
Use IsTopNavigationDomain() instead of IsTopLevel() to do the right
thing for MDI child frames too.
2020-01-20 12:42:18 +01:00
Vadim Zeitlin
50a6e80be5 Fix checking for the deepest shown window in focus handling code
wxSetFocusToChild() could recurse to the parent TLW, which was clearly
nonsensical as it means that restoring last focus in a dialog could end
up setting it to the parent frame.

Fix this by breaking out of the loop as soon as we reach a TLW.

See #18653.
2020-01-20 00:32:21 +01:00
Vadim Zeitlin
198a4e97a0 Fix wrongly cached state of children focusability under Mac
Remove caching of whether any of the children accept focus in
wxControlContainer as it can change at any moment under Mac, due to full
keyboard access being turned on and off (which can be done using
Ctrl-F7, i.e. easily, and so this might be something users actually do
and not just a theoretical edge case). This also incidentally fixes
caching of the wrong focusability state during window initialization,
when its children are not yet shown, as [NSView canBecomeKeyView:] used
for AcceptsFocusFromKeyboard() implementation under Mac, apparently
always returns false for hidden windows.

The behaviour under the other platforms should remain the same, but
AcceptsFocus() is slower now as it always has to query children instead
of being able to avoid doing it when we know that none of them accepts
focus anyhow. OTOH this only happens to the windows that don't accept
focus themselves and, at least at some moment, don't have any children
accepting focus neither, which should be quite rare and optimizing this
case doesn't seem to be worth the extra code complexity due to extra
preprocessor platform checks.

Closes #18089.
2019-10-26 02:58:29 +02:00
Vadim Zeitlin
8fbca5cb70 Remove all trailing spaces
No real changes, just clean up sources by removing trailing spaces from
all the non-generated files.

This should hopefully avoid future commits mixing significant changes
with insignificant whitespace ones.
2019-01-30 17:35:54 +01:00
Steve Browne
1eea936f8f Properly handle tab navigation for wxRadioBoxes on wxOSX. 2017-06-05 01:17:52 -04:00
Vadim Zeitlin
7f603c959f Move wxPanel::HasTransparentBackground() to wxControlContainer
This MSW-specific hack is actually needed by all windows containing more than
one control, even if they don't derive from wxPanel (which is just the most
commonly used class for such windows), otherwise the parts of the window not
covered by the child controls won't have the correct appearance when the
window itself is inside a wxNotebook.

So do this for all classes inheriting from wxNavigationEnabled<>, notably this
fixes the wrong background for all kinds of picker controls (wxDirPickerCtrl,
wxFilePickerCtrl, ...) when they're used inside a wxNotebook.

After moving this method out of wxPanel, src/msw/panel.cpp became empty, so
also delete it and remove it from {bake,make,project} files.
2016-06-07 22:08:51 +02:00
Vadim Zeitlin
5e61689dbf Fix regression with MDI children accelerators
Since the changes of 8034e35391 (see #16870)
accelerators, including the standard ones such as Ctrl-F4 under MSW, didn't
work any longer inside the MDI children.

Fix this by extending IsTopNavigationDomain() to allow for checking whether
the given window should stop propagation of all keyboard events, as wxTLW
does, or only TAB navigation ones as wxMDIChildFrame and wxAuiFloatingFrame
do.
2016-02-28 01:24:20 +01:00
Vadim Zeitlin
3f66f6a5b3 Remove all lines containing cvs/svn "$Id$" keyword.
This keyword is not expanded by Git which means it's not replaced with the
correct revision value in the releases made using git-based scripts and it's
confusing to have lines with unexpanded "$Id$" in the released files. As
expanding them with Git is not that simple (it could be done with git archive
and export-subst attribute) and there are not many benefits in having them in
the first place, just remove all these lines.

If nothing else, this will make an eventual transition to Git simpler.

Closes #14487.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@74602 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2013-07-26 16:02:46 +00:00
Vadim Zeitlin
1b7c3d909a Compilation fix for PCH-less build after r74586.
Don't use wxWindow methods in wx/container.h, move AcceptsFocus()
implementation to containr.cpp.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@74588 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2013-07-23 13:18:30 +00:00
Vadim Zeitlin
dee22e3198 Fix tab navigation bug with static boxes without enabled children.
wxControlContainer::AcceptsFocusFromKeyboard() returned true even if the
control didn't have any currently enabled -- and hence accepting focus --
children. This resulted in strange wxEVT_NAVIGATION_KEY propagation as it
unexpectedly wasn't handled in the control which pretended to accept focus and
instead bubbled up back into the parent, resulting in the focus returning to
the first child of the parent instead of skipping the static box with disabled
children and going to the next enabled child.

Fix this by checking that we have children that can be focused right now and
not only children that are focusable. Notice that this doesn't take care of
calling wxWindow::SetCanFocus() correctly when the children enabled/disabled
state changes so there might still be other problems, notably under wxGTK
where SetCanFocus() does something non-trivial, but it at least improves
things under wxMSW.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@74585 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2013-07-23 12:44:29 +00:00
Vadim Zeitlin
2c750daecd No real changes, just refactor wxControlContainer code a little.
Extract the call to wxWindow::SetCanFocus() into a separate
UpdateParentCanFocus() function as it can be necessary to do it from places
other than UpdateCanFocusChildren() too.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@74582 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2013-07-23 00:43:29 +00:00
Stefan Csomor
4164a04a98 make methods available to all ports
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@74198 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2013-06-13 00:42:24 +00:00
Vadim Zeitlin
4b5a12ecea Fix TAB navigation in wxGTK broken by r72663.
Don't call SetCanFocus(true) for container windows with focusable children,
this doesn't play well at all with wxGTK focus handling and in particular
totally disabled TAB navigation.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@73018 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2012-11-25 23:17:56 +00:00
Vadim Zeitlin
e68b7b364a Allow using windows that can't be focused with wxNavigationEnabled<>.
The code in wxNavigationEnabled<> assumed that the window itself could be
focused if it didn't have any focusable children because it was originally
extracted from wxPanel that can, indeed, be focused. This is however not the
case for all windows, notably not for wxStaticBox which now derives from
wxNavigationEnabled as well but can never be focused itself.

Add wxControlContainer::DisableSelfFocus() and call it from wxStaticBox to
support this situation. This required splitting m_acceptsFocus flag into
m_acceptsFocusSelf and m_acceptsFocusChildren and updating various methods
using them.

See #13271.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@72663 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2012-10-13 22:51:50 +00:00
Vadim Zeitlin
44f4f7dda0 Don't send a huge number of unneeded wxChildFocusEvents.
wxControlContainer::SetLastFocus() propagated wxChildFocusEvent explicitly to
its parent but this is not needed because wxChildFocusEvents propagate by
default, being derived from wxCommandEvent. And doing it again resulted in the
total number of events increasing exponentially with the depth of the window
hierarchy and real performance problems due to processing all of them.

Closes #14310.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@71559 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2012-05-25 09:48:22 +00:00
Vadim Zeitlin
6ca243fc75 Don't set focus to hidden window in wxSetFocusToChild().
The window that had focus previously could be hidden now, but its parent could
be hidden as well so it's not enough to set focus to it but we need to loop
until we find a visible ancestor.

Closes #14230.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@71227 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2012-04-18 09:23:05 +00:00
Vadim Zeitlin
6e92c2991b Fix bug with TAB being able to switch focus between MDI frames.
The keyboard navigation code correctly checked that TAB was not propagated
above the TLW containing the window in which the key was pressed to avoid
switching focus between different TLWs by pressing TAB.

However wxMDIChildFrame is not a TLW and so it was possible to switch focus
between two different MDI child frames by pressing TAB. This was unexpected
and counterintuitive, especially because the frame receiving focus was not
even activated (which might be another bug).

Fix this by adding a new wxWindow::IsTopNavigationDomain() virtual method that
can be overridden to indicate that a window is a self-contained "keyboard
navigation domain" and that keyboard events shouldn't propagate outside of it
and override it in both wxTopLevelWindow and wxMDIChildFrame to ensure that it
behaves correctly.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@68502 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-08-03 00:45:42 +00:00
Vadim Zeitlin
2a0777a8f0 No real changes, just rename a variable.
"focussed" spelling is unusual and inconsistent with "focused" used in many
other places in the same file, so renamed "focussed_child_of_parent" and also
use standard camelCase naming convention for it.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@68501 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-08-03 00:45:38 +00:00
Vadim Zeitlin
26647ae4a7 Never restore focus to hidden child.
Don't set focus to a hidden window in our focus management code, this never
makes sense and results in apparent focus loss.

It also fixes, as a side effect, a crash in wxGrid under wxMSW as the focus is
not restored to the hidden grid editor any longer and so the code in its
wxEVT_KILL_FOCUS handler that resulted in the crash is not executed any
longer, see #13349.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@68319 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-07-21 13:50:06 +00:00
Vadim Zeitlin
526954c596 Globally use "wxWindows licence" consistently.
Use "wxWindows licence" and not "wxWidgets licence" (the latter doesn't
exist) and consistently spell "licence" using British spelling.

See #12165.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64940 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2010-07-13 13:29:13 +00:00
Vadim Zeitlin
9a83f86094 Globally replace _T() with wxT().
Standardize on using a single macro across all wxWidgets sources and solve the name clash with Sun CC standard headers (see #10660).

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@61508 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2009-07-23 20:30:22 +00:00
Vadim Zeitlin
d3b9f782ef don't use annoying and unneeded in C++ casts of NULL to "T *" in all other files neither
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@58227 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2009-01-19 13:55:27 +00:00
Vadim Zeitlin
5c33522fca replace wx_{const,static,reinterpret}_cast with their standard C++ equivalents
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@56644 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2008-11-02 02:39:52 +00:00
Vadim Zeitlin
21bf81db6f revert r51647 change as it broke the code overriding AcceptsFocusFromKeyboard() to prevent the user from tabbing into a window; simply override it at wxControlContainer too
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@52032 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2008-02-24 13:58:38 +00:00
Vadim Zeitlin
4453c7082f use CanAcceptFocus() instead of CanAcceptFocusFromKeyboard() when checking if we should TAB into a child because the latter is not recursive and we do want to TAB into panels which don't have focus themselves but have children that do
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@51647 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2008-02-11 01:21:46 +00:00
Vadim Zeitlin
506f9e92cb no changes, just do the case of m_winLastFocused to wxRadioButton once instead of four times in wxMSW radiobutton navigation hack fragment
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@51645 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2008-02-11 00:14:54 +00:00
Vadim Zeitlin
391b16953a don't use parent window of a TLW in HandleOnNavigationKey(), even if it's apparently harmless it's wrong to involve the parent TLW in the code navigating inside this one
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@51644 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2008-02-11 00:09:24 +00:00
Vadim Zeitlin
e49d331c47 don't allow TAB-bing away to other TLWs
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@50679 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2007-12-13 19:10:04 +00:00
Julian Smart
c7bfb76a2c A number of focus handling improvements:
Left clicking on a window only focuses the window if not processed.
wxControlContainer::SetFocus moved to wxControlContainerBase so that a container now focuses the first child even on wxGTK.
wxAuiBook is now a container, need for correct navigation on wxGTK.


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@48154 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2007-08-18 10:54:31 +00:00
Vadim Zeitlin
a8ff046ba9 fixes for building wxMSW with --disbale-all-features
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@47608 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2007-07-21 02:05:03 +00:00
Vadim Zeitlin
edc0987174 CanAcceptFocus() now returns true if either the window itself or one of its children accepts focus; added new IsFocusable() to test whether the window itself accepts focus
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@46994 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2007-06-28 12:04:06 +00:00
Václav Slavík
049908c573 make wxFrame a wxControlContainer too, so that it behaves in the same way as wxDialog
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@46452 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2007-06-13 16:29:23 +00:00
Václav Slavík
6b6bd02c07 don't propagate wxChildFocusEvent outside of wxTLWs
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@46451 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2007-06-13 15:35:57 +00:00
Vadim Zeitlin
80332672ab make wxControlContainer accept focus depending on whether it has any focusable children when using native TAB navigation too but also allow to manually override this automatic detection; added wxWindow::SetCanFocus() to notify GTK+ about changed focus state
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@45267 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2007-04-05 22:29:14 +00:00
Vadim Zeitlin
de160b0647 don't use wxControlContainer if wxHAS_NATIVE_TAB_TRAVERSAL is defined (currently it never is)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@45056 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2007-03-25 22:41:11 +00:00
Vadim Zeitlin
5f28de16f3 fix infinite recursion when processing navigation keys in panels containing book controls
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@44273 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2007-01-21 01:21:45 +00:00
Robin Dunn
31e1bd370d Simplify use of MacIsWindowScrollbar
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@41104 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2006-09-09 18:12:59 +00:00
Robin Dunn
afd7bf26f1 Don't let the built-in scrollbars confuse things when setting focus to
a wxScrolledWindow


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@41083 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2006-09-09 06:34:08 +00:00
Vadim Zeitlin
f242653114 move the logic for changing notebook pages using the standard Ctrl-Tab/PageUp/Dn keys even when focus is outside of the notebook to wxControlContainer from wxTopLevelWindowMSW to allow it work for notebooks whose parent is not a TLW (as a side effect, this now also works in all ports although I don't really know how desirable this is)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@40552 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2006-08-10 15:42:07 +00:00
Vadim Zeitlin
6c20e8f816 move default button handling code from wxControlContainer to wxTLW (patch 1524441)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@40307 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2006-07-25 01:31:13 +00:00
Włodzimierz Skiba
841f23e18a Include wx/containr.h according to precompiled headers of wx/wx.h (with other minor cleaning).
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@39810 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2006-06-21 07:36:58 +00:00
Włodzimierz Skiba
b0b5881aea Include wx/radiobut.h according to precompiled headers of wx/wx.h (with other minor cleaning).
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@39567 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2006-06-05 16:46:15 +00:00
Włodzimierz Skiba
851dee09b5 Include wx/scrolbar.h according to precompiled headers of wx/wx.h (with other minor cleaning).
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@39476 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2006-05-30 13:43:18 +00:00