mt2503 qwerty工程不能设置首字母大写输入法为默认输入法
时间:10-02
整理:3721RD
点击:
[DESCRIPTION]
目前的全键盘架构中,是没有首字母大写输入法的,所以不能设首字母输入法为默认输入法。现在通过shift键切换大小写的方式,只是通过标志位
将小写字符转换为大写,并不会走原来的首字母大写和大写输入法。输入时,只有两种输入法,就是小写输入法和数字输入法。
[SOLUTION]
如果一定要设首字母大写输入法为默认输入法,需要调整原有的输入法流程。
请作如下修改,将输入法的执行流程强制改为:
shift键切换同一种语言的输入法
输入法切换键切换不同语言的输入法
此时,可以随便设默认输入法
1.将函数MMI_imm_set_required_mode_list中,语句
if((input_type&IMM_INPUT_TYPE_EXT_ENGLISH_UPPERCASE)||(input_type&IMM_INPUT_TYPE_ENGLISH_SENTENCE_UPPERCASE))
注销掉,让函数可以执行enable_uppercase_abc=MMI_TRUE;
2.在函数mmi_imm_create_input_method_list中同样注销上述if语句,让enable_uppercase_abc=MMI_TRUE;
3.在IMERes.c中
#ifndef__MMI_QWERTY_keypad_SUPPORT__
#define__MMI_ALPHABETIC_UPPERCASE_INPUT__
#define__MMI_ALPHABETIC_FIRST_UPPERCASE_INPUT__
#endif
调整宏定义关系,直接定义
#define__MMI_ALPHABETIC_UPPERCASE_INPUT__
#define__MMI_ALPHABETIC_FIRST_UPPERCASE_INPUT__//此时,输入法可以切换到首字母大写
4.在imc.c中定义变量:
MMI_BOOLmmi_imm_shift_enable=FALSE;
存储shift按键是否可用
5.在imc.h中声明函数
externvoidmmi_imc_set_shift_key_enable(MMI_BOOLflags);
externMMI_BOOLmmi_imc_get_shift_key_enable(void);
用于对mmi_imm_shift_enable的处理
6.在imc.c中书写上述函数体:
voidmmi_imc_set_shift_key_enable(MMI_BOOLflags)
{
mmi_imm_shift_enable=flags;
}
MMI_BOOLmmi_imc_get_shift_key_enable(void)
{
returnmmi_imm_shift_enable;
}
7.在函数mmi_imc_key_qwerty_group_key_handler中,函数最前面添加语句:
if(mmi_key_code==KEY_SHIFT)
{
mmi_imc_set_shift_key_enable(TRUE);
mmi_key_code=KEY_QWERTY_MENU;
}
else
mmi_imc_set_shift_key_enable(FALSE);
//此时将shift按键和输入法切换键强制绑定,走相同的流程。如果为shift键按下,则绑定为输入法切换键。同时标记此时shift键功能可用。
8.在imm.c中,定义变量:
staticmmi_imm_support_writing_lang_enumg_mmi_imm_curr_shift_lang=IME_WRITING_LANG_NONE;
存储shift对应的当前语言。
9.在函数mmi_imm_get_next_mode中,添加代码:
#ifdefined(__MMI_IMC_CAPITAL_SWITCH__)
~
#endif
{
//添加:
if(mmi_imc_get_shift_key_enabl())
{
g_mmi_imm_curr_shift_lang=gIMEModeArray[g_mmi_imm_curr_allowed_input_mode[index].index].lang_id;
for(i=index+1;;i++)
{
if(gIMEModeArray[g_mmi_imm_curr_allowed_input_mode.index].lang_id==g_mmi_imm_curr_shift_lang)
{
g_mmi_imm_current_input_mode=g_mmi_imm_curr_allowed_input_mode.mode_id;
break;
}
elseif(g_mmi_imm_curr_allowed_input_mode.mode_id==IMM_INPUT_MODE_NONE)
{
i=-1;
}
if(i==index)break;
}
}
else
{
//此处为原代码有的,放入if的else中
if(g_mmi_imm_curr_allowed_input_mode[index+1].mode_id!=IMM_INPUT_MODE_NONE)
{
g_mmi_imm_current_input_mode=g_mmi_imm_curr_allowed_input_mode[index+1].mode_id;
}
else
{
g_mmi_imm_current_input_mode=g_mmi_imm_curr_allowed_input_mode[0].mode_id;
}
}
//此处对shift和输入法切换键作不同的处理,实现一个切换同一语言输入法,另一个切换所有输入法。
10.在函数mmi_imm_config_special_key_validation中
将语句if((mode_details_ptr->Mode_Special_Attrib&IME_MODE_ATTR_LOWERCASE)改为:
if(1)
{
invalid_flag|=MMI_FRM_QWERTY_SPECIAL_KEY_FLAG_SHIFT;
}
elseif((mode_details_ptr->Mode_Special_Attrib&IME_MODE_ATTR_LOWERCASE)
~
//此时强制禁用原来的shift键功能
11.在函数mmi_imm_get_prefer_input_mode_list中,将判断的条件
if((gIMEModeArray.supported_input_type_flag&IMM_INPUT_TYPE_USER_SPECIFIC)
#ifdefined(__MMI_QWERTY_KEYPAD_SUPPORT__)
&&(gIMEModeArray.Mode_Special_Attrib&IME_MODE_ATTR_UPPERCASE)
#endif
)改为:
if(gIMEModeArray.supported_input_type_flag&IMM_INPUT_TYPE_USER_SPECIFIC)
12.在函数mmi_imm_get_prefer_input_mode_string_list同样作11类似的判断条件修改
通过以上修改,就能通过默认输入法选定菜单设置首字母大写的输入法为默认输入法。但是由于这样强制打开了一些宏,所以建议修改后做详细的测
试,以保证程序不出现错误。同时,这种方法强制关闭了原来shift键的流程,它所对应的功能也不能再使用。
目前的全键盘架构中,是没有首字母大写输入法的,所以不能设首字母输入法为默认输入法。现在通过shift键切换大小写的方式,只是通过标志位
将小写字符转换为大写,并不会走原来的首字母大写和大写输入法。输入时,只有两种输入法,就是小写输入法和数字输入法。
[SOLUTION]
如果一定要设首字母大写输入法为默认输入法,需要调整原有的输入法流程。
请作如下修改,将输入法的执行流程强制改为:
shift键切换同一种语言的输入法
输入法切换键切换不同语言的输入法
此时,可以随便设默认输入法
1.将函数MMI_imm_set_required_mode_list中,语句
if((input_type&IMM_INPUT_TYPE_EXT_ENGLISH_UPPERCASE)||(input_type&IMM_INPUT_TYPE_ENGLISH_SENTENCE_UPPERCASE))
注销掉,让函数可以执行enable_uppercase_abc=MMI_TRUE;
2.在函数mmi_imm_create_input_method_list中同样注销上述if语句,让enable_uppercase_abc=MMI_TRUE;
3.在IMERes.c中
#ifndef__MMI_QWERTY_keypad_SUPPORT__
#define__MMI_ALPHABETIC_UPPERCASE_INPUT__
#define__MMI_ALPHABETIC_FIRST_UPPERCASE_INPUT__
#endif
调整宏定义关系,直接定义
#define__MMI_ALPHABETIC_UPPERCASE_INPUT__
#define__MMI_ALPHABETIC_FIRST_UPPERCASE_INPUT__//此时,输入法可以切换到首字母大写
4.在imc.c中定义变量:
MMI_BOOLmmi_imm_shift_enable=FALSE;
存储shift按键是否可用
5.在imc.h中声明函数
externvoidmmi_imc_set_shift_key_enable(MMI_BOOLflags);
externMMI_BOOLmmi_imc_get_shift_key_enable(void);
用于对mmi_imm_shift_enable的处理
6.在imc.c中书写上述函数体:
voidmmi_imc_set_shift_key_enable(MMI_BOOLflags)
{
mmi_imm_shift_enable=flags;
}
MMI_BOOLmmi_imc_get_shift_key_enable(void)
{
returnmmi_imm_shift_enable;
}
7.在函数mmi_imc_key_qwerty_group_key_handler中,函数最前面添加语句:
if(mmi_key_code==KEY_SHIFT)
{
mmi_imc_set_shift_key_enable(TRUE);
mmi_key_code=KEY_QWERTY_MENU;
}
else
mmi_imc_set_shift_key_enable(FALSE);
//此时将shift按键和输入法切换键强制绑定,走相同的流程。如果为shift键按下,则绑定为输入法切换键。同时标记此时shift键功能可用。
8.在imm.c中,定义变量:
staticmmi_imm_support_writing_lang_enumg_mmi_imm_curr_shift_lang=IME_WRITING_LANG_NONE;
存储shift对应的当前语言。
9.在函数mmi_imm_get_next_mode中,添加代码:
#ifdefined(__MMI_IMC_CAPITAL_SWITCH__)
~
#endif
{
//添加:
if(mmi_imc_get_shift_key_enabl())
{
g_mmi_imm_curr_shift_lang=gIMEModeArray[g_mmi_imm_curr_allowed_input_mode[index].index].lang_id;
for(i=index+1;;i++)
{
if(gIMEModeArray[g_mmi_imm_curr_allowed_input_mode.index].lang_id==g_mmi_imm_curr_shift_lang)
{
g_mmi_imm_current_input_mode=g_mmi_imm_curr_allowed_input_mode.mode_id;
break;
}
elseif(g_mmi_imm_curr_allowed_input_mode.mode_id==IMM_INPUT_MODE_NONE)
{
i=-1;
}
if(i==index)break;
}
}
else
{
//此处为原代码有的,放入if的else中
if(g_mmi_imm_curr_allowed_input_mode[index+1].mode_id!=IMM_INPUT_MODE_NONE)
{
g_mmi_imm_current_input_mode=g_mmi_imm_curr_allowed_input_mode[index+1].mode_id;
}
else
{
g_mmi_imm_current_input_mode=g_mmi_imm_curr_allowed_input_mode[0].mode_id;
}
}
//此处对shift和输入法切换键作不同的处理,实现一个切换同一语言输入法,另一个切换所有输入法。
10.在函数mmi_imm_config_special_key_validation中
将语句if((mode_details_ptr->Mode_Special_Attrib&IME_MODE_ATTR_LOWERCASE)改为:
if(1)
{
invalid_flag|=MMI_FRM_QWERTY_SPECIAL_KEY_FLAG_SHIFT;
}
elseif((mode_details_ptr->Mode_Special_Attrib&IME_MODE_ATTR_LOWERCASE)
~
//此时强制禁用原来的shift键功能
11.在函数mmi_imm_get_prefer_input_mode_list中,将判断的条件
if((gIMEModeArray.supported_input_type_flag&IMM_INPUT_TYPE_USER_SPECIFIC)
#ifdefined(__MMI_QWERTY_KEYPAD_SUPPORT__)
&&(gIMEModeArray.Mode_Special_Attrib&IME_MODE_ATTR_UPPERCASE)
#endif
)改为:
if(gIMEModeArray.supported_input_type_flag&IMM_INPUT_TYPE_USER_SPECIFIC)
12.在函数mmi_imm_get_prefer_input_mode_string_list同样作11类似的判断条件修改
通过以上修改,就能通过默认输入法选定菜单设置首字母大写的输入法为默认输入法。但是由于这样强制打开了一些宏,所以建议修改后做详细的测
试,以保证程序不出现错误。同时,这种方法强制关闭了原来shift键的流程,它所对应的功能也不能再使用。
路过!
谢谢分享