拔出鼠标还残留鼠标箭头分析
1 关键字 拔出鼠标;箭头残留 2 问题描述 设备型号:XXXXX 系统版本:OpenHarmony 3.2 Release 代码版本:XXXXX 问题现象:在鼠标插上后,界面显示鼠标箭头是没问题的,但在鼠标被拔出后,鼠标箭头没有消失,还在界面一直停留显示。 3 问题原因
1 关键字
拔出鼠标;箭头残留
2 问题描述
设备型号:XXXXX
系统版本:OpenHarmony 3.2 Release
代码版本:XXXXX
问题现象:在鼠标插上后,界面显示鼠标箭头是没问题的,但在鼠标被拔出后,鼠标箭头没有消失,还在界面一直停留显示。
3 问题原因
3.1 正常机制
鼠标被拔出后,鼠标箭头残留显示,显示界面没有鼠标箭头。
3.2 异常机制
鼠标被拔出后,鼠标箭头没有消失,还在界面一直停留显示。
4 解决方案
针对该产品的鼠标设备移除,进行定制化处理 :
1、只要是具有pointer属性设备移除,就将鼠标隐藏,不考虑多鼠标设备接入的问题 ;
2、不考虑云真机虚拟平台界面显示;
对产品进行判断: if (IsPointerDevice(inputDevice) && OHOS::system::GetParameter("const.product.model", "") == "XXX产品名") 对操作判断后,移除操作直接进行鼠标隐藏操作 NotifyPointerDevice(false, false); OHOS::system::SetParameter(INPUT_POINTER_DEVICE, "false");
5 定位过程
5.1 既然是拔出鼠标的操作,那么找到拔出鼠标的接口OnInputDeviceRemoved
void InputDeviceManager::OnInputDeviceRemoved(struct libinput_device *inputDevice) { ..................... ..................... #endif // OHOS_BUILD_ENABLE_COOPERATE ..................... ..................... #ifdef OHOS_BUILD_ENABLE_COOPERATE ..................... ..................... #endif // OHOS_BUILD_ENABLE_COOPERATE ..................... ..................... #if defined(OHOS_BUILD_ENABLE_POINTER) && defined(OHOS_BUILD_ENABLE_POINTER_DRAWING) ..................... ..................... } ScanPointerDevice(); #endif // OHOS_BUILD_ENABLE_POINTER && OHOS_BUILD_ENABLE_POINTER_DRAWING #ifdef OHOS_BUILD_ENABLE_COOPERATE ..................... ..................... }
通过上面的宏判断,发现它是根据不同的设备类型进行不同的处理,同时对具有Pointer的设备进行了一次扫描。
5.2 在进一步分析ScanPointerDevice
此处就是对鼠标类设备进行显示还是隐藏的动作。
5.3 从上2点可以初步分析出,它是根据设备类型进行扫描,查看是否满足前提:OHOS_BUILD_ENABLE_POINTER来进行设备扫描,查看是否还有具有pointer t属性的设备来进行最后的鼠标是隐藏还是现实。但目前我们鼠标已经移除了,还是扫描到该类设备,为此找到设置pointer t属性的位置:
进一步分析代码:发现在硬件设备注册时,就将HL keyboard和HL mouse 两个设备在硬件层面就写成具有带有pointer属性的设备了,这样就导致即使鼠标移除还是会有鼠标类的设备:
keyboard接口:static int __init vinput_kbd_init(void)
mouse接口:static int __init vinput_mouse_init(void)
5.4 比较设备规格,原来是该产品是可以通过遥控器红外进行连接的,同时该产品是支持遥控器作为鼠标使用的 ,那这样就知道具体原因了。经过分析,我们可以在隐藏鼠标时,对该设备进行分类处理。
5.5 目前我们是可以通过接口命令获取到设备分类的,我们可以使用其中的一个字段即可。
这样整个分析定位完成,然后根据整个流程就可制定出上面的修改方案。
6 知识分享
设备类型有些是跟随硬件一起注册的,整个流程与通用的外接设备流程是独立的。
更多推荐
所有评论(0)