mirror of
https://gitee.com/openharmony/arkui_ace_engine
synced 2024-10-07 16:33:54 +00:00
esc close dialog popup
Signed-off-by: huangdong57 <huangdong57@huawei.com>
This commit is contained in:
parent
0189ccf345
commit
7b6bbdaac3
@ -1167,7 +1167,7 @@ void PageRouterManager::CleanPageOverlay()
|
||||
sharedManager->StopSharedTransition();
|
||||
}
|
||||
|
||||
if (overlayManager->RemoveOverlay()) {
|
||||
if (overlayManager->RemoveOverlay(true)) {
|
||||
LOGI("clean page overlay.");
|
||||
}
|
||||
}
|
||||
|
@ -648,10 +648,6 @@ bool DialogPattern::OnKeyEvent(const KeyEvent& event)
|
||||
if (event.action != KeyAction::DOWN) {
|
||||
return false;
|
||||
}
|
||||
if (event.code == KeyCode::KEY_ESCAPE) {
|
||||
PopDialog();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -230,10 +230,6 @@ bool MenuPattern::OnKeyEvent(const KeyEvent& event) const
|
||||
wrapperPattern->HideSubMenu();
|
||||
return true;
|
||||
}
|
||||
if (event.code == KeyCode::KEY_ESCAPE) {
|
||||
HideMenu();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -840,7 +840,7 @@ void OverlayManager::CloseDialog(const RefPtr<FrameNode>& dialogNode)
|
||||
CallOnHideDialogCallback();
|
||||
}
|
||||
|
||||
bool OverlayManager::RemoveOverlay()
|
||||
bool OverlayManager::RemoveOverlay(bool isBackPressed)
|
||||
{
|
||||
auto rootNode = rootNodeWeak_.Upgrade();
|
||||
CHECK_NULL_RETURN(rootNode, true);
|
||||
@ -861,7 +861,9 @@ bool OverlayManager::RemoveOverlay()
|
||||
hub->FireCancelEvent();
|
||||
}
|
||||
CloseDialog(overlay);
|
||||
SetBackPressEvent(nullptr);
|
||||
if (isBackPressed) {
|
||||
SetBackPressEvent(nullptr);
|
||||
}
|
||||
return true;
|
||||
} else if (AceType::DynamicCast<BubblePattern>(pattern)) {
|
||||
auto popupNode = AceType::DynamicCast<NG::FrameNode>(rootNode->GetChildAtIndex(childrenSize - 1));
|
||||
@ -1009,6 +1011,20 @@ void OverlayManager::FocusOverlayNode(const RefPtr<FrameNode>& overlayNode, bool
|
||||
void OverlayManager::BlurOverlayNode(bool isInSubWindow)
|
||||
{
|
||||
LOGI("OverlayManager::BlurOverlayNode");
|
||||
auto rootNode = rootNodeWeak_.Upgrade();
|
||||
CHECK_NULL_VOID(rootNode);
|
||||
if (rootNode->GetChildren().size() > 1) {
|
||||
auto collection = rootNode->GetChildren();
|
||||
for (auto iter = collection.rbegin(); iter != collection.rend(); ++iter) {
|
||||
auto overlay = DynamicCast<FrameNode>(*iter);
|
||||
CHECK_NULL_VOID(overlay);
|
||||
auto pattern = overlay->GetPattern();
|
||||
if (AceType::InstanceOf<DialogPattern>(pattern) || AceType::InstanceOf<MenuWrapperPattern>(pattern)) {
|
||||
FocusOverlayNode(overlay, isInSubWindow);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (isInSubWindow) {
|
||||
// no need to set page request focus in sub window.
|
||||
return;
|
||||
|
@ -108,7 +108,7 @@ public:
|
||||
*
|
||||
* @return true if popup was removed, false if no overlay exists
|
||||
*/
|
||||
bool RemoveOverlay();
|
||||
bool RemoveOverlay(bool isBackPressed);
|
||||
bool RemoveModalInOverlay();
|
||||
bool RemoveOverlayInSubwindow();
|
||||
|
||||
|
@ -859,7 +859,7 @@ bool PipelineContext::OnBackPressed()
|
||||
[weakOverlay = AceType::WeakClaim(AceType::RawPtr(overlayManager_)), &hasOverlay]() {
|
||||
auto overlay = weakOverlay.Upgrade();
|
||||
CHECK_NULL_VOID_NOLOG(overlay);
|
||||
hasOverlay = overlay->RemoveOverlay();
|
||||
hasOverlay = overlay->RemoveOverlay(true);
|
||||
},
|
||||
TaskExecutor::TaskType::UI);
|
||||
if (hasOverlay) {
|
||||
@ -1293,7 +1293,16 @@ bool PipelineContext::OnKeyEvent(const KeyEvent& event)
|
||||
auto mainNode = lastPage ? lastPage : rootNode_;
|
||||
CHECK_NULL_RETURN(mainNode, false);
|
||||
if (!eventManager_->DispatchTabIndexEventNG(event, rootNode_, mainNode)) {
|
||||
return eventManager_->DispatchKeyEventNG(event, rootNode_);
|
||||
if (!eventManager_->DispatchKeyEventNG(event, rootNode_) && event.code == KeyCode::KEY_ESCAPE &&
|
||||
event.action == KeyAction::DOWN) {
|
||||
CHECK_NULL_RETURN(overlayManager_, false);
|
||||
auto currentContainer = Container::Current();
|
||||
if (currentContainer->IsSubContainer() || currentContainer->IsDialogContainer()) {
|
||||
return overlayManager_->RemoveOverlayInSubwindow();
|
||||
} else {
|
||||
return overlayManager_->RemoveOverlay(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
@ -76,7 +76,12 @@ void OverlayManager::CloseDialog(const RefPtr<FrameNode>& dialogNode)
|
||||
removeOverlayFlag = (dialogNode != nullptr);
|
||||
}
|
||||
|
||||
bool OverlayManager::RemoveOverlay()
|
||||
bool OverlayManager::RemoveOverlay(bool isBackPressed)
|
||||
{
|
||||
return removeOverlayFlag;
|
||||
}
|
||||
|
||||
bool OverlayManager::RemoveOverlayInSubwindow()
|
||||
{
|
||||
return removeOverlayFlag;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user