public inbox for git-commits@fedoraproject.org
help / color / mirror / Atom feed
* [rpms/ibus] autotool: Enable sync process in GTK4
@ 2026-05-31  2:07 Takao Fujiwara
  0 siblings, 0 replies; only message in thread
From: Takao Fujiwara @ 2026-05-31  2:07 UTC (permalink / raw)
  To: git-commits

A new commit has been pushed.

Repo   : rpms/ibus
Branch : autotool
Commit : 07c6d0a5df5a94560e3e6d6d1f499c68ea28c8d4
Author : Takao Fujiwara <tfujiwar@redhat.com>
Date   : 2021-08-09T13:27:50+09:00
Stats  : +222/-1 in 2 file(s)
URL    : https://src.fedoraproject.org/rpms/ibus/c/07c6d0a5df5a94560e3e6d6d1f499c68ea28c8d4?branch=autotool

Log:
Enable sync process in GTK4

---
diff --git a/ibus-HEAD.patch b/ibus-HEAD.patch
index 362ebb1..0b56af7 100644
--- a/ibus-HEAD.patch
+++ b/ibus-HEAD.patch
@@ -6037,3 +6037,221 @@ index 0ef72c03..c1016703 100755
 -- 
 2.28.0
 
+From a823161768c8f6916dbdebe73842a9fc04521369 Mon Sep 17 00:00:00 2001
+From: fujiwarat <takao.fujiwara1@gmail.com>
+Date: Mon, 9 Aug 2021 12:36:40 +0900
+Subject: [PATCH] client/gtk2/ibusimcontext: Enable sync process in GTK4
+
+gtk_im_context_filter_key() does not forward control keys likes
+BackSpace, Return and change the process mode to the synchronization.
+
+BUG=https://gitlab.gnome.org/GNOME/gtk/-/issues/3465
+---
+ client/gtk2/ibusimcontext.c | 65 +++++++++++++++++++++++--------------
+ 1 file changed, 41 insertions(+), 24 deletions(-)
+
+diff --git a/client/gtk2/ibusimcontext.c b/client/gtk2/ibusimcontext.c
+index e7ce5363..da9a402f 100644
+--- a/client/gtk2/ibusimcontext.c
++++ b/client/gtk2/ibusimcontext.c
+@@ -110,13 +110,15 @@ static guint    _signal_preedit_end_id = 0;
+ static guint    _signal_delete_surrounding_id = 0;
+ static guint    _signal_retrieve_surrounding_id = 0;
+ 
+-#if !GTK_CHECK_VERSION (3, 98, 4)
++#if GTK_CHECK_VERSION (3, 98, 4)
++static gboolean _use_sync_mode = TRUE;
++#else
+ static const gchar *_no_snooper_apps = NO_SNOOPER_APPS;
+ static gboolean _use_key_snooper = ENABLE_SNOOPER;
+ static guint    _key_snooper_id = 0;
+-#endif
+ 
+ static gboolean _use_sync_mode = FALSE;
++#endif
+ 
+ static const gchar *_discard_password_apps  = "";
+ static gboolean _use_discard_password = FALSE;
+@@ -767,11 +769,13 @@ ibus_im_context_class_init (IBusIMContextClass *class)
+         g_signal_lookup ("retrieve-surrounding", G_TYPE_FROM_CLASS (class));
+     g_assert (_signal_retrieve_surrounding_id != 0);
+ 
+-#if !GTK_CHECK_VERSION (3, 98, 4)
++#if GTK_CHECK_VERSION (3, 98, 4)
++    _use_sync_mode = _get_boolean_env ("IBUS_ENABLE_SYNC_MODE", TRUE);
++#else
+     _use_key_snooper = !_get_boolean_env ("IBUS_DISABLE_SNOOPER",
+                                           !(ENABLE_SNOOPER));
+-#endif
+     _use_sync_mode = _get_boolean_env ("IBUS_ENABLE_SYNC_MODE", FALSE);
++#endif
+     _use_discard_password = _get_boolean_env ("IBUS_DISCARD_PASSWORD", FALSE);
+ 
+ #define CHECK_APP_IN_CSV_ENV_VARIABLES(retval,                          \
+@@ -1434,6 +1438,9 @@ static gboolean
+ _set_cursor_location_internal (IBusIMContext *ibusimcontext)
+ {
+     GdkRectangle area;
++#if GTK_CHECK_VERSION (3, 98, 4)
++    GtkWidget *root;
++#endif
+ 
+     if(ibusimcontext->client_window == NULL ||
+        ibusimcontext->ibuscontext == NULL) {
+@@ -1442,8 +1449,27 @@ _set_cursor_location_internal (IBusIMContext *ibusimcontext)
+ 
+     area = ibusimcontext->cursor_area;
+ 
+-#if !GTK_CHECK_VERSION (3, 98, 4)
+ #ifdef GDK_WINDOWING_WAYLAND
++#if GTK_CHECK_VERSION (3, 98, 4)
++    root = GTK_WIDGET (gtk_widget_get_root (ibusimcontext->client_window));
++     /* FIXME: GTK_STYLE_CLASS_TITLEBAR is available in GTK3 but not GTK4.
++      * gtk_css_boxes_get_content_rect() is available in GTK4 but it's an
++      * internal API and calculate the window edge 32 in GTK3.
++      */
++    area.y += 32;
++    area.width = 50; /* FIXME: Why 50 meets the cursor position? */
++    area.height = gtk_widget_get_height (root);
++    area.height += 32;
++    if (GDK_IS_WAYLAND_DISPLAY (gdk_display_get_default ())) {
++        ibus_input_context_set_cursor_location_relative (
++            ibusimcontext->ibuscontext,
++            area.x,
++            area.y,
++            area.width,
++            area.height);
++        return FALSE;
++    }
++#else
+     if (GDK_IS_WAYLAND_DISPLAY (gdk_display_get_default ())) {
+         gdouble px, py;
+         GdkWindow *parent;
+@@ -1469,23 +1495,20 @@ _set_cursor_location_internal (IBusIMContext *ibusimcontext)
+ #endif
+ #endif
+ 
+-    if (area.x == -1 && area.y == -1 && area.width == 0 && area.height == 0) {
+ #if GTK_CHECK_VERSION (3, 98, 4)
+-        area.x = 0;
+-        area.y += gtk_widget_get_height (ibusimcontext->client_window);
+ #elif GTK_CHECK_VERSION (2, 91, 0)
+-        area.x = 0;
+-        area.y += gdk_window_get_height (ibusimcontext->client_window);
++    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;
+         gdk_drawable_get_size (ibusimcontext->client_window, &w, &h);
+         area.y += h;
+         area.x = 0;
+-#endif
+     }
++#endif
+ 
+ #if GTK_CHECK_VERSION (3, 98, 4)
+-#ifdef GDK_WINDOWING_X11
++#if defined(GDK_WINDOWING_X11)
+     GdkDisplay *display = gtk_widget_get_display (ibusimcontext->client_window);
+     if (GDK_IS_X11_DISPLAY (display)) {
+         Display *xdisplay = gdk_x11_display_get_xdisplay (display);
+@@ -1505,21 +1528,10 @@ _set_cursor_location_internal (IBusIMContext *ibusimcontext)
+         XGetWindowAttributes (xdisplay, window, &xwa);
+         area.x = x - xwa.x + area.x;
+         area.y = y - xwa.y + area.y;
+-        area.width = xwa.width;
++        area.width = 50; /* FIXME: Why 50 meets the cursor position? */
+         area.height = xwa.height;
+     }
+ #endif
+-#elif GTK_CHECK_VERSION (3, 93, 0)
+-    {
+-        GtkNative *native = gtk_widget_get_native (
+-                ibusimcontext->client_window);
+-        GdkSurface *surface = gtk_native_get_surface (native);
+-        int root_x = 0;
+-        int root_y = 0;
+-        gdk_surface_get_position (surface, &root_x, &root_y);
+-        area.x += root_x;
+-        area.y += root_y;
+-    }
+ #else
+     gdk_window_get_root_coords (ibusimcontext->client_window,
+                                 area.x, area.y,
+@@ -1541,12 +1553,17 @@ ibus_im_context_set_cursor_location (GtkIMContext *context, GdkRectangle *area)
+ 
+     IBusIMContext *ibusimcontext = IBUS_IM_CONTEXT (context);
+ 
++#if !GTK_CHECK_VERSION (3, 93, 0)
++    /* The area is the relative coordinates and this has to get the absolute
++     * ones in _set_cursor_location_internal() since GTK 4.0.
++     */
+     if (ibusimcontext->cursor_area.x == area->x &&
+         ibusimcontext->cursor_area.y == area->y &&
+         ibusimcontext->cursor_area.width == area->width &&
+         ibusimcontext->cursor_area.height == area->height) {
+         return;
+     }
++#endif
+     ibusimcontext->cursor_area = *area;
+     _set_cursor_location_internal (ibusimcontext);
+     gtk_im_context_set_cursor_location (ibusimcontext->slave, area);
+-- 
+2.28.0
+
+From 943d37444d9cc0881cb5fff87bdd4b9efd5abdb4 Mon Sep 17 00:00:00 2001
+From: fujiwarat <takao.fujiwara1@gmail.com>
+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
+

diff --git a/ibus.spec b/ibus.spec
index 4ba4a52..6c5b2fc 100644
--- a/ibus.spec
+++ b/ibus.spec
@@ -38,7 +38,7 @@
 
 Name:           ibus
 Version:        1.5.24
-Release:        12%{?dist}
+Release:        13%{?dist}
 Summary:        Intelligent Input Bus for Linux OS
 License:        LGPLv2+
 URL:            https://github.com/ibus/%name/wiki
@@ -510,6 +510,9 @@ dconf update || :
 %{_datadir}/installed-tests/ibus
 
 %changelog
+* Mon Aug 09 2021 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.24-13
+- Enable sync process in GTK4
+
 * Mon Jul 26 2021 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.24-12
 - Search language name in engine list in ibus-setup
 - Set Multi_key to 0xB7 in compose preedit

^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2026-05-31  2:07 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-05-31  2:07 [rpms/ibus] autotool: Enable sync process in GTK4 Takao Fujiwara

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox