From e5a850369b30549b630b7df0df30abdbea0f336d Mon Sep 17 00:00:00 2001 From: wangxinpeng Date: Mon, 17 Jan 2022 20:02:06 +0800 Subject: [PATCH] raise input method window priority when invoked on lock screen Signed-off-by: wangxinpeng Change-Id: I98a2eeacc16c0ad05719fe586ca1ff9092feaffb --- wmserver/include/window_node_container.h | 2 ++ wmserver/src/window_node_container.cpp | 16 ++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/wmserver/include/window_node_container.h b/wmserver/include/window_node_container.h index b6a335ac51..a209de1b7f 100644 --- a/wmserver/include/window_node_container.h +++ b/wmserver/include/window_node_container.h @@ -129,6 +129,8 @@ private: }; std::unordered_map pairedWindowMap_; sptr displayRects_ = new DisplayRects(); + void RaiseInputMethodWindowPriorityIfNeeded(const sptr& node) const; + const int32_t WINDOW_TYPE_RAISED_INPUT_METHOD = 113; }; } } diff --git a/wmserver/src/window_node_container.cpp b/wmserver/src/window_node_container.cpp index fb771bc996..14ed4b7b12 100644 --- a/wmserver/src/window_node_container.cpp +++ b/wmserver/src/window_node_container.cpp @@ -155,6 +155,7 @@ void WindowNodeContainer::UpdateWindowTree(sptr& node) { WM_FUNCTION_TRACE(); node->priority_ = zorderPolicy_->GetWindowPriority(node->GetWindowType()); + RaiseInputMethodWindowPriorityIfNeeded(node); auto parentNode = node->parent_; auto position = parentNode->children_.end(); for (auto iter = parentNode->children_.begin(); iter < parentNode->children_.end(); ++iter) { @@ -746,5 +747,20 @@ WMError WindowNodeContainer::UpdateWindowPairInfo(sptr& triggerNode, SingletonContainer::Get().SendMessage(INNER_WM_CREATE_DIVIDER, screenId_, dividerRect); return WMError::WM_OK; } + +void WindowNodeContainer::RaiseInputMethodWindowPriorityIfNeeded(const sptr& node) const +{ + if (node->GetWindowType() != WindowType::WINDOW_TYPE_INPUT_METHOD_FLOAT) { + return; + } + auto iter = std::find_if(aboveAppWindowNode_->children_.begin(), aboveAppWindowNode_->children_.end(), + [](sptr node) { + return node->GetWindowType() == WindowType::WINDOW_TYPE_KEYGUARD; + }); + if (iter != aboveAppWindowNode_->children_.end()) { + WLOGFI("raise input method float window priority."); + node->priority_ = WINDOW_TYPE_RAISED_INPUT_METHOD; + } } } +} \ No newline at end of file -- Gitee