From 4a1b0a720871dfc7f4d2309580dbd00c5538dc81 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Artur=20=C5=9Awigo=C5=84?= Date: Fri, 12 Jul 2024 12:09:37 +0200 Subject: [PATCH] [Tizen][AT-SPI] Unify widget bus names This enables cross-toolkit embedding (e.g. an EFL widget inside NUI app). Change-Id: If0efe85d37a6da9805819e287d6a8a73e0b76119 --- dali/devel-api/adaptor-framework/accessibility-bridge.h | 14 ++------------ dali/internal/accessibility/bridge/bridge-impl.cpp | 17 ++++++----------- .../internal/accessibility/bridge/dummy/dummy-atspi.cpp | 2 +- dali/internal/accessibility/bridge/dummy/dummy-atspi.h | 4 ---- .../system/tizen-wayland/widget-controller-tizen.cpp | 3 ++- 5 files changed, 11 insertions(+), 29 deletions(-) diff --git a/dali/devel-api/adaptor-framework/accessibility-bridge.h b/dali/devel-api/adaptor-framework/accessibility-bridge.h index 0796fad..0d3fc0a 100644 --- a/dali/devel-api/adaptor-framework/accessibility-bridge.h +++ b/dali/devel-api/adaptor-framework/accessibility-bridge.h @@ -448,17 +448,6 @@ struct DALI_ADAPTOR_API Bridge virtual Address EmbedSocket(const Address& plug, const Address& socket) = 0; /** - * @brief Calls socket.Embedded(plug) via D-Bus. - * - * The "Embedded" D-Bus method is an ATK extension. - * See 'impl_Embedded' in AT_SPI2_ATK/atk-adaptor/adaptors/socket-adaptor.c for more information. - * - * @param[in] plug The plug - * @param[in] socket The socket - */ - virtual void EmbedAtkSocket(const Address& plug, const Address& socket) = 0; - - /** * @brief Calls socket.Unmbed(plug) via D-Bus. * * @param[in] plug The plug @@ -550,11 +539,12 @@ struct DALI_ADAPTOR_API Bridge * @brief Encodes a widget ID as a usable bus name. * * @param widgetInstanceId The instance ID of a widget + * @param widgetProcessId The process ID (PID) of the widget * @return std::string Encoded bus name * * @see SetPreferredBusName */ - static std::string MakeBusNameForWidget(std::string_view widgetInstanceId); + static std::string MakeBusNameForWidget(std::string_view widgetInstanceId, int widgetProcessId); static Signal& EnabledSignal() { diff --git a/dali/internal/accessibility/bridge/bridge-impl.cpp b/dali/internal/accessibility/bridge/bridge-impl.cpp index 6896f1f..ac9ad82 100644 --- a/dali/internal/accessibility/bridge/bridge-impl.cpp +++ b/dali/internal/accessibility/bridge/bridge-impl.cpp @@ -829,13 +829,6 @@ public: return std::get<0>(reply.getValues()); } - void EmbedAtkSocket(const Address& plug, const Address& socket) override - { - auto client = CreateSocketClient(socket); - - client.method("Embedded").asyncCall([](DBus::ValueOrError) {}, ATSPI_PREFIX_PATH + plug.GetPath()); - } - void UnembedSocket(const Address& plug, const Address& socket) override { auto client = CreateSocketClient(socket); @@ -1002,12 +995,12 @@ void Bridge::EnableAutoInit() } } -std::string Bridge::MakeBusNameForWidget(std::string_view widgetInstanceId) +std::string Bridge::MakeBusNameForWidget(std::string_view widgetInstanceId, int widgetProcessId) { // The bus name should consist of dot-separated alphanumeric elements, e.g. "com.example.BusName123". - // Allowed characters in each element: "[A-Z][a-z][0-9]_", but no element may start with a digit. + // Allowed characters in each element: "[A-Z][a-z][0-9]_-", but no element may start with a digit. - static const char prefix[] = "com.samsung.dali.widget_"; + static const char prefix[] = "elm.atspi.proxy.socket-"; static const char underscore = '_'; std::stringstream tmp; @@ -1016,8 +1009,10 @@ std::string Bridge::MakeBusNameForWidget(std::string_view widgetInstanceId) for(char ch : widgetInstanceId) { - tmp << (std::isalnum(ch) ? ch : underscore); + tmp << (!std::isalnum(ch) && ch != '_' && ch != '-' && ch != '.' ? underscore : ch); } + tmp << '-' << widgetProcessId; + return tmp.str(); } diff --git a/dali/internal/accessibility/bridge/dummy/dummy-atspi.cpp b/dali/internal/accessibility/bridge/dummy/dummy-atspi.cpp index fefc1f2..764a442 100644 --- a/dali/internal/accessibility/bridge/dummy/dummy-atspi.cpp +++ b/dali/internal/accessibility/bridge/dummy/dummy-atspi.cpp @@ -88,7 +88,7 @@ void Accessibility::Bridge::EnableAutoInit() { } -std::string MakeBusNameForWidget(std::string_view widgetInstanceId) +std::string MakeBusNameForWidget(std::string_view widgetInstanceId, int widgetProcessId) { return std::string{widgetInstanceId}; } diff --git a/dali/internal/accessibility/bridge/dummy/dummy-atspi.h b/dali/internal/accessibility/bridge/dummy/dummy-atspi.h index 451e797..b2070b8 100644 --- a/dali/internal/accessibility/bridge/dummy/dummy-atspi.h +++ b/dali/internal/accessibility/bridge/dummy/dummy-atspi.h @@ -222,10 +222,6 @@ struct DummyBridge : Dali::Accessibility::Bridge return {}; } - void EmbedAtkSocket(const Address& plug, const Address& socket) override - { - } - void UnembedSocket(const Address& plug, const Address& socket) override { } diff --git a/dali/internal/system/tizen-wayland/widget-controller-tizen.cpp b/dali/internal/system/tizen-wayland/widget-controller-tizen.cpp index 311df34..40d5891 100644 --- a/dali/internal/system/tizen-wayland/widget-controller-tizen.cpp +++ b/dali/internal/system/tizen-wayland/widget-controller-tizen.cpp @@ -21,6 +21,7 @@ // EXTERNAL INCLUDES #include #include +#include #include // INTERNAL INCLUDES @@ -74,7 +75,7 @@ void WidgetImplTizen::SetInformation(Dali::Window window, const std::string& wid mWidgetId = widgetId; auto bridge = Accessibility::Bridge::GetCurrentBridge(); - auto preferredBusName = Accessibility::Bridge::MakeBusNameForWidget(widgetId); + auto preferredBusName = Accessibility::Bridge::MakeBusNameForWidget(widgetId, getpid()); // Ensure the bridge is at least in an unlocked state. Normal application callbacks that would // call Bridge::ApplicationPaused/Resumed() elsewhere are not operational in widget scenarios. -- 2.7.4