summaryrefslogtreecommitdiffstats
path: root/src/ZYZPhoneticSection.cc
diff options
context:
space:
mode:
authorPeng Wu <alexepico@gmail.com>2014-07-14 11:06:15 +0800
committerPeng Wu <alexepico@gmail.com>2014-07-14 11:06:15 +0800
commit0de259f2382df739af096ac07728ec7a2dd2b6ae (patch)
tree469074ad4ffbde312610386422ef4f73fe9dbfa4 /src/ZYZPhoneticSection.cc
parent14394369bf5bf4f16c0f8a121e51eeb4316d1e9d (diff)
downloadibus-libzhuyin-0de259f2382df739af096ac07728ec7a2dd2b6ae.tar.gz
ibus-libzhuyin-0de259f2382df739af096ac07728ec7a2dd2b6ae.tar.xz
ibus-libzhuyin-0de259f2382df739af096ac07728ec7a2dd2b6ae.zip
support auto shift cursor after choose candidate
Diffstat (limited to 'src/ZYZPhoneticSection.cc')
-rw-r--r--src/ZYZPhoneticSection.cc33
1 files changed, 29 insertions, 4 deletions
diff --git a/src/ZYZPhoneticSection.cc b/src/ZYZPhoneticSection.cc
index b7a0e2d..a240a68 100644
--- a/src/ZYZPhoneticSection.cc
+++ b/src/ZYZPhoneticSection.cc
@@ -20,6 +20,7 @@
*/
#include "ZYZPhoneticSection.h"
+#include <assert.h>
#include "ZYZhuyinProperties.h"
#include "ZYTradSimpConverter.h"
@@ -37,10 +38,14 @@ PhoneticSection::~PhoneticSection ()
bool
PhoneticSection::initCandidates (zhuyin_instance_t * instance,
- int offset)
+ int cursor)
{
m_instance = instance;
- m_offset = offset;
+ m_cursor = cursor;
+
+ guint16 offset = 0;
+ zhuyin_get_zhuyin_key_rest_offset
+ (instance, cursor, &offset);
zhuyin_guess_candidates (m_instance, offset);
@@ -93,12 +98,32 @@ PhoneticSection::fillLookupTableByPage ()
int
PhoneticSection::selectCandidate (guint index)
{
+ guint16 prev_pos = m_cursor, cur_pos = 0;
+ ChewingKeyRest * key_rest = NULL;
+
lookup_candidate_t * candidate = NULL;
zhuyin_get_candidate (m_instance, index, &candidate);
- int retval = zhuyin_choose_candidate (m_instance, m_offset, candidate);
+ guint16 offset = 0;
+ zhuyin_get_zhuyin_key_rest_offset
+ (m_instance, m_cursor, &offset);
+
+ offset = zhuyin_choose_candidate
+ (m_instance, offset, candidate);
+
+ guint len = 0;
+ zhuyin_get_n_zhuyin (m_instance, &len);
+
+ if (offset < len) {
+ zhuyin_get_zhuyin_key_rest (m_instance, offset, &key_rest);
+ zhuyin_get_zhuyin_key_rest_positions
+ (m_instance, key_rest, &cur_pos, NULL);
+ } else {
+ assert (offset == len);
+ cur_pos = zhuyin_get_parsed_input_length (m_instance);
+ }
- return retval - m_offset;
+ return cur_pos - prev_pos;
}
};