From 0829fa055cbb2f3b69cfe8350b7c9a923c84c04f Mon Sep 17 00:00:00 2001 From: Takao Fujiwara Date: Mar 14 2022 05:40:28 +0000 Subject: Delete upstreamed ibus-HEAD.patch --- diff --git a/ibus-HEAD.patch b/ibus-HEAD.patch deleted file mode 100644 index 36d5f6d..0000000 --- a/ibus-HEAD.patch +++ /dev/null @@ -1,2676 +0,0 @@ -From 571e3b6e4f386abf12d3db70b9468e092c8d72bd Mon Sep 17 00:00:00 2001 -From: Alynx Zhou -Date: Tue, 24 Aug 2021 10:12:52 +0800 -Subject: [PATCH] client/gtk2/ibusimcontext: Fix wrong cursor location in gtk3 - apps - -If you apply this patch in your tarball, please also apply this to -client/gtk3/ibusimcontext.c besides client/gtk2/ibusimcontext.c . - -BUG=https://github.com/ibus/ibus/issues/2337 ---- - client/gtk2/ibusimcontext.c | 5 ++++- - 1 file changed, 4 insertions(+), 1 deletion(-) - -diff --git a/client/gtk2/ibusimcontext.c b/client/gtk2/ibusimcontext.c -index da9a402f..b1ccede9 100644 ---- a/client/gtk2/ibusimcontext.c -+++ b/client/gtk2/ibusimcontext.c -@@ -1497,7 +1497,10 @@ _set_cursor_location_internal (IBusIMContext *ibusimcontext) - - #if GTK_CHECK_VERSION (3, 98, 4) - #elif GTK_CHECK_VERSION (2, 91, 0) -- area.y += gdk_window_get_height (ibusimcontext->client_window); -+ if (area.x == -1 && area.y == -1 && area.width == 0 && area.height == 0) { -+ area.x = 0; -+ area.y += gdk_window_get_height (ibusimcontext->client_window); -+ } - #else - if (area.x == -1 && area.y == -1 && area.width == 0 && area.height == 0) { - gint w, h; --- -2.31.1 - -From 5487a6baa4b22605ba8197ca1a0fa43c91d57786 Mon Sep 17 00:00:00 2001 -From: fujiwarat -Date: Mon, 6 Sep 2021 20:23:59 +0900 -Subject: [PATCH] client/gtk2/ibusimcontext: Implement clear preedit for GTK4 - -IBus IM module uses synchornized key processes for GTK4 and the timing -of the GTK reset siginal may work with focus-in/out between windows. -(I don't test GTK4 firefox and terminal yet and the verification is not -completed.) -So ibus_im_context_clear_preedit_text() is now called with the GTK4 reset -siginal. -ibus_im_context_clear_preedit_text() works with ibus-setup-anthy -> -"Conversion" tab -> "Behavior on Focus Out" pull down menu. - -BUG=https://github.com/ibus/ibus/issues/2334 ---- - client/gtk2/ibusimcontext.c | 9 ++++++--- - 1 file changed, 6 insertions(+), 3 deletions(-) - -diff --git a/client/gtk2/ibusimcontext.c b/client/gtk2/ibusimcontext.c -index b1ccede9..e12be45d 100644 ---- a/client/gtk2/ibusimcontext.c -+++ b/client/gtk2/ibusimcontext.c -@@ -1270,6 +1270,8 @@ ibus_im_context_reset (GtkIMContext *context) - * IBus uses button-press-event instead until GTK is fixed. - * https://gitlab.gnome.org/GNOME/gtk/issues/1534 - */ -+ if (_use_sync_mode) -+ ibus_im_context_clear_preedit_text (ibusimcontext); - ibus_input_context_reset (ibusimcontext->ibuscontext); - } - gtk_im_context_reset (ibusimcontext->slave); -@@ -1383,7 +1385,7 @@ ibus_im_context_set_client_window (GtkIMContext *context, - - if (ibusimcontext->client_window) { - #if !GTK_CHECK_VERSION (3, 98, 4) -- if (ibusimcontext->use_button_press_event) -+ if (ibusimcontext->use_button_press_event && !_use_sync_mode) - _connect_button_press_event (ibusimcontext, FALSE); - #endif - g_object_unref (ibusimcontext->client_window); -@@ -1393,7 +1395,7 @@ ibus_im_context_set_client_window (GtkIMContext *context, - if (client != NULL) { - ibusimcontext->client_window = g_object_ref (client); - #if !GTK_CHECK_VERSION (3, 98, 4) -- if (!ibusimcontext->use_button_press_event) -+ if (!ibusimcontext->use_button_press_event && !_use_sync_mode) - _connect_button_press_event (ibusimcontext, TRUE); - #endif - } -@@ -1994,7 +1996,8 @@ _ibus_context_update_preedit_text_cb (IBusInputContext *ibuscontext, - - #if !GTK_CHECK_VERSION (3, 98, 4) - if (!ibusimcontext->use_button_press_event && -- mode == IBUS_ENGINE_PREEDIT_COMMIT) { -+ mode == IBUS_ENGINE_PREEDIT_COMMIT && -+ !_use_sync_mode) { - if (ibusimcontext->client_window) { - _connect_button_press_event (ibusimcontext, TRUE); - } --- -2.28.0 - -From 4957d1468db4fc5ed30c3ae1f2afac9e51b329d6 Mon Sep 17 00:00:00 2001 -From: fujiwarat -Date: Mon, 6 Sep 2021 20:25:52 +0900 -Subject: [PATCH] client/gtk2/ibusimcontext: Calculate keycode from keysym in - GTK3 forward-key-event - -IBus GTK3 mode also calculates keycode from keysym if keycode == 0 -with forward-key-event signal to follow GTK4. ---- - client/gtk2/ibusimcontext.c | 22 ++++++++++++++++++---- - 1 file changed, 18 insertions(+), 4 deletions(-) - -diff --git a/client/gtk2/ibusimcontext.c b/client/gtk2/ibusimcontext.c -index e12be45d..b1424e87 100644 ---- a/client/gtk2/ibusimcontext.c -+++ b/client/gtk2/ibusimcontext.c -@@ -1939,13 +1939,16 @@ _ibus_context_forward_key_event_cb (IBusInputContext *ibuscontext, - 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); -+ 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)) -+ if (gdk_display_map_keyval (display, keyval, &keys, &n_keys)) { -+ keycode = keys->keycode; -+ group = keys->group; -+ } else { - 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), -@@ -1957,6 +1960,17 @@ _ibus_context_forward_key_event_cb (IBusInputContext *ibuscontext, - (GdkModifierType)state, - group); - #else -+ if (keycode == 0 && ibusimcontext->client_window) { -+ GdkDisplay *display = -+ gdk_window_get_display (ibusimcontext->client_window); -+ GdkKeymap *keymap = gdk_keymap_get_for_display (display); -+ GdkKeymapKey *keys = NULL; -+ gint n_keys = 0; -+ if (gdk_keymap_get_entries_for_keyval (keymap, keyval, &keys, &n_keys)) -+ keycode = keys->keycode; -+ else -+ g_warning ("Failed to parse keycode from keyval %x", keyval); -+ } - GdkEventKey *event = _create_gdk_event (ibusimcontext, keyval, keycode, state); - gdk_event_put ((GdkEvent *)event); - gdk_event_free ((GdkEvent *)event); --- -2.28.0 - -From fbea5441fc53ae1d5533bed1ee53009141cf905a Mon Sep 17 00:00:00 2001 -From: fujiwarat -Date: Fri, 10 Sep 2021 00:09:26 +0900 -Subject: [PATCH] Fix build errors in Ubuntu focal - -- Ubuntu focal uses glib 2.64.6 which does not include errno.h - so config.h includes errno.h as the workaround. -- make autogen.sh not to delete dist files in Travis -- Call $(PYTHON) for gensimple.py for Ubuntu python3 -- Add a code review in src/ibuscomposetable.c - -BUG=https://github.com/ibus/ibus/pull/2348 ---- - autogen.sh | 2 +- - configure.ac | 9 +++++++++ - engine/Makefile.am | 2 +- - src/ibuscomposetable.c | 4 ++++ - src/ibusregistry.c | 4 ++++ - src/ibusshare.c | 3 +++ - 6 files changed, 26 insertions(+), 2 deletions(-) - -diff --git a/autogen.sh b/autogen.sh -index 693a2740..ea633e06 100755 ---- a/autogen.sh -+++ b/autogen.sh -@@ -53,4 +53,4 @@ ACLOCAL_FLAGS="$ACLOCAL_FLAGS -I m4" REQUIRED_AUTOMAKE_VERSION=1.11 CFLAGS="$CFL - echo "rm $f" - rm $f - done --} -+} || : -diff --git a/configure.ac b/configure.ac -index 29f8b3db..ce096ad3 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -162,6 +162,15 @@ PKG_CHECK_MODULES(GIO2, [ - PKG_CHECK_MODULES(GTHREAD2, [ - gthread-2.0 >= glib_required_version - ]) -+PKG_CHECK_EXISTS( -+ [glib-2.0 >= 2.65.0], -+ [AC_DEFINE(GLIB2_EMBED_ERRNO_H, TRUE, [glib2 include errno.h])] -+) -+AH_BOTTOM([ -+#ifndef GLIB2_EMBED_ERRNO_H -+# include -+#endif -+]) - - # --disable-tests option. - AC_ARG_ENABLE(tests, -diff --git a/engine/Makefile.am b/engine/Makefile.am -index 84bc7f6c..03867f52 100644 ---- a/engine/Makefile.am -+++ b/engine/Makefile.am -@@ -99,7 +99,7 @@ simple.xml: simple.xml.in - mv $@.tmp $@ - - simple.xml.in: -- $(srcdir)/gensimple.py \ -+ $(PYTHON) $(srcdir)/gensimple.py \ - --input=$(XKBCONFIG_BASE)/rules/evdev.xml \ - --output=$@ \ - --version=$(VERSION).`date '+%Y%m%d'` \ -diff --git a/src/ibuscomposetable.c b/src/ibuscomposetable.c -index d4184d30..b76464bc 100644 ---- a/src/ibuscomposetable.c -+++ b/src/ibuscomposetable.c -@@ -18,6 +18,9 @@ - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 - * USA - */ -+#ifdef HAVE_CONFIG_H -+#include -+#endif - - #include - #include -@@ -1606,6 +1609,7 @@ ibus_compose_table_compact_check (const IBusComposeTableCompactEx - row_stride = i + 1; - - if (seq_index[i + 1] - seq_index[i] > 0) { -+ g_assert (row_stride); - seq = bsearch (compose_buffer + 1, - table->data + seq_index[i], - (seq_index[i + 1] - seq_index[i]) / row_stride, -diff --git a/src/ibusregistry.c b/src/ibusregistry.c -index 23c5ca1b..962afb20 100644 ---- a/src/ibusregistry.c -+++ b/src/ibusregistry.c -@@ -20,6 +20,10 @@ - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 - * USA - */ -+#ifdef HAVE_CONFIG_H -+#include -+#endif -+ - #include - #include - #include -diff --git a/src/ibusshare.c b/src/ibusshare.c -index 8974511a..0c0bda10 100644 ---- a/src/ibusshare.c -+++ b/src/ibusshare.c -@@ -20,6 +20,9 @@ - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 - * USA - */ -+#ifdef HAVE_CONFIG_H -+#include -+#endif - - #include "ibusshare.h" - #include --- -2.33.1 - -From 943d37444d9cc0881cb5fff87bdd4b9efd5abdb4 Mon Sep 17 00:00:00 2001 -From: fujiwarat -Date: Mon, 9 Aug 2021 12:49:15 +0900 -Subject: [PATCH] client/gtk2/ibusimcontext: Fix a key event loop with - forwarding keys. - -_ibus_context_forward_key_event_cb() caused a key event loop in -_key_snooper_cb() with key release events. ---- - client/gtk2/ibusimcontext.c | 11 +++++++++-- - 1 file changed, 9 insertions(+), 2 deletions(-) - -diff --git a/client/gtk2/ibusimcontext.c b/client/gtk2/ibusimcontext.c -index da9a402f..e66125df 100644 ---- a/client/gtk2/ibusimcontext.c -+++ b/client/gtk2/ibusimcontext.c -@@ -366,6 +366,10 @@ ibus_im_context_commit_event (IBusIMContext *ibusimcontext, - g_signal_emit (ibusimcontext, _signal_commit_id, 0, text->text); - g_object_unref (text); - _request_surrounding_text (ibusimcontext); -+#if !GTK_CHECK_VERSION (3, 98, 4) -+ /* Avoid a loop with _ibus_context_forward_key_event_cb() */ -+ event->state |= IBUS_HANDLED_MASK; -+#endif - return TRUE; - } - return FALSE; -@@ -643,12 +647,15 @@ _key_snooper_cb (GtkWidget *widget, - - } while (0); - -- if (ibusimcontext != NULL) { -+ if (ibusimcontext != NULL && event->type == GDK_KEY_PRESS) { - /* "retrieve-surrounding" signal sometimes calls unref by - * gtk_im_multicontext_get_slave() because priv->context_id is not - * the latest than global_context_id in GtkIMMulticontext. - * Since _focus_im_context is gotten by the focus_in event, - * it would be good to call ref here. -+ * -+ * Most release key events would be redundant from -+ * _ibus_context_forward_key_event_cb (). - */ - g_object_ref (ibusimcontext); - _request_surrounding_text (ibusimcontext); -@@ -657,7 +664,7 @@ _key_snooper_cb (GtkWidget *widget, - - retval = _process_key_event (ibuscontext, event, ibusimcontext); - -- if (ibusimcontext != NULL) { -+ if (ibusimcontext != NULL && event->type == GDK_KEY_PRESS) { - /* unref ibusimcontext could call ibus_im_context_finalize here - * because "retrieve-surrounding" signal could call unref. - */ --- -2.28.0 - -From 179ebddf4dbde1cef1cea2df4e659cf4940d1a30 Mon Sep 17 00:00:00 2001 -From: fujiwarat -Date: Fri, 27 Aug 2021 20:05:02 +0900 -Subject: [PATCH] src/tests: Add --screendump option in - ibus-desktop-testing-runner - -The screendump is useful in CI to if check gnome-shell-extension-no-overview -works. -Also add ibus-desktop-testing-autostart to get the debug info in CI. -You can copy ibus-desktop-testing.desktop to $HOME/.config/autostart -if CI fails. ---- - src/tests/Makefile.am | 11 +++++ - src/tests/ibus-desktop-testing-autostart | 55 +++++++++++++++++++++++ - src/tests/ibus-desktop-testing-runner.in | 20 +++++++-- - src/tests/ibus-desktop-testing.desktop.in | 11 +++++ - 4 files changed, 93 insertions(+), 4 deletions(-) - create mode 100755 src/tests/ibus-desktop-testing-autostart - create mode 100644 src/tests/ibus-desktop-testing.desktop.in - -diff --git a/src/tests/Makefile.am b/src/tests/Makefile.am -index 13c06eb4..7d00f236 100644 ---- a/src/tests/Makefile.am -+++ b/src/tests/Makefile.am -@@ -96,6 +96,7 @@ test_sourcesdir = $(datadir)/installed-tests/ibus - CLEANFILES += \ - $(test_metas) \ - ibus-desktop-testing-runner \ -+ org.freedesktop.IBus.Desktop.Testing.desktop \ - $(NULL) - - test_execs_PROGRAMS = $(TESTS) -@@ -106,6 +107,14 @@ CLEANFILES += \ - $(NULL) - endif - test_execsdir = $(libexecdir)/installed-tests/ibus -+libexec_SCRIPTS = ibus-desktop-testing-autostart -+ -+test_frame_DATA = org.freedesktop.IBus.Desktop.Testing.desktop -+test_framedir = $(pkgdatadir)/tests -+org.freedesktop.IBus.Desktop.Testing.desktop: ibus-desktop-testing.desktop.in -+ $(AM_V_GEN) sed -e "s|\@libexecdir\@|$(libexecdir)|g" \ -+ $< > $@.tmp && \ -+ mv $@.tmp $@ - endif - - $(test_metas): $(test_metas_in) $(test_programs) -@@ -133,6 +142,8 @@ EXTRA_DIST = \ - ibus-compose.emoji \ - ibus-compose.env \ - ibus-compose-locales.in \ -+ ibus-desktop-testing.desktop.in \ -+ ibus-desktop-testing-autostart \ - ibus-desktop-testing-runner.in \ - $(NULL) - -diff --git a/src/tests/ibus-desktop-testing-autostart b/src/tests/ibus-desktop-testing-autostart -new file mode 100755 -index 00000000..da22b64e ---- /dev/null -+++ b/src/tests/ibus-desktop-testing-autostart -@@ -0,0 +1,55 @@ -+#!/bin/sh -+# -*- mode: C; c-basic-offset: 4; indent-tabs-mode: nil; -*- -+# vim:set noet ts=4: -+# -+# ibus - The Input Bus -+# -+# Copyright (c) 2021 Takao Fujiwara -+# Copyright (c) 2021 Red Hat, Inc. -+# -+# This program is free software; you can redistribute it and/or modify -+# it under the terms of the GNU General Public License as published by -+# the Free Software Foundation; either version 2 of the License, or -+# (at your option) any later version. -+# -+# This program 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 General Public License for more details. -+# -+# You should have received a copy of the GNU General Public License along -+# with this program; if not, write to the Free Software Foundation, Inc., -+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -+ -+TEST_LOG= -+COMMANDS=' -+id -+echo $DISPLAY -+pwd -+pstree -asp $$ -+gsettings list-recursively org.gnome.shell -+rpm -q gnome-shell-extension-no-overview gnome-shell gnome-session -+' -+ -+if [ $# -gt 0 ] ; then -+ TEST_LOG=$1 -+fi -+ -+run_test() -+{ -+while read cmd ; do -+ if [ x"$cmd" = x ] ; then -+ continue -+ fi -+ echo "# $cmd" -+ eval "$cmd" -+done << EOF_COMMANDS -+`echo "$COMMANDS"` -+EOF_COMMANDS -+} -+ -+if [ x"$TEST_LOG" = x ] ; then -+ run_test -+else -+ run_test 2>>$TEST_LOG 1>>$TEST_LOG -+fi -diff --git a/src/tests/ibus-desktop-testing-runner.in b/src/tests/ibus-desktop-testing-runner.in -index c1016703..48528326 100755 ---- a/src/tests/ibus-desktop-testing-runner.in -+++ b/src/tests/ibus-desktop-testing-runner.in -@@ -36,13 +36,14 @@ - - - PROGNAME=`basename $0` --VERSION=0.2 -+VERSION=0.3 - DISPLAY=:99.0 - BUILDDIR="." - SRCDIR="." - TEST_LOG="test-suite.log" - TEST_LOG_STDOUT=0 - RESULT_LOG="" -+SCREEN_LOG="" - HAVE_GRAPHICS=1 - DESKTOP_COMMAND="dbus-launch --exit-with-session gnome-session" - PID_XORG=0 -@@ -90,14 +91,15 @@ usage() - "-T, --timeout=TIMEOUT Set timeout (default TIMEOUT is 300 sec).\n" \ - "-o, --output=OUTPUT_FILE OUtput the log to OUTPUT_FILE\n" \ - "-O, --result=RESULT_FILE OUtput the result to RESULT_FILE\n" \ -+"-S, --screendump=DUMP_FILE OUtput the screen to DUMP_FILE ('STDOUT' can be stdout)\n" \ - "" - } - - parse_args() - { - # This is GNU getopt. "sudo port getopt" in BSD? -- ARGS=`getopt -o hvb:s:cd:t:r:T:o:O: --long \ -- help,version,builddir:,srcdir:,no-graphics,desktop:,tests:,runner:,timeout:,output:,result:\ -+ ARGS=`getopt -o hvb:s:cd:t:r:T:o:O:S: --long \ -+ help,version,builddir:,srcdir:,no-graphics,desktop:,tests:,runner:,timeout:,output:,result:,screendump:\ - -- "$@"`; - eval set -- "$ARGS" - while [ 1 ] ; do -@@ -113,6 +115,7 @@ parse_args() - -T | --timeout ) TIMEOUT="$2"; shift 2;; - -o | --output ) TEST_LOG="$2"; shift 2;; - -O | --result ) RESULT_LOG="$2"; shift 2;; -+ -S | --screendump ) SCREEN_LOG="$2"; shift 2;; - -- ) shift; break;; - * ) usage; exit 1;; - esac -@@ -259,6 +262,7 @@ run_desktop() - { - echo "$DESKTOP_COMMAND" | grep gnome-session > /dev/null - HAS_GNOME=$? -+ export DISPLAY=$DISPLAY - if test $HAVE_GRAPHICS -eq 1 ; then - /usr/libexec/Xorg.wrap -noreset +extension GLX +extension RANDR +extension RENDER -logfile ./xorg.log -config ./xorg.conf -configdir . $DISPLAY & - else -@@ -266,7 +270,6 @@ run_desktop() - fi - PID_XORG=$! - sleep 1 -- export DISPLAY=$DISPLAY - # init_gnome need to be called with $DISPLAY before gnome-session is called - if [ $HAS_GNOME -eq 0 ] ; then - init_gnome -@@ -454,6 +457,15 @@ main() - init_desktop - run_dbus_daemon 2>>$TEST_LOG 1>>$TEST_LOG - run_desktop 2>>$TEST_LOG 1>>$TEST_LOG -+ if [ x"$SCREEN_LOG" != x ] ; then -+ SCREEN_PNG="`date '+%Y%m%d%H%M%S'`.png" -+ gnome-screenshot --file=$SCREEN_PNG -+ if [ x"$SCREEN_LOG" = xSTDOUT ] ; then -+ base64 $SCREEN_PNG -+ else -+ base64 $SCREEN_PNG > $SCREEN_LOG -+ fi -+ fi - run_test_suite - finit - } -diff --git a/src/tests/ibus-desktop-testing.desktop.in b/src/tests/ibus-desktop-testing.desktop.in -new file mode 100644 -index 00000000..fa0c9b40 ---- /dev/null -+++ b/src/tests/ibus-desktop-testing.desktop.in -@@ -0,0 +1,11 @@ -+[Desktop Entry] -+Name=IBus Desktop Testing Runner -+GenericName=Input Method Desktop Testing Runner -+Comment=Test plugin for IBus Desktop Testing -+Exec=@ibexecdir@/ibus-desktop-testing-autostart /var/tmp/ibus-ci-autostart.log -+Terminal=false -+Type=Application -+Encoding=UTF-8 -+Icon=ibus -+Categories=System -+Keywords=im; --- -2.28.0 - -From acc5570511698c7b5cc037eb81be2c4be52a824f Mon Sep 17 00:00:00 2001 -From: fujiwarat -Date: Fri, 29 Oct 2021 12:56:49 +0900 -Subject: [PATCH] ui/gtk3: Erase Emojier preedit/lookup popup between - applications - -It would be better to erase Emojier popup window when users change -the input focus between applications. But it hasn't been implemented -because the focus-out/in events also happen when the Emojier popup window -is launching or rebuilding to the category list in GNOME Wayland. -The focus-out/in events do not happen in Xorg desktops with the rebuilding -GUI because GTK popup window causes focus-in/out evnets in Wayland. - -Now I'm convinced with several issues and added a little complicated logic -to erase Emojier popup window with the focus changes between input contexts -to handle focus-in/out events in Wayland. - -BUG=rhbz#1942970 ---- - ui/gtk3/emojier.vala | 69 ++++++++++++++++++++++++++++++++++++--- - ui/gtk3/emojierapp.vala | 12 +++++-- - ui/gtk3/panelbinding.vala | 21 ++++++++++-- - 3 files changed, 94 insertions(+), 8 deletions(-) - -diff --git a/ui/gtk3/emojier.vala b/ui/gtk3/emojier.vala -index 9e6e9263..69fb8abe 100644 ---- a/ui/gtk3/emojier.vala -+++ b/ui/gtk3/emojier.vala -@@ -2,7 +2,7 @@ - * - * ibus - The Input Bus - * -- * Copyright (c) 2017-2019 Takao Fujiwara -+ * Copyright (c) 2017-2021 Takao Fujiwara - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public -@@ -227,6 +227,8 @@ public class IBusEmojier : Gtk.ApplicationWindow { - BACKWARD, - } - -+ public bool is_wayland { get; set; } -+ - public const uint BUTTON_CLOSE_BUTTON = 1000; - - private const uint EMOJI_GRID_PAGE = 10; -@@ -317,15 +319,18 @@ public class IBusEmojier : Gtk.ApplicationWindow { - private Gdk.Rectangle m_cursor_location; - private bool m_is_up_side_down = false; - private uint m_redraw_window_id; -+ private bool m_rebuilding_gui = false; -+ private uint m_rebuilding_gui_timeout_id; - - public signal void candidate_clicked(uint index, uint button, uint state); - public signal void commit_text(string text); - public signal void cancel(); - -- public IBusEmojier() { -+ public IBusEmojier(bool is_wayland) { - GLib.Object( - type : Gtk.WindowType.POPUP - ); -+ this.is_wayland = is_wayland; - - // GLib.ActionEntry accepts const variables only. - var action = new GLib.SimpleAction.stateful( -@@ -1002,6 +1007,7 @@ public class IBusEmojier : Gtk.ApplicationWindow { - button.button_press_event.connect((w, e) => { - m_category_active_index = -1; - m_show_unicode = false; -+ start_rebuild_gui(false); - hide_candidate_panel(); - show_all(); - return true; -@@ -1458,6 +1464,7 @@ public class IBusEmojier : Gtk.ApplicationWindow { - show_emoji_for_category(m_backward); - show_candidate_panel(); - } else { -+ start_rebuild_gui(false); - hide_candidate_panel(); - show_all(); - } -@@ -1778,6 +1785,34 @@ public class IBusEmojier : Gtk.ApplicationWindow { - } - - -+ private void start_rebuild_gui(bool initial_launching) { -+ if (!this.is_wayland) -+ return; -+ if (!initial_launching && !base.get_visible()) -+ return; -+ if (initial_launching && base.get_visible()) -+ return; -+ if (m_rebuilding_gui_timeout_id != 0) { -+ GLib.Source.remove(m_rebuilding_gui_timeout_id); -+ m_rebuilding_gui_timeout_id = 0; -+ } -+ -+ m_rebuilding_gui = true; -+ m_rebuilding_gui_timeout_id = -+ GLib.Timeout.add_seconds(10, () => { -+ if (!m_rebuilding_gui) { -+ m_rebuilding_gui_timeout_id = 0; -+ return false; -+ } -+ warning("Rebuilding GUI is time out."); -+ m_rebuilding_gui = false; -+ m_rebuilding_gui_timeout_id = 0; -+ return false; -+ }, -+ GLib.Priority.DEFAULT_IDLE); -+ } -+ -+ - public bool has_variants(uint index, - bool need_commit_signal) { - if (index >= m_lookup_table.get_number_of_candidates()) -@@ -1880,12 +1915,17 @@ public class IBusEmojier : Gtk.ApplicationWindow { - m_show_unicode = false; - m_category_active_index = -1; - } -+ start_rebuild_gui(false); - hide_candidate_panel(); - return true; - } else if (m_backward_index >= 0 && m_backward != null) { -+ // Escape on Emoji variants window does not call focus-out events -+ // because hide() is not called here so start_rebuild_gui() -+ // is not called. - show_emoji_for_category(m_backward); - return true; - } else if (m_candidate_panel_is_visible && m_backward != null) { -+ start_rebuild_gui(false); - hide_candidate_panel(); - return true; - } -@@ -2218,7 +2258,7 @@ public class IBusEmojier : Gtk.ApplicationWindow { - - /* Some window managers, e.g. MATE, GNOME, Plasma desktops, - * does not give the keyboard focus when Emojier is lauched -- * twice with Ctrl-Shift-e via XIEvent, if present_with_time() -+ * twice with Ctrl-period via XIEvent, if present_with_time() - * is not applied. - * But XFCE4 desktop does not effect this bug. - * Seems this is caused by the window manager's focus stealing -@@ -2265,8 +2305,10 @@ public class IBusEmojier : Gtk.ApplicationWindow { - #endif - - -- /* override virtual functions */ -+ // override virtual functions - public override void show_all() { -+ // Ctrl-period, space keys causes focus-out/in events in GNOME Wayland. -+ start_rebuild_gui(true); - base.show_all(); - if (m_candidate_panel_mode) - show_candidate_panel(); -@@ -2416,6 +2458,17 @@ public class IBusEmojier : Gtk.ApplicationWindow { - } - - -+ public override bool focus_in_event(Gdk.EventFocus event) { -+ m_rebuilding_gui = false; -+ return base.focus_in_event(event); -+ } -+ -+ -+ public override bool focus_out_event(Gdk.EventFocus event) { -+ return base.focus_out_event(event); -+ } -+ -+ - public bool is_running() { - return m_is_running; - } -@@ -2511,6 +2564,14 @@ public class IBusEmojier : Gtk.ApplicationWindow { - } - - -+ public bool is_rebuilding_gui() { -+ /* The candidate window and preedit text should not be closed -+ * when the GUI is rebuilding. -+ */ -+ return m_rebuilding_gui; -+ } -+ -+ - public static bool has_loaded_emoji_dict() { - if (m_emoji_to_data_dict == null) - return false; -diff --git a/ui/gtk3/emojierapp.vala b/ui/gtk3/emojierapp.vala -index 783c611c..812356f0 100644 ---- a/ui/gtk3/emojierapp.vala -+++ b/ui/gtk3/emojierapp.vala -@@ -3,7 +3,7 @@ - * ibus - The Input Bus - * - * Copyright (c) 2017 Peng Wu -- * Copyright (c) 2017-2019 Takao Fujiwara -+ * Copyright (c) 2017-2021 Takao Fujiwara - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public -@@ -208,7 +208,15 @@ public class EmojiApplication : Gtk.Application { - IBusEmojier.load_unicode_dict(); - - if (m_emojier == null) { -- m_emojier = new IBusEmojier(); -+ bool is_wayland = false; -+#if USE_GDK_WAYLAND -+ Type instance_type = Gdk.Display.get_default().get_type(); -+ Type wayland_type = typeof(GdkWayland.Display); -+ is_wayland = instance_type.is_a(wayland_type); -+#else -+ warning("Checking Wayland is disabled"); -+#endif -+ m_emojier = new IBusEmojier(is_wayland); - // For title handling in gnome-shell - add_window(m_emojier); - m_emojier.candidate_clicked.connect((i, b, s) => { -diff --git a/ui/gtk3/panelbinding.vala b/ui/gtk3/panelbinding.vala -index 861255b1..e63d93f2 100644 ---- a/ui/gtk3/panelbinding.vala -+++ b/ui/gtk3/panelbinding.vala -@@ -3,7 +3,7 @@ - * ibus - The Input Bus - * - * Copyright(c) 2018 Peng Huang -- * Copyright(c) 2018-2020 Takao Fujwiara -+ * Copyright(c) 2018-2021 Takao Fujwiara - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public -@@ -799,6 +799,23 @@ class PanelBinding : IBus.PanelService { - - public override void focus_out(string input_context_path) { - m_current_context_path = ""; -+ /* Close emoji typing when the focus out happens but it's not a -+ * rebuilding GUI. -+ * Emojier rebuilding GUI happens when Escape key is pressed on -+ * Emojier candidate list and the rebuilding also causes focus-out/in -+ * events in GNOME Wayland but not Xorg desktops. -+ * The rebuilding GUI can be checked with m_emojier.is_rebuilding_gui() -+ * in Wayland. -+ * m_emojier.is_rebuilding_gui() always returns false in Xorg desktops -+ * since focus-out/in events does not happen. -+ */ -+ if (m_emojier != null && !m_emojier.is_rebuilding_gui()) { -+ m_preedit.reset(); -+ m_emojier.set_annotation(""); -+ if (m_wayland_lookup_table_is_visible) -+ hide_wayland_lookup_table(); -+ key_press_escape(); -+ } - } - - -@@ -822,7 +839,7 @@ class PanelBinding : IBus.PanelService { - m_loaded_unicode = true; - } - if (m_emojier == null) { -- m_emojier = new IBusEmojier(); -+ m_emojier = new IBusEmojier(m_is_wayland); - // For title handling in gnome-shell - m_application.add_window(m_emojier); - m_emojier.candidate_clicked.connect((i, b, s) => { --- -2.28.0 - -From 28acfd433b3df1673b7c7177915c027ce48c061e Mon Sep 17 00:00:00 2001 -From: fujiwarat -Date: Fri, 5 Nov 2021 07:22:34 +0900 -Subject: [PATCH] ui/gtk2: Deprecate gettext.bind_textdomain_codeset() - since Python 3.8 - -setup/i18n.py is a symlink of ui/gtk2/i18n.py -env PYTHONWARNINGS='d' ibus-setup - -BUG=https://github.com/ibus/ibus/issues/2276 ---- - setup/i18n.py | 8 +++++++- - 1 file changed, 7 insertions(+), 1 deletion(-) - -diff --git a/setup/i18n.py b/setup/i18n.py -index 976d1aee..af14efc6 100644 ---- a/setup/i18n.py -+++ b/setup/i18n.py -@@ -3,7 +3,9 @@ - # ibus - The Input Bus - # - # Copyright(c) 2007-2015 Peng Huang -+# Copyright(c) 2012-2021 Takao Fujiwara - # Copyright(c) 2007-2015 Google, Inc. -+# Copyright(c) 2012-2021 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 -@@ -23,12 +25,14 @@ - import locale - import gettext - import os -+import sys - - DOMAINNAME = "ibus10" - - _ = lambda a: gettext.dgettext(DOMAINNAME, a) - N_ = lambda a: a - -+PY3K = sys.version_info >= (3, 0) - LOCALEDIR = os.getenv("IBUS_LOCALEDIR") - - def init_textdomain(domainname): -@@ -42,7 +46,9 @@ def init_textdomain(domainname): - except AttributeError: - pass - gettext.bindtextdomain(domainname, LOCALEDIR) -- gettext.bind_textdomain_codeset(domainname, 'UTF-8') -+ # https://docs.python.org/3/library/gettext.html#gettext.lgettext -+ if not PY3K: -+ gettext.bind_textdomain_codeset(domainname, 'UTF-8') - - def gettext_engine_longname(engine): - name = engine.get_name() --- -2.33.1 - -From cfcc6f194cfc95ab0cf1b3b719d77321c249a83b Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Na=C3=AFm=20Favier?= -Date: Tue, 16 Nov 2021 00:33:37 +0100 -Subject: [PATCH] src/ibuscomposetable: invalidate cache based on symlink - mtime too - -When the compose file is a symbolic link, take the link itself's -modification time into account (in addition to its target's) in -determining whether to invalidate the compose cache. - -This is useful e.g. on NixOS systems where the compose file might point -to a store path with an irrelevant modification time, and we want the -cache to expire when the symlink itself changes. - -BUG=https://github.com/ibus/ibus/pull/2362 ---- - src/ibuscomposetable.c | 8 ++++++-- - 1 file changed, 6 insertions(+), 2 deletions(-) - -diff --git a/src/ibuscomposetable.c b/src/ibuscomposetable.c -index b76464bc..250e0139 100644 ---- a/src/ibuscomposetable.c -+++ b/src/ibuscomposetable.c -@@ -1040,10 +1040,14 @@ ibus_compose_table_load_cache (const gchar *compose_file) - if (!g_file_test (path, G_FILE_TEST_EXISTS)) - break; - -- if (g_stat (compose_file, &original_buf)) -- break; - if (g_stat (path, &cache_buf)) - break; -+ if (g_lstat (compose_file, &original_buf)) -+ break; -+ if (original_buf.st_mtime > cache_buf.st_mtime) -+ break; -+ if (g_stat (compose_file, &original_buf)) -+ break; - if (original_buf.st_mtime > cache_buf.st_mtime) - break; - if (!g_file_get_contents (path, &contents, &length, &error)) { --- -2.33.1 - -From 2bc47f09832073c87ccdf1060bd93ff95878685a Mon Sep 17 00:00:00 2001 -From: fujiwarat -Date: Thu, 2 Dec 2021 23:52:36 +0900 -Subject: [PATCH] autogen: Delete gnome-autogen dependency - -You may like to call ./autogen.sh --enable-gtk-doc with your custom -configure options. -Also set SAVE_DIST_FILE=1 by default ---- - autogen.sh | 96 +++++++++++++++++++++++++++++++++---------------- - src/Makefile.am | 18 ++++++---- - 3 files changed, 80 insertions(+), 41 deletions(-) - -diff --git a/autogen.sh b/autogen.sh -index ea633e06..1acbf705 100755 ---- a/autogen.sh -+++ b/autogen.sh -@@ -1,22 +1,47 @@ - #!/bin/sh - # Run this to generate all the initial makefiles, etc. - --srcdir=`dirname $0` --test -z "$srcdir" && srcdir=. -- --PKG_NAME="ibus" --DIST_FILES=" --engine/simple.xml.in --src/ibusemojigen.h --src/ibusunicodegen.h --" -+: ${srcdir=$(dirname $0)} -+: ${srcdir:=.} -+: ${SAVE_DIST_FILES:=0} -+ -+olddir=$(pwd) -+# shellcheck disable=SC2016 -+PKG_NAME=$(autoconf --trace 'AC_INIT:$1' configure.ac) -+WANT_GTK_DOC=0 -+GCC_VERSION=$(gcc --version | head -1 | awk '{print $3}') -+GCC_MAJOR_VERSION=$(echo "$GCC_VERSION" | awk -F. '{print $1}') - FEDORA_PKG1='autoconf automake libtool gettext-devel' - FEDORA_PKG2='glib2-devel gtk2-devel gtk3-devel - wayland-devel' - FEDORA_PKG3='cldr-emoji-annotation iso-codes-devel unicode-emoji unicode-ucd - xkeyboard-config-devel' - --(test -z "$DISABLE_INSTALL_PKGS") && { -+CFLAGS=${CFLAGS-"-Wall -Wformat -Werror=format-security"} -+(test $GCC_MAJOR_VERSION -ge 10) && { -+ CFLAGS="$CFLAGS -fanalyzer -fsanitize=address -fsanitize=leak" -+ FEDORA_PKG1="$FEDORA_PKG1 libasan" -+} -+ -+cd "$srcdir" -+ -+(test -f configure.ac \ -+ && test -f README ) || { -+ echo -n "**Error**: Directory "\`$srcdir\'" does not look like the" -+ echo " top-level $PKG_NAME directory" -+ exit 1 -+} -+ -+(test $(grep -q "^GTK_DOC_CHECK" configure.ac)) || { -+ WANT_GTK_DOC=1 -+ FEDORA_PKG2="$FEDORA_PKG2 gtk-doc" -+} -+ -+(test -f ChangeLog) || { -+ touch ChangeLog -+} -+ -+(test "x$DISABLE_INSTALL_PKGS" = "x") && { - (test -f /etc/fedora-release ) && { - rpm -q $FEDORA_PKG1 || exit 1 - rpm -q $FEDORA_PKG2 || exit 1 -@@ -27,30 +52,39 @@ FEDORA_PKG3='cldr-emoji-annotation iso-codes-devel unicode-emoji unicode-ucd - } - } - --(test -f $srcdir/configure.ac \ -- && test -f $srcdir/README ) || { -- echo -n "**Error**: Directory "\`$srcdir\'" does not look like the" -- echo " top-level $PKG_NAME directory" -- exit 1 --} -- --which gnome-autogen.sh || { -- echo "Not found gnome-autogen.sh. You may need to install gnome-common" -- exit 1 -+CONFIGFLAGS="$@" -+(test "$#" = 0 -a "x$NOCONFIGURE" = "x" ) && { -+ echo "*** WARNING: I am going to run 'configure' with no arguments." >&2 -+ echo "*** If you wish to pass any to it, please specify them on the" >&2 -+ echo "*** '$0' command line." >&2 -+ echo "" >&2 -+ (test $WANT_GTK_DOC -eq 1) && CONFIGFLAGS="--enable-gtk-doc $@" - } - --(test -f $srcdir/ChangeLog) || { -- touch $srcdir/ChangeLog --} -+(test $WANT_GTK_DOC -eq 1) && gtkdocize --copy - --CFLAGS=${CFLAGS-"-Wall -Wformat -Werror=format-security"} -+ACLOCAL_FLAGS="$ACLOCAL_FLAGS -I m4" REQUIRED_AUTOMAKE_VERSION=1.11 \ -+autoreconf --verbose --force --install || exit 1 - --# need --enable-gtk-doc for gnome-autogen.sh to make dist --ACLOCAL_FLAGS="$ACLOCAL_FLAGS -I m4" REQUIRED_AUTOMAKE_VERSION=1.11 CFLAGS="$CFLAGS" . gnome-autogen.sh "$@" -+cd "$olddir" -+(test "x$NOCONFIGURE" = "x" ) && { -+ echo "$srcdir/configure $CONFIGFLAGS" -+ $srcdir/configure $CONFIGFLAGS || exit 1 -+ (test "$1" = "--help" ) && { -+ exit 0 -+ } || { -+ echo "Now type 'make' to compile $PKG_NAME" || exit 1 -+ } -+} || { -+ echo "Skipping configure process." -+} - --(test -z "$SAVE_DIST_FILES") && { -- for f in $DIST_FILES ; do -- echo "rm $f" -- rm $f -- done -+cd "$srcdir" -+(test "x$SAVE_DIST_FILES" = "x0" ) && { -+ # rm engine/simple.xml.in src/ibusemojigen.h src/ibusunicodegen.h -+ for d in engine src; do -+ echo "make -C $d maintainer-clean-generic" -+ make -C $d maintainer-clean-generic -+ done - } || : -+cd "$olddir" -diff --git a/src/Makefile.am b/src/Makefile.am -index 742ee7d7..578694b5 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-2020 Takao Fujiwara -+# Copyright (c) 2015-2021 Takao Fujiwara - # Copyright (c) 2007-2017 Red Hat, Inc. - # - # This library is free software; you can redistribute it and/or -@@ -296,8 +296,8 @@ dicts/emoji-%.dict: emoji-parser - echo "Skip $$plus_comment $@"; \ - fi; - --ibusemojigen.h: dicts/emoji-en.dict -- $(NULL) -+ibusemojigen.h: -+ $(MAKE) $(AM_MAKEFLAGS) dicts/emoji-en.dict - - # 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. -@@ -364,8 +364,8 @@ dicts/unicode-blocks.dict: unicode-parser - echo "Generated $@"; \ - fi; - --ibusunicodegen.h: dicts/unicode-blocks.dict -- $(NULL) -+ibusunicodegen.h: -+ $(MAKE) $(AM_MAKEFLAGS) dicts/unicode-blocks.dict - - unicode_parser_SOURCES = \ - unicode-parser.c \ -@@ -398,9 +398,15 @@ CLEANFILES += \ - stamp-ibusenumtypes.h \ - $(NULL) - --DISTCLEANFILES = \ -+MAINTAINERCLEANFILES = \ - ibusemojigen.h \ - ibusunicodegen.h \ -+ dicts/emoji-en.dict \ -+ dicts/unicode-blocks.dict \ -+ $(NULL) -+ -+DISTCLEANFILES = \ -+ $(MAINTAINERCLEANFILES) \ - ibusversion.h \ - $(NULL) - --- -2.33.1 - -From 104148bcdada1f8f22ef905c930f9944f3e99a63 Mon Sep 17 00:00:00 2001 -From: fujiwarat -Date: Thu, 2 Dec 2021 23:53:28 +0900 -Subject: [PATCH] src: Disable emoji shortcut key with no-emoji hint - -BUG=https://gitlab.gnome.org/GNOME/gtk/-/issues/4337 ---- - src/ibusengine.c | 8 ++++++-- - 1 file changed, 6 insertions(+), 2 deletions(-) - -diff --git a/src/ibusengine.c b/src/ibusengine.c -index 9aeafbf9..7e844838 100644 ---- a/src/ibusengine.c -+++ b/src/ibusengine.c -@@ -2,8 +2,8 @@ - /* vim:set et sts=4: */ - /* ibus - The Input Bus - * Copyright (C) 2008-2013 Peng Huang -- * Copyright (C) 2018-2019 Takao Fujiwara -- * Copyright (C) 2008-2019 Red Hat, Inc. -+ * Copyright (C) 2018-2021 Takao Fujiwara -+ * Copyright (C) 2008-2021 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 -@@ -954,6 +954,10 @@ ibus_engine_filter_key_event (IBusEngine *engine, - return FALSE; - for (n = names; n; n = n->next) { - const gchar *name = (const gchar *)n->data; -+ if (!g_strcmp0 (name, "emoji") && -+ (engine->priv->content_hints & IBUS_INPUT_HINT_NO_EMOJI)) { -+ continue; -+ } - keys = g_hash_table_lookup (priv->extension_keybindings, name); - for (; keys; keys++) { - if (keys->keyval == 0 && keys->keycode == 0 && keys->state == 0) --- -2.33.1 - -From f5757ada54edaa7d2e3ea948d340cdf48064e30c Mon Sep 17 00:00:00 2001 -From: fujiwarat -Date: Thu, 6 Jan 2022 11:20:26 +0900 -Subject: [PATCH] ibusenginesimple: Fix to send char position at - update_preedit_text - -ibus_engine_update_preedit_text() should send the character position -instead of the byte position. - -BUG=https://github.com/ibus/ibus/issues/2368 ---- - src/ibusenginesimple.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/src/ibusenginesimple.c b/src/ibusenginesimple.c -index 83b04ebc..a80e41a5 100644 ---- a/src/ibusenginesimple.c -+++ b/src/ibusenginesimple.c -@@ -2,7 +2,7 @@ - /* vim:set et sts=4: */ - /* ibus - The Input Bus - * Copyright (C) 2014 Peng Huang -- * Copyright (C) 2015-2021 Takao Fujiwara -+ * Copyright (C) 2015-2022 Takao Fujiwara - * Copyright (C) 2014-2017 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or -@@ -386,7 +386,7 @@ ibus_engine_simple_update_preedit_text (IBusEngineSimple *simple) - } else if (s->len >= G_MAXINT) { - g_warning ("%s is too long compose length: %lu", s->str, s->len); - } else { -- int len = (int)s->len; -+ guint len = (guint)g_utf8_strlen (s->str, -1); - IBusText *text = ibus_text_new_from_string (s->str); - ibus_text_append_attribute (text, - IBUS_ATTR_TYPE_UNDERLINE, IBUS_ATTR_UNDERLINE_SINGLE, 0, len); --- -2.33.1 - -From 0e118e7e57caaa298e367ed99f2051ba47a35f81 Mon Sep 17 00:00:00 2001 -From: fujiwarat -Date: Thu, 20 Jan 2022 16:33:11 +0900 -Subject: [PATCH] data/dconf: Change XKB layout string color in panel - -Replace '#415099' with '#51a2da' in XKB layout string color - -BUG=https://github.com/ibus/ibus/issues/2364 ---- - data/dconf/org.freedesktop.ibus.gschema.xml | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/data/dconf/org.freedesktop.ibus.gschema.xml b/data/dconf/org.freedesktop.ibus.gschema.xml -index 099b9c60..e90ee5ab 100644 ---- a/data/dconf/org.freedesktop.ibus.gschema.xml -+++ b/data/dconf/org.freedesktop.ibus.gschema.xml -@@ -146,7 +146,7 @@ - Show input method name on language bar - - -- '#415099' -+ '#51a2da' - RGBA value of XKB icon - XKB icon shows the layout string and the string is rendered with the RGBA value. The RGBA value can be 1. a color name from X11, 2. a hex value in form '#rrggbb' where 'r', 'g' and 'b' are hex digits of the red, green, and blue, 3. a RGB color in form 'rgb(r,g,b)' or 4. a RGBA color in form 'rgba(r,g,b,a)' where 'r', 'g', and 'b' are either integers in the range 0 to 255 or percentage values in the range 0% to 100%, and 'a' is a floating point value in the range 0 to 1 of the alpha. - --- -2.33.1 - -From d9ff2bb6b04a7cf7d99f4e9832b4b8905858178c Mon Sep 17 00:00:00 2001 -From: fujiwarat -Date: Thu, 20 Jan 2022 16:41:37 +0900 -Subject: [PATCH] data/dconf: Add Ctrl-semicolon to Emoji shortcut key - -period key is needed Shift key in French keyboard and Ctrl-period does -not work. -Add Ctrl-semicolon in org.freedesktop.ibus.panel.emoji.hotkey to fix -the problem. - -BUG=https://github.com/ibus/ibus/issues/2360 ---- - data/dconf/org.freedesktop.ibus.gschema.xml | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/data/dconf/org.freedesktop.ibus.gschema.xml b/data/dconf/org.freedesktop.ibus.gschema.xml -index e90ee5ab..516f7520 100644 ---- a/data/dconf/org.freedesktop.ibus.gschema.xml -+++ b/data/dconf/org.freedesktop.ibus.gschema.xml -@@ -183,7 +183,7 @@ - The shortcut keys for turning Unicode typing on or off - - -- [ '<Control>period' ] -+ [ '<Control>period', '<Control>semicolon' ] - Emoji shortcut keys for gtk_accelerator_parse - The shortcut keys for turning emoji typing on or off - --- -2.33.1 - -From 5a455b1ead5d72483952356ddfe25b9e3b637e6f Mon Sep 17 00:00:00 2001 -From: Eberhard Beilharz -Date: Wed, 13 Oct 2021 19:00:47 +0200 -Subject: [PATCH] Fix unref problems with floating references - -When running with debug-enabled GLIB there are several critical -errors output: "A floating object ... was finalized. This means -that someone called g_object_unref() on an object that had only -a floating reference; the initial floating reference is not -owned by anyone and must be removed with g_object_ref_sink()." - -This change fixes this by calling `g_object_ref_sink()` before -`g_object_unref()` if we have a floating reference. - -It also fixes another related problem where we called -`g_object_unref()` on a static IBusText string (created with -`ibus_text_new_from_static_string()`) for which the API documentation -says not to free. - -BUG=https://github.com/ibus/ibus/pull/2359 ---- - src/ibusinputcontext.c | 21 ++++++++++++++------- - src/ibusproperty.c | 32 ++++++++++++++++---------------- - 2 files changed, 30 insertions(+), 23 deletions(-) - -diff --git a/src/ibusinputcontext.c b/src/ibusinputcontext.c -index 2b1438fc..4b27551b 100644 ---- a/src/ibusinputcontext.c -+++ b/src/ibusinputcontext.c -@@ -550,7 +550,8 @@ ibus_input_context_g_signal (GDBusProxy *proxy, - g_signal_emit (context, context_signals[COMMIT_TEXT], 0, text); - - if (g_object_is_floating (text)) -- g_object_unref (text); -+ g_object_ref_sink (text); -+ g_object_unref (text); - return; - } - if (g_strcmp0 (signal_name, "UpdatePreeditText") == 0) { -@@ -569,7 +570,8 @@ ibus_input_context_g_signal (GDBusProxy *proxy, - visible); - - if (g_object_is_floating (text)) -- g_object_unref (text); -+ g_object_ref_sink (text); -+ g_object_unref (text); - return; - } - if (g_strcmp0 (signal_name, "UpdatePreeditTextWithMode") == 0) { -@@ -591,7 +593,8 @@ ibus_input_context_g_signal (GDBusProxy *proxy, - mode); - - if (g_object_is_floating (text)) -- g_object_unref (text); -+ g_object_ref_sink (text); -+ g_object_unref (text); - return; - } - -@@ -619,7 +622,8 @@ ibus_input_context_g_signal (GDBusProxy *proxy, - text, - visible); - if (g_object_is_floating (text)) -- g_object_unref (text); -+ g_object_ref_sink (text); -+ g_object_unref (text); - return; - } - -@@ -637,7 +641,8 @@ ibus_input_context_g_signal (GDBusProxy *proxy, - table, - visible); - if (g_object_is_floating (table)) -- g_object_unref (table); -+ g_object_ref_sink (table); -+ g_object_unref (table); - return; - - } -@@ -655,7 +660,8 @@ ibus_input_context_g_signal (GDBusProxy *proxy, - prop_list); - - if (g_object_is_floating (prop_list)) -- g_object_unref (prop_list); -+ g_object_ref_sink (prop_list); -+ g_object_unref (prop_list); - return; - } - -@@ -668,7 +674,8 @@ ibus_input_context_g_signal (GDBusProxy *proxy, - g_signal_emit (context, context_signals[UPDATE_PROPERTY], 0, prop); - - if (g_object_is_floating (prop)) -- g_object_unref (prop); -+ g_object_ref_sink (prop); -+ g_object_unref (prop); - return; - } - -diff --git a/src/ibusproperty.c b/src/ibusproperty.c -index e87d26b6..6d4ed088 100644 ---- a/src/ibusproperty.c -+++ b/src/ibusproperty.c -@@ -336,17 +336,20 @@ ibus_property_destroy (IBusProperty *prop) - prop->priv->icon = NULL; - - if (prop->priv->label) { -- g_object_unref (prop->priv->label); -+ if (!ibus_text_get_is_static (prop->priv->label)) -+ g_object_unref (prop->priv->label); - prop->priv->label = NULL; - } - - if (prop->priv->symbol) { -- g_object_unref (prop->priv->symbol); -+ if (!ibus_text_get_is_static (prop->priv->symbol)) -+ g_object_unref (prop->priv->symbol); - prop->priv->symbol = NULL; - } - - if (prop->priv->tooltip) { -- g_object_unref (prop->priv->tooltip); -+ if (!ibus_text_get_is_static (prop->priv->tooltip)) -+ g_object_unref (prop->priv->tooltip); - prop->priv->tooltip = NULL; - } - -@@ -401,7 +404,7 @@ ibus_property_deserialize (IBusProperty *prop, - g_variant_get_child (variant, retval++, "u", &prop->priv->type); - - GVariant *subvar = g_variant_get_child_value (variant, retval++); -- if (prop->priv->label != NULL) { -+ if (prop->priv->label && !ibus_text_get_is_static (prop->priv->label)) { - g_object_unref (prop->priv->label); - } - prop->priv->label = IBUS_TEXT (ibus_serializable_deserialize (subvar)); -@@ -411,7 +414,7 @@ ibus_property_deserialize (IBusProperty *prop, - ibus_g_variant_get_child_string (variant, retval++, &prop->priv->icon); - - subvar = g_variant_get_child_value (variant, retval++); -- if (prop->priv->tooltip != NULL) { -+ if (prop->priv->tooltip && !ibus_text_get_is_static (prop->priv->tooltip)) { - g_object_unref (prop->priv->tooltip); - } - prop->priv->tooltip = IBUS_TEXT (ibus_serializable_deserialize (subvar)); -@@ -432,7 +435,7 @@ ibus_property_deserialize (IBusProperty *prop, - - /* Keep the serialized order for the compatibility when add new members. */ - subvar = g_variant_get_child_value (variant, retval++); -- if (prop->priv->symbol != NULL) { -+ if (prop->priv->symbol && !ibus_text_get_is_static (prop->priv->symbol)) { - g_object_unref (prop->priv->symbol); - } - prop->priv->symbol = IBUS_TEXT (ibus_serializable_deserialize (subvar)); -@@ -564,7 +567,7 @@ ibus_property_set_label (IBusProperty *prop, - g_assert (IBUS_IS_PROPERTY (prop)); - g_return_if_fail (label == NULL || IBUS_IS_TEXT (label)); - -- if (prop->priv->label) { -+ if (prop->priv->label && !ibus_text_get_is_static (prop->priv->label)) { - g_object_unref (prop->priv->label); - } - -@@ -583,7 +586,7 @@ ibus_property_set_symbol (IBusProperty *prop, - g_assert (IBUS_IS_PROPERTY (prop)); - g_return_if_fail (symbol == NULL || IBUS_IS_TEXT (symbol)); - -- if (prop->priv->symbol) { -+ if (prop->priv->symbol && !ibus_text_get_is_static (prop->priv->symbol)) { - g_object_unref (prop->priv->symbol); - } - -@@ -612,19 +615,16 @@ ibus_property_set_tooltip (IBusProperty *prop, - g_assert (IBUS_IS_PROPERTY (prop)); - g_assert (tooltip == NULL || IBUS_IS_TEXT (tooltip)); - -- IBusPropertyPrivate *priv = prop->priv; -- -- if (priv->tooltip) { -- g_object_unref (priv->tooltip); -+ if (prop->priv->tooltip && !ibus_text_get_is_static (prop->priv->tooltip)) { -+ g_object_unref (prop->priv->tooltip); - } - - if (tooltip == NULL) { -- priv->tooltip = ibus_text_new_from_static_string (""); -- g_object_ref_sink (priv->tooltip); -+ prop->priv->tooltip = ibus_text_new_from_static_string (""); - } - else { -- priv->tooltip = tooltip; -- g_object_ref_sink (priv->tooltip); -+ prop->priv->tooltip = tooltip; -+ g_object_ref_sink (prop->priv->tooltip); - } - } - --- -2.33.1 - -From ad95015dc411f84dd9b8869e596e4707cd2ccd2b Mon Sep 17 00:00:00 2001 -From: Sibo Dong <46512211+dongsibo@users.noreply.github.com> -Date: Wed, 2 Feb 2022 19:18:02 +0900 -Subject: [PATCH] ui/gtk3: Update man page for Emoji shortcut key - -The default Emoji shortcut key was changed but not updated in -the ibus-emoji.7 man page. - -BUG=https://github.com/ibus/ibus/pull/2353 ---- - ui/gtk3/ibus-emoji.7.in | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/ui/gtk3/ibus-emoji.7.in b/ui/gtk3/ibus-emoji.7.in -index 9c6d3c6f..b4d941ec 100644 ---- a/ui/gtk3/ibus-emoji.7.in -+++ b/ui/gtk3/ibus-emoji.7.in -@@ -1,8 +1,8 @@ - .\" This file is distributed under the same license as the ibus - .\" package. --.\" Copyright (C) Takao Fujiwara , 2017-2018. -+.\" Copyright (C) Takao Fujiwara , 2017-2022. - .\" --.TH "IBUS EMOJI" 7 "August 2018" "@VERSION@" "User Commands" -+.TH "IBUS EMOJI" 7 "February 2022" "@VERSION@" "User Commands" - .SH NAME - .B ibus-emoji - \- Call the IBus emoji utility by -@@ -51,7 +51,7 @@ E.g. "Noto Color Emoji", "Android Emoji" font. - - .SH "KEYBOARD OPERATIONS" - .TP --\fBControl-Shift-e\fR -+\fBControl-Period or Control-Semicolon\fR - Launch IBus Emojier. The shortcut key can be customized by - .B ibus\-setup (1). - .TP --- -2.33.1 - -From 0f1485bfa687386f26ef5909c123e0ae2e3e11b9 Mon Sep 17 00:00:00 2001 -From: fujiwarat -Date: Thu, 3 Feb 2022 14:03:30 +0900 -Subject: [PATCH] src: Add IBUS_INPUT_HINT_PRIVATE for browser private mode - -GTK4 added GTK_INPUT_HINT_PRIVATE recently for Web brower -private or guest mode. - -BUG=https://github.com/ibus/ibus/issues/2315 ---- - src/ibustypes.h | 8 ++++++-- - 1 file changed, 6 insertions(+), 2 deletions(-) - -diff --git a/src/ibustypes.h b/src/ibustypes.h -index 798ad04d..990659ac 100644 ---- a/src/ibustypes.h -+++ b/src/ibustypes.h -@@ -2,7 +2,8 @@ - /* vim:set et sts=4: */ - /* ibus - The Input Bus - * Copyright (C) 2008-2013 Peng Huang -- * Copyright (C) 2008-2020 Red Hat, Inc. -+ * Copyright (C) 2010-2022 Takao Fujiwara -+ * Copyright (C) 2008-2022 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 -@@ -300,6 +301,8 @@ typedef enum - * @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 -+ * @IBUS_INPUT_HINT_PRIVATE: Request that the input method should not -+ * update personalized data (like typing history). Since 1.5.26 - * - * Describes hints that might be taken into account by engines. Note - * that engines may already tailor their behaviour according to the -@@ -326,7 +329,8 @@ typedef enum - 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 -+ IBUS_INPUT_HINT_NO_EMOJI = 1 << 10, -+ IBUS_INPUT_HINT_PRIVATE = 1 << 11 - } IBusInputHints; - - #endif --- -2.33.1 - -From 787b564982d17017cb35ab87b71b6a16d7440387 Mon Sep 17 00:00:00 2001 -From: fujiwarat -Date: Thu, 3 Feb 2022 14:34:34 +0900 -Subject: [PATCH] bus: mkdir socket dirs instead of socket paths - -IBus ran mkdir for socket paths for --address=unix:path -but should does the socket directories instead. - -BUG=https://github.com/ibus/ibus/issues/2363 ---- - bus/server.c | 39 +++++++++++++++++++++++---------------- - 1 file changed, 23 insertions(+), 16 deletions(-) - -diff --git a/bus/server.c b/bus/server.c -index e8d0ce2b..6abf8427 100644 ---- a/bus/server.c -+++ b/bus/server.c -@@ -2,7 +2,7 @@ - /* vim:set et sts=4: */ - /* bus - The Input Bus - * Copyright (C) 2008-2010 Peng Huang -- * Copyright (C) 2011-2021 Takao Fujiwara -+ * Copyright (C) 2011-2022 Takao Fujiwara - * Copyright (C) 2008-2021 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or -@@ -38,14 +38,14 @@ static GDBusServer *server = NULL; - static GMainLoop *mainloop = NULL; - static BusDBusImpl *dbus = NULL; - static BusIBusImpl *ibus = NULL; --static gchar *address = NULL; -+static char *address = NULL; - static gboolean _restart = FALSE; - - static void - _restart_server (void) - { -- gchar *exe; -- gint fd; -+ char *exe; -+ int fd; - ssize_t r; - int MAXSIZE = 0xFFF; - char proclnk[MAXSIZE]; -@@ -201,11 +201,11 @@ bus_acquired_handler (GDBusConnection *connection, - NULL); - } - --static gchar * -+static char * - _bus_extract_address (void) - { -- gchar *socket_address = g_strdup (g_address); -- gchar *p; -+ char *socket_address = g_strdup (g_address); -+ char *p; - - #define IF_REPLACE_VARIABLE_WITH_FUNC(variable, func, format) \ - if ((p = g_strstr_len (socket_address, -1, (variable)))) { \ -@@ -242,12 +242,12 @@ bus_server_init (void) - #define IBUS_UNIX_ABSTRACT "unix:abstract=" - #define IBUS_UNIX_DIR "unix:dir=" - -- gchar *socket_address; -+ char *socket_address; - GDBusServerFlags flags = G_DBUS_SERVER_FLAGS_NONE; -- gchar *guid; -+ char *guid; - GDBusAuthObserver *observer; - GError *error = NULL; -- gchar *unix_dir = NULL; -+ char *unix_dir = NULL; - - dbus = bus_dbus_impl_get_default (); - ibus = bus_ibus_impl_get_default (); -@@ -256,18 +256,24 @@ bus_server_init (void) - /* init server */ - socket_address = _bus_extract_address (); - --#define IF_GET_UNIX_DIR(prefix) \ -+#define IF_GET_UNIX_DIR_FROM_DIR(prefix) \ - if (g_str_has_prefix (socket_address, (prefix))) { \ - unix_dir = g_strdup (socket_address + strlen (prefix)); \ - } -+#define IF_GET_UNIX_DIR_FROM_PATH(prefix) \ -+ if (g_str_has_prefix (socket_address, (prefix))) { \ -+ const char *unix_path = socket_address + strlen (prefix); \ -+ unix_dir = g_path_get_dirname (unix_path); \ -+ } -+ - -- IF_GET_UNIX_DIR (IBUS_UNIX_TMPDIR) -+ IF_GET_UNIX_DIR_FROM_DIR (IBUS_UNIX_TMPDIR) - else -- IF_GET_UNIX_DIR (IBUS_UNIX_PATH) -+ IF_GET_UNIX_DIR_FROM_PATH (IBUS_UNIX_PATH) - else -- IF_GET_UNIX_DIR (IBUS_UNIX_ABSTRACT) -+ IF_GET_UNIX_DIR_FROM_PATH (IBUS_UNIX_ABSTRACT) - else -- IF_GET_UNIX_DIR (IBUS_UNIX_DIR) -+ IF_GET_UNIX_DIR_FROM_DIR (IBUS_UNIX_DIR) - else { - g_error ("Your socket address \"%s\" does not correspond with " - "one of the following formats; " -@@ -329,7 +335,8 @@ bus_server_init (void) - bus_acquired_handler, - NULL, NULL, NULL, NULL); - --#undef IF_GET_UNIX_DIR -+#undef IF_GET_UNIX_DIR_FROM_DIR -+#undef IF_GET_UNIX_DIR_FROM_PATH - #undef IBUS_UNIX_TMPDIR - #undef IBUS_UNIX_PATH - #undef IBUS_UNIX_ABSTRACT --- -2.33.1 - -From dfd3fbf26fa4b5ff20512b166a8dd321afc10344 Mon Sep 17 00:00:00 2001 -From: fujiwarat -Date: Thu, 3 Feb 2022 17:31:08 +0900 -Subject: [PATCH] bus: Do not mkdir abstract unix socket - -IBus ran mkdir for unix abstract sockets for --address=unix:abstract -but should not need to mkdir. - -BUG=https://github.com/ibus/ibus/issues/2363 ---- - bus/server.c | 8 ++++++-- - 1 file changed, 6 insertions(+), 2 deletions(-) - -diff --git a/bus/server.c b/bus/server.c -index 6abf8427..968d5346 100644 ---- a/bus/server.c -+++ b/bus/server.c -@@ -265,13 +265,15 @@ bus_server_init (void) - const char *unix_path = socket_address + strlen (prefix); \ - unix_dir = g_path_get_dirname (unix_path); \ - } -+#define IF_GET_UNIX_DIR_FROM_ABSTRACT(prefix) \ -+ if (g_str_has_prefix (socket_address, (prefix))) {} - - - IF_GET_UNIX_DIR_FROM_DIR (IBUS_UNIX_TMPDIR) - else - IF_GET_UNIX_DIR_FROM_PATH (IBUS_UNIX_PATH) - else -- IF_GET_UNIX_DIR_FROM_PATH (IBUS_UNIX_ABSTRACT) -+ IF_GET_UNIX_DIR_FROM_ABSTRACT (IBUS_UNIX_ABSTRACT) - else - IF_GET_UNIX_DIR_FROM_DIR (IBUS_UNIX_DIR) - else { -@@ -281,7 +283,8 @@ bus_server_init (void) - IBUS_UNIX_ABSTRACT "FILE, " IBUS_UNIX_DIR "DIR.", - socket_address); - } -- if (!g_file_test (unix_dir, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR)) { -+ if (unix_dir && -+ !g_file_test (unix_dir, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR)) { - /* Require mkdir for BSD system. - * The mode 0700 can eliminate malicious users change the mode. - * `chmod` runs for the last directory only not to change the modes -@@ -337,6 +340,7 @@ bus_server_init (void) - - #undef IF_GET_UNIX_DIR_FROM_DIR - #undef IF_GET_UNIX_DIR_FROM_PATH -+#undef IF_GET_UNIX_DIR_FROM_ABSTRACT - #undef IBUS_UNIX_TMPDIR - #undef IBUS_UNIX_PATH - #undef IBUS_UNIX_ABSTRACT --- -2.33.1 - -From c69b61aa66239e1b13c9764b2d3bf6f02d086785 Mon Sep 17 00:00:00 2001 -From: fujiwarat -Date: Fri, 4 Feb 2022 15:08:36 +0900 -Subject: [PATCH] src: Fix ibus_key_event_from_string for - gobject-introspection - -BUG=https://github.com/ibus/ibus/issues/2330 ---- - src/ibusshare.h | 8 ++++---- - 1 file changed, 4 insertions(+), 4 deletions(-) - -diff --git a/src/ibusshare.h b/src/ibusshare.h -index d70af29f..d739e2ff 100644 ---- a/src/ibusshare.h -+++ b/src/ibusshare.h -@@ -2,8 +2,8 @@ - /* vim:set et sts=4: */ - /* ibus - The Input Bus - * Copyright (C) 2008-2013 Peng Huang -- * Copyright (C) 2015-2018 Takao Fujiwara -- * Copyright (C) 2008-2018 Red Hat, Inc. -+ * Copyright (C) 2015-2022 Takao Fujiwara -+ * Copyright (C) 2008-2022 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 -@@ -333,8 +333,8 @@ gchar *ibus_key_event_to_string - /** - * ibus_key_event_from_string: - * @string: Key event string. -- * @keyval: Variable that hold key symbol result. -- * @modifiers: Variable that hold modifiers result. -+ * @keyval: (out): Variable that hold key symbol result. -+ * @modifiers: (out): Variable that hold modifiers result. - * - * Parse key event string and return key symbol and modifiers. - * --- -2.33.1 - -From a076b388d856aeb4c8f8317dd6cd9dd6d61fe9ac Mon Sep 17 00:00:00 2001 -From: Carlos Garnacho -Date: Wed, 4 Nov 2020 10:48:45 +0100 -Subject: [PATCH] src, client/x11: Add systemd unit file - -This so far depends on GNOME targets, and is thus just usable there. -Other DEs wishing to use systemd and ibus will need to add the -necessary dependencies where applicable. - -There are 2 scenarios here: -- On X11 sessions, ibus-daemon will be launched with --xim parameter, - so ibus-x11 is started with it. -- On Wayland sessions, ibus-daemon will be started without XIM support, - ibus-x11 will be launched and tear down together with all other - session X11 services while Xwayland is running. - -For the second part of the second situation, additionally install -a script at /etc/xdg/Xwayland-session.d, which takes care of X11 -service initialization together with the Xwayland instance. - -BUG=https://github.com/ibus/ibus/pull/2377 ---- - client/x11/10-ibus-x11.in | 2 ++ - client/x11/Makefile.am | 18 ++++++++++++ - configure.ac | 17 +++++++++++ - src/Makefile.am | 16 +++++++++++ - ....freedesktop.IBus.session.GNOME.service.in | 28 +++++++++++++++++++ - 5 files changed, 81 insertions(+) - create mode 100755 client/x11/10-ibus-x11.in - create mode 100644 bus/services/org.freedesktop.IBus.session.GNOME.service.in - -diff --git a/client/x11/10-ibus-x11.in b/client/x11/10-ibus-x11.in -new file mode 100755 -index 00000000..973cbb6f ---- /dev/null -+++ b/client/x11/10-ibus-x11.in -@@ -0,0 +1,2 @@ -+#!/bin/sh -+@libexecdir@/ibus-x11 & -diff --git a/client/x11/Makefile.am b/client/x11/Makefile.am -index 12de6ea8..90454bcf 100644 ---- a/client/x11/Makefile.am -+++ b/client/x11/Makefile.am -@@ -67,6 +67,16 @@ noinst_HEADERS = \ - locales.h \ - $(NULL) - -+xwaylandsessiond_in_files = 10-ibus-x11.in -+xwaylandsessiond_DATA = $(xwaylandsessiond_in_files:.in=) -+xwaylandsessionddir=$(sysconfdir)/xdg/Xwayland-session.d -+ -+10-ibus-x11: 10-ibus-x11.in -+ $(AM_V_GEN) sed -e "s|\@libexecdir\@|$(libexecdir)|" $< > $@.tmp && mv $@.tmp $@ -+ -+install-data-hook: -+ chmod 755 $(DESTDIR)$(xwaylandsessionddir)/10-ibus-x11 -+ - $(libIMdkit): - (cd $(top_builddir)/util/IMdkit; make) - -@@ -81,4 +91,12 @@ locales.h: - xargs python -c 'import sys;print "#define LOCALES_STRING \"%s\"" % ",".join(sys.argv[1:])' \ - ) > $@ - -+CLEANFILES = \ -+ $(xwaylandsessiond_DATA) \ -+ $(NULL) -+ -+EXTRA_DIST = \ -+ 10-ibus-x11.in \ -+ $(NULL) -+ - -include $(top_srcdir)/git.mk -diff --git a/configure.ac b/configure.ac -index ce096ad3..73c5e429 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -393,6 +393,22 @@ if test x"$enable_dconf" = x"yes"; then - enable_dconf="yes (enabled, use --disable-dconf to disable)" - fi - -+AC_ARG_ENABLE(systemd-services, -+ AS_HELP_STRING([--disable-systemd-services], -+ [Disable systemd services installation]), -+ [enable_systemd=$enableval], -+ [enable_systemd=yes] -+) -+AM_CONDITIONAL([ENABLE_SYSTEMD], [test x"$enable_systemd" = x"yes"]) -+ -+if test x"$enable_systemd" = x"yes"; then -+ PKG_CHECK_MODULES(SYSTEMD, [ -+ systemd >= 0.7.5 -+ ]) -+ AC_SUBST([SYSTEMD_USER_UNIT_DIR], [`$PKG_CONFIG --variable systemduserunitdir systemd`]) -+ enable_systemd="yes (enabled, use --disable-systemd-services to disable)" -+fi -+ - # Check env. - AC_PATH_PROG(ENV_IBUS_TEST, env) - AC_SUBST(ENV_IBUS_TEST) -@@ -860,6 +876,7 @@ Build options: - UCD directory $UCD_DIR - Socket directory "$IBUS_SOCKET_DIR" - XFixes client disconnect $have_xfixes -+ Install systemd service $enable_systemd - Run test cases $enable_tests - Install tests $enable_install_tests - ]) -diff --git a/src/Makefile.am b/src/Makefile.am -index 578694b5..bbaa6c90 100644 ---- a/src/Makefile.am -+++ b/src/Makefile.am -@@ -317,6 +317,11 @@ install-data-hook: - rm "$(DESTDIR)$(dictdir)/$$file" || exit $$?; \ - fi; \ - done -+ $(MKDIR_P) "$(DESTDIR)$(SYSTEMD_USER_UNIT_DIR)/gnome-session.target.wants/" -+ ( \ -+ cd "$(DESTDIR)$(SYSTEMD_USER_UNIT_DIR)/gnome-session.target.wants" ; \ -+ $(LN_S) -f "../org.freedesktop.IBus.session.GNOME.service" .; \ -+ ) - - emoji_parser_SOURCES = \ - emoji-parser.c \ -@@ -383,7 +388,17 @@ clean-local: - $(NULL) - endif - -+if ENABLE_SYSTEMD -+systemdservice_in_files = org.freedesktop.IBus.session.GNOME.service.in -+systemdservice_DATA = $(systemdservice_in_files:.service.in=.service) -+systemdservicedir=$(SYSTEMD_USER_UNIT_DIR) -+ -+org.freedesktop.IBus.session.GNOME.service: org.freedesktop.IBus.session.GNOME.service.in -+ $(AM_V_GEN) sed -e "s|\@bindir\@|$(bindir)|" $< > $@.tmp && mv $@.tmp $@ -+endif -+ - EXTRA_DIST = \ -+ org.freedesktop.IBus.session.GNOME.service.in \ - emoji-parser.c \ - ibusversion.h.in \ - ibusmarshalers.list \ -@@ -393,6 +408,7 @@ EXTRA_DIST = \ - $(NULL) - - CLEANFILES += \ -+ $(systemdservice_DATA) \ - $(BUILT_SOURCES) \ - stamp-ibusmarshalers.h \ - stamp-ibusenumtypes.h \ -diff --git a/bus/services/org.freedesktop.IBus.session.GNOME.service.in b/bus/services/org.freedesktop.IBus.session.GNOME.service.in -new file mode 100644 -index 00000000..76444dbd ---- /dev/null -+++ b/bus/services/org.freedesktop.IBus.session.GNOME.service.in -@@ -0,0 +1,28 @@ -+[Unit] -+Description=IBus Daemon -+CollectMode=inactive-or-failed -+ -+# Require GNOME session and specify startup ordering -+Requisite=gnome-session-initialized.target -+After=gnome-session-initialized.target -+PartOf=gnome-session-initialized.target -+Before=gnome-session.target -+ -+# Needs to run when DISPLAY/WAYLAND_DISPLAY is set -+After=gnome-session-initialized.target -+PartOf=gnome-session-initialized.target -+ -+# Never run in GDM -+Conflicts=gnome-session@gnome-login.target -+ -+[Service] -+Type=dbus -+# Only pull --xim in X11 session, it is done via Xwayland-session.d on Wayland -+ExecStart=sh -c '@bindir@/ibus-daemon --panel disable $([[ $XDG_SESSION_TYPE == "x11" ]] && echo "--xim")' -+Restart=on-abnormal -+BusName=org.freedesktop.IBus -+TimeoutStopSec=5 -+Slice=session.slice -+ -+[Install] -+WantedBy=gnome-session.target --- -2.33.1 - -From b5423f0cff78e627fec12378bfcc70efa79e9379 Mon Sep 17 00:00:00 2001 -From: fujiwarat -Date: Thu, 17 Feb 2022 20:15:38 +0900 -Subject: [PATCH] src/services: Add org.freedesktop.IBus.session.generic.service - -Move bus/*.service.in & src/*.service.in into bus/services - -BUG=https://github.com/ibus/ibus/pull/2381 ---- - bus/Makefile.am | 16 +---- - bus/services/Makefile.am | 68 +++++++++++++++++++ - .../org.freedesktop.IBus.service.in | 0 - ....freedesktop.IBus.session.GNOME.service.in | 2 +- - ...reedesktop.IBus.session.generic.service.in | 15 ++++ - configure.ac | 48 ++++++------- - src/Makefile.am | 16 ----- - 7 files changed, 112 insertions(+), 53 deletions(-) - create mode 100644 bus/services/Makefile.am - create mode 100644 bus/services/org.freedesktop.IBus.service.in - create mode 100644 bus/services/org.freedesktop.IBus.session.generic.service.in - -diff --git a/bus/Makefile.am b/bus/Makefile.am -index 4383a874..e173ee25 100644 ---- a/bus/Makefile.am -+++ b/bus/Makefile.am -@@ -3,8 +3,8 @@ - # ibus - The Input Bus - # - # Copyright (c) 2007-2013 Peng Huang --# Copyright (c) 2013-2018 Takao Fujiwara --# Copyright (c) 2007-2018 Red Hat, Inc. -+# Copyright (c) 2013-2022 Takao Fujiwara -+# Copyright (c) 2007-2022 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 -@@ -22,6 +22,7 @@ - # USA - - NULL = -+SUBDIRS = . services - - libibus = $(top_builddir)/src/libibus-@IBUS_API_VERSION@.la - -@@ -190,15 +191,4 @@ man_onedir = $(mandir)/man1 - %.1.gz: %.1 - $(AM_V_GEN) gzip -c $< > $@.tmp && mv $@.tmp $@ - -- --dbusservice_in_files = org.freedesktop.IBus.service.in --dbusservice_DATA = $(dbusservice_in_files:.service.in=.service) --dbusservicedir=${datadir}/dbus-1/services -- --org.freedesktop.IBus.service: org.freedesktop.IBus.service.in -- $(AM_V_GEN) sed -e "s|\@bindir\@|$(bindir)|" -e "s|\@xim_cli_arg\@|$(XIM_CLI_ARG)|" $< > $@.tmp && mv $@.tmp $@ -- --EXTRA_DIST += $(dbusservice_in_files) --CLEANFILES += $(dbusservice_DATA) -- - -include $(top_srcdir)/git.mk -diff --git a/bus/services/Makefile.am b/bus/services/Makefile.am -new file mode 100644 -index 00000000..9cc42153 ---- /dev/null -+++ b/bus/services/Makefile.am -@@ -0,0 +1,68 @@ -+# vim:set noet ts=4: -+# -+# ibus - The Input Bus -+# -+# Copyright (c) 2022 Takao Fujiwara -+# Copyright (c) 2022 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 -+ -+NULL = -+ -+# Originally this D-Bus service file was added for GNOME but seems not to -+# be used at present. -+# -+# TODO: Check if flatpack uses this file and we could delete -+# org.freedesktop.IBus.service file in the future. -+dbusservice_in_files = org.freedesktop.IBus.service.in -+dbusservice_DATA = $(dbusservice_in_files:.service.in=.service) -+dbusservicedir=${datadir}/dbus-1/services -+ -+systemdservice_in_files = \ -+ org.freedesktop.IBus.session.generic.service.in \ -+ org.freedesktop.IBus.session.GNOME.service.in \ -+ $(NULL) -+ -+%.service: %.service.in -+ $(AM_V_GEN) sed -e "s|\@bindir\@|$(bindir)|" \ -+ -e "s|\@xim_cli_arg\@|$(XIM_CLI_ARG)|" $< > $@.tmp && \ -+ mv $@.tmp $@ -+ -+if ENABLE_SYSTEMD -+systemdservice_DATA = $(systemdservice_in_files:.service.in=.service) -+systemdservicedir = $(SYSTEMD_USER_UNIT_DIR) -+ -+# in install-data-hook. -+install-data-hook: -+ $(MKDIR_P) "$(DESTDIR)$(SYSTEMD_USER_UNIT_DIR)/gnome-session.target.wants/" -+ ( \ -+ cd "$(DESTDIR)$(SYSTEMD_USER_UNIT_DIR)/gnome-session.target.wants" ; \ -+ $(LN_S) -f "../org.freedesktop.IBus.session.GNOME.service" .; \ -+ ) -+ $(NULL) -+endif -+ -+EXTRA_DIST = \ -+ $(dbusservice_in_files) \ -+ $(systemdservice_in_files) \ -+ $(NULL) -+ -+CLEANFILES = \ -+ $(dbusservice_DATA) \ -+ $(systemdservice_DATA) \ -+ $(NULL) -+ -+-include $(top_srcdir)/git.mk -diff --git a/bus/org.freedesktop.IBus.service.in b/bus/services/org.freedesktop.IBus.service.in -new file mode 100644 -index 00000000..9d493159 ---- /dev/null -+++ b/bus/services/org.freedesktop.IBus.service.in -@@ -0,0 +1,3 @@ -+[D-BUS Service] -+Name=org.freedesktop.IBus -+Exec=@bindir@/ibus-daemon --replace --panel disable @xim_cli_arg@ -diff --git a/bus/services/org.freedesktop.IBus.session.GNOME.service.in b/bus/services/org.freedesktop.IBus.session.GNOME.service.in -index 76444dbd..a99370fa 100644 ---- a/bus/services/org.freedesktop.IBus.session.GNOME.service.in -+++ b/bus/services/org.freedesktop.IBus.session.GNOME.service.in -@@ -1,5 +1,5 @@ - [Unit] --Description=IBus Daemon -+Description=IBus Daemon for GNOME - CollectMode=inactive-or-failed - - # Require GNOME session and specify startup ordering -diff --git a/bus/services/org.freedesktop.IBus.session.generic.service.in b/bus/services/org.freedesktop.IBus.session.generic.service.in -new file mode 100644 -index 00000000..9d493159 ---- /dev/null -+++ b/bus/services/org.freedesktop.IBus.session.generic.service.in -@@ -0,0 +1,15 @@ -+[Unit] -+Description=IBus Daemon for generic sessions -+CollectMode=inactive-or-failed -+ -+# Never run in GNOME -+Conflicts=gnome-session-initialized.target -+ -+[Service] -+Type=dbus -+# Only pull --xim in X11 session, it is done via Xwayland-session.d on Wayland -+ExecStart=sh -c '@bindir@/ibus-daemon $IBUS_DAEMON_ARGS' -+Restart=on-abnormal -+BusName=org.freedesktop.IBus -+TimeoutStopSec=5 -+Slice=session.slice -diff --git a/configure.ac b/configure.ac -index 73c5e429..4137e6cc 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -3,8 +3,8 @@ - # ibus - The Input Bus - # - # Copyright (c) 2007-2016 Peng Huang --# Copyright (c) 2015-2021 Takao Fujiwara --# Copyright (c) 2007-2021 Red Hat, Inc. -+# Copyright (c) 2015-2022 Takao Fujiwara -+# Copyright (c) 2007-2022 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 -@@ -791,24 +791,22 @@ AC_SUBST(XKBCONFIG_BASE) - AC_SUBST([GDBUS_CODEGEN], [`$PKG_CONFIG --variable gdbus_codegen gio-2.0`]) - - # OUTPUT files --AC_CONFIG_FILES([ po/Makefile.in --Makefile --ibus-1.0.pc --ibus.spec -+AC_CONFIG_FILES([ -+po/Makefile.in -+bindings/Makefile -+bindings/pygobject/Makefile -+bindings/vala/Makefile -+bus/Makefile -+bus/services/Makefile - client/Makefile - client/gtk2/Makefile - client/gtk3/Makefile - client/gtk4/Makefile - client/x11/Makefile - client/wayland/Makefile --src/Makefile --src/ibusversion.h --src/tests/Makefile --bus/Makefile --portal/Makefile --engine/Makefile --util/Makefile --util/IMdkit/Makefile -+conf/Makefile -+conf/dconf/Makefile -+conf/memconf/Makefile - data/Makefile - data/annotations/Makefile - data/icons/Makefile -@@ -819,20 +817,24 @@ docs/Makefile - docs/reference/Makefile - docs/reference/ibus/ibus-docs.sgml - docs/reference/ibus/Makefile --m4/Makefile -+engine/Makefile - ibus/_config.py - ibus/Makefile - ibus/interface/Makefile --ui/Makefile --ui/gtk3/Makefile -+m4/Makefile -+portal/Makefile - setup/Makefile --bindings/Makefile --bindings/pygobject/Makefile --bindings/vala/Makefile --conf/Makefile --conf/dconf/Makefile --conf/memconf/Makefile -+src/Makefile -+src/ibusversion.h -+src/tests/Makefile - tools/Makefile -+ui/Makefile -+ui/gtk3/Makefile -+util/Makefile -+util/IMdkit/Makefile -+Makefile -+ibus-1.0.pc -+ibus.spec - ]) - - AC_OUTPUT -diff --git a/src/Makefile.am b/src/Makefile.am -index bbaa6c90..578694b5 100644 ---- a/src/Makefile.am -+++ b/src/Makefile.am -@@ -317,11 +317,6 @@ install-data-hook: - rm "$(DESTDIR)$(dictdir)/$$file" || exit $$?; \ - fi; \ - done -- $(MKDIR_P) "$(DESTDIR)$(SYSTEMD_USER_UNIT_DIR)/gnome-session.target.wants/" -- ( \ -- cd "$(DESTDIR)$(SYSTEMD_USER_UNIT_DIR)/gnome-session.target.wants" ; \ -- $(LN_S) -f "../org.freedesktop.IBus.session.GNOME.service" .; \ -- ) - - emoji_parser_SOURCES = \ - emoji-parser.c \ -@@ -388,17 +383,7 @@ clean-local: - $(NULL) - endif - --if ENABLE_SYSTEMD --systemdservice_in_files = org.freedesktop.IBus.session.GNOME.service.in --systemdservice_DATA = $(systemdservice_in_files:.service.in=.service) --systemdservicedir=$(SYSTEMD_USER_UNIT_DIR) -- --org.freedesktop.IBus.session.GNOME.service: org.freedesktop.IBus.session.GNOME.service.in -- $(AM_V_GEN) sed -e "s|\@bindir\@|$(bindir)|" $< > $@.tmp && mv $@.tmp $@ --endif -- - EXTRA_DIST = \ -- org.freedesktop.IBus.session.GNOME.service.in \ - emoji-parser.c \ - ibusversion.h.in \ - ibusmarshalers.list \ -@@ -408,7 +393,6 @@ EXTRA_DIST = \ - $(NULL) - - CLEANFILES += \ -- $(systemdservice_DATA) \ - $(BUILT_SOURCES) \ - stamp-ibusmarshalers.h \ - stamp-ibusenumtypes.h \ --- -2.33.1 - -From 5cfe838715097d61b50da55f80bcff2c698ca885 Mon Sep 17 00:00:00 2001 -From: Changwoo Ryu -Date: Fri, 18 Feb 2022 09:07:02 +0900 -Subject: [PATCH] client/gtk2/ibusimcontext: Fix forward key keycode for GTK4 - -When a keycode is provided (!= 0) for a forwarded key event, convert it to a -GTK keycode before passing it to gtk_im_context_filter_key(). - -Also free GdkKeymapKey after gdk_display_map_keyval() is called. - -BUG=https://github.com/ibus/ibus/issues/2380 -BUG=https://github.com/ibus/ibus/issues/2382 ---- - client/gtk2/ibusimcontext.c | 5 ++++- - 1 file changed, 4 insertions(+), 1 deletion(-) - -diff --git a/client/gtk2/ibusimcontext.c b/client/gtk2/ibusimcontext.c -index c2df3a87..a5e5e792 100644 ---- a/client/gtk2/ibusimcontext.c -+++ b/client/gtk2/ibusimcontext.c -@@ -1945,7 +1945,9 @@ _ibus_context_forward_key_event_cb (IBusInputContext *ibuscontext, - #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) { -+ if (keycode != 0) { -+ keycode += 8; // to GTK keycode -+ } else if (ibusimcontext->client_window) { - GdkDisplay *display = - gtk_widget_get_display (ibusimcontext->client_window); - GdkKeymapKey *keys = NULL; -@@ -1953,6 +1955,7 @@ _ibus_context_forward_key_event_cb (IBusInputContext *ibuscontext, - if (gdk_display_map_keyval (display, keyval, &keys, &n_keys)) { - keycode = keys->keycode; - group = keys->group; -+ g_free (keys); - } else { - g_warning ("Failed to parse keycode from keyval %x", keyval); - } --- -2.33.1 - -From a82bda58a45470c4be0f3db21eaddc73a230807f Mon Sep 17 00:00:00 2001 -From: fujiwarat -Date: Fri, 18 Feb 2022 12:04:09 +0900 -Subject: [PATCH] src/tests: Fix typos - -- test_metas_in location -- Check ibus processes in CI -- Fix libexec path ---- - src/tests/Makefile.am | 8 ++++---- - src/tests/ibus-desktop-testing-autostart | 2 ++ - src/tests/ibus-desktop-testing.desktop.in | 2 +- - 3 files changed, 7 insertions(+), 5 deletions(-) - -diff --git a/src/tests/Makefile.am b/src/tests/Makefile.am -index 7d00f236..f932f18f 100644 ---- a/src/tests/Makefile.am -+++ b/src/tests/Makefile.am -@@ -3,7 +3,7 @@ - # ibus - The Input Bus - # - # Copyright (c) 2007-2015 Peng Huang --# Copyright (c) 2015-2021 Takao Fujiwara -+# Copyright (c) 2015-2022 Takao Fujiwara - # Copyright (c) 2007-2018 Red Hat, Inc. - # - # This library is free software; you can redistribute it and/or -@@ -117,11 +117,11 @@ org.freedesktop.IBus.Desktop.Testing.desktop: ibus-desktop-testing.desktop.in - mv $@.tmp $@ - endif - --$(test_metas): $(test_metas_in) $(test_programs) -+$(test_metas): $(test_metas_in) - f=`echo $@ | sed -e 's/\.test//'`; \ - TEST_EXEC=$(test_execsdir)/$$f; \ -- sed -e "s|@TEST_EXEC[@]|$$TEST_EXEC|g" $(test_metas_in) > $@.tmp; \ -- mv $@.tmp $@; \ -+ sed -e "s|@TEST_EXEC[@]|$$TEST_EXEC|g" $(srcdir)/$(test_metas_in) \ -+ > $@.tmp && mv $@.tmp $@; \ - $(NULL) - - ibus-compose-locales: ibus-compose-locales.in -diff --git a/src/tests/ibus-desktop-testing-autostart b/src/tests/ibus-desktop-testing-autostart -index da22b64e..1e1eb180 100755 ---- a/src/tests/ibus-desktop-testing-autostart -+++ b/src/tests/ibus-desktop-testing-autostart -@@ -29,6 +29,8 @@ pwd - pstree -asp $$ - gsettings list-recursively org.gnome.shell - rpm -q gnome-shell-extension-no-overview gnome-shell gnome-session -+ps -ef | grep ibus | grep -v grep -+ibus address - ' - - if [ $# -gt 0 ] ; then -diff --git a/src/tests/ibus-desktop-testing.desktop.in b/src/tests/ibus-desktop-testing.desktop.in -index fa0c9b40..1b815345 100644 ---- a/src/tests/ibus-desktop-testing.desktop.in -+++ b/src/tests/ibus-desktop-testing.desktop.in -@@ -2,7 +2,7 @@ - Name=IBus Desktop Testing Runner - GenericName=Input Method Desktop Testing Runner - Comment=Test plugin for IBus Desktop Testing --Exec=@ibexecdir@/ibus-desktop-testing-autostart /var/tmp/ibus-ci-autostart.log -+Exec=@libexecdir@/ibus-desktop-testing-autostart /var/tmp/ibus-ci-autostart.log - Terminal=false - Type=Application - Encoding=UTF-8 --- -2.33.1 - -From 19377ad22d8145ea431e5de51f047061c98f8d21 Mon Sep 17 00:00:00 2001 -From: fujiwarat -Date: Tue, 1 Mar 2022 18:26:21 +0900 -Subject: [PATCH] src/ibuscompose: Check algorithm dead key by 9 length - -This change fixes the D-Bus timeout by a long compose preedit text. -check_normalize_nfc() calculates the factorical of the compse preedit -length and assigne the value to an INT variable and it could excceed -the MAX_INT. -Probably I think the length of the compose algorizhm dead key would be -enough 9. I.e. 9! == 46320 <= SHRT_MAX == 32767 - -BUG=https://github.com/ibus/ibus/issues/2385 ---- - src/ibuscomposetable.c | 35 +++++++++++++++++++++++------------ - 1 file changed, 23 insertions(+), 12 deletions(-) - -diff --git a/src/ibuscomposetable.c b/src/ibuscomposetable.c -index 250e0139..387a24a8 100644 ---- a/src/ibuscomposetable.c -+++ b/src/ibuscomposetable.c -@@ -1,7 +1,7 @@ - /* -*- mode: C; c-basic-offset: 4; indent-tabs-mode: nil; -*- */ - /* ibus - The Input Bus - * Copyright (C) 2013-2014 Peng Huang -- * Copyright (C) 2013-2021 Takao Fujiwara -+ * Copyright (C) 2013-2022 Takao Fujiwara - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public -@@ -46,6 +46,7 @@ - #define IBUS_COMPOSE_TABLE_MAGIC "IBusComposeTable" - #define IBUS_COMPOSE_TABLE_VERSION (4) - #define X11_DATADIR X11_DATA_PREFIX "/share/X11/locale" -+#define IBUS_MAX_COMPOSE_ALGORITHM_LEN 9 - - typedef struct { - gunichar *sequence; -@@ -1659,7 +1660,7 @@ ibus_compose_table_compact_check (const IBusComposeTableCompactEx - static gboolean - check_normalize_nfc (gunichar* combination_buffer, int n_compose) - { -- gunichar combination_buffer_temp[IBUS_MAX_COMPOSE_LEN]; -+ gunichar combination_buffer_temp[IBUS_MAX_COMPOSE_ALGORITHM_LEN + 1]; - char *combination_utf8_temp = NULL; - char *nfc_temp = NULL; - int n_combinations; -@@ -1682,7 +1683,7 @@ check_normalize_nfc (gunichar* combination_buffer, int n_compose) - - memcpy (combination_buffer_temp, - combination_buffer, -- IBUS_MAX_COMPOSE_LEN * sizeof (gunichar) ); -+ IBUS_MAX_COMPOSE_ALGORITHM_LEN * sizeof (gunichar) ); - - for (i = 0; i < n_combinations; i++ ) { - g_unicode_canonical_ordering (combination_buffer_temp, n_compose); -@@ -1694,7 +1695,7 @@ check_normalize_nfc (gunichar* combination_buffer, int n_compose) - if (g_utf8_strlen (nfc_temp, -1) == 1) { - memcpy (combination_buffer, - combination_buffer_temp, -- IBUS_MAX_COMPOSE_LEN * sizeof (gunichar) ); -+ IBUS_MAX_COMPOSE_ALGORITHM_LEN * sizeof (gunichar) ); - - g_free (combination_utf8_temp); - g_free (nfc_temp); -@@ -1708,14 +1709,14 @@ check_normalize_nfc (gunichar* combination_buffer, int n_compose) - if (n_compose > 2) { - int j = i % (n_compose - 1) + 1; - int k = (i+1) % (n_compose - 1) + 1; -- if (j >= IBUS_MAX_COMPOSE_LEN) { -- g_warning ("j >= IBUS_MAX_COMPOSE_LEN for " \ -- "combination_buffer_temp"); -+ if (j >= IBUS_MAX_COMPOSE_ALGORITHM_LEN) { -+ g_warning ("j >= %d for combination_buffer_temp", -+ IBUS_MAX_COMPOSE_ALGORITHM_LEN); - break; - } -- if (k >= IBUS_MAX_COMPOSE_LEN) { -- g_warning ("k >= IBUS_MAX_COMPOSE_LEN for " \ -- "combination_buffer_temp"); -+ if (k >= IBUS_MAX_COMPOSE_ALGORITHM_LEN) { -+ g_warning ("k >= %d for combination_buffer_temp", -+ IBUS_MAX_COMPOSE_ALGORITHM_LEN); - break; - } - temp_swap = combination_buffer_temp[j]; -@@ -1737,13 +1738,23 @@ ibus_check_algorithmically (const guint16 *compose_buffer, - - { - int i; -- gunichar combination_buffer[IBUS_MAX_COMPOSE_LEN]; -+ gunichar combination_buffer[IBUS_MAX_COMPOSE_ALGORITHM_LEN + 1]; - char *combination_utf8, *nfc; - - if (output_char) - *output_char = 0; - -- if (n_compose >= IBUS_MAX_COMPOSE_LEN) -+ /* Check the IBUS_MAX_COMPOSE_ALGORITHM_LEN length only here instead of -+ * IBUS_MAX_COMPOSE_LEN length. -+ * Because this API calls check_normalize_nfc() which calculates the factorial -+ * of `n_compose` and assigns the value to `n_combinations`. -+ * I.e. 9! == 40320 <= SHRT_MAX == 32767 -+ * The factorial of exceeding INT_MAX spends a long time in check_normalize_nfc() -+ * and causes a D-Bus timeout between GTK clients and IBusEngineSimple. -+ * Currenlty IBUS_MAX_COMPOSE_LEN is much larger and supports the long compose -+ * sequence however the max 9 would be enough for this mechanical compose. -+ */ -+ if (n_compose > IBUS_MAX_COMPOSE_ALGORITHM_LEN) - return FALSE; - - for (i = 0; i < n_compose && IS_DEAD_KEY (compose_buffer[i]); i++) --- -2.34.1 - -From df664b1f18a9c630ccd884f8ff698abf6cbb1578 Mon Sep 17 00:00:00 2001 -From: fujiwarat -Date: Tue, 1 Mar 2022 19:23:25 +0900 -Subject: [PATCH] src/ibusenginesimple: Support GTK4 coompose file - -Load $XDG_CONFIG_HOME/gtk-4.0/Compose ---- - src/ibusenginesimple.c | 27 +++++++++++++++------------ - 1 file changed, 15 insertions(+), 12 deletions(-) - -diff --git a/src/ibusenginesimple.c b/src/ibusenginesimple.c -index a80e41a5..c57a3ea5 100644 ---- a/src/ibusenginesimple.c -+++ b/src/ibusenginesimple.c -@@ -1448,8 +1448,16 @@ ibus_engine_simple_add_table_by_locale (IBusEngineSimple *simple, - g_free (path); - return retval; - } -- g_free (path); -- path = NULL; -+ g_clear_pointer(&path, g_free); -+ -+ path = g_build_filename (g_get_user_config_dir (), -+ "gtk-4.0", "Compose", NULL); -+ if (g_file_test (path, G_FILE_TEST_EXISTS)) { -+ ibus_engine_simple_add_compose_file (simple, path); -+ g_free (path); -+ return retval; -+ } -+ g_clear_pointer(&path, g_free); - - path = g_build_filename (g_get_user_config_dir (), - "gtk-3.0", "Compose", NULL); -@@ -1458,8 +1466,7 @@ ibus_engine_simple_add_table_by_locale (IBusEngineSimple *simple, - g_free (path); - return retval; - } -- g_free (path); -- path = NULL; -+ g_clear_pointer(&path, g_free); - - home = g_get_home_dir (); - if (home == NULL) -@@ -1471,8 +1478,7 @@ ibus_engine_simple_add_table_by_locale (IBusEngineSimple *simple, - g_free (path); - return retval; - } -- g_free (path); -- path = NULL; -+ g_clear_pointer(&path, g_free); - - #if GLIB_CHECK_VERSION (2, 58, 0) - langs = g_get_language_names_with_category ("LC_CTYPE"); -@@ -1508,8 +1514,7 @@ ibus_engine_simple_add_table_by_locale (IBusEngineSimple *simple, - - if (g_file_test (path, G_FILE_TEST_EXISTS)) - break; -- g_free (path); -- path = NULL; -+ g_clear_pointer(&path, g_free); - } - - #if !GLIB_CHECK_VERSION (2, 58, 0) -@@ -1518,15 +1523,13 @@ ibus_engine_simple_add_table_by_locale (IBusEngineSimple *simple, - - if (path != NULL) - ibus_engine_simple_add_compose_file (simple, path); -- g_free (path); -- path = NULL; -+ g_clear_pointer(&path, g_free); - } else { - path = g_build_filename (X11_DATADIR, locale, "Compose", NULL); - do { - if (g_file_test (path, G_FILE_TEST_EXISTS)) - break; -- g_free (path); -- path = NULL; -+ g_clear_pointer(&path, g_free); - } while (0); - if (path == NULL) - return retval; --- -2.34.1 - -From 5ad3d8d5296cd337d3b41730406680eb9b250f8f Mon Sep 17 00:00:00 2001 -From: fujiwarat -Date: Fri, 4 Mar 2022 20:50:08 +0900 -Subject: [PATCH] ui/gtk3: Use XDG_SESSION_DESKTOP for Plasma desktop - -If ibus-dameon is launched from systemd, XDG_CURRENT_DESKTOP -environment variable could be set after ibus-dameon would be -launched and XDG_CURRENT_DESKTOP could be "(null)". -But XDG_SESSION_DESKTOP can be set with systemd's PAM. ---- - ui/gtk3/panel.vala | 19 +++++++++++++++++-- - 1 file changed, 17 insertions(+), 2 deletions(-) - -diff --git a/ui/gtk3/panel.vala b/ui/gtk3/panel.vala -index ab2005d7..bfd6ef56 100644 ---- a/ui/gtk3/panel.vala -+++ b/ui/gtk3/panel.vala -@@ -3,7 +3,7 @@ - * ibus - The Input Bus - * - * Copyright(c) 2011-2014 Peng Huang -- * Copyright(c) 2015-2020 Takao Fujwiara -+ * Copyright(c) 2015-2022 Takao Fujwiara - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public -@@ -260,8 +260,23 @@ class Panel : IBus.PanelService { - - #if INDICATOR - private static bool is_kde() { -- if (Environment.get_variable("XDG_CURRENT_DESKTOP") == "KDE") -+ unowned string? desktop = -+ Environment.get_variable("XDG_CURRENT_DESKTOP"); -+ if (desktop == "KDE") - return true; -+ /* If ibus-dameon is launched from systemd, XDG_CURRENT_DESKTOP -+ * environment variable could be set after ibus-dameon would be -+ * launched and XDG_CURRENT_DESKTOP could be "(null)". -+ * But XDG_SESSION_DESKTOP can be set with systemd's PAM. -+ */ -+ if (desktop == null || desktop == "(null)") -+ desktop = Environment.get_variable("XDG_SESSION_DESKTOP"); -+ if (desktop == "plasma") -+ return true; -+ if (desktop == null) { -+ warning ("XDG_CURRENT_DESKTOP is not exported in your desktop " + -+ "session."); -+ } - warning ("If you launch KDE5 on xterm, " + - "export XDG_CURRENT_DESKTOP=KDE before launch KDE5."); - return false; --- -2.34.1 - -From faf9f0bbb6edf6ed71bba9dcb314493f6b0276ea Mon Sep 17 00:00:00 2001 -From: fujiwarat -Date: Tue, 1 Mar 2022 19:44:17 +0900 -Subject: [PATCH] client/gtk2: Revert CCedilla change for pt-BR - -gtk_im_context_simple_add_table() is deprecated in GTK4. -I decide to delete gtk_im_context_simple_add_table() here because -the change 03c9e591430c62354bbf26ef7bd4a2e6acfb7c8f is no longer needed -because IBusEngineSimple has implemented to load pt_br compose key -by locale - -BUG=chromium-os:11421 -BUG=http://codereview.appspot.com/3989060 ---- - client/gtk2/ibusimcontext.c | 33 +-------------------------------- - 1 file changed, 1 insertion(+), 32 deletions(-) - -diff --git a/client/gtk2/ibusimcontext.c b/client/gtk2/ibusimcontext.c -index a5e5e792..e314ae98 100644 ---- a/client/gtk2/ibusimcontext.c -+++ b/client/gtk2/ibusimcontext.c -@@ -2,7 +2,7 @@ - /* vim:set et sts=4: */ - /* ibus - The Input Bus - * Copyright (C) 2008-2013 Peng Huang -- * Copyright (C) 2015-2021 Takao Fujiwara -+ * Copyright (C) 2015-2022 Takao Fujiwara - * Copyright (C) 2008-2021 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or -@@ -874,33 +874,6 @@ ibus_im_context_class_fini (IBusIMContextClass *class) - g_bus_unwatch_name (_daemon_name_watch_id); - } - --/* Copied from gtk+2.0-2.20.1/modules/input/imcedilla.c to fix crosbug.com/11421. -- * Overwrite the original Gtk+'s compose table in gtk+-2.x.y/gtk/gtkimcontextsimple.c. */ -- --/* The difference between this and the default input method is the handling -- * of C+acute - this method produces C WITH CEDILLA rather than C WITH ACUTE. -- * For languages that use CCedilla and not acute, this is the preferred mapping, -- * and is particularly important for pt_BR, where the us-intl keyboard is -- * used extensively. -- */ --static guint16 cedilla_compose_seqs[] = { --#ifdef DEPRECATED_GDK_KEYSYMS -- GDK_dead_acute, GDK_C, 0, 0, 0, 0x00C7, /* LATIN_CAPITAL_LETTER_C_WITH_CEDILLA */ -- GDK_dead_acute, GDK_c, 0, 0, 0, 0x00E7, /* LATIN_SMALL_LETTER_C_WITH_CEDILLA */ -- GDK_Multi_key, GDK_apostrophe, GDK_C, 0, 0, 0x00C7, /* LATIN_CAPITAL_LETTER_C_WITH_CEDILLA */ -- GDK_Multi_key, GDK_apostrophe, GDK_c, 0, 0, 0x00E7, /* LATIN_SMALL_LETTER_C_WITH_CEDILLA */ -- GDK_Multi_key, GDK_C, GDK_apostrophe, 0, 0, 0x00C7, /* LATIN_CAPITAL_LETTER_C_WITH_CEDILLA */ -- GDK_Multi_key, GDK_c, GDK_apostrophe, 0, 0, 0x00E7, /* LATIN_SMALL_LETTER_C_WITH_CEDILLA */ --#else -- GDK_KEY_dead_acute, GDK_KEY_C, 0, 0, 0, 0x00C7, /* LATIN_CAPITAL_LETTER_C_WITH_CEDILLA */ -- GDK_KEY_dead_acute, GDK_KEY_c, 0, 0, 0, 0x00E7, /* LATIN_SMALL_LETTER_C_WITH_CEDILLA */ -- GDK_KEY_Multi_key, GDK_KEY_apostrophe, GDK_KEY_C, 0, 0, 0x00C7, /* LATIN_CAPITAL_LETTER_C_WITH_CEDILLA */ -- GDK_KEY_Multi_key, GDK_KEY_apostrophe, GDK_KEY_c, 0, 0, 0x00E7, /* LATIN_SMALL_LETTER_C_WITH_CEDILLA */ -- GDK_KEY_Multi_key, GDK_KEY_C, GDK_KEY_apostrophe, 0, 0, 0x00C7, /* LATIN_CAPITAL_LETTER_C_WITH_CEDILLA */ -- GDK_KEY_Multi_key, GDK_KEY_c, GDK_KEY_apostrophe, 0, 0, 0x00E7, /* LATIN_SMALL_LETTER_C_WITH_CEDILLA */ --#endif --}; -- - static void - ibus_im_context_init (GObject *obj) - { -@@ -936,10 +909,6 @@ ibus_im_context_init (GObject *obj) - - // Create slave im context - ibusimcontext->slave = gtk_im_context_simple_new (); -- gtk_im_context_simple_add_table (GTK_IM_CONTEXT_SIMPLE (ibusimcontext->slave), -- cedilla_compose_seqs, -- 4, -- G_N_ELEMENTS (cedilla_compose_seqs) / (4 + 2)); - - g_signal_connect (ibusimcontext->slave, - "commit", --- -2.34.1 -