Skip to content

Commit c587900

Browse files
committed
feat(rime_api): get candidate list from index
1 parent 667da57 commit c587900

File tree

2 files changed

+16
-4
lines changed

2 files changed

+16
-4
lines changed

src/rime_api.cc

+10-3
Original file line numberDiff line numberDiff line change
@@ -389,8 +389,9 @@ RIME_API Bool RimeFreeStatus(RimeStatus* status) {
389389

390390
// Accessing candidate list
391391

392-
RIME_API Bool RimeCandidateListBegin(RimeSessionId session_id,
393-
RimeCandidateListIterator* iterator) {
392+
RIME_API Bool RimeCandidateListFromIndex(RimeSessionId session_id,
393+
RimeCandidateListIterator* iterator,
394+
int index) {
394395
if (!iterator)
395396
return False;
396397
an<Session> session(Service::instance().GetSession(session_id));
@@ -401,10 +402,15 @@ RIME_API Bool RimeCandidateListBegin(RimeSessionId session_id,
401402
return False;
402403
memset(iterator, 0, sizeof(RimeCandidateListIterator));
403404
iterator->ptr = ctx->composition().back().menu.get();
404-
iterator->index = -1;
405+
iterator->index = index - 1;
405406
return True;
406407
}
407408

409+
RIME_API Bool RimeCandidateListBegin(RimeSessionId session_id,
410+
RimeCandidateListIterator* iterator) {
411+
return RimeCandidateListFromIndex(session_id, iterator, 0);
412+
}
413+
408414
RIME_API Bool RimeCandidateListNext(RimeCandidateListIterator* iterator) {
409415
if (!iterator)
410416
return False;
@@ -1054,6 +1060,7 @@ RIME_API RimeApi* rime_get_api() {
10541060
s_api.candidate_list_begin = &RimeCandidateListBegin;
10551061
s_api.candidate_list_next = &RimeCandidateListNext;
10561062
s_api.candidate_list_end = &RimeCandidateListEnd;
1063+
s_api.candidate_list_from_index = &RimeCandidateListFromIndex;
10571064
}
10581065
return &s_api;
10591066
}

src/rime_api.h

+6-1
Original file line numberDiff line numberDiff line change
@@ -259,10 +259,12 @@ RIME_API Bool RimeGetStatus(RimeSessionId session_id, RimeStatus* status);
259259
RIME_API Bool RimeFreeStatus(RimeStatus* status);
260260

261261
// Accessing candidate list
262-
263262
RIME_API Bool RimeCandidateListBegin(RimeSessionId session_id, RimeCandidateListIterator* iterator);
264263
RIME_API Bool RimeCandidateListNext(RimeCandidateListIterator* iterator);
265264
RIME_API void RimeCandidateListEnd(RimeCandidateListIterator* iterator);
265+
RIME_API Bool RimeCandidateListFromIndex(RimeSessionId session_id,
266+
RimeCandidateListIterator* iterator,
267+
int index);
266268

267269
// Runtime options
268270

@@ -518,6 +520,9 @@ typedef struct rime_api_t {
518520
// access config files in user data directory, eg. user.yaml and installation.yaml
519521
Bool (*user_config_open)(const char *config_id, RimeConfig* config);
520522

523+
Bool (*candidate_list_from_index)(RimeSessionId session_id,
524+
RimeCandidateListIterator* iterator,
525+
int index);
521526
} RimeApi;
522527

523528
//! API entry

0 commit comments

Comments
 (0)