diff --git a/honoka/src/honoka_imengine.cpp b/honoka/src/honoka_imengine.cpp index 51396a6..5ecd0ea 100644 --- a/honoka/src/honoka_imengine.cpp +++ b/honoka/src/honoka_imengine.cpp @@ -462,12 +462,19 @@ //segments = seglist; WideString t; for(unsigned int i = 0;i < seglist.size();i ++) { - if (i < m_convertor->getPos()) { - if (seglist[i].getKanji() != segments[i].getKanji()) + if ((i < m_convertor->getPos()) && (segments.size() > i)) { + if ((seglist[i].getKanji() != segments[i].getKanji()) && (seglist[i].getYomi().length() == segments[i].getYomi().length())) newsegs.push_back(segments[i]); else newsegs.push_back(seglist[i]); - } else newsegs.push_back(seglist[i]); + } else if (i == m_convertor->getPos()) + newsegs.push_back(Segment(m_convList.kouho[m_convList.pos].kanji,seglist[i].getYomi())); + else newsegs.push_back(seglist[i]); +/* + if (i == m_convertor->getPos()) newsegs.push_back(Segment(m_convList.kouho[m_convList.pos].kanji,seglist[i].getYomi())); + else newsegs.push_back(seglist[i]); +*/ } + //if (m_convList.kouho[m_convList.pos] != newsegs[m_convertor->getPos()]) segments = newsegs; for(unsigned int i = 0;i < segments.size();i ++) { t += segments[i].getKanji(); @@ -954,11 +961,12 @@ else if (m_convList.pos < 0) m_convList.pos = m_convList.count() - 1; alp_count ++; - m_convertor->select(m_convList.pos); + if (!m_no_update) m_convertor->select(m_convList.pos); updateConversion(); return true; } else if (k_conversion_expand.comp(key) || k_conversion_shrink.comp(key)) { + m_no_update = false; bool r; k_conversion_shrink.comp(key) ? r = m_convertor->resizeRegion(-1) : r = m_convertor->resizeRegion(1); if (!r) return true; @@ -971,6 +979,7 @@ return true; } else if (k_conversion_rensou.comp(key)) { + m_no_update = false; m_convList = m_convertor->getResultList(m_convertor->getPos(),SPECIAL1); if (m_convList.count() == 0) return true; startLookup(); @@ -979,6 +988,7 @@ return true; } else if (k_conversion_ikeiji.comp(key)) { + m_no_update = false; m_convList = m_convertor->getResultList(m_convertor->getPos(),SPECIAL2); if (m_convList.count() == 0) return true; startLookup(); @@ -987,6 +997,7 @@ return true; } else if (k_conversion_forward.comp(key) || k_conversion_backward.comp(key)) { + m_no_update = false; k_conversion_backward.comp(key) ? m_convertor->setPos(m_convertor->getPos() - 1) : m_convertor->setPos(m_convertor->getPos() + 1); m_convList = m_convertor->getResultList(); if (alp == -1) { @@ -1002,7 +1013,7 @@ for(unsigned int i = 0;i < m_convList.count();i ++) { if (res == m_convList.kouho[i].kanji) { m_convList.pos = i; - m_convertor->select(m_convList.pos); + if (!m_no_update) m_convertor->select(m_convList.pos); updateConversion(); break; } @@ -1035,7 +1046,8 @@ if (numc < 0) numc = 9; if (m_lookup_table.get_current_page_size() <= numc) return true; m_convList.pos = numc + m_lookup_table.get_current_page_start(); - m_convertor->select(m_convList.pos); + if (!m_no_update) m_convertor->select(m_convList.pos); + m_no_update = false; m_convertor->setPos(m_convertor->getPos() + 1); m_convList = m_convertor->getResultList(); updateConversion(); @@ -1044,6 +1056,22 @@ } } } + if (m_convertor != m_multi) { + for(unsigned int i = 0;i < k_convertor.size();i ++) { + if (k_convertor[i].comp(key) && (convertors[i] != m_convertor)) { + m_no_update = true; + convertors[i]->setYomiText(m_preeditor->getText(true)); + convertors[i]->ren_conversion(); + MultiConvertor::aline(m_convertor,convertors[i]); + m_convList = convertors[i]->getResultList(m_convertor->getPos()); + m_convList.Title = utf8_mbstowcs(String("(") + convertors[i]->getPropertyName() + String(")")); + convertors[i]->reset(); + startLookup(); + updateConversion(); + return(true); + } + } + } if (key.get_ascii_code()) { /* @@ -1190,7 +1218,7 @@ int p = m_lookup_table.get_current_page_start() + item; m_convList.pos = p; - m_convertor->select(m_convList.pos); + if (!m_no_update) m_convertor->select(m_convList.pos); if (m_convList.kType != PREDICTION) { updateConvertedString(); } else { @@ -1221,7 +1249,7 @@ int p = m_convList.pos - m_lookup_table.get_current_page_size(); if (p < 0) p = 0; m_convList.pos = p; - m_convertor->select(m_convList.pos); + if (!m_no_update) m_convertor->select(m_convList.pos); updateConvertedString(); m_lookup_table.set_cursor_pos(m_convList.pos); update_aux_string(m_convList.Title + getPosPerCount(m_convList.pos,m_convList.count())); @@ -1239,7 +1267,7 @@ int p = m_convList.pos + m_lookup_table.get_current_page_size(); if (p >= m_convList.count()) p = m_convList.count() - 1; m_convList.pos = p; - m_convertor->select(m_convList.pos); + if (!m_no_update) m_convertor->select(m_convList.pos); updateConvertedString(); m_lookup_table.set_cursor_pos(m_convList.pos); update_aux_string(m_convList.Title + getPosPerCount(m_convList.pos,m_convList.count())); @@ -1358,9 +1386,11 @@ m_convertor = m_def_convertor; return; } + m_no_update = false; m_convList.kouho.clear(); m_convList = m_convertor->getResultList(); m_conversion = true; + segments = m_convertor->getSegmentList(); alp_count = 1; diff --git a/honoka/src/honoka_imengine.h b/honoka/src/honoka_imengine.h index 05ea9c6..c47dfa0 100644 --- a/honoka/src/honoka_imengine.h +++ b/honoka/src/honoka_imengine.h @@ -118,7 +118,9 @@ bool m_prediction; bool m_lookup; ResultList m_convList; + ResultList m_convListOrig; PropertyList m_proplist; + bool m_no_update; int alp; int alp_count; bool numkeyselect;