Compare commits

...

No commits in common. "c9-beta" and "c10s" have entirely different histories.

22 changed files with 958 additions and 141 deletions

1
.fmf/version Normal file
View File

@ -0,0 +1 @@
1

30
.gitignore vendored
View File

@ -1 +1,29 @@
SOURCES/ibus-anthy-1.5.13.tar.gz
tests/artifacts
ibus-anthy-1.2.1.tar.gz
ibus-anthy.png
/ibus-anthy-1.2.2.20101015.tar.gz
/ibus-anthy-1.2.3.tar.gz
/ibus-anthy-1.2.4.tar.gz
/ibus-anthy-1.2.5.tar.gz
/ibus-anthy-1.2.6.tar.gz
/ibus-anthy-1.2.7.tar.gz
/ibus-anthy-1.3.99.20120304.tar.gz
/ibus-anthy-1.4.99.20120327.tar.gz
/ibus-anthy-1.4.99.20121006.tar.gz
/ibus-anthy-1.5.0.tar.gz
/ibus-anthy-1.5.1.tar.gz
/ibus-anthy-1.5.2.tar.gz
/ibus-anthy-1.5.3.tar.gz
/ibus-anthy-1.5.4.tar.gz
/ibus-anthy-1.5.5.tar.gz
/ibus-anthy-1.5.6.tar.gz
/ibus-anthy-1.5.7.tar.gz
/ibus-anthy-1.5.8.tar.gz
/ibus-anthy-1.5.9.tar.gz
/ibus-anthy-1.5.10.tar.gz
/ibus-anthy-1.5.11.tar.gz
/ibus-anthy-1.5.12.tar.gz
/ibus-anthy-1.5.13.tar.gz
/ibus-anthy-1.5.14.tar.gz
/ibus-anthy-1.5.15.tar.gz
/ibus-anthy-1.5.16.tar.gz

View File

@ -1 +0,0 @@
4ea282bf83847fe6b58d0e0cde873dc7e7437be2 SOURCES/ibus-anthy-1.5.13.tar.gz

View File

@ -1,171 +1,102 @@
# https://fedoraproject.org/wiki/Changes/No_more_automagic_Python_bytecompilation_phase_3
%global sub_version 1.0
%global require_ibus_version 1.5.3
%global have_default_layout 1
%global have_bridge_hotkey 1
%global with_python3 1
* Tue Mar 12 2024 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.16-2
- Disable Super-l in Hiragana mode
%if (0%{?fedora} > 33 || 0%{?rhel} > 8)
%bcond_without kasumi_unicode
%else
%bcond_with kasumi_unicode
%endif
* Wed Feb 28 2024 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.16-1
- Bump to 1.5.16
%if %with_python3
# for bytecompile in %%{_datadir}/ibus-anthy
%global __python %{__python3}
%endif
* Wed Jan 31 2024 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.15-6
- Fix make check with GitHub action
Name: ibus-anthy
Version: 1.5.13
Release: 1%{?dist}
Summary: The Anthy engine for IBus input platform
License: GPLv2+
URL: https://github.com/ibus/ibus/wiki
Source0: https://github.com/ibus/ibus-anthy/releases/download/%{version}/%{name}-%{version}.tar.gz
* Tue Jan 30 2024 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.15-5
- Resolves #2261242 Update era.t with 2024
- Add appstream-util validattion
# Upstreamed patches.
# Patch0: %%{name}-HEAD.patch
Patch1: %{name}-1938129-default-hiragana.patch
* Wed Jan 24 2024 Fedora Release Engineering <releng@fedoraproject.org> - 1.5.15-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
BuildRequires: anthy-unicode-devel
BuildRequires: desktop-file-utils
BuildRequires: gettext-devel
BuildRequires: git
BuildRequires: glib2-devel
BuildRequires: gobject-introspection-devel
BuildRequires: ibus
BuildRequires: libtool
BuildRequires: pkgconfig
BuildRequires: python3-devel
BuildRequires: python3-gobject
* Sat Jan 20 2024 Fedora Release Engineering <releng@fedoraproject.org> - 1.5.15-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
Requires: ibus >= %{require_ibus_version}
%if %{with kasumi_unicode}
Requires: kasumi-unicode
%else
Requires: kasumi
%endif
Requires: anthy-unicode
Requires: %{name}-python = %{version}-%{release}
* Thu Sep 07 2023 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.15-2
- Resolves #2237374 Fix to commit selected candidate with OSK
%description
The Anthy engine for IBus platform. It provides Japanese input method from
a library of the Anthy.
* Tue Aug 22 2023 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.15-1
- Bump to 1.5.15
%package python
Summary: Anthy Python files for IBus
BuildArch: noarch
Requires: %{name} = %{version}-%{release}
Requires: gtk3
Requires: python3-cairo
Requires: python3-gobject
* Fri Aug 18 2023 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.14-15
- Resolves #2232532 converting Super+Space to wide space character
%description python
This package contains the Anthy Python files for IBus
* Thu Jul 20 2023 Fedora Release Engineering <releng@fedoraproject.org> - 1.5.14-14
- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
%package devel
Summary: Development tools for IBus
Requires: %{name}%{?_isa} = %{version}-%{release}
Requires: glib2-devel
Requires: anthy-unicode-devel
* Thu Jul 13 2023 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.14-13
- Resolves #2015149 Commit candidate text with clicking on candidate list in OSK
%description devel
The ibus-anthy-devel package contains .so file and .gir files
for developers.
* Fri Feb 17 2023 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.14-11
- Fix to load EN compose table
%package tests
Summary: Tests for the %{name} package
BuildRequires: python3-pycotap
Requires: %{name}%{?_isa} = %{version}-%{release}
Requires: python3-pycotap
* Thu Jan 26 2023 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.14-10
- Add 2023 Era
- Fix PageDown/PageUp
%description tests
The %{name}-tests package contains tests that can be used to verify
the functionality of the installed %{name} package.
* Thu Jan 19 2023 Fedora Release Engineering <releng@fedoraproject.org> - 1.5.14-9
- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
* Wed Nov 16 2022 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.14-8
- Migrate license tag to SPDX
%prep
%autosetup -S git
* Wed Aug 03 2022 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.14-7
- Change metainfo icon from SVG to PNG file
%build
#autoreconf -f -i -v
autoreconf -f -i -v
%configure \
%if %have_default_layout
--with-layout='default' \
%endif
%if %have_bridge_hotkey
--with-hotkeys \
%endif
%if %{with kasumi_unicode}
--with-kasumi-exec=/usr/bin/kasumi-unicode \
%endif
--with-on-off-keys="'Zenkaku_Hankaku', 'Ctrl+space', 'Ctrl+J'" \
--with-python=python3 \
--enable-installed-tests \
--disable-static
# make -C po update-gmo
make %{?_smp_mflags}
* Wed Aug 03 2022 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.14-6
- Add icon tag in ibus-anthy.appdata.xml.in
- Enable IBus.Engine::has-focus-id property
- Add the escape_to_latin command as a vi-cooperative cancel
%install
make install DESTDIR=$RPM_BUILD_ROOT INSTALL='install -p'
rm -f $RPM_BUILD_ROOT%{_libdir}/libanthygobject-%{sub_version}.la
* Thu Jul 21 2022 Fedora Release Engineering <releng@fedoraproject.org> - 1.5.14-5
- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
* Thu Apr 14 2022 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.14-4
- Resolves #2064261 assertion error with page size 0
%find_lang %{name}
* Thu Jan 27 2022 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.14-3
- Add 2022 Era
%check
desktop-file-validate \
$RPM_BUILD_ROOT%{_datadir}/applications/ibus-setup-anthy.desktop
* Thu Jan 20 2022 Fedora Release Engineering <releng@fedoraproject.org> - 1.5.14-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
%ldconfig_scriptlets libs
* Fri Dec 24 2021 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.14-1
- Bump to 1.5.14
* Fri Oct 22 2021 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.13-3
- export C.UTF-8 for make check
%files -f %{name}.lang
%doc AUTHORS COPYING README
# dir {python2_sitearch}/ibus
%{_libdir}/libanthygobject-%{sub_version}.so.*
%{_libdir}/girepository-1.0/Anthy*.typelib
%{_datadir}/glib-2.0/schemas/org.freedesktop.ibus.engine.anthy.gschema.xml
%dir %{_datadir}/ibus-anthy
%{_datadir}/applications/ibus-setup-anthy.desktop
%{_datadir}/ibus-anthy/dicts
%{_datadir}/icons/hicolor/scalable/apps/ibus-anthy.svg
* Fri Oct 22 2021 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.13-2
- Update era.t with 2021
- Check python3-pycotap.rpm in Fedora instead of pip
%files python
%{_libexecdir}/ibus-*-anthy
%{_datadir}/metainfo/*.metainfo.xml
%{_datadir}/ibus-anthy/engine
%{_datadir}/ibus-anthy/setup
%{_datadir}/ibus/component/*
%files devel
%{_datadir}/gir-1.0/Anthy*.gir
%{_includedir}/ibus-anthy-%{sub_version}
%{_libdir}/libanthygobject-%{sub_version}.so
%files tests
%dir %{_libexecdir}/installed-tests
%{_libexecdir}/installed-tests/%{name}
%dir %{_datadir}/installed-tests
%{_datadir}/installed-tests/%{name}
%changelog
* Fri Aug 20 2021 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.13-1
- Remove Ctrl+period in circle_kana_mode. Related: rhbz#1993079
- Bump to 1.5.13
* Mon Aug 09 2021 Mohan Boddu <mboddu@redhat.com> - 1.5.12-7
- Rebuilt for IMA sigs, glibc 2.34, aarch64 flags
Related: rhbz#1991688
* Thu Aug 12 2021 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.12-10
- Remove Ctrl+period in circle_kana_mode
* Tue Apr 27 2021 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.12-6
- Fix covscan. Related: rhbz#1963072
* Thu Jul 22 2021 Fedora Release Engineering <releng@fedoraproject.org> - 1.5.12-9
- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
* Thu Jun 17 2021 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.12-8
- Delete postscript for ibus write-cache
* Tue Apr 27 2021 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.12-7
- Move .desktop file from ibus-anthy-python to ibus-anthy
- Fix covscan
* Wed Apr 21 2021 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.12-6
- Resolves: #1948197 Move post to posttrans
* Tue Apr 20 2021 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.12-5
- Delete postscripts
* Fri Apr 16 2021 Mohan Boddu <mboddu@redhat.com> - 1.5.12-5
- Rebuilt for RHEL 9 BETA on Apr 15th 2021. Related: rhbz#1947937
* Sun Mar 21 2021 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.12-4
- Output info to stderr instead of StringIO

7
gating.yaml Normal file
View File

@ -0,0 +1,7 @@
--- !Policy
product_versions:
- rhel-10
decision_context: osci_compose_gate
rules:
# this is the testcase identifier, which OSCI pipeline uses
- !PassingTestCaseRule {test_case_name: osci.brew-build.tier0.functional}

466
ibus-anthy-HEAD.patch Normal file
View File

@ -0,0 +1,466 @@
From 9ae92d7b8085e869d37a068a1a94815c78de6110 Mon Sep 17 00:00:00 2001
From: fujiwarat <takao.fujiwara1@gmail.com>
Date: Tue, 12 Mar 2024 18:25:39 +0900
Subject: [PATCH] engine: Ignore Super modifier key
Super-l is a shortcut key to launch a lock screen in GNOME desktop
session and now it can be sent to the engine prior to the window
manager.
---
engine/python2/engine.py | 6 ++++--
engine/python3/engine.py | 6 ++++--
2 files changed, 8 insertions(+), 4 deletions(-)
diff --git a/engine/python2/engine.py b/engine/python2/engine.py
index 42d4dc1..c7ccd3f 100644
--- a/engine/python2/engine.py
+++ b/engine/python2/engine.py
@@ -4,7 +4,7 @@
# ibus-anthy - The Anthy engine for IBus
#
# Copyright (c) 2007-2008 Peng Huang <shawn.p.huang@gmail.com>
-# Copyright (c) 2010-2023 Takao Fujiwara <takao.fujiwara1@gmail.com>
+# Copyright (c) 2010-2024 Takao Fujiwara <takao.fujiwara1@gmail.com>
# Copyright (c) 2007-2018 Red Hat, Inc.
#
# This program is free software; you can redistribute it and/or modify
@@ -1976,7 +1976,9 @@ class Engine(IBus.EngineSimple):
state & hex_mod_mask == hex_mod_mask:
return True
- if state & (IBus.ModifierType.CONTROL_MASK | IBus.ModifierType.MOD1_MASK):
+ if state & (IBus.ModifierType.CONTROL_MASK | \
+ IBus.ModifierType.MOD1_MASK | \
+ IBus.ModifierType.MOD4_MASK):
return False
if (IBus.KEY_exclam <= keyval <= IBus.KEY_asciitilde or
diff --git a/engine/python3/engine.py b/engine/python3/engine.py
index 4b50a01..0858614 100644
--- a/engine/python3/engine.py
+++ b/engine/python3/engine.py
@@ -4,7 +4,7 @@
# ibus-anthy - The Anthy engine for IBus
#
# Copyright (c) 2007-2008 Peng Huang <shawn.p.huang@gmail.com>
-# Copyright (c) 2010-2023 Takao Fujiwara <takao.fujiwara1@gmail.com>
+# Copyright (c) 2010-2024 Takao Fujiwara <takao.fujiwara1@gmail.com>
# Copyright (c) 2007-2018 Red Hat, Inc.
#
# This program is free software; you can redistribute it and/or modify
@@ -1971,7 +1971,9 @@ class Engine(IBus.EngineSimple):
state & hex_mod_mask == hex_mod_mask:
return True
- if state & (IBus.ModifierType.CONTROL_MASK | IBus.ModifierType.MOD1_MASK):
+ if state & (IBus.ModifierType.CONTROL_MASK | \
+ IBus.ModifierType.MOD1_MASK | \
+ IBus.ModifierType.MOD4_MASK):
return False
if (IBus.KEY_exclam <= keyval <= IBus.KEY_asciitilde or
--
2.43.0
From e62e75409de470d373865165b08d060a4cc73c8b Mon Sep 17 00:00:00 2001
From: fujiwarat <takao.fujiwara1@gmail.com>
Date: Sat, 14 Sep 2024 08:39:56 +0900
Subject: [PATCH] tests/anthytest: Support GNOME Wayland and GTK4
- Check "preedit-changed" signal is called twice in GNOME Wayland.
Maybe a mutter bug.
- Make sure the preedit is cleared before the next test case runs
- Wait for 3 seconds in GNOME Wayland before the test cases run to
get delayed focus events.
- Implement GTK4
---
tests/anthytest.py | 250 +++++++++++++++++++++++++++++++++++----------
1 file changed, 197 insertions(+), 53 deletions(-)
diff --git a/tests/anthytest.py b/tests/anthytest.py
index 1d18d19..e9d1b42 100755
--- a/tests/anthytest.py
+++ b/tests/anthytest.py
@@ -3,18 +3,22 @@
from __future__ import print_function
-from gi import require_version as gi_require_version
-gi_require_version('GLib', '2.0')
-gi_require_version('Gdk', '3.0')
-gi_require_version('Gio', '2.0')
-gi_require_version('Gtk', '3.0')
-gi_require_version('IBus', '1.0')
+from gi import require_versions as gi_require_versions
+gi_require_versions({'GLib': '2.0', 'Gio': '2.0', 'GObject': '2.0',
+ 'IBus': '1.0'})
from gi.repository import GLib
-from gi.repository import Gdk
from gi.repository import Gio
-from gi.repository import Gtk
+from gi.repository import GObject
from gi.repository import IBus
+try:
+ gi_require_versions({'Gdk': '4.0', 'Gtk': '4.0'})
+except ValueError:
+ gi_require_versions({'Gdk': '3.0', 'Gtk': '3.0'})
+
+from gi.repository import Gdk
+from gi.repository import Gtk
+
import argparse
import getopt
import os
@@ -70,7 +74,7 @@ sys.path.append('/usr/share/ibus-anthy/engine')
from anthycases import TestCases
-@unittest.skipIf(Gdk.Display.open('') == None, 'Display cannot be open.')
+@unittest.skipIf(Gdk.Display.get_default() == None, 'Display cannot be open.')
class AnthyTest(unittest.TestCase):
global DONE_EXIT
ENGINE_PATH = '/com/redhat/IBus/engines/Anthy/Test/Engine'
@@ -81,11 +85,21 @@ class AnthyTest(unittest.TestCase):
def setUp(self):
self.__id = 0
- self.__rerun = False
+ self.__engine_is_focused = False
+ self.__idle_count = 0
+ self.__idle_loop = None
self.__test_index = 0
+ self.__preedit_changes = 0
+ self.__preedit_prev = None
self.__conversion_index = 0
+ self.__conversion_spaces = 0
self.__commit_done = False
self.__engine = None
+ self.__list_toplevel = False
+ self.__is_wayland = False
+ display = Gdk.Display.get_default()
+ if GObject.type_name(display.__gtype__) == 'GdkWaylandDisplay':
+ self.__is_wayland = True
def register_ibus_engine(self):
printflush('## Registering engine')
@@ -133,6 +147,59 @@ class AnthyTest(unittest.TestCase):
self.__bus.request_name('org.freedesktop.IBus.Anthy.Test', 0)
return True
+ def create_window(self):
+ match Gtk.MAJOR_VERSION:
+ case 4:
+ self.create_window_gtk4()
+ case 3:
+ self.create_window_gtk3()
+ case _:
+ self.gtk_version_exception()
+
+ def create_window_gtk4(self):
+ window = Gtk.Window()
+ self.__entry = entry = Gtk.Entry()
+ window.connect('destroy', self.__window_destroy_cb)
+ entry.connect('map', self.__entry_map_cb)
+ controller = Gtk.EventControllerFocus()
+ controller.set_propagation_phase(Gtk.PropagationPhase.BUBBLE)
+ controller.connect_after('enter', self.__controller_enter_cb)
+ text = entry.get_delegate()
+ text.add_controller(controller)
+ text.connect('preedit-changed', self.__entry_preedit_changed_cb)
+ buffer = entry.get_buffer()
+ buffer.connect('inserted-text', self.__buffer_inserted_text_cb)
+ window.set_child(entry)
+ window.set_focus(entry)
+ window.present()
+ printflush('## Build GTK4 window')
+
+ def create_window_gtk3(self):
+ window = Gtk.Window(type = Gtk.WindowType.TOPLEVEL)
+ self.__entry = entry = Gtk.Entry()
+ window.connect('destroy', self.__window_destroy_cb)
+ entry.connect('map', self.__entry_map_cb)
+ entry.connect('focus-in-event', self.__entry_focus_in_event_cb)
+ entry.connect('preedit-changed', self.__entry_preedit_changed_cb)
+ buffer = entry.get_buffer()
+ buffer.connect('inserted-text', self.__buffer_inserted_text_cb)
+ window.add(entry)
+ window.show_all()
+ printflush('## Build GTK3 window')
+
+ def gtk_version_exception(self):
+ raise Exception("GTK version %d is not supported" % Gtk.MAJOR_VERSION)
+
+ def is_integrated_desktop(self):
+ session_name = None
+ if 'XDG_SESSION_DESKTOP' in os.environ:
+ session_name = os.environ['XDG_SESSION_DESKTOP']
+ if session_name == None:
+ return False
+ if len(session_name) >= 4 and session_name[0:5] == 'gnome':
+ return True
+ return False
+
def __name_owner_changed_cb(self, connection, sender_name, object_path,
interface_name, signal_name, parameters,
user_data):
@@ -142,7 +209,7 @@ class AnthyTest(unittest.TestCase):
except ModuleNotFoundError as e:
with self.subTest(i = 'name-owner-changed'):
self.fail('NG: Not installed ibus-anthy %s' % str(e))
- Gtk.main_quit()
+ self.__window_destroy_cb()
return
engine.Engine.CONFIG_RELOADED()
@@ -154,60 +221,101 @@ class AnthyTest(unittest.TestCase):
except ModuleNotFoundError as e:
with self.subTest(i = 'create-engine'):
self.fail('NG: Not installed ibus-anthy %s' % str(e))
- Gtk.main_quit()
+ self.__window_destroy_cb()
return
self.__id += 1
self.__engine = engine.Engine(self.__bus, '%s/%d' % (self.ENGINE_PATH, self.__id))
+ if hasattr(self.__engine.props, 'has_focus_id'):
+ self.__engine.connect('focus-in-id', self.__engine_focus_in)
+ self.__engine.connect('focus-out-id', self.__engine_focus_out)
+ # The timing of D-Bus signal of Engine.has_focus_id can cause
+ # some 'focus-in' signals earlier and 'focus-in-id' signals later.
self.__engine.connect('focus-in', self.__engine_focus_in)
self.__engine.connect('focus-out', self.__engine_focus_out)
return self.__engine
- def __engine_focus_in(self, engine):
+ def __engine_focus_in(self, engine, object_path=None, client=None):
+ printflush('## Focus in engine %s %s' % (object_path, client))
if self.__test_index == len(TestCases['tests']):
if DONE_EXIT:
- Gtk.main_quit()
+ self.__window_destroy_cb()
return
- # Workaround because focus-out resets the preedit text
- # ibus_bus_set_global_engine() calls bus_input_context_set_engine()
- # twice and it causes bus_engine_proxy_focus_out()
- if self.__rerun:
- self.__main_test()
+ self.__engine_is_focused = True
pass
- def __engine_focus_out(self, engine):
- self.__rerun = True
+ def __engine_focus_out(self, engine, object_path=None):
+ printflush('## Focus out engine %s' % object_path)
+ self.__engine_is_focused = False
- def create_window(self):
- window = Gtk.Window(type = Gtk.WindowType.TOPLEVEL)
- self.__entry = entry = Gtk.Entry()
- window.connect('destroy', Gtk.main_quit)
- entry.connect('map', self.__entry_map_cb)
- entry.connect('focus-in-event', self.__entry_focus_in_event_cb)
- entry.connect('preedit-changed', self.__entry_preedit_changed_cb)
- buffer = entry.get_buffer()
- buffer.connect('inserted-text', self.__buffer_inserted_text_cb)
- window.add(entry)
- window.show_all()
- printflush('## Build window')
+ def __window_destroy_cb(self):
+ match Gtk.MAJOR_VERSION:
+ case 4:
+ self.__list_toplevel = False
+ case 3:
+ Gtk.main_quit()
+ case _:
+ self.gtk_version_exception()
def __entry_map_cb(self, entry):
printflush('## Map window')
+ def __controller_enter_cb(self, controller):
+ if self.is_integrated_desktop():
+ # Wait for 3 seconds in GNOME Wayland because there is a long time
+ # lag between the "enter" signal on the event controller in GtkText
+ # and the "FocusIn" D-Bus signal in BusInputContext of ibus-daemon.
+ printflush('## Waiting for 3 secs')
+ GLib.timeout_add_seconds(3,
+ self.__controller_enter_delay,
+ controller)
+ else:
+ printflush('## No Wait')
+ GLib.idle_add(self.__controller_enter_delay,
+ controller)
+
+ def __controller_enter_delay(self, controller):
+ text = controller.get_widget()
+ if not text.get_realized():
+ return
+ self.__entry_focus_in_event_cb(None, None)
+
def __entry_focus_in_event_cb(self, entry, event):
- printflush('## Get focus')
+ printflush('## Focus in entry')
if self.__test_index == len(TestCases['tests']):
if DONE_EXIT:
- Gtk.main_quit()
+ self.__window_destroy_cb()
return False
self.__bus.set_global_engine_async('testanthy', -1, None, self.__set_engine_cb)
return False
+ def __idle_cb(self):
+ if self.__engine_is_focused:
+ self.__idle_loop.quit()
+ return GLib.SOURCE_REMOVE
+ elif self.__idle_count < 10:
+ self.__idle_count += 1
+ return GLib.SOURCE_CONTINUE
+ else:
+ self.__idle_loop.quit()
+ return GLib.SOURCE_REMOVE
+
def __set_engine_cb(self, object, res):
+ printflush('## Set engine')
if not self.__bus.set_global_engine_async_finish(res):
with self.subTest(i = self.__test_index):
self.fail('set engine failed: ' + error.message)
return
self.__enable_hiragana()
+ # ibus_im_context_focus_in() is called after GlobalEngine is set.
+ # The focus-in/out events happen more slowly in a busy system
+ # likes with a TMT tool.
+ if self.is_integrated_desktop():
+ if 'IBUS_DAEMON_WITH_SYSTEMD' in os.environ and \
+ os.environ['IBUS_DAEMON_WITH_SYSTEMD'] != None:
+ self.__idle_loop = GLib.MainLoop(None)
+ self.__idle_count = 0
+ GLib.timeout_add_seconds(1, self.__idle_cb)
+ self.__idle_loop.run()
self.__main_test()
def __get_test_condition_length(self, tag):
@@ -217,24 +325,48 @@ class AnthyTest(unittest.TestCase):
return len(cases[type])
def __entry_preedit_changed_cb(self, entry, preedit_str):
- if len(preedit_str) == 0:
+ # Wait for clearing the preedit before the next __main_test() is called.
+ if self.__commit_done:
+ if len(preedit_str) == 0:
+ self.__preedit_changes = 0
+ self.__main_test()
+ else:
+ self.__preedit_changes += 1
return
+ if self.__is_wayland:
+ # Need to fix mutter
+ # GTK calls self.__entry_preedit_changed_cb() twice by the actual
+ # preedit update in GNOME Wayland in case the lookup window is not
+ # shown yet and the preedit is changed but not the cursor position
+ # only.
+ #
+ # I.e. GTK receives the struct zwp_text_input_v3_listener.done()
+ # from Wayland text-input protocol when the preedit is updated
+ # and the "preedit-changed" signal is called at first and the
+ # zwp_text_input_v3_listener.done() also calls
+ # zwp_text_input_v3_commit() to notify IM changes to mutter and
+ # mutter receives the struct
+ # zwp_text_input_v3_interface.commit_state() from Wayland text-input
+ # protocol and it causes the zwp_text_input_v3_listener.done() and
+ # the "preedit-changed" signal in GTK.
+ if self.__preedit_changes < 1 and self.__conversion_spaces < 2 \
+ and self.__preedit_prev != preedit_str:
+ self.__preedit_changes += 1
+ return
+ else:
+ self.__preedit_changes = 0
if self.__test_index == len(TestCases['tests']):
if DONE_EXIT:
- Gtk.main_quit()
+ self.__window_destroy_cb()
return
+ self.__preedit_prev = preedit_str
conversion_length = self.__get_test_condition_length('conversion')
- # Need to return again even if all the conversion is finished
- # until the final Engine.update_preedit() is called.
- if self.__conversion_index > conversion_length:
- return
- self.__run_cases('conversion',
- self.__conversion_index,
- self.__conversion_index + 1)
if self.__conversion_index < conversion_length:
+ self.__run_cases('conversion',
+ self.__conversion_index,
+ self.__conversion_index + 1)
self.__conversion_index += 1
return
- self.__conversion_index += 1
self.__run_cases('commit')
def __enable_hiragana(self):
@@ -249,13 +381,12 @@ class AnthyTest(unittest.TestCase):
printflush('## Already hiragana')
def __main_test(self):
+ printflush('## Run case %d' % self.__test_index)
+ self.__preedit_prev = None
self.__conversion_index = 0
+ self.__conversion_spaces = 0
self.__commit_done = False
self.__run_cases('preedit')
- self.__run_cases('conversion',
- self.__conversion_index,
- self.__conversion_index + 1)
- self.__conversion_index += 1
def __run_cases(self, tag, start=-1, end=-1):
tests = TestCases['tests'][self.__test_index]
@@ -288,6 +419,10 @@ class AnthyTest(unittest.TestCase):
if start != -1 or end != -1:
printflush('test step: %s sequences: [0x%X, 0x%X, 0x%X]' \
% (tag, key[0], key[1], key[2]))
+ # Check if the lookup table is shown.
+ if tag == 'conversion' and \
+ (key[0] == IBus.KEY_Tab or key[0] == IBus.KEY_space):
+ self.__conversion_spaces += 1
self.__typing(key[0], key[1], key[2])
i += 1
@@ -306,21 +441,30 @@ class AnthyTest(unittest.TestCase):
self.fail('NG: %d %s %s' \
% (self.__test_index, str(cases['string']), chars))
if DONE_EXIT:
- Gtk.main_quit()
+ self.__window_destroy_cb()
self.__test_index += 1
if self.__test_index == len(TestCases['tests']):
if DONE_EXIT:
- Gtk.main_quit()
+ self.__window_destroy_cb()
return
self.__entry.set_text('')
- self.__main_test()
+ # ibus-anthy updates preedit after commits the text.
+ self.__commit_done = True
def main(self):
- Gtk.main()
+ match Gtk.MAJOR_VERSION:
+ case 4:
+ while self.__list_toplevel:
+ GLib.MainContext.default().iteration(True)
+ case 3:
+ Gtk.main()
+ case _:
+ self.gtk_version_exception()
def test_typing(self):
if not self.register_ibus_engine():
sys.exit(-1)
+ self.__list_toplevel = True
self.create_window()
self.main()
--
2.45.2

161
ibus-anthy.spec Normal file
View File

@ -0,0 +1,161 @@
# https://fedoraproject.org/wiki/Changes/No_more_automagic_Python_bytecompilation_phase_3
%global sub_version 1.0
%global require_ibus_version 1.5.3
%global have_default_layout 1
%global have_bridge_hotkey 1
%global with_python3 1
%if (0%{?fedora} > 33 || 0%{?rhel} > 8)
%bcond_without kasumi_unicode
%else
%bcond_with kasumi_unicode
%endif
%if %with_python3
# for bytecompile in %%{_datadir}/ibus-anthy
%global __python %{__python3}
%endif
Name: ibus-anthy
Version: 1.5.16
Release: %autorelease
Summary: The Anthy engine for IBus input platform
License: GPL-2.0-or-later
URL: https://github.com/ibus/ibus/wiki
Source0: https://github.com/ibus/ibus-anthy/releases/download/%{version}/%{name}-%{version}.tar.gz
# Upstreamed patches.
# Patch0: %%{name}-HEAD.patch
Patch0: %{name}-HEAD.patch
Patch1: %{name}-1938129-default-hiragana.patch
BuildRequires: anthy-unicode-devel
BuildRequires: desktop-file-utils
BuildRequires: gettext-devel
BuildRequires: git
BuildRequires: glib2-devel
BuildRequires: gobject-introspection-devel
BuildRequires: ibus
BuildRequires: libtool
BuildRequires: pkgconfig
BuildRequires: python3-devel
BuildRequires: python3-gobject
BuildRequires: /usr/bin/appstream-util
Requires: ibus >= %{require_ibus_version}
%if %{with kasumi_unicode}
Requires: kasumi-unicode
%else
Requires: kasumi
%endif
Requires: anthy-unicode
Requires: %{name}-python = %{version}-%{release}
%description
The Anthy engine for IBus platform. It provides Japanese input method from
a library of the Anthy.
%package python
Summary: Anthy Python files for IBus
BuildArch: noarch
Requires: %{name} = %{version}-%{release}
Requires: gtk3
Requires: python3-cairo
Requires: python3-gobject
%description python
This package contains the Anthy Python files for IBus
%package devel
Summary: Development tools for IBus
Requires: %{name}%{?_isa} = %{version}-%{release}
Requires: glib2-devel
Requires: anthy-unicode-devel
%description devel
The ibus-anthy-devel package contains .so file and .gir files
for developers.
%package tests
Summary: Tests for the %{name} package
BuildRequires: python3-pycotap
Requires: %{name}%{?_isa} = %{version}-%{release}
Requires: python3-pycotap
%description tests
The %{name}-tests package contains tests that can be used to verify
the functionality of the installed %{name} package.
%prep
%autosetup -S git
%build
#autoreconf -f -i -v
%configure \
%if %have_default_layout
--with-layout='default' \
%endif
%if %have_bridge_hotkey
--with-hotkeys \
%endif
%if %{with kasumi_unicode}
--with-kasumi-exec=/usr/bin/kasumi-unicode \
%endif
--with-on-off-keys="'Zenkaku_Hankaku', 'Ctrl+space', 'Ctrl+J'" \
--with-python=python3 \
--enable-installed-tests \
--disable-static
# make -C po update-gmo
make %{?_smp_mflags}
%install
make install DESTDIR=$RPM_BUILD_ROOT INSTALL='install -p'
rm -f $RPM_BUILD_ROOT%{_libdir}/libanthygobject-%{sub_version}.la
%find_lang %{name}
%check
desktop-file-validate \
$RPM_BUILD_ROOT%{_datadir}/applications/ibus-setup-anthy.desktop
appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.xml
export LANG=C.UTF-8
locale
make -C data check
%ldconfig_scriptlets libs
%files -f %{name}.lang
%doc AUTHORS COPYING README
# dir {python2_sitearch}/ibus
%{_libdir}/libanthygobject-%{sub_version}.so.*
%{_libdir}/girepository-1.0/Anthy*.typelib
%{_datadir}/glib-2.0/schemas/org.freedesktop.ibus.engine.anthy.gschema.xml
%dir %{_datadir}/ibus-anthy
%{_datadir}/applications/ibus-setup-anthy.desktop
%{_datadir}/ibus-anthy/dicts
%{_datadir}/icons/hicolor/scalable/apps/ibus-anthy.svg
%files python
%{_libexecdir}/ibus-*-anthy
%{_datadir}/ibus-anthy/engine
%{_datadir}/ibus-anthy/setup
%{_datadir}/ibus/component/*
%{_metainfodir}/*.xml
%files devel
%{_datadir}/gir-1.0/Anthy*.gir
%{_includedir}/ibus-anthy-%{sub_version}
%{_libdir}/libanthygobject-%{sub_version}.so
%files tests
%dir %{_libexecdir}/installed-tests
%{_libexecdir}/installed-tests/%{name}
%dir %{_datadir}/installed-tests
%{_datadir}/installed-tests/%{name}
%changelog
%autochangelog

5
plans/test.fmf Normal file
View File

@ -0,0 +1,5 @@
summary: Basic smoke test
discover:
how: fmf
execute:
how: tmt

1
sources Normal file
View File

@ -0,0 +1 @@
SHA512 (ibus-anthy-1.5.16.tar.gz) = d1a7b9da402d85af955f96fd8618189fb2e682763f57b5d6b54e7bcf052138ba300f4ba8130a4ac0e8e1e8821319e9b6360e57568c84c1f9845438174e51a959

View File

@ -0,0 +1,88 @@
summary: Install common GNOME desktop components
description:
The listed packages are installed commonly between Fedora and
RHEL GNOME desktop components.
require:
# IBus CI sets
- ibus
- ibus-desktop-testing
- dbus-x11
# https://pagure.io/fedora-comps/blob/main/f/comps-f41.xml.in
# dnf group info GNOME
# base-graphical mandatory
- mesa-dri-drivers
- mesa-vulkan-drivers
- plymouth-system-theme
# fonts default
- default-fonts-cjk-mono
- default-fonts-cjk-sans
- default-fonts-cjk-serif
- default-fonts-core-emoji
- default-fonts-core-math
- default-fonts-core-mono
- default-fonts-core-sans
- default-fonts-core-serif
- default-fonts-other-mono
- default-fonts-other-sans
- default-fonts-other-serif
# gnome-desktop mandatory
- dconf
- gdm
- gnome-connections
- gnome-control-center
- gnome-initial-setup
- gnome-session-wayland-session
- gnome-settings-daemon
- gnome-shell
- gnome-software
- gnome-text-editor
- nautilus
- polkit
- ptyxis
# gnome-desktop default
- avahi
- baobab
# Sometimes version mismatch with gnome-shell in rawhide
#- chrome-gnome-shell
- fprintd-pam
- glib-networking
- gnome-bluetooth
- gnome-browser-connector
- gnome-calculator
- gnome-characters
- gnome-classic-session
- gnome-clocks
- gnome-color-manager
- gnome-disk-utility
- gnome-font-viewer
- gnome-remote-desktop
- gnome-system-monitor
- gnome-user-docs
- gvfs-goa
- gvfs-mtp
- librsvg2
- libsane-hpaio
- loupe
- mesa-dri-drivers
- mesa-libEGL
- ModemManager
- NetworkManager-adsl
- NetworkManager-ppp
- NetworkManager-wwan
- PackageKit-command-not-found
- PackageKit-gtk3-module
- sane-backends-drivers-scanners
- snapshot
# Move systemd-oomd-defaults to Post-Installing section
- tracker
- tracker-miners
- xdg-desktop-portal
- xdg-desktop-portal-gnome
- xdg-desktop-portal-gtk
- xdg-user-dirs-gtk
# desktop-accessibility default
- at-spi2-atk
- at-spi2-core
- brltty
- orca
- speech-dispatcher

View File

@ -0,0 +1,41 @@
summary: Install Fedora specific GNOME desktop components
description:
The listed packages are available in Fedora only.
enabled: false
adjust:
when: distro == fedora
enabled: true
require:
- adobe-source-code-pro-fonts
- gnome-screenshot
- gnome-boxes
- yelp
- cheese
- eog
- evince
- evince-djvu
- gnome-backgrounds
- gnome-calendar
- gnome-contacts
- gnome-epub-thumbnailer
- gnome-logs
- gnome-maps
- gnome-photos
- gnome-themes-extra
- gnome-user-share
- gnome-weather
- gvfs-afc
- gvfs-afp
- gvfs-archive
- gvfs-fuse
- gvfs-gphoto2
- gvfs-smb
- NetworkManager-openconnect-gnome
- NetworkManager-openvpn-gnome
- NetworkManager-pptp-gnome
- NetworkManager-ssh-gnome
- NetworkManager-vpnc-gnome
- rygel
- simple-scan
- sushi
- totem

View File

@ -0,0 +1,7 @@
summary: Install RHEL specific GNOME desktop components
description:
Currently no specific packages for RHEL.
enabled: false
adjust:
when: distro != fedora
enabled: true

View File

@ -0,0 +1,6 @@
summary: Install GNOME installed-tests testing harness
description:
gnome-desktop-testing package is required by IBus CI(ibus-desktop-testing)
and it's available in Fedora only at present.
require:
- gnome-desktop-testing

View File

@ -0,0 +1,5 @@
summary: Install TMT packages
description:
The test script is calling the beakerlib script.
require:
- beakerlib

View File

@ -0,0 +1,6 @@
summary: Install ibus-anthy specific packages
description:
The listed packages are required by CI of ibus-anthy.
require:
- ibus-anthy-tests
- glibc-langpack-ja

View File

@ -0,0 +1,3 @@
summary: gnome-desktop-testing tests
# common test for sub tests
test: env

View File

@ -0,0 +1,5 @@
summary: Run tests
description:
Run CI with ibus-desktop-testing-runner in GNOME Wayland.
duration: 15m
test: ./test.sh

View File

@ -0,0 +1,20 @@
#!/bin/bash
# vim: dict+=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k
. /usr/share/beakerlib/beakerlib.sh || exit 1
rlJournalStart
rlPhaseStartSetup
rlRun -t "cp -R ../tmp/no-overview@fthx ."
rlPhaseEnd
rlPhaseStartTest
rlRun -t "/usr/bin/ibus-desktop-testing-runner --runner gnome --tests ibus-anthy --no-graphics --lang ja_JP.UTF-8"
rlPhaseEnd
rlPhaseStartCleanup
rlRun "echo test-suite.log"
rlRun "cat test-suite.log"
rlRun "echo /export/home/itestuser/test-autostart.log"
rlRun "cat /export/home/itestuser/test-autostart.log"
rlPhaseEnd
rlJournalEnd

View File

@ -0,0 +1,26 @@
/*
No overview at start-up
GNOME Shell 45+ extension
Contributors: @fthx
License: GPL v3
*/
import * as Main from 'resource:///org/gnome/shell/ui/main.js';
export default class NoOverviewExtension {
enable() {
if (!Main.layoutManager._startingUp) {
return;
}
Main.layoutManager.connectObject(
'startup-complete',
() => Main.overview.hide(),
this
);
}
disable() {
Main.layoutManager.disconnectObject(this);
}
}

View File

@ -0,0 +1,10 @@
{
"_generated": "Generated by SweetTooth, do not edit",
"description": "No overview at start-up. Nothing more.",
"name": "No overview at start-up",
"original-authors": ["fthx"],
"shell-version": ["46", "47"],
"url": "https://github.com/fthx/no-overview",
"uuid": "no-overview@fthx",
"version": 999
}

1
tests/main.fmt Normal file
View File

@ -0,0 +1 @@
contact: Takao Fujiwara <fujiwara@redhat.com>