summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPeng Wu <alexepico@gmail.com>2025-03-06 13:12:30 +0800
committerPeng Wu <alexepico@gmail.com>2025-03-06 20:49:55 +0800
commitbbf2962050bccb4267b7d75af01c6f652b4e9ecb (patch)
tree0948832011cd7cd1a6dbb35c445092b4ad925947 /src
parent3ca9dfa36553daba4658ea1d2525ad65825f7bde (diff)
downloadibus-libpinyin-bbf2962050bccb4267b7d75af01c6f652b4e9ecb.tar.gz
ibus-libpinyin-bbf2962050bccb4267b7d75af01c6f652b4e9ecb.tar.xz
ibus-libpinyin-bbf2962050bccb4267b7d75af01c6f652b4e9ecb.zip
Fix the lookup cursor for the pinyin candidates
Diffstat (limited to 'src')
-rw-r--r--src/PYPBopomofoEditor.cc2
-rw-r--r--src/PYPDoublePinyinEditor.cc2
-rw-r--r--src/PYPFullPinyinEditor.cc1
-rw-r--r--src/PYPLibPinyinCandidates.cc7
-rw-r--r--src/PYPPhoneticEditor.cc31
-rw-r--r--src/PYPPhoneticEditor.h1
6 files changed, 38 insertions, 6 deletions
diff --git a/src/PYPBopomofoEditor.cc b/src/PYPBopomofoEditor.cc
index 1e03b12..b91b594 100644
--- a/src/PYPBopomofoEditor.cc
+++ b/src/PYPBopomofoEditor.cc
@@ -73,6 +73,8 @@ BopomofoEditor::insert (gint ch)
return TRUE;
m_text.insert (m_cursor++, ch);
+ m_lookup_cursor = 0;
+
updatePinyin ();
update ();
diff --git a/src/PYPDoublePinyinEditor.cc b/src/PYPDoublePinyinEditor.cc
index 22aa401..fe53ab1 100644
--- a/src/PYPDoublePinyinEditor.cc
+++ b/src/PYPDoublePinyinEditor.cc
@@ -73,6 +73,8 @@ DoublePinyinEditor::insert (gint ch)
#endif
m_text.insert (m_cursor++, ch);
+ m_lookup_cursor = 0;
+
updatePinyin ();
update ();
diff --git a/src/PYPFullPinyinEditor.cc b/src/PYPFullPinyinEditor.cc
index bd41572..b20a47c 100644
--- a/src/PYPFullPinyinEditor.cc
+++ b/src/PYPFullPinyinEditor.cc
@@ -58,6 +58,7 @@ FullPinyinEditor::insert (gint ch)
#endif
m_text.insert (m_cursor++, ch);
+ m_lookup_cursor = 0;
updatePinyin ();
update ();
diff --git a/src/PYPLibPinyinCandidates.cc b/src/PYPLibPinyinCandidates.cc
index dd3d409..6726739 100644
--- a/src/PYPLibPinyinCandidates.cc
+++ b/src/PYPLibPinyinCandidates.cc
@@ -167,7 +167,12 @@ LibPinyinCandidates::selectCandidate (EnhancedCandidate & enhanced)
guint16 begin = 0;
pinyin_get_pinyin_key_rest_positions (instance, pos, &begin, NULL);
- m_editor->m_cursor = begin;
+
+ /* The cursor is at the end of the text input. */
+ if (m_editor->m_cursor == m_editor->m_text.length ())
+ m_editor->m_lookup_cursor = begin;
+ else
+ m_editor->m_cursor = begin;
return SELECT_CANDIDATE_UPDATE;
}
diff --git a/src/PYPPhoneticEditor.cc b/src/PYPPhoneticEditor.cc
index 00fa610..42d759c 100644
--- a/src/PYPPhoneticEditor.cc
+++ b/src/PYPPhoneticEditor.cc
@@ -31,6 +31,7 @@ PhoneticEditor::PhoneticEditor (PinyinProperties &props,
: Editor (props, config),
m_pinyin_len (0),
m_lookup_table (m_config.pageSize ()),
+ m_lookup_cursor (0),
m_libpinyin_candidates (this),
#ifdef IBUS_BUILD_LUA_EXTENSION
m_lua_trigger_candidates (this),
@@ -379,12 +380,13 @@ PhoneticEditor::getPinyinCursor ()
guint
PhoneticEditor::getLookupCursor (void)
{
- guint lookup_cursor = getPinyinCursor ();
+ guint pinyin_cursor = getPinyinCursor ();
- /* show candidates when pinyin cursor is at end. */
- if (lookup_cursor == m_text.length ())
- lookup_cursor = 0;
- return lookup_cursor;
+ /* show candidates when pinyin cursor is at the end. */
+ if (m_cursor == m_text.length ())
+ return m_lookup_cursor;
+
+ return pinyin_cursor;
}
int
@@ -564,6 +566,8 @@ PhoneticEditor::removeCharBefore (void)
return FALSE;
m_cursor --;
+ m_lookup_cursor = 0;
+
m_text.erase (m_cursor, 1);
updatePinyin ();
@@ -579,6 +583,7 @@ PhoneticEditor::removeCharAfter (void)
return FALSE;
m_text.erase (m_cursor, 1);
+ m_lookup_cursor = 0;
updatePinyin ();
update ();
@@ -593,6 +598,8 @@ PhoneticEditor::moveCursorLeft (void)
return FALSE;
m_cursor --;
+ m_lookup_cursor = 0;
+
update ();
return TRUE;
}
@@ -604,6 +611,8 @@ PhoneticEditor::moveCursorRight (void)
return FALSE;
m_cursor ++;
+ m_lookup_cursor = 0;
+
update ();
return TRUE;
}
@@ -615,6 +624,8 @@ PhoneticEditor::moveCursorToBegin (void)
return FALSE;
m_cursor = 0;
+ m_lookup_cursor = 0;
+
update ();
return TRUE;
}
@@ -626,6 +637,8 @@ PhoneticEditor::moveCursorToEnd (void)
return FALSE;
m_cursor = m_text.length ();
+ m_lookup_cursor = 0;
+
update ();
return TRUE;
}
@@ -670,6 +683,8 @@ PhoneticEditor::removeWordBefore (void)
guint cursor = getCursorLeftByWord ();
m_text.erase (cursor, m_cursor - cursor);
m_cursor = cursor;
+ m_lookup_cursor = 0;
+
updatePinyin ();
update ();
return TRUE;
@@ -683,6 +698,8 @@ PhoneticEditor::removeWordAfter (void)
guint cursor = getCursorRightByWord ();
m_text.erase (m_cursor, cursor - m_cursor);
+ m_lookup_cursor = 0;
+
updatePinyin ();
update ();
return TRUE;
@@ -697,6 +714,8 @@ PhoneticEditor::moveCursorLeftByWord (void)
guint cursor = getCursorLeftByWord ();
m_cursor = cursor;
+ m_lookup_cursor = 0;
+
update ();
return TRUE;
}
@@ -710,6 +729,8 @@ PhoneticEditor::moveCursorRightByWord (void)
guint cursor = getCursorRightByWord ();
m_cursor = cursor;
+ m_lookup_cursor = 0;
+
update ();
return TRUE;
}
diff --git a/src/PYPPhoneticEditor.h b/src/PYPPhoneticEditor.h
index 03e61aa..2032cf1 100644
--- a/src/PYPPhoneticEditor.h
+++ b/src/PYPPhoneticEditor.h
@@ -117,6 +117,7 @@ protected:
/* varibles */
guint m_pinyin_len;
LookupTable m_lookup_table;
+ guint m_lookup_cursor;
String m_buffer;
/* use LibPinyinBackEnd here. */