diff options
author | Artur Świgoń <a.swigon@samsung.com> | 2022-02-15 11:03:10 +0100 |
---|---|---|
committer | Artur Świgoń <a.swigon@samsung.com> | 2022-02-24 16:15:55 +0100 |
commit | 9d87fdf6dbed98492bfc215dcc18b027b7dbdba0 (patch) | |
tree | a31d6c58da5a35823bef8d2e997ea63ed1fcfc80 /dali/internal/accessibility/bridge | |
parent | be344e26bb8b7cb81f8153c8a78b57538989f0a2 (diff) | |
download | dali-adaptor-9d87fdf6dbed98492bfc215dcc18b027b7dbdba0.tar.gz dali-adaptor-9d87fdf6dbed98492bfc215dcc18b027b7dbdba0.tar.bz2 dali-adaptor-9d87fdf6dbed98492bfc215dcc18b027b7dbdba0.zip |
[AT-SPI] Add Socket interface
Change-Id: I199c18011d24f7984e5f4cb95b5e626a418ab2ec
Diffstat (limited to 'dali/internal/accessibility/bridge')
8 files changed, 147 insertions, 1 deletions
diff --git a/dali/internal/accessibility/bridge/accessible.cpp b/dali/internal/accessibility/bridge/accessible.cpp index aaf2584b9..403bcc45d 100644 --- a/dali/internal/accessibility/bridge/accessible.cpp +++ b/dali/internal/accessibility/bridge/accessible.cpp @@ -20,6 +20,7 @@ //INTERNAL INCLUDES #include <dali/devel-api/atspi-interfaces/accessible.h> #include <dali/devel-api/adaptor-framework/accessibility-bridge.h> +#include <dali/devel-api/atspi-interfaces/socket.h> #include <dali/internal/accessibility/bridge/accessibility-common.h> #include <third-party/libunibreak/linebreak.h> #include <third-party/libunibreak/wordbreak.h> @@ -116,6 +117,16 @@ void Accessible::EmitMovedOutOfScreen(ScreenRelativeMoveType type) } } +void Accessible::EmitSocketAvailable() +{ + DALI_ASSERT_DEBUG(Socket::DownCast(this)); + + if(auto bridgeData = GetBridgeData()) + { + bridgeData->mBridge->EmitSocketAvailable(this); + } +} + void Accessible::Emit(WindowEvent event, unsigned int detail) { if(auto bridgeData = GetBridgeData()) diff --git a/dali/internal/accessibility/bridge/bridge-impl.cpp b/dali/internal/accessibility/bridge/bridge-impl.cpp index e5bc0caa6..e2cb01c2c 100644 --- a/dali/internal/accessibility/bridge/bridge-impl.cpp +++ b/dali/internal/accessibility/bridge/bridge-impl.cpp @@ -36,6 +36,7 @@ #include <dali/internal/accessibility/bridge/bridge-hyperlink.h> #include <dali/internal/accessibility/bridge/bridge-object.h> #include <dali/internal/accessibility/bridge/bridge-selection.h> +#include <dali/internal/accessibility/bridge/bridge-socket.h> #include <dali/internal/accessibility/bridge/bridge-text.h> #include <dali/internal/accessibility/bridge/bridge-value.h> #include <dali/internal/accessibility/bridge/bridge-application.h> @@ -67,7 +68,8 @@ class BridgeImpl : public virtual BridgeBase, public BridgeSelection, public BridgeApplication, public BridgeHypertext, - public BridgeHyperlink + public BridgeHyperlink, + public BridgeSocket { DBus::DBusClient mAccessibilityStatusClient; DBus::DBusClient mRegistryClient; @@ -326,6 +328,7 @@ public: BridgeApplication::RegisterInterfaces(); BridgeHypertext::RegisterInterfaces(); BridgeHyperlink::RegisterInterfaces(); + BridgeSocket::RegisterInterfaces(); RegisterOnBridge(&mApplication); diff --git a/dali/internal/accessibility/bridge/bridge-object.cpp b/dali/internal/accessibility/bridge/bridge-object.cpp index fc1834b75..3efe6cbd3 100644 --- a/dali/internal/accessibility/bridge/bridge-object.cpp +++ b/dali/internal/accessibility/bridge/bridge-object.cpp @@ -300,3 +300,18 @@ void BridgeObject::EmitMovedOutOfScreen(Accessible* obj, ScreenRelativeMoveType {0}, {"", "root"}); } + +void BridgeObject::EmitSocketAvailable(Accessible* obj) +{ + if(!IsUp() || obj->IsHidden()) + { + return; + } + + mDbusServer.emit2<Address, Address>( + GetAccessiblePath(obj), + Accessible::GetInterfaceName(AtspiInterface::SOCKET), + "Available", + obj->GetAddress(), + {"", "root"}); +} diff --git a/dali/internal/accessibility/bridge/bridge-object.h b/dali/internal/accessibility/bridge/bridge-object.h index 69ca828d7..7d402b1c6 100644 --- a/dali/internal/accessibility/bridge/bridge-object.h +++ b/dali/internal/accessibility/bridge/bridge-object.h @@ -85,6 +85,11 @@ protected: */ void EmitMovedOutOfScreen(Dali::Accessibility::Accessible* obj, Dali::Accessibility::ScreenRelativeMoveType type) override; + /** + * @copydoc Dali::Accessibility::Bridge::EmitSocketAvailable() + */ + void EmitSocketAvailable(Dali::Accessibility::Accessible* obj) override; + protected: DBus::DBusInterfaceDescription::SignalId mStateChanged; }; diff --git a/dali/internal/accessibility/bridge/bridge-socket.cpp b/dali/internal/accessibility/bridge/bridge-socket.cpp new file mode 100644 index 000000000..fdbae8c46 --- /dev/null +++ b/dali/internal/accessibility/bridge/bridge-socket.cpp @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2022 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// CLASS HEADER +#include <dali/internal/accessibility/bridge/bridge-socket.h> + +using namespace Dali::Accessibility; + +void BridgeSocket::RegisterInterfaces() +{ + DBus::DBusInterfaceDescription desc{Accessible::GetInterfaceName(AtspiInterface::SOCKET)}; + + AddFunctionToInterface(desc, "Embed", &BridgeSocket::Embed); + AddFunctionToInterface(desc, "Unembed", &BridgeSocket::Unembed); + + mDbusServer.addInterface("/", desc, true); +} + +Socket* BridgeSocket::FindSelf() const +{ + return FindCurrentObjectWithInterface<Dali::Accessibility::AtspiInterface::SOCKET>(); +} + +DBus::ValueOrError<Address> BridgeSocket::Embed(Address plug) +{ + return FindSelf()->Embed(plug); +} + +DBus::ValueOrError<void> BridgeSocket::Unembed(Address plug) +{ + FindSelf()->Unembed(plug); + return {}; +} diff --git a/dali/internal/accessibility/bridge/bridge-socket.h b/dali/internal/accessibility/bridge/bridge-socket.h new file mode 100644 index 000000000..6034700e5 --- /dev/null +++ b/dali/internal/accessibility/bridge/bridge-socket.h @@ -0,0 +1,57 @@ +#ifndef DALI_INTERNAL_ACCESSIBILITY_BRIDGE_SOCKET_H +#define DALI_INTERNAL_ACCESSIBILITY_BRIDGE_SOCKET_H + +/* + * Copyright (c) 2022 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// INTERNAL INCLUDES +#include <dali/devel-api/atspi-interfaces/socket.h> +#include <dali/internal/accessibility/bridge/bridge-base.h> + +/** + * @brief The BridgeSocket class contains glue code for Accessibility::Socket. + */ +class BridgeSocket : public virtual BridgeBase +{ +protected: + BridgeSocket() = default; + + /** + * @brief Registers Socket methods as a DBus interface. + */ + void RegisterInterfaces(); + + /** + * @brief Returns the Socket object of the currently executed DBus method call. + * + * @return The Socket object + */ + Dali::Accessibility::Socket* FindSelf() const; + +public: + /** + * @copydoc Dali::Accessibility::Socket::Embed() + */ + DBus::ValueOrError<Dali::Accessibility::Address> Embed(Dali::Accessibility::Address plug); + + /** + * @copydoc Dali::Accessibility::Socket::Unembed() + */ + DBus::ValueOrError<void> Unembed(Dali::Accessibility::Address plug); +}; + +#endif // DALI_INTERNAL_ACCESSIBILITY_BRIDGE_SOCKET_H diff --git a/dali/internal/accessibility/bridge/dummy-atspi.cpp b/dali/internal/accessibility/bridge/dummy-atspi.cpp index c37840d04..3e6b30273 100644 --- a/dali/internal/accessibility/bridge/dummy-atspi.cpp +++ b/dali/internal/accessibility/bridge/dummy-atspi.cpp @@ -132,6 +132,10 @@ void Accessibility::Accessible::EmitMovedOutOfScreen(Accessibility::ScreenRelati { } +void Accessibility::Accessible::EmitSocketAvailable() +{ +} + void Accessibility::Accessible::FindWordSeparationsUtf8(const utf8_t* string, size_t length, const char* language, char* breaks) { } diff --git a/dali/internal/accessibility/bridge/dummy-atspi.h b/dali/internal/accessibility/bridge/dummy-atspi.h index 81b287d9b..4fd067830 100644 --- a/dali/internal/accessibility/bridge/dummy-atspi.h +++ b/dali/internal/accessibility/bridge/dummy-atspi.h @@ -122,6 +122,10 @@ struct DummyBridge : Dali::Accessibility::Bridge { } + void EmitSocketAvailable(Accessibility::Accessible* obj) override + { + } + void EmitStateChanged(Accessibility::Accessible* obj, Accessibility::State state, int newValue, int reserved) override { } |