Commit Graph

39762 Commits

Author SHA1 Message Date
Vadim Zeitlin
0eb456f08e Revert "Fix wxTreeListCtrl under wxOSX"
This reverts commit 28f96bdff0 as it isn't
necessary any more after the fix in the previous commit.

See #17409.
2018-01-14 18:51:02 +01:00
Vadim Zeitlin
ad8d73cb15 Work around missing expanders in wxTreeListCtrl under Mac
Re-indent the column containing the expanders explicitly if the control
has just switched from "list" to "tree" mode.

Closes #17409.
2018-01-14 18:51:02 +01:00
Vadim Zeitlin
3380a2438d Fix scale factor confusion in wxMac wxBitmap implementation
Merge ctors from (width, height) and (width, height, scale) into a
single one because the former really should be just a special case of
the latter for scale == 1 but, surprisingly and confusingly it wasn't,
because the latter also multiplied the size by scale, meaning that width
and height parameters had different meanings.

This resulted in at least 3 bugs when using scale factors different from
1: first, copying bitmaps wasn't done correctly because as
wxBitmapRefData copy ctor incorrectly scaled its size by scale again.
And second, creating bitmap from wxImage whose size wasn't divisible by
scale not just didn't work correctly but crashed when accessing memory
outside of the image because (unnecessarily) dividing and multiplying
the image size by scale wasn't idempotent. Finally, even for the images
of even size (assuming scale factor of 2), bitmaps created from them
used incorrect width and height, corresponding to the half of the image
dimensions, instead of the same ones, as they're supposed to be (the
scaled dimensions are supposed to be returned by GetScale{Width,Height}
methods).

Closes #17505.
2018-01-14 18:51:02 +01:00
Vadim Zeitlin
a6c1899092 Merge branch 'msw-wakeup-no-msg'
Restore using event objects, instead of posting WM_NULL messages, for
idle wakeup under MSW.
2018-01-14 13:38:04 +01:00
Vadim Zeitlin
bd6694761d Merge branch 'cygwin64'
Several compilation fixes due to the fact that sizeof(long)==8 under
Cygwin in 64 bits.

This allows the library to compile, but there are still run-time
problems, notably the unit tests throw an unknown exception currently.
2018-01-14 13:34:57 +01:00
Vadim Zeitlin
d55d5b1dd7 Use LONG for OLE IAccessible methods parameters
This is another fix for 64 bit Cygwin build: LONG is defined as a 32 bit
type in it, but not long, which is 64 bits, so use the former instead of
the latter.
2018-01-14 02:25:51 +01:00
Vadim Zeitlin
ebb06fbeaf Use wxTimeVal_t instead of timeval to fix 64 bit Cygwin problems
Due to the same problem with sizeof(long) mismatch as in the previous
commit, we can't use struct timeval, with its long fields, in 64 bit
Cygwin builds, and need to use __ms_timeval instead.

Add wxTimeVal_t type to hide this difference and update all code
compiled under MSW (there is no need to uglify Unix-only code using
timeval, as in wxSelectDispatcher, for example) to use it instead of
timeval.
2018-01-14 02:25:51 +01:00
Vadim Zeitlin
a5ae0685a0 Fix wxFSVolume compilation with Cygwin in 64 bits
Use __LONG32, which is always 32 bits when using Cygwin, unlike long,
which is 64 bits there in 64 bit builds, and so can't be used as an
argument to InterlockedExchange().

Closes #16746.
2018-01-14 02:25:51 +01:00
Vadim Zeitlin
88c6ce344e Fix bug with not re-enabling wxStaticBox with label sometimes
In some specific scenario, described in the newly added comment in
wxStaticBoxBase::Enable(), the box and its label could remain disabled
after its parent was disabled and re-enabled.

Fix this by continuing to use the derived class version for disabling
the box children, but not when enabling them, as the base class version
already does the right thing in this case.
2018-01-13 23:56:37 +01:00
Vadim Zeitlin
3c29b3d0ce Don't disable wxStaticBox children at wx level when disabling it
Calling Enable() on all children from wxStaticBox::Enable() was wrong,
the actual status of the child, returned by wxWindow::IsThisEnabled(),
is not supposed to change just because its parent was disabled.

Call NotifyWindowOnEnableChange() to avoid this, while still disabling
the children visually.
2018-01-13 23:56:37 +01:00
Vadim Zeitlin
967b4cdc1f Always call DoEnable() from NotifyWindowOnEnableChange()
Simplify the code by replacing 2 conditionally-compiled DoEnable() calls
with a single unconditional one.

This doesn't change the behaviour of Enable(), as it always called
DoEnable() on the window itself and only did it for its children when
wxHAS_NATIVE_ENABLED_MANAGEMENT was not defined before and continues to
do the same thing now, but it should fix a small bug in Reparent() as it
didn't update the actual status of the window if it changed as the
result of reparenting before, even though it was supposed to.
2018-01-13 23:56:37 +01:00
Vadim Zeitlin
2163b00b93 Move wxHAS_NATIVE_ENABLED_MANAGEMENT definition to the source file
There doesn't seem to be any need to have this symbol in the header,
when it's only used in NotifyWindowOnEnableChange() in wincmn.cpp.

No real changes.
2018-01-13 23:56:37 +01:00
Vadim Zeitlin
d1e57312c2 Revert "Don't call wxWakeUpIdle() with a lock in wxProgressDialog"
This reverts commit d26758044c which was a
workaround for the problem of wxWakeUpIdle() dispatching events, as this
is not the case any more after the latest changes.
2018-01-13 17:41:16 +01:00
Vadim Zeitlin
d617834eb9 Don't make wxEventLoop::WakeUpIdle() virtual
It just forwards to (virtual) WakeUp() and there should be no need to
ever override this method itself (nor even to keep it, except for
backwards compatibility).

No real changes.
2018-01-13 17:40:53 +01:00
Vadim Zeitlin
9b4759d7b6 Don't rely on getting WM_NULL messages in wxIdleWakeUpModule
Since the switch to using an event object for idle handling wakeup,
WM_NULLs are not being sent any longer, so wxIdleWakeUpModule didn't do
anything, resulting in pending event dispatching being paused while our
event loop was not running, as it happened, for example, while the
window was resized.

See #17579.
2018-01-13 17:33:09 +01:00
Vadim Zeitlin
91aed00288 Revert "Revert using an event object for waking up event loop in wxMSW"
This reverts commit ebb3a791b9,
effectively reapplying 6c40531fb7 once
again.

This breaks wake up when not running our own event loop once again
(see #17579), but this will be fixed in the next commit.
2018-01-13 15:23:30 +01:00
Vadim Zeitlin
d26758044c Don't call wxWakeUpIdle() with a lock in wxProgressDialog
This can result in deadlocks because wxWakeUpIdle(), admittedly rather
unexpectedly, can result in dispatching a message in the main thread,
which could reacquire the same lock again.
2018-01-12 17:17:53 +01:00
Vadim Zeitlin
3357d46ccc Make it simpler to use mnemonics for wxRadioBox items in XRC
Allow specifying label="1" attribute in wxRadioBox <item> tags to
indicate that the usual translation of "_" to "&" should be done, as for
all the other labels.

This is still not the default behaviour to avoid breaking any existing
XRC files using "_", even though using labels="1" by default would make
more sense.
2018-01-11 01:19:16 +01:00
Vadim Zeitlin
52635cfc10 Reuse the same XRC function for all translations
Translate all strings in the new GetNodeText() function replacing the
old GetText() which was mostly used for translatable strings before --
except that <item> tag contents didn't use it because it also performed
string unescaping, not wanted for the control items, in addition to
translation.

Replace the old GetText() (while still keeping it for compatibility,
i.e. to avoid breaking any custom XRC handlers using it) with the new
function which is more flexible and can be used for all tags.

No real changes, this is just a refactoring.
2018-01-11 01:19:16 +01:00
Vadim Zeitlin
74cf8370ce Avoid code duplication between wxSpinCtrl XRC handlers
Extract styles initialization into a function reused by both
wxSpinCtrlXmlHandler and wxSpinCtrlDoubleXmlHandler.

No real changes, this is a pure refactoring.
2018-01-10 17:44:37 +01:00
Trylz
80f4c8cde3 Add XRC handler for wxSpinCtrlDouble
Create wxSpinCtrlDoubleXmlHandler class similar to the existing
wxSpinCtrlXmlHandler and update the XRC schema to account for it.
2018-01-10 17:44:32 +01:00
Vadim Zeitlin
e2a31ef3db Merge branch 'grid-clip'
See https://github.com/wxWidgets/wxWidgets/pull/648
2018-01-10 17:19:03 +01:00
Vadim Zeitlin
a6d677a0fe Check for correct window in wxNumValidatorBase::SetWindow()
Override SetWindow() to check that the validator is being associated
with the window of the correct type, this allows to trigger an assert
immediately if this is not the case, making it simpler to find the error
as the call to SetValitator() on the wrong window will be in the call
stack when this happens, unlike before when the assert would happen only
at some later time.
2018-01-07 01:26:53 +01:00
Vadim Zeitlin
bfcd51cb6a Make wxValidator::SetWindow() virtual
Allow overriding the method called when the validator is associated with
the window, this can be convenient to perform some initialization on the
validator instance actually used as it can't be done on the initially
created object itself because it will be cloned by SetValidator(),
creating a new instance.

Also change SetWindow() to take wxWindow instead of wxWindowBase, this
still requires the cast in wxWindow::SetValidator(), but it's better to
have it there rather than in wxValidator and use the simpler type in the
public function signature.
2018-01-07 01:25:10 +01:00
Vadim Zeitlin
1d037dd4c9 Don't disable wxStaticBox window label when disabling the box
This behaviour might be not completely intuitive, but it makes it much
simpler to handle the box state using a checkbox as the label control
(which is by far the most common case of using box window labels).

Notice that while we could add a separate EnableWithoutLabel() method to
wxStaticBox to make it possible to set the state of the box directly
relatively easily, it wouldn't help with using wxEVT_UPDATE_UI for
managing the box state indirectly as it relies on calling Enable() only.
And this solution does allow wxEVT_UPDATE_UI handlers for the box itself
to work (provided the handler takes care to check for the event object
being the box itself, as otherwise it would still disable the child
checkbox when its wxEVT_UPDATE_UI bubbles up to the box).
2018-01-07 01:14:17 +01:00
Paul Cornett
572fe37898 Avoid calling default "key-press-event" handler
We have already done everything it does, and doing it again seems to
cause an infinite loop with WebKitGTK. See #17932
2018-01-06 11:07:11 -08:00
Tobias Taschner
c8b6ca308b Update year in copyright notices to 2018
Use 2018 instead of 2017 (mostly in version info files).

See https://github.com/wxWidgets/wxWidgets/pull/661
2018-01-05 19:51:47 +01:00
Paul Cornett
00d8434156 Avoid debug message when there is no session manager
See #16024
2018-01-05 10:01:38 -08:00
Vadim Zeitlin
d332ccfd6f Add support for wxStaticBoxSizer "windowlabel" property to XRC
Allow specifying arbitrary windows as labels for the static boxes
created from XRC.

Note that wxStaticBox XRC handler itself wasn't updated to support this,
as this handler seems to be quite useless because it's impossible to
define any box children with it, so only wxStaticBoxSizer XRC handler
really matters, anyhow.
2018-01-04 22:58:50 +01:00
Vadim Zeitlin
a2ad7f9bf6 Merge branch 'dvc-sort-opt'
Optimize item sorting in generic wxDataViewCtrl and other minor
enhancements.

See https://github.com/wxWidgets/wxWidgets/pull/642
2018-01-04 21:42:42 +01:00
Paul Cornett
5efba4ce47 Avoid invisible wxTextCtrl selection with GTK+3
See #18036
2018-01-03 20:22:12 -08:00
Paul Cornett
b02df5ea33 Remove unneeded init function
GObject instances are already zero-initialized
2018-01-03 09:26:12 -08:00
Paul Cornett
da186a0713 Avoid trying to override non-existent property with GTK+ < 2.20 2018-01-03 09:16:06 -08:00
Vadim Zeitlin
827e90e8de Use GtkHBox as GtkWxCellEditorBin parent with GTK+ < 4
Using GtkBin as widget parent didn't work without overriding its
size-related vfuncs until GTK+ 3.8 and, in particular, resulted in the
editor (which was the child of the bin) not being visible at all with
GTK+ 2.

Switch to using GtkHBox as parent, which does work with both GTK+ 2 and
any GTK+ 3 version, but keep using GtkBin with GTK+ 4 as GtkHBox is
removed in it.

This fixes bug introduced in c2821dcea0
since which custom wxDataViewCtrl editors were not visible any more.

Closes #17686.
2018-01-03 00:57:46 +01:00
Vadim Zeitlin
bde62ce981 Get rid of unused renderer rect in gtk_wx_cell_renderer_new()
No real changes, just don't call gtk_wx_cell_renderer_get_size()
unnecessarily as we never use its result: the code using the returned
rectangle was commented out ever since it was added (more than 10 years
ago) in 1e510b1e2d
2018-01-02 16:34:54 +01:00
Vadim Zeitlin
bf09ff2320 Remove unused GTK_IS_WX_CELL_EDITOR_BIN* macros
No real changes, just don't define macros that we never use and don't
plan on using it (why would we need to test whether something is of this
type when we already know it).
2017-12-31 02:27:19 +01:00
Vadim Zeitlin
0730236fa8 Merge branch 'parse-bad-wav'
Fix multiple problems with parsing untrusted input data in wxSound.

Closes #11855.
2017-12-30 22:52:14 +01:00
Vadim Zeitlin
c010efc172 Avoid integer overflow when computing the sample size
While it seems to be harmless in this particular case, it still prevents
testing this code with UBSAN by triggering it here, so check that
multiplication doesn't overflow.
2017-12-30 18:52:57 +01:00
Vadim Zeitlin
61c7cf9a9c Fix yet another division by 0 when parsing WAV data
Ensure that the size of one sample (including all the channels) is non
zero before dividing by it.
2017-12-30 18:52:57 +01:00
Vadim Zeitlin
932f384c87 Avoid division by 0 when parsing WAV data
Don't divide by waveformat.uiBlockAlign which could be 0, but rather
multiply by it and verify that we get the expected result. This is more
robust, as it prevents crashes on malformed input and also slightly more
efficient even for correct input.
2017-12-30 18:52:57 +01:00
Vadim Zeitlin
45e8d13e13 Add format sub-chunk size check to WAV parsing
This fixes a crash due to reading beyond the buffer bounds when checking
for "data" if WAVEFORMAT::uiSize was too big.
2017-12-30 18:52:57 +01:00
nowhere
69cd6039eb Make parsing WAV data more robust
Check that we have enough data in the input instead of happily reading
out of bounds memory.

This fixes the most common problem of crashing on bad data which doesn't
look like WAV at all, but doesn't fix problems with parsing input which
does look like WAV, but is incorrect -- this will be done in subsequent
commits.
2017-12-30 18:52:36 +01:00
Vadim Zeitlin
c65eaac529 Fix harmless warning about comparing values of different enums
This avoids a bunch of -Wenum-compare-switch warnings from clang 6.
2017-12-30 18:51:05 +01:00
Frédéric Bron
f4b56f67ec Improve documentation of wxPropertyGrid::MakeColumnEditable()
Explain that column must be different from 1 in the documentation and in
the (already existing) assert checking it.

Closes https://github.com/wxWidgets/wxWidgets/pull/656
2017-12-29 20:06:04 +01:00
orbitcowboy
f423b88ded Replace post-increment on iterators with pre-increment
This is a micro-optimization, as pre-increment is at least as efficient
as post-increment and typically slightly more so because it doesn't need
to make a copy of the iterator, and better conforms to the prevailing
C++ style.

Closes https://github.com/wxWidgets/wxWidgets/pull/655
2017-12-29 19:59:24 +01:00
VZ
fdf2ee425f Use postfix operator when iterating over containers
No real changes, just avoid a micro-pessimization.

See https://github.com/wxWidgets/wxWidgets/pull/652
2017-12-26 04:25:44 +01:00
Vadim Zeitlin
c697b62d46 Compilation fix for PCH-less build after last commit
Include the headers required by the new code in src/msw/textentry.cpp.

See #12613.
2017-12-26 04:24:23 +01:00
orbitcowboy
0790698345 Use postfix operator when iterating over containers. 2017-12-26 00:25:52 +01:00
Vadim Zeitlin
5a949efc5c Fix sending wxEVT_TEXT_ENTER when using auto-completion in wxMSW
We need to explicitly generate this event from the char hook handler as
we don't get the normal WM_CHAR for it, it is apparently intercepted by
the window proc installed by the auto-completing code, so check if
wxTE_PROCESS_ENTER is used for the text entry and call a special new
MSWProcessSpecialKey() method to do the right thing if it is.

Similarly, handle Tab presses correctly if wxTE_PROCESS_TAB is used.

Closes #12613.
2017-12-25 19:29:25 +01:00
Vadim Zeitlin
610c164988 Always let DefWndProc() process column resizing in wxListCtrl
If we don't pass these messages to it, the selected items highlight
rectangle doesn't get updated when the columns are resized when using
visual themes, as could be seen in the listctrl sample.

While this did work if the wxEVT_LIST_COL_DRAGGING event handler skipped
the event, prefer to not require doing this as things work without this
call to wxEvent::Skip() under the other platforms and even MSW with
themes disabled.

Closes #18032.
2017-12-25 17:14:56 +01:00