Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package ibus for openSUSE:Factory checked in at 2021-07-02 13:26:35 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/ibus (Old) and /work/SRC/openSUSE:Factory/.ibus.new.2625 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Package is "ibus" Fri Jul 2 13:26:35 2021 rev:109 rq:903172 version:1.5.24 Changes: -------- --- /work/SRC/openSUSE:Factory/ibus/ibus.changes 2021-03-02 15:17:02.461603066 +0100 +++ /work/SRC/openSUSE:Factory/.ibus.new.2625/ibus.changes 2021-07-02 13:26:53.741026597 +0200 @@ -1,0 +2,7 @@ +Wed Jun 30 05:36:01 UTC 2021 - Hillwood Yang <hillwood@opensuse.org> + +- Rollback ibus-socket-name-compatibility.patch for Leap 15. Qt5 does + not be updated to the new version or patch for ibus on Leap 15. + It still needs this patch on leap 15 (boo#1187202). + +------------------------------------------------------------------- New: ---- ibus-socket-name-compatibility.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ ibus.spec ++++++ --- /var/tmp/diff_new_pack.2CHCnB/_old 2021-07-02 13:26:54.369021725 +0200 +++ /var/tmp/diff_new_pack.2CHCnB/_new 2021-07-02 13:26:54.373021694 +0200 @@ -59,6 +59,11 @@ # PATCH-FIX-SLE ibus-disable-engines-preload-in-GNOME.patch bnc#1036729 qzhao@suse.com # Disable ibus engines preload in GNOME for These works are handled by gnome-shell. Patch12: ibus-disable-engines-preload-in-GNOME.patch +# PATCH-FIX-UPSTREAM ibus-socket-name-compatibility.patch bsc#1171442, gh#ibus/ibus#2195 qkzhu@suse +# Compatibility workaround for ibus-use-wayland-display-for-socket-name.patch +# Qt5 does not be update to the new version and patch for ibus on Leap 15, +# it still needs this patch on leap 15. (boo#1187202) +Patch15: ibus-socket-name-compatibility.patch BuildRequires: fdupes BuildRequires: gettext-devel BuildRequires: gobject-introspection-devel >= 0.9.6 @@ -193,6 +198,9 @@ %patch10 -p1 %patch11 -p1 %patch12 -p1 +%if 0%{?suse_version} <= 1500 +%patch15 -p1 +%endif %build autoreconf -fi ++++++ ibus-socket-name-compatibility.patch ++++++ This writes ~/.config/ibus/bus/SOCKETPATH with the old name. Author: Changwoo Ryu Last-Update: 2020-05-01 Bug: https://bugreports.qt.io/browse/QTBUG-82910 Forwarded: not-needed, workaround --- a/src/ibusshare.c +++ b/src/ibusshare.c @@ -90,79 +90,132 @@ return g_getenv("IBUS_SESSION_ID"); } +static const gchar *ibus_get_socket_path_internal (gboolean compat, gchar *client_display); + const gchar * ibus_get_socket_path (void) { static gchar *path = NULL; if (path == NULL) { - gchar *hostname = "unix"; - gchar *display; - gchar *displaynumber = "0"; - /* gchar *screennumber = "0"; */ - gboolean is_wayland = FALSE; - gchar *p; - - path = g_strdup (g_getenv ("IBUS_ADDRESS_FILE")); - if (path != NULL) { - return path; + path = ibus_get_socket_path_internal (FALSE, NULL); + } + return path; +} + +static const gchar * +ibus_get_socket_path_x11_compat (void) +{ + static gchar *path = NULL; + if (path == NULL) + path = ibus_get_socket_path_internal (TRUE, NULL); + return path; +} + +static const gchar * +ibus_get_socket_path_gnome_xwayland_compat (void) +{ + static gchar *path = NULL; + if (path == NULL) { + gint setup_display_number; + gchar *client_display; + gchar **tokens; + + tokens = g_strsplit (ibus_get_socket_path_x11_compat (), "-", 3); + if (tokens[0] != NULL && tokens[1] != NULL && tokens[2] != NULL) { + setup_display_number = g_strtod(tokens[2], NULL); + if (setup_display_number > 0) { + client_display = g_strdup_printf (":%d", setup_display_number - 1); + path = ibus_get_socket_path_internal (TRUE, client_display); + } } - if (_display == NULL) { + g_strfreev (tokens); + } + return path; +} + +static const gchar * +ibus_get_socket_path_internal (gboolean compat, gchar *client_display) +{ + gchar *path = NULL; + + gchar *hostname = "unix"; + gchar *display; + gchar *displaynumber = "0"; + /* gchar *screennumber = "0"; */ + gboolean is_wayland = FALSE; + gchar *p; + + path = g_strdup (g_getenv ("IBUS_ADDRESS_FILE")); + if (path != NULL) { + return path; + } + + if (_display == NULL) { + if (compat) { + if (client_display == NULL) + display = g_strdup (g_getenv ("DISPLAY")); + else + display = client_display; + } else { display = g_strdup (g_getenv ("WAYLAND_DISPLAY")); if (display) is_wayland = TRUE; - else + else if (client_display == NULL) display = g_strdup (g_getenv ("DISPLAY")); + else + display = client_display; } - else { - display = g_strdup (_display); - } - - if (is_wayland) { - displaynumber = display; - } else if (display) { - p = display; - hostname = display; - for (; *p != ':' && *p != '\0'; p++); + } + else { + display = g_strdup (_display); + } - if (*p == ':') { - *p = '\0'; - p++; - displaynumber = p; - } + if (is_wayland) { + displaynumber = display; + } else if (display) { + p = display; + hostname = display; + for (; *p != ':' && *p != '\0'; p++); + + if (*p == ':') { + *p = '\0'; + p++; + displaynumber = p; + } - for (; *p != '.' && *p != '\0'; p++); + for (; *p != '.' && *p != '\0'; p++); - if (*p == '.') { - *p = '\0'; - p++; - /* Do not use screennumber - screennumber = p; */ - } + if (*p == '.') { + *p = '\0'; + p++; + /* Do not use screennumber + screennumber = p; */ } + } - if (hostname[0] == '\0') - hostname = "unix"; + if (hostname[0] == '\0') + hostname = "unix"; + + p = g_strdup_printf ("%s-%s-%s", + ibus_get_local_machine_id (), + hostname, + displaynumber); + /* Qt5 IBus module has a hard-coded path and we cannot change this + * for the back compatibility. + * XDG_RUNTIME_DIR is not useful because it's generated by + * login but not `su` command and ibus-daemon can be run with `su` + * and we may change the path to XDG_CACHE_HOME in the future. + */ + path = g_build_filename (g_get_user_config_dir (), + "ibus", + "bus", + p, + NULL); + g_free (p); + g_free (display); - p = g_strdup_printf ("%s-%s-%s", - ibus_get_local_machine_id (), - hostname, - displaynumber); - /* Qt5 IBus module has a hard-coded path and we cannot change this - * for the back compatibility. - * XDG_RUNTIME_DIR is not useful because it's generated by - * login but not `su` command and ibus-daemon can be run with `su` - * and we may change the path to XDG_CACHE_HOME in the future. - */ - path = g_build_filename (g_get_user_config_dir (), - "ibus", - "bus", - p, - NULL); - g_free (p); - g_free (display); - } return path; } @@ -248,19 +301,45 @@ return address; } +static void ibus_write_address_internal (const gchar *address, const gchar *socket_path); + void ibus_write_address (const gchar *address) { + const gchar *socket_path; + const gchar *socket_path_compat; + + socket_path = ibus_get_socket_path (); + ibus_write_address_internal (address, socket_path); + + if (g_getenv ("WAYLAND_DISPLAY") != NULL) { + socket_path_compat = ibus_get_socket_path_x11_compat (); + ibus_write_address_internal (address, socket_path_compat); + + if (g_getenv ("GNOME_SETUP_DISPLAY") != NULL && + strcmp (g_getenv ("GNOME_SETUP_DISPLAY"), g_getenv ("DISPLAY")) == 0) { + /* Running from gnome-shell with the setup display; write the socket + * address to an additional path for X11 clients */ + socket_path_compat = ibus_get_socket_path_gnome_xwayland_compat (); + if (socket_path_compat != NULL) + ibus_write_address_internal (address, socket_path_compat); + } + } +} + +static void +ibus_write_address_internal (const gchar *address, const gchar *socket_path) +{ FILE *pf; gchar *path; g_return_if_fail (address != NULL); - path = g_path_get_dirname (ibus_get_socket_path ()); + path = g_path_get_dirname (socket_path); g_mkdir_with_parents (path, 0700); g_free (path); - g_unlink (ibus_get_socket_path ()); - pf = fopen (ibus_get_socket_path (), "w"); + g_unlink (socket_path); + pf = fopen (socket_path, "w"); g_return_if_fail (pf != NULL); fprintf (pf,