From d0945867f072f076dfc7f844a74d1235148aaa1e Mon Sep 17 00:00:00 2001 From: DistroBaker Date: Sun, 21 Feb 2021 17:40:19 +0000 Subject: [PATCH] Merged update from upstream sources This is an automated DistroBaker update from upstream sources. If you do not know what this is about or would like to opt out, contact the OSCI team. Source: https://src.fedoraproject.org/rpms/ibus.git#276f5e4482031c0000a622a6476ad0079a91b5aa --- .gitignore | 1 + ibus-HEAD.patch | 1888 ----------------------------------------------- ibus.spec | 10 +- sources | 2 +- 4 files changed, 7 insertions(+), 1894 deletions(-) diff --git a/.gitignore b/.gitignore index 05db64c..c19180c 100644 --- a/.gitignore +++ b/.gitignore @@ -58,3 +58,4 @@ ibus-1.3.6.tar.gz /ibus-1.5.21.tar.gz /ibus-1.5.22.tar.gz /ibus-1.5.23.tar.gz +/ibus-1.5.24.tar.gz diff --git a/ibus-HEAD.patch b/ibus-HEAD.patch index 5e3aadf..e69de29 100644 --- a/ibus-HEAD.patch +++ b/ibus-HEAD.patch @@ -1,1888 +0,0 @@ -From dd4cc5b028c35f9bb8fa9d3bdc8f26bcdfc43d40 Mon Sep 17 00:00:00 2001 -From: fujiwarat -Date: Wed, 30 Sep 2020 20:35:23 +0900 -Subject: [PATCH] ui/gtk3: Fix arguments in GLib.DBusSignalCallback for Vala - 0.50 - -BUG=https://github.com/ibus/ibus/issues/2265 ---- - ui/gtk3/application.vala | 22 +++++++++++----------- - ui/gtk3/extension.vala | 22 +++++++++++----------- - 2 files changed, 22 insertions(+), 22 deletions(-) - -diff --git a/ui/gtk3/application.vala b/ui/gtk3/application.vala -index cc9ee54c..da65301b 100644 ---- a/ui/gtk3/application.vala -+++ b/ui/gtk3/application.vala -@@ -3,7 +3,7 @@ - * ibus - The Input Bus - * - * Copyright(c) 2011 Peng Huang -- * Copyright(c) 2017 Takao Fujiwara -+ * Copyright(c) 2017-2020 Takao Fujiwara - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public -@@ -69,22 +69,22 @@ class Application { - } - - private void bus_name_acquired_cb(DBusConnection connection, -- string sender_name, -- string object_path, -- string interface_name, -- string signal_name, -- Variant parameters) { -+ string? sender_name, -+ string object_path, -+ string interface_name, -+ string signal_name, -+ Variant parameters) { - debug("signal_name = %s", signal_name); - m_panel = new Panel(m_bus); - m_panel.load_settings(); - } - - private void bus_name_lost_cb(DBusConnection connection, -- string sender_name, -- string object_path, -- string interface_name, -- string signal_name, -- Variant parameters) { -+ string? sender_name, -+ string object_path, -+ string interface_name, -+ string signal_name, -+ Variant parameters) { - // "Destroy" dbus method was called before this callback is called. - // "Destroy" dbus method -> ibus_service_destroy() - // -> g_dbus_connection_unregister_object() -diff --git a/ui/gtk3/extension.vala b/ui/gtk3/extension.vala -index ea3cd464..a6f2e8e6 100644 ---- a/ui/gtk3/extension.vala -+++ b/ui/gtk3/extension.vala -@@ -3,7 +3,7 @@ - * ibus - The Input Bus - * - * Copyright(c) 2018 Peng Huang -- * Copyright(c) 2018 Takao Fujiwara -+ * Copyright(c) 2018-2020 Takao Fujiwara - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public -@@ -67,22 +67,22 @@ class ExtensionGtk : Gtk.Application { - - - private void bus_name_acquired_cb(DBusConnection connection, -- string sender_name, -- string object_path, -- string interface_name, -- string signal_name, -- Variant parameters) { -+ string? sender_name, -+ string object_path, -+ string interface_name, -+ string signal_name, -+ Variant parameters) { - debug("signal_name = %s", signal_name); - m_panel = new PanelBinding(m_bus, this); - m_panel.load_settings(); - } - - private void bus_name_lost_cb(DBusConnection connection, -- string sender_name, -- string object_path, -- string interface_name, -- string signal_name, -- Variant parameters) { -+ string? sender_name, -+ string object_path, -+ string interface_name, -+ string signal_name, -+ Variant parameters) { - // "Destroy" dbus method was called before this callback is called. - // "Destroy" dbus method -> ibus_service_destroy() - // -> g_dbus_connection_unregister_object() --- -2.24.1 - -From 02338ce751a1ed5b9b892fba530ec2fe211d314e Mon Sep 17 00:00:00 2001 -From: fujiwarat -Date: Fri, 20 Nov 2020 08:58:52 +0900 -Subject: [PATCH] docs: Fix make dist - ---- - docs/reference/ibus/Makefile.am | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/docs/reference/ibus/Makefile.am b/docs/reference/ibus/Makefile.am -index 1ece234c..0f307bbd 100644 ---- a/docs/reference/ibus/Makefile.am -+++ b/docs/reference/ibus/Makefile.am -@@ -3,8 +3,8 @@ - # ibus - The Input Bus - # - # Copyright (c) 2007-2015 Peng Huang --# Copyright (c) 2007-2015 Red Hat, Inc. --# Copyright (c) 2015 Takao Fujiwara -+# Copyright (c) 2007-2020 Red Hat, Inc. -+# Copyright (c) 2015-2020 Takao Fujiwara - # - # This library is free software; you can redistribute it and/or - # modify it under the terms of the GNU Lesser General Public -@@ -147,6 +147,6 @@ tmpl-build.stamp: trim-build.stamp $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DO - # clean-local: - # rm -rf tmpl ${DOC_MODULE) - --CLEANFILES+= *.stamp -+CLEANFILES+= *actions *.stamp - - -include $(top_srcdir)/git.mk --- -2.24.1 - -From aa558de80c224921753990806cf553428fbe7057 Mon Sep 17 00:00:00 2001 -From: fujiwarat -Date: Fri, 20 Nov 2020 09:03:32 +0900 -Subject: [PATCH] src: Fix to build emoji-*.dict in CLDR 38 - -root.xml and sr_Cyrl.xml have included no contents since -cldr-emoji-annotation-38 and make install failed because of no -emoji-root.dict and emoji-sr.Cyrl.dict. -Now the build creates the no content files but remove those files -in the install hook. - -BUG=rhbz#1898065 ---- - src/Makefile.am | 61 ++++++++++++++++++++++------------------------ - src/emoji-parser.c | 4 ++- - 2 files changed, 32 insertions(+), 33 deletions(-) - -diff --git a/src/Makefile.am b/src/Makefile.am -index 99de1ab7..742ee7d7 100644 ---- a/src/Makefile.am -+++ b/src/Makefile.am -@@ -3,7 +3,7 @@ - # ibus - The Input Bus - # - # Copyright (c) 2007-2015 Peng Huang --# Copyright (c) 2015-2019 Takao Fujiwara -+# Copyright (c) 2015-2020 Takao Fujiwara - # Copyright (c) 2007-2017 Red Hat, Inc. - # - # This library is free software; you can redistribute it and/or -@@ -248,6 +248,7 @@ AM_CPPFLAGS += -DENABLE_EMOJI_DICT - dictdir = $(pkgdatadir)/dicts - LANG_FILES = $(basename $(notdir $(wildcard $(EMOJI_ANNOTATION_DIR)/*.xml))) - EMOJI_DICT_FILES = $(patsubst %,dicts/emoji-%.dict,$(LANG_FILES)) -+# emoji-root.dict, emoji-sr_Cyrl.dict have no contents. - dict_DATA = $(EMOJI_DICT_FILES) - - noinst_PROGRAMS += emoji-parser -@@ -265,6 +266,7 @@ dicts/emoji-%.dict: emoji-parser - xml_derived_option="--xml-derived $(EMOJI_ANNOTATION_DIR)/../annotationsDerived/$*.xml"; \ - plus_comment="derived"; \ - fi; \ -+ is_skip=0; \ - if test x"$*" = xen ; then \ - $(builddir)/emoji-parser \ - --unicode-emoji-dir $(UNICODE_EMOJI_DIR) \ -@@ -279,48 +281,43 @@ dicts/emoji-%.dict: emoji-parser - --xml $(EMOJI_ANNOTATION_DIR)/$*.xml \ - $$xml_derived_option \ - --out $@; \ -+ retval=$$?; \ -+ if test $$retval -eq 99 ; then \ -+ is_skip=1; \ -+ touch $@; \ -+ elif test $$retval -ne 0 ; then \ -+ echo "Fail to generate $@"; \ -+ abrt; \ -+ fi; \ - fi; \ -- echo "Generated $$plus_comment $@" -+ if test $$is_skip -eq 0 ; then \ -+ echo "Generated $$plus_comment $@"; \ -+ else \ -+ echo "Skip $$plus_comment $@"; \ -+ fi; - - ibusemojigen.h: dicts/emoji-en.dict - $(NULL) - --install-data-hook: $(dict_DATA) -- @$(NORMAL_INSTALL) -+# We put dicts/emoji-%.dict as the make target for the parallel build -+# and the make target has to be genarated even if the file size is zero. -+# But we don't want to install the zero size files and delete them -+# in install-data-hook. -+install-data-hook: - $(AM_V_at)list='$(wildcard dicts/*.dict)'; \ - test -n "$(dictdir)" || list=; \ -- if test -n "$$list"; then \ -- echo " $(MKDIR_P) '$(DESTDIR)$(dictdir)'"; \ -- $(MKDIR_P) "$(DESTDIR)$(dictdir)" || exit 1; \ -- fi; \ - for p in $$list; do \ -- if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ -- echo "$$d$$p"; \ -+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ -+ if test -s "$$d$$p"; then continue; fi; \ -+ basename "$$p"; \ - done | \ -- while read files; do \ -- if [ x$(AM_DEFAULT_VERBOSITY) = x1 ] ; then \ -- echo "$(INSTALL_DATA) $$files '$(DESTDIR)$(dictdir)'"; \ -- else \ -- echo "Installing $$files"; \ -- fi; \ -- $(INSTALL_DATA) $$files "$(DESTDIR)$(dictdir)" || exit $$?; \ -+ while read file; do \ -+ if test -f "$(DESTDIR)$(dictdir)/$$file"; then \ -+ echo "Delete $(DESTDIR)$(dictdir)/$$file"; \ -+ rm "$(DESTDIR)$(dictdir)/$$file" || exit $$?; \ -+ fi; \ - done - --dict__uninstall_files_from_dir = { \ -- test -z "$$files" \ -- || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ -- || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ -- cd "$$dir" && rm -f $$files; }; \ -- } -- --# for make dist --uninstall-hook: -- @$(NORMAL_UNINSTALL) -- $(AM_V_at)list='$(wildcard dicts/*.dict)'; \ -- test -n "$(dictdir)" || list=; \ -- files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ -- dir='$(DESTDIR)$(dictdir)'; $(dict__uninstall_files_from_dir) -- - emoji_parser_SOURCES = \ - emoji-parser.c \ - $(NULL) -diff --git a/src/emoji-parser.c b/src/emoji-parser.c -index 96a779c6..b117b1b4 100644 ---- a/src/emoji-parser.c -+++ b/src/emoji-parser.c -@@ -1,7 +1,7 @@ - /* -*- mode: C; c-basic-offset: 4; indent-tabs-mode: nil; -*- */ - /* vim:set et sts=4: */ - /* ibus - The Input Bus -- * Copyright (C) 2016-2018 Takao Fujiwara -+ * Copyright (C) 2016-2020 Takao Fujiwara - * Copyright (C) 2016 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or -@@ -1294,6 +1294,8 @@ main (int argc, char *argv[]) - category_file_save (output_category, list); - if (list) - g_slist_free (list); -+ else -+ return 99; - - return 0; - } --- -2.24.1 - -From b72efea42d5f72e08e2774ae03027c246d41cab7 Mon Sep 17 00:00:00 2001 -From: fujiwarat -Date: Fri, 20 Nov 2020 10:56:11 +0900 -Subject: [PATCH] src: Update IBusInputPurpose and IBusInputHints in - ibustypes.h - -Copy IBUS_INPUT_PURPOSE_TERMINAL, IBUS_INPUT_PURPOSE_PIN, -IBUS_INPUT_PURPOSE_TERMINAL from GTK 3.24.14 ---- - src/ibustypes.h | 77 ++++++++++++++++++++++++++++++++++--------------- - 1 file changed, 53 insertions(+), 24 deletions(-) - -diff --git a/src/ibustypes.h b/src/ibustypes.h -index 06370a27..798ad04d 100644 ---- a/src/ibustypes.h -+++ b/src/ibustypes.h -@@ -2,7 +2,7 @@ - /* vim:set et sts=4: */ - /* ibus - The Input Bus - * Copyright (C) 2008-2013 Peng Huang -- * Copyright (C) 2008-2015 Red Hat, Inc. -+ * Copyright (C) 2008-2020 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public -@@ -241,29 +241,46 @@ typedef void (* IBusFreeFunc) (gpointer object); - * @IBUS_INPUT_PURPOSE_EMAIL: Edited field expects email address - * @IBUS_INPUT_PURPOSE_NAME: Edited field expects the name of a person - * @IBUS_INPUT_PURPOSE_PASSWORD: Like @IBUS_INPUT_PURPOSE_FREE_FORM, -- * but characters are hidden -+ * but characters are hidden - * @IBUS_INPUT_PURPOSE_PIN: Like @IBUS_INPUT_PURPOSE_DIGITS, but -- * characters are hidden -+ * characters are hidden -+ * @IBUS_INPUT_PURPOSE_TERMINAL: Allow any character, in addition to control -+ * codes. Since 1.5.24 - * - * Describes primary purpose of the input context. This information - * is particularly useful to implement intelligent behavior in - * engines, such as automatic input-mode switch and text prediction. - * -+ * Note that the purpose is not meant to impose a totally strict rule -+ * about allowed characters, and does not replace input validation. -+ * It is fine for an on-screen keyboard to let the user override the -+ * character set restriction that is expressed by the purpose. The -+ * application is expected to validate the entry contents, even if -+ * it specified a purpose. -+ * -+ * The difference between @IBUS_INPUT_PURPOSE_DIGITS and -+ * @IBUS_INPUT_PURPOSE_NUMBER is that the former accepts only digits -+ * while the latter also some punctuation (like commas or points, plus, -+ * minus) and ā€œeā€ or ā€œEā€ as in 3.14E+000. -+ * - * This enumeration may be extended in the future; engines should - * interpret unknown values as 'free form'. -+ * -+ * Since: 1.5.4 - */ - typedef enum - { -- IBUS_INPUT_PURPOSE_FREE_FORM, -- IBUS_INPUT_PURPOSE_ALPHA, -- IBUS_INPUT_PURPOSE_DIGITS, -- IBUS_INPUT_PURPOSE_NUMBER, -- IBUS_INPUT_PURPOSE_PHONE, -- IBUS_INPUT_PURPOSE_URL, -- IBUS_INPUT_PURPOSE_EMAIL, -- IBUS_INPUT_PURPOSE_NAME, -- IBUS_INPUT_PURPOSE_PASSWORD, -- IBUS_INPUT_PURPOSE_PIN -+ IBUS_INPUT_PURPOSE_FREE_FORM, -+ IBUS_INPUT_PURPOSE_ALPHA, -+ IBUS_INPUT_PURPOSE_DIGITS, -+ IBUS_INPUT_PURPOSE_NUMBER, -+ IBUS_INPUT_PURPOSE_PHONE, -+ IBUS_INPUT_PURPOSE_URL, -+ IBUS_INPUT_PURPOSE_EMAIL, -+ IBUS_INPUT_PURPOSE_NAME, -+ IBUS_INPUT_PURPOSE_PASSWORD, -+ IBUS_INPUT_PURPOSE_PIN, -+ IBUS_INPUT_PURPOSE_TERMINAL - } IBusInputPurpose; - - /** -@@ -280,24 +297,36 @@ typedef enum - * first word of each sentence - * @IBUS_INPUT_HINT_INHIBIT_OSK: Suggest to not show an onscreen keyboard - * (e.g for a calculator that already has all the keys). -- * @IBUS_INPUT_HINT_VERTICAL_WRITING: The text is vertical. -+ * @IBUS_INPUT_HINT_VERTICAL_WRITING: The text is vertical. Since 1.5.11 -+ * @IBUS_INPUT_HINT_EMOJI: Suggest offering Emoji support. Since 1.5.24 -+ * @IBUS_INPUT_HINT_NO_EMOJI: Suggest not offering Emoji support. Since 1.5.24 - * - * Describes hints that might be taken into account by engines. Note - * that engines may already tailor their behaviour according to the - * #IBusInputPurpose of the entry. -+ * -+ * Some common sense is expected when using these flags - mixing -+ * @IBUS_INPUT_HINT_LOWERCASE with any of the uppercase hints makes no sense. -+ * -+ * This enumeration may be extended in the future; engines should -+ * ignore unknown values. -+ * -+ * Since: 1.5.4 - */ - typedef enum - { -- IBUS_INPUT_HINT_NONE = 0, -- IBUS_INPUT_HINT_SPELLCHECK = 1 << 0, -- IBUS_INPUT_HINT_NO_SPELLCHECK = 1 << 1, -- IBUS_INPUT_HINT_WORD_COMPLETION = 1 << 2, -- IBUS_INPUT_HINT_LOWERCASE = 1 << 3, -- IBUS_INPUT_HINT_UPPERCASE_CHARS = 1 << 4, -- IBUS_INPUT_HINT_UPPERCASE_WORDS = 1 << 5, -- IBUS_INPUT_HINT_UPPERCASE_SENTENCES = 1 << 6, -- IBUS_INPUT_HINT_INHIBIT_OSK = 1 << 7, -- IBUS_INPUT_HINT_VERTICAL_WRITING = 1 << 8 -+ IBUS_INPUT_HINT_NONE = 0, -+ IBUS_INPUT_HINT_SPELLCHECK = 1 << 0, -+ IBUS_INPUT_HINT_NO_SPELLCHECK = 1 << 1, -+ IBUS_INPUT_HINT_WORD_COMPLETION = 1 << 2, -+ IBUS_INPUT_HINT_LOWERCASE = 1 << 3, -+ IBUS_INPUT_HINT_UPPERCASE_CHARS = 1 << 4, -+ IBUS_INPUT_HINT_UPPERCASE_WORDS = 1 << 5, -+ IBUS_INPUT_HINT_UPPERCASE_SENTENCES = 1 << 6, -+ IBUS_INPUT_HINT_INHIBIT_OSK = 1 << 7, -+ IBUS_INPUT_HINT_VERTICAL_WRITING = 1 << 8, -+ IBUS_INPUT_HINT_EMOJI = 1 << 9, -+ IBUS_INPUT_HINT_NO_EMOJI = 1 << 10 - } IBusInputHints; - - #endif --- -2.24.1 - -From 5322c447c74a10ee54b482d6eff6da6d16a7c9ce Mon Sep 17 00:00:00 2001 -From: fujiwarat -Date: Sat, 21 Nov 2020 07:41:23 +0900 -Subject: [PATCH] ui/gtk3: Warn deprecated IBus XKB engines /w dialog - -simple.xml is updated by IBus release and some XKB engines -could be deprecated with xkeyboard-config updates. -Now a warning dialog is launched when the deprecated engines are -changed to xkb:us::eng engine. - -BUG=https://github.com/ibus/ibus/issues/2274 ---- - ui/gtk3/panel.vala | 15 +++++++++++++++ - 1 files changed, 33 insertions(+), 10 deletions(-) - -diff --git a/ui/gtk3/panel.vala b/ui/gtk3/panel.vala -index 627e26ae..01f87e33 100644 ---- a/ui/gtk3/panel.vala -+++ b/ui/gtk3/panel.vala -@@ -970,6 +970,21 @@ class Panel : IBus.PanelService { - names = {"xkb:us::eng"}; - m_settings_general.set_strv("preload-engines", names); - engines = m_bus.get_engines_by_names(names); -+ var message = _("Your input method %s does not exist in IBus " + -+ "input methods so \"US\" layout was configured instead " + -+ "of your input method. Please run `ibus-setup` command, " + -+ "open \"Input Method\" tab, and configure your input " + -+ "methods again.").printf(names[0]); -+ var dialog = new Gtk.MessageDialog( -+ null, -+ Gtk.DialogFlags.DESTROY_WITH_PARENT, -+ Gtk.MessageType.WARNING, -+ Gtk.ButtonsType.CLOSE, -+ message); -+ dialog.response.connect((id) => { -+ dialog.destroy(); -+ }); -+ dialog.show(); - } - - if (m_engines.length == 0) { --- -2.28.0 - -From aec2ac75ea673d3701904735378765476cad0f21 Mon Sep 17 00:00:00 2001 -From: Gunnar Hjalmarsson -Date: Fri, 11 Dec 2020 16:27:36 +0900 -Subject: [PATCH] ui/gtk3: Warning dialog for any deprecated IBus XKB - engine - -This is a follow-up of commit 5322c447. That commit introduced -a warning dialog in case of an empty engines list. - -This commit makes a differently worded warning dialog be shown -in cases where the engines list is not empty but preload-engines -includes at least one deprecated engine. It also fixes a variable -confusion so a deprecated engine is mentioned in the first kind -of warning dialog and not the US engine. - -BUG=https://github.com/ibus/ibus/issues/2274 ---- - ui/gtk3/panel.vala | 30 +++++++++++++++++++----------- - 1 files changed, 43 insertions(+), 24 deletions(-) - -diff --git a/ui/gtk3/panel.vala b/ui/gtk3/panel.vala -index 01f87e33..ab2005d7 100644 ---- a/ui/gtk3/panel.vala -+++ b/ui/gtk3/panel.vala -@@ -966,25 +966,33 @@ class Panel : IBus.PanelService { - /* Fedora internal patch could save engines not in simple.xml - * likes 'xkb:cn::chi'. - */ -- if (engines.length == 0) { -- names = {"xkb:us::eng"}; -- m_settings_general.set_strv("preload-engines", names); -- engines = m_bus.get_engines_by_names(names); -- var message = _("Your input method %s does not exist in IBus " + -- "input methods so \"US\" layout was configured instead " + -- "of your input method. Please run `ibus-setup` command, " + -- "open \"Input Method\" tab, and configure your input " + -- "methods again.").printf(names[0]); -+ if (engines.length < names.length) { -+ string message1; -+ if (engines.length == 0) { -+ string[] fallback_names = {"xkb:us::eng"}; -+ m_settings_general.set_strv("preload-engines", fallback_names); -+ engines = m_bus.get_engines_by_names(fallback_names); -+ message1 = _("Your configured input method %s does not exist " + -+ "in IBus input methods so \"US\" layout was " + -+ "configured instead of your input method." -+ ).printf(names[0]); -+ } else { -+ message1 = _("At least one of your configured input methods " + -+ "does not exist in IBus input methods."); -+ } -+ var message2 = _("Please run `ibus-setup` command, open \"Input " + -+ "Method\" tab, and configure your input methods " + -+ "again."); - var dialog = new Gtk.MessageDialog( - null, - Gtk.DialogFlags.DESTROY_WITH_PARENT, - Gtk.MessageType.WARNING, - Gtk.ButtonsType.CLOSE, -- message); -+ "%s %s", message1, message2); - dialog.response.connect((id) => { - dialog.destroy(); - }); -- dialog.show(); -+ dialog.show_all(); - } - - if (m_engines.length == 0) { --- -2.28.0 - -From 5d68b00e0464d43ba2f77697f9dcfbff78d7b438 Mon Sep 17 00:00:00 2001 -From: fujiwarat -Date: Thu, 31 Dec 2020 17:28:45 +0900 -Subject: [PATCH] engine: Fix iso-path in gensimple.py - -Replace datarootdir with ISOCODES_PREFIX. ---- - engine/Makefile.am | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/engine/Makefile.am b/engine/Makefile.am -index d810704b..1944c02b 100644 ---- a/engine/Makefile.am -+++ b/engine/Makefile.am -@@ -104,7 +104,7 @@ simple.xml.in: - --output=$@ \ - --version=$(VERSION).`date '+%Y%m%d'` \ - --exec-path=@libexecdir\@/ibus-engine-simple \ -- --iso-path=$(datarootdir)/xml/iso-codes/iso_639.xml \ -+ --iso-path=$(ISOCODES_PREFIX)/share/xml/iso-codes/iso_639.xml \ - --first-language \ - $(NULL) - --- -2.28.0 - -From 29959e1d2521781c544879b284e03812a2a11b2e Mon Sep 17 00:00:00 2001 -From: fujiwarat -Date: Thu, 31 Dec 2020 20:00:02 +0900 -Subject: [PATCH] engine: Fix input in gensimple.py - -Replace datarootdir with XKBCONFIG_BASE. ---- - configure.ac | 7 +++++++ - engine/Makefile.am | 2 +- - 2 files changed, 8 insertions(+), 1 deletion(-) - -diff --git a/configure.ac b/configure.ac -index 5753057b..9ed5cb66 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -720,6 +720,13 @@ PKG_CHECK_MODULES(ISOCODES, [ - ISOCODES_PREFIX=`$PKG_CONFIG iso-codes --variable=prefix` - AC_SUBST(ISOCODES_PREFIX) - -+PKG_CHECK_MODULES(XKBCONFIG, -+ [xkeyboard-config], -+ [XKBCONFIG_BASE=`$PKG_CONFIG xkeyboard-config --variable=xkb_base`], -+ [XKBCONFIG_BASE='$(datarootdir)/X11/xkb'] -+) -+AC_SUBST(XKBCONFIG_BASE) -+ - AC_SUBST([GDBUS_CODEGEN], [`$PKG_CONFIG --variable gdbus_codegen gio-2.0`]) - - # OUTPUT files -diff --git a/engine/Makefile.am b/engine/Makefile.am -index 1944c02b..84bc7f6c 100644 ---- a/engine/Makefile.am -+++ b/engine/Makefile.am -@@ -100,7 +100,7 @@ simple.xml: simple.xml.in - - simple.xml.in: - $(srcdir)/gensimple.py \ -- --input=$(datarootdir)/X11/xkb/rules/evdev.xml \ -+ --input=$(XKBCONFIG_BASE)/rules/evdev.xml \ - --output=$@ \ - --version=$(VERSION).`date '+%Y%m%d'` \ - --exec-path=@libexecdir\@/ibus-engine-simple \ --- -2.28.0 - -From c7928b158741282e17a042f767bc5ae32c302c96 Mon Sep 17 00:00:00 2001 -From: fujiwarat -Date: Fri, 8 Jan 2021 18:45:55 +0900 -Subject: [PATCH] Add GTK4 IM module - -BUG=https://github.com/ibus/ibus/issues/2291 ---- - client/Makefile.am | 7 +- - client/gtk2/ibusimcontext.c | 352 +++++++++++++++++++++++++++++++----- - client/gtk4/Makefile.am | 66 +++++++ - client/gtk4/ibusim.c | 52 ++++++ - client/gtk4/ibusimcontext.c | 1 + - client/gtk4/ibusimcontext.h | 1 + - configure.ac | 32 ++++ - 7 files changed, 465 insertions(+), 46 deletions(-) - create mode 100644 client/gtk4/Makefile.am - create mode 100644 client/gtk4/ibusim.c - create mode 120000 client/gtk4/ibusimcontext.c - create mode 120000 client/gtk4/ibusimcontext.h - -diff --git a/client/Makefile.am b/client/Makefile.am -index 546ca132..1744518c 100644 ---- a/client/Makefile.am -+++ b/client/Makefile.am -@@ -3,7 +3,7 @@ - # ibus - The Input Bus - # - # Copyright (c) 2007-2010 Peng Huang --# Copyright (c) 2007-2010 Red Hat, Inc. -+# Copyright (c) 2007-2020 Red Hat, Inc. - # - # This library is free software; you can redistribute it and/or - # modify it under the terms of the GNU Lesser General Public -@@ -28,6 +28,10 @@ if ENABLE_GTK3 - GTK3 = gtk3 - endif - -+if ENABLE_GTK4 -+GTK4 = gtk4 -+endif -+ - if ENABLE_XIM - X11 = x11 - endif -@@ -39,6 +43,7 @@ endif - SUBDIRS = \ - $(GTK2) \ - $(GTK3) \ -+ $(GTK4) \ - $(X11) \ - $(WAYLAND) \ - $(NULL) -diff --git a/client/gtk2/ibusimcontext.c b/client/gtk2/ibusimcontext.c -index 50290c55..a23fc2e3 100644 ---- a/client/gtk2/ibusimcontext.c -+++ b/client/gtk2/ibusimcontext.c -@@ -2,8 +2,8 @@ - /* vim:set et sts=4: */ - /* ibus - The Input Bus - * Copyright (C) 2008-2013 Peng Huang -- * Copyright (C) 2015-2019 Takao Fujiwara -- * Copyright (C) 2008-2019 Red Hat, Inc. -+ * Copyright (C) 2015-2020 Takao Fujiwara -+ * Copyright (C) 2008-2020 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public -@@ -32,8 +32,12 @@ - #include "ibusimcontext.h" - - #ifdef GDK_WINDOWING_WAYLAND -+#if GTK_CHECK_VERSION (3, 98, 4) -+#include -+#else - #include - #endif -+#endif - - #if !GTK_CHECK_VERSION (2, 91, 0) - # define DEPRECATED_GDK_KEYSYMS 1 -@@ -52,7 +56,11 @@ struct _IBusIMContext { - - /* instance members */ - GtkIMContext *slave; -+#if GTK_CHECK_VERSION (3, 98, 4) -+ GtkWidget *client_window; -+#else - GdkWindow *client_window; -+#endif - - IBusInputContext *ibuscontext; - -@@ -73,7 +81,12 @@ struct _IBusIMContext { - GCancellable *cancellable; - GQueue *events_queue; - --#if !GTK_CHECK_VERSION (3, 93, 0) -+#if GTK_CHECK_VERSION (3, 98, 4) -+ GdkSurface *surface; -+ GdkDevice *device; -+ double x; -+ double y; -+#else - gboolean use_button_press_event; - #endif - }; -@@ -90,9 +103,11 @@ static guint _signal_preedit_end_id = 0; - static guint _signal_delete_surrounding_id = 0; - static guint _signal_retrieve_surrounding_id = 0; - -+#if !GTK_CHECK_VERSION (3, 98, 4) - static const gchar *_no_snooper_apps = NO_SNOOPER_APPS; - static gboolean _use_key_snooper = ENABLE_SNOOPER; - static guint _key_snooper_id = 0; -+#endif - - static gboolean _use_sync_mode = FALSE; - -@@ -101,8 +116,10 @@ static gboolean _use_discard_password = FALSE; - - static GtkIMContext *_focus_im_context = NULL; - static IBusInputContext *_fake_context = NULL; -+#if !GTK_CHECK_VERSION (3, 98, 4) - static GdkWindow *_input_window = NULL; - static GtkWidget *_input_widget = NULL; -+#endif - - /* functions prototype */ - static void ibus_im_context_class_init (IBusIMContextClass *class); -@@ -114,7 +131,11 @@ static void ibus_im_context_finalize (GObject *obj); - static void ibus_im_context_reset (GtkIMContext *context); - static gboolean ibus_im_context_filter_keypress - (GtkIMContext *context, -+#if GTK_CHECK_VERSION (3, 98, 4) -+ GdkEvent *key); -+#else - GdkEventKey *key); -+#endif - static void ibus_im_context_focus_in (GtkIMContext *context); - static void ibus_im_context_focus_out (GtkIMContext *context); - static void ibus_im_context_get_preedit_string -@@ -122,9 +143,15 @@ static void ibus_im_context_get_preedit_string - gchar **str, - PangoAttrList **attrs, - gint *cursor_pos); -+#if GTK_CHECK_VERSION (3, 98, 4) -+static void ibus_im_context_set_client_widget -+ (GtkIMContext *context, -+ GtkWidget *client); -+#else - static void ibus_im_context_set_client_window - (GtkIMContext *context, - GdkWindow *client); -+#endif - static void ibus_im_context_set_cursor_location - (GtkIMContext *context, - GdkRectangle *area); -@@ -239,6 +266,7 @@ ibus_im_context_new (void) - return IBUS_IM_CONTEXT (obj); - } - -+#if !GTK_CHECK_VERSION (3, 98, 4) - static gboolean - _focus_in_cb (GtkWidget *widget, - GdkEventFocus *event, -@@ -260,22 +288,41 @@ _focus_out_cb (GtkWidget *widget, - } - return FALSE; - } -+#endif /* end of GTK_CHECK_VERSION (3, 98, 4) */ - - static gboolean - ibus_im_context_commit_event (IBusIMContext *ibusimcontext, -+#if GTK_CHECK_VERSION (3, 98, 4) -+ GdkEvent *event) -+#else - GdkEventKey *event) -+#endif - { -+ guint keyval = 0; -+ GdkModifierType state = 0; - int i; - GdkModifierType no_text_input_mask; - gunichar ch; - -+#if GTK_CHECK_VERSION (3, 98, 4) -+ if (gdk_event_get_event_type (event) == GDK_KEY_RELEASE) -+ return FALSE; -+ keyval = gdk_key_event_get_keyval (event); -+ state = gdk_event_get_modifier_state (event); -+#else - if (event->type == GDK_KEY_RELEASE) - return FALSE; -+ keyval = event->keyval; -+ state = event->state; -+#endif -+ - /* Ignore modifier key presses */ - for (i = 0; i < G_N_ELEMENTS (IBUS_COMPOSE_IGNORE_KEYLIST); i++) -- if (event->keyval == IBUS_COMPOSE_IGNORE_KEYLIST[i]) -+ if (keyval == IBUS_COMPOSE_IGNORE_KEYLIST[i]) - return FALSE; --#if GTK_CHECK_VERSION (3, 4, 0) -+#if GTK_CHECK_VERSION (3, 98, 4) -+ no_text_input_mask = GDK_MODIFIER_MASK; -+#elif GTK_CHECK_VERSION (3, 4, 0) - no_text_input_mask = gdk_keymap_get_modifier_mask ( - gdk_keymap_get_for_display (gdk_display_get_default ()), - GDK_MODIFIER_INTENT_NO_TEXT_INPUT); -@@ -290,13 +337,13 @@ ibus_im_context_commit_event (IBusIMContext *ibusimcontext, - - # undef _IBUS_NO_TEXT_INPUT_MOD_MASK - #endif -- if (event->state & no_text_input_mask || -- event->keyval == GDK_KEY_Return || -- event->keyval == GDK_KEY_ISO_Enter || -- event->keyval == GDK_KEY_KP_Enter) { -+ if (state & no_text_input_mask || -+ keyval == GDK_KEY_Return || -+ keyval == GDK_KEY_ISO_Enter || -+ keyval == GDK_KEY_KP_Enter) { - return FALSE; - } -- ch = ibus_keyval_to_unicode (event->keyval); -+ ch = ibus_keyval_to_unicode (keyval); - if (ch != 0 && !g_unichar_iscntrl (ch)) { - IBusText *text = ibus_text_new_from_unichar (ch); - g_signal_emit (ibusimcontext, _signal_commit_id, 0, text->text); -@@ -307,14 +354,26 @@ ibus_im_context_commit_event (IBusIMContext *ibusimcontext, - return FALSE; - } - -+struct _ProcessKeyEventData { -+ GdkEvent *event; -+ IBusIMContext *ibusimcontext; -+}; -+ -+typedef struct _ProcessKeyEventData ProcessKeyEventData; -+ - static void - _process_key_event_done (GObject *object, - GAsyncResult *res, - gpointer user_data) - { - IBusInputContext *context = (IBusInputContext *)object; -- GdkEventKey *event = (GdkEventKey *) user_data; -+ -+ ProcessKeyEventData *data = (ProcessKeyEventData *)user_data; -+ GdkEvent *event = data->event; -+ IBusIMContext *ibusimcontext = data->ibusimcontext; - GError *error = NULL; -+ -+ g_slice_free (ProcessKeyEventData, data); - gboolean retval = ibus_input_context_process_key_event_async_finish ( - context, - res, -@@ -326,46 +385,96 @@ _process_key_event_done (GObject *object, - } - - if (retval == FALSE) { -- event->state |= IBUS_IGNORED_MASK; -- gdk_event_put ((GdkEvent *)event); -+#if GTK_CHECK_VERSION (3, 98, 4) -+ g_return_if_fail (GTK_IS_IM_CONTEXT (ibusimcontext)); -+ gtk_im_context_filter_key ( -+ GTK_IM_CONTEXT (ibusimcontext), -+ gdk_event_get_event_type (event) == GDK_KEY_PRESS, -+ gdk_event_get_surface (event), -+ gdk_event_get_device (event), -+ gdk_event_get_time (event), -+ gdk_key_event_get_keycode (event), -+ gdk_event_get_modifier_state (event) | IBUS_IGNORED_MASK, -+ 0); -+#else -+ ((GdkEventKey *)event)->state |= IBUS_IGNORED_MASK; -+ gdk_event_put (event); -+#endif - } -- gdk_event_free ((GdkEvent *)event); -+#if GTK_CHECK_VERSION (3, 98, 4) -+ gdk_event_unref (event); -+#else -+ gdk_event_free (event); -+#endif - } - - static gboolean - _process_key_event (IBusInputContext *context, -- GdkEventKey *event) -+#if GTK_CHECK_VERSION (3, 98, 4) -+ GdkEvent *event, -+#else -+ GdkEventKey *event, -+#endif -+ IBusIMContext *ibusimcontext) - { -- guint state = event->state; -+ guint state; -+ guint keyval = 0; -+ guint16 hardware_keycode = 0; -+ guint keycode = 0; - gboolean retval = FALSE; - -- if (event->type == GDK_KEY_RELEASE) { -+#if GTK_CHECK_VERSION (3, 98, 4) -+ GdkModifierType gdkstate = gdk_event_get_modifier_state (event); -+ state = (uint)gdkstate; -+ if (gdk_event_get_event_type (event) == GDK_KEY_RELEASE) - state |= IBUS_RELEASE_MASK; -- } -+ keyval = gdk_key_event_get_keyval (event); -+ hardware_keycode = gdk_key_event_get_keycode (event); -+#else -+ state = event->state; -+ if (event->type == GDK_KEY_RELEASE) -+ state |= IBUS_RELEASE_MASK; -+ keyval = event->keyval; -+ hardware_keycode = event->hardware_keycode; -+#endif -+ keycode = hardware_keycode; - - if (_use_sync_mode) { - retval = ibus_input_context_process_key_event (context, -- event->keyval, -- event->hardware_keycode - 8, -+ keyval, -+ keycode - 8, - state); - } - else { -+ ProcessKeyEventData *data = g_slice_new0 (ProcessKeyEventData); -+#if GTK_CHECK_VERSION (3, 98, 4) -+ data->event = gdk_event_ref (event); -+#else -+ data->event = gdk_event_copy ((GdkEvent *)event); -+#endif -+ data->ibusimcontext = ibusimcontext; - ibus_input_context_process_key_event_async (context, -- event->keyval, -- event->hardware_keycode - 8, -+ keyval, -+ keycode - 8, - state, - -1, - NULL, - _process_key_event_done, -- gdk_event_copy ((GdkEvent *) event)); -+ data); - - retval = TRUE; - } - -+ /* GTK4 does not provide gtk_key_snooper_install() and also -+ * GtkIMContextClass->filter_keypress() cannot send the updated -+ * GdkEventKey so event->state is not updated here in GTK4. -+ */ -+#if !GTK_CHECK_VERSION (3, 98, 4) - if (retval) - event->state |= IBUS_HANDLED_MASK; - else - event->state |= IBUS_IGNORED_MASK; -+#endif - - return retval; - } -@@ -425,6 +534,7 @@ _set_content_type (IBusIMContext *context) - } - - -+#if !GTK_CHECK_VERSION (3, 98, 4) - static gint - _key_snooper_cb (GtkWidget *widget, - GdkEventKey *event, -@@ -526,7 +636,7 @@ _key_snooper_cb (GtkWidget *widget, - ibusimcontext->time = event->time; - } - -- retval = _process_key_event (ibuscontext, event); -+ retval = _process_key_event (ibuscontext, event, ibusimcontext); - - if (ibusimcontext != NULL) { - /* unref ibusimcontext could call ibus_im_context_finalize here -@@ -537,6 +647,7 @@ _key_snooper_cb (GtkWidget *widget, - - return retval; - } -+#endif - - static gboolean - _get_boolean_env(const gchar *name, -@@ -599,7 +710,11 @@ ibus_im_context_class_init (IBusIMContextClass *class) - im_context_class->focus_out = ibus_im_context_focus_out; - im_context_class->filter_keypress = ibus_im_context_filter_keypress; - im_context_class->get_preedit_string = ibus_im_context_get_preedit_string; -+#if GTK_CHECK_VERSION (3, 98, 4) -+ im_context_class->set_client_widget = ibus_im_context_set_client_widget; -+#else - im_context_class->set_client_window = ibus_im_context_set_client_window; -+#endif - im_context_class->set_cursor_location = ibus_im_context_set_cursor_location; - im_context_class->set_use_preedit = ibus_im_context_set_use_preedit; - im_context_class->set_surrounding = ibus_im_context_set_surrounding; -@@ -630,8 +745,10 @@ ibus_im_context_class_init (IBusIMContextClass *class) - g_signal_lookup ("retrieve-surrounding", G_TYPE_FROM_CLASS (class)); - g_assert (_signal_retrieve_surrounding_id != 0); - -+#if !GTK_CHECK_VERSION (3, 98, 4) - _use_key_snooper = !_get_boolean_env ("IBUS_DISABLE_SNOOPER", - !(ENABLE_SNOOPER)); -+#endif - _use_sync_mode = _get_boolean_env ("IBUS_ENABLE_SYNC_MODE", FALSE); - _use_discard_password = _get_boolean_env ("IBUS_DISCARD_PASSWORD", FALSE); - -@@ -656,6 +773,7 @@ ibus_im_context_class_init (IBusIMContextClass *class) - g_strfreev (apps); \ - } - -+#if !GTK_CHECK_VERSION (3, 98, 4) - /* env IBUS_DISABLE_SNOOPER does not exist */ - if (_use_key_snooper) { - /* disable snooper if app is in _no_snooper_apps */ -@@ -664,6 +782,7 @@ ibus_im_context_class_init (IBusIMContextClass *class) - _no_snooper_apps, - FALSE); - } -+#endif - if (!_use_discard_password) { - CHECK_APP_IN_CSV_ENV_VARIABLES (_use_discard_password, - IBUS_DISCARD_PASSWORD_APPS, -@@ -686,6 +805,7 @@ ibus_im_context_class_init (IBusIMContextClass *class) - } - - -+#if !GTK_CHECK_VERSION (3, 98, 4) - /* always install snooper */ - if (_key_snooper_id == 0) { - #pragma GCC diagnostic push -@@ -693,6 +813,7 @@ ibus_im_context_class_init (IBusIMContextClass *class) - _key_snooper_id = gtk_key_snooper_install (_key_snooper_cb, NULL); - #pragma GCC diagnostic pop - } -+#endif - - _daemon_name_watch_id = g_bus_watch_name (G_BUS_TYPE_SESSION, - ibus_bus_get_service_name (_bus), -@@ -706,6 +827,7 @@ ibus_im_context_class_init (IBusIMContextClass *class) - static void - ibus_im_context_class_fini (IBusIMContextClass *class) - { -+#if !GTK_CHECK_VERSION (3, 98, 4) - if (_key_snooper_id != 0) { - IDEBUG ("snooper is terminated."); - #pragma GCC diagnostic push -@@ -714,6 +836,7 @@ ibus_im_context_class_fini (IBusIMContextClass *class) - #pragma GCC diagnostic pop - _key_snooper_id = 0; - } -+#endif - - g_bus_unwatch_name (_daemon_name_watch_id); - } -@@ -849,7 +972,11 @@ ibus_im_context_finalize (GObject *obj) - ibus_proxy_destroy ((IBusProxy *)ibusimcontext->ibuscontext); - } - -+#if GTK_CHECK_VERSION (3, 98, 4) -+ ibus_im_context_set_client_widget ((GtkIMContext *)ibusimcontext, NULL); -+#else - ibus_im_context_set_client_window ((GtkIMContext *)ibusimcontext, NULL); -+#endif - - if (ibusimcontext->slave) { - g_object_unref (ibusimcontext->slave); -@@ -864,8 +991,13 @@ ibus_im_context_finalize (GObject *obj) - pango_attr_list_unref (ibusimcontext->preedit_attrs); - } - -+#if GTK_CHECK_VERSION (3, 98, 4) -+ g_queue_free_full (ibusimcontext->events_queue, -+ (GDestroyNotify)gdk_event_unref); -+#else - g_queue_free_full (ibusimcontext->events_queue, - (GDestroyNotify)gdk_event_free); -+#endif - - G_OBJECT_CLASS(parent_class)->finalize (obj); - } -@@ -902,7 +1034,11 @@ ibus_im_context_clear_preedit_text (IBusIMContext *ibusimcontext) - - static gboolean - ibus_im_context_filter_keypress (GtkIMContext *context, -+#if GTK_CHECK_VERSION (3, 98, 4) -+ GdkEvent *event) -+#else - GdkEventKey *event) -+#endif - { - IDEBUG ("%s", __FUNCTION__); - -@@ -917,6 +1053,15 @@ ibus_im_context_filter_keypress (GtkIMContext *context, - if (!ibusimcontext->has_focus) - return gtk_im_context_filter_keypress (ibusimcontext->slave, event); - -+#if GTK_CHECK_VERSION (3, 98, 4) -+ { -+ GdkModifierType state = gdk_event_get_modifier_state (event); -+ if (state & IBUS_HANDLED_MASK) -+ return TRUE; -+ if (state & IBUS_IGNORED_MASK) -+ return ibus_im_context_commit_event (ibusimcontext, event); -+ } -+#else - if (event->state & IBUS_HANDLED_MASK) - return TRUE; - -@@ -931,17 +1076,28 @@ ibus_im_context_filter_keypress (GtkIMContext *context, - if (ibusimcontext->client_window == NULL && event->window != NULL) - gtk_im_context_set_client_window ((GtkIMContext *)ibusimcontext, - event->window); -+#endif - - _request_surrounding_text (ibusimcontext); - -+#if GTK_CHECK_VERSION (3, 98, 4) -+ ibusimcontext->time = gdk_event_get_time (event); -+ ibusimcontext->surface= gdk_event_get_surface (event); -+ ibusimcontext->device = gdk_event_get_device (event); -+ gdk_event_get_position (event, &ibusimcontext->x, &ibusimcontext->y); -+#else - ibusimcontext->time = event->time; -+#endif - - if (ibusimcontext->ibuscontext) { -- if (_process_key_event (ibusimcontext->ibuscontext, event)) -+ if (_process_key_event (ibusimcontext->ibuscontext, -+ event, -+ ibusimcontext)) { - return TRUE; -- else -+ } else { - return gtk_im_context_filter_keypress (ibusimcontext->slave, - event); -+ } - } - - /* At this point we _should_ be waiting for the IBus context to be -@@ -952,12 +1108,21 @@ ibus_im_context_filter_keypress (GtkIMContext *context, - ibus_bus_is_connected (_bus) == FALSE, - FALSE); - g_queue_push_tail (ibusimcontext->events_queue, -+#if GTK_CHECK_VERSION (3, 98, 4) -+ gdk_event_ref (event)); -+#else - gdk_event_copy ((GdkEvent *)event)); -+#endif - - if (g_queue_get_length (ibusimcontext->events_queue) > MAX_QUEUED_EVENTS) { - g_warning ("Events queue growing too big, will start to drop."); -+#if GTK_CHECK_VERSION (3, 98, 4) -+ gdk_event_unref ((GdkEvent *) -+ g_queue_pop_head (ibusimcontext->events_queue)); -+#else - gdk_event_free ((GdkEvent *) - g_queue_pop_head (ibusimcontext->events_queue)); -+#endif - } - - return TRUE; -@@ -966,26 +1131,29 @@ ibus_im_context_filter_keypress (GtkIMContext *context, - static void - ibus_im_context_focus_in (GtkIMContext *context) - { -- IDEBUG ("%s", __FUNCTION__); -- - IBusIMContext *ibusimcontext = (IBusIMContext *) context; -+ GtkWidget *widget = NULL; -+ -+ IDEBUG ("%s", __FUNCTION__); - - if (ibusimcontext->has_focus) - return; - - /* don't set focus on password entry */ -+#if GTK_CHECK_VERSION (3, 98, 4) -+ widget = ibusimcontext->client_window; -+#else - if (ibusimcontext->client_window != NULL) { -- GtkWidget *widget; -- - gdk_window_get_user_data (ibusimcontext->client_window, - (gpointer *)&widget); - -- if (GTK_IS_ENTRY (widget) && -- !gtk_entry_get_visibility (GTK_ENTRY (widget))) { -- return; -- } - } -+#endif - -+ if (widget && GTK_IS_ENTRY (widget) && -+ !gtk_entry_get_visibility (GTK_ENTRY (widget))) { -+ return; -+ } - /* Do not call gtk_im_context_focus_out() here. - * google-chrome's notification popup window (Pushbullet) - * takes the focus and the popup window disappears. -@@ -1014,10 +1182,10 @@ ibus_im_context_focus_in (GtkIMContext *context) - - /* set_cursor_location_internal() will get origin from X server, - * it blocks UI. So delay it to idle callback. */ -- gdk_threads_add_idle_full (G_PRIORITY_DEFAULT_IDLE, -- (GSourceFunc) _set_cursor_location_internal, -- g_object_ref (ibusimcontext), -- (GDestroyNotify) g_object_unref); -+ g_idle_add_full (G_PRIORITY_DEFAULT_IDLE, -+ (GSourceFunc) _set_cursor_location_internal, -+ g_object_ref (ibusimcontext), -+ (GDestroyNotify) g_object_unref); - - /* retrieve the initial surrounding-text (regardless of whether - * the current IBus engine needs surrounding-text) */ -@@ -1122,7 +1290,7 @@ ibus_im_context_get_preedit_string (GtkIMContext *context, - } - - --#if !GTK_CHECK_VERSION (3, 93, 0) -+#if !GTK_CHECK_VERSION (3, 98, 4) - /* Use the button-press-event signal until GtkIMContext always emits the reset - * signal. - * https://gitlab.gnome.org/GNOME/gtk/merge_requests/460 -@@ -1171,8 +1339,15 @@ _connect_button_press_event (IBusIMContext *ibusimcontext, - } - #endif - -+#if GTK_CHECK_VERSION (3, 98, 4) - static void --ibus_im_context_set_client_window (GtkIMContext *context, GdkWindow *client) -+ibus_im_context_set_client_widget (GtkIMContext *context, -+ GtkWidget *client) -+#else -+static void -+ibus_im_context_set_client_window (GtkIMContext *context, -+ GdkWindow *client) -+#endif - { - IBusIMContext *ibusimcontext; - -@@ -1181,7 +1356,7 @@ ibus_im_context_set_client_window (GtkIMContext *context, GdkWindow *client) - ibusimcontext = IBUS_IM_CONTEXT (context); - - if (ibusimcontext->client_window) { --#if !GTK_CHECK_VERSION (3, 93, 0) -+#if !GTK_CHECK_VERSION (3, 98, 4) - if (ibusimcontext->use_button_press_event) - _connect_button_press_event (ibusimcontext, FALSE); - #endif -@@ -1191,26 +1366,41 @@ ibus_im_context_set_client_window (GtkIMContext *context, GdkWindow *client) - - if (client != NULL) { - ibusimcontext->client_window = g_object_ref (client); --#if !GTK_CHECK_VERSION (3, 93, 0) -+#if !GTK_CHECK_VERSION (3, 98, 4) - if (!ibusimcontext->use_button_press_event) - _connect_button_press_event (ibusimcontext, TRUE); - #endif - } -+#if GTK_CHECK_VERSION (3, 98, 4) -+ if (ibusimcontext->slave) -+ gtk_im_context_set_client_widget (ibusimcontext->slave, client); -+#else - if (ibusimcontext->slave) - gtk_im_context_set_client_window (ibusimcontext->slave, client); -+#endif - } - - static void - _set_rect_scale_factor_with_window (GdkRectangle *area, -+#if GTK_CHECK_VERSION (3, 98, 4) -+ GtkWidget *window) -+#else - GdkWindow *window) -+#endif - { - #if GTK_CHECK_VERSION (3, 10, 0) - int scale_factor; - - g_assert (area); -+#if GTK_CHECK_VERSION (3, 98, 4) -+ g_assert (GTK_IS_WIDGET (window)); -+ -+ scale_factor = gtk_widget_get_scale_factor (window); -+#else - g_assert (GDK_IS_WINDOW (window)); - - scale_factor = gdk_window_get_scale_factor (window); -+#endif - area->x *= scale_factor; - area->y *= scale_factor; - area->width *= scale_factor; -@@ -1230,6 +1420,7 @@ _set_cursor_location_internal (IBusIMContext *ibusimcontext) - - area = ibusimcontext->cursor_area; - -+#if !GTK_CHECK_VERSION (3, 98, 4) - #ifdef GDK_WINDOWING_WAYLAND - if (GDK_IS_WAYLAND_DISPLAY (gdk_display_get_default ())) { - gdouble px, py; -@@ -1253,10 +1444,14 @@ _set_cursor_location_internal (IBusIMContext *ibusimcontext) - area.height); - return FALSE; - } -+#endif - #endif - - if (area.x == -1 && area.y == -1 && area.width == 0 && area.height == 0) { --#if GTK_CHECK_VERSION (2, 91, 0) -+#if GTK_CHECK_VERSION (3, 98, 4) -+ area.x = 0; -+ area.y += gtk_widget_get_height (ibusimcontext->client_window); -+#elif GTK_CHECK_VERSION (2, 91, 0) - area.x = 0; - area.y += gdk_window_get_height (ibusimcontext->client_window); - #else -@@ -1267,9 +1462,39 @@ _set_cursor_location_internal (IBusIMContext *ibusimcontext) - #endif - } - -+#if GTK_CHECK_VERSION (3, 93, 0) -+ { -+#if GTK_CHECK_VERSION (3, 98, 4) -+ GtkNative *native = gtk_widget_get_native ( -+ ibusimcontext->client_window); -+ GtkRoot *root = gtk_widget_get_root (ibusimcontext->client_window); -+ double nx, ny; -+ double px, py; -+ gtk_native_get_surface_transform (native, &nx, &ny); -+ px = (double)area.x + ibusimcontext->x - nx; -+ py = (double)area.y + ibusimcontext->y - ny; -+ gtk_widget_translate_coordinates (ibusimcontext->client_window, -+ (GtkWidget *)root, -+ px, py, -+ &px, &py); -+ area.x = (int)px; -+ area.y = (int)py; -+#else -+ GtkNative *native = gtk_widget_get_native ( -+ ibusimcontext->client_window); -+ GdkSurface *surface = gtk_native_get_surface (native); -+ int root_x = 0; -+ int root_y = 0; -+ gdk_surface_get_position (surface, &root_x, &root_y); -+ area.x += root_x; -+ area.y += root_y; -+#endif -+ } -+#else - gdk_window_get_root_coords (ibusimcontext->client_window, - area.x, area.y, - &area.x, &area.y); -+#endif - _set_rect_scale_factor_with_window (&area, ibusimcontext->client_window); - ibus_input_context_set_cursor_location (ibusimcontext->ibuscontext, - area.x, -@@ -1326,7 +1551,11 @@ get_selection_anchor_point (IBusIMContext *ibusimcontext, - if (ibusimcontext->client_window == NULL) { - return cursor_pos; - } -+#if GTK_CHECK_VERSION (3, 98, 4) -+ widget = ibusimcontext->client_window; -+#else - gdk_window_get_user_data (ibusimcontext->client_window, (gpointer *)&widget); -+#endif - - if (!GTK_IS_TEXT_VIEW (widget)){ - return cursor_pos; -@@ -1440,6 +1669,7 @@ _ibus_context_commit_text_cb (IBusInputContext *ibuscontext, - _request_surrounding_text (ibusimcontext); - } - -+#if !GTK_CHECK_VERSION (3, 98, 4) - static gboolean - _key_is_modifier (guint keyval) - { -@@ -1615,6 +1845,7 @@ _create_gdk_event (IBusIMContext *ibusimcontext, - out: - return event; - } -+#endif - - static void - _ibus_context_forward_key_event_cb (IBusInputContext *ibuscontext, -@@ -1624,9 +1855,32 @@ _ibus_context_forward_key_event_cb (IBusInputContext *ibuscontext, - IBusIMContext *ibusimcontext) - { - IDEBUG ("%s", __FUNCTION__); -+#if GTK_CHECK_VERSION (3, 98, 4) -+ int group = 0; -+ g_return_if_fail (GTK_IS_IM_CONTEXT (ibusimcontext)); -+ if (keycode == 0 && ibusimcontext->client_window) { -+ GdkDisplay *display = gtk_widget_get_display (ibusimcontext->client_window); -+ GdkKeymapKey *keys = NULL; -+ gint n_keys = 0; -+ if (!gdk_display_map_keyval (display, keyval, &keys, &n_keys)) -+ g_warning ("Failed to parse keycode from keyval %x", keyval); -+ keycode = keys->keycode; -+ group = keys->group; -+ } -+ gtk_im_context_filter_key ( -+ GTK_IM_CONTEXT (ibusimcontext), -+ (state & IBUS_RELEASE_MASK) ? FALSE : TRUE, -+ ibusimcontext->surface, -+ ibusimcontext->device, -+ ibusimcontext->time, -+ keycode, -+ (GdkModifierType)state, -+ group); -+#else - GdkEventKey *event = _create_gdk_event (ibusimcontext, keyval, keycode, state); - gdk_event_put ((GdkEvent *)event); - gdk_event_free ((GdkEvent *)event); -+#endif - } - - static void -@@ -1660,7 +1914,7 @@ _ibus_context_update_preedit_text_cb (IBusInputContext *ibuscontext, - ibusimcontext->preedit_attrs = NULL; - } - --#if !GTK_CHECK_VERSION (3, 93, 0) -+#if !GTK_CHECK_VERSION (3, 98, 4) - if (!ibusimcontext->use_button_press_event && - mode == IBUS_ENGINE_PREEDIT_COMMIT) { - if (ibusimcontext->client_window) { -@@ -1847,10 +2101,18 @@ _create_input_context_done (IBusBus *bus, - } - - if (!g_queue_is_empty (ibusimcontext->events_queue)) { -+#if GTK_CHECK_VERSION (3, 98, 4) -+ GdkEvent *event; -+#else - GdkEventKey *event; -+#endif - while ((event = g_queue_pop_head (ibusimcontext->events_queue))) { -- _process_key_event (context, event); -+ _process_key_event (context, event, ibusimcontext); -+#if GTK_CHECK_VERSION (3, 98, 4) -+ gdk_event_unref (event); -+#else - gdk_event_free ((GdkEvent *)event); -+#endif - } - } - } -diff --git a/client/gtk4/Makefile.am b/client/gtk4/Makefile.am -new file mode 100644 -index 00000000..8d8b31db ---- /dev/null -+++ b/client/gtk4/Makefile.am -@@ -0,0 +1,66 @@ -+# vim:set noet ts=4: -+# -+# ibus - The Input Bus -+# -+# Copyright (c) 2020 Takao Fujiwara -+# Copyright (c) 2020 Red Hat, Inc. -+# -+# This library is free software; you can redistribute it and/or -+# modify it under the terms of the GNU Lesser General Public -+# License as published by the Free Software Foundation; either -+# version 2.1 of the License, or (at your option) any later version. -+# -+# This library is distributed in the hope that it will be useful, -+# but WITHOUT ANY WARRANTY; without even the implied warranty of -+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+# Lesser General Public License for more details. -+# -+# You should have received a copy of the GNU Lesser General Public -+# License along with this library; if not, write to the Free Software -+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 -+# USA -+ -+libibus = $(top_builddir)/src/libibus-@IBUS_API_VERSION@.la -+ -+AM_CPPFLAGS = \ -+ -I$(top_srcdir)/src \ -+ -I$(top_builddir)/src \ -+ $(NULL) -+ -+immoduledir = @GTK4_IM_MODULEDIR@ -+immodule_LTLIBRARIES = libim-ibus.la -+ -+libim_ibus_la_SOURCES = \ -+ ibusim.c \ -+ ibusimcontext.c \ -+ ibusimcontext.h \ -+ $(NULL) -+ -+libim_ibus_la_DEPENDENCIES = $(libibus) -+ -+libim_ibus_la_CFLAGS = \ -+ @GTK4_CFLAGS@ \ -+ @DBUS_CFLAGS@ \ -+ -DG_LOG_DOMAIN=\"IBUS\" \ -+ $(NULL) -+ -+libim_ibus_la_LIBADD = \ -+ @GTK4_LIBS@ \ -+ @DBUS_LIBS@ \ -+ $(libibus) \ -+ $(NULL) -+libim_ibus_la_LDFLAGS = \ -+ -avoid-version \ -+ -module \ -+ $(NULL) -+ -+$(libibus): -+ (cd $(top_builddir)/src; make ) -+ -+EXTRA_DIST = \ -+ $(NULL) -+ -+test: all -+ GTK_IM_MODULE=ibus gedit -+ -+-include $(top_srcdir)/git.mk -diff --git a/client/gtk4/ibusim.c b/client/gtk4/ibusim.c -new file mode 100644 -index 00000000..5ecf9778 ---- /dev/null -+++ b/client/gtk4/ibusim.c -@@ -0,0 +1,52 @@ -+/* -*- mode: C; c-basic-offset: 4; indent-tabs-mode: nil; -*- */ -+/* vim:set et ts=4: */ -+/* ibus - The Input Bus -+ * Copyright (C) 2008-2010 Peng Huang -+ * Copyright (C) 2020 Takao Fujiwara -+ * Copyright (C) 2008-2020 Red Hat, Inc. -+ * -+ * This library is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Lesser General Public -+ * License as published by the Free Software Foundation; either -+ * version 2.1 of the License, or (at your option) any later version. -+ * -+ * This library is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ * Lesser General Public License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General Public -+ * License along with this library; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 -+ * USA -+ */ -+ -+#include -+#include -+#include -+#include "ibusimcontext.h" -+ -+G_MODULE_EXPORT void -+g_io_im_ibus_load (GTypeModule *type_module) -+{ -+ static gboolean inited = FALSE; -+ -+ if (!inited) { -+ ibus_init (); -+ ibus_im_context_register_type (type_module); -+ g_io_extension_point_implement ("gtk-im-module", -+ IBUS_TYPE_IM_CONTEXT, -+ "ibus", -+ 50); -+ inited = TRUE; -+ } -+ /* make module resident */ -+ g_type_module_use (type_module); -+} -+ -+G_MODULE_EXPORT void -+g_io_im_ibus_unload (GTypeModule *type_module) -+{ -+ g_type_module_unuse (type_module); -+} -+ -diff --git a/client/gtk4/ibusimcontext.c b/client/gtk4/ibusimcontext.c -new file mode 120000 -index 00000000..41896f05 ---- /dev/null -+++ b/client/gtk4/ibusimcontext.c -@@ -0,0 +1 @@ -+../gtk2/ibusimcontext.c -\ No newline at end of file -diff --git a/client/gtk4/ibusimcontext.h b/client/gtk4/ibusimcontext.h -new file mode 120000 -index 00000000..29759883 ---- /dev/null -+++ b/client/gtk4/ibusimcontext.h -@@ -0,0 +1 @@ -+../gtk2/ibusimcontext.h -\ No newline at end of file -diff --git a/configure.ac b/configure.ac -index 9ed5cb66..ffea3317 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -193,6 +193,15 @@ AC_ARG_ENABLE(gtk3, - ) - AM_CONDITIONAL([ENABLE_GTK3], [test x"$enable_gtk3" = x"yes"]) - -+# --enable-gtk4 option. -+AC_ARG_ENABLE(gtk4, -+ AS_HELP_STRING([--enable-gtk4], -+ [Build gtk4 im module]), -+ [enable_gtk4=$enableval], -+ [enable_gtk4=no] -+) -+AM_CONDITIONAL([ENABLE_GTK4], [test x"$enable_gtk4" = x"yes"]) -+ - # --disable-xim option. - AC_ARG_ENABLE(xim, - AS_HELP_STRING([--disable-xim], -@@ -257,6 +266,18 @@ if test x"$enable_gdk3_wayland" != x"yes"; then - fi - AM_CONDITIONAL([ENABLE_GDK3_WAYLAND], [test x"$enable_gdk3_wayland" = x"yes"]) - -+if test x"$enable_gtk4" = x"yes"; then -+ # check for gtk4 -+ PKG_CHECK_MODULES(GTK4, [ -+ gtk4 -+ ]) -+ -+ gtk4_binary_version=`$PKG_CONFIG --variable=gtk_binary_version gtk4` -+ GTK4_IM_MODULEDIR="$libdir"/gtk-4.0/$gtk4_binary_version/immodules -+else -+ enable_gtk4="no (disabled, use --enable-gtk4 to enable)" -+fi -+ - if test x"$enable_xim" = x"yes"; then - # Check for x11 - PKG_CHECK_MODULES(X11, [ -@@ -478,6 +499,14 @@ AC_ARG_WITH(gtk3-im-module-dir, - ) - AC_SUBST(GTK3_IM_MODULEDIR) - -+# Define gtk4 immodule dir. -+AC_ARG_WITH(gtk4-im-module-dir, -+ AS_HELP_STRING([--with-gtk4-im-module-dir[=DIR]], -+ [Select gtk4 immodule dir]), -+ GTK4_IM_MODULEDIR=$with_gtk4_im_module_dir -+) -+AC_SUBST(GTK4_IM_MODULEDIR) -+ - if test x"$enable_python" = x"yes"; then - # Check for dbus-python. - AC_ARG_ENABLE(dbus-python-check, -@@ -737,6 +766,7 @@ ibus.spec - client/Makefile - client/gtk2/Makefile - client/gtk3/Makefile -+client/gtk4/Makefile - client/x11/Makefile - client/wayland/Makefile - src/Makefile -@@ -786,8 +816,10 @@ Build options: - Enable python2 $enable_python2 - Gtk2 immodule dir $GTK2_IM_MODULEDIR - Gtk3 immodule dir $GTK3_IM_MODULEDIR -+ Gtk4 immodule dir $GTK4_IM_MODULEDIR - Build gtk2 immodule $enable_gtk2 - Build gtk3 immodule $enable_gtk3 -+ Build gtk4 immodule $enable_gtk4 - Build XIM agent server $enable_xim - Build wayland support $enable_wayland - Build gdk3 wayland support $enable_gdk3_wayland --- -2.28.0 - -From d0a47c3c82b1a0c263ff8b95f9cf5c0a5d1f228d Mon Sep 17 00:00:00 2001 -From: fujiwarat -Date: Fri, 8 Jan 2021 18:48:13 +0900 -Subject: [PATCH] client/gtk2: Add XTranslateCoordinates for GTK4 X11 - coordinate - -GdkWindow had the absolute coordiante in the private class in GTK3 -but the absolute coordiane no longer exists in GTK4 for Wayland. -Now get the toplevel window coordiante for the warkaround in GTK4 -but the coordiante of the inner widgets is no longer available too. - -BUG=https://gitlab.gnome.org/GNOME/gtk/-/issues/3024#note_987835 ---- - client/gtk2/ibusimcontext.c | 47 ++++++++++++++++++++++++------------- - 1 file changed, 31 insertions(+), 16 deletions(-) - -diff --git a/client/gtk2/ibusimcontext.c b/client/gtk2/ibusimcontext.c -index a23fc2e3..e153081d 100644 ---- a/client/gtk2/ibusimcontext.c -+++ b/client/gtk2/ibusimcontext.c -@@ -39,6 +39,13 @@ - #endif - #endif - -+#ifdef GDK_WINDOWING_X11 -+#if GTK_CHECK_VERSION (3, 98, 4) -+#include -+#include -+#endif -+#endif -+ - #if !GTK_CHECK_VERSION (2, 91, 0) - # define DEPRECATED_GDK_KEYSYMS 1 - #endif -@@ -1462,24 +1469,33 @@ _set_cursor_location_internal (IBusIMContext *ibusimcontext) - #endif - } - --#if GTK_CHECK_VERSION (3, 93, 0) -- { - #if GTK_CHECK_VERSION (3, 98, 4) -+#ifdef GDK_WINDOWING_X11 -+ GdkDisplay *display = gtk_widget_get_display (ibusimcontext->client_window); -+ if (GDK_IS_X11_DISPLAY (display)) { -+ Display *xdisplay = gdk_x11_display_get_xdisplay (display); -+ Window root_window = gdk_x11_display_get_xrootwindow (display); - GtkNative *native = gtk_widget_get_native ( - ibusimcontext->client_window); -- GtkRoot *root = gtk_widget_get_root (ibusimcontext->client_window); -- double nx, ny; -- double px, py; -- gtk_native_get_surface_transform (native, &nx, &ny); -- px = (double)area.x + ibusimcontext->x - nx; -- py = (double)area.y + ibusimcontext->y - ny; -- gtk_widget_translate_coordinates (ibusimcontext->client_window, -- (GtkWidget *)root, -- px, py, -- &px, &py); -- area.x = (int)px; -- area.y = (int)py; --#else -+ GdkSurface *surface = gtk_native_get_surface (native); -+ /* The window is the toplevel window but not the inner text widget. -+ * Unfortunatelly GTK4 cannot get the coordinate of the text widget. -+ */ -+ Window window = gdk_x11_surface_get_xid (surface); -+ Window child; -+ int x, y; -+ XTranslateCoordinates (xdisplay, window, root_window, -+ 0, 0, &x, &y, &child); -+ XWindowAttributes xwa; -+ XGetWindowAttributes (xdisplay, window, &xwa); -+ area.x = x - xwa.x + area.x; -+ area.y = y - xwa.y + area.y; -+ area.width = xwa.width; -+ area.height = xwa.height; -+ } -+#endif -+#elif GTK_CHECK_VERSION (3, 93, 0) -+ { - GtkNative *native = gtk_widget_get_native ( - ibusimcontext->client_window); - GdkSurface *surface = gtk_native_get_surface (native); -@@ -1488,7 +1504,6 @@ _set_cursor_location_internal (IBusIMContext *ibusimcontext) - gdk_surface_get_position (surface, &root_x, &root_y); - area.x += root_x; - area.y += root_y; --#endif - } - #else - gdk_window_get_root_coords (ibusimcontext->client_window, --- -2.28.0 - -From ef4c5c7ef790ce1f80e94a5463e110ed4bae254e Mon Sep 17 00:00:00 2001 -From: fujiwarat -Date: Wed, 20 Jan 2021 17:26:47 +0900 -Subject: [PATCH] setup: Search engine name directly - -Currently users can search language names only in the language list -in ibus-setup. After a language is selected and open, engine names can -be searched. -Now engine names also can be searched in the language list. ---- - setup/enginedialog.py | 40 +++++++++++++++++++++------------------- - 1 file changed, 21 insertions(+), 19 deletions(-) - -diff --git a/setup/enginedialog.py b/setup/enginedialog.py -index 72deada8..e1c322bf 100644 ---- a/setup/enginedialog.py -+++ b/setup/enginedialog.py -@@ -4,7 +4,7 @@ - # ibus - The Input Bus - # - # Copyright (c) 2015 Peng Huang --# Copyright (c) 2015-2019 Takao Fujiwara -+# Copyright (c) 2015-2021 Takao Fujiwara - # Copyright (c) 2013-2015 Red Hat, Inc. - # - # This program is free software; you can redistribute it and/or -@@ -112,15 +112,20 @@ class EngineDialog(Gtk.Dialog): - return False - if self.__filter_word == None: - return True -+ if row.back: -+ return True - -- name = row.name.lower() -- untrans = row.untrans.lower() -- if self.__filter_word != None: -- word = self.__filter_word.lower() -- if name.startswith(word): -- return True -- if untrans.startswith(word): -- return True -+ word = self.__filter_word.lower() -+ if word in row.name.lower(): -+ return True -+ if word in row.untrans.lower(): -+ return True -+ if row.lang_info and row.name in self.__engines_for_lang: -+ for row_e in self.__engines_for_lang[row.name]: -+ if word in row_e.name.lower(): -+ return True -+ if word in row_e.untrans.lower(): -+ return True - return False - - -@@ -129,11 +134,9 @@ class EngineDialog(Gtk.Dialog): - self.__show_more() - return - if row.back: -- self.__filter_entry.set_text('') - self.__show_lang_rows() - return - if row.lang_info: -- self.__filter_entry.set_text('') - self.__show_engines_for_lang(row) - return - -@@ -232,6 +235,7 @@ class EngineDialog(Gtk.Dialog): - description = i18n.gettext_engine_description(engine) - row = self.__list_box_row_new(longname) - row.untrans = engine.get_longname() -+ row.rank = engine.get_rank() - row.set_tooltip_text(description) - row.engine = engine - widget = self.__padded_label_new(longname, -@@ -260,16 +264,13 @@ class EngineDialog(Gtk.Dialog): - lang = row.name - - def cmp_engine(a, b): -- if a.get_rank() == b.get_rank(): -- a_longname = i18n.gettext_engine_longname(a) -- b_longname = i18n.gettext_engine_longname(b) -- return locale.strcoll(a_longname, b_longname) -- return int(b.get_rank() - a.get_rank()) -+ if a.rank == b.rank: -+ return locale.strcoll(a.name, b.name) -+ return int(b.rank - a.rank) - - self.__engines_for_lang[lang].sort( - key = functools.cmp_to_key(cmp_engine)) -- for e in self.__engines_for_lang[lang]: -- row = self.__engine_row_new(e) -+ for row in self.__engines_for_lang[lang]: - self.__list.add(row) - - -@@ -329,7 +330,8 @@ class EngineDialog(Gtk.Dialog): - if l not in self.__engines_for_lang: - self.__engines_for_lang[l] = [] - i18n.init_textdomain(e.get_textdomain()) -- self.__engines_for_lang[l].append(e) -+ row = self.__engine_row_new(e) -+ self.__engines_for_lang[l].append(row) - - # Retrieve Untranslated language names. - untrans = IBus.get_untranslated_language_name(e.get_language()) --- -2.28.0 - diff --git a/ibus.spec b/ibus.spec index 6b559c8..89b843b 100644 --- a/ibus.spec +++ b/ibus.spec @@ -37,8 +37,8 @@ %global dbus_python_version 0.83.0 Name: ibus -Version: 1.5.23 -Release: 4%{?dist} +Version: 1.5.24 +Release: 1%{?dist} Summary: Intelligent Input Bus for Linux OS License: LGPLv2+ URL: https://github.com/ibus/%name/wiki @@ -46,7 +46,6 @@ Source0: https://github.com/ibus/%name/releases/download/%{version}/%{nam Source1: %{name}-xinput Source2: %{name}.conf.5 # Patch0: %%{name}-HEAD.patch -Patch0: %{name}-HEAD.patch # Under testing #1349148 #1385349 #1350291 #1406699 #1432252 #1601577 Patch1: %{name}-1385349-segv-bus-proxy.patch @@ -266,7 +265,6 @@ the functionality of the installed %{name} package. # cp client/gtk2/ibusimcontext.c client/gtk3/ibusimcontext.c || : # cp client/gtk2/ibusim.c client/gtk3/ibusim.c || : # cp client/gtk2/ibusimcontext.c client/gtk4/ibusimcontext.c || : -cp client/gtk2/ibusimcontext.c client/gtk3/ibusimcontext.c || : # prep test @@ -309,7 +307,6 @@ autoreconf -f -i -v --enable-introspection \ --enable-install-tests \ %{nil} -make -C ui/gtk3 maintainer-clean-generic %make_build @@ -490,6 +487,9 @@ dconf update || : %{_datadir}/installed-tests/ibus %changelog +* Mon Feb 22 2021 Takao Fujiwara - 1.5.24-1 +- Bump to 1.5.24 + * Tue Jan 26 2021 Fedora Release Engineering - 1.5.23-4 - Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild diff --git a/sources b/sources index ac65da7..ff97284 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (ibus-1.5.23.tar.gz) = 4ea66d0a7203d665fb5c90e59ddf294614feeafc4f06b10e35989671a9bf39d5977e9061b9be224cd5a9439ac2f697a4326ff221ae868f5ebed46cbb09e9a205 +SHA512 (ibus-1.5.24.tar.gz) = 25f34a51a5c85352e61699ca36bf7ddb9b486b28d71e15ce3a52b78bc9db2f8cb558049e0652fdc5431215a5f826fcb5a7d5e44f0de9a2ff746aaf60672e2f22