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

Side by Side 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 unified diff | Download patch
« no previous file with comments | « no previous file | src/IBusChewingEngine-def.c » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 requires 2.0.0 1 requires 2.0.0
2 2
3 %alltop{ 3 %alltop{
4 /* 4 /*
5 * Copyright © 2009 Red Hat, Inc. All rights reserved. 5 * Copyright © 2009 Red Hat, Inc. All rights reserved.
6 * Copyright © 2009 Ding-Yi Chen <dchen at redhat.com> 6 * Copyright © 2009 Ding-Yi Chen <dchen at redhat.com>
7 * 7 *
8 * This file is part of the ibus-chewing Project. 8 * This file is part of the ibus-chewing Project.
9 * 9 *
10 * This program is free software; you can redistribute it and/or 10 * This program is free software; you can redistribute it and/or
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
101 /** 101 /**
102 * EngineStatus: 102 * EngineStatus:
103 * @INITIALIZED: Engine is initialized. 103 * @INITIALIZED: Engine is initialized.
104 */ 104 */
105 enum ENGINE_STATUS{ 105 enum ENGINE_STATUS{
106 INITIALIZED= 0x1, 106 INITIALIZED= 0x1,
107 ENABLED= 0x2, 107 ENABLED= 0x2,
108 FOCUS_IN= 0x4, 108 FOCUS_IN= 0x4,
109 SHOW_CANDIDATE= 0x8, 109 SHOW_CANDIDATE= 0x8,
110 NEED_COMMIT= 0x10, 110 NEED_COMMIT= 0x10,
111 FORCE_COMMIT= 0x20,
111 } Engine:Status; 112 } Engine:Status;
112 113
113 %h{ 114 %h{
114 #include "maker-dialog.h" 115 #include "maker-dialog.h"
115 #define GCONF_KEY_PREFIX "/desktop/ibus/engine/Chewing/" 116 #define GCONF_KEY_PREFIX "/desktop/ibus/engine/Chewing/"
116 /* For easy symbol input work around */ 117 /* For easy symbol input work around */
117 #define EASY_SYMBOL_INPUT_WORK_AROUND 118 #define EASY_SYMBOL_INPUT_WORK_AROUND
118 119
119 extern PropertySpec propSpecs[]; 120 extern PropertySpec propSpecs[];
120 extern const gchar *page_labels[]; 121 extern const gchar *page_labels[];
(...skipping 311 matching lines...) Expand 10 before | Expand all | Expand 10 after
432 ibus_engine_show_lookup_table(IBUS_ENGINE(self)); 433 ibus_engine_show_lookup_table(IBUS_ENGINE(self));
433 ibus_chewing_engine_set_status_flag(self,ENGINE_STATUS_SHOW_CANDIDAT E); 434 ibus_chewing_engine_set_status_flag(self,ENGINE_STATUS_SHOW_CANDIDAT E);
434 }else{ 435 }else{
435 ibus_engine_hide_lookup_table(IBUS_ENGINE(self)); 436 ibus_engine_hide_lookup_table(IBUS_ENGINE(self));
436 ibus_chewing_engine_clear_status_flag(self,ENGINE_STATUS_SHOW_CANDID ATE); 437 ibus_chewing_engine_clear_status_flag(self,ENGINE_STATUS_SHOW_CANDID ATE);
437 } 438 }
438 } 439 }
439 440
440 private void update_lookup_table(self){ 441 private void update_lookup_table(self){
441 if (!self->table){ 442 if (!self->table){
442 » self->table=ibus_lookup_table_new(1,0,FALSE,TRUE); 443 » self->table=ibus_lookup_table_new(1,0,TRUE,TRUE);
443 g_object_ref_sink(self->table); 444 g_object_ref_sink(self->table);
444 } 445 }
445 ibus_lookup_table_clear(self->table); 446 ibus_lookup_table_clear(self->table);
446 int choicePerPage=chewing_cand_ChoicePerPage(self->context); 447 int choicePerPage=chewing_cand_ChoicePerPage(self->context);
447 int i=0; 448 int i=0;
448 char *candidate=NULL; 449 char *candidate=NULL;
449 IBusText *iText=NULL; 450 IBusText *iText=NULL;
450 451
451 G_DEBUG_MSG(4,"[I4] update_lookup_table() TotalChoice=%d CurrentPage=%d" , 452 G_DEBUG_MSG(4,"[I4] update_lookup_table() TotalChoice=%d CurrentPage=%d" ,
452 chewing_cand_TotalChoice(self->context),chewing_cand_CurrentPage (self->context)); 453 chewing_cand_TotalChoice(self->context),chewing_cand_CurrentPage (self->context));
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
513 return iText; 514 return iText;
514 } 515 }
515 516
516 private void update_aux_string(self, IBusText *preeditIText){ 517 private void update_aux_string(self, IBusText *preeditIText){
517 G_DEBUG_MSG(4,"[I4] update_aux_string() statusFlags=%x", self->_priv->st atusFlags); 518 G_DEBUG_MSG(4,"[I4] update_aux_string() statusFlags=%x", self->_priv->st atusFlags);
518 IBusText *iText=NULL; 519 IBusText *iText=NULL;
519 switch (self->_priv->inputStyle){ 520 switch (self->_priv->inputStyle){
520 case CHEWING_INPUT_STYLE_IN_APPLICATION: 521 case CHEWING_INPUT_STYLE_IN_APPLICATION:
521 if (chewing_aux_Length(self->context)>0){ 522 if (chewing_aux_Length(self->context)>0){
522 gchar *aux_string=chewing_aux_String(self->context); 523 gchar *aux_string=chewing_aux_String(self->context);
523 iText=ibus_text_new_from_string (aux_string);
524 iText=g_object_ref_sink(ibus_text_new_from_string (aux_strin g)); 524 iText=g_object_ref_sink(ibus_text_new_from_string (aux_strin g));
525 ibus_engine_update_auxiliary_text(IBUS_ENGINE(self),iText,TR UE); 525 ibus_engine_update_auxiliary_text(IBUS_ENGINE(self),iText,TR UE);
526 g_object_unref (iText); 526 g_object_unref (iText);
527 ibus_engine_show_auxiliary_text(IBUS_ENGINE(self)); 527 ibus_engine_show_auxiliary_text(IBUS_ENGINE(self));
528 g_free(aux_string); 528 g_free(aux_string);
529 }else{ 529 }else{
530 ibus_engine_hide_auxiliary_text(IBUS_ENGINE(self)); 530 ibus_engine_hide_auxiliary_text(IBUS_ENGINE(self));
531 } 531 }
532 break; 532 break;
533 case CHEWING_INPUT_STYLE_IN_CANDIDATE: 533 case CHEWING_INPUT_STYLE_IN_CANDIDATE:
(...skipping 14 matching lines...) Expand all
548 break; 548 break;
549 } 549 }
550 G_DEBUG_MSG(5,"[I5] update_preedit(): return"); 550 G_DEBUG_MSG(5,"[I5] update_preedit(): return");
551 } 551 }
552 552
553 protected gboolean update(self){ 553 protected gboolean update(self){
554 G_DEBUG_MSG(3,"[I3] update() statusFlags=%x", self->_priv->statusFlags); 554 G_DEBUG_MSG(3,"[I3] update() statusFlags=%x", self->_priv->statusFlags);
555 self_determine_input_mode(self); 555 self_determine_input_mode(self);
556 gint chiSymbolCursor; 556 gint chiSymbolCursor;
557 glong zhuyin_item_written; 557 glong zhuyin_item_written;
558 self_commit(self);
558 gchar *preeditBuf=self_make_preedit_string(self, &zhuyin_item_written); 559 gchar *preeditBuf=self_make_preedit_string(self, &zhuyin_item_written);
559 IBusText *iText=self_decorate_preedit(self, preeditBuf, &chiSymbolCursor , zhuyin_item_written); 560 IBusText *iText=self_decorate_preedit(self, preeditBuf, &chiSymbolCursor , zhuyin_item_written);
560 if (g_object_is_floating(iText)){ 561 if (g_object_is_floating(iText)){
561 g_object_ref_sink(iText); 562 g_object_ref_sink(iText);
562 } 563 }
563 564
564 self_update_aux_string(self, iText); 565 self_update_aux_string(self, iText);
565 self_update_preedit(self, iText, chiSymbolCursor); 566 self_update_preedit(self, iText, chiSymbolCursor);
566 g_object_unref (iText); 567 g_object_unref (iText);
567 uint16 *phoneSeq=(chewing_get_phoneSeqLen(self->context)>0)? chewing_get _phoneSeq(self->context): NULL; 568 uint16 *phoneSeq=(chewing_get_phoneSeqLen(self->context)>0)? chewing_get _phoneSeq(self->context): NULL;
568 G_DEBUG_MSG(4,"[I4] update() inputMode=%d nPhoneSeq=%d statusFlags=%u", 569 G_DEBUG_MSG(4,"[I4] update() inputMode=%d nPhoneSeq=%d statusFlags=%u",
569 self->inputMode, 570 self->inputMode,
570 chewing_get_phoneSeqLen(self->context), 571 chewing_get_phoneSeqLen(self->context),
571 self->_priv->statusFlags); 572 self->_priv->statusFlags);
572 if (phoneSeq){ 573 if (phoneSeq){
573 int i=0; 574 int i=0;
574 for(i=0;i<chewing_get_phoneSeqLen(self->context);i++){ 575 for(i=0;i<chewing_get_phoneSeqLen(self->context);i++){
575 G_DEBUG_MSG(5,"[I5] update() phoneSeq[%d]=%x",i,phoneSeq[i]); 576 G_DEBUG_MSG(5,"[I5] update() phoneSeq[%d]=%x",i,phoneSeq[i]);
576 } 577 }
577 free(phoneSeq); 578 free(phoneSeq);
578 } 579 }
579 self_update_lookup_table(self); 580 self_update_lookup_table(self);
580 » self_commit(self); 581 » //self_commit(self);
581 gboolean ret=TRUE; 582 gboolean ret=TRUE;
582 583
583 if (chewing_keystroke_CheckAbsorb(self->context)){ 584 if (chewing_keystroke_CheckAbsorb(self->context)){
584 ret=TRUE; 585 ret=TRUE;
585 }else if (chewing_keystroke_CheckIgnore(self->context)){ 586 }else if (chewing_keystroke_CheckIgnore(self->context)){
586 ret=FALSE; 587 ret=FALSE;
587 } 588 }
588 G_DEBUG_MSG(4,"[I4] update() return %s",(ret)? "TRUE": "FALSE"); 589 G_DEBUG_MSG(4,"[I4] update() return %s",(ret)? "TRUE": "FALSE");
589 return ret; 590 return ret;
590 } 591 }
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after
785 } 786 }
786 g_free(str_ptr); 787 g_free(str_ptr);
787 G_DEBUG_MSG(3, "[I3] determine_input_mode() return: zhuyin_latest=%s zh uyin_tone=%d inputMode=%d", 788 G_DEBUG_MSG(3, "[I3] determine_input_mode() return: zhuyin_latest=%s zh uyin_tone=%d inputMode=%d",
788 self->_priv->zhuyin_latest,zhuyin_tone,self->inputMode); 789 self->_priv->zhuyin_latest,zhuyin_tone,self->inputMode);
789 } 790 }
790 791
791 /* commit string */ 792 /* commit string */
792 protected gboolean commit(self){ 793 protected gboolean commit(self){
793 gint commit=chewing_commit_Check(self->context); 794 gint commit=chewing_commit_Check(self->context);
794 G_DEBUG_MSG(2,"[I2] commit() %s statusFlags=%x", (commit) ? "TRUE": "FAL SE", self->_priv->statusFlags); 795 G_DEBUG_MSG(2,"[I2] commit() %s statusFlags=%x", (commit) ? "TRUE": "FAL SE", self->_priv->statusFlags);
795 » if (commit && (self->_priv->statusFlags & ENGINE_STATUS_NEED_COMMIT)){ 796 » if ((self->_priv->statusFlags & ENGINE_STATUS_NEED_COMMIT) && commit){
796 IBusText *iText=NULL; 797 IBusText *iText=NULL;
797 798
798 gchar *commit_string=chewing_commit_String(self->context); 799 gchar *commit_string=chewing_commit_String(self->context);
799 G_DEBUG_MSG(3,"[I3] commit() commit_string=%s", commit_string); 800 G_DEBUG_MSG(3,"[I3] commit() commit_string=%s", commit_string);
800 iText=g_object_ref_sink(ibus_text_new_from_string(commit_string)); 801 iText=g_object_ref_sink(ibus_text_new_from_string(commit_string));
801 ibus_engine_commit_text(IBUS_ENGINE(self),iText); 802 ibus_engine_commit_text(IBUS_ENGINE(self),iText);
802 g_free(commit_string); 803 g_free(commit_string);
803 g_object_unref(iText); 804 g_object_unref(iText);
804 » ibus_chewing_engine_clear_status_flag(self, ENGINE_STATUS_NEED_COMMI T); 805 » if (!chewing_buffer_Check(self->context)){
806 » » /* Buffer is clean */
807 » » ibus_chewing_engine_clear_status_flag(self, ENGINE_STATUS_NEED_C OMMIT | ENGINE_STATUS_FORCE_COMMIT );
808 » }else if (self->_priv->statusFlags & ENGINE_STATUS_FORCE_COMMIT){
809 » » /* Flush the buffer */
810 » » chewing_handle_Enter(self->context);
811 » » commit_string=chewing_commit_String(self->context);
812 » » iText=g_object_ref_sink(ibus_text_new_from_string(commit_string) );
813 » » ibus_engine_commit_text(IBUS_ENGINE(self),iText);
814 » » g_free(commit_string);
815 » » g_object_unref(iText);
816 » » ibus_chewing_engine_clear_status_flag(self, ENGINE_STATUS_FORCE_ COMMIT );
817 » }
805 } 818 }
806 return commit; 819 return commit;
807 } 820 }
808 821
809 protected void force_commit(self){ 822 protected void force_commit(self){
810 G_DEBUG_MSG(3,"[I3] force_commit() buffer=%d, commit=%d statusFlags=%x", 823 G_DEBUG_MSG(3,"[I3] force_commit() buffer=%d, commit=%d statusFlags=%x",
811 chewing_buffer_Check(self->context),chewing_commit_Check(self->c ontext), self->_priv->statusFlags); 824 chewing_buffer_Check(self->context),chewing_commit_Check(self->c ontext), self->_priv->statusFlags);
812 /* Remove the incomplete zhuyin symbol */ 825 /* Remove the incomplete zhuyin symbol */
813 if (self->inputMode==CHEWING_INPUT_MODE_EDITING) 826 if (self->inputMode==CHEWING_INPUT_MODE_EDITING)
814 chewing_handle_Esc(self->context); 827 chewing_handle_Esc(self->context);
815 if (chewing_buffer_Check(self->context)){ 828 if (chewing_buffer_Check(self->context)){
816 if (!chewing_commit_Check(self->context)){ 829 if (!chewing_commit_Check(self->context)){
817 /* Close candidate window */ 830 /* Close candidate window */
818 if (self->_priv->statusFlags & ENGINE_STATUS_SHOW_CANDIDATE){ 831 if (self->_priv->statusFlags & ENGINE_STATUS_SHOW_CANDIDATE){
819 chewing_handle_Esc(self->context); 832 chewing_handle_Esc(self->context);
820 } 833 }
821 chewing_handle_Enter(self->context); 834 chewing_handle_Enter(self->context);
822 } 835 }
823 » ibus_chewing_engine_set_status_flag(self, ENGINE_STATUS_NEED_COMMIT) ; 836 » ibus_chewing_engine_set_status_flag(self, ENGINE_STATUS_NEED_COMMIT | ENGINE_STATUS_FORCE_COMMIT);
824 self_update(self); 837 self_update(self);
825 } 838 }
826 } 839 }
827 840
828 /*============================================ 841 /*============================================
829 * Overridden Parent (IBusEngine) methods 842 * Overridden Parent (IBusEngine) methods
830 */ 843 */
831 override (IBus:Engine) void 844 override (IBus:Engine) void
832 reset(IBus:Engine *engine){ 845 reset(IBus:Engine *engine){
833 G_DEBUG_MSG(1,"[I1] reset"); 846 G_DEBUG_MSG(1,"[I1] reset");
834 Self *self=SELF(engine); 847 Self *self=SELF(engine);
848 if (self->_priv->statusFlags & ENGINE_STATUS_NEED_COMMIT){
849 /* Force commit non-empty preedit buffer */
850 self_force_commit(self);
851 }
835 ibus_lookup_table_clear(self->table); 852 ibus_lookup_table_clear(self->table);
836 /* Save KBType type, becaue chewing_Reset() will reset it to default. 853 /* Save KBType type, becaue chewing_Reset() will reset it to default.
837 */ 854 */
838 int kbType=chewing_get_KBType(self->context); 855 int kbType=chewing_get_KBType(self->context);
839 chewing_Reset(self->context); 856 chewing_Reset(self->context);
840 chewing_set_KBType(self->context,kbType); 857 chewing_set_KBType(self->context,kbType);
841 ibus_engine_hide_auxiliary_text(IBUS_ENGINE(engine)); 858 ibus_engine_hide_auxiliary_text(IBUS_ENGINE(engine));
842 ibus_engine_hide_lookup_table(IBUS_ENGINE(self)); 859 ibus_engine_hide_lookup_table(IBUS_ENGINE(self));
843 } 860 }
844 861
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
985 IBusProperty *prop=self_get_iBusProperty(self, prop_name); 1002 IBusProperty *prop=self_get_iBusProperty(self, prop_name);
986 ibus_property_set_visible(prop,FALSE); 1003 ibus_property_set_visible(prop,FALSE);
987 ibus_engine_update_property(engine,prop); 1004 ibus_engine_update_property(engine,prop);
988 } 1005 }
989 } 1006 }
990 1007
991 %{ 1008 %{
992 #include "IBusChewingEngine-keys.c" 1009 #include "IBusChewingEngine-keys.c"
993 %} 1010 %}
994 1011
OLDNEW
« 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