summaryrefslogtreecommitdiff
path: root/app-i18n/fcitx-qt/files/fcitx-qt-5.1.3-make-qwayland-workaround-optional.patch
diff options
context:
space:
mode:
Diffstat (limited to 'app-i18n/fcitx-qt/files/fcitx-qt-5.1.3-make-qwayland-workaround-optional.patch')
-rw-r--r--app-i18n/fcitx-qt/files/fcitx-qt-5.1.3-make-qwayland-workaround-optional.patch158
1 files changed, 158 insertions, 0 deletions
diff --git a/app-i18n/fcitx-qt/files/fcitx-qt-5.1.3-make-qwayland-workaround-optional.patch b/app-i18n/fcitx-qt/files/fcitx-qt-5.1.3-make-qwayland-workaround-optional.patch
new file mode 100644
index 000000000000..0ef5fc8652a7
--- /dev/null
+++ b/app-i18n/fcitx-qt/files/fcitx-qt-5.1.3-make-qwayland-workaround-optional.patch
@@ -0,0 +1,158 @@
+Backport of https://github.com/fcitx/fcitx5-qt/commit/af535e7e106f69e7dc6dc28db3653601d1e6156a
+
+Backport upstream commit af535e7e making QtWayland optional.
+All QtWayland-related code is guarded behind `isWayland` checks anyways.
+This benefits users of pure X11 setups.
+
+Author: Lucio Sauer <watermanpaint@posteo.net>
+
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -16,6 +16,7 @@ option(ENABLE_QT6 "Enable Qt 6" Off)
+ option(BUILD_ONLY_PLUGIN "Build only plugin" Off)
+ option(BUILD_STATIC_PLUGIN "Build plugin as static" Off)
+ option(WITH_FCITX_PLUGIN_NAME "Enable plugin name with fcitx" On)
++option(ENABLE_QT6_WAYLAND_WORKAROUND "Enable Qt6 Wayland workaround" On)
+
+ if (BUILD_ONLY_PLUGIN)
+ set(LIBRARY_TYPE OBJECT)
+--- a/qt5/platforminputcontext/fcitxcandidatewindow.cpp
++++ b/qt5/platforminputcontext/fcitxcandidatewindow.cpp
+@@ -21,7 +21,7 @@
+ #include <QtMath>
+ #include <utility>
+
+-#if QT_VERSION >= QT_VERSION_CHECK(6, 6, 0)
++#if defined(FCITX_ENABLE_QT6_WAYLAND_WORKAROUND) && QT_VERSION >= QT_VERSION_CHECK(6, 6, 0)
+ #include <QtWaylandClient/private/qwayland-xdg-shell.h>
+ #include <QtWaylandClient/private/qwaylanddisplay_p.h>
+ #include <QtWaylandClient/private/qwaylandintegration_p.h>
+@@ -34,7 +34,7 @@ namespace fcitx {
+
+ namespace {
+
+-#if QT_VERSION >= QT_VERSION_CHECK(6, 6, 0)
++#if defined(FCITX_ENABLE_QT6_WAYLAND_WORKAROUND) && QT_VERSION >= QT_VERSION_CHECK(6, 6, 0)
+ class XdgWmBase : public QtWayland::xdg_wm_base {
+ public:
+ using xdg_wm_base::xdg_wm_base;
+@@ -120,7 +120,7 @@ FcitxCandidateWindow::FcitxCandidateWindow(QWindow *window,
+ // Not using Qt::BypassWindowManagerHint ensures wayland handle
+ // fractional scale.
+ setFlags(Qt::ToolTip | commonFlags);
+-#if QT_VERSION >= QT_VERSION_CHECK(6, 6, 0)
++#if defined(FCITX_ENABLE_QT6_WAYLAND_WORKAROUND) && QT_VERSION >= QT_VERSION_CHECK(6, 6, 0)
+ if (auto instance = QtWaylandClient::QWaylandIntegration::instance()) {
+ for (QtWaylandClient::QWaylandDisplay::RegistryGlobal global :
+ instance->display()->globals()) {
+@@ -132,7 +132,6 @@ FcitxCandidateWindow::FcitxCandidateWindow(QWindow *window,
+ }
+ }
+ }
+-#if QT_VERSION >= QT_VERSION_CHECK(6, 6, 0)
+ setProperty("_q_waylandPopupAnchor",
+ QVariant::fromValue(Qt::BottomEdge | Qt::LeftEdge));
+ setProperty("_q_waylandPopupGravity",
+@@ -142,7 +141,6 @@ FcitxCandidateWindow::FcitxCandidateWindow(QWindow *window,
+ static_cast<unsigned int>(
+ QtWayland::xdg_positioner::constraint_adjustment_slide_x |
+ QtWayland::xdg_positioner::constraint_adjustment_flip_y));
+-#endif
+ #endif
+ } else {
+ // Qt::Popup ensures X11 doesn't apply tooltip animation under kwin.
+@@ -484,7 +482,7 @@ void FcitxCandidateWindow::updateClientSideUI(
+ QRect cursorRect = context_->cursorRectangleWrapper();
+ QRect screenGeometry;
+
+-#if QT_VERSION >= QT_VERSION_CHECK(6, 6, 0)
++#if defined(FCITX_ENABLE_QT6_WAYLAND_WORKAROUND) && QT_VERSION >= QT_VERSION_CHECK(6, 6, 0)
+ if (isWayland_) {
+ auto waylandWindow =
+ static_cast<QtWaylandClient::QWaylandWindow *>(window->handle());
+@@ -520,12 +518,10 @@ void FcitxCandidateWindow::updateClientSideUI(
+ }
+ bool wasVisible = isVisible();
+ bool cursorRectChanged = false;
+-#if QT_VERSION >= QT_VERSION_CHECK(6, 6, 0)
+ if (property("_q_waylandPopupAnchorRect") != cursorRect) {
+ cursorRectChanged = true;
+ setProperty("_q_waylandPopupAnchorRect", cursorRect);
+ }
+-#endif
+ // This try to ensure xdg_popup is available.
+ show();
+ xdg_popup *xdgPopup = static_cast<xdg_popup *>(
+@@ -553,7 +549,6 @@ void FcitxCandidateWindow::updateClientSideUI(
+ positioner->destroy();
+ return;
+ }
+-#if QT_VERSION >= QT_VERSION_CHECK(6, 6, 0)
+ // Check if we need remap.
+ // If it was invisible, nothing need to be done.
+ // If cursor rect changed, the window must be remapped.
+@@ -570,7 +565,6 @@ void FcitxCandidateWindow::updateClientSideUI(
+ show();
+ }
+ return;
+-#endif
+ }
+ #endif
+ // Try to apply the screen edge detection over the window, because if we
+--- a/qt5/platforminputcontext/fcitxcandidatewindow.h
++++ b/qt5/platforminputcontext/fcitxcandidatewindow.h
+@@ -19,7 +19,7 @@
+ #include <qscopedpointer.h>
+ #include <vector>
+
+-#if QT_VERSION >= QT_VERSION_CHECK(6, 6, 0)
++#if defined(FCITX_ENABLE_QT6_WAYLAND_WORKAROUND) && QT_VERSION >= QT_VERSION_CHECK(6, 6, 0)
+ #include <QtWaylandClient/private/qwayland-xdg-shell.h>
+ #endif
+
+@@ -93,7 +93,7 @@ public Q_SLOTS:
+ std::vector<QRect> candidateRegions_;
+ QPointer<QWindow> parent_;
+
+-#if QT_VERSION >= QT_VERSION_CHECK(6, 6, 0)
++#if defined(FCITX_ENABLE_QT6_WAYLAND_WORKAROUND) && QT_VERSION >= QT_VERSION_CHECK(6, 6, 0)
+ QScopedPointer<QtWayland::xdg_wm_base> xdgWmBase_;
+ #endif
+ };
+--- a/qt6/CMakeLists.txt
++++ b/qt6/CMakeLists.txt
+@@ -1,8 +1,10 @@
+
+ find_package(Qt6 ${REQUIRED_QT6_VERSION} CONFIG REQUIRED Core DBus Widgets)
+ find_package(Qt6Gui ${REQUIRED_QT6_VERSION} REQUIRED Private)
+-find_package(Qt6WaylandClient ${REQUIRED_QT6_VERSION} REQUIRED Private)
+-find_package(Qt6WaylandGlobalPrivate ${REQUIRED_QT6_VERSION} REQUIRED)
++if (ENABLE_QT6_WAYLAND_WORKAROUND)
++ find_package(Qt6WaylandClient ${REQUIRED_QT6_VERSION} REQUIRED Private)
++ find_package(Qt6WaylandGlobalPrivate ${REQUIRED_QT6_VERSION} REQUIRED)
++endif()
+
+ add_subdirectory(dbusaddons)
+ add_subdirectory(platforminputcontext)
+--- a/qt6/platforminputcontext/CMakeLists.txt
++++ b/qt6/platforminputcontext/CMakeLists.txt
+@@ -49,11 +49,16 @@ target_link_libraries(fcitx5platforminputcontextplugin-qt6
+ XCB::XCB
+ Fcitx5Qt6::DBusAddons
+ XKBCommon::XKBCommon
+- Qt6::WaylandGlobalPrivate
+- Qt6::WaylandClient
+- Qt6::WaylandClientPrivate
+ )
+
++if (ENABLE_QT6_WAYLAND_WORKAROUND)
++ target_compile_definitions(fcitx5platforminputcontextplugin-qt6 PRIVATE "-DFCITX_ENABLE_QT6_WAYLAND_WORKAROUND")
++ target_link_libraries(fcitx5platforminputcontextplugin-qt6
++ Qt6::WaylandGlobalPrivate
++ Qt6::WaylandClient
++ Qt6::WaylandClientPrivate)
++endif()
++
+ get_target_property(_QT6_QMAKE_EXECUTABLE Qt6::qmake LOCATION)
+ execute_process(
+ COMMAND ${_QT6_QMAKE_EXECUTABLE} -query "QT_INSTALL_PLUGINS"