summaryrefslogtreecommitdiff
path: root/dali/internal/accessibility/bridge
diff options
context:
space:
mode:
authorArtur Świgoń <a.swigon@samsung.com>2022-02-15 11:03:10 +0100
committerArtur Świgoń <a.swigon@samsung.com>2022-02-24 16:15:55 +0100
commit9d87fdf6dbed98492bfc215dcc18b027b7dbdba0 (patch)
treea31d6c58da5a35823bef8d2e997ea63ed1fcfc80 /dali/internal/accessibility/bridge
parentbe344e26bb8b7cb81f8153c8a78b57538989f0a2 (diff)
downloaddali-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')
-rw-r--r--dali/internal/accessibility/bridge/accessible.cpp11
-rw-r--r--dali/internal/accessibility/bridge/bridge-impl.cpp5
-rw-r--r--dali/internal/accessibility/bridge/bridge-object.cpp15
-rw-r--r--dali/internal/accessibility/bridge/bridge-object.h5
-rw-r--r--dali/internal/accessibility/bridge/bridge-socket.cpp47
-rw-r--r--dali/internal/accessibility/bridge/bridge-socket.h57
-rw-r--r--dali/internal/accessibility/bridge/dummy-atspi.cpp4
-rw-r--r--dali/internal/accessibility/bridge/dummy-atspi.h4
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
{
}