diff --git a/honoka/libhonoka/honokapluginbase.h b/honoka/libhonoka/honokapluginbase.h index f44ee88..52d0aee 100644 --- a/honoka/libhonoka/honokapluginbase.h +++ b/honoka/libhonoka/honokapluginbase.h @@ -40,6 +40,7 @@ #define HONOKA_CONFIG_KEY_CONVERTOR_PREFIX "/IMEngine/Honoka/Key/Convertor" #define HONOKA_CONFIG_KEY_PREEDITOR_PREFIX "/IMEngine/Honoka/Key/PreEditor" #define HONOKA_CONFIG_KEY_PREDICTOR_PREFIX "/IMEngine/Honoka/Key/Predictor" +#define HONOKA_CONFIG_KEY_FILTER_PREFIX "/IMEngine/Honoka/Key/Filter" diff --git a/honoka/src/honoka_imengine.cpp b/honoka/src/honoka_imengine.cpp index fa253a2..a0fc21d 100644 --- a/honoka/src/honoka_imengine.cpp +++ b/honoka/src/honoka_imengine.cpp @@ -509,6 +509,12 @@ _scim_config->read(String(HONOKA_CONFIG_KEY_PREDICTOR_PREFIX) + String("/") + predictors[i]->getName(),String(""))); k_predictor.push_back(k); } + for(unsigned int i = 0;i < filters.size();i ++) { + HonokaKeyEventList k; + scim_string_to_key_list(k, + _scim_config->read(String(HONOKA_CONFIG_KEY_FILTER_PREFIX) + String("/") + filters[i]->getName(),String(""))); + k_filter.push_back(k); + } if (save_setting) { changePreEditor(_scim_config->read(String(HONOKA_PREVIOUS_PREEDITOR),String())); @@ -985,6 +991,15 @@ return true; } } + for(unsigned int i = 0;i < k_filter.size();i ++) { + if (k_filter[i].comp(key)) { + if (filters[i] == m_filter) return true; + //m_predictor = predictors[i]; + changeFilter(filters[i]->getName()); + updatePreEditor(); + return true; + } + } // 処理。 if (k_reconversion.comp(key)) { @@ -1508,6 +1523,28 @@ } } + // フィルタ選択キー + for(unsigned int i = 0;i < k_filter.size();i ++) { + if (k_filter[i].comp(key)) { + TextFilter *f = m_filter; + if (filters[i] != m_filter) changeFilter(filters[i]->getName()); + commit_string(m_filter->filter(segments)); + m_filter = f; + m_convertor->updateFrequency(); + if (prediction) if (m_predictor->isConnected()) m_predictor->update(getConvertedText(),m_preeditor->getText(true)); + m_preeditor->reset(); + m_convertor->reset(); + m_conversion = false; + updatePreEditor(); + m_lookup = false; + alp_count = 1; + if (m_def_convertor != m_convertor) m_convertor = m_def_convertor; + updateProperty(); + return true; + } + } + + // それ以外のキーの場合、表示可能キーなら確定してPreEdit入力を再開。 if (key.get_unicode_code()) { commit_string(getConvertedText()); diff --git a/honoka/src/honoka_imengine.h b/honoka/src/honoka_imengine.h index 695b425..611b0bc 100644 --- a/honoka/src/honoka_imengine.h +++ b/honoka/src/honoka_imengine.h @@ -236,6 +236,7 @@ vector k_convertor; vector k_preeditor; vector k_predictor; + vector k_filter; };