Commit Graph

450 Commits

Author SHA1 Message Date
René Kijewski
9c796670eb Fix wxWindowAccessible compilation with wxUSE_HELP==0
wxWindow::GetHelpTextAtPoint() can't be used in this case, add missing checks
for wxUSE_HELP around it.
2017-01-10 22:48:35 +01:00
Václav Slavík
7dab555f71 Don't create wxWindowAccessible by default
Don't unconditionally use wxWidgets' implementation of IAccessible for
all windows when wxUSE_ACCESSIBILITY is 1, because it is inferior to the
system provided one: it often lacks appropriate labels, doesn't fully
support navigation and wxIAccessible isn't fully implemented.

The approach, when using MSAA, recommended by Microsoft documentation is
to customize accessibility for custom controls only, by proxying to the
standard and overriding what is necessary. By making this change, user
code is still allowed to customize accessibility if needed, without
negatively impacting standard controls that don't need any custom code.

See also https://github.com/wxWidgets/wxWidgets/pull/340
2016-11-20 17:35:32 +01:00
Artur Wieczorek
b948965eba Use symbolic constants rather than numeric values
Zero represents 'this' object which is identified by wxACC_SELF symbol.
2016-10-09 13:17:41 +02:00
Artur Wieczorek
9efaca908f Guard functions with wxCHECK macro rather than wxASSERT
Make the code shorter.
2016-10-09 13:16:16 +02:00
ARATA Mizuki
8cfc74491a Replace wxEXPLICIT with the 'explicit' keyword
See #17655.
2016-09-14 18:45:12 +09:00
Vadim Zeitlin
d50abc2d3e Make wxWS_EX_VALIDATE_RECURSIVELY default (and only) behaviour
In practice, almost everybody using validators also seems to use this style,
so make it the default (this hadn't been done when it was originally
introduced because of compatibility concerns, but now, 15+ years later, it's
probably safe enough to change this).
2016-02-09 23:38:23 +01:00
Steve Browne
8ede2351cc Fixed indentation in ToDIP to make it consistent with FromDIP. 2015-11-24 19:42:14 -05:00
Steve Browne
bbb6dbea1b Added wxWindow::ToDIP functionality. 2015-11-24 12:47:31 -05:00
Tobias Taschner
8282c1be0f Remove Windows CE support
Windows CE doesn't seem to be supported by Microsoft any longer. Last CE
release was in early 2013 and the PocketPC and Smartphone targets supported by
wxWidgets are long gone.

The build files where already removed in an earlier cleanup this commit
removes all files, every #ifdef and all documentation regarding the Windows CE
support.

Closes https://github.com/wxWidgets/wxWidgets/pull/81
2015-09-23 00:52:30 +02:00
Vadim Zeitlin
efce9b2306 Improve detection of attaching windows to more than one sizer.
It's not only an error to insert a window twice into the same sizer, it's
already an error, and even a more insidious one, to insert it twice into
different sizers, so guard against this as well as debugging it (much) later,
when the window and the sizer is destroyed is much less fun.
2015-06-05 01:36:42 +02:00
Vadim Zeitlin
1c63ec5564 Don't scale the value(s) of -1 in wxWindow::FromDIP().
Using FromDIP() in wxXRC broke creating controls whose width or height was
specified as -1 as it became -2 when sufficiently high DPI was used, and so
lost the special meaning of "unspecified" that -1 had.

Avoid this problem by never scaling -1 in FromDIP(), this is unlikely to ever
be useful and could result in more difficult to debug problems in the future.
2015-05-16 16:03:22 +02:00
Dimitri Schoolwerth
8f8d58d193 Use wx-prefixed macros throughout the repository.
Change {DECLARE,IMPLEMENT}_*CLASS and {DECLARE,BEGIN,END}_EVENT_TABLE
occurrences to use the wx-prefixed version of the macros.
2015-04-23 22:00:35 +04:00
Vadim Zeitlin
100d2a5819 Make wxWindow::FromDIP() more flexible and easier to use.
Allow calling this method with either wxSize, wxPoint or just an int.

