[Git][wxwidgets/wxwidgets][3.2] 14 commits: Fix regression in wxDateTime::Format("%F %T") with MSVC

1 view
Skip to first unread message

Vadim Zeitlin (@_VZ_)

unread,
Feb 28, 2026, 8:15:59 AM (9 days ago) Feb 28
to wx-commi...@googlegroups.com


Vadim Zeitlin pushed to branch 3.2 at wxWidgets / wxWidgets


Commits:
8f074ff4 by Vadim Zeitlin at 2026-02-10T13:59:29+01:00
Fix regression in wxDateTime::Format("%F %T") with MSVC

Fix incorrect backport done in b97aee419a (Avoid calling strftime("%F")
when using MinGW, 2023-12-31) which stopped using strftime() for any
Windows compiler, including MSVC, instead of just MinGW, as intended,
and done in master.

See #26179.

- - - - -
df0bcb10 by Vadim Zeitlin at 2026-02-21T21:40:34+01:00
Add forgotten support for %T to our own wxDateTime::Format() code

"%T" was only handled when strftime() could be used but not by our own
implementation, resulting in failing to handle it for format string
including both "%T" and one of the specifiers not supported by the
standard function, such as "%l" or several others when using MinGW.

See #26179, #26180.

(cherry picked from commit 3b01ebf5efa84505ef6e92858c3848c06189e87f)

- - - - -
31c86417 by Vadim Zeitlin at 2026-02-21T21:40:34+01:00
Fix script used to change macOS install names with configure

The previous attempt to fix it in 30c0f6a675 (Fix readlink problem in
configure build under macOS < 12, 2025-08-02) introduced multiple
problems, not least of which was the install name was changed in _not_
installed libraries rather than the installed copies.

Fix this and use more readable names for the different directories
instead of cryptic ${N} variables.

Use realpath instead of readlink because it gives the ultimate link
target directly instead of just another symlink.

Also use printf instead of ls because the latter is unnecessary and we
don't need to worry about using its "-1" option.

See #23143, #25173, #25182, #25675, #26200.

- - - - -
fcad020c by Carlo Bramini at 2026-02-21T21:40:34+01:00
Use correct name for Cairo DLL when using Cygwin

See #26207.

(cherry picked from commit ed0abebb66ecd8ae11682c7b8313d61b44ade37a)

- - - - -
7a23d477 by Carlo Bramini at 2026-02-21T21:40:34+01:00
Fix undefined reference to cairo_surface_get_device_scale()

This function needs to be loaded dynamically too.

See #26218.

(cherry picked from commit 583d44d6bc024980f92381c9c11fdaf4db8a20fe)

- - - - -
d3ff6574 by Maarten Bent at 2026-02-21T21:40:34+01:00
CMake: Don't search for Qt6 package

wxQT in wx3.2 does not support Qt6, so don't try to find it in CMake.
See #26065

- - - - -
039a6c9b by Maarten Bent at 2026-02-21T21:40:34+01:00
Backport CMake changes

Add the FindGTK2 module from #26040, so CMake first used PkgConfig to find GTK2 and if that fails, the built-in module.

Fix a few typos.

- - - - -
b83d79b9 by Vadim Zeitlin at 2026-02-23T12:01:55+01:00
Fix several memory leaks in wxOSX

This is a cherry-pick of the merge commit fab7c65eb1 (Merge branch
'osx-memory-leaks', 2026-02-22).

See #26208, #26215.

- - - - -
0157304b by Vadim Zeitlin at 2026-02-23T14:05:39+01:00
Fix autoconf build for macOS < 13

The recent 31c8641771 (Fix script used to change macOS install names
with configure, 2026-02-18) broke it by using realpath not available
until macOS 13.

Return to using (nested) readlink calls.

See #25675, #26200.

(cherry picked from commit 6799a112215247590b00b8dd024b6e42679a61c4)

- - - - -
bdc7d2da by Vadim Zeitlin at 2026-02-24T16:54:10+01:00
Fix building non-GTK ports under Windows with Cairo >= 1.18

Cairo 1.18 broke using cairo_public redefinition hack used before to
avoid declaring Cairo functions as being dll-imported. Use the new way
to prevent this from happening but still define cairo_public when using
older versions.

Note that, unfortunately, we can't do it unconditionally because this
results in a macro redefinition warning with newer versions which is
impossible to disable using gcc.

As the new hack is even worse than the existing one, move it into its
own header to avoid duplicating it in both between src/common/cairo.cpp
and src/generic/graphicc.cpp.

See #26224.

(cherry picked from commit 3193ce30afd793e81fd196e8b3a8484a85c4da5c)

- - - - -
e2c63254 by Randalphwa at 2026-02-24T16:55:51+01:00
Fix handling of "%s" in vararg functions in some UTF-8 builds

When wxUSE_UNICODE_UTF8 is set to 1, strings use UTF-8 and are still
char strings and not wchar_t ones, but when using wx own implementation
of vsnprintf(), "%s" expected a wide string and not a normal one.

Fix this at wxPrintfFormatConverterUtf8 level.

See #26236.

(cherry picked from commit c90aaa3d098f3c9f0fa82d63e14ed0cc93209c68)

- - - - -
fb092018 by Vadim Zeitlin at 2026-02-26T18:27:44+01:00
Fix breakage in wxDateTime::Format("%F") for MSVC < 14

The changes of 8f074ff44f (Fix regression in wxDateTime::Format("%F %T")
with MSVC, 2026-02-10) broke this for old MSVC versions which didn't
have "%F" support.

See #26179.

- - - - -
ac5c9a07 by Vadim Zeitlin at 2026-02-27T14:58:22+01:00
Fix handling right and middle clicks in vertical wxAuiToolBar

They were wrongly recognized as clicks on the overflow item due to the
hit test check being correct for horizontal toolbars only.

Fix this by using the same, simpler and much more obviously correct,
check that was already used for the left mouse button and just tests if
GetOverflowRect() contains the point.

See #26242.

(cherry picked from commit 00ebfc927568fb948122ec4bebdd35adfb88598d)

- - - - -
aa1a25e7 by Vadim Zeitlin at 2026-02-28T13:50:12+01:00
Update release files for 3.2.10

Follow the instructions in docs/contributing/how-to-release.md

- - - - -


29 changed files:

- build/cmake/lib/webview/CMakeLists.txt
- + build/cmake/modules/FindGTK2.cmake
- build/cmake/toolkit.cmake
- configure
- configure.in
- docs/changes.txt
- docs/doxygen/mainpages/manual.h
- docs/msw/binaries.md
- docs/publicity/announce.txt
- docs/readme.txt
- docs/release.md
- + include/wx/private/cairo.h
- src/aui/auibar.cpp
- src/common/cairo.cpp
- src/common/datetimefmt.cpp
- src/common/strvararg.cpp
- src/generic/graphicc.cpp
- src/osx/carbon/fontdlgosx.mm
- src/osx/cocoa/dataview.mm
- src/osx/cocoa/dnd.mm
- src/osx/cocoa/menu.mm
- src/osx/cocoa/overlay.mm
- src/osx/cocoa/statbox.mm
- src/osx/cocoa/textctrl.mm
- src/osx/cocoa/window.mm
- src/osx/core/uilocale.mm
- src/osx/webview_webkit.mm
- src/stc/PlatWXcocoa.mm
- tests/datetime/datetimetest.cpp


Changes:

=====================================
build/cmake/lib/webview/CMakeLists.txt
=====================================
@@ -119,7 +119,7 @@ endif()

# webkit extension plugin
# we can't use (all of the) macros and functions because this library should
-# always be build as a shared libary, and not included in the monolithic build.
+# always be built as a shared library, and not included in the monolithic build.
if(WXGTK AND wxUSE_WEBVIEW_WEBKIT2)
wx_append_sources(WEBKIT2_EXT_FILES WEBVIEW_WEBKIT2_EXTENSION)
add_library(wxwebkit2_ext SHARED ${WEBKIT2_EXT_FILES})


=====================================
build/cmake/modules/FindGTK2.cmake
=====================================
@@ -0,0 +1,63 @@
+# - Try to find GTK+ 2
+# Once done, this will define
+#
+# GTK2_FOUND - system has GTK+ 2.
+# GTK2_INCLUDE_DIRS - the GTK+ 2. include directories
+# GTK2_LIBRARIES - link these to use GTK+ 2.
+#
+# Copyright (C) 2012 Raphael Kubo da Costa <rak...@webkit.org>
+# Copyright (C) 2013 Igalia S.L.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND ITS CONTRIBUTORS ``AS
+# IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR ITS
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+find_package(PkgConfig)
+pkg_check_modules(GTK2 QUIET gtk+-2.0)
+set(VERSION_OK TRUE)
+if (GTK2_VERSION)
+if (GTK2_FIND_VERSION_EXACT)
+if (NOT("${GTK2_FIND_VERSION}" VERSION_EQUAL "${GTK2_VERSION}"))
+set(VERSION_OK FALSE)
+endif ()
+else ()
+if ("${GTK2_VERSION}" VERSION_LESS "${GTK2_FIND_VERSION}")
+set(VERSION_OK FALSE)
+endif ()
+endif ()
+endif ()
+
+# silence output
+set(GTK2_FIND_QUIETLY_TEMP ${GTK2_FIND_QUIETLY})
+set(GTK2_FIND_QUIETLY TRUE)
+
+include(FindPackageHandleStandardArgs)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(GTK2 DEFAULT_MSG GTK2_INCLUDE_DIRS GTK2_LIBRARIES VERSION_OK)
+
+set(GTK2_FIND_QUIETLY ${GTK2_FIND_QUIETLY_TEMP})
+
+mark_as_advanced(GTK2_INCLUDE_DIRS GTK2_LIBRARIES)
+
+# not found using PkgConfig, use CMake's FindGTK2
+if(NOT GTK2_FOUND)
+ set(CMAKE_MODULE_PATH_TEMP ${CMAKE_MODULE_PATH})
+ set(CMAKE_MODULE_PATH "")
+ find_package(GTK2)
+ set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH_TEMP})
+endif()


=====================================
build/cmake/toolkit.cmake
=====================================
@@ -129,7 +129,7 @@ if(UNIX AND NOT WIN32 AND (WXX11 OR WXMOTIF OR WXGTK2 OR (WXGTK AND wxHAVE_GDK_X
endif()

if(WXQT)
- find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core)
+ find_package(QT NAMES Qt5 REQUIRED COMPONENTS Core)

if(QT_VERSION_MAJOR EQUAL 5)
set(QT_COMPONENTS Core Widgets Gui OpenGL OpenGL Test)


=====================================
configure
=====================================
@@ -34269,27 +34269,31 @@ rm -f core conftest.err conftest.$ac_objext \
install_name_tool=`which ${HOST_PREFIX}install_name_tool`
if test "$install_name_tool" -a -x "$install_name_tool"; then
DYLIB_RPATH_POSTLINK="${HOST_PREFIX}install_name_tool -id \$@ \$@"
- cat <<EOF >change-install-names
+ cat <<EOF >change-install-names
#!/bin/sh
set -e
-libdir=\$(cd lib ; pwd -P)
-libnames=\$(cd lib ; ls -1 libwx*${WX_RELEASE}.dylib)
+[ -z "\${WXDEBUG_X}" ] || set -x
+destdir=\$1
+libdir=\$2
+bindir=\$3
+build_libdir=\$4
+libnames=\$(cd \${build_libdir}; printf '%s\n' libwx*${WX_RELEASE}.dylib)
changes=''
-for dep in \${libnames} ; do
- target=\$(readlink \${4}/\${dep})
- changes="\${changes} -change \${libdir}\${target} \${3}/\${dep}"
+for libname in \${libnames} ; do
+ target=\$(readlink \${build_libdir}/\$(readlink \${build_libdir}/\${libname}))
+ changes="\${changes} -change \${build_libdir}/\${target} \${libdir}/\${target}"
done
-for i in \${libnames} ; do
- lib=\$(readlink \${1}/\${i})
- ${HOST_PREFIX}install_name_tool \${changes} -id \${3}/\${i} \${libdir}/\${lib}
+for libname in \${libnames} ; do
+ target=\$(readlink \${build_libdir}/\$(readlink \${build_libdir}/\${libname}))
+ ${HOST_PREFIX}install_name_tool \${changes} -id \${libdir}/\${libname} \${destdir}\${libdir}/\${target}
done

-if test -f "\${2}/wxrc-${WX_RELEASE}" ; then
- ${HOST_PREFIX}install_name_tool \${changes} \${2}/wxrc-${WX_RELEASE}
+if test -f \${destdir}\${bindir}/wxrc-${WX_RELEASE} ; then
+ ${HOST_PREFIX}install_name_tool \${changes} \${destdir}\${bindir}/wxrc-${WX_RELEASE}
fi
EOF
chmod +x change-install-names
- DYLIB_RPATH_INSTALL="\$(wx_top_builddir)/change-install-names \${DESTDIR}\${libdir} \${DESTDIR}\${bindir} \${libdir} \$(wx_top_builddir)/lib"
+ DYLIB_RPATH_INSTALL="\$(wx_top_builddir)/change-install-names \"\${DESTDIR}\" \${libdir} \${bindir} \$(wx_top_builddir)/lib"
fi

HEADER_PAD_OPTION="-headerpad_max_install_names"


=====================================
configure.in
=====================================
@@ -4140,27 +4140,35 @@ if test "$wxUSE_SHARED" = "yes"; then
install_name_tool=`which ${HOST_PREFIX}install_name_tool`
if test "$install_name_tool" -a -x "$install_name_tool"; then
DYLIB_RPATH_POSTLINK="${HOST_PREFIX}install_name_tool -id \$@ \$@"
+ dnl Note that the script below doesn't use realpath because it's
+ dnl only available since macOS 13 and doesn't even use readlink -f
+ dnl because this is only available since macOS 12, while we still
+ dnl need to support 10.10.
cat <<EOF >change-install-names
#!/bin/sh
set -e
-libdir=\$(cd lib ; pwd -P)
-libnames=\$(cd lib ; ls -1 libwx*${WX_RELEASE}.dylib)
+[[ -z "\${WXDEBUG_X}" ]] || set -x
+destdir=\$1
+libdir=\$2
+bindir=\$3
+build_libdir=\$4
+libnames=\$(cd \${build_libdir}; printf '%s\n' libwx*${WX_RELEASE}.dylib)
changes=''
-for dep in \${libnames} ; do
- target=\$(readlink \${4}/\${dep})
- changes="\${changes} -change \${libdir}\${target} \${3}/\${dep}"
+for libname in \${libnames} ; do
+ target=\$(readlink \${build_libdir}/\$(readlink \${build_libdir}/\${libname}))
+ changes="\${changes} -change \${build_libdir}/\${target} \${libdir}/\${target}"
done
-for i in \${libnames} ; do
- lib=\$(readlink \${1}/\${i})
- ${HOST_PREFIX}install_name_tool \${changes} -id \${3}/\${i} \${libdir}/\${lib}
+for libname in \${libnames} ; do
+ target=\$(readlink \${build_libdir}/\$(readlink \${build_libdir}/\${libname}))
+ ${HOST_PREFIX}install_name_tool \${changes} -id \${libdir}/\${libname} \${destdir}\${libdir}/\${target}
done

-if test -f "\${2}/wxrc-${WX_RELEASE}" ; then
- ${HOST_PREFIX}install_name_tool \${changes} \${2}/wxrc-${WX_RELEASE}
+if test -f \${destdir}\${bindir}/wxrc-${WX_RELEASE} ; then
+ ${HOST_PREFIX}install_name_tool \${changes} \${destdir}\${bindir}/wxrc-${WX_RELEASE}
fi
EOF
chmod +x change-install-names
- DYLIB_RPATH_INSTALL="\$(wx_top_builddir)/change-install-names \${DESTDIR}\${libdir} \${DESTDIR}\${bindir} \${libdir} \$(wx_top_builddir)/lib"
+ DYLIB_RPATH_INSTALL="\$(wx_top_builddir)/change-install-names \"\${DESTDIR}\" \${libdir} \${bindir} \$(wx_top_builddir)/lib"
fi

dnl the HEADER_PAD_OPTION is required by some wx samples to avoid the error:


=====================================
docs/changes.txt
=====================================
@@ -252,12 +252,13 @@ Changes in behaviour which may result in build errors
minimum required version is now 2005.


-3.2.10: (released 2026-??-??)
+3.2.10: (released 2026-03-03)
-----------------------------

All (GUI):

- Fix stc.h with wxNO_IMPLICIT_WXSTRING_ENCODING (reid-p, arch1t3cht, #25047).
+- Fix right/middle click events in vertical wxAuiToolBar (#26242).

wxMSW:

@@ -268,8 +269,10 @@ wxMSW:

wxOSX:

+- Fix install names after "make install" (#25675).
- Fix bug when deleting wxDataViewCtrl items (Hartwig Wiesmann, #26138).
- Fix crash on some key presses in wxDataViewCtrl (#26160).
+- Fix memory leaks in a number of controls (#26208).
- Fix regression in wxFileDialog filters in 3.2.9 (#26148).
- Improve wxRichTextCtrl handling of cursor keys (Lee Ockert, #26064).
- Many appearance fixes for macOS 26 Tahoe (#26058, #25767, #26121).


=====================================
docs/doxygen/mainpages/manual.h
=====================================
@@ -14,7 +14,7 @@
@author Julian Smart, Vadim Zeitlin, Robin Dunn, Stefan Csomor,
Bryan Petty, Francesco Montorsi, Robert Roebling et al

-@date December 12, 2015
+@date March 3, 2026

Welcome to wxWidgets, a stable and powerful open source framework for
developing native cross-platform GUI applications in C++!


=====================================
docs/msw/binaries.md
=====================================
@@ -17,7 +17,7 @@ Getting the files
-----------------

First, you need to get the correct files. You will always need the
-`wxWidgets-3.2.9-headers.7z` one but the rest depends on your compiler version
+`wxWidgets-3.2.10-headers.7z` one but the rest depends on your compiler version
and architecture: as different versions of MSVC compiler are not binary
compatible, you should select the files with the correct
`vc80`, `vc90`, `vc100`, `vc110`, `vc120`, or `vc14x`
@@ -28,14 +28,14 @@ or the ones without this suffix for the still more common 32-bit builds. After
determining the combination of suffixes you need, you should download the
"Dev" and the "ReleaseDLL" files in addition to the "Headers" one above,
e.g. for 32-bit MSVS 2017 development you need
-`wxMSW-3.2.9_vc14x_Dev.7z` and `wxMSW-3.2.9_vc14x_ReleaseDLL.7z`.
+`wxMSW-3.2.10_vc14x_Dev.7z` and `wxMSW-3.2.10_vc14x_ReleaseDLL.7z`.

All binaries are available at:

-https://www.wxwidgets.org/downloads#v3.2.9_msw
+https://www.wxwidgets.org/downloads#v3.2.10_msw

Once you have the files you need, unzip all of them into the same directory, for
-example `c:\wx\3.2.9`. You should have `include` and `lib` subdirectories under
+example `c:\wx\3.2.10`. You should have `include` and `lib` subdirectories under
this directory, as well as files such as `wxwidgets.props`.

Note: To avoid hard-coding this path into your projects, define `wxwin`


=====================================
docs/publicity/announce.txt
=====================================
@@ -1,41 +1,35 @@
-December 12, 2015 -- The wxWidgets team is pleased to announce a new
+March 3, 2015 -- The wxWidgets team is pleased to announce a new
stable release of our open source framework for the development of native
cross-platform applications in C++.

-wxWidgets 3.2.9 is part of the API and ABI-stable 3.2.x release series and is
+wxWidgets 3.2.10 is part of the API and ABI-stable 3.2.x release series and is
now available from

https://www.wxwidgets.org/downloads/

and

- https://github.com/wxWidgets/wxWidgets/releases/v3.2.9
+ https://github.com/wxWidgets/wxWidgets/releases/v3.2.10


-This release doesn't add any major new features, but contains some important
-fixes for bugs found in the previous 3.2.8 release:
+This is a minor bug-fix release with just a single new addition: wxWidgets now
+includes project files for Microsoft Visual Studio 2026.

-- Fix crash when using Farsi as system language under macOS (#25561).
-- Fix handling total window size with GNOME with X11 (#25348).
-- Fix memory leak when using wxOverlay (#24500).
-- Fix wxGLCanvas scale when using EGL/Wayland in high DPI (Popax21, #23733).
-- Fix missing wxEVT_CHAR for Ctrl-Letter in non-US layouts (#25384).
-- Fix selecting columns in wxGrid with mouse (Dietmar Schwertberger, #25884).
+It does contain a number of important bug fixes for macOS port of wxWidgets,
+notably:

-The new release still contains a couple of enhancements, including:
+- Fix install names of the libraries when using "make install" (#25675).
+- Fix crash on some key presses in wxDataViewCtrl (#26160).
+- Fix memory leaks in a number of controls (#26208).
+- Fix regression in wxFileDialog filters in 3.2.9 (#26148).
+- Many fixes for macOS 26 Tahoe (#26058, #25767, #26121, #26095).

-- Many improvements to CMake build system (#25448, #25749, #25998).
-- Support for building under macOS 26 Tahoe (#25798).
-- Fix wxStyledTextCtrl support in screen readers (Maarten Bent, #25963).
-- Respect HTML5 charset attribute in wxHTML (Kees van der Oord, #25546).
-- Add support for using EGL 1.4 (and not 1.5) in wxGLCanvas (#22325).
+Some other bugs fixed in this release:

-Other changes include:
-
-- Fix memory leak in wxColour::Set() under macOS (#25569).
-- Fix memory leak when using wxOverlay in wxGTK (#24500).
-- Reduce wxStaticBitmap GDI resource usage in wxMSW (Alex Shvartzkop, #25698).
-- Significantly improve performance of drawing bitmaps in wxAUI (#23841).
+- Don't use first image for wxListCtrl items without images in wxMSW (#26062).
+- Fix regression in wxStaticBitmap::SetBitmap() in wxMSW 3.2.9 (#26106).
+- Handle font names longer than 31 characters in wxMSW (moi15moi, #25333).
+- Fix right/middle click events in vertical wxAuiToolBar (#26242).

Please see the full change log for more details:



=====================================
docs/readme.txt
=====================================
@@ -32,32 +32,27 @@ installation instructions.



-Changes since 3.2.8
+Changes since 3.2.9
-------------------

-This release doesn't add any major new features, but contains some important
-fixes for bugs found in the previous 3.2.8 release:
+This is a minor bug-fix release with just a single new addition: wxWidgets now
+includes project files for Microsoft Visual Studio 2026.

-- Fix crash when using Farsi as system language under macOS (#25561).
-- Fix handling total window size with GNOME with X11 (#25348).
-- Fix wxGLCanvas scale when using EGL/Wayland in high DPI (Popax21, #23733).
-- Fix missing wxEVT_CHAR for Ctrl-Letter in non-US layouts (#25384).
-- Fix selecting columns in wxGrid with mouse (Dietmar Schwertberger, #25884).
+It does contain a number of important bug fixes for macOS port of wxWidgets,
+notably:

-The new release still contains a couple of enhancements, including:
+- Fix install names of the libraries when using "make install" (#25675).
+- Fix crash on some key presses in wxDataViewCtrl (#26160).
+- Fix memory leaks in a number of controls (#26208).
+- Fix regression in wxFileDialog filters in 3.2.9 (#26148).
+- Many fixes for macOS 26 Tahoe (#26058, #25767, #26121, #26095).

-- Many improvements to CMake build system (#25448, #25749, #25998).
-- Support for building under macOS 26 Tahoe (#25798).
-- Fix wxStyledTextCtrl support in screen readers (Maarten Bent, #25963).
-- Respect HTML5 charset attribute in wxHTML (Kees van der Oord, #25546).
-- Add support for using EGL 1.4 (and not 1.5) in wxGLCanvas (#22325).
+Some other bugs fixed in this release:

-Other changes include:
-
-- Fix memory leak in wxColour::Set() under macOS (#25569).
-- Fix memory leak when using wxOverlay in wxGTK (#24500).
-- Reduce wxStaticBitmap GDI resource usage in wxMSW (Alex Shvartzkop, #25698).
-- Significantly improve performance of drawing bitmaps in wxAUI (#23841).
+- Don't use first image for wxListCtrl items without images in wxMSW (#26062).
+- Fix regression in wxStaticBitmap::SetBitmap() in wxMSW 3.2.9 (#26106).
+- Handle font names longer than 31 characters in wxMSW (moi15moi, #25333).
+- Fix right/middle click events in vertical wxAuiToolBar (#26242).

Please see the full change log for more details:

@@ -161,4 +156,4 @@ developed by its users and your contributions to it are always welcome!

Have fun!

-The wxWidgets Team, December 2015
+The wxWidgets Team, March 2026


=====================================
docs/release.md
=====================================
@@ -1,33 +1,33 @@
Welcome to wxWidgets, a free and open source cross-platform C++ framework for writing advanced GUI applications using native controls.

-wxWidgets 3.2.9 is part of 3.2 stable branch. This means that it is API _and_ ABI-compatible with the previous 3.2.x releases, i.e. the applications previously built using 3.2.8 or earlier shared libraries will continue working with this release even without recompiling when using shared libraries and can be rebuilt without any changes to the code otherwise.
+wxWidgets 3.2.10 is part of 3.2 stable branch. This means that it is API _and_ ABI-compatible with the previous 3.2.x releases, i.e. the applications previously built using 3.2.9 or earlier shared libraries will continue working with this release even without recompiling when using shared libraries and can be rebuilt without any changes to the code otherwise.

We recommend using this version for any new wxWidgets applications. Existing applications using wxWidgets 3.0 or 3.1 shouldn't require any special effort to upgrade to this version too, so please try upgrading them to it.

-Please see [**README**](https://raw.githubusercontent.com/wxWidgets/wxWidgets/v3.2.9/docs/readme.txt) for more information about this release and the [change log](https://raw.githubusercontent.com/wxWidgets/wxWidgets/v3.2.9/docs/changes.txt) for more details of the changes in it.
+Please see [**README**](https://raw.githubusercontent.com/wxWidgets/wxWidgets/v3.2.10/docs/readme.txt) for more information about this release and the [change log](https://raw.githubusercontent.com/wxWidgets/wxWidgets/v3.2.10/docs/changes.txt) for more details of the changes in it.


## Source Files and Documentation

If you intend to build wxWidgets from sources (which is recommended), please do **NOT** download the files using the "Source code" links just above, which are automatically generated by GitHub and don't contain the submodules sources which are necessary for building wxWidgets.

-Instead, download one of [wxWidgets-3.2.9.zip](https://github.com/wxWidgets/wxWidgets/releases/download/v3.2.9/wxWidgets-3.2.9.zip) or [wxWidgets-3.2.9.7z](https://github.com/wxWidgets/wxWidgets/releases/download/v3.2.9/wxWidgets-3.2.9.7z), for much smaller size, for Microsoft Windows systems or [wxWidgets-3.2.9.tar.bz2](https://github.com/wxWidgets/wxWidgets/releases/download/v3.2.9/wxWidgets-3.2.9.tar.bz2) for Unix ones, including macOS. These archives have exactly the same contents, but use the line endings appropriate for the corresponding platform.
+Instead, download one of [wxWidgets-3.2.10.zip](https://github.com/wxWidgets/wxWidgets/releases/download/v3.2.10/wxWidgets-3.2.10.zip) or [wxWidgets-3.2.10.7z](https://github.com/wxWidgets/wxWidgets/releases/download/v3.2.10/wxWidgets-3.2.10.7z), for much smaller size, for Microsoft Windows systems or [wxWidgets-3.2.10.tar.bz2](https://github.com/wxWidgets/wxWidgets/releases/download/v3.2.10/wxWidgets-3.2.10.tar.bz2) for Unix ones, including macOS. These archives have exactly the same contents, but use the line endings appropriate for the corresponding platform.

-In addition, we provide archives containing the documentation in either HTML or Microsoft CHM formats. Notice that the documentation is also [available online](https://docs.wxwidgets.org/3.2.9).
+In addition, we provide archives containing the documentation in either HTML or Microsoft CHM formats. Notice that the documentation is also [available online](https://docs.wxwidgets.org/3.2.10).

-Finally, Microsoft Windows users may download [Setup.exe file](https://github.com/wxWidgets/wxWidgets/releases/download/v3.2.9/wxMSW-3.2.9-Setup.exe) containing both sources and documentation, however please note that this file does _not_ contain any binaries, please see below for those.
+Finally, Microsoft Windows users may download [Setup.exe file](https://github.com/wxWidgets/wxWidgets/releases/download/v3.2.10/wxMSW-3.2.10-Setup.exe) containing both sources and documentation, however please note that this file does _not_ contain any binaries, please see below for those.

To verify your download please use the following SHA-1 checksums:

- fd1496375d93d5ad5c7861e6a3731f58cccafc9b wxMSW-3.2.9-Setup.exe
- 5af41900f947deca7d81ebadda463262562c5c64 wxWidgets-3.2.9-docs-chm.zip
- 28c6d56a43451379776116d5b2ac0ccd63ed9ad7 wxWidgets-3.2.9-docs-html.tar.bz2
- c6dc3b903fe5182176381156fcaff7b478ada05b wxWidgets-3.2.9-docs-html.zip
- f6affb6e4dfd11f8dd3881c408e26759f8fdf472 wxWidgets-3.2.9-headers.7z
- 927568479fef386a24196b4ba2d9229fdcdbbceb wxWidgets-3.2.9.7z
- 1eb548171cef2e822a2577f09e5383643fb604ce wxWidgets-3.2.9.chm
- 7708bfb796dbf8cad90e9cb6c8ad06d8e0a22c81 wxWidgets-3.2.9.tar.bz2
- b914bd955c9b72ac62f602add8fca4dc61727323 wxWidgets-3.2.9.zip
+ 0000000000000000000000000000000000000000 wxMSW-3.2.10-Setup.exe
+ 0000000000000000000000000000000000000000 wxWidgets-3.2.10-docs-chm.zip
+ 0000000000000000000000000000000000000000 wxWidgets-3.2.10-docs-html.tar.bz2
+ 0000000000000000000000000000000000000000 wxWidgets-3.2.10-docs-html.zip
+ 0000000000000000000000000000000000000000 wxWidgets-3.2.10-headers.7z
+ 0000000000000000000000000000000000000000 wxWidgets-3.2.10.7z
+ 0000000000000000000000000000000000000000 wxWidgets-3.2.10.chm
+ 0000000000000000000000000000000000000000 wxWidgets-3.2.10.tar.bz2
+ 0000000000000000000000000000000000000000 wxWidgets-3.2.10.zip

## Binaries

@@ -40,7 +40,7 @@ We provide pre-built binary files for the following compilers:

### For Developers

-For developing applications with wxWidgets you need to download the compiler-independent `wxWidgets-3.2.9_Headers.7z` file and one of `wxMSW-3.2.9-vcXXX_Dev.7z` or `wxMSW-3.2.9_gccXXX_Dev.7z` files depending on your compiler, its version and the target architecture (x86 if not specified or x64).
+For developing applications with wxWidgets you need to download the compiler-independent `wxWidgets-3.2.10_Headers.7z` file and one of `wxMSW-3.2.10-vcXXX_Dev.7z` or `wxMSW-3.2.10_gccXXX_Dev.7z` files depending on your compiler, its version and the target architecture (x86 if not specified or x64).

Unpack both files into the same directory so that `include` and `lib` directories are at the same level after unpacking. You should be able to compile and link applications using wxWidgets in both debug and release modes but the debug symbols are provided only for debug libraries in this archive, see below for the release build debug symbols.

@@ -48,79 +48,79 @@ Note that if you're setting up a new project using these binaries, the simplest

### For End Users

-End users may download one of `wxMSW-3.2.9_vcXXX_ReleaseDLL.7z` or `wxMSW-3.2.9_gccXXX_ReleaseDLL.7z` files to get just the DLLs required for running the applications using wxWidgets.
+End users may download one of `wxMSW-3.2.10_vcXXX_ReleaseDLL.7z` or `wxMSW-3.2.10_gccXXX_ReleaseDLL.7z` files to get just the DLLs required for running the applications using wxWidgets.

### For Debugging

-* Microsoft Visual C++ users: Files `wxMSW-3.2.9_vcXXX_ReleasePDB.7z` contain the debug symbols for the release build of the DLLs. Download them if you want to debug your own applications in release build or if you want to get meaningful information from mini-dumps retrieved from your users machines.
+* Microsoft Visual C++ users: Files `wxMSW-3.2.10_vcXXX_ReleasePDB.7z` contain the debug symbols for the release build of the DLLs. Download them if you want to debug your own applications in release build or if you want to get meaningful information from mini-dumps retrieved from your users machines.
* MinGW-TDM users: Currently the debug symbols are not available for the release build of the DLLs (only the debug versions of the DLLs contains the debug symbols).

### Binary File Download Verification

To verify your download please use the following SHA-1 checksums:

- 687ed4d6a7b1dfdb310680cade550da204bff899 wxMSW-3.2.9_gcc1030TDM_Dev.7z
- 22edf443395644da56d26ca6e9c533ff89553199 wxMSW-3.2.9_gcc1030TDM_ReleaseDLL.7z
- f51cb8ffa18691d24f446a2e2be61d6776bdca6a wxMSW-3.2.9_gcc1030TDM_x64_Dev.7z
- 3337905f470ad169d29c93380b699cc3cff6b747 wxMSW-3.2.9_gcc1030TDM_x64_ReleaseDLL.7z
- c8566260f5699e55fe0cccbd425580e07d7d1560 wxMSW-3.2.9_gcc1220_Dev.7z
- 350b4a03a3e1f79e943e6b80a064575625c2b6b4 wxMSW-3.2.9_gcc1220_ReleaseDLL.7z
- 571ff6cf3493ab9ccf2809b63a3ebcbe92b1b34e wxMSW-3.2.9_gcc1220_x64_Dev.7z
- ac347b5554dbdd36dab48f22617f6806f6bb64df wxMSW-3.2.9_gcc1220_x64_ReleaseDLL.7z
- a665120e7ebbd7c07372cd24ed030e7aaa951fd4 wxMSW-3.2.9_gcc1320_Dev.7z
- 990b20266dd627a241913fef81d343cbeb1c5dc7 wxMSW-3.2.9_gcc1320_ReleaseDLL.7z
- 32057eac9dc39ab7cc5ba75b4cba1b9b83a28a3b wxMSW-3.2.9_gcc1320_x64_Dev.7z
- 0575f3dc22e5e6101ac0f6bab94dccadab6620aa wxMSW-3.2.9_gcc1320_x64_ReleaseDLL.7z
- b3cfa34c20c172e9cf323d37de40987e451a77c2 wxMSW-3.2.9_gcc1420_Dev.7z
- f41e4374f229c5a11c41a45973d465479b685524 wxMSW-3.2.9_gcc1420_ReleaseDLL.7z
- 4fa006f8405a8d082ec57a9c1bbc3908283a477c wxMSW-3.2.9_gcc1420_x64_Dev.7z
- 95dcc6818dfe8e647b80c2fbbdb98f223a722a46 wxMSW-3.2.9_gcc1420_x64_ReleaseDLL.7z
- 635b9b8d5a3c9ad9a41f9b6979f66e16301e96b1 wxMSW-3.2.9_gcc1520_Dev.7z
- f491abb8d44595b273ac5bd9e1fac323560b57ab wxMSW-3.2.9_gcc1520_ReleaseDLL.7z
- a48009378a775b70bbdfbd35f4ba65777fea652c wxMSW-3.2.9_gcc1520_x64_Dev.7z
- 7cef71083b49f407cf43514e9eca0a761d6bc93f wxMSW-3.2.9_gcc1520_x64_ReleaseDLL.7z
- ce4c47a3ae6ecc66fce4a674579524fc170e725c wxMSW-3.2.9_gcc730_Dev.7z
- de891accf029ae486de94bfc9f9ab2a6190b314e wxMSW-3.2.9_gcc730_ReleaseDLL.7z
- 3e7993c1ccd25b87825240379b7204a5a9713672 wxMSW-3.2.9_gcc730_x64_Dev.7z
- 3726c9125f6d22794aa585c6599a232f6a74776f wxMSW-3.2.9_gcc730_x64_ReleaseDLL.7z
- d8792a77465dc61e28520b41a77cde71782b21b9 wxMSW-3.2.9_gcc810_Dev.7z
- 0584d566a425d1786b801c81cce06aabc517eafb wxMSW-3.2.9_gcc810_ReleaseDLL.7z
- 4cf11517a03f31a82d1b524b334df530c89328cb wxMSW-3.2.9_gcc810_x64_Dev.7z
- eabf7c92a18e99fbf8635d0d27b33fb1f68ec1ae wxMSW-3.2.9_gcc810_x64_ReleaseDLL.7z
- 3cb7d6bbe2edf17333f058a9b332d7cb52935ed1 wxMSW-3.2.9_gcc1420UCRT_Dev.7z
- 867309d9a2dcd76cbd3da979e0cd23d86c9815e4 wxMSW-3.2.9_gcc1420UCRT_ReleaseDLL.7z
- 08a65f5328c4094caac4f21121a9e122e053319c wxMSW-3.2.9_gcc1420UCRT_x64_Dev.7z
- 96ff9e21735271b593664e2a66935d17139f8d8f wxMSW-3.2.9_gcc1420UCRT_x64_ReleaseDLL.7z
- 291a752b129ab0402b05bf55903cd5d146c9dcc8 wxMSW-3.2.9_vc90_Dev.7z
- 358a6a130a666f34418e355cb3285171308788db wxMSW-3.2.9_vc90_ReleaseDLL.7z
- 9dfdb9c29b44db342602f126fcfcf89fb42a3449 wxMSW-3.2.9_vc90_ReleasePDB.7z
- 395a77ee037562d6b3ee4d3058c7f7a19be07317 wxMSW-3.2.9_vc90_x64_Dev.7z
- f01a28ab360b45a6ec4e6a8f6c12bc3885188623 wxMSW-3.2.9_vc90_x64_ReleaseDLL.7z
- 0615f4b87a5025427e485489647aefbdc6e4dbcf wxMSW-3.2.9_vc90_x64_ReleasePDB.7z
- cdab5d7f2823520c4eb2752b397ff3b2655bed25 wxMSW-3.2.9_vc100_Dev.7z
- 0c1f55d78ba08f9183fc22f1fbc20e9e63b7917f wxMSW-3.2.9_vc100_ReleaseDLL.7z
- 1033a180ef969a78db845777512a123949619cdd wxMSW-3.2.9_vc100_ReleasePDB.7z
- 11fe54100e160387da39b301c2c3586ffa4307fd wxMSW-3.2.9_vc100_x64_Dev.7z
- af23db3147790a3d403d35626c872360d9c96a5b wxMSW-3.2.9_vc100_x64_ReleaseDLL.7z
- 500725824dbe344e5878b4e7f93360da37c1f7ce wxMSW-3.2.9_vc100_x64_ReleasePDB.7z
- 51fc9b4110fc4a62e3660897a0b7502b75af6157 wxMSW-3.2.9_vc110_Dev.7z
- 1e9dc2379f1f867058d3eceb90937fbadacb6fc9 wxMSW-3.2.9_vc110_ReleaseDLL.7z
- ddcfd404fd885dd69a599eb1ffdafc7df66bf675 wxMSW-3.2.9_vc110_ReleasePDB.7z
- c9e264d6e3c1366e1a152d29def13f165090b857 wxMSW-3.2.9_vc110_x64_Dev.7z
- fbfd3376d72b7435a2ea3afaec40e28ee9813f8c wxMSW-3.2.9_vc110_x64_ReleaseDLL.7z
- 0aaf15fc56f622701f90a73f6ca34b46c8346573 wxMSW-3.2.9_vc110_x64_ReleasePDB.7z
- 01608e5d06713899e1ba0937c608abebaf8117cc wxMSW-3.2.9_vc120_Dev.7z
- 875ec678a0266e8de3be31750918432f15b2c237 wxMSW-3.2.9_vc120_ReleaseDLL.7z
- 92268f98db7f733921acfb06e3a0e20fb4693f10 wxMSW-3.2.9_vc120_ReleasePDB.7z
- 2538eec92411319861f056a05738e1f6c927af03 wxMSW-3.2.9_vc120_x64_Dev.7z
- 98fa8b9322db4ea21bf51109bbd210b3bec5c2ff wxMSW-3.2.9_vc120_x64_ReleaseDLL.7z
- b97324cd1462d808d5807292a1ff81760bd2b2ab wxMSW-3.2.9_vc120_x64_ReleasePDB.7z
- 012d823743b35365cb7f81bdd9e2daeb7359ff69 wxMSW-3.2.9_vc14x_Dev.7z
- c8a4c510d98801d8cce181baf7ed6235f443cd22 wxMSW-3.2.9_vc14x_ReleaseDLL.7z
- b1b2f4af4c19f9058e89bc86988f90e86e640a5c wxMSW-3.2.9_vc14x_ReleasePDB.7z
- d37898a5391c7b91d11e48d71b15d23b91859054 wxMSW-3.2.9_vc14x_x64_Dev.7z
- 9056310a59ce80b9ed2f8a6b83febc753d246b69 wxMSW-3.2.9_vc14x_x64_ReleaseDLL.7z
- 9f25af5cad3561b9becdad42eecee07ade22fd42 wxMSW-3.2.9_vc14x_x64_ReleasePDB.7z
+ 0000000000000000000000000000000000000000 wxMSW-3.2.10_gcc1030TDM_Dev.7z
+ 0000000000000000000000000000000000000000 wxMSW-3.2.10_gcc1030TDM_ReleaseDLL.7z
+ 0000000000000000000000000000000000000000 wxMSW-3.2.10_gcc1030TDM_x64_Dev.7z
+ 0000000000000000000000000000000000000000 wxMSW-3.2.10_gcc1030TDM_x64_ReleaseDLL.7z
+ 0000000000000000000000000000000000000000 wxMSW-3.2.10_gcc1220_Dev.7z
+ 0000000000000000000000000000000000000000 wxMSW-3.2.10_gcc1220_ReleaseDLL.7z
+ 0000000000000000000000000000000000000000 wxMSW-3.2.10_gcc1220_x64_Dev.7z
+ 0000000000000000000000000000000000000000 wxMSW-3.2.10_gcc1220_x64_ReleaseDLL.7z
+ 0000000000000000000000000000000000000000 wxMSW-3.2.10_gcc1320_Dev.7z
+ 0000000000000000000000000000000000000000 wxMSW-3.2.10_gcc1320_ReleaseDLL.7z
+ 0000000000000000000000000000000000000000 wxMSW-3.2.10_gcc1320_x64_Dev.7z
+ 0000000000000000000000000000000000000000 wxMSW-3.2.10_gcc1320_x64_ReleaseDLL.7z
+ 0000000000000000000000000000000000000000 wxMSW-3.2.10_gcc1420_Dev.7z
+ 0000000000000000000000000000000000000000 wxMSW-3.2.10_gcc1420_ReleaseDLL.7z
+ 0000000000000000000000000000000000000000 wxMSW-3.2.10_gcc1420_x64_Dev.7z
+ 0000000000000000000000000000000000000000 wxMSW-3.2.10_gcc1420_x64_ReleaseDLL.7z
+ 0000000000000000000000000000000000000000 wxMSW-3.2.10_gcc1520_Dev.7z
+ 0000000000000000000000000000000000000000 wxMSW-3.2.10_gcc1520_ReleaseDLL.7z
+ 0000000000000000000000000000000000000000 wxMSW-3.2.10_gcc1520_x64_Dev.7z
+ 0000000000000000000000000000000000000000 wxMSW-3.2.10_gcc1520_x64_ReleaseDLL.7z
+ 0000000000000000000000000000000000000000 wxMSW-3.2.10_gcc730_Dev.7z
+ 0000000000000000000000000000000000000000 wxMSW-3.2.10_gcc730_ReleaseDLL.7z
+ 0000000000000000000000000000000000000000 wxMSW-3.2.10_gcc730_x64_Dev.7z
+ 0000000000000000000000000000000000000000 wxMSW-3.2.10_gcc730_x64_ReleaseDLL.7z
+ 0000000000000000000000000000000000000000 wxMSW-3.2.10_gcc810_Dev.7z
+ 0000000000000000000000000000000000000000 wxMSW-3.2.10_gcc810_ReleaseDLL.7z
+ 0000000000000000000000000000000000000000 wxMSW-3.2.10_gcc810_x64_Dev.7z
+ 0000000000000000000000000000000000000000 wxMSW-3.2.10_gcc810_x64_ReleaseDLL.7z
+ 0000000000000000000000000000000000000000 wxMSW-3.2.10_gcc1420UCRT_Dev.7z
+ 0000000000000000000000000000000000000000 wxMSW-3.2.10_gcc1420UCRT_ReleaseDLL.7z
+ 0000000000000000000000000000000000000000 wxMSW-3.2.10_gcc1420UCRT_x64_Dev.7z
+ 0000000000000000000000000000000000000000 wxMSW-3.2.10_gcc1420UCRT_x64_ReleaseDLL.7z
+ 0000000000000000000000000000000000000000 wxMSW-3.2.10_vc90_Dev.7z
+ 0000000000000000000000000000000000000000 wxMSW-3.2.10_vc90_ReleaseDLL.7z
+ 0000000000000000000000000000000000000000 wxMSW-3.2.10_vc90_ReleasePDB.7z
+ 0000000000000000000000000000000000000000 wxMSW-3.2.10_vc90_x64_Dev.7z
+ 0000000000000000000000000000000000000000 wxMSW-3.2.10_vc90_x64_ReleaseDLL.7z
+ 0000000000000000000000000000000000000000 wxMSW-3.2.10_vc90_x64_ReleasePDB.7z
+ 0000000000000000000000000000000000000000 wxMSW-3.2.10_vc100_Dev.7z
+ 0000000000000000000000000000000000000000 wxMSW-3.2.10_vc100_ReleaseDLL.7z
+ 0000000000000000000000000000000000000000 wxMSW-3.2.10_vc100_ReleasePDB.7z
+ 0000000000000000000000000000000000000000 wxMSW-3.2.10_vc100_x64_Dev.7z
+ 0000000000000000000000000000000000000000 wxMSW-3.2.10_vc100_x64_ReleaseDLL.7z
+ 0000000000000000000000000000000000000000 wxMSW-3.2.10_vc100_x64_ReleasePDB.7z
+ 0000000000000000000000000000000000000000 wxMSW-3.2.10_vc110_Dev.7z
+ 0000000000000000000000000000000000000000 wxMSW-3.2.10_vc110_ReleaseDLL.7z
+ 0000000000000000000000000000000000000000 wxMSW-3.2.10_vc110_ReleasePDB.7z
+ 0000000000000000000000000000000000000000 wxMSW-3.2.10_vc110_x64_Dev.7z
+ 0000000000000000000000000000000000000000 wxMSW-3.2.10_vc110_x64_ReleaseDLL.7z
+ 0000000000000000000000000000000000000000 wxMSW-3.2.10_vc110_x64_ReleasePDB.7z
+ 0000000000000000000000000000000000000000 wxMSW-3.2.10_vc120_Dev.7z
+ 0000000000000000000000000000000000000000 wxMSW-3.2.10_vc120_ReleaseDLL.7z
+ 0000000000000000000000000000000000000000 wxMSW-3.2.10_vc120_ReleasePDB.7z
+ 0000000000000000000000000000000000000000 wxMSW-3.2.10_vc120_x64_Dev.7z
+ 0000000000000000000000000000000000000000 wxMSW-3.2.10_vc120_x64_ReleaseDLL.7z
+ 0000000000000000000000000000000000000000 wxMSW-3.2.10_vc120_x64_ReleasePDB.7z
+ 0000000000000000000000000000000000000000 wxMSW-3.2.10_vc14x_Dev.7z
+ 0000000000000000000000000000000000000000 wxMSW-3.2.10_vc14x_ReleaseDLL.7z
+ 0000000000000000000000000000000000000000 wxMSW-3.2.10_vc14x_ReleasePDB.7z
+ 0000000000000000000000000000000000000000 wxMSW-3.2.10_vc14x_x64_Dev.7z
+ 0000000000000000000000000000000000000000 wxMSW-3.2.10_vc14x_x64_ReleaseDLL.7z
+ 0000000000000000000000000000000000000000 wxMSW-3.2.10_vc14x_x64_ReleasePDB.7z

## Reporting Problems



=====================================
include/wx/private/cairo.h
=====================================
@@ -0,0 +1,29 @@
+///////////////////////////////////////////////////////////////////////////////
+// Name: wx/private/cairo.h
+// Purpose: Wrapper for including cairo.h from wx code
+// Author: Vadim Zeitlin
+// Created: 2026-02-23
+// Copyright: (c) 2026 Vadim Zeitlin <va...@wxwidgets.org>
+// Licence: wxWindows licence
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _WX_PRIVATE_CAIRO_H_
+#define _WX_PRIVATE_CAIRO_H_
+
+// We want to prevent cairo.h from using dllimport attribute for the functions
+// it declares as we're loading them dynamically, but this is trickier than it
+// should be because older versions of cairo.h respected cairo_public being
+// defined before including it, but this was broken in 1.18, so we need to
+// define an alternative symbol and avoid defining cairo_public as this would
+// result in a warning about its redefinition.
+#include <cairo-version.h>
+
+#if CAIRO_VERSION_MAJOR > 1 || CAIRO_VERSION_MINOR >= 18
+#define CAIRO_WIN32_STATIC_BUILD
+#else
+#define cairo_public
+#endif
+
+#include <cairo.h>
+
+#endif // _WX_PRIVATE_CAIRO_H_


=====================================
src/aui/auibar.cpp
=====================================
@@ -2721,8 +2721,6 @@ void wxAuiToolBar::OnRightDown(wxMouseEvent& evt)
if (HasCapture())
return;

- wxRect cli_rect(wxPoint(0,0), GetClientSize());
-
if (m_gripperSizerItem)
{
wxRect gripper_rect = m_gripperSizerItem->GetRect();
@@ -2730,16 +2728,10 @@ void wxAuiToolBar::OnRightDown(wxMouseEvent& evt)
return;
}

- if (m_overflowSizerItem && m_art)
+ if (m_overflowSizerItem && m_overflowVisible && m_art)
{
- int overflowSize = m_art->GetElementSize(wxAUI_TBART_OVERFLOW_SIZE);
- if (overflowSize > 0 &&
- evt.m_x > cli_rect.width - overflowSize &&
- evt.m_y >= 0 &&
- evt.m_y < cli_rect.height)
- {
+ if (GetOverflowRect().Contains(evt.GetX(), evt.GetY()))
return;
- }
}

m_actionPos = wxPoint(evt.GetX(), evt.GetY());
@@ -2793,8 +2785,6 @@ void wxAuiToolBar::OnMiddleDown(wxMouseEvent& evt)
if (HasCapture())
return;

- wxRect cli_rect(wxPoint(0,0), GetClientSize());
-
if (m_gripperSizerItem)
{
wxRect gripper_rect = m_gripperSizerItem->GetRect();
@@ -2802,16 +2792,10 @@ void wxAuiToolBar::OnMiddleDown(wxMouseEvent& evt)
return;
}

- if (m_overflowSizerItem && m_art)
+ if (m_overflowSizerItem && m_overflowVisible && m_art)
{
- int overflowSize = m_art->GetElementSize(wxAUI_TBART_OVERFLOW_SIZE);
- if (overflowSize > 0 &&
- evt.m_x > cli_rect.width - overflowSize &&
- evt.m_y >= 0 &&
- evt.m_y < cli_rect.height)
- {
+ if (GetOverflowRect().Contains(evt.GetX(), evt.GetY()))
return;
- }
}

m_actionPos = wxPoint(evt.GetX(), evt.GetY());


=====================================
src/common/cairo.cpp
=====================================
@@ -14,11 +14,8 @@

#if wxUSE_CAIRO && !defined(__WXGTK20__)

-// keep cairo.h from defining dllimport as we're defining the symbols inside
-// the wx dll in order to load them dynamically.
-#define cairo_public
+#include "wx/private/cairo.h"

-#include <cairo.h>
#include "wx/dynlib.h"

#ifdef __WXMSW__
@@ -186,7 +183,9 @@
m( cairo_user_to_device_distance, \
(cairo_t* cr, double *dx, double* dy), (cr, dx, dy) ) \
m( cairo_surface_mark_dirty, \
- (cairo_surface_t* surface), (surface))
+ (cairo_surface_t* surface), (surface)) \
+ m( cairo_surface_get_device_scale, \
+ (cairo_surface_t *surface, double *x_scale, double *y_scale), (surface, x_scale, y_scale))

#ifdef __WXMAC__
#define wxCAIRO_PLATFORM_METHODS(m) \
@@ -326,7 +325,9 @@ wxCairo::wxCairo()
{
wxLogNull log;

-#ifdef __WXMSW__
+#ifdef __CYGWIN__
+ wxString cairoDllStr("cygcairo-2.dll");
+#elif defined(__WXMSW__)
wxString cairoDllStr("libcairo-2.dll");
#elif defined(__WXOSX__)
wxString cairoDllStr("libcairo.2.dylib");


=====================================
src/common/datetimefmt.cpp
=====================================
@@ -356,7 +356,10 @@ wxString wxDateTime::Format(const wxString& formatp, const TimeZone& tz) const
{
case 'l':
#ifdef __WINDOWS__
+ // Versions of MSVC until 2015 and MinGW don't support "%F".
+#if defined(__MINGW32__) || (defined(__VISUALC__) && !wxCHECK_VISUALC_VERSION(14))
case 'F':
+#endif
case 'g':
case 'G':
case 'V':
@@ -635,6 +638,10 @@ wxString wxDateTime::Format(const wxString& formatp, const TimeZone& tz) const
res += wxString::Format(fmt, tm.sec);
break;

+ case wxT('T'): // time as %H:%M:%S
+ res += wxString::Format(wxT("%02d:%02d:%02d"), tm.hour, tm.min, tm.sec);
+ break;
+
case wxT('U'): // week number in the year (Sunday 1st week day)
res += wxString::Format(fmt, GetWeekOfYear(Sunday_First, tz));
break;


=====================================
src/common/strvararg.cpp
=====================================
@@ -478,7 +478,14 @@ class wxPrintfFormatConverterUtf8 : public wxFormatConverterBase<char>
CharType& outConv, SizeModifier& outSize) wxOVERRIDE
{
outConv = 's';
+#if wxUSE_WXVSNPRINTFA
+ // When using wx's own vsnprintf implementation, plain %s is
+ // interpreted as wchar_t*. We need %hs to indicate char* args,
+ // which is what we actually pass in UTF-8 builds.
+ outSize = Size_Short;
+#else
outSize = Size_Default;
+#endif
}

virtual void HandleChar(CharType WXUNUSED(conv),


=====================================
src/generic/graphicc.cpp
=====================================
@@ -17,13 +17,8 @@

#if wxUSE_CAIRO

-#ifndef __WXGTK20__
-// keep cairo.h from defining dllimport as we're defining the symbols inside
-// the wx dll in order to load them dynamically.
-#define cairo_public
-#endif
+#include "wx/private/cairo.h"

-#include <cairo.h>
#include <float.h>

bool wxCairoInit();


=====================================
src/osx/carbon/fontdlgosx.mm
=====================================
@@ -149,6 +149,8 @@

[self addSubview:cancelButton];
[self addSubview:okButton];
+ [cancelButton release];
+ [okButton release];

[self resetFlags];
}


=====================================
src/osx/cocoa/dataview.mm
=====================================
@@ -2021,7 +2021,7 @@ void wxCocoaDataViewControl::InitOutlineView(long style)
NSTableHeaderView* header = nil;
if ( !(style & wxDV_NO_HEADER) )
{
- header = [[wxDVCNSHeaderView alloc] initWithDVC:GetDataViewCtrl()];
+ header = [[[wxDVCNSHeaderView alloc] initWithDVC:GetDataViewCtrl()] autorelease];
}

[m_OutlineView setHeaderView:header];


=====================================
src/osx/cocoa/dnd.mm
=====================================
@@ -70,7 +70,7 @@ public:

~wxOSXPasteboardSinkItem()
{
-
+ [m_item release];
}

virtual void SetData(const wxDataFormat& format, const void *buf, size_t datasize)


=====================================
src/osx/cocoa/menu.mm
=====================================
@@ -164,10 +164,6 @@ public :
}
[menu setDelegate:controller];
[m_osxMenu setImplementation:this];
- // gc aware
- if ( m_osxMenu )
- CFRetain(m_osxMenu);
- [m_osxMenu release];
}

virtual ~wxMenuCocoaImpl();
@@ -414,9 +410,7 @@ wxMenuCocoaImpl::~wxMenuCocoaImpl()
{
[m_osxMenu setDelegate:nil];
[m_osxMenu setImplementation:nil];
- // gc aware
- if ( m_osxMenu )
- CFRelease(m_osxMenu);
+ [m_osxMenu release];
}

wxMenuImpl* wxMenuImpl::Create( wxMenu* peer, const wxString& title )


=====================================
src/osx/cocoa/overlay.mm
=====================================
@@ -76,7 +76,8 @@

- (void)dealloc
{
- [super dealloc];
+ self.overlayView = nil;
+ [super dealloc];
}
@end

@@ -88,6 +89,12 @@
[self.bitmapImageRep drawInRect:[self bounds]];
}

+- (void)dealloc
+{
+ self.bitmapImageRep = nil;
+ [super dealloc];
+}
+
// from https://developer.apple.com/library/archive/documentation/GraphicsAnimation/Conceptual/HighResolutionOSX/CapturingScreenContents/CapturingScreenContents.html

- (instancetype)initWithFrame:(NSRect)frameRect


=====================================
src/osx/cocoa/statbox.mm
=====================================
@@ -87,7 +87,7 @@ wxWidgetImplType* wxWidgetImpl::CreateGroupBox( wxWindowMac* wxpeer,
NSRect r = wxOSXGetFrameForControl( wxpeer, pos , size ) ;
wxNSBox* v = [[wxNSBox alloc] initWithFrame:r];
NSSize margin = { 0.0, 0.0 };
- [v setContentView:[[wxNSBoxContentView alloc] init]];
+ [v setContentView:[[[wxNSBoxContentView alloc] init] autorelease]];
[v setContentViewMargins: margin];
[v sizeToFit];
wxStaticBoxCocoaImpl* c = new wxStaticBoxCocoaImpl( wxpeer, v );


=====================================
src/osx/cocoa/textctrl.mm
=====================================
@@ -493,6 +493,12 @@ NSView* wxMacEditHelper::ms_viewCurrentlyEdited = nil;
return self;
}

+- (void)dealloc
+{
+ self.undoManager = nil;
+ [super dealloc];
+}
+
- (void)textDidChange:(NSNotification *)aNotification
{
wxUnusedVar(aNotification);


=====================================
src/osx/cocoa/window.mm
=====================================
@@ -2601,11 +2601,6 @@ wxWidgetImpl( peer, flags )
// check if the user wants to create the control initially hidden
if ( !peer->IsShown() )
SetVisibility(false);
-
- // gc aware handling
- if ( m_osxView )
- CFRetain(m_osxView);
- [m_osxView release];

if ( IsUserPane() )
ClipsToBounds(true);
@@ -2641,11 +2636,10 @@ wxWidgetCocoaImpl::~wxWidgetCocoaImpl()
if ( sv != nil )
[m_osxView removeFromSuperview];
}
- // gc aware handling
- if ( m_osxView )
- CFRelease(m_osxView);

wxCocoaGestures::EraseForObject(this);
+
+ [m_osxView release];
}

void wxWidgetCocoaImpl::BeginNativeKeyDownEvent( NSEvent* event )
@@ -4152,6 +4146,7 @@ void wxWidgetCocoaImpl::UseClippingView(bool clip)
m_osxClipView = [[wxNSClipView alloc] initWithFrame: m_osxView.bounds];
[(NSClipView*)m_osxClipView setDrawsBackground: NO];
[m_osxView addSubview:m_osxClipView];
+ [m_osxClipView release];

// add tracking for this clipview as well



=====================================
src/osx/core/uilocale.mm
=====================================
@@ -250,7 +250,9 @@ wxUILocaleImplCF::DoGetMonthName(wxDateTime::Month month, wxDateTime::NameFlags
}

NSString* monthName = [monthNames objectAtIndex:(month)];
- return wxCFStringRef::AsString(monthName);
+ wxCFStringRef cf(monthName);
+ [df release];
+ return cf.AsString();
}

wxString
@@ -273,7 +275,9 @@ wxUILocaleImplCF::DoGetWeekDayName(wxDateTime::WeekDay weekday, wxDateTime::Name
}

NSString* weekdayName = [weekdayNames objectAtIndex:(weekday)];
- return wxCFStringRef::AsString(weekdayName);
+ wxCFStringRef cf(weekdayName);
+ [df release];
+ return cf.AsString();
}
#endif // wxUSE_DATETIME



=====================================
src/osx/webview_webkit.mm
=====================================
@@ -133,7 +133,7 @@ bool wxWebViewWebKit::Create(wxWindow *parent,
{
for (wxStringToWebHandlerMap::iterator it = m_handlers.begin(); it != m_handlers.end(); it++)
{
- [webViewConfig setURLSchemeHandler:[[WebViewCustomProtocol alloc] initWithHandler:it->second.get()]
+ [webViewConfig setURLSchemeHandler:[[[WebViewCustomProtocol alloc] initWithHandler:it->second.get()] autorelease]
forURLScheme:wxCFStringRef(it->first).AsNSString()];
}
}
@@ -202,7 +202,7 @@ bool wxWebViewWebKit::Create(wxWindow *parent,
document.webkitFullscreenEnabled = true; \
");
[m_webView.configuration.userContentController addScriptMessageHandler:
- [[WebViewScriptMessageHandler alloc] initWithWxWindow:this] name:@"__wxfullscreen"];
+ [[[WebViewScriptMessageHandler alloc] initWithWxWindow:this] autorelease] name:@"__wxfullscreen"];

m_UIDelegate = uiDelegate;

@@ -426,7 +426,7 @@ void wxWebViewWebKit::RunScriptAsync(const wxString& javascript, void* clientDat
bool wxWebViewWebKit::AddScriptMessageHandler(const wxString& name)
{
[m_webView.configuration.userContentController addScriptMessageHandler:
- [[WebViewScriptMessageHandler alloc] initWithWxWindow:this] name:wxCFStringRef(name).AsNSString()];
+ [[[WebViewScriptMessageHandler alloc] initWithWxWindow:this] autorelease] name:wxCFStringRef(name).AsNSString()];
// Make webkit message handler available under common name
wxString js = wxString::Format("window.%s = window.webkit.messageHandlers.%s;",
name, name);
@@ -450,6 +450,7 @@ bool wxWebViewWebKit::AddUserScript(const wxString& javascript,
WKUserScriptInjectionTimeAtDocumentStart : WKUserScriptInjectionTimeAtDocumentEnd
forMainFrameOnly:NO];
[m_webView.configuration.userContentController addUserScript:userScript];
+ [userScript release];
return true;
}



=====================================
src/stc/PlatWXcocoa.mm
=====================================
@@ -45,7 +45,6 @@
if( m_trackingArea != nil )
{
[self removeTrackingArea:m_trackingArea];
- [m_trackingArea release];
}

int options = NSTrackingMouseEnteredAndExited | NSTrackingActiveAlways;
@@ -54,6 +53,7 @@
owner: self
userInfo: nil];
[self addTrackingArea:m_trackingArea];
+ [m_trackingArea release];
}

- (void)mouseEntered:(NSEvent *)evt
@@ -106,7 +106,7 @@ WX_NSWindow CreateFloatingWindow(wxWindow* wxWin)
defer: NO];
[w setLevel:NSPopUpMenuWindowLevel];
[w setHasShadow:YES];
- [w setContentView:[[wxSTCPopupBaseView alloc] initWithwxWin:wxWin]];
+ [w setContentView:[[[wxSTCPopupBaseView alloc] initWithwxWin:wxWin] autorelease]] ;

return w;
}


=====================================
tests/datetime/datetimetest.cpp
=====================================
@@ -857,7 +857,9 @@ void DateTimeTestCase::TestTimeFormat()

CPPUNIT_ASSERT(wxDateTime::Now().Format("%%") == "%");

- wxDateTime dt;
+
+ wxDateTime dt(29, wxDateTime::May, 1976, 18, 30, 15, 678);
+ CPPUNIT_ASSERT_EQUAL( dt.Format("%F %T.%l"), "1976-05-29 18:30:15.678" );

#if 0
// special case which was known to fail



View it on GitLab: https://gitlab.com/wxwidgets/wxwidgets/-/compare/dd7a3da51d3a2c7a275c6d0462676a29cf92451b...aa1a25e7b511c0a4e341a3c722e6eac2aa159ab6

--
View it on GitLab: https://gitlab.com/wxwidgets/wxwidgets/-/compare/dd7a3da51d3a2c7a275c6d0462676a29cf92451b...aa1a25e7b511c0a4e341a3c722e6eac2aa159ab6
You're receiving this email because of your account on gitlab.com. Manage all notifications: https://gitlab.com/-/profile/notifications | Help: https://gitlab.com/help


Reply all
Reply to author
Forward
0 new messages