Resolves #2015149 Commit candidate text with clicking on candidate list in OSK
This commit is contained in:
parent
8b5be26fa8
commit
7496ad9bc3
@ -535,3 +535,231 @@ index 1a2e6fd..8665ae0 100644
|
|||||||
--
|
--
|
||||||
2.38.1
|
2.38.1
|
||||||
|
|
||||||
|
From 7f5807eaf37d0a809807c23add3964478bfbdcbe Mon Sep 17 00:00:00 2001
|
||||||
|
From: fujiwarat <takao.fujiwara1@gmail.com>
|
||||||
|
Date: Thu, 13 Jul 2023 15:06:38 +0900
|
||||||
|
Subject: [PATCH] engine: Enable OSK mode
|
||||||
|
|
||||||
|
Currently gnome-shell sends IBUS_CAP_OSK when OSK(On-Screen Keyboard)
|
||||||
|
is enabled in GNOME Wayland only.
|
||||||
|
However users still can type characters using the physical keyboard
|
||||||
|
while OSK is enabled so the current status is not perfect.
|
||||||
|
|
||||||
|
But ibus-anthy now commit the preedit when a candidate is clicked
|
||||||
|
on IBus lookup table instead of the selection in the OSK mode.
|
||||||
|
|
||||||
|
BUG=https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2415
|
||||||
|
BUG=https://gitlab.gnome.org/GNOME/mutter/-/issues/2441
|
||||||
|
BUG=rhbz#2015149
|
||||||
|
---
|
||||||
|
engine/python2/engine.py | 34 ++++++++++++++++++++++++++++------
|
||||||
|
engine/python3/engine.py | 34 ++++++++++++++++++++++++++++------
|
||||||
|
2 files changed, 56 insertions(+), 12 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/engine/python2/engine.py b/engine/python2/engine.py
|
||||||
|
index 56c0cd5..4266d09 100644
|
||||||
|
--- a/engine/python2/engine.py
|
||||||
|
+++ b/engine/python2/engine.py
|
||||||
|
@@ -150,6 +150,10 @@ class Engine(IBus.EngineSimple):
|
||||||
|
self.__prop_dict = {}
|
||||||
|
self.__input_purpose = 0
|
||||||
|
self.__has_input_purpose = False
|
||||||
|
+ # OSK mode is designed for OSK on gnome-shell, which always shows
|
||||||
|
+ # IBus lookup window prior to the preedit and selecting a candidate
|
||||||
|
+ # causes the commmit instead of the selection.
|
||||||
|
+ self.__osk_mode = False
|
||||||
|
if hasattr(IBus, 'InputPurpose'):
|
||||||
|
self.__has_input_purpose = True
|
||||||
|
try:
|
||||||
|
@@ -805,7 +809,10 @@ class Engine(IBus.EngineSimple):
|
||||||
|
keyval = IBus.KEY_0
|
||||||
|
else:
|
||||||
|
keyval = IBus.KEY_1 + index
|
||||||
|
+ prev_cursor_pos = self.__cursor_pos
|
||||||
|
self.__on_key_number(keyval)
|
||||||
|
+ if self.__osk_mode and prev_cursor_pos == self.__cursor_pos:
|
||||||
|
+ self.__on_key_return()
|
||||||
|
|
||||||
|
def __commit_string(self, text):
|
||||||
|
self.__reset()
|
||||||
|
@@ -1094,6 +1101,9 @@ class Engine(IBus.EngineSimple):
|
||||||
|
self.__reset()
|
||||||
|
self.__invalidate()
|
||||||
|
|
||||||
|
+ def do_set_capabilities(self, caps):
|
||||||
|
+ self.__osk_mode = True if caps & IBus.Capabilite.OSK else False
|
||||||
|
+
|
||||||
|
def __destroy(self, obj):
|
||||||
|
if self.__idle_id != 0:
|
||||||
|
GLib.source_remove(self.__idle_id)
|
||||||
|
@@ -1148,7 +1158,10 @@ class Engine(IBus.EngineSimple):
|
||||||
|
else:
|
||||||
|
self.__cursor_pos = 0
|
||||||
|
self.__fill_lookup_table()
|
||||||
|
- self.__lookup_table_visible = False
|
||||||
|
+ if self.__osk_mode:
|
||||||
|
+ self.__lookup_table_visible = True
|
||||||
|
+ else:
|
||||||
|
+ self.__lookup_table_visible = False
|
||||||
|
|
||||||
|
def __end_anthy_convert(self):
|
||||||
|
if self.__convert_mode == CONV_MODE_OFF:
|
||||||
|
@@ -1353,7 +1366,8 @@ class Engine(IBus.EngineSimple):
|
||||||
|
self.__lookup_table.set_cursor_pos(0)
|
||||||
|
candidate = UN(self.__lookup_table.get_candidate(0).get_text())
|
||||||
|
self.__segments[self.__cursor_pos] = 0, candidate
|
||||||
|
- self.__lookup_table_visible = False
|
||||||
|
+ if not self.__osk_mode:
|
||||||
|
+ self.__lookup_table_visible = False
|
||||||
|
elif self.__segments[self.__cursor_pos][0] != \
|
||||||
|
NTH_UNCONVERTED_CANDIDATE:
|
||||||
|
buf = self.__context.get_segment(self.__cursor_pos,
|
||||||
|
@@ -1582,7 +1596,8 @@ class Engine(IBus.EngineSimple):
|
||||||
|
return True
|
||||||
|
|
||||||
|
self.__cursor_pos += 1
|
||||||
|
- self.__lookup_table_visible = False
|
||||||
|
+ if not self.__osk_mode:
|
||||||
|
+ self.__lookup_table_visible = False
|
||||||
|
self.__fill_lookup_table()
|
||||||
|
self.__invalidate()
|
||||||
|
return True
|
||||||
|
@@ -2314,7 +2329,10 @@ class Engine(IBus.EngineSimple):
|
||||||
|
self.__convert_mode = CONV_MODE_PREDICTION
|
||||||
|
self.__cursor_pos = 0
|
||||||
|
self.__fill_lookup_table()
|
||||||
|
- self.__lookup_table_visible = False
|
||||||
|
+ if self.__osk_mode:
|
||||||
|
+ self.__lookup_table_visible = True
|
||||||
|
+ else:
|
||||||
|
+ self.__lookup_table_visible = False
|
||||||
|
self.__invalidate()
|
||||||
|
|
||||||
|
return True
|
||||||
|
@@ -2393,7 +2411,10 @@ class Engine(IBus.EngineSimple):
|
||||||
|
self.__convert_mode = CONV_MODE_ANTHY
|
||||||
|
self.__cursor_pos = 0
|
||||||
|
self.__fill_lookup_table()
|
||||||
|
- self.__lookup_table_visible = False
|
||||||
|
+ lf self.__osk_mode:
|
||||||
|
+ self.__lookup_table_visible = True
|
||||||
|
+ else:
|
||||||
|
+ self.__lookup_table_visible = False
|
||||||
|
self.__invalidate()
|
||||||
|
|
||||||
|
return True
|
||||||
|
@@ -2549,7 +2570,8 @@ class Engine(IBus.EngineSimple):
|
||||||
|
index = self.__lookup_table.get_cursor_pos()
|
||||||
|
candidate = UN(self.__lookup_table.get_candidate(index).get_text())
|
||||||
|
self.__segments[self.__cursor_pos] = index, candidate
|
||||||
|
- self.__lookup_table_visible = False
|
||||||
|
+ if not self.__osk_mode:
|
||||||
|
+ self.__lookup_table_visible = False
|
||||||
|
self.__on_key_right()
|
||||||
|
self.__invalidate()
|
||||||
|
return True
|
||||||
|
diff --git a/engine/python3/engine.py b/engine/python3/engine.py
|
||||||
|
index 2ebf894..d9013e6 100644
|
||||||
|
--- a/engine/python3/engine.py
|
||||||
|
+++ b/engine/python3/engine.py
|
||||||
|
@@ -151,6 +151,10 @@ class Engine(IBus.EngineSimple):
|
||||||
|
self.__prop_dict = {}
|
||||||
|
self.__input_purpose = 0
|
||||||
|
self.__has_input_purpose = False
|
||||||
|
+ # OSK mode is designed for OSK on gnome-shell, which always shows
|
||||||
|
+ # IBus lookup window prior to the preedit and selecting a candidate
|
||||||
|
+ # causes the commmit instead of the selection.
|
||||||
|
+ self.__osk_mode = False
|
||||||
|
if hasattr(IBus, 'InputPurpose'):
|
||||||
|
self.__has_input_purpose = True
|
||||||
|
try:
|
||||||
|
@@ -800,7 +804,10 @@ class Engine(IBus.EngineSimple):
|
||||||
|
keyval = IBus.KEY_0
|
||||||
|
else:
|
||||||
|
keyval = IBus.KEY_1 + index
|
||||||
|
+ prev_cursor_pos = self.__cursor_pos
|
||||||
|
self.__on_key_number(keyval)
|
||||||
|
+ if self.__osk_mode and prev_cursor_pos == self.__cursor_pos:
|
||||||
|
+ self.__on_key_return()
|
||||||
|
|
||||||
|
def __commit_string(self, text):
|
||||||
|
self.__reset()
|
||||||
|
@@ -1089,6 +1096,9 @@ class Engine(IBus.EngineSimple):
|
||||||
|
self.__reset()
|
||||||
|
self.__invalidate()
|
||||||
|
|
||||||
|
+ def do_set_capabilities(self, caps):
|
||||||
|
+ self.__osk_mode = True if caps & IBus.Capabilite.OSK else False
|
||||||
|
+
|
||||||
|
def __destroy(self, obj):
|
||||||
|
if self.__idle_id != 0:
|
||||||
|
GLib.source_remove(self.__idle_id)
|
||||||
|
@@ -1143,7 +1153,10 @@ class Engine(IBus.EngineSimple):
|
||||||
|
else:
|
||||||
|
self.__cursor_pos = 0
|
||||||
|
self.__fill_lookup_table()
|
||||||
|
- self.__lookup_table_visible = False
|
||||||
|
+ if self.__osk_mode:
|
||||||
|
+ self.__lookup_table_visible = True
|
||||||
|
+ else:
|
||||||
|
+ self.__lookup_table_visible = False
|
||||||
|
|
||||||
|
def __end_anthy_convert(self):
|
||||||
|
if self.__convert_mode == CONV_MODE_OFF:
|
||||||
|
@@ -1348,7 +1361,8 @@ class Engine(IBus.EngineSimple):
|
||||||
|
self.__lookup_table.set_cursor_pos(0)
|
||||||
|
candidate = self.__lookup_table.get_candidate(0).get_text()
|
||||||
|
self.__segments[self.__cursor_pos] = 0, candidate
|
||||||
|
- self.__lookup_table_visible = False
|
||||||
|
+ if not self.__osk_mode:
|
||||||
|
+ self.__lookup_table_visible = False
|
||||||
|
elif self.__segments[self.__cursor_pos][0] != \
|
||||||
|
NTH_UNCONVERTED_CANDIDATE:
|
||||||
|
buf = self.__context.get_segment(self.__cursor_pos,
|
||||||
|
@@ -1577,7 +1591,8 @@ class Engine(IBus.EngineSimple):
|
||||||
|
return True
|
||||||
|
|
||||||
|
self.__cursor_pos += 1
|
||||||
|
- self.__lookup_table_visible = False
|
||||||
|
+ if not self.__osk_mode:
|
||||||
|
+ self.__lookup_table_visible = False
|
||||||
|
self.__fill_lookup_table()
|
||||||
|
self.__invalidate()
|
||||||
|
return True
|
||||||
|
@@ -2308,7 +2323,10 @@ class Engine(IBus.EngineSimple):
|
||||||
|
self.__convert_mode = CONV_MODE_PREDICTION
|
||||||
|
self.__cursor_pos = 0
|
||||||
|
self.__fill_lookup_table()
|
||||||
|
- self.__lookup_table_visible = False
|
||||||
|
+ if self.__osk_mode:
|
||||||
|
+ self.__lookup_table_visible = True
|
||||||
|
+ else:
|
||||||
|
+ self.__lookup_table_visible = False
|
||||||
|
self.__invalidate()
|
||||||
|
|
||||||
|
return True
|
||||||
|
@@ -2387,7 +2405,10 @@ class Engine(IBus.EngineSimple):
|
||||||
|
self.__convert_mode = CONV_MODE_ANTHY
|
||||||
|
self.__cursor_pos = 0
|
||||||
|
self.__fill_lookup_table()
|
||||||
|
- self.__lookup_table_visible = False
|
||||||
|
+ lf self.__osk_mode:
|
||||||
|
+ self.__lookup_table_visible = True
|
||||||
|
+ else:
|
||||||
|
+ self.__lookup_table_visible = False
|
||||||
|
self.__invalidate()
|
||||||
|
|
||||||
|
return True
|
||||||
|
@@ -2543,7 +2564,8 @@ class Engine(IBus.EngineSimple):
|
||||||
|
index = self.__lookup_table.get_cursor_pos()
|
||||||
|
candidate = self.__lookup_table.get_candidate(index).get_text()
|
||||||
|
self.__segments[self.__cursor_pos] = index, candidate
|
||||||
|
- self.__lookup_table_visible = False
|
||||||
|
+ if not self.__osk_mode:
|
||||||
|
+ self.__lookup_table_visible = False
|
||||||
|
self.__on_key_right()
|
||||||
|
self.__invalidate()
|
||||||
|
return True
|
||||||
|
--
|
||||||
|
2.41.0
|
||||||
|
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
|
|
||||||
Name: ibus-anthy
|
Name: ibus-anthy
|
||||||
Version: 1.5.14
|
Version: 1.5.14
|
||||||
Release: 11%{?dist}
|
Release: 12%{?dist}
|
||||||
Summary: The Anthy engine for IBus input platform
|
Summary: The Anthy engine for IBus input platform
|
||||||
License: GPL-2.0-or-later
|
License: GPL-2.0-or-later
|
||||||
URL: https://github.com/ibus/ibus/wiki
|
URL: https://github.com/ibus/ibus/wiki
|
||||||
@ -156,6 +156,9 @@ make -C data check
|
|||||||
%{_datadir}/installed-tests/%{name}
|
%{_datadir}/installed-tests/%{name}
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Thu Jul 13 2023 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.14-12
|
||||||
|
- Resolves #2015149 Commit candidate text with clicking on candidate list in OSK
|
||||||
|
|
||||||
* Fri Feb 17 2023 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.14-11
|
* Fri Feb 17 2023 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.14-11
|
||||||
- Fix to load EN compose table
|
- Fix to load EN compose table
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user