Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(30)

Unified Diff: src/IBusChewingEngine.gob

Issue 1733014: Fix the space bar to insert spaces in ibus-chewing (Closed)
Patch Set: Code Review Created 10 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | src/IBusChewingEngine-def.c » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/IBusChewingEngine.gob
diff --git a/src/IBusChewingEngine.gob b/src/IBusChewingEngine.gob
index 850b8bc90c01cdbc441f56064a417cb320323510..2248debd730af8366fd256ab1d54020baff241d9 100644
--- a/src/IBusChewingEngine.gob
+++ b/src/IBusChewingEngine.gob
@@ -108,6 +108,7 @@ enum ENGINE_STATUS{
FOCUS_IN= 0x4,
SHOW_CANDIDATE= 0x8,
NEED_COMMIT= 0x10,
+ FORCE_COMMIT= 0x20,
} Engine:Status;
%h{
@@ -439,7 +440,7 @@ class IBus:Chewing:Engine from IBus:Engine{
private void update_lookup_table(self){
if (!self->table){
- self->table=ibus_lookup_table_new(1,0,FALSE,TRUE);
+ self->table=ibus_lookup_table_new(1,0,TRUE,TRUE);
g_object_ref_sink(self->table);
}
ibus_lookup_table_clear(self->table);
@@ -520,7 +521,6 @@ class IBus:Chewing:Engine from IBus:Engine{
case CHEWING_INPUT_STYLE_IN_APPLICATION:
if (chewing_aux_Length(self->context)>0){
gchar *aux_string=chewing_aux_String(self->context);
- iText=ibus_text_new_from_string (aux_string);
iText=g_object_ref_sink(ibus_text_new_from_string (aux_string));
ibus_engine_update_auxiliary_text(IBUS_ENGINE(self),iText,TRUE);
g_object_unref (iText);
@@ -555,6 +555,7 @@ class IBus:Chewing:Engine from IBus:Engine{
self_determine_input_mode(self);
gint chiSymbolCursor;
glong zhuyin_item_written;
+ self_commit(self);
gchar *preeditBuf=self_make_preedit_string(self, &zhuyin_item_written);
IBusText *iText=self_decorate_preedit(self, preeditBuf, &chiSymbolCursor, zhuyin_item_written);
if (g_object_is_floating(iText)){
@@ -577,7 +578,7 @@ class IBus:Chewing:Engine from IBus:Engine{
free(phoneSeq);
}
self_update_lookup_table(self);
- self_commit(self);
+ //self_commit(self);
gboolean ret=TRUE;
if (chewing_keystroke_CheckAbsorb(self->context)){
@@ -792,7 +793,7 @@ class IBus:Chewing:Engine from IBus:Engine{
protected gboolean commit(self){
gint commit=chewing_commit_Check(self->context);
G_DEBUG_MSG(2,"[I2] commit() %s statusFlags=%x", (commit) ? "TRUE": "FALSE", self->_priv->statusFlags);
- if (commit && (self->_priv->statusFlags & ENGINE_STATUS_NEED_COMMIT)){
+ if ((self->_priv->statusFlags & ENGINE_STATUS_NEED_COMMIT) && commit){
IBusText *iText=NULL;
gchar *commit_string=chewing_commit_String(self->context);
@@ -801,7 +802,19 @@ class IBus:Chewing:Engine from IBus:Engine{
ibus_engine_commit_text(IBUS_ENGINE(self),iText);
g_free(commit_string);
g_object_unref(iText);
- ibus_chewing_engine_clear_status_flag(self, ENGINE_STATUS_NEED_COMMIT);
+ if (!chewing_buffer_Check(self->context)){
+ /* Buffer is clean */
+ ibus_chewing_engine_clear_status_flag(self, ENGINE_STATUS_NEED_COMMIT | ENGINE_STATUS_FORCE_COMMIT );
+ }else if (self->_priv->statusFlags & ENGINE_STATUS_FORCE_COMMIT){
+ /* Flush the buffer */
+ chewing_handle_Enter(self->context);
+ commit_string=chewing_commit_String(self->context);
+ iText=g_object_ref_sink(ibus_text_new_from_string(commit_string));
+ ibus_engine_commit_text(IBUS_ENGINE(self),iText);
+ g_free(commit_string);
+ g_object_unref(iText);
+ ibus_chewing_engine_clear_status_flag(self, ENGINE_STATUS_FORCE_COMMIT );
+ }
}
return commit;
}
@@ -820,7 +833,7 @@ class IBus:Chewing:Engine from IBus:Engine{
}
chewing_handle_Enter(self->context);
}
- ibus_chewing_engine_set_status_flag(self, ENGINE_STATUS_NEED_COMMIT);
+ ibus_chewing_engine_set_status_flag(self, ENGINE_STATUS_NEED_COMMIT | ENGINE_STATUS_FORCE_COMMIT);
self_update(self);
}
}
@@ -832,6 +845,10 @@ class IBus:Chewing:Engine from IBus:Engine{
reset(IBus:Engine *engine){
G_DEBUG_MSG(1,"[I1] reset");
Self *self=SELF(engine);
+ if (self->_priv->statusFlags & ENGINE_STATUS_NEED_COMMIT){
+ /* Force commit non-empty preedit buffer */
+ self_force_commit(self);
+ }
ibus_lookup_table_clear(self->table);
/* Save KBType type, becaue chewing_Reset() will reset it to default.
*/
« no previous file with comments | « no previous file | src/IBusChewingEngine-def.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698