#define DALI_INTERNAL_ATSPI_ACCESSIBILITY_COMMON_H
/*
- * Copyright (c) 2019 Samsung Electronics Co., Ltd.
+ * 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.
#include <string>
// INTERNAL INCLUDES
+#include <dali/devel-api/adaptor-framework/accessibility-bridge.h>
+#include <dali/internal/accessibility/bridge/dbus/dbus-locators.h>
+#include <dali/internal/accessibility/bridge/dbus/dbus.h>
#include <dali/public-api/dali-adaptor-common.h>
-#include <dali/devel-api/adaptor-framework/accessibility-impl.h>
-#include <dali/internal/accessibility/bridge/dbus.h>
-#include <dali/internal/accessibility/bridge/dbus-locators.h>
+
+// DBus names
#define A11yDbusName "org.a11y.Bus"
-#define A11yDbusPath "/org/a11y/bus"
#define A11yDbusStatusInterface "org.a11y.Status"
#define AtspiDbusNameRegistry "org.a11y.atspi.Registry"
-#define AtspiDbusPathRoot "/org/a11y/atspi/accessible/root"
-#define AtspiDbusInterfaceSocket "org.a11y.atspi.Socket"
-#define AtspiPath "/org/a11y/atspi/accessible"
-#define AtspiDbusInterfaceAccessible "org.a11y.atspi.Accessible"
-#define AtspiDbusInterfaceAction "org.a11y.atspi.Action"
-#define AtspiDbusInterfaceApplication "org.a11y.atspi.Application"
-#define AtspiDbusInterfaceCollection "org.a11y.atspi.Collection"
-#define AtspiDbusInterfaceComponent "org.a11y.atspi.Component"
-#define AtspiDbusInterfaceDocument "org.a11y.atspi.Document"
-#define AtspiDbusInterfaceEditableText "org.a11y.atspi.EditableText"
-#define AtspiDbusInterfaceEventKeyboard "org.a11y.atspi.Event.Keyboard"
-#define AtspiDbusInterfaceEventMouse "org.a11y.atspi.Event.Mouse"
-#define AtspiDbusInterfaceEventObject "org.a11y.atspi.Event.Object"
-#define AtspiDbusInterfaceHyperlink "org.a11y.atspi.Hyperlink"
-#define AtspiDbusInterfaceHypertext "org.a11y.atspi.Hypertext"
-#define AtspiDbusInterfaceImage "org.a11y.atspi.Image"
-#define AtspiDbusInterfaceSelection "org.a11y.atspi.Selection"
-#define AtspiDbusInterfaceTable "org.a11y.atspi.Table"
-#define AtspiDbusInterfaceTableCell "org.a11y.atspi.TableCell"
-#define AtspiDbusInterfaceText "org.a11y.atspi.Text"
-#define AtspiDbusInterfaceValue "org.a11y.atspi.Value"
-#define AtspiDbusInterfaceSocket "org.a11y.atspi.Socket"
-#define AtspiDbusInterfaceEventWindow "org.a11y.atspi.Event.Window"
+#define DirectReadingDBusName "org.tizen.ScreenReader"
+#define DirectReadingDBusInterface "org.tizen.DirectReading"
-#define AtspiDbusPathDec "/org/a11y/atspi/registry/deviceeventcontroller"
-#define AtspiDbusInterfaceDec "org.a11y.atspi.DeviceEventController"
-#define AtspiDbusInterfaceDeviceEventListener "org.a11y.atspi.DeviceEventListener"
+// DBus paths
-#define DirectReadingDBusName "org.tizen.ScreenReader"
+#define A11yDbusPath "/org/a11y/bus"
+#define AtspiDbusPathCache "/org/a11y/atspi/cache"
+#define AtspiDbusPathDec "/org/a11y/atspi/registry/deviceeventcontroller"
+#define AtspiDbusPathRegistry "/org/a11y/atspi/registry"
+#define AtspiDbusPathRoot "/org/a11y/atspi/accessible/root"
+#define AtspiPath "/org/a11y/atspi/accessible"
#define DirectReadingDBusPath "/org/tizen/DirectReading"
-#define DirectReadingDBusInterface "org.tizen.DirectReading"
struct ObjectPath;
namespace DBus
{
-
+/**
+ * @brief The CurrentBridgePtr class is to save the current Accessibility Bridge.
+ */
class CurrentBridgePtr
{
- static Dali::Accessibility::Bridge*& get()
+ static Dali::Accessibility::Bridge*& Get()
{
- static thread_local Dali::Accessibility::Bridge* b = nullptr;
- return b;
+ static thread_local Dali::Accessibility::Bridge* bridge = nullptr;
+ return bridge;
}
- Dali::Accessibility::Bridge* prev;
- CurrentBridgePtr( const CurrentBridgePtr& ) = delete;
- CurrentBridgePtr( CurrentBridgePtr&& ) = delete;
- CurrentBridgePtr& operator=( const CurrentBridgePtr& ) = delete;
- CurrentBridgePtr& operator=( CurrentBridgePtr&& ) = delete;
+ Dali::Accessibility::Bridge* mPrev;
+ CurrentBridgePtr(const CurrentBridgePtr&) = delete;
+ CurrentBridgePtr(CurrentBridgePtr&&) = delete;
+ CurrentBridgePtr& operator=(const CurrentBridgePtr&) = delete;
+ CurrentBridgePtr& operator=(CurrentBridgePtr&&) = delete;
public:
- CurrentBridgePtr( Dali::Accessibility::Bridge* b )
- : prev( get() )
+ CurrentBridgePtr(Dali::Accessibility::Bridge* bridge)
+ : mPrev(Get())
{
- get() = b;
+ Get() = bridge;
}
~CurrentBridgePtr()
{
- get() = prev;
+ Get() = mPrev;
}
- static Dali::Accessibility::Bridge* current()
+ static Dali::Accessibility::Bridge* GetCurrentBridge()
{
- return get();
+ return Get();
}
-};
+}; // CurrentBridgePtr
+// Templates for setting and getting Accessible values
namespace detail
{
-
-template < typename T >
-struct signature_accessible_impl : signature_helper<signature_accessible_impl<T>>
+template<>
+struct signature<Dali::Accessibility::Address> : signature_helper<signature<Dali::Accessibility::Address>>
{
- using subtype = std::pair< std::string, ObjectPath >;
+ using subtype = std::pair<std::string, ObjectPath>;
static constexpr auto name_v = concat("AtspiAccessiblePtr");
- static constexpr auto sig_v = concat("(so)");
+ static constexpr auto sig_v = signature<subtype>::sig_v; // "(so)"
/**
- * @brief Marshals value v as marshalled type into message
+ * @brief Marshals value address as marshalled type into message
*/
- static void set( const DBusWrapper::MessageIterPtr& iter, T* t )
+ static void set(const DBusWrapper::MessageIterPtr& iter, const Dali::Accessibility::Address& address)
{
- if( t )
+ if(address)
{
- auto v = t->GetAddress();
- signature< subtype >::set( iter, { v.GetBus(), ObjectPath{std::string{ ATSPI_PREFIX_PATH } +v.GetPath()} } );
+ signature<subtype>::set(iter, {address.GetBus(), ObjectPath{std::string{ATSPI_PREFIX_PATH} + address.GetPath()}});
}
else
{
- signature< subtype >::set( iter, { "", ObjectPath{ ATSPI_NULL_PATH } } );
+ signature<subtype>::set(iter, {address.GetBus(), ObjectPath{ATSPI_NULL_PATH}});
}
}
/**
- * @brief Marshals value from marshalled type into variable v
+ * @brief Marshals value from marshalled type into variable address
*/
- static bool get( const DBusWrapper::MessageIterPtr& iter, T*& v )
+ static bool get(const DBusWrapper::MessageIterPtr& iter, Dali::Accessibility::Address& address)
{
subtype tmp;
- if( !signature< subtype >::get( iter, tmp ) )
+ if(!signature<subtype>::get(iter, tmp))
{
return false;
}
- if( tmp.second.value == ATSPI_NULL_PATH )
+ if(tmp.second.value == ATSPI_NULL_PATH)
{
- v = nullptr;
+ address = {};
return true;
}
-
- if( tmp.second.value.substr( 0, strlen( ATSPI_PREFIX_PATH ) ) != ATSPI_PREFIX_PATH )
- {
- return false;
- }
-
- auto b = CurrentBridgePtr::current();
- if( b->GetBusName() != tmp.first )
+ if(tmp.second.value.substr(0, strlen(ATSPI_PREFIX_PATH)) != ATSPI_PREFIX_PATH)
{
return false;
}
- v = b->FindByPath( tmp.second.value.substr( strlen( ATSPI_PREFIX_PATH ) ) );
- return v != nullptr;
+ address = {std::move(tmp.first), tmp.second.value.substr(strlen(ATSPI_PREFIX_PATH))};
+ return true;
}
};
-template <>
-struct signature< Dali::Accessibility::Accessible* > : public signature_accessible_impl< Dali::Accessibility::Accessible >
+template<typename T>
+struct SignatureAccessibleImpl : signature_helper<SignatureAccessibleImpl<T>>
{
-};
-
-template <>
-struct signature< Dali::Accessibility::Address > : signature_helper<signature<Dali::Accessibility::Address>>
-{
- using subtype = std::pair< std::string, ObjectPath >;
+ using subtype = Dali::Accessibility::Address;
- static constexpr auto name_v = concat("AtspiAccessiblePtr");
- static constexpr auto sig_v = concat("(so)");
+ static constexpr auto name_v = signature<subtype>::name_v;
+ static constexpr auto sig_v = signature<subtype>::sig_v;
/**
- * @brief Marshals value v as marshalled type into message
+ * @brief Marshals value address as marshalled type into message
*/
- static void set( const DBusWrapper::MessageIterPtr& iter, const Dali::Accessibility::Address& v )
+ static void set(const DBusWrapper::MessageIterPtr& iter, T* accessible)
{
- if( v )
- {
- signature< subtype >::set( iter, { v.GetBus(), ObjectPath{ std::string{ ATSPI_PREFIX_PATH } + v.GetPath() } } );
- }
- else
- {
- signature< subtype >::set( iter, { v.GetBus(), ObjectPath{ ATSPI_NULL_PATH } } );
- }
+ signature<subtype>::set(iter, accessible ? accessible->GetAddress() : subtype{});
}
/**
- * @brief Marshals value from marshalled type into variable v
+ * @brief Marshals value from marshalled type into variable path
*/
- static bool get( const DBusWrapper::MessageIterPtr& iter, Dali::Accessibility::Address& v )
+ static bool get(const DBusWrapper::MessageIterPtr& iter, T*& path)
{
- subtype tmp;
- if( !signature< subtype >::get( iter, tmp ) )
- {
- return false;
- }
+ subtype address;
- if( tmp.second.value == ATSPI_NULL_PATH )
- {
- v = {};
- return true;
- }
- if( tmp.second.value.substr( 0, strlen( ATSPI_PREFIX_PATH ) ) != ATSPI_PREFIX_PATH )
+ signature<subtype>::get(iter, address);
+
+ auto currentBridge = CurrentBridgePtr::GetCurrentBridge();
+ if(currentBridge->GetBusName() != address.GetBus())
{
return false;
}
- v = { std::move( tmp.first ), tmp.second.value.substr( strlen( ATSPI_PREFIX_PATH ) ) };
- return true;
+ path = currentBridge->FindByPath(address.GetPath());
+ return path != nullptr;
}
};
-template <>
-struct signature< Dali::Accessibility::States > : signature_helper<signature<Dali::Accessibility::States>>
+template<>
+struct signature<Dali::Accessibility::Accessible*> : public SignatureAccessibleImpl<Dali::Accessibility::Accessible>
+{
+};
+
+template<>
+struct signature<Dali::Accessibility::States> : signature_helper<signature<Dali::Accessibility::States>>
{
using subtype = std::array<uint32_t, 2>;
static constexpr auto name_v = signature<subtype>::name_v;
- static constexpr auto sig_v = signature<subtype>::sig_v;
+ static constexpr auto sig_v = signature<subtype>::sig_v;
/**
- * @brief Marshals value v as marshalled type into message
+ * @brief Marshals value state as marshalled type into message
*/
- static void set( const DBusWrapper::MessageIterPtr& iter, const Dali::Accessibility::States& v )
+ static void set(const DBusWrapper::MessageIterPtr& iter, const Dali::Accessibility::States& states)
{
- signature< subtype >::set( iter, v.GetRawData() );
+ signature<subtype>::set(iter, states.GetRawData());
}
/**
- * @brief Marshals value from marshalled type into variable v
+ * @brief Marshals value from marshalled type into variable state
*/
- static bool get( const DBusWrapper::MessageIterPtr& iter, Dali::Accessibility::States& v )
+ static bool get(const DBusWrapper::MessageIterPtr& iter, Dali::Accessibility::States& state)
{
subtype tmp;
- if( !signature< subtype >::get( iter, tmp ) )
+ if(!signature<subtype>::get(iter, tmp))
{
return false;
}
- v = Dali::Accessibility::States{ tmp };
+ state = Dali::Accessibility::States{tmp};
return true;
}
};
-}
-}
+} // namespace detail
+} // namespace DBus
struct _Logger
{
- const char* file;
- int line;
- std::ostringstream tmp;
+ const char* mFile;
+ int mLine;
+ std::ostringstream mTmp;
- _Logger( const char* f, int l )
- : file( f ),
- line( l ){}
+ _Logger(const char* file, int line)
+ : mFile(file),
+ mLine(line)
+ {
+ }
~_Logger()
{
- Dali::Integration::Log::LogMessage( Dali::Integration::Log::DebugInfo, "%s:%d: %s", file, line, tmp.str().c_str() );
+ Dali::Integration::Log::LogMessage(Dali::Integration::Log::INFO, "%s:%d: %s", mFile, mLine, mTmp.str().c_str());
}
- template < typename T >
- _Logger& operator<<( T&& t )
+ template<typename T>
+ _Logger& operator<<(T&& t)
{
- tmp << std::forward< T >( t );
+ mTmp << std::forward<T>(t);
return *this;
}
};
struct _LoggerEmpty
{
- template < typename T >
- _LoggerEmpty& operator<<( T&& t )
+ template<typename T>
+ _LoggerEmpty& operator<<(T&& t)
{
return *this;
}
struct _LoggerScope
{
- const char* file;
- int line;
+ const char* mFile;
+ int mLine;
- _LoggerScope( const char* f, int l )
- : file( f ),
- line( l )
+ _LoggerScope(const char* file, int line)
+ : mFile(file),
+ mLine(line)
{
- Dali::Integration::Log::LogMessage( Dali::Integration::Log::DebugInfo, "%s:%d: +", file, line );
+ Dali::Integration::Log::LogMessage(Dali::Integration::Log::INFO, "%s:%d: +", mFile, mLine);
}
~_LoggerScope()
{
- Dali::Integration::Log::LogMessage( Dali::Integration::Log::DebugInfo, "%s:%d: -", file, line );
+ Dali::Integration::Log::LogMessage(Dali::Integration::Log::INFO, "%s:%d: -", mFile, mLine);
}
};
-#define LOG() _Logger( __FILE__, __LINE__ )
-#define SCOPE() _LoggerScope _l##__LINE__( __FILE__, __LINE__ )
+#define LOG() _Logger(__FILE__, __LINE__)
+#define SCOPE() _LoggerScope _l##__LINE__(__FILE__, __LINE__)
#endif // DALI_INTERNAL_ATSPI_ACCESSIBILITY_COMMON_H