diff --git a/scim-wnn/src/scim_wnn_imengine.cpp b/scim-wnn/src/scim_wnn_imengine.cpp index 8fe982a..95739e3 100644 --- a/scim-wnn/src/scim_wnn_imengine.cpp +++ b/scim-wnn/src/scim_wnn_imengine.cpp @@ -248,6 +248,12 @@ scim_string_to_key_list(k_lookup_popup, _scim_config->read(String(SCIM_CONFIG_WNN_KEY) + String("LookupPopup"), String("Alt+s"))); + scim_string_to_key_list(k_lookup_pageup, + _scim_config->read(String(SCIM_CONFIG_WNN_KEY) + String("LookupPageUp"), + String("Page_Up"))); + scim_string_to_key_list(k_lookup_pagedown, + _scim_config->read(String(SCIM_CONFIG_WNN_KEY) + String("LookupPageDown"), + String("Page_Down"))); } @@ -346,6 +352,16 @@ startLookup(); return(true); } else + if (k_lookup_pageup.comp(key)) { + if (m_lookup) { + lookup_table_page_up(); + } + } else + if (k_lookup_pagedown.comp(key)) { + if (m_lookup) { + lookup_table_page_down(); + } + } else if (k_commit.comp(key)) { commit_string(wnn.getText()); wnn.updateFrequency(); @@ -431,15 +447,15 @@ void WnnInstance::select_candidate (unsigned int item) { - if (!m_lookup_table.number_of_candidates()) return; + if (!m_lookup_table.number_of_candidates()) return; - int p = m_lookup_table.get_current_page_start() + item; - m_convList.pos = p; - wnn.select(m_convList.pos); - update_preedit_string(wnn.getText(),wnn.getAttributeList()); - update_preedit_caret(wnn.getCaretPos()); - m_lookup_table.set_cursor_pos(m_convList.pos); - update_lookup_table(m_lookup_table); + int p = m_lookup_table.get_current_page_start() + item; + m_convList.pos = p; + wnn.select(m_convList.pos); + update_preedit_string(wnn.getText(),wnn.getAttributeList()); + update_preedit_caret(wnn.getCaretPos()); + m_lookup_table.set_cursor_pos(m_convList.pos); + update_lookup_table(m_lookup_table); } void WnnInstance::update_lookup_table_page_size (unsigned int page_size) @@ -451,10 +467,14 @@ { if (!m_lookup_table.number_of_candidates () || !m_lookup_table.get_current_page_start ()) return; - m_lookup_table.page_up (); - - update_lookup_table (m_lookup_table); - + int p = m_convList.pos - m_lookup_table.get_current_page_size(); + if (p < 0) p = 0; + m_convList.pos = p; + wnn.select(m_convList.pos); + update_preedit_string(wnn.getText(),wnn.getAttributeList()); + update_preedit_caret(wnn.getCaretPos()); + m_lookup_table.set_cursor_pos(m_convList.pos); + update_lookup_table(m_lookup_table); } void WnnInstance::lookup_table_page_down () @@ -464,10 +484,14 @@ m_lookup_table.number_of_candidates ()) return; - m_lookup_table.page_down (); - - update_lookup_table (m_lookup_table); - + 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; + wnn.select(m_convList.pos); + update_preedit_string(wnn.getText(),wnn.getAttributeList()); + update_preedit_caret(wnn.getCaretPos()); + m_lookup_table.set_cursor_pos(m_convList.pos); + update_lookup_table(m_lookup_table); } void WnnInstance::reset () diff --git a/scim-wnn/src/scim_wnn_imengine.h b/scim-wnn/src/scim_wnn_imengine.h index b4ae72a..7ce93de 100644 --- a/scim-wnn/src/scim_wnn_imengine.h +++ b/scim-wnn/src/scim_wnn_imengine.h @@ -110,6 +110,8 @@ k_forward, // ���������ư/�� k_backward, // ���������ư/��� k_lookup_popup, // �������ɽ�� + k_lookup_pageup, // ����������� + k_lookup_pagedown, // ����������� k_dummy; };