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
