From 9f9e09d31a5a3e392272a1568905f2a9236f3187 Mon Sep 17 00:00:00 2001 From: Takao Fujiwara Date: Dec 24 2019 06:54:54 +0000 Subject: Fix to connect button-press-event for Hangul Delete a previous workaround targeted to firefox only for Hangul --- diff --git a/ibus-HEAD.patch b/ibus-HEAD.patch index 632c253..644bb67 100644 --- a/ibus-HEAD.patch +++ b/ibus-HEAD.patch @@ -3027,28 +3027,21 @@ index 5e3457ba..ac5de809 100644 -- 2.21.0 -From 7830673205140e901df354b80a00254f7c08f30d Mon Sep 17 00:00:00 2001 +From 0544e4b9c68c43d41c18c73b6e5a394fead1321a Mon Sep 17 00:00:00 2001 From: fujiwarat -Date: Wed, 11 Dec 2019 19:10:24 +0900 -Subject: [PATCH] client/gtk2: Add IBUS_AUTO_PREEDIT_COMMIT_APPS env for - Hangul +Date: Tue, 24 Dec 2019 12:23:27 +0900 +Subject: [PATCH] client/gtk2: Fix to connect button-press-event signal -Firefox no longer connect "button-press-event" but uses -GtkGestureMultiPress in GtkWindowPrivate and connects "pressed" -instead and do not propagate the event with "button-press-event". - -We don't commit the preedit text in the client here for the -workaround and let firefox commit the preedit text to avoid the -double preedit text with mouse click. +IBus clients do not connect button-press-event in some conditions +and it will be fixed. BUG=https://github.com/ibus/ibus/issues/1980 --- - client/gtk2/ibusimcontext.c | 32 ++++++++++++++++++++++++++++---- - configure.ac | 13 ++++++++++++- - 2 files changed, 40 insertions(+), 5 deletions(-) + client/gtk2/ibusimcontext.c | 19 ++++++++++++++----- + 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/client/gtk2/ibusimcontext.c b/client/gtk2/ibusimcontext.c -index ac5de809..df78ce48 100644 +index ac5de809..6b5ab04f 100644 --- a/client/gtk2/ibusimcontext.c +++ b/client/gtk2/ibusimcontext.c @@ -2,8 +2,8 @@ @@ -3062,94 +3055,69 @@ index ac5de809..df78ce48 100644 * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public -@@ -97,6 +97,9 @@ static gboolean _use_sync_mode = FALSE; - static const gchar *_discard_password_apps = ""; - static gboolean _use_discard_password = FALSE; +@@ -73,7 +73,7 @@ struct _IBusIMContext { + GCancellable *cancellable; + GQueue *events_queue; -+static const gchar *_auto_commit_apps = AUTO_PREEDIT_COMMIT_APPS; -+static gboolean _use_auto_commit = FALSE; -+ - static GtkIMContext *_focus_im_context = NULL; - static IBusInputContext *_fake_context = NULL; - static GdkWindow *_input_window = NULL; -@@ -636,6 +639,7 @@ ibus_im_context_class_init (IBusIMContextClass *class) - !(ENABLE_SNOOPER)); - _use_sync_mode = _get_boolean_env ("IBUS_ENABLE_SYNC_MODE", FALSE); - _use_discard_password = _get_boolean_env ("IBUS_DISCARD_PASSWORD", FALSE); -+ _use_auto_commit = _get_boolean_env ("IBUS_AUTO_PREEDIT_COMMIT", FALSE); - - #define CHECK_APP_IN_CSV_ENV_VARIABLES(retval, \ - env_apps, \ -@@ -672,6 +676,12 @@ ibus_im_context_class_init (IBusIMContextClass *class) - _discard_password_apps, - TRUE); - } -+ if (!_use_auto_commit) { -+ CHECK_APP_IN_CSV_ENV_VARIABLES (_use_auto_commit, -+ IBUS_AUTO_PREEDIT_COMMIT_APPS, -+ _auto_commit_apps, -+ TRUE); -+ } +- gboolean use_button_press_event; ++ gboolean use_button_press_event; + }; - #undef CHECK_APP_IN_CSV_ENV_VARIABLES - -@@ -896,9 +906,23 @@ ibus_im_context_clear_preedit_text (IBusIMContext *ibusimcontext) - IBUS_ENGINE_PREEDIT_CLEAR, - ibusimcontext); - if (preedit_string) { -- g_signal_emit (ibusimcontext, _signal_commit_id, 0, preedit_string); -+ /* Firefox no longer connect "button-press-event" but uses -+ * GtkGestureMultiPress in GtkWindowPrivate and connects "pressed" -+ * instead and do not propagate the event with "button-press-event". -+ * We don't commit the preedit text in the client here for the -+ * workaround and let firefox commit the preedit text to avoid the -+ * double preedit text with mouse click. -+ * After we fix the GTK reset signal to always emit the reset signal -+ * with mouse click, also will try to fix the Firefox -+ * reset signal so that ibus clients receive the signal before Firefox -+ * composes the preedit text because the options of commit, clear, -+ * keep depends on each IBus engine but Firefox cannot know each engine. -+ */ -+ if (!_use_auto_commit) { -+ g_signal_emit (ibusimcontext, _signal_commit_id, 0, preedit_string); -+ _request_surrounding_text (ibusimcontext); -+ } - g_free (preedit_string); -- _request_surrounding_text (ibusimcontext); + struct _IBusIMContextClass { +@@ -1125,6 +1125,10 @@ ibus_im_context_get_preedit_string (GtkIMContext *context, + + + #if !GTK_CHECK_VERSION (3, 93, 0) ++/* Use the button-press-event signal until GtkIMContext always emits the reset ++ * signal. ++ * https://gitlab.gnome.org/GNOME/gtk/merge_requests/460 ++ */ + static gboolean + ibus_im_context_button_press_event_cb (GtkWidget *widget, + GdkEventButton *event, +@@ -1157,11 +1161,13 @@ _connect_button_press_event (IBusIMContext *ibusimcontext, + "button-press-event", + G_CALLBACK (ibus_im_context_button_press_event_cb), + ibusimcontext); ++ ibusimcontext->use_button_press_event = TRUE; + } else { + g_signal_handlers_disconnect_by_func ( + widget, + G_CALLBACK (ibus_im_context_button_press_event_cb), + ibusimcontext); ++ ibusimcontext->use_button_press_event = FALSE; + } } } - -diff --git a/configure.ac b/configure.ac -index ab74a380..12642834 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -540,6 +540,16 @@ AC_ARG_WITH(no-snooper-apps, - AC_DEFINE_UNQUOTED(NO_SNOOPER_APPS, "$NO_SNOOPER_APPS", - [Does not enbale keyboard snooper in those applications]) - -+# Option for auto-preedit-commit applications. -+AC_ARG_WITH(auto-preedit-commit-apps, -+ AS_HELP_STRING([--with-auto-preedit-commit-apps[=regex1,regex2]], -+ [Applications have auto-commit of preedit with mouse click (like: .*chrome.*,firefox.*)]), -+ AUTO_PREEDIT_COMMIT_APPS=$with_auto_preedit_commit_apps, -+ AUTO_PREEDIT_COMMIT_APPS=[firefox.*,.*chrome.*,.*chromium.*] -+) -+AC_DEFINE_UNQUOTED(AUTO_PREEDIT_COMMIT_APPS, "$AUTO_PREEDIT_COMMIT_APPS", -+ [Applications have auto-commit of preedit with mouse click]) -+ - # GNOME 3 uses the theme's icon. - AC_ARG_WITH(panel-icon-keyboard, - AS_HELP_STRING([--with-panel-icon-keyboard[=icon_name]], -@@ -812,7 +822,8 @@ Build options: - Build UI $enable_ui - Build engine $enable_engine - Enable key snooper $enable_key_snooper -- No snooper regexes "$NO_SNOOPER_APPS" -+ No snooper apps "$NO_SNOOPER_APPS" -+ Auto preedit commit apps "$AUTO_PREEDIT_COMMIT_APPS" - Panel icon "$IBUS_ICON_KEYBOARD" - Enable surrounding-text $enable_surrounding_text - Enable Emoji dict $enable_emoji_dict +@@ -1180,6 +1186,8 @@ ibus_im_context_set_client_window (GtkIMContext *context, GdkWindow *client) + #if !GTK_CHECK_VERSION (3, 93, 0) + if (ibusimcontext->use_button_press_event) + _connect_button_press_event (ibusimcontext, FALSE); ++#else ++ ibusimcontext->use_button_press_event = TRUE; + #endif + g_object_unref (ibusimcontext->client_window); + ibusimcontext->client_window = NULL; +@@ -1188,8 +1196,10 @@ 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 (ibusimcontext->use_button_press_event) ++ if (!ibusimcontext->use_button_press_event) + _connect_button_press_event (ibusimcontext, TRUE); ++#else ++ ibusimcontext->use_button_press_event = FALSE; + #endif + } + if (ibusimcontext->slave) +@@ -1660,7 +1670,6 @@ _ibus_context_update_preedit_text_cb (IBusInputContext *ibuscontext, + #if !GTK_CHECK_VERSION (3, 93, 0) + if (ibusimcontext->client_window) { + _connect_button_press_event (ibusimcontext, TRUE); +- ibusimcontext->use_button_press_event = TRUE; + } + #else + ibusimcontext->use_button_press_event = TRUE; -- 2.21.0 diff --git a/ibus.spec b/ibus.spec index c4fe6f6..fa8d42f 100644 --- a/ibus.spec +++ b/ibus.spec @@ -35,7 +35,7 @@ Name: ibus Version: 1.5.21 -Release: 5%{?dist} +Release: 6%{?dist} Summary: Intelligent Input Bus for Linux OS License: LGPLv2+ URL: https://github.com/ibus/%name/wiki @@ -464,9 +464,13 @@ dconf update || : %{_datadir}/installed-tests/ibus %changelog +* Tue Dec 24 2019 Takao Fujiwara - 1.5.21-6 +- Fix to connect button-press-event for Hangul +- Delete a previous workaround targeted to firefox only for Hangul + * Wed Dec 11 2019 Takao Fujiwara - 1.5.21-5 - Add RHEL code reviews -- Fix Hangul preedit with mouse click for RHEL 8 +- Fix Hangul preedit with mouse click * Mon Nov 18 2019 Takao Fujiwara - 1.5.21-4 - Replace push with cd for Posix SH