Add support for selecting candidates via mouseclick.
BUG=chromium-os:3742
TEST=Set your IME to chewing. Type 'ql', press space twice. Click on a candidate.
Review URL: http://codereview.chromium.org/2436006
diff --git a/src/IBusChewingEngine-keys.c b/src/IBusChewingEngine-keys.c
index 98d4e1b..2598d4e 100644
--- a/src/IBusChewingEngine-keys.c
+++ b/src/IBusChewingEngine-keys.c
@@ -198,3 +198,10 @@
}
return self_update(self);
}
+
+void ibus_chewing_engine_candidate_clicked(IBusEngine *engine, guint index,
+ guint button, guint state) {
+ G_DEBUG_MSG(3,"[I3] cadidate_clicked(-, %u, %u, %u) ... proceed.", index, button, state);
+ IBusChewingEngine *self=IBUS_CHEWING_ENGINE(engine);
+ self_handle_candidate_clicked(self, index, button, state);
+}
diff --git a/src/IBusChewingEngine.gob b/src/IBusChewingEngine.gob
index 2248deb..ee7eb95 100644
--- a/src/IBusChewingEngine.gob
+++ b/src/IBusChewingEngine.gob
@@ -140,6 +140,8 @@
%privateheader{
gboolean ibus_chewing_engine_process_key_event(IBusEngine *engine,
guint keyval, guint modifiers);
+void ibus_chewing_engine_candidate_clicked(IBusEngine *engine, guint index,
+ guint button, guint state);
#ifndef IBUS_1_1
gboolean ibus_chewing_engine_process_key_event_1_2(IBusEngine *engine,
@@ -268,6 +270,7 @@
#else
ibus_engine_class->process_key_event = ibus_chewing_engine_process_key_event_1_2;
#endif /* IBUS_1_1 */
+ ibus_engine_class->candidate_clicked = ibus_chewing_engine_candidate_clicked;
}
private void load_setting(self){
@@ -741,6 +744,25 @@
}
}
+ protected void handle_candidate_clicked(self, guint index, guint button, guint state){
+ if (index >= chewing_get_candPerPage(self->context)) {
+ G_DEBUG_MSG(3,"[I3] handle_cadidate_clicked(-, %u, %u, %u) ... index out of range.", index, button, state);
+ return;
+ }
+ if (self->inputMode==CHEWING_INPUT_MODE_SELECTING_DONE){
+ int* keys = chewing_get_selKey(self->context);
+ if (!keys) {
+ G_DEBUG_MSG(3,"[I3] handle_cadidate_clicked(-, %u, %u, %u) ... No sel keys.", index, button, state);
+ return;
+ }
+ ibus_chewing_engine_set_status_flag(self, ENGINE_STATUS_NEED_COMMIT);
+ chewing_handle_Default(self->context, keys[index]);
+ self_update(self);
+ } else {
+ G_DEBUG_MSG(3,"[I3] handle_cadidate_clicked() ... Wrong mode: %u", self->inputMode);
+ }
+ }
+
/*
* determine_input_mode:
*