diff --git a/wm/src/window_impl.cpp b/wm/src/window_impl.cpp index 63363610..dce97e18 100644 --- a/wm/src/window_impl.cpp +++ b/wm/src/window_impl.cpp @@ -264,23 +264,14 @@ WMError WindowImpl::SetWindowMode(WindowMode mode) return WMError::WM_ERROR_INVALID_WINDOW; } if (state_ == WindowState::STATE_CREATED || state_ == WindowState::STATE_HIDDEN) { - property_->SetWindowMode(mode); + UpdateMode(mode); } else if (state_ == WindowState::STATE_SHOWN) { - property_->SetWindowMode(mode); WMError ret = SingletonContainer::Get().SetWindowMode(property_->GetWindowId(), mode); - if (ret == WMError::WM_OK) { - WLOGFD("notify window mode changed"); - for (auto& listener : windowChangeListeners_) { - if (listener != nullptr) { - listener->OnModeChange(mode); - } - } - if (uiContent_ != nullptr) { - uiContent_->UpdateWindowMode(mode); - WLOGFI("notify uiContent window mode change end"); - } + if (ret != WMError::WM_OK) { + return ret; } - return ret; + // set client window mode if success. + UpdateMode(mode); } if (property_->GetWindowMode() != mode) { WLOGFE("set window mode filed! id: %{public}d", property_->GetWindowId()); diff --git a/wmserver/src/window_controller.cpp b/wmserver/src/window_controller.cpp index 5f507729..0ae5b2b3 100644 --- a/wmserver/src/window_controller.cpp +++ b/wmserver/src/window_controller.cpp @@ -214,6 +214,7 @@ WMError WindowController::SetWindowMode(uint32_t windowId, WindowMode dstMode) WLOGFE("Set window mode failed, update node failed"); return res; } + node->GetWindowToken()->UpdateWindowMode(node->GetWindowMode()); FlushWindowInfo(windowId); return WMError::WM_OK; }