diff options
Diffstat (limited to 'src/ZYZPinyinEditor.cc')
-rw-r--r-- | src/ZYZPinyinEditor.cc | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/src/ZYZPinyinEditor.cc b/src/ZYZPinyinEditor.cc index a3683a8..30457f1 100644 --- a/src/ZYZPinyinEditor.cc +++ b/src/ZYZPinyinEditor.cc @@ -63,10 +63,12 @@ PinyinEditor::commit (void) void PinyinEditor::reset (void) { + m_preedit_text = ""; + PhoneticEditor::reset (); } -void +guint PinyinEditor::updateZhuyin (void) { const String & enhanced_text = m_text; @@ -75,6 +77,7 @@ PinyinEditor::updateZhuyin (void) size_t index = 0; size_t start_pos = 0, end_pos = 0; + guint pos = 0; while (end_pos != enhanced_text.size ()) { section_t type = probe_section_quick (enhanced_text, start_pos); @@ -84,9 +87,12 @@ PinyinEditor::updateZhuyin (void) get_phonetic_section (enhanced_text, start_pos, end_pos, section); zhuyin_instance_t * instance = m_instances[index]; - zhuyin_parse_more_full_pinyins (instance, section.c_str ()); + size_t len = zhuyin_parse_more_full_pinyins + (instance, section.c_str ()); zhuyin_guess_sentence (instance); + pos = start_pos + len; + ++index; } @@ -100,7 +106,7 @@ PinyinEditor::updateZhuyin (void) start_pos = end_pos; } - return; + return pos; } void @@ -181,6 +187,15 @@ PinyinEditor::insert (guint keyval, guint keycode, guint modifiers) if (modifiers != 0 && m_text.empty ()) return FALSE; + /* the space key is not part of pinyin string. */ + if (IBUS_space == keyval && + m_cursor == get_enhanced_text_length (m_text)) { + commit (); + StaticText space (" "); + commitText (space); + return TRUE; + } + if (IS_PINYIN (keyval)) { insert_phonetic (m_text, m_cursor++, keyval); |