mirror of
https://gitee.com/openharmony/window_window_manager
synced 2025-02-25 18:31:49 +00:00
solution to onWindowAnimationFlagChange_ data race
Signed-off-by: unknown <wanglonghao3@h-partners.com>
This commit is contained in:
parent
453105e4f3
commit
bcd0caf328
@ -571,21 +571,14 @@ void JsSceneSession::ClearCbMap(bool needRemove, int32_t persistentId)
|
||||
|
||||
void JsSceneSession::ProcessSessionDefaultAnimationFlagChangeRegister()
|
||||
{
|
||||
auto sessionchangeCallback = sessionchangeCallback_.promote();
|
||||
if (sessionchangeCallback == nullptr) {
|
||||
WLOGFE("sessionchangeCallback is nullptr");
|
||||
return;
|
||||
}
|
||||
sessionchangeCallback->onWindowAnimationFlagChange_ = [this](bool isNeedDefaultAnimationFlag) {
|
||||
this->OnDefaultAnimationFlagChange(isNeedDefaultAnimationFlag);
|
||||
};
|
||||
auto session = weakSession_.promote();
|
||||
if (session == nullptr) {
|
||||
WLOGFE("session is nullptr");
|
||||
return;
|
||||
}
|
||||
sessionchangeCallback->onWindowAnimationFlagChange_(session->IsNeedDefaultAnimation());
|
||||
WLOGFD("ProcessSessionDefaultAnimationFlagChangeRegister success");
|
||||
session->RegisterDefaultAnimationFlagChangeCallback([this](bool isNeedDefaultAnimationFlag) {
|
||||
this->OnDefaultAnimationFlagChange(isNeedDefaultAnimationFlag);
|
||||
});
|
||||
}
|
||||
|
||||
void JsSceneSession::OnDefaultAnimationFlagChange(bool isNeedDefaultAnimationFlag)
|
||||
|
@ -292,6 +292,7 @@ public:
|
||||
void NotifySessionForeground(uint32_t reason, bool withAnimation);
|
||||
void NotifySessionBackground(uint32_t reason, bool withAnimation, bool isFromInnerkits);
|
||||
void RegisterSessionChangeCallback(const sptr<SceneSession::SessionChangeCallback>& sessionChangeCallback);
|
||||
void RegisterDefaultAnimationFlagChangeCallback(NotifyWindowAnimationFlagChangeFunc&& callback);
|
||||
void RegisterForceSplitListener(const NotifyForceSplitFunc& func);
|
||||
void ClearSpecificSessionCbMap();
|
||||
void SendPointerEventToUI(std::shared_ptr<MMI::PointerEvent> pointerEvent);
|
||||
|
@ -450,6 +450,23 @@ void SceneSession::RegisterSessionChangeCallback(const sptr<SceneSession::Sessio
|
||||
sessionChangeCallback_ = sessionChangeCallback;
|
||||
}
|
||||
|
||||
void SceneSession::RegisterDefaultAnimationFlagChangeCallback(NotifyWindowAnimationFlagChangeFunc&& callback)
|
||||
{
|
||||
auto task = [weakThis = wptr(this), callback = std::move(callback)] {
|
||||
auto session = weakThis.promote();
|
||||
if (!session) {
|
||||
TLOGE(WmsLogTag::WMS_LIFE, "session is null");
|
||||
return WSError::WS_ERROR_DESTROYED_OBJECT;
|
||||
}
|
||||
if (session->sessionChangeCallback_) {
|
||||
session->sessionChangeCallback_->onWindowAnimationFlagChange_ = std::move(callback);
|
||||
session->sessionChangeCallback_->onWindowAnimationFlagChange_(session->IsNeedDefaultAnimation());
|
||||
}
|
||||
return WSError::WS_OK;
|
||||
};
|
||||
PostTask(task, "RegisterDefaultAnimationFlagChangeCallback");
|
||||
}
|
||||
|
||||
WSError SceneSession::SetGlobalMaximizeMode(MaximizeMode mode)
|
||||
{
|
||||
auto task = [weakThis = wptr(this), mode]() {
|
||||
|
Loading…
x
Reference in New Issue
Block a user