FCITX_EXPORT_API void FcitxInstanceDestroyIC(FcitxInstance* instance, int frontendid, void* filter) { FcitxInputContext *rec, *last; UT_array* frontends = &instance->frontends; FcitxAddon** pfrontend = (FcitxAddon**) utarray_eltptr(frontends, frontendid); if (pfrontend == NULL) return; FcitxFrontend* frontend = (*pfrontend)->frontend; last = NULL; for (rec = instance->ic_list; rec != NULL; last = rec, rec = rec->next) { if (rec->frontendid == frontendid && frontend->CheckIC((*pfrontend)->addonInstance, rec, filter)) { if (last != NULL) last->next = rec->next; else instance->ic_list = rec->next; rec->next = instance->free_list; instance->free_list = rec; if (rec == FcitxInstanceGetCurrentIC(instance)) { FcitxUICloseInputWindow(instance); FcitxUIOnInputUnFocus(instance); FcitxInstanceSetCurrentIC(instance, NULL); } frontend->DestroyIC((*pfrontend)->addonInstance, rec); return; } } return; }
FCITX_EXPORT_API FcitxInputContext* FcitxInstanceFindIC(FcitxInstance* instance, int frontendid, void *filter) { FcitxAddon **pfrontend = FcitxInstanceGetPFrontend(instance, frontendid); if (pfrontend == NULL) return NULL; FcitxFrontend* frontend = (*pfrontend)->frontend; FcitxInputContext *rec = instance->ic_list; while (rec != NULL) { if (rec->frontendid == frontendid && frontend->CheckIC((*pfrontend)->addonInstance, rec, filter)) return rec; rec = rec->next; } return NULL; }