Also provide a static overload allowing to use it even when no appropriate
wxWindow is available.
2015-04-23 02:20:02 +02:00
Vadim Zeitlin
5d5d6e84cb Compilation fix for PCH-less build after bc492a9.
Include wx/dcscreen.h explicitly now that it is used in the default
wxWindow::GetContentScaleFactor() implementation.
2015-03-20 01:39:48 +01:00
Vadim Zeitlin
00748bbaef Add wxWindow::FromDIP() for simpler high DPI support.
This method allows to scale a pixel value by a DPI-dependent factor to the
value used by the underlying toolkit only if necessary, i.e. when not using
GTK+ 3 or OS X which already do this internally.
2015-03-20 00:08:37 +01:00
Vadim Zeitlin
bc492a9e6e Make wxWindow::GetContentScaleFactor() useful for non-OSX platforms.
Return the ration of the current DPI to the standard one to allow using this
function to scale pixel values for the current screen resolution.
2015-03-20 00:08:37 +01:00
Vadim Zeitlin
8b525fd1be Remove useless check for NULL in wxFindWindowRecursively().
This is an internal function which is only ever called with non-NULL window.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@78492 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2015-02-15 00:01:47 +00:00
Vadim Zeitlin
a2b0b8dbaa Handle updating tooltip text in wxCompositeWindow correctly.
While calling SetToolTip(wxToolTip*) overload already worked correctly for
wxCompositeWindow, using SetToolTip(wxString) did not if a tooltip already
existed, as it didn't use the virtual DoSetToolTip() in this case, resulting
in e.g. impossibility to update wxSpinCtrlDouble tooltip using this method.

Fix this by introducing DoSetToolTipText() virtual which is used by that
overload now and overriding it in wxCompositeWindow.

Also don't override DoSetToolTip() in wxSpinCtrlGenericBase any more, it is
not necessary as it's already done by its base class wxCompositeWindow.

Closes #16595.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@78245 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2014-12-05 22:19:10 +00:00
Václav Slavík
796c8079a0 Tweak sizing for general SetWindowVariant() implementation.
Previously, the generic implementation closely mirrored OS X's scaling
factors, with the small size being 3/4 of the normal one and mini 2/3.
This works well with OS X's UI font and font rendering, but less so on
other platforms: wxWINDOW_VARIANT_SMALL is barely readable on Windows
and wxWINDOW_VARIANT_MINI is illegible.  In wxGTK, both sizes are
readable, but don't match small text used in native GNOME interfaces.

Change the sizing to use the same scaling factor of 1.2 between all
variant steps.  This is the same factor that CSS 1.2 defines for
relative sizes and is also used by Pango's (and so GTK+) size scaling in
markup.  This makes wxWINDOW_VARIANT_SMALL identical in size to <small>
markup used in GTK+.

On Windows, this changes default UI font scaling to be less steep and
while wxWINDOW_VARIANT_MINI is still tiny and hard to read (as it is on
OS X), wxWINDOW_VARIANT_SMALL is now readable, thanks to being only 1pt
smaller than the full size (for default GUI font).

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@77519 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2014-09-03 06:54:59 +00:00
Vadim Zeitlin
33ad33d447 Add wxOVERRIDE and use it in common and wxOSX code.
Make overriding virtual methods more explicit and enable additional checks
provided by C++11 compilers when "override" is used.

Closes #16100.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@76173 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2014-03-20 13:26:28 +00:00
Vadim Zeitlin
ef3ea7e50c Don't recurse into top level children in wxWindow::FindWindow().
Finding a button in a child dialog when looking for it in the current window
is totally unexpected and can result in subtle bugs, see #15442.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@74721 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2013-08-27 22:49:48 +00:00
Vadim Zeitlin
3d777efedc No real changes, just make wxWindow::CanScroll() virtual.
This will allow overriding it in wxScrolled<>, see #15440.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@74713 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2013-08-27 13:12:31 +00:00
Vadim Zeitlin
2d145378f6 Make mouse capture checking asserts stronger and more detailed.
Verify not only that we don't destroy the window having the capture now but
also that this window is not in the mouse capture stack at all, not
necessarily on top. This is important as keeping a dangling pointer in the
capture stack would result in difficult to diagnose bugs later.

Also check that we don't recapture the mouse in the same window as this should
never be necessary.

Finally, give more details in the assert checking that the window does have
capture in ReleaseMouse().

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@74677 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2013-08-18 13:28:16 +00:00
Vadim Zeitlin
0c60a0e2b7 No changes, just change data structures used by mouse capture code.
Use a simple stack of windows instead of a separate singly linked list and a
separate current capture pointer.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@74675 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2013-08-18 13:28:09 +00:00
Vadim Zeitlin
b0ad1918b9 No changes, just use wxRecursionGuard instead of manual boolean flag.
Use wxRecursionGuard with the flag indicating whether the mouse capture is
changing to ensure that we always reset it correctly and make the code
slightly shorter.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@74674 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2013-08-18 13:28:06 +00:00
Vadim Zeitlin
ae1cdb2d07 No changes, just move mouse capturing bookkeeping data out of wxWindow.
All mouse capture-related data doesn't have to be declared in wxWindow itself
and can just be global in wincmn.cpp, so move it there, this will facilitate
further changes as they won't require recompiling everything any more.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@74673 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2013-08-18 13:28:02 +00: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
5ac5e40e41 Prevent duplicate menu event processing in MDI windows.
Record the object propagating the given event upwards in the event object
itself and use it in wxMDIParentFrame to determine whether the event being
handled is already coming from wxMDIChildFrame and avoid sending it back for
processing it there again in this case.

This is ugly and makes wx event processing even more complex but this is the
only way I could find to ensure that

(a) Both the child and the parent frames get the events from the toolbar
    (even though the toolbar parent is the parent frame and hence normally
    the child wouldn't get notified about them at all and so the forwarding
    at wxMDIParentFrame level is required to make this work).

(b) The child gets the event only once, whether it comes from a toolbar (and
    hence indirectly via the parent frame) or from the child menu (and hence
    directly to the child, at least in wxMSW).

This commit fixes the event propagation unit test case, at least under MSW and
GTK.

See #14314.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@74357 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2013-07-03 22:18:42 +00:00
Vadim Zeitlin
ff3493c0ce Use deferred window positioning in wxWindow::Layout() in wxMSW.
Ensure that {Begin,End}RepositioningChildren() are called before/after
changing the positions of multiple children, whether we're using sizers or
constraints.

This fixes display corruption which could happen under Windows 7 and a child
resized first became bigger, pushing off the children resized later.

Closes #15214.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@74067 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2013-05-31 23:21:06 +00:00
Vadim Zeitlin
21160e4544 Add a trivial virtual dtor to suppress g++ warnings.
Add a useless but virtual dtor to ValidationTraverserBase private class to
avoid g++ warnings.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@73886 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2013-04-30 10:35:57 +00:00
Vadim Zeitlin
ce7fe42e84 Provide shorter synonyms for wxEVT_XXX constants.
Use the same short names as are used by the event table macros for the event
type constants themselves. This makes them much more comfortable to use, e.g.
Bind(wxEVT_BUTTON) compared to Bind(wxEVT_COMMAND_BUTTON_CLICKED).

The old long names are still kept for backwards compatibility and shouldn't be
removed as it doesn't really cost anything to continue providing them, but all
new event types should only use the short versions.

Closes #10661.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@73850 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2013-04-25 10:11:03 +00:00
Vadim Zeitlin
00a399c062 Remove wxTextCtrl::OnEnabled() hack from wxGTK.
Don't change the background colour when the control is being enabled or
disabled, it doesn't seem necessary and it's unclear why was this added by
r10179 in the first place. It does result in problems however as it could
somehow make the selection of wxTextCtrl invisible when it lost focus and so
fixes a serious usability problem which happened to all wxTextCtrls for which
a wxEVT_UPDATE_UI handler using wxUpdateUIEvent::Enable() was defined.

Closes #14898.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@73756 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2013-03-31 01:12:21 +00:00
Vadim Zeitlin
e949d38c4e Don't recurse into top level children when validating recursively.
Even with wxWS_EX_VALIDATE_RECURSIVELY flag, we should never validate the top
level children (e.g. dialogs) when validating the parent window. This is never
useful and can be completely unexpected.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@73482 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2013-02-06 12:48:12 +00:00
Vadim Zeitlin
5abc0d2197 Refactor children traversal in wxWindow::TransferData{To,From}Window().
No real changes, just factor out the logic for children traversal into a
helper template class and reuse it in Validate() and both TransferData()
methods to avoid triplicating it.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@73481 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2013-02-06 12:48:09 +00:00
Vadim Zeitlin
30915cf22f Fix copy/paste error in UnsetConstraints().
"top" was mistakenly used in the code dealing with "left" constraint.

Thanks to Coverity for finding this one.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@73146 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2012-12-08 00:37:33 +00:00
Vadim Zeitlin
e0fddcefb6 Catch attempts to create a window with itself as parent.
This doesn't happen often but when it does, the results are catastrophic and
not always easy to debug, so try catch this as soon as possible.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@73139 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2012-12-08 00:37:10 +00:00
Vadim Zeitlin
089ef0bef7 Let wxWindow::Fit[Inside]() work even for windows without children.
The best [virtual] size of the window is usually determined by its children
but it's also possible to have a min size constraint set on the window sizer
so set the window to its best size in Fit() independently of whether it has
children or not.

Closes #14668.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@72507 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2012-09-19 07:50:07 +00:00
Vadim Zeitlin
054fdb68eb Honour window min and max sizes in wxWindow::GetBestSize().
The best size of the window should be at least as large as its min size and
less than its max size. This allows to override the windows own best size
determination with an explicit SetMinSize() or SetMaxSize() call.

See #11497.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@72343 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2012-08-15 23:34:18 +00:00
Vadim Zeitlin
e14e0b2f15 No real changes, just add a wxCHECK to GetDlgUnitBase().
Verify that we do have a valid TLW parent: even though this normally should be
always the case, it might not be when the window is being created or destroyed,
see #14355.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@71731 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2012-06-12 21:57:02 +00:00
Vadim Zeitlin
fd20ceff24 Fix wxWindow::IsDescendant() to work with argument equal to this window.
Passing the window itself as IsDescendant() argument for a top level window
resulted in a NULL pointer dereference. Fix this and also simplify the
function code by not using the parent window before checking it's !NULL.

Closes #14387.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@71702 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2012-06-08 18:44:18 +00:00
Vadim Zeitlin
345c78ca5f Use wxDynamicCast() instead of IsKindOf() checks.
wxDynamicCast() is less verbose (due to the absence of "CLASSINFO") and more
compatible with the standard dynamic_cast<>, so prefer to use it when possible.

See #14356.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@71624 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2012-06-01 11:01:18 +00:00
Vadim Zeitlin
0cafb0786e Don't reset previous window event handler in PopEventHandler().
This is harmless but also useless as the previous event handler of a wxWindow
is always NULL anyhow, so simply don't do this. This is consistent with
PushEventHandler() which doesn't call SetPreviousHandler() for the window
itself neither.

Closes #14353.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@71621 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2012-06-01 11:01:05 +00:00
Vadim Zeitlin
d119983947 Add wxWindow::GetBest{Height,Width}().
These functions will be used when it is necessary to determine the best size
of the control if one of its size components is fixed. Currently none of the
classes implements DoGetBestClient{Height,Width}() yet but wxListCtrl will do
it soon, see #13898.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@71392 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2012-05-09 14:24:37 +00:00
Vadim Zeitlin
8b2f64c6c1 Added wxWindow::IsDescendant() helper.
This function checks if another window is a direct or indirect child of this
one, which can be needed in a number of situations.

See #3063.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@71024 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2012-03-27 11:58:02 +00:00
Vadim Zeitlin
e94f303173 Deprecate wxWindow::MakeModal().
Using this function was never the right way to show a modal window and it
didn't really work correctly. Instead of futilely trying to fix it, just
deprecate it.

Closes #1561.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@70838 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2012-03-07 23:50:21 +00:00
Vadim Zeitlin
bddea8d14f Override AdjustForParentClientOrigin() in wxNonOwnedWindow to do nothing.
No real changes, just replace an IsTopLevel() check in the base class
implementation of AdjustForParentClientOrigin() and override it for all top
level windows in wxNonOwnedWindow instead.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@70812 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2012-03-05 13:00:55 +00:00
Vadim Zeitlin
bb5a951418 Use __WINDOWS__ for OS checks and __WXMSW__ for GUI checks (round 2).
This is continuation of r70796 and serves the same purpose.

Closes #14065, #14066.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@70808 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2012-03-04 20:31:42 +00:00
Vadim Zeitlin
1442168125 Implement wxBG_STYLE_TRANSPARENT support for wxGTK.
Use composited windows if supported by GTK+ for wxWindows with this background
style.

Also add wxWindow::IsTransparentBackgroundSupported() and show how to use it
in the sample.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@70569 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2012-02-11 16:26:52 +00:00
Vadim Zeitlin
202388d3bc Correct HasFocus() to work with subwindows of a composite control.
When a subwindow (i.e. one that overrides GetMainWindowOfCompositeControl() to
return a parent window) has focus, HasFocus() should return true for it too,
in addition to returning true for the main window.

This completes the fix of r69788.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@69860 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-11-28 19:15:57 +00:00
Vadim Zeitlin
ec90f7158e Fix HasFocus() for composite controls.
Comparing the result of DoFindFocus() with the main window of composite
control doesn't work as it can return a child window so HasFocus() still
returned false for a composite control such as generic wxListCtrl even when it
did have focus.

Just use FindFocus() instead of DoFindFocus() to fix this.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@69788 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2011-11-18 23:40:53 +00:00