Resolves: #2076596 Disable XKB engines in Plasma Wayland

This commit is contained in:
Takao Fujiwara 2022-04-20 20:05:24 +09:00
parent dfb5d9acdb
commit b42011fc2a
2 changed files with 248 additions and 1 deletions

View File

@ -511,3 +511,246 @@ index 48528326..6b208345 100755
--
2.34.1
From b024ea8fcee6fe1a20570a6f80cc4f9f8f420706 Mon Sep 17 00:00:00 2001
From: fujiwarat <takao.fujiwara1@gmail.com>
Date: Wed, 20 Apr 2022 19:36:10 +0900
Subject: [PATCH] ui/gtk3: Disable XKB engines in Plasma Wayland
Currently ibus-ui-gtk3 runs the setxkbmap command internally to set
the XKB keymaps from XKB engines but setxkbmap does not work in Wayland
session.
The IBus XKB engines are disabled at the moment in Plamsa Wayland
and ibus-ui-gtk3 asks users to use systemsettings5.
Will use libinput and libxkbcommon later but it would be better
to implement IBus in Plamsa Wayland compositor.
BUG=rhbz#2076596
---
configure.ac | 16 ++++++++++
ui/gtk3/Makefile.am | 17 ++++++++++-
ui/gtk3/panel.vala | 74 +++++++++++++++++++++++++++++++++++++++++----
3 files changed, 100 insertions(+), 7 deletions(-)
diff --git a/configure.ac b/configure.ac
index a3cdb2da..79b9c11a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -636,6 +636,21 @@ if test x"$enable_engine" = x"yes"; then
enable_engine="yes (enabled, use --disable-engine to disable)"
fi
+# --disable-libnotify
+AC_ARG_ENABLE(libnotify,
+ AS_HELP_STRING([--disable-libnotify],
+ [Disable to link libnotify]),
+ [enable_libnotify=$enableval],
+ [enable_libnotify=yes]
+)
+AM_CONDITIONAL([ENABLE_LIBNOTIFY], [test x"$enable_libnotify" = x"yes"])
+if test x"$enable_libnotify" = x"yes"; then
+ PKG_CHECK_MODULES(LIBNOTIFY, [
+ libnotify >= 0.7
+ ])
+ enable_libnotify="yes (enabled, use --disable-libnotify to disable)"
+fi
+
PKG_CHECK_MODULES(XTEST,
[x11 xtst],
[enable_xtest=yes],
@@ -871,6 +886,7 @@ Build options:
No snooper regexes "$NO_SNOOPER_APPS"
Panel icon "$IBUS_ICON_KEYBOARD"
Enable surrounding-text $enable_surrounding_text
+ Enable libnotify $enable_libnotify
Enable Emoji dict $enable_emoji_dict
Unicode Emoji directory $UNICODE_EMOJI_DIR
CLDR annotation directory $EMOJI_ANNOTATION_DIR
diff --git a/ui/gtk3/Makefile.am b/ui/gtk3/Makefile.am
index ab379328..2a9cabde 100644
--- a/ui/gtk3/Makefile.am
+++ b/ui/gtk3/Makefile.am
@@ -3,7 +3,7 @@
# ibus - The Input Bus
#
# Copyright (c) 2007-2015 Peng Huang <shawn.p.huang@gmail.com>
-# Copyright (c) 2015-2020 Takao Fujwiara <takao.fujiwara1@gmail.com>
+# Copyright (c) 2015-2022 Takao Fujwiara <takao.fujiwara1@gmail.com>
# Copyright (c) 2007-2020 Red Hat, Inc.
#
# This library is free software; you can redistribute it and/or
@@ -81,6 +81,21 @@ AM_VALAFLAGS = \
--target-glib="$(VALA_TARGET_GLIB_VERSION)" \
$(NULL)
+if ENABLE_LIBNOTIFY
+AM_CFLAGS += \
+ @LIBNOTIFY_CFLAGS@ \
+ $(NULL)
+
+AM_LDADD += \
+ @LIBNOTIFY_LIBS@ \
+ $(NULL)
+
+AM_VALAFLAGS += \
+ --pkg=libnotify \
+ -D ENABLE_LIBNOTIFY \
+ $(NULL)
+endif
+
if ENABLE_APPINDICATOR
AM_VALAFLAGS += --define=INDICATOR
endif
diff --git a/ui/gtk3/panel.vala b/ui/gtk3/panel.vala
index 07ce6524..bd70d7d2 100644
--- a/ui/gtk3/panel.vala
+++ b/ui/gtk3/panel.vala
@@ -73,6 +73,7 @@ class Panel : IBus.PanelService {
private string m_icon_prop_key = "";
private int m_property_icon_delay_time = 500;
private uint m_property_icon_delay_time_id;
+ private bool m_is_wayland;
#if INDICATOR
private bool m_is_kde = is_kde();
#else
@@ -93,6 +94,18 @@ class Panel : IBus.PanelService {
m_bus = bus;
+#if USE_GDK_WAYLAND
+ Gdk.set_allowed_backends("*");
+ var display = Gdk.DisplayManager.get().open_display(null);
+ Type instance_type = display.get_type();
+ Type wayland_type = typeof(GdkWayland.Display);
+ m_is_wayland = instance_type.is_a(wayland_type);
+ Gdk.set_allowed_backends("x11");
+#else
+ m_is_wayland = false;
+ warning("Checking Wayland is disabled");
+#endif
+
init_settings();
// init ui
@@ -553,6 +566,11 @@ class Panel : IBus.PanelService {
GLib.List<IBus.EngineDesc> im_engines =
get_engines_from_locale(engines);
+ if (m_is_wayland) {
+ if (xkb_engines.length() > 0)
+ xkb_engines = new GLib.List<IBus.EngineDesc>();
+ }
+
string[] names = {};
foreach (unowned IBus.EngineDesc engine in xkb_engines)
names += engine.get_name();
@@ -728,6 +746,32 @@ class Panel : IBus.PanelService {
inited_engines_order = false;
}
+ private void update_version_1_5_26() {
+#if ENABLE_LIBNOTIFY
+ if (!Notify.is_initted()) {
+ Notify.init ("ibus");
+ }
+
+ var notification = new Notify.Notification(
+ _("IBus Attention"),
+ _("Layout changes do not work in Plasma Wayland. " +
+ "Please use systemsettings5."),
+ "ibus");
+ notification.set_timeout(30 * 1000);
+ notification.set_category("hotkey");
+
+ try {
+ notification.show();
+ } catch (GLib.Error e){
+ warning (_("Layout changes do not work in Plasma Wayland. " +
+ "Please use systemsettings5."));
+ }
+#else
+ warning (_("Layout changes do not work in Plasma Wayland. " +
+ "Please use systemsettings5."));
+#endif
+ }
+
private void set_version() {
string prev_version = m_settings_general.get_string("version");
string current_version = null;
@@ -735,6 +779,9 @@ class Panel : IBus.PanelService {
if (compare_versions(prev_version, "1.5.8") < 0)
update_version_1_5_8();
+ if (compare_versions(prev_version, "1.5.26") < 0)
+ update_version_1_5_26();
+
current_version = "%d.%d.%d".printf(IBus.MAJOR_VERSION,
IBus.MINOR_VERSION,
IBus.MICRO_VERSION);
@@ -856,7 +903,7 @@ class Panel : IBus.PanelService {
m_icon_prop_key = "";
// set xkb layout
- if (!m_use_system_keyboard_layout)
+ if (!m_use_system_keyboard_layout && !m_is_wayland)
m_xkblayout.set_layout(engine);
set_language_from_engine(engine);
@@ -960,17 +1007,25 @@ class Panel : IBus.PanelService {
string[]? order_names) {
string[]? engine_names = unowned_engine_names;
- if (engine_names == null || engine_names.length == 0)
- engine_names = {"xkb:us::eng"};
+ if (engine_names == null || engine_names.length == 0) {
+ if (m_is_wayland)
+ engine_names = {};
+ else
+ engine_names = {"xkb:us::eng"};
+ }
string[] names = {};
foreach (var name in order_names) {
+ if (m_is_wayland && name.has_prefix("xkb:"))
+ continue;
if (name in engine_names)
names += name;
}
foreach (var name in engine_names) {
+ if (m_is_wayland && name.has_prefix("xkb:"))
+ continue;
if (name in names)
continue;
names += name;
@@ -1011,9 +1066,14 @@ class Panel : IBus.PanelService {
}
if (m_engines.length == 0) {
- m_engines = engines;
- switch_engine(0, true);
- run_preload_engines(engines, 1);
+ if (engines.length > 0) {
+ m_engines = engines;
+ switch_engine(0, true);
+ run_preload_engines(engines, 1);
+ } else {
+ m_candidate_panel.set_language(new Pango.AttrLanguage(
+ Pango.Language.from_string(null)));
+ }
} else {
var current_engine = m_engines[0];
m_engines = engines;
@@ -1478,6 +1538,8 @@ class Panel : IBus.PanelService {
/* Do not change the order of m_engines during running switcher. */
if (m_switcher.is_running())
return;
+ if (m_engines.length == 0)
+ return;
if (m_icon_type == IconType.INDICATOR) {
// Wait for the callback of the session bus.
--
2.34.1

View File

@ -39,7 +39,7 @@
Name: ibus
Version: 1.5.26
Release: 3%{?dist}
Release: 4%{?dist}
Summary: Intelligent Input Bus for Linux OS
License: LGPLv2+
URL: https://github.com/ibus/%name/wiki
@ -322,6 +322,7 @@ autoreconf -f -i -v
--enable-install-tests \
%{nil}
make -C ui/gtk3 maintainer-clean-generic
%make_build
%install
@ -521,6 +522,9 @@ dconf update || :
%{_datadir}/installed-tests/ibus
%changelog
* Wed Apr 20 2022 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.26-4
- Resolves: #2076596 Disable XKB engines in Plasma Wayland
* Thu Mar 31 2022 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.26-3
- Fix refcounting issues in IBusText & IBusProperty