Previously, wxMSW native version only sent wxEVT_LIST_ITEM_[UN]CHECKED
if the item state has really changed, while the generic version, used in
wxGTK and wxOSX, did it unconditionally and wxQt native version never
did it at all.
Make all ports behave as wxMSW, which seems like the most useful
behaviour and add a unit test checking that this behaves as expected.
Note that virtual controls still always send the events in all ports, as
they work as notifications for the model in their case, and a new test
checks that this is the case in all ports (except wxQt which doesn't
support them).
Implement native pre-edit handling for wxGTK and Cocoa using Scintilla's
tentative input support.
Use a private text input client bridge to complete Cocoa
NSTextInputClient and support GTK pre-edit callbacks without changing
the public API or existing class ABI.
Inline composition is now the default on GTK and Cocoa, existing code
may call SetIMEInteraction(wxSTC_IME_WINDOWED) to retain the previous
behaviour.
While composition is active under wxGTK, the IM context is given first
access to key events, as keys such as Enter and Backspace confirm or
edit the pre-edit text and must not be handled as normal key events.
Rolling the pre-edit text back relies on tentative undo actions being
recorded, so windowed interaction is used while undo collection is
disabled.
Document platform defaults and add regression tests for composition,
UTF-16 ranges, replacement ranges, virtual space, undo, and mode
switching.
Closes#26228.
Closes#26757.
Discovered by an LLM as the result of "a targeted scan for common
misspellings, duplicated words, and nearby wording errors".
Reviewed and confirmed by a human.
Closes#27122.
wxBUILD_DEBUG_LEVEL has a value "Default" option that actually is the
real default.
CMake 3.10 is required now, don't mention supporting 3.5.
Closes#27111.
Clicking an already selected wxTreeListCtrl item in a multi-selection
control should collapse the selection to the clicked item and emit the
selection changed event. Preserve wxDataViewCtrl's deferred single-row
selection across incidental motion before button-up, while still clearing it
for new clicks and real drag starts.
Add a wxTreeListCtrl UI regression covering the selected-item click.
Fixes#17891.
Closes#27082.
When deciding whether a key press should trigger an accelerator or be
handled by the currently focused window different ports behaved
differently, with wxGTK always prioritizing the focused window and the
other ports giving priority to the accelerator, and neither of them
allowed customizing this.
Change this now by introducing 2 ways to do it: first, a window can
override new ClaimsKeyBeforeAccelerator() virtual function to specify
which keys it wants to handle itself, even if they correspond to an
accelerator. And second, send wxEVT_ACCELERATOR_KEY event which can be
handled by the application, typically centrally in its wxFrame-derived
class, to decide if it wants some accelerator that it defines to not
steal the key from the window or, on the contrary, to always do it, even
if the window overrides ClaimsKeyBeforeAccelerator() as wxTextCtrl does.
Note that while ClaimsKeyBeforeAccelerator() replaces some uses of
wxMSW-specific MSWShouldPreProcessMessage(), but it's still needed to
prevent the key getting eaten by IsDialogMessage().
This is not a backwards-compatible change as it changes the default
wxGTK behaviour, but it is now compatible with the other ports and can
be easily customized if necessary.
This commit only implements this for wxMSW and wxGTK, other ports will
be updated too soon.
Change wxRichTextEvent::m_char to be of type wxUniChar and not wxChar.
This is mildly backwards-incompatible but the break is arguably worth
not adding some new GetUnicodeCharacter().
Add support at wxPersistentWindow level for saving the DPI at which the
window coordinates were saved to allow rescaling the values by the ratio
of this DPI to the current one if the DPI has changed between saving and
restoring.
This allows keeping the same proportional size of the window after DPI
change on the platforms not using DPI-independent pixels (such as wxMSW)
too by just using the new {Save,Restore}Coord() functions instead of
{Save,Restore}Value() for any quantities that need to be scaled.
Do this for wxPersistentTLW to update the window size to remain
proportionally the same after DPI change.
Use MoveFileEx() as just about everybody else (Boost, Python etc) does
because this is the closest equivalent to POSIX rename().
This is a behaviour change compared to earlier 3.3.x series as
ReplaceFile() used until now (see #25089) preserved file attributes but
now we don't do it any longer -- but we provided CopyAttributesFrom()
which can be used in the application if it needs it.
Closes#26713.
Show "key tips", i.e. popup windows showing the key that can be used to
activate a ribbon element, and add support for using keys to do it to
improve accessibility.
Closes#26935.
This was broken by 48bf1ac (Rewrite event generation and propagation in
wxAuiNotebook, 2025-07-12), see #25634 and #25544.
Restore sending this event for the buttons and do it with the correct
page indexes now, i.e. using the logical page index and not its physical
position.
Also consistently allow the handler of this event to prevent the default
action from taking place if it doesn't call wxEvent::Skip(). This is not
100% backwards-compatible but is consistent and more useful.
Add a unit test checking that this works as expected.
Closes#26801.
The CMake build already supported an external NanoSVG package, but the
Autoconf build always required the bundled 3rdparty/nanosvg copy.
Make --with-nanosvg a WX_ARG_SYS_WITH option ("sys"/"builtin"/"yes"/"no")
and, for the system case, check for <nanosvg/nanosvg.h> where the
distribution packages (Debian, Fedora, ...) install it. If a compiled
nanosvg library is also present, link with it; otherwise compile the
header-only implementation into wxWidgets as was done before.
Include the headers as <nanosvg/nanosvg.h> to match their installed
location, and add the parent of the package include directory in the
CMake helper so this keeps working there for non-standard prefixes.
Also fix build/cmake/lib/nanosvg.cmake to decide whether a compiled
library is available from the imported target type rather than from
hardcoded IMPORTED_LOCATION_<CONFIG> properties: the latter misses
packages that only set IMPORTED_LOCATION_NOCONFIG (e.g. Fedora's),
which made it compile the implementation in and link the shared
library at the same time.
With this it's possible to build against the system NanoSVG development
package with 3rdparty/nanosvg removed entirely.
Closes#26965.
Now that none of the tests use the CppUnit compatibility macros any more,
this header can be removed entirely.
Move the pieces still needed by the tests, i.e. wxINFO_FMT(),
WX_ASSERT_MESSAGE(), WX_ASSERT_EQUAL_MESSAGE() and the Catch::StringMaker
specializations for wxString and wxUniChar[Ref], to tests/testprec.h.
wxGetCurrentTestName() is now implemented using Catch itself instead of the
strings set by the CppUnit macros, which means that it finally returns the
correct name for all the tests and not just the CppUnit-style ones.
Assisted-by: Claude Opus 5
On MSW, translate logical left and right mouse buttons to their physical
buttons before passing them to mouse_event(). This keeps MouseClick() as
a primary-button click and MouseClick(wxMOUSE_BTN_RIGHT) as a secondary
click when the user swaps the mouse buttons.
Document this behavior for GUI tests.
Closes#26833.
GitHub automatically computes and shows SHA-256 checksums on the
download page, making verifying them more convenient than SHA-1 ones.
SHA-1 is also generally considered insecure nowadays.
See #26744.
This results in <span><code>...</span></code> being generated which is
obviously wrong.
Use <code> instead of @c to work around this Doxygen bug.
Closes#26719.
Use \htmlonly[block] which -- contrary to what Doxygen documentation
says -- does _not_ insert the extra <p> tags which made the generated
HTML invalid unlike plain \htmlonly.
Closes#26717.
Minimize discrepancies between the standard Doxygen version of these
files and our ones.
Add useful clipboard.js which allows copying the contents of various
snippets to clipboard.
Update HTTP links to use HTTPS.
Still keep our customizations, notably the custom header appearance and
removal of the separating hr element before the footer.
This also removes an unnecessary #page_container div element which was
never closed resulting, fixing the problem with invalid HTML output.
Closes#26710.
Note that source archives checksums have surreptitiously changed since
the initial announcement as the archives had to be rebuilt. The ones
here are the correct ones.
Unix builds / Ubuntu 18.04 wxGTK 3 compatible 3.0 (push) Has been cancelled
Unix builds / Ubuntu 24.04 wxGTK ASAN not compatible (push) Has been cancelled
Unix builds / Ubuntu 18.04 wxGTK UTF-8 (push) Has been cancelled
Unix builds / Ubuntu 18.04 wxQt (push) Has been cancelled
Unix builds / Ubuntu 18.04 wxX11 (push) Has been cancelled
Unix builds / Ubuntu 20.04 wxGTK 3 with clang (push) Has been cancelled
Unix builds / Ubuntu 22.04 wxGTK with wx containers (push) Has been cancelled
Unix builds / Ubuntu 18.04 wxDFB (push) Has been cancelled
Unix builds / Ubuntu 24.04 wxGTK UBSAN (push) Has been cancelled
Unix builds / Ubuntu 18.04 wxGTK 3 static with gcc 4.8 (push) Has been cancelled
Unix builds / Ubuntu 18.04 wxGTK 2 (push) Has been cancelled
CMake builds / Ubuntu 22.04 wxGTK 3 (push) Has been cancelled
CMake builds / macOS latest wxGTK 3 Unix Makefiles (push) Has been cancelled
CMake builds / MSW/MSVC wxMSW (push) Has been cancelled
CMake builds / MSW/Clang wxMSW (push) Has been cancelled
CMake builds / macOS latest wxOSX Ninja (push) Has been cancelled
CMake builds / macOS 14 wxOSX Xcode (push) Has been cancelled
CMake builds / macOS 14 wxIOS (push) Has been cancelled
CMake builds / MSW/MSVC wxQt 5.15 (push) Has been cancelled
CMake builds / MSW/MSVC wxQt 6.10 (push) Has been cancelled
Mac builds / wxMac ARM ASAN not compatible (push) Has been cancelled
Mac builds / wxMac Universal C++14 (push) Has been cancelled
Mac builds / wxiOS Simulator on Silicon Mac (push) Has been cancelled
Mac builds / wxiOS (push) Has been cancelled
Mac builds / wxMac Intel C++17 (push) Has been cancelled
Mac Xcode builds / iOS Simulator static (push) Has been cancelled
Mac Xcode builds / macOS dynamic Release (push) Has been cancelled
Mac Xcode builds / iOS static Debug (push) Has been cancelled
MSW builds / wxMSW vs2022 DLL Debug x64 (push) Has been cancelled
MSW builds / wxMSW vs2022 DLL Release x64 (push) Has been cancelled
MSW builds / wxMSW vs2022 Debug Win32 (push) Has been cancelled
MSW builds / wxMSW vs2022 Release arm64 (push) Has been cancelled
MSW builds / wxMSW vs2026 DLL Release x64 (push) Has been cancelled
MSW cross-builds / wxMSW 64 bits not compatible (push) Has been cancelled
MSW cross-builds / wxMSW/Univ (push) Has been cancelled
MSW cross-builds / wxMSW 32 bits (push) Has been cancelled
Code Checks / Check Spelling (push) Has been cancelled
Code Checks / Check Whitespace (push) Has been cancelled
Code Checks / Check Mixed EOL (push) Has been cancelled
Code Checks / Check C++ Style (push) Has been cancelled
Code Checks / Check All Headers In allheaders.h (push) Has been cancelled
Update Documentation / Update Online Documentation (push) Has been cancelled
Don't use legacy encoding for it, this was unexpected and resulted in
e.g. wxClipboard::IsSupported(wxDF_TEXT) returning false when there was
text on the clipboard and IsSupported(wxDF_UNICODETEXT) returned true.
On current systems text and Unicode text are the same thing, so make
behaviour of wxDF_TEXT consistent with wxDF_UNICODETEXT.
See #26552.
Closes#26565.
It has not been possible to build with this option disabled for 4 years.
It appears there has been little effort to support this option since
then. For 8 years, there has been a duplicate definition of
wxUxThemeIsActive(), causing a linker warning.
Closes#26509.
This reverts commit 079b891f3b (Document change of wxGetTranslation()
return type to wxString, 2026-02-18) after reverting df0d6be9ca (Revert
"Change return type of wxGetTranslation", 2026-05-03) which that commit
was documenting.
- Upgrade Doxyfile configuration for 1.15.0
- Upgrade Doxygen Awesome to v2.4.2 (compatible up to Doxygen 1.15.0)
- Upgrade GitHub workflow Doxygen version to 1.15.0
- Tweak main navigation button spacing to match previous style
- Fix search box icon styles
- Fix class member definition group styles (missed by DA)
- Replace backticks used as apostrophe/quote in docs
- Fix remaining Doxygen warnings when processed with 1.15.0
- Bump required Doxygen version to 1.15.0
Closes#25603.
Closes#26431.
Disabling it doesn't save much on code size and the build without it is
currently broken anyhow, so just remove the possibility to turn it off.
Closes#26388.
Closes#26402.
The implementation of GetImageLogicalSize() overload taking the image
index returned correct answer for this individual image, but was wrong
when used in the control with multiple images with different logical
sizes. This resulted in the actual bitmap being drawn, as returned by
GetImageBitmapFor(), being of different size than the size returned by
this function, as GetImageBitmapFor() uses the best ("consensus") size
for all images, which is also returned by GetImageLogicalSize() overload
not taking the image.
Solve this by simply getting rid of the overload taking the image and
replacing all existing calls to it with the calls to the other overload.
This is backwards-incompatible, but this function was only added in 3.3
and removing it is a lesser evil than either leaving a function which
can only be misused, or keeping the unused image index parameter which
would be confusing.
See #26397.
Closes#26391.