commit:     9252387f1bd980a247dfb0cc4ecb61eb101f0879
Author:     Arfrever Frehtes Taifersar Arahesis <Arfrever <AT> Apache <DOT> Org>
AuthorDate: Fri Nov 13 02:00:00 2020 +0000
Commit:     Mike Gilbert <floppym <AT> gentoo <DOT> org>
CommitDate: Mon Nov 16 19:51:15 2020 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=9252387f

app-i18n/fcitx-qt5: Fix potential recursion.

Signed-off-by: Arfrever Frehtes Taifersar Arahesis <Arfrever <AT> Apache.Org>
Signed-off-by: Mike Gilbert <floppym <AT> gentoo.org>

 app-i18n/fcitx-qt5/fcitx-qt5-1.2.5.ebuild          |  4 ++++
 ....2.5-QFcitxPlatformInputContext_recursion.patch | 27 ++++++++++++++++++++++
 2 files changed, 31 insertions(+)

diff --git a/app-i18n/fcitx-qt5/fcitx-qt5-1.2.5.ebuild 
b/app-i18n/fcitx-qt5/fcitx-qt5-1.2.5.ebuild
index 610eb112d60..729c6f77088 100644
--- a/app-i18n/fcitx-qt5/fcitx-qt5-1.2.5.ebuild
+++ b/app-i18n/fcitx-qt5/fcitx-qt5-1.2.5.ebuild
@@ -41,4 +41,8 @@ RDEPEND=">=app-i18n/fcitx-4.2.9:4
 DEPEND="${RDEPEND}
        dev-qt/qtconcurrent:5"
 
+PATCHES=(
+       "${FILESDIR}/${P}-QFcitxPlatformInputContext_recursion.patch"
+)
+
 DOCS=()

diff --git 
a/app-i18n/fcitx-qt5/files/fcitx-qt5-1.2.5-QFcitxPlatformInputContext_recursion.patch
 
b/app-i18n/fcitx-qt5/files/fcitx-qt5-1.2.5-QFcitxPlatformInputContext_recursion.patch
new file mode 100644
index 00000000000..f3e31991b53
--- /dev/null
+++ 
b/app-i18n/fcitx-qt5/files/fcitx-qt5-1.2.5-QFcitxPlatformInputContext_recursion.patch
@@ -0,0 +1,27 @@
+https://github.com/fcitx/fcitx-qt5/commit/6f2033c497fe0da1fd197bc3be35695b11eafd93
+
+--- /platforminputcontext/qfcitxplatforminputcontext.cpp
++++ /platforminputcontext/qfcitxplatforminputcontext.cpp
+@@ -291,8 +291,21 @@
+         return;
+     }
+     if (proxy) {
+-        cursorRectChanged();
+         proxy->focusIn();
++        // We need to delegate this otherwise it may cause self-recursion in
++        // certain application like libreoffice.
++        auto window = m_lastWindow;
++        QMetaObject::invokeMethod(
++            this,
++            [this, window]() {
++                if (window != m_lastWindow) {
++                    return;
++                }
++                if (auto *proxy = validICByWindow(window.data())) {
++                    cursorRectChanged();
++                }
++            },
++            Qt::QueuedConnection);
+     }
+ }
+ 

Reply via email to