Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package fcitx5-gtk for openSUSE:Factory 
checked in at 2022-02-13 00:15:32
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/fcitx5-gtk (Old)
 and      /work/SRC/openSUSE:Factory/.fcitx5-gtk.new.1956 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "fcitx5-gtk"

Sun Feb 13 00:15:32 2022 rev:2 rq:953921 version:5.0.12

Changes:
--------
--- /work/SRC/openSUSE:Factory/fcitx5-gtk/fcitx5-gtk.changes    2022-02-09 
20:39:40.986445298 +0100
+++ /work/SRC/openSUSE:Factory/.fcitx5-gtk.new.1956/fcitx5-gtk.changes  
2022-02-13 00:16:13.068255971 +0100
@@ -1,0 +2,8 @@
+Sat Feb 12 15:11:14 UTC 2022 - Marguerite Su <[email protected]>
+
+- update version 5.0.12
+  * Fix language tag in client side ui
+  * Enable build without X11 if gtk doesn't build with X11
+  * Fix paging button not clickable under vertical layout
+
+-------------------------------------------------------------------

Old:
----
  fcitx5-gtk-5.0.11.tar.xz

New:
----
  fcitx5-gtk-5.0.12.tar.xz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ fcitx5-gtk.spec ++++++
--- /var/tmp/diff_new_pack.rCPEBb/_old  2022-02-13 00:16:13.596257467 +0100
+++ /var/tmp/diff_new_pack.rCPEBb/_new  2022-02-13 00:16:13.600257478 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package fcitx5-gtk
 #
-# Copyright (c) 2021 SUSE LLC
+# Copyright (c) 2022 SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -17,7 +17,7 @@
 
 
 Name:           fcitx5-gtk
-Version:        5.0.11
+Version:        5.0.12
 Release:        0
 Summary:        Gtk im module for fcitx5 and glib based dbus client library
 License:        LGPL-2.1-or-later
@@ -83,7 +83,7 @@
 Summary:        GTK+ 4.0 im module for fcitx5
 Group:          System/I18n/Chinese
 Requires(post):    glib2-tools
-Requires(postun):  glib2-tools
+Requires(postun):glib2-tools
 Supplements:    (fcitx5 and libgtk-4-1)
 
 %description -n fcitx5-gtk4
@@ -114,6 +114,7 @@
 %cmake_install
 
 %post -n libFcitx5GClient2 -p /sbin/ldconfig
+
 %post -n fcitx5-gtk2
 %{gtk2_immodule_post}
 
@@ -121,6 +122,7 @@
 %{gtk3_immodule_post}
 
 %postun -n libFcitx5GClient2 -p /sbin/ldconfig
+
 %postun -n fcitx5-gtk2
 %{gtk2_immodule_postun}
 

++++++ fcitx5-gtk-5.0.11.tar.xz -> fcitx5-gtk-5.0.12.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fcitx5-gtk-5.0.11/CMakeLists.txt 
new/fcitx5-gtk-5.0.12/CMakeLists.txt
--- old/fcitx5-gtk-5.0.11/CMakeLists.txt        2021-12-18 18:21:35.880976400 
+0100
+++ new/fcitx5-gtk-5.0.12/CMakeLists.txt        2022-02-02 00:50:31.852361200 
+0100
@@ -1,5 +1,5 @@
 cmake_minimum_required(VERSION 3.6)
-project(fcitx5-gtk VERSION 5.0.11)
+project(fcitx5-gtk VERSION 5.0.12)
 
 find_package(ECM REQUIRED 1.0.0)
 set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake" 
${CMAKE_MODULE_PATH})
@@ -35,12 +35,42 @@
 
 include(cmake/CompilerSettings.cmake)
 
-if (ENABLE_GTK2_IM_MODULE OR ENABLE_GTK3_IM_MODULE OR ENABLE_GTK4_IM_MODULE)
-find_package(X11 REQUIRED)
-add_library(X11Import UNKNOWN IMPORTED)
-set_target_properties(X11Import PROPERTIES
-    IMPORTED_LOCATION "${X11_X11_LIB}"
-    INTERFACE_INCLUDE_DIRECTORIES "${X11_X11_INCLUDE_PATH}")
+set(NEED_X11 FALSE)
+if (ENABLE_GTK2_IM_MODULE)
+    pkg_check_modules(Gtk2 REQUIRED IMPORTED_TARGET "gtk+-2.0")
+    pkg_check_modules(Gdk2 REQUIRED IMPORTED_TARGET "gdk-2.0")
+    pkg_check_modules(Gdk2X11 REQUIRED IMPORTED_TARGET "gdk-x11-2.0")
+    pkg_get_variable(GTK2_BINARY_VERSION "gtk+-2.0" "gtk_binary_version")
+    set(NEED_X11 TRUE)
+endif()
+
+if (ENABLE_GTK3_IM_MODULE)
+    pkg_check_modules(Gtk3 REQUIRED IMPORTED_TARGET "gtk+-3.0")
+    pkg_check_modules(Gdk3 REQUIRED IMPORTED_TARGET "gdk-3.0")
+    pkg_get_variable(GTK3_BINARY_VERSION "gtk+-3.0" "gtk_binary_version")
+    pkg_get_variable(GTK3_TARGETS "gtk+-3.0" "targets")
+    if (GTK3_TARGETS MATCHES "x11")
+        set(NEED_X11 TRUE)
+        pkg_check_modules(Gdk3X11 REQUIRED IMPORTED_TARGET "gdk-x11-3.0")
+    endif()
+endif()
+
+if (ENABLE_GTK4_IM_MODULE)
+    pkg_check_modules(Gtk4 REQUIRED IMPORTED_TARGET "gtk4>=4.2")
+    pkg_get_variable(GTK4_BINARY_VERSION "gtk4" "gtk_binary_version")
+    pkg_get_variable(GTK4_TARGETS "gtk4" "targets")
+    if (GTK4_TARGETS MATCHES "x11")
+        set(NEED_X11 TRUE)
+        pkg_check_modules(Gtk4X11 REQUIRED IMPORTED_TARGET "gtk4-x11")
+    endif()
+endif()
+
+if (NEED_X11)
+    find_package(X11 REQUIRED)
+    add_library(X11Import UNKNOWN IMPORTED)
+    set_target_properties(X11Import PROPERTIES
+        IMPORTED_LOCATION "${X11_X11_LIB}"
+        INTERFACE_INCLUDE_DIRECTORIES "${X11_X11_INCLUDE_PATH}")
 endif()
 
 if (ENABLE_GTK2_IM_MODULE)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fcitx5-gtk-5.0.11/gtk2/CMakeLists.txt 
new/fcitx5-gtk-5.0.12/gtk2/CMakeLists.txt
--- old/fcitx5-gtk-5.0.11/gtk2/CMakeLists.txt   2020-12-16 22:13:21.472662000 
+0100
+++ new/fcitx5-gtk-5.0.12/gtk2/CMakeLists.txt   2022-01-24 19:52:39.464090300 
+0100
@@ -3,11 +3,6 @@
   fcitximcontext.cpp
   )
 
-pkg_check_modules(Gtk2 REQUIRED IMPORTED_TARGET "gtk+-2.0")
-pkg_check_modules(Gdk2 REQUIRED IMPORTED_TARGET "gdk-2.0")
-pkg_check_modules(Gdk2X11 REQUIRED IMPORTED_TARGET "gdk-x11-2.0")
-pkg_get_variable(GTK2_BINARY_VERSION "gtk+-2.0" "gtk_binary_version")
-
 if (NOT DEFINED GTK2_IM_MODULEDIR)
     set(GTK2_IM_MODULEDIR 
"${CMAKE_INSTALL_LIBDIR}/gtk-2.0/${GTK2_BINARY_VERSION}/immodules" CACHE PATH 
"Gtk2 im module directory")
 endif()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fcitx5-gtk-5.0.11/gtk2/fcitximcontext.cpp 
new/fcitx5-gtk-5.0.12/gtk2/fcitximcontext.cpp
--- old/fcitx5-gtk-5.0.11/gtk2/fcitximcontext.cpp       2021-10-24 
19:15:52.894978000 +0200
+++ new/fcitx5-gtk-5.0.12/gtk2/fcitximcontext.cpp       2022-01-26 
01:49:19.372307800 +0100
@@ -23,7 +23,6 @@
 #include <gtk/gtk.h>
 #include <stdlib.h>
 #include <string.h>
-#include <xcb/xcb.h>
 #include <xkbcommon/xkbcommon-compose.h>
 
 #if GTK_CHECK_VERSION(2, 24, 0)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fcitx5-gtk-5.0.11/gtk3/CMakeLists.txt 
new/fcitx5-gtk-5.0.12/gtk3/CMakeLists.txt
--- old/fcitx5-gtk-5.0.11/gtk3/CMakeLists.txt   2021-01-25 21:22:23.869448700 
+0100
+++ new/fcitx5-gtk-5.0.12/gtk3/CMakeLists.txt   2022-01-24 19:54:04.971895700 
+0100
@@ -7,11 +7,6 @@
   gtk3inputwindow.cpp
   )
 
-pkg_check_modules(Gtk3 REQUIRED IMPORTED_TARGET "gtk+-3.0")
-pkg_check_modules(Gdk3 REQUIRED IMPORTED_TARGET "gdk-3.0")
-pkg_check_modules(Gdk3X11 REQUIRED IMPORTED_TARGET "gdk-x11-3.0")
-pkg_get_variable(GTK3_BINARY_VERSION "gtk+-3.0" "gtk_binary_version")
-
 if (NOT DEFINED GTK3_IM_MODULEDIR)
     set(GTK3_IM_MODULEDIR 
"${CMAKE_INSTALL_LIBDIR}/gtk-3.0/${GTK3_BINARY_VERSION}/immodules" CACHE PATH 
"Gtk3 im module directory")
 endif()
@@ -19,5 +14,10 @@
 add_library(im-fcitx5-gtk3 MODULE ${FCITX_GTK3_IM_MODULE_SOURCES})
 set_target_properties(im-fcitx5-gtk3 PROPERTIES PREFIX "" OUTPUT_NAME 
"im-fcitx5"
   COMPILE_FLAGS "-fno-exceptions")
-target_link_libraries(im-fcitx5-gtk3 Fcitx5::GClient XKBCommon::XKBCommon 
PkgConfig::Gtk3 PkgConfig::Gdk3 PkgConfig::Gdk3X11 X11Import)
+
+target_link_libraries(im-fcitx5-gtk3 Fcitx5::GClient XKBCommon::XKBCommon 
PkgConfig::Gtk3)
+if (TARGET PkgConfig::Gdk3X11)
+target_link_libraries(im-fcitx5-gtk3 PkgConfig::Gdk3X11 X11Import)
+endif()
+
 install(TARGETS im-fcitx5-gtk3 DESTINATION "${GTK3_IM_MODULEDIR}")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fcitx5-gtk-5.0.11/gtk3/fcitximcontext.cpp 
new/fcitx5-gtk-5.0.12/gtk3/fcitximcontext.cpp
--- old/fcitx5-gtk-5.0.11/gtk3/fcitximcontext.cpp       2021-10-24 
19:48:28.480270400 +0200
+++ new/fcitx5-gtk-5.0.12/gtk3/fcitximcontext.cpp       2022-01-29 
03:20:01.771023300 +0100
@@ -15,13 +15,16 @@
 
 #include <gdk/gdk.h>
 #include <gdk/gdkkeysyms.h>
-#include <gdk/gdkx.h>
+
 #include <gtk/gtk.h>
 #include <stdlib.h>
 #include <string.h>
-#include <xcb/xcb.h>
 #include <xkbcommon/xkbcommon-compose.h>
 
+#ifdef GDK_WINDOWING_X11
+#include <gdk/gdkx.h>
+#endif
+
 #ifdef GDK_WINDOWING_WAYLAND
 #include <gdk/gdkwayland.h>
 #endif
@@ -440,9 +443,11 @@
     if (context->is_wayland) {
         fcitx_g_client_set_display(context->client, "wayland:");
     } else {
+#ifdef GDK_WINDOWING_X11
         if (GDK_IS_X11_DISPLAY(gdk_display_get_default())) {
             fcitx_g_client_set_display(context->client, "x11:");
         }
+#endif
     }
     g_signal_connect(context->client, "connected",
                      G_CALLBACK(_fcitx_im_context_connect_cb), context);
@@ -496,21 +501,23 @@
 static void fcitx_im_context_set_client_window(GtkIMContext *context,
                                                GdkWindow *client_window) {
     FcitxIMContext *fcitxcontext = FCITX_IM_CONTEXT(context);
-    if (client_window != fcitxcontext->client_window) {
-        delete fcitxcontext->candidate_window;
-        fcitxcontext->candidate_window = nullptr;
+    if (client_window == fcitxcontext->client_window) {
+        return;
     }
+    delete fcitxcontext->candidate_window;
+    fcitxcontext->candidate_window = nullptr;
     if (!client_window)
         return;
 
     g_clear_object(&fcitxcontext->client_window);
     fcitxcontext->client_window = GDK_WINDOW(g_object_ref(client_window));
-    if (!fcitxcontext->candidate_window) {
-        fcitxcontext->candidate_window = new Gtk3InputWindow(
-            _uiconfig, fcitxcontext->client, fcitxcontext->is_wayland);
-        fcitxcontext->candidate_window->setParent(fcitxcontext->client_window);
-        fcitxcontext->candidate_window->setCursorRect(fcitxcontext->area);
-    }
+
+    _fcitx_im_context_set_capability(fcitxcontext, FALSE);
+
+    fcitxcontext->candidate_window = new Gtk3InputWindow(
+        _uiconfig, fcitxcontext->client, fcitxcontext->is_wayland);
+    fcitxcontext->candidate_window->setParent(fcitxcontext->client_window);
+    fcitxcontext->candidate_window->setCursorRect(fcitxcontext->area);
 }
 
 static gboolean
@@ -1078,7 +1085,10 @@
         if (fcitxcontext->is_wayland) {
             flags |= (guint64)fcitx::FcitxCapabilityFlag_RelativeRect;
         }
-        flags |= (guint64)fcitx::FcitxCapabilityFlag_ClientSideInputPanel;
+        if (fcitxcontext->client_window != NULL &&
+            gdk_window_is_visible(fcitxcontext->client_window)) {
+            flags |= (guint64)fcitx::FcitxCapabilityFlag_ClientSideInputPanel;
+        }
         flags |= (guint64)fcitx::FcitxCapabilityFlag_KeyEventOrderFix;
         flags |= (guint64)fcitx::FcitxCapabilityFlag_ReportKeyRepeat;
 
@@ -1457,6 +1467,7 @@
     }
 }
 
+#ifdef GDK_WINDOWING_X11
 void send_uuid_to_x11(Display *xdisplay, const guint8 *uuid) {
     Atom atom = XInternAtom(xdisplay, "_FCITX_SERVER", False);
     if (!atom) {
@@ -1478,9 +1489,11 @@
     XSendEvent(xdisplay, window, False, NoEventMask, &ev);
     XSync(xdisplay, False);
 }
+#endif
 
 void _fcitx_im_context_connect_cb(FcitxGClient *im, void *user_data) {
     FcitxIMContext *context = FCITX_IM_CONTEXT(user_data);
+#ifdef GDK_WINDOWING_X11
     Display *display = NULL;
     if (context->client_window) {
         if (GDK_IS_X11_WINDOW(context->client_window)) {
@@ -1497,6 +1510,7 @@
     if (display) {
         send_uuid_to_x11(display, fcitx_g_client_get_uuid(im));
     }
+#endif
 
     _fcitx_im_context_set_capability(context, TRUE);
     if (context->has_focus && _focus_im_context == (GtkIMContext *)context &&
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fcitx5-gtk-5.0.11/gtk3/fcitxtheme.h 
new/fcitx5-gtk-5.0.12/gtk3/fcitxtheme.h
--- old/fcitx5-gtk-5.0.11/gtk3/fcitxtheme.h     2021-01-27 17:30:13.362310600 
+0100
+++ new/fcitx5-gtk-5.0.12/gtk3/fcitxtheme.h     2022-01-26 19:14:50.233786000 
+0100
@@ -8,7 +8,7 @@
 #define _GTK3_FCITXTHEME_H_
 
 #include "utils.h"
-#include <cairo/cairo.h>
+#include <cairo.h>
 #include <gdk/gdk.h>
 #include <memory>
 #include <string>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fcitx5-gtk-5.0.11/gtk3/inputwindow.cpp 
new/fcitx5-gtk-5.0.12/gtk3/inputwindow.cpp
--- old/fcitx5-gtk-5.0.11/gtk3/inputwindow.cpp  2021-10-30 19:21:53.612349500 
+0200
+++ new/fcitx5-gtk-5.0.12/gtk3/inputwindow.cpp  2022-01-26 19:14:50.237119400 
+0100
@@ -223,10 +223,15 @@
 }
 void InputWindow::setLanguageAttr(size_t size, PangoAttrList *attrList,
                                   PangoAttrList *highlightAttrList) {
-    if (!config_->useInputMethodLanguageToDisplayText_ || language_.empty()) {
-        return;
-    }
-    if (auto language = pango_language_from_string(language_.c_str())) {
+    do {
+        if (!config_->useInputMethodLanguageToDisplayText_ ||
+            language_.empty()) {
+            break;
+        }
+        auto language = pango_language_from_string(language_.c_str());
+        if (!language) {
+            break;
+        }
         if (attrList) {
             auto attr = pango_attr_language_new(language);
             attr->start_index = 0;
@@ -239,7 +244,8 @@
             attr->end_index = size;
             pango_attr_list_insert(highlightAttrList, attr);
         }
-    }
+        return;
+    } while (0);
 }
 
 void InputWindow::setTextToMultilineLayout(MultilineLayout &layout,
@@ -357,7 +363,23 @@
     update();
 }
 
-void InputWindow::updateLanguage(const char *language) { language_ = language; 
}
+void InputWindow::updateLanguage(const char *language) {
+    language_ = language;
+    do {
+        if (!config_->useInputMethodLanguageToDisplayText_ ||
+            language_.empty()) {
+            break;
+        }
+        auto language = pango_language_from_string(language_.c_str());
+        if (!language) {
+            break;
+        }
+        pango_context_set_language(context_.get(), language);
+        return;
+    } while (0);
+
+    pango_context_set_language(context_.get(), pango_language_get_default());
+}
 
 std::pair<unsigned int, unsigned int> InputWindow::sizeHint() {
     auto *fontDesc = pango_font_description_from_string(config_->font_.data());
@@ -639,12 +661,6 @@
 }
 
 void InputWindow::click(int x, int y) {
-    for (size_t idx = 0, e = candidateRegions_.size(); idx < e; idx++) {
-        if (rectContains(candidateRegions_[idx], x, y)) {
-            selectCandidate(idx);
-            return;
-        }
-    }
     if (hasPrev_ && rectContains(prevRegion_, x, y)) {
         prev();
         return;
@@ -653,6 +669,12 @@
         next();
         return;
     }
+    for (size_t idx = 0, e = candidateRegions_.size(); idx < e; idx++) {
+        if (rectContains(candidateRegions_[idx], x, y)) {
+            selectCandidate(idx);
+            return;
+        }
+    }
 }
 
 void InputWindow::wheel(bool up) {
@@ -680,23 +702,32 @@
 
 bool InputWindow::hover(int x, int y) {
     bool needRepaint = false;
+
+    bool prevHovered = false;
+    bool nextHovered = false;
     auto oldHighlight = highlight();
     hoverIndex_ = -1;
-    for (int idx = 0, e = candidateRegions_.size(); idx < e; idx++) {
-        if (rectContains(candidateRegions_[idx], x, y)) {
-            hoverIndex_ = idx;
-            break;
+
+    prevHovered = rectContains(prevRegion_, x, y);
+    if (!prevHovered) {
+        nextHovered = rectContains(nextRegion_, x, y);
+        if (!nextHovered) {
+            for (int idx = 0, e = candidateRegions_.size(); idx < e; idx++) {
+                if (rectContains(candidateRegions_[idx], x, y)) {
+                    hoverIndex_ = idx;
+                    break;
+                }
+            }
         }
     }
 
-    needRepaint = needRepaint || oldHighlight != highlight();
-
-    auto prevHovered = rectContains(prevRegion_, x, y);
-    auto nextHovered = rectContains(nextRegion_, x, y);
     needRepaint = needRepaint || prevHovered_ != prevHovered;
-    needRepaint = needRepaint || nextHovered_ != nextHovered;
     prevHovered_ = prevHovered;
+
+    needRepaint = needRepaint || nextHovered_ != nextHovered;
     nextHovered_ = nextHovered;
+
+    needRepaint = needRepaint || oldHighlight != highlight();
     return needRepaint;
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fcitx5-gtk-5.0.11/gtk3/inputwindow.h 
new/fcitx5-gtk-5.0.12/gtk3/inputwindow.h
--- old/fcitx5-gtk-5.0.11/gtk3/inputwindow.h    2021-10-30 18:47:23.868943500 
+0200
+++ new/fcitx5-gtk-5.0.12/gtk3/inputwindow.h    2022-01-26 19:14:50.233786000 
+0100
@@ -10,7 +10,7 @@
 #include "fcitx-gclient/fcitxgclient.h"
 #include "fcitxflags.h"
 #include "utils.h"
-#include <cairo/cairo.h>
+#include <cairo.h>
 #include <pango/pango.h>
 #include <string>
 #include <utility>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fcitx5-gtk-5.0.11/gtk4/CMakeLists.txt 
new/fcitx5-gtk-5.0.12/gtk4/CMakeLists.txt
--- old/fcitx5-gtk-5.0.11/gtk4/CMakeLists.txt   2021-12-17 05:56:19.132253400 
+0100
+++ new/fcitx5-gtk-5.0.12/gtk4/CMakeLists.txt   2022-01-24 19:54:47.830891000 
+0100
@@ -8,10 +8,6 @@
   utils.cpp
   )
 
-pkg_check_modules(Gtk4 REQUIRED IMPORTED_TARGET "gtk4>=4.2")
-pkg_check_modules(Gtk4X11 REQUIRED IMPORTED_TARGET "gtk4-x11")
-pkg_get_variable(GTK4_BINARY_VERSION "gtk4" "gtk_binary_version")
-
 if (NOT DEFINED GTK4_IM_MODULEDIR)
     set(GTK4_IM_MODULEDIR 
"${CMAKE_INSTALL_LIBDIR}/gtk-4.0/${GTK4_BINARY_VERSION}/immodules" CACHE PATH 
"Gtk4 im module directory")
 endif()
@@ -19,5 +15,8 @@
 add_library(im-fcitx5-gtk4 MODULE ${FCITX_GTK4_IM_MODULE_SOURCES})
 set_target_properties(im-fcitx5-gtk4 PROPERTIES OUTPUT_NAME "im-fcitx5"
   COMPILE_FLAGS "-fno-exceptions")
-target_link_libraries(im-fcitx5-gtk4 Fcitx5::GClient XKBCommon::XKBCommon 
PkgConfig::Gtk4 PkgConfig::Gtk4X11 X11Import)
+target_link_libraries(im-fcitx5-gtk4 Fcitx5::GClient XKBCommon::XKBCommon 
PkgConfig::Gtk4)
+if (TARGET PkgConfig::Gtk4X11)
+    target_link_libraries(im-fcitx5-gtk4 PkgConfig::Gtk4X11 X11Import)
+endif()
 install(TARGETS im-fcitx5-gtk4 DESTINATION "${GTK4_IM_MODULEDIR}")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fcitx5-gtk-5.0.11/gtk4/fcitximcontext.cpp 
new/fcitx5-gtk-5.0.12/gtk4/fcitximcontext.cpp
--- old/fcitx5-gtk-5.0.11/gtk4/fcitximcontext.cpp       2021-12-17 
15:41:03.977573200 +0100
+++ new/fcitx5-gtk-5.0.12/gtk4/fcitximcontext.cpp       2022-01-26 
01:46:34.201849500 +0100
@@ -24,7 +24,6 @@
 #include <gtk/gtk.h>
 #include <stdlib.h>
 #include <string.h>
-#include <xcb/xcb.h>
 #include <xkbcommon/xkbcommon-compose.h>
 
 #ifdef GDK_WINDOWING_WAYLAND
@@ -443,17 +442,24 @@
 static void fcitx_im_context_set_client_widget(GtkIMContext *context,
                                                GtkWidget *client_widget) {
     FcitxIMContext *fcitxcontext = FCITX_IM_CONTEXT(context);
+    if (client_widget == fcitxcontext->client_widget) {
+        return;
+    }
+
+    delete fcitxcontext->candidate_window;
+    fcitxcontext->candidate_window = nullptr;
     if (!client_widget)
         return;
 
     g_clear_object(&fcitxcontext->client_widget);
     fcitxcontext->client_widget = GTK_WIDGET(g_object_ref(client_widget));
-    if (!fcitxcontext->candidate_window) {
-        fcitxcontext->candidate_window =
-            new Gtk4InputWindow(_uiconfig, fcitxcontext->client);
-        fcitxcontext->candidate_window->setParent(fcitxcontext->client_widget);
-        fcitxcontext->candidate_window->setCursorRect(fcitxcontext->area);
-    }
+
+    _fcitx_im_context_set_capability(fcitxcontext, FALSE);
+
+    fcitxcontext->candidate_window =
+        new Gtk4InputWindow(_uiconfig, fcitxcontext->client);
+    fcitxcontext->candidate_window->setParent(fcitxcontext->client_widget);
+    fcitxcontext->candidate_window->setCursorRect(fcitxcontext->area);
 }
 
 static gboolean
@@ -1036,7 +1042,24 @@
         if (fcitxcontext->is_wayland) {
             flags |= (guint64)fcitx::FcitxCapabilityFlag_RelativeRect;
         }
-        flags |= (guint64)fcitx::FcitxCapabilityFlag_ClientSideInputPanel;
+        do {
+            if (!fcitxcontext->client_widget) {
+                break;
+            }
+            auto native = gtk_widget_get_native(fcitxcontext->client_widget);
+            if (!native) {
+                break;
+            }
+            auto parentSurface = gtk_native_get_surface(native);
+            if (!parentSurface) {
+                break;
+            }
+
+            if (gdk_surface_get_mapped(parentSurface)) {
+                flags |=
+                    (guint64)fcitx::FcitxCapabilityFlag_ClientSideInputPanel;
+            }
+        } while (0);
         flags |= (guint64)fcitx::FcitxCapabilityFlag_ReportKeyRepeat;
 
         // always run this code against all gtk version

Reply via email to