|
最近做展讯6800,发现MMK存在几个问题,邮件问展讯同事,展讯答复说没问题。但我还是觉得有问题,所以发到论坛来,请各位大侠帮忙分析。
问题二:
文件:window_parse.c
函数:CreateSoftkeyCtrl()
问题:没有判断softkey是否创建成功,就给窗口设置了ctrl_id
LOCAL BOOLEAN CreateSoftkeyCtrl(
MMI_HANDLE_T win_handle,
uint32** value_pptr
)
{
......
ctrl_ptr = MMK_CreateControl( &create );
MMK_SetWinSoftkeyCtrlId(win_handle, ctrl_id);
......
}
应该修改为
LOCAL BOOLEAN CreateSoftkeyCtrl(
MMI_HANDLE_T win_handle,
uint32** value_pptr
)
{
......
ctrl_ptr = MMK_CreateControl( &create );
if (ctrl_ptr != NULL)
{
MMK_SetWinSoftkeyCtrlId(win_handle, ctrl_id);
}
......
}
分析:当ctrl_ptr==NULL时却强行给窗口设了ctrl_id,则在该窗口调用MMK_DestroyControl(MMITHEME_GetSoftkeyCtrlId())时,会删掉别的真正拥有softkey的窗口的softkey,造成回到有softkey的窗口时,这个窗口的softkey消失了。即使在调用MMK_DestroyControl()的窗口调用MMK_GetWinSoftkeyCtrlId(win_id)来判断窗口是否包含softkey也判断不出来,因为它会返回有效的softkey_id |
|