summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPeng Huang <shawn.p.huang@gmail.com>2009-09-25 11:37:10 +0800
committerPeng Huang <shawn.p.huang@gmail.com>2009-09-25 11:37:10 +0800
commitb4041c918a42a6f26d190fd9009800bc12c42548 (patch)
tree81ba4cd99fc679d1154bb8555667ee0253deaff5
parenta0ee977ca23b41650f841089e1f184787324b22a (diff)
downloadibus-libpinyin-b4041c918a42a6f26d190fd9009800bc12c42548.tar.gz
ibus-libpinyin-b4041c918a42a6f26d190fd9009800bc12c42548.tar.xz
ibus-libpinyin-b4041c918a42a6f26d190fd9009800bc12c42548.zip
Implement shift select candidate
-rw-r--r--setup/ibus-pinyin-preferences.glade1
-rw-r--r--setup/main.py2
-rw-r--r--src/Config.cc20
-rw-r--r--src/Config.h7
-rw-r--r--src/PinyinEngine.cc19
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;
}