X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali%2Finternal%2Faccessibility%2Fbridge%2Fbridge-object.cpp;h=d1f553e1f8d370b6f0702d18bc3df07feb0f621b;hb=HEAD;hp=c3e5de524cd5d64e06db3e0654c180bd18a3d749;hpb=97080cf5352daeba268b2643dd16d9624a5c6e2d;p=platform%2Fcore%2Fuifw%2Fdali-adaptor.git diff --git a/dali/internal/accessibility/bridge/bridge-object.cpp b/dali/internal/accessibility/bridge/bridge-object.cpp index c3e5de5..0d21e3f 100644 --- a/dali/internal/accessibility/bridge/bridge-object.cpp +++ b/dali/internal/accessibility/bridge/bridge-object.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023 Samsung Electronics Co., Ltd. + * Copyright (c) 2024 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -66,7 +66,7 @@ void BridgeObject::EmitActiveDescendantChanged(Accessible* obj, Accessible* chil {"", "root"}); } -void BridgeObject::Emit(Accessible* obj, ObjectPropertyChangeEvent event) +void BridgeObject::Emit(std::shared_ptr obj, ObjectPropertyChangeEvent event) { static const std::unordered_map eventMap{ {ObjectPropertyChangeEvent::NAME, "accessible-name"}, @@ -85,15 +85,20 @@ void BridgeObject::Emit(Accessible* obj, ObjectPropertyChangeEvent event) if(eventName != eventMap.end()) { - mDbusServer.emit2, Address>( - GetAccessiblePath(obj), - Accessible::GetInterfaceName(AtspiInterface::EVENT_OBJECT), - "PropertyChange", - std::string{eventName->second}, - 0, - 0, - {0}, - {"", "root"}); + AddCoalescableMessage(static_cast(static_cast(CoalescableMessages::PROPERTY_CHANGED_BEGIN) + static_cast(event)), obj.get(), 1.0f, [weakObj = std::weak_ptr(obj), eventName, this]() { + if(auto obj = weakObj.lock()) + { + mDbusServer.emit2, Address>( + GetAccessiblePath(obj.get()), + Accessible::GetInterfaceName(AtspiInterface::EVENT_OBJECT), + "PropertyChange", + std::string{eventName->second}, + 0, + 0, + {0}, + {"", "root"}); + } + }); } } @@ -143,7 +148,7 @@ void BridgeObject::Emit(Accessible* obj, WindowEvent event, unsigned int detail) } } -void BridgeObject::EmitStateChanged(Accessible* obj, State state, int newValue, int reserved) +void BridgeObject::EmitStateChanged(std::shared_ptr obj, State state, int newValue, int reserved) { static const std::unordered_map stateMap{ {State::INVALID, "invalid"}, @@ -203,45 +208,61 @@ void BridgeObject::EmitStateChanged(Accessible* obj, State state, int newValue, if(stateName != stateMap.end()) { - mDbusServer.emit2, Address>( - GetAccessiblePath(obj), - Accessible::GetInterfaceName(AtspiInterface::EVENT_OBJECT), - "StateChanged", - std::string{stateName->second}, - newValue, - reserved, - {0}, - {"", "root"}); + AddCoalescableMessage(static_cast(static_cast(CoalescableMessages::STATE_CHANGED_BEGIN) + static_cast(state)), obj.get(), 1.0f, [weakObj = std::weak_ptr(obj), stateName, newValue, reserved, this]() { + if(auto obj = weakObj.lock()) + { + mDbusServer.emit2, Address>( + GetAccessiblePath(obj.get()), + Accessible::GetInterfaceName(AtspiInterface::EVENT_OBJECT), + "StateChanged", + std::string{stateName->second}, + newValue, + reserved, + {0}, + {"", "root"}); + } + }); } } -void BridgeObject::EmitBoundsChanged(Accessible* obj, Dali::Rect<> rect) +void BridgeObject::EmitBoundsChanged(std::shared_ptr obj, Dali::Rect<> rect) { if(!IsUp() || !IsBoundsChangedEventAllowed || obj->IsHidden() || obj->GetSuppressedEvents()[AtspiEvent::BOUNDS_CHANGED]) { return; } - DBus::EldbusVariant > tmp{ - std::tuple{rect.x, rect.y, rect.width, rect.height}}; - - AddCoalescableMessage(CoalescableMessages::BOUNDS_CHANGED, obj, 1.0f, [=]() { - mDbusServer.emit2 >, Address>( - GetAccessiblePath(obj), - Accessible::GetInterfaceName(AtspiInterface::EVENT_OBJECT), - "BoundsChanged", - "", - 0, - 0, - tmp, - {"", "root"}); + AddCoalescableMessage(CoalescableMessages::BOUNDS_CHANGED, obj.get(), 1.0f, [weakObj = std::weak_ptr(obj), rect = std::move(rect), this]() { + if(auto obj = weakObj.lock()) + { + DBus::EldbusVariant > tmp{ + std::tuple{rect.x, rect.y, rect.width, rect.height}}; + + mDbusServer.emit2 >, Address>( + GetAccessiblePath(obj.get()), + Accessible::GetInterfaceName(AtspiInterface::EVENT_OBJECT), + "BoundsChanged", + "", + 0, + 0, + tmp, + {"", "root"}); + } }); } -void BridgeObject::EmitPostRender(Accessible *obj) +void BridgeObject::EmitPostRender(std::shared_ptr obj) { - AddCoalescableMessage(CoalescableMessages::POST_RENDER, obj, 0.5f, [=]() { - Emit(obj, WindowEvent::POST_RENDER); + if(!IsUp() || obj->IsHidden()) + { + return; + } + + AddCoalescableMessage(CoalescableMessages::POST_RENDER, obj.get(), 0.5f, [weakObj = std::weak_ptr(obj), this]() { + if(auto obj = weakObj.lock()) + { + Emit(obj.get(), WindowEvent::POST_RENDER); + } }); }