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:
      *