Fix handling window total size under GNOME with X11 Due to getting two notifications about _NET_REQUEST_FRAME_EXTENTS from mutter (GNOME WM), we didn't do the right thing as the second one arrived after mapping the window and the code assumed that in this case the window already has the correct size and only internal size needs to be adjusted. In this case, however, the window doesn't have the correct size and we need to adjust it once we get the real decoration sizes values and not just zeroes for all of them that we get during the first notification. Note that we can't just filter out that first notification because then we never map the window and so never get the second one. See #25348. (cherry picked from commit 9537141500371fe498ac98d9d48494e58f662b55)
Implement GetMainWindowOfCompositeControl for wxDataViewCtrl Implement GetMainWindowOfCompositeControl() in the generic version of wxDataViewCtrl so that focus is reported correctly. See #25372. (cherry picked from commit 863e18f5969ad121c42719f36d200d2dde93d5fe)
Fix defining ELF symbols versions when flavour is used Unfortunately the changes of f3eb19ce2e (Fix ABI breakage for versioned symbols in 3.2.7, 2025-04-14) themselves broke another use case, as they didn't take into account the fact that ELF version includes the library flavour and hardcoded the version without it in elfversion.h. Fix this by defining wxELF_VERSION_PREFIX in configure and using it in this header to use proper symver value even when flavour is not empty. See #25327. Closes #25436.
Fix test for .symver asm directive support in configure We need to use it with the correct, i.e. existing, symbol name, which means the mangled name actually used by the linker and not just the name of the function as it appears in the source. Fix the test to actually detect lack of support for .symver when using clang with -flto. Closes #25438.
Add 3.2.8.1 section to the change log Document that these changes were made in 3.2.8.1 and not 3.2.9 as initially planned.
... | ... | @@ -33873,18 +33873,26 @@ if ${wx_cv_elf_symver_multiple+:} false; then : |
33873 | 33873 | else
|
33874 | 33874 | |
33875 | 33875 | echo "lib_new {}; lib_old { *; };" >conftest.sym
|
33876 | + ac_ext=cpp
|
|
33877 | +ac_cpp='$CXXCPP $CPPFLAGS'
|
|
33878 | +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
|
|
33879 | +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
|
|
33880 | +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
|
|
33881 | + |
|
33876 | 33882 | cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
33877 | 33883 | /* end confdefs.h. */
|
33878 | 33884 | |
33879 | 33885 | |
33880 | 33886 | #include "wx/private/elfversion.h"
|
33881 | - wxELF_SYMVER("foo","foo@lib_old")
|
|
33882 | - wxELF_SYMVER("foo","foo@@lib_new")
|
|
33887 | + extern "C" {
|
|
33888 | + wxELF_SYMVER("_foo","_foo@lib_old")
|
|
33889 | + wxELF_SYMVER("_foo","_foo@@lib_new")
|
|
33883 | 33890 | void foo() {}
|
33891 | + }
|
|
33884 | 33892 | int main() { return 0; }
|
33885 | 33893 | |
33886 | 33894 | _ACEOF
|
33887 | -if ac_fn_c_try_link "$LINENO"; then :
|
|
33895 | +if ac_fn_cxx_try_link "$LINENO"; then :
|
|
33888 | 33896 | wx_cv_elf_symver_multiple=yes
|
33889 | 33897 | else
|
33890 | 33898 | wx_cv_elf_symver_multiple=no
|
... | ... | @@ -33892,6 +33900,12 @@ else |
33892 | 33900 | fi
|
33893 | 33901 | rm -f core conftest.err conftest.$ac_objext \
|
33894 | 33902 | conftest$ac_exeext conftest.$ac_ext
|
33903 | + ac_ext=c
|
|
33904 | +ac_cpp='$CPP $CPPFLAGS'
|
|
33905 | +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
|
|
33906 | +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
|
|
33907 | +ac_compiler_gnu=$ac_cv_c_compiler_gnu
|
|
33908 | + |
|
33895 | 33909 | rm -f conftest.sym
|
33896 | 33910 | |
33897 | 33911 | |
... | ... | @@ -33909,17 +33923,25 @@ if ${wx_cv_elf_symver+:} false; then : |
33909 | 33923 | else
|
33910 | 33924 | |
33911 | 33925 | echo "lib_new {}; lib_old { *; };" >conftest.sym
|
33926 | + ac_ext=cpp
|
|
33927 | +ac_cpp='$CXXCPP $CPPFLAGS'
|
|
33928 | +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
|
|
33929 | +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
|
|
33930 | +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
|
|
33931 | + |
|
33912 | 33932 | cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
33913 | 33933 | /* end confdefs.h. */
|
33914 | 33934 | |
33915 | 33935 | |
33916 | 33936 | #include "wx/private/elfversion.h"
|
33917 | - wxELF_SYMVER("foo","foo@@lib_new")
|
|
33937 | + extern "C" {
|
|
33938 | + wxELF_SYMVER("_foo","_foo@@lib_new")
|
|
33918 | 33939 | void foo() {}
|
33940 | + }
|
|
33919 | 33941 | int main() { return 0; }
|
33920 | 33942 | |
33921 | 33943 | _ACEOF
|
33922 | -if ac_fn_c_try_link "$LINENO"; then :
|
|
33944 | +if ac_fn_cxx_try_link "$LINENO"; then :
|
|
33923 | 33945 | wx_cv_elf_symver=yes
|
33924 | 33946 | else
|
33925 | 33947 | wx_cv_elf_symver=no
|
... | ... | @@ -33927,6 +33949,12 @@ else |
33927 | 33949 | fi
|
33928 | 33950 | rm -f core conftest.err conftest.$ac_objext \
|
33929 | 33951 | conftest$ac_exeext conftest.$ac_ext
|
33952 | + ac_ext=c
|
|
33953 | +ac_cpp='$CPP $CPPFLAGS'
|
|
33954 | +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
|
|
33955 | +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
|
|
33956 | +ac_compiler_gnu=$ac_cv_c_compiler_gnu
|
|
33957 | + |
|
33930 | 33958 | rm -f conftest.sym
|
33931 | 33959 | |
33932 | 33960 | |
... | ... | @@ -34309,7 +34337,14 @@ if test "$wxUSE_DEBUG_INFO" = "yes"; then |
34309 | 34337 | DEBUG_INFO=1
|
34310 | 34338 | fi
|
34311 | 34339 | |
34312 | -WX_VERSION_TAG=`echo WX${lib_unicode_suffix}${WX_LIB_FLAVOUR}_${WX_RELEASE} | tr '[a-z]' '[A-Z]'`
|
|
34340 | +wxELF_VERSION_PREFIX=`echo WX${lib_unicode_suffix}${WX_LIB_FLAVOUR}_ | tr '[a-z]' '[A-Z]'`
|
|
34341 | +if test "$wxUSE_ELF_SYMVER" != "no"; then
|
|
34342 | + cat >>confdefs.h <<_ACEOF
|
|
34343 | +#define wxELF_VERSION_PREFIX "$wxELF_VERSION_PREFIX"
|
|
34344 | +_ACEOF
|
|
34345 | + |
|
34346 | +fi
|
|
34347 | +WX_VERSION_TAG="${wxELF_VERSION_PREFIX}${WX_RELEASE}"
|
|
34313 | 34348 | |
34314 | 34349 | TOOLCHAIN_NAME="${TOOLKIT_DIR}${TOOLKIT_VERSION}${WIDGET_SET}${lib_unicode_suffix}${WX_LIB_FLAVOUR}-${WX_RELEASE}${HOST_SUFFIX}"
|
34315 | 34350 |
... | ... | @@ -4025,17 +4025,21 @@ if test "$wxUSE_SHARED" = "yes"; then |
4025 | 4025 | wx_cv_elf_symver_multiple,
|
4026 | 4026 | [
|
4027 | 4027 | echo "lib_new {}; lib_old { *; };" >conftest.sym
|
4028 | + AC_LANG_PUSH(C++)
|
|
4028 | 4029 | AC_LINK_IFELSE([
|
4029 | 4030 | AC_LANG_SOURCE([
|
4030 | 4031 | #include "wx/private/elfversion.h"
|
4031 | - wxELF_SYMVER("foo","foo@lib_old")
|
|
4032 | - wxELF_SYMVER("foo","foo@@lib_new")
|
|
4032 | + extern "C" {
|
|
4033 | + wxELF_SYMVER("_foo","_foo@lib_old")
|
|
4034 | + wxELF_SYMVER("_foo","_foo@@lib_new")
|
|
4033 | 4035 | void foo() {}
|
4036 | + }
|
|
4034 | 4037 | int main() { return 0; }
|
4035 | 4038 | ])],
|
4036 | 4039 | wx_cv_elf_symver_multiple=yes,
|
4037 | 4040 | wx_cv_elf_symver_multiple=no
|
4038 | 4041 | )
|
4042 | + AC_LANG_POP()
|
|
4039 | 4043 | rm -f conftest.sym
|
4040 | 4044 | ]
|
4041 | 4045 | )
|
... | ... | @@ -4047,16 +4051,20 @@ if test "$wxUSE_SHARED" = "yes"; then |
4047 | 4051 | wx_cv_elf_symver,
|
4048 | 4052 | [
|
4049 | 4053 | echo "lib_new {}; lib_old { *; };" >conftest.sym
|
4054 | + AC_LANG_PUSH(C++)
|
|
4050 | 4055 | AC_LINK_IFELSE([
|
4051 | 4056 | AC_LANG_SOURCE([
|
4052 | 4057 | #include "wx/private/elfversion.h"
|
4053 | - wxELF_SYMVER("foo","foo@@lib_new")
|
|
4058 | + extern "C" {
|
|
4059 | + wxELF_SYMVER("_foo","_foo@@lib_new")
|
|
4054 | 4060 | void foo() {}
|
4061 | + }
|
|
4055 | 4062 | int main() { return 0; }
|
4056 | 4063 | ])],
|
4057 | 4064 | wx_cv_elf_symver=yes,
|
4058 | 4065 | wx_cv_elf_symver=no
|
4059 | 4066 | )
|
4067 | + AC_LANG_POP()
|
|
4060 | 4068 | rm -f conftest.sym
|
4061 | 4069 | ]
|
4062 | 4070 | )
|
... | ... | @@ -4204,7 +4212,11 @@ if test "$wxUSE_DEBUG_INFO" = "yes"; then |
4204 | 4212 | DEBUG_INFO=1
|
4205 | 4213 | fi
|
4206 | 4214 | |
4207 | -WX_VERSION_TAG=`echo WX${lib_unicode_suffix}${WX_LIB_FLAVOUR}_${WX_RELEASE} | tr '[[a-z]]' '[[A-Z]]'`
|
|
4215 | +wxELF_VERSION_PREFIX=`echo WX${lib_unicode_suffix}${WX_LIB_FLAVOUR}_ | tr '[[a-z]]' '[[A-Z]]'`
|
|
4216 | +if test "$wxUSE_ELF_SYMVER" != "no"; then
|
|
4217 | + AC_DEFINE_UNQUOTED(wxELF_VERSION_PREFIX, "$wxELF_VERSION_PREFIX")
|
|
4218 | +fi
|
|
4219 | +WX_VERSION_TAG="${wxELF_VERSION_PREFIX}${WX_RELEASE}"
|
|
4208 | 4220 | |
4209 | 4221 | TOOLCHAIN_NAME="${TOOLKIT_DIR}${TOOLKIT_VERSION}${WIDGET_SET}${lib_unicode_suffix}${WX_LIB_FLAVOUR}-${WX_RELEASE}${HOST_SUFFIX}"
|
4210 | 4222 |
... | ... | @@ -252,11 +252,23 @@ Changes in behaviour which may result in build errors |
252 | 252 | 3.2.9: (released 2025-??-??)
|
253 | 253 | ----------------------------
|
254 | 254 | |
255 | +wxGTK:
|
|
256 | + |
|
257 | +- Fix handling total window size with GNOME with X11 (#25348).
|
|
258 | + |
|
255 | 259 | wxOSX:
|
256 | 260 | |
257 | 261 | - Do not activate "Close" button on Cmd-C (nobugshere, #25346).
|
258 | 262 | |
259 | 263 | |
264 | +3.2.8.1: (released 2025-05-25)
|
|
265 | +------------------------------
|
|
266 | + |
|
267 | +This hotfix release corrects regressions in 3.2.8 for configure builds on
|
|
268 | +platforms using ELF if --with-flavour is specified (#25436) or LTO is used
|
|
269 | +with clang (#25438).
|
|
270 | + |
|
271 | + |
|
260 | 272 | 3.2.8: (released 2025-04-24)
|
261 | 273 | ----------------------------
|
262 | 274 |
... | ... | @@ -34,12 +34,8 @@ |
34 | 34 | #define wxELF_SYMVER_NON_DEFAULT(sym, ver)
|
35 | 35 | #endif
|
36 | 36 | |
37 | - // Our version tag depends on whether we're using Unicode or not.
|
|
38 | - #if wxUSE_UNICODE
|
|
39 | - #define wxMAKE_ELF_VERSION_TAG(ver) "WXU_" ver
|
|
40 | - #else
|
|
41 | - #define wxMAKE_ELF_VERSION_TAG(ver) "WX_" ver
|
|
42 | - #endif
|
|
37 | + // wxELF_VERSION_PREFIX is defined by configure if wxHAVE_ELF_SYMVER is.
|
|
38 | + #define wxMAKE_ELF_VERSION_TAG(ver) wxELF_VERSION_PREFIX ver
|
|
43 | 39 | |
44 | 40 | // This macro is used to repair ABI compatibility problems with the symbols
|
45 | 41 | // versions: unfortunately, some symbols were initially added with the
|
... | ... | @@ -23,6 +23,9 @@ |
23 | 23 | /* Are multiple versions of the same symbol supported? */
|
24 | 24 | #undef wxHAVE_ELF_SYMVER_MULTIPLE
|
25 | 25 | |
26 | +/* Prefix for the ELF version used for the library symbols. */
|
|
27 | +#undef wxELF_VERSION_PREFIX
|
|
28 | + |
|
26 | 29 | /* Define if ssize_t type is available. */
|
27 | 30 | #undef HAVE_SSIZE_T
|
28 | 31 |
... | ... | @@ -301,6 +301,9 @@ public: |
301 | 301 | wxDataViewCtrl *GetOwner() const
|
302 | 302 | { return static_cast<wxDataViewCtrl *>(GetParent()); }
|
303 | 303 | |
304 | + virtual wxWindow *GetMainWindowOfCompositeControl() wxOVERRIDE
|
|
305 | + { return GetOwner(); }
|
|
306 | + |
|
304 | 307 | // Add/Remove additional column to sorting columns
|
305 | 308 | void ToggleSortByColumn(int column)
|
306 | 309 | {
|
... | ... | @@ -774,6 +777,9 @@ public: |
774 | 777 | wxDataViewModel* GetModel() { return GetOwner()->GetModel(); }
|
775 | 778 | const wxDataViewModel* GetModel() const { return GetOwner()->GetModel(); }
|
776 | 779 | |
780 | + virtual wxWindow *GetMainWindowOfCompositeControl() wxOVERRIDE
|
|
781 | + { return GetOwner(); }
|
|
782 | + |
|
777 | 783 | #if wxUSE_DRAG_AND_DROP
|
778 | 784 | wxBitmap CreateItemBitmap( unsigned int row, int &indent );
|
779 | 785 | #endif // wxUSE_DRAG_AND_DROP
|
... | ... | @@ -1500,7 +1500,19 @@ void wxTopLevelWindowGTK::GTKUpdateDecorSize(const DecorSize& decorSize) |
1500 | 1500 | }
|
1501 | 1501 | DoSetSizeHints(m_minWidth, m_minHeight, m_maxWidth, m_maxHeight, m_incWidth, m_incHeight);
|
1502 | 1502 | }
|
1503 | - if (m_deferShow)
|
|
1503 | + |
|
1504 | + // We decide to defer showing the window only when its total (and not
|
|
1505 | + // client) size had been set, and in this case we didn't set it
|
|
1506 | + // correctly because we didn't have the correct decorations sizes when
|
|
1507 | + // we did it -- but now that we do, we can adjust the size to the
|
|
1508 | + // desired value.
|
|
1509 | + //
|
|
1510 | + // Note that we can't test for m_deferShow itself here because it may
|
|
1511 | + // have been already reset to false if a WM had generated a
|
|
1512 | + // notification with wrong _NET_REQUEST_FRAME_EXTENTS values first (as
|
|
1513 | + // mutter does, at least in GNOME 3.48, where it sends 0 values for the
|
|
1514 | + // not yet mapped window).
|
|
1515 | + if (m_deferShowAllowed)
|
|
1504 | 1516 | {
|
1505 | 1517 | // keep overall size unchanged by shrinking m_widget
|
1506 | 1518 | int w, h;
|
... | ... | @@ -1517,7 +1529,11 @@ void wxTopLevelWindowGTK::GTKUpdateDecorSize(const DecorSize& decorSize) |
1517 | 1529 | }
|
1518 | 1530 | if (!resized)
|
1519 | 1531 | {
|
1520 | - // adjust overall size to match change in frame extents
|
|
1532 | + // We can't resize the window, either because it's already shown
|
|
1533 | + // (i.e. we didn't defer showing it) or because resizing it would
|
|
1534 | + // make it smaller than its minimum size. In this case we have to
|
|
1535 | + // adjust the stored size to accurately reflect the actual size of
|
|
1536 | + // the window.
|
|
1521 | 1537 | m_width += diff.x;
|
1522 | 1538 | m_height += diff.y;
|
1523 | 1539 | if (m_width < 1) m_width = 1;
|
—
View it on GitLab.
You're receiving this email because of your account on gitlab.com. Manage all notifications · Help