!10909 fix blank for size changed

Merge pull request !10909 from Laiganlu/hop
This commit is contained in:
openharmony_ci 2024-11-22 10:39:40 +00:00 committed by Gitee
commit 3bebd1a69e
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
3 changed files with 40 additions and 1 deletions

View File

@ -566,6 +566,7 @@ private:
/**
* Window Layout
*/
std::atomic_bool windowSizeChanged_ = false;
WSRect layoutRect_;
std::atomic_bool enableFrameLayoutFinishCb_ = false;
WindowSizeChangeReason lastSizeChangeReason_ = WindowSizeChangeReason::END;

View File

@ -683,6 +683,9 @@ WSError WindowSessionImpl::UpdateRect(const WSRect& rect, SizeChangeReason reaso
Rect wmRect = { rect.posX_, rect.posY_, rect.width_, rect.height_ };
auto preRect = GetRect();
property_->SetWindowRect(wmRect);
if (preRect.width_ != wmRect.width_ || preRect.height_ != wmRect.height_) {
windowSizeChanged_ = true;
}
property_->SetRequestRect(wmRect);
TLOGI(WmsLogTag::WMS_LAYOUT, "%{public}s, preRect:%{public}s, reason:%{public}u, hasRSTransaction:%{public}d"
@ -859,7 +862,7 @@ void WindowSessionImpl::FlushLayoutSize(int32_t width, int32_t height)
return;
}
WSRect rect = { 0, 0, width, height };
if (layoutRect_ != rect || enableFrameLayoutFinishCb_) {
if (windowSizeChanged_ || layoutRect_ != rect || enableFrameLayoutFinishCb_) {
HITRACE_METER_FMT(HITRACE_TAG_WINDOW_MANAGER,
"NotifyFrameLayoutFinishFromApp, id: %u, rect: %s, notifyListener: %d",
GetWindowId(), rect.ToString().c_str(), enableFrameLayoutFinishCb_.load());
@ -869,6 +872,7 @@ void WindowSessionImpl::FlushLayoutSize(int32_t width, int32_t height)
if (auto session = GetHostSession()) {
session->NotifyFrameLayoutFinishFromApp(enableFrameLayoutFinishCb_, rect);
}
windowSizeChanged_ = false;
layoutRect_ = rect;
enableFrameLayoutFinishCb_ = false;
}

View File

@ -2177,6 +2177,40 @@ HWTEST_F(WindowSessionImplTest4, ClearListenersById_switchFreeMultiWindowListene
GTEST_LOG_(INFO) << "WindowSessionImplTest4: ClearListenersById_switchFreeMultiWindowListeners end";
}
/**
* @tc.name: FlushLayoutSize
* @tc.desc: FlushLayoutSize
* @tc.type: FUNC
*/
HWTEST_F(WindowSessionImplTest4, FlushLayoutSize, Function | SmallTest | Level2)
{
#undef private
GTEST_LOG_(INFO) << "WindowSessionImplTest4: FlushLayoutSize start";
sptr<WindowOption> option_ = sptr<WindowOption>::MakeSptr();
option_->SetWindowName("FlushLayoutSize");
sptr<WindowSessionImpl> window_ = sptr<WindowSessionImpl>::MakeSptr(option_);
window_->property_->SetWindowType(WindowType::APP_SUB_WINDOW_BASE);
int32_t width = 1320;
int32_t height = 2710;
WSRect rect = { 0, 0, width, height };
window_->FlushLayoutSize(width, height);
window_->property_->SetWindowType(WindowType::APP_MAIN_WINDOW_BASE);
window_->windowSizeChanged_ = true;
window_->FlushLayoutSize(width, height);
ASSERT_EQ(window_->windowSizeChanged_, false);
window_->layoutRect_ = { 0, 0, 2710, 1320 };
window_->FlushLayoutSize(width, height);
ASSERT_EQ(window_->layoutRect_, rect);
window_->enableFrameLayoutFinishCb_ = true;
window_->FlushLayoutSize(width, height);
ASSERT_EQ(window_->windowSizeChanged_, false);
GTEST_LOG_(INFO) << "WindowSessionImplTest4: FlushLayoutSize end";
}
}
} // namespace Rosen
} // namespace OHOS