diff --git a/honoka/src/honoka_def.h b/honoka/src/honoka_def.h index d77f8a2..e385a6c 100644 --- a/honoka/src/honoka_def.h +++ b/honoka/src/honoka_def.h @@ -80,6 +80,8 @@ #define HONOKA_DEFAULT_KEY_AUTO_CONVERSION "Alt+a" #define HONOKA_CONFIG_KEY_RECONVERSION "/IMEngine/Honoka/ReConversion" #define HONOKA_DEFAULT_KEY_RECONVERSION "Alt+space" +#define HONOKA_CONFIG_KEY_RESULTTOPREEDIT "/IMEngine/Honoka/SetResultToPreEditor" +#define HONOKA_DEFAULT_KEY_RESULTTOPREEDIT "Control+Return" #define HONOKA_CONFIG_ALP "/IMEngine/Honoka/AutoLookupPopup" diff --git a/honoka/src/honoka_imengine.cpp b/honoka/src/honoka_imengine.cpp index 5db23fd..6820b9d 100644 --- a/honoka/src/honoka_imengine.cpp +++ b/honoka/src/honoka_imengine.cpp @@ -253,6 +253,10 @@ m_conversion = false; m_yosoku = false; m_lookup = false; + + while(preeditStack.size()) { + preeditStack.pop(); + } // @todo if connected to jserver, should disconnect this. @@ -356,6 +360,9 @@ scim_string_to_key_list(k_reconversion, _scim_config->read(String(HONOKA_CONFIG_KEY_RECONVERSION), String(HONOKA_DEFAULT_KEY_RECONVERSION))); + scim_string_to_key_list(k_result_to_preedit, + _scim_config->read(String(HONOKA_CONFIG_KEY_RESULTTOPREEDIT), + String(HONOKA_DEFAULT_KEY_RESULTTOPREEDIT))); changePreEditor(defaultPreEditor); @@ -560,6 +567,9 @@ m_convertor->reset(); } else commit_string(m_preeditor->getText(true)); m_preeditor->reset(); + while(preeditStack.size()) { + preeditStack.pop(); + } updatePreEditor(); return true; } else @@ -611,6 +621,12 @@ updatePreEditor(); return true; } + if (preeditStack.size()) { + m_preeditor->reset(); + m_preeditor->setText(preeditStack.top()); + m_preeditor->setPos(preeditStack.top().length()); + preeditStack.pop(); + } else if (m_preeditor->getTextLength()) { m_preeditor->reset(); } @@ -697,6 +713,9 @@ } else if (k_commit.comp(key)) { commit_string(m_convertor->getText()); + while(preeditStack.size()) { + preeditStack.pop(); + } m_convertor->updateFrequency(); m_preeditor->reset(); m_convertor->reset(); @@ -706,6 +725,19 @@ alp_count = 1; return true; } else + if (k_result_to_preedit.comp(key)) { + preeditStack.push(m_preeditor->getText()); + m_preeditor->reset(); + m_preeditor->setText(m_convertor->getText()); + m_preeditor->setPos(m_convertor->getText().length()); + m_convertor->updateFrequency(); + m_convertor->reset(); + m_conversion = false; + m_lookup = false; + alp_count = 1; + updatePreEditor(); + return true; + } else if (k_cancel.comp(key) || k_backspace.comp(key)) { m_convertor->reset(); m_conversion = false; @@ -1138,3 +1170,4 @@ + diff --git a/honoka/src/honoka_imengine.h b/honoka/src/honoka_imengine.h index 1200397..d110fa8 100644 --- a/honoka/src/honoka_imengine.h +++ b/honoka/src/honoka_imengine.h @@ -29,6 +29,7 @@ #include #include #include +#include #include #include #define Uses_SCIM_ICONV @@ -111,6 +112,7 @@ vector convertors; String sType; WideString yomi; + stack preeditStack; protected: bool process_preedit_key_event(const KeyEvent &key); bool process_conversion_key_event(const KeyEvent &key); @@ -153,6 +155,7 @@ k_next_convertor, // �����Ѵ����󥸥�� k_prev_convertor, // �����Ѵ����󥸥�� k_reconversion, // ���Ѵ� + k_result_to_preedit, // �Ѵ���̤�PreEditor��push // for Wnn7 k_conversion_ikeiji, // �۷����Ѵ