diff options
author | Peng Huang <shawn.p.huang@gmail.com> | 2009-09-25 11:37:10 +0800 |
---|---|---|
committer | Peng Huang <shawn.p.huang@gmail.com> | 2009-09-25 11:37:10 +0800 |
commit | b4041c918a42a6f26d190fd9009800bc12c42548 (patch) | |
tree | 81ba4cd99fc679d1154bb8555667ee0253deaff5 | |
parent | a0ee977ca23b41650f841089e1f184787324b22a (diff) | |
download | ibus-libpinyin-b4041c918a42a6f26d190fd9009800bc12c42548.tar.gz ibus-libpinyin-b4041c918a42a6f26d190fd9009800bc12c42548.tar.xz ibus-libpinyin-b4041c918a42a6f26d190fd9009800bc12c42548.zip |
Implement shift select candidate
-rw-r--r-- | setup/ibus-pinyin-preferences.glade | 1 | ||||
-rw-r--r-- | setup/main.py | 2 | ||||
-rw-r--r-- | src/Config.cc | 20 | ||||
-rw-r--r-- | src/Config.h | 7 | ||||
-rw-r--r-- | src/PinyinEngine.cc | 19 |
5 files changed, 45 insertions, 4 deletions
diff --git a/setup/ibus-pinyin-preferences.glade b/setup/ibus-pinyin-preferences.glade index 84f913b..18cd245 100644 --- a/setup/ibus-pinyin-preferences.glade +++ b/setup/ibus-pinyin-preferences.glade @@ -372,7 +372,6 @@ <object class="GtkCheckButton" id="ShiftSelectCandidate"> <property name="label" translatable="yes">Press [Shift] key to select candidate</property> <property name="visible">True</property> - <property name="sensitive">False</property> <property name="can_focus">True</property> <property name="receives_default">False</property> <property name="draw_indicator">True</property> diff --git a/setup/main.py b/setup/main.py index 5629aaf..d50bdfa 100644 --- a/setup/main.py +++ b/setup/main.py @@ -107,6 +107,7 @@ class PreferencesDialog: self.__shift_select_candidate.set_active(self.__get_value("ShiftSelectCandidate", False)) self.__minus_equal_page.set_active(self.__get_value("MinusEqualPage", True)) self.__comma_period_page.set_active(self.__get_value("CommaPeriodPage", True)) + self.__auto_commit.set_active(self.__get_value("AutoCommit", False)) self.__half_width_puncts.set_text(self.__get_value("HalfWidthPuncts", "+-*/=%")) # connect signals @@ -116,6 +117,7 @@ class PreferencesDialog: self.__shift_select_candidate.connect("toggled", self.__toggled_cb, "ShiftSelectCandidate") self.__minus_equal_page.connect("toggled", self.__toggled_cb, "MinusEqualPage") self.__comma_period_page.connect("toggled", self.__toggled_cb, "CommaPeriodPage") + self.__auto_commit.connect("toggled", self.__toggled_cb, "AutoCommit") self.__lookup_table_page_size.connect("value-changed", __lookup_table_page_size_changed_cb) def __entry_activate_cb(widget, name): diff --git a/src/Config.cc b/src/Config.cc index 3d2f4cf..ecf861f 100644 --- a/src/Config.cc +++ b/src/Config.cc @@ -6,11 +6,16 @@ namespace PY { guint Config::m_option = PINYIN_SIMPLE_PINYIN | PINYIN_CORRECT_ALL; guint Config::m_option_mask = PINYIN_SIMPLE_PINYIN | PINYIN_CORRECT_ALL; + guint Config::m_page_size = 5; +gboolean Config::m_shift_select_candidate = FALSE; gboolean Config::m_minus_equal_page = TRUE; gboolean Config::m_comma_period_page = TRUE; +gboolean Config::m_auto_commit = FALSE; + gboolean Config::m_double_pinyin = FALSE; gint Config::m_double_pinyin_schema = 0; + gboolean Config::m_init_chinese = TRUE; gboolean Config::m_init_full = FALSE; gboolean Config::m_init_full_punct = TRUE; @@ -19,11 +24,16 @@ gboolean Config::m_init_simp_chinese = TRUE; static const StaticString engine_pinyin ("engine/Pinyin"); static const StaticString correct_pinyin ("CorrectPinyin"); static const StaticString fuzzy_pinyin ("FuzzyPinyin"); + static const StaticString page_size ("LookupTablePageSize"); +static const StaticString shift_select_candidate ("ShiftSelectCandidate"); static const StaticString minus_equal_page ("MinusEqualPage"); static const StaticString comma_period_page ("CommaPeriodPage"); +static const StaticString auto_commit ("AutoCommit"); + static const StaticString double_pinyin ("DoublePinyin"); static const StaticString double_pinyin_schema ("DoublePinyinSchema"); + static const StaticString init_chinese ("InitChinese"); static const StaticString init_full ("InitFull"); static const StaticString init_full_punct ("InitFullPunct"); @@ -80,11 +90,13 @@ Config::readDefaultValues (void) m_init_full = read (engine_pinyin, init_full, false); m_init_full_punct = read (engine_pinyin, init_full_punct, true); m_init_simp_chinese = read (engine_pinyin, init_simp_chinese, true); - + /* others */ m_page_size = read (engine_pinyin, page_size, 5); + m_shift_select_candidate = read (engine_pinyin, shift_select_candidate, false); m_minus_equal_page = read (engine_pinyin, minus_equal_page, true); m_comma_period_page = read (engine_pinyin, comma_period_page, true); + m_auto_commit = read (engine_pinyin, auto_commit, false); /* correct pinyin */ if (read (engine_pinyin, correct_pinyin, true)) @@ -154,7 +166,7 @@ Config::valueChangedCallback (IBusConfig *config, { if (engine_pinyin != section) return; - + /* double pinyin */ if (double_pinyin == name) m_double_pinyin = normalizeGValue (value, false); @@ -172,10 +184,14 @@ Config::valueChangedCallback (IBusConfig *config, /* lookup table page size */ else if (page_size == name) m_page_size = normalizeGValue (value, 5); + else if (shift_select_candidate == name) + m_shift_select_candidate = normalizeGValue (value, false); else if (minus_equal_page == name) m_minus_equal_page = normalizeGValue (value, true); else if (comma_period_page == name) m_comma_period_page = normalizeGValue (value, true); + else if (auto_commit == name) + m_auto_commit = normalizeGValue (value, false); /* correct pinyin */ else if (correct_pinyin == name) { if (normalizeGValue (value, TRUE)) diff --git a/src/Config.h b/src/Config.h index 914add2..ef62769 100644 --- a/src/Config.h +++ b/src/Config.h @@ -18,8 +18,10 @@ public: static guint option (void) { return m_option & m_option_mask; } static guint pageSize (void) { return m_page_size; } + static gboolean shiftSelectCandidate (void) { return m_shift_select_candidate; } static gboolean minusEqualPage (void) { return m_minus_equal_page; } static gboolean commaPeriodPage (void) { return m_comma_period_page; } + static gboolean autoCommit (void) { return m_auto_commit; } static gboolean doublePinyin (void) { return m_double_pinyin; } static gint doublePinyinSchema (void) { return m_double_pinyin_schema; } static gboolean initChinese (void) { return m_init_chinese; } @@ -43,11 +45,16 @@ private: private: static guint m_option; static guint m_option_mask; + static guint m_page_size; + static gboolean m_shift_select_candidate; static gboolean m_minus_equal_page; static gboolean m_comma_period_page; + static gboolean m_auto_commit; + static gboolean m_double_pinyin; static gint m_double_pinyin_schema; + static gboolean m_init_chinese; static gboolean m_init_full; static gboolean m_init_full_punct; diff --git a/src/PinyinEngine.cc b/src/PinyinEngine.cc index dc0deff..27d96ff 100644 --- a/src/PinyinEngine.cc +++ b/src/PinyinEngine.cc @@ -277,6 +277,18 @@ PinyinEngine::processOthers (guint keyval, guint keycode, guint modifiers) /* process some cursor control keys */ gboolean _update = FALSE; switch (keyval) { + case IBUS_Shift_L: + if (Config::shiftSelectCandidate () && + m_mode_chinese) { + selectCandidate (1); + } + break; + case IBUS_Shift_R: + if (Config::shiftSelectCandidate () && + m_mode_chinese) { + selectCandidate (2); + } + break; case IBUS_Return: if (G_UNLIKELY (m_mode_full)) { m_buffer.truncate (0); @@ -405,12 +417,17 @@ PinyinEngine::processKeyEvent (guint keyval, guint keycode, guint modifiers) retval = processPunct (keyval, keycode, modifiers); break; /* others */ + case IBUS_Shift_L: + case IBUS_Shift_R: default: retval = processOthers (keyval, keycode, modifiers); break; } - m_prev_pressed_key = keyval; + if (!retval) + m_prev_pressed_key = keyval; + else + m_prev_pressed_key = 0; return retval; } |