Skip to content
Snippets Groups Projects
Commit 52c1f0fc authored by Sébastien Blin's avatar Sébastien Blin
Browse files

qt6: fix crash on multiple keyboard layouts

As Qt 6.2.5 is for september, patch it before.
Upstream bug: https://bugreports.qt.io/browse/QTBUG-101201

jami-client-qt#695
Change-Id: I946b062a3bc7d8e6907758e5799c0ef8668ac641
parent 5d1bea91
Branches
Tags
No related merge requests found
......@@ -49,7 +49,7 @@ QT_MAJOR := 6
QT_MINOR := 2
QT_PATCH := 3
QT_TARBALL_CHECKSUM := f784998a159334d1f47617fd51bd0619b9dbfe445184567d2cd7c820ccb12771
DEBIAN_QT_VERSION := $(QT_MAJOR).$(QT_MINOR).$(QT_PATCH)-1
DEBIAN_QT_VERSION := $(QT_MAJOR).$(QT_MINOR).$(QT_PATCH)-2
DEBIAN_QT_DSC_FILENAME := libqt-jami_$(DEBIAN_QT_VERSION).dsc
QT_JAMI_PREFIX := /usr/lib/libqt-jami
......
Subject: [PATCH] Fix fatal error in getCurrentKeyboardLayout()
FATAL:xkb_keyboard_layout_engine.cc(640)] Keymap file failed to load: dk(polytonic)
Remove unnecessary tokenization of XKB layout.
Parsing of layout configuration is already handled by
XkbKeyboardLayoutEngine::ParseLayoutName().
Fixes: QTBUG-101201
Task-number: QTBUG-92971
Pick-to: 6.2 6.3
Change-Id: Ia4f09ed99eb82064a3b12e14eda69a6e0e12b0dd
Reviewed-by: Peter Varga <pvarga@inf.u-szeged.hu>
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
---
.../src/core/ozone/ozone_platform_qt.cpp | 24 ++++---------------
1 file changed, 5 insertions(+), 19 deletions(-)
diff --git a/qtwebengine/src/core/ozone/ozone_platform_qt.cpp b/qtwebengine/src/core/ozone/ozone_platform_qt.cpp
index 33d7bd992b..543e4bd371 100644
--- a/qtwebengine/src/core/ozone/ozone_platform_qt.cpp
+++ b/qtwebengine/src/core/ozone/ozone_platform_qt.cpp
@@ -184,29 +184,15 @@ static std::string getCurrentKeyboardLayout()
if (XkbRF_GetNamesProp(dpy, nullptr, &vdr) == 0)
return std::string();
- char *layout = strtok(vdr.layout, ",");
- for (int i = 0; i < state.group; i++) {
- layout = strtok(nullptr, ",");
- if (layout == nullptr)
- return std::string();
- }
+ if (!vdr.layout)
+ return std::string();
if (!vdr.variant)
- return layout;
-
- char *variant = strtok(vdr.variant, ",");
- if (!variant)
- return layout;
-
- for (int i = 0; i < state.group; i++) {
- variant = strtok(nullptr, ",");
- if (variant == nullptr)
- return layout;
- }
+ return std::string(vdr.layout);
- std::string layoutWithVariant = layout;
+ std::string layoutWithVariant = vdr.layout;
layoutWithVariant = layoutWithVariant.append("-");
- layoutWithVariant = layoutWithVariant.append(variant);
+ layoutWithVariant = layoutWithVariant.append(vdr.variant);
return layoutWithVariant;
}
#endif // BUILDFLAG(USE_XKBCOMMON)
--
2.35.3
\ No newline at end of file
0001-qtbug-101201-fatal-error-getcurrenkeyboard.patch
......@@ -19,7 +19,6 @@ override_dh_auto_configure:
tac temp | sed '1,/return MimeType::kOthers/{s/return MimeType::kOthers/*\/return MimeType::kOthers/;}' | tac > qtwebengine/src/3rdparty/chromium/services/network/public/cpp/cross_origin_read_blocking.cc
rm temp -f
sed -i 's,if (base::Contains,/*if (base::Contains,g' qtwebengine/src/3rdparty/chromium/services/network/public/cpp/cross_origin_read_blocking.cc
CXXFLAGS="-flto -flto-partition=none" CFLAGS="-flto -flto-partition=none" ./configure \
-opensource \
-confirm-license \
......
%define name jami-libqt
%define version RELEASE_VERSION
%define release 2
%define release 4
# qtwebengine (aka chromium) takes a ton of memory per build process,
# up to 2.3 GiB. Cap the number of jobs based on the amount of
......@@ -26,6 +26,7 @@ License: GPLv3+
Vendor: Savoir-faire Linux
URL: https://jami.net/
Source: jami-qtlib_%{version}.tar.xz
Patch0: 0001-qtbug-101201-fatal-error-getcurrenkeyboard.patch
%global gst 0.10
%if 0%{?fedora} || 0%{?rhel} > 7
......@@ -60,6 +61,7 @@ This package contains Qt libraries for Jami.
%prep
%setup -n qt-everywhere-src-%{version}
%patch0 -p1
%build
echo "Building Qt using %{job_count} parallel jobs"
......
Subject: [PATCH] Fix fatal error in getCurrentKeyboardLayout()
FATAL:xkb_keyboard_layout_engine.cc(640)] Keymap file failed to load: dk(polytonic)
Remove unnecessary tokenization of XKB layout.
Parsing of layout configuration is already handled by
XkbKeyboardLayoutEngine::ParseLayoutName().
Fixes: QTBUG-101201
Task-number: QTBUG-92971
Pick-to: 6.2 6.3
Change-Id: Ia4f09ed99eb82064a3b12e14eda69a6e0e12b0dd
Reviewed-by: Peter Varga <pvarga@inf.u-szeged.hu>
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
---
.../src/core/ozone/ozone_platform_qt.cpp | 24 ++++---------------
1 file changed, 5 insertions(+), 19 deletions(-)
diff --git a/qtwebengine/src/core/ozone/ozone_platform_qt.cpp b/qtwebengine/src/core/ozone/ozone_platform_qt.cpp
index 33d7bd992b..543e4bd371 100644
--- a/qtwebengine/src/core/ozone/ozone_platform_qt.cpp
+++ b/qtwebengine/src/core/ozone/ozone_platform_qt.cpp
@@ -184,29 +184,15 @@ static std::string getCurrentKeyboardLayout()
if (XkbRF_GetNamesProp(dpy, nullptr, &vdr) == 0)
return std::string();
- char *layout = strtok(vdr.layout, ",");
- for (int i = 0; i < state.group; i++) {
- layout = strtok(nullptr, ",");
- if (layout == nullptr)
- return std::string();
- }
+ if (!vdr.layout)
+ return std::string();
if (!vdr.variant)
- return layout;
-
- char *variant = strtok(vdr.variant, ",");
- if (!variant)
- return layout;
-
- for (int i = 0; i < state.group; i++) {
- variant = strtok(nullptr, ",");
- if (variant == nullptr)
- return layout;
- }
+ return std::string(vdr.layout);
- std::string layoutWithVariant = layout;
+ std::string layoutWithVariant = vdr.layout;
layoutWithVariant = layoutWithVariant.append("-");
- layoutWithVariant = layoutWithVariant.append(variant);
+ layoutWithVariant = layoutWithVariant.append(vdr.variant);
return layoutWithVariant;
}
#endif // BUILDFLAG(USE_XKBCOMMON)
--
2.35.3
\ No newline at end of file
......@@ -40,6 +40,8 @@ deb_arch=$(dpkg --print-architecture)
qt_deb_name=libqt-jami_${DEBIAN_QT_VERSION}_${deb_arch}.deb
qt_deb_path=${cache_packaging}/${qt_deb_name}
QUILT_REFRESH_ARGS="-p 1"
if [ ! -f "${qt_deb_path}" ] || [ "${FORCE_REBUILD_QT}" = "true" ]; then
(
flock 9 # block until the lock file is gone
......
......@@ -36,6 +36,8 @@ rpmdev-setuptree
# Copy the source tarball.
cp --reflink=auto "/src/$RELEASE_TARBALL_FILENAME" /root/rpmbuild/SOURCES
cp patches/0001-qtbug-101201-fatal-error-getcurrenkeyboard.patch /root/rpmbuild/SOURCES/
QT_JAMI_PREFIX="/usr/lib64/qt-jami"
PATH="${QT_JAMI_PREFIX}/bin:${PATH}"
LD_LIBRARY_PATH="${QT_JAMI_PREFIX}/lib:${LD_LIBRARY_PATH}"
......@@ -44,7 +46,7 @@ CMAKE_PREFIX_PATH="${QT_JAMI_PREFIX}/lib/cmake:${CMAKE_PREFIX_PATH}"
QT_MAJOR=6
QT_MINOR=2
QT_PATCH=3
QT_RELEASE_PATCH=3
QT_RELEASE_PATCH=4
QT_MAJOR_MINOR=${QT_MAJOR}.${QT_MINOR}
QT_MAJOR_MINOR_PATCH=${QT_MAJOR}.${QT_MINOR}.${QT_PATCH}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment