From 09eabc8e092f11205c7d73ff7a01f3970c050925 Mon Sep 17 00:00:00 2001 From: likaiyuan Date: Thu, 11 Sep 2025 09:29:14 +0800 Subject: [PATCH 1/4] fix pointer window can't hide Change-Id: I4f5f4b0977ca66adb354cfe062904f3080dd3335 Signed-off-by: likaiyuan --- service/device_manager/include/pointer_device_manager.h | 1 + service/window_manager/src/cursor_drawing_component.cpp | 9 ++++++++- service/window_manager/src/pointer_drawing_manager.cpp | 3 +++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/service/device_manager/include/pointer_device_manager.h b/service/device_manager/include/pointer_device_manager.h index b8bb1cf513..f29a18c8e1 100644 --- a/service/device_manager/include/pointer_device_manager.h +++ b/service/device_manager/include/pointer_device_manager.h @@ -37,6 +37,7 @@ public: std::atomic isFirstAddDisplayManagerService { true }; std::atomic isFirstAdddistributedKVDataService { true }; std::atomic isInitDefaultMouseIconPath { false }; + std::atomic isPointerVisible { false }; private: PointerDeviceManager() = default; diff --git a/service/window_manager/src/cursor_drawing_component.cpp b/service/window_manager/src/cursor_drawing_component.cpp index 5ca1ad854b..4be47e37c2 100644 --- a/service/window_manager/src/cursor_drawing_component.cpp +++ b/service/window_manager/src/cursor_drawing_component.cpp @@ -21,6 +21,9 @@ #include "mmi_log.h" #include "pointer_device_manager.h" #include "timer_manager.h" +#ifdef OHOS_BUILD_ENABLE_TOUCH_DRAWING +#include "transaction/rs_transaction.h" +#endif // OHOS_BUILD_ENABLE_TOUCH_DRAWING #define MMI_LOG_TAG "CursorDrawingComponent" #define CHK_IS_LOADV(isLoaded, pointerInstance) \ @@ -88,7 +91,7 @@ void CursorDrawingComponent::Load() timerId_ = TimerMgr->AddLongTimer(CHECK_INTERVAL_MS, CHECK_COUNT, [this] { auto idleTime = std::chrono::duration_cast( std::chrono::steady_clock::now() - lastCallTime_).count(); - if ((idleTime >= UNLOAD_TIME_MS) && !POINTER_DEV_MGR.isInit) { + if ((idleTime >= UNLOAD_TIME_MS) && !POINTER_DEV_MGR.isInit && !POINTER_DEV_MGR.isPointerVisible) { CursorDrawingComponent::GetInstance().UnLoad(); } }, "libcursor_drawing_adapter-Unload"); @@ -158,6 +161,10 @@ void CursorDrawingComponent::UnLoad() soHandle_ = nullptr; getPointerInstance_ = nullptr; pointerInstance_ = nullptr; +#ifdef OHOS_BUILD_ENABLE_TOUCH_DRAWING + // When SO unload, surface node destruction needs submit to the render service + Rosen::RSTransaction::FlushImplicitTransaction(); +#endif // OHOS_BUILD_ENABLE_TOUCH_DRAWING MMI_HILOGI("UnLoad %{public}s is succeeded", MULTIMODAL_PATH_NAME); } diff --git a/service/window_manager/src/pointer_drawing_manager.cpp b/service/window_manager/src/pointer_drawing_manager.cpp index 70bd61006f..a123671b8f 100644 --- a/service/window_manager/src/pointer_drawing_manager.cpp +++ b/service/window_manager/src/pointer_drawing_manager.cpp @@ -38,6 +38,7 @@ #include "i_preference_manager.h" #include "parameters.h" #include "pipeline/rs_recording_canvas.h" +#include "pointer_device_manager.h" #include "preferences.h" #include "preferences_errno.h" #include "preferences_helper.h" @@ -2566,6 +2567,7 @@ void PointerDrawingManager::UpdatePointerVisible() CHKPV(surfaceNodePtr); if (IsPointerVisible() && mouseDisplayState_) { surfaceNodePtr->SetVisible(true); + POINTER_DEV_MGR.isPointerVisible = true; if (GetHardCursorEnabled()) { if (InitLayer(MOUSE_ICON(lastMouseStyle_.id)) != RET_OK) { MMI_HILOGE("Init Layer failed"); @@ -2586,6 +2588,7 @@ void PointerDrawingManager::UpdatePointerVisible() HideHardwareCursors(); } surfaceNodePtr->SetVisible(false); + POINTER_DEV_MGR.isPointerVisible = false; MMI_HILOGI("Pointer window hide success, mouseDisplayState_:%{public}s displayId_:%{public}" PRIu64, mouseDisplayState_ ? "true" : "false", displayId_); } -- Gitee From 041bffc8b880a20168cf2d2f62ed986dfb7d87e6 Mon Sep 17 00:00:00 2001 From: likaiyuan Date: Thu, 11 Sep 2025 09:29:14 +0800 Subject: [PATCH 2/4] fix pointer window can't hide Change-Id: I4f5f4b0977ca66adb354cfe062904f3080dd3335 Signed-off-by: likaiyuan --- service/BUILD.gn | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/service/BUILD.gn b/service/BUILD.gn index f3f776dc39..c7a32f46aa 100644 --- a/service/BUILD.gn +++ b/service/BUILD.gn @@ -479,6 +479,10 @@ ohos_shared_library("libmmi-server") { ] } + if (input_feature_touch_drawing) { + external_deps += [ "graphic_2d:librender_service_client" ] + } + if (input_feature_combination_key) { external_deps += [ "sensor:sensor_interface_native" ] } -- Gitee From 207144a89c34c7bad1f83ab2321525edd6c405e5 Mon Sep 17 00:00:00 2001 From: likaiyuan Date: Thu, 11 Sep 2025 09:29:14 +0800 Subject: [PATCH 3/4] fix pointer window can't hide Change-Id: I4f5f4b0977ca66adb354cfe062904f3080dd3335 Signed-off-by: likaiyuan --- service/BUILD.gn | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/service/BUILD.gn b/service/BUILD.gn index c7a32f46aa..65f785b3bd 100644 --- a/service/BUILD.gn +++ b/service/BUILD.gn @@ -473,9 +473,13 @@ ohos_shared_library("libmmi-server") { } if (input_feature_product == "pc") { + external_deps += [ "eventhandler:libeventhandler" ] + } + + if (input_feature_touch_drawing) { external_deps += [ - "eventhandler:libeventhandler", "graphic_2d:librender_service_base", + "graphic_2d:librender_service_client", ] } -- Gitee From 127f23db99cac0b7fd6b76edda36fc8ff09f283a Mon Sep 17 00:00:00 2001 From: likaiyuan Date: Thu, 11 Sep 2025 09:29:14 +0800 Subject: [PATCH 4/4] fix pointer window can't hide Change-Id: I4f5f4b0977ca66adb354cfe062904f3080dd3335 Signed-off-by: likaiyuan --- service/BUILD.gn | 4 ---- 1 file changed, 4 deletions(-) diff --git a/service/BUILD.gn b/service/BUILD.gn index 65f785b3bd..0d4fcaf070 100644 --- a/service/BUILD.gn +++ b/service/BUILD.gn @@ -483,10 +483,6 @@ ohos_shared_library("libmmi-server") { ] } - if (input_feature_touch_drawing) { - external_deps += [ "graphic_2d:librender_service_client" ] - } - if (input_feature_combination_key) { external_deps += [ "sensor:sensor_interface_native" ] } -- Gitee