summaryrefslogtreecommitdiff
path: root/dali/internal/accessibility/bridge
AgeCommit message (Collapse)AuthorFilesLines
2022-05-24[AT-SPI] emit showing event for windowShinwoo Kim1-7/+4
For the multi-window case, we need to send 'showing' event when the AT-SPI bridge turns on. So far, we have sent only 'activate' event which is enough for the non-multi-window case. And the 'mIsShown' does not care about the multi-window case. If one window calls WindowShown, then other windows cannot send 'showing' event because of the 'mIsShown'. Change-Id: I501953e8dc1475550afc357293f21dd8fcc98620
2022-05-19[AT-SPI] Change Relation target from Address to AccessibleArtur Świgoń2-8/+8
It is not necessary to manually convert an Accessible* to an Address, because this conversion takes place automatically during serialization of D-Bus data, and the Accessible* type is generally more useful. Change-Id: Id58c0b6ab16fd365184d3b070a2b7105a2ac686d
2022-05-12[AT-SPI] Add Bridge::{Embed,Unembed}Socket()Artur Świgoń2-11/+51
This patch adds three new utility methods to Bridge: * EmbedSocket() - calls org.a11y.atspi.Socket.Embed The manually contstructed D-Bus call in Bridge::ForceUp() is replaced by EmbedSocket(). * UnembedSocket() - calls org.a11y.atspi.Socket.Unembed A missing UnembedSocket() is added in Bridge::ForceDown(). * EmbedAtkSocket() - calls org.a11y.atspi.Socket.Embedded The "Embedded" method is an ATK extension, but is required to embed an ATK-based subtree, e.g. a Chromium-based WebView, in a DALi application. Change-Id: I562072864d6a67272325562eabb91962c6813eab
2022-05-11Merge "[AT-SPI] Make ToolkitName customizable" into devel/masterSeoyeon Kim2-1/+14
2022-05-10[AT-SPI] remove isRoot param from Accessible::GetShinwoo Kim1-1/+1
The Accessibility::Accessible::Get for a window could be called before getting accessible to add window accessible. So far, we thought that the next part creates an accessible for window for the first time. accessible = Accessibility::Accessible::Get(rootLayer, true); bridge->AddTopLevelWindow(accessible); However, there is a case where it is created before this part caused by following symbol CSharp_Dali_Toolkit_DevelControl_GetAccessibilityStates+0x144 In this case, isRoot is set to `false`. Then window will have incorrect accessible information. For more information, please refer to the following. https://github.sec.samsung.net/tizen/atspi/issues/60 Change-Id: Id2d27f35426e72b67986f132f0c77979016b4252
2022-05-06[AT-SPI] Make ToolkitName customizableArtur Świgoń2-1/+14
Change-Id: I0758bf378e28798486cabb7ef1b8de16127eca53
2022-05-02[AT-SPI] Emit WindowEvent::DESTROYShinwoo Kim2-1/+6
AT client needs to know that a window is destroyed. Change-Id: Id64d31b3a69a7465e8eb382ab6ed2db9b1788007
2022-04-04Merge "[AT-SPI] do not keep window in ApplicationAccessible" into devel/masterShinwoo Kim3-54/+0
2022-04-04[AT-SPI] do not keep window in ApplicationAccessibleShinwoo Kim3-54/+0
There is not a reason to keep window in ApplicationAccessible to emit window related signals. Moreover, keeping window increases the reference count. In multi window case, Window.Reset() for the second window cannot make ~Window() is called because of the reference count is not 0. Change-Id: I13f636b12c62a29dc976602446b5dc13f2b521cb
2022-04-01Merge "[AT-SPI] Introduce AtspiEvents" into devel/masterShinwoo Kim1-9/+9
2022-03-24[AT-SPI] Introduce AtspiEventsShinwoo Kim1-9/+9
The AtspiEvents can be used for the event mask to suppress specific event. Change-Id: I9c639a543c7c5b0db8c813c5a599c2148ea655b3
2022-03-16[AT-SPI] Add ScreenReaderEnabled, DisabledShinwoo Kim1-0/+13
ScreenReaderEnabled should be distinguished from IsEnabled. This is because there are things to do only when the screen reader is enabled. Change-Id: Ibd9fd26380ef09b8c795696d9f320e0056c2bc41
2022-03-10Merge "[AT-SPI] text: add "GetRangeExtents" interface" into devel/masterShinwoo Kim3-4/+16
2022-03-04[AT-SPI] text: add "GetRangeExtents" interfaceShinwoo Kim3-4/+16
This interface will be used for getting MBR(Minimum Bounding Rectangle) with following usage on the AT client side. cc = atspi_text_get_character_count(text, NULL); rect = atspi_text_get_range_extents(text, 0, cc, ATSPI_COORD_TYPE_WINDOW, NULL); Change-Id: Iea4881269ee53807d75c0236c35672be7208fdac
2022-02-24[AT-SPI] Add Socket interfaceArtur Świgoń8-1/+147
Change-Id: I199c18011d24f7984e5f4cb95b5e626a418ab2ec
2022-02-24[AT-SPI] Rework Accessible::GetInterfaces()Artur Świgoń18-219/+109
This patch: * Introduces an AtspiInterface enumeration with all possible AT-SPI interfaces and an AtspiInterfaces collection (using EnumBitSet), and changes the return type of Accessible::GetInterfaces() to AtspiInterfaces. The new, compact storage format allows the collection of interfaces to be cached. Interfaces will be queried even more often with the upcoming polymorphic NUIViewAccessible. Thus, it makes sense to introduce such an optimization, and checking whether a bit is set in a 4-byte bitmask is significantly cheaper than performing a series of dynamic_cast's every time GetInterfaces() is called. Such calculation is only performed once by a new virtual method, DoGetInterfaces(). * Adds a new static method Accessible::GetInterfaceName() which converts an AtspiInterface value to a string identifier used in DBus communication, which allows to remove most of the macro definitions in accessibility-common.h. * Adds some missing operators to Accessibility::BitSet and EnumBitSet. * Introduces a template type resolver AtspiInterfaceType which converts an AtspiInterface value to a native C++ type, and adds Accessible::DownCast() which uses this helper to check both the return value of GetInterfaces() and the result of dynamic_cast. This double checking is required by the upcoming NUIViewAccessible. As a possible optimization, dynamic_cast could be changed to static_cast for release builds in the future (which should be safe as long as DoGetInterfaces() is implemented correctly). * Adds a new template method FindCurrentObjectWithInterface() to BridgeBase in order to centralize previously duplicated error return logic in implementations of FindSelf() in various Bridge classes, which differed only in the target type and interface name to be reported in the error DBus reply. * Adds a new virtual method Accessible::DoGetInterfaces() which allows any derived classes to customize (specifically, narrow down) the set of interfaces visible to DBus callers (and FindCurrentObjectWithInterface() respects that). This is the first step towards allowing NUI controls to freely implement AT-SPI interfaces (currently they have to choose from a small predefined set of NUIViewAccessible-derived classes due to the use of dynamic_cast). Change-Id: I14428ec20693a9b121d40ac1b12b6e30c709d313
2022-02-08[AT-SPI] Refactor Accessibility::BitSetArtur Świgoń1-1/+1
BitSets is renamed to BitSet (like std::bitset or java.util.BitSet) and split into two parts: BitSet and EnumBitSet. This way, the enumeration type can be effectively erased, so that EnumBitSet<SomeEnum, 13> and EnumBitSet<OtherEnum, 30> can share the same copy of the code in the resulting binary. EnumBitSet also calculates the required storage size automatically based on the maximum enum value. Additionally, the BitSet class is moved from accessibility.h (which contains mostly enum classes) to a separate file and is enriched with extensive documentation. Change-Id: Ib79a370fa9e6241402acb00e859ba20760dbb88c
2022-01-21[AT-SPI] Remove unnecessary parameter for ↵Artur Świgoń2-3/+3
Accessible::EmitActiveDescendantChanged Change-Id: Ia7af05e8a4f582f311ef379679a13e74299aa3cb
2022-01-18[AT-SPI] Clean up event emission code for BridgeObjectArtur Świgoń1-390/+127
1. Ensure early return if !IsUp() or IsHidden(). 2. Use a map to convert C++ names to DBus names. Change-Id: Iab0548c0561d9db0224ef81815a87b7d1aa012d7
2022-01-18[AT-SPI] Filter out hidden childrenArtur Świgoń1-1/+1
Change-Id: Idfd44364ed26258616711ef9ed786eef1d860c60
2022-01-06Merge "[ATSPI] do not make window hidden when bridge removes top level ↵Shinwoo Kim1-1/+0
window" into devel/master
2022-01-06[ATSPI] do not make window hidden when bridge removes top level windowShinwoo Kim1-1/+0
OnAccessibilityDisabled > RemoveTopLevelWindow > WindowHidden makes mIsShown become FALSE After this point, if the Accessibility is Enabled then the Bridge does not call EmitActivate in ForceUp because mIsShown is FALSE by RemoveTopLevelWindow > WindowHidden (mentioned above) I cannot find any reason calling WindowHidden in RemoveTopLevelWindow Please refer to following patch ttps://review.tizen.org/gerrit/#/c/platform/core/uifw/dali-adaptor/+/264762/8/dali/internal/accessibility/bridge/bridge-base.cpp@277 Change-Id: I6ebf2e4b94ff00867950047591539e8c8bc96c3a
2022-01-03[AT-SPI] Add Accessible::IsHidden()Artur Świgoń2-0/+10
Hidden means not present in the AT-SPI tree. Change-Id: Ic6f51ae6fde88828c482adc6966c57d8bc1d805f
2022-01-03[AT-SPI] Add ActorAccessibleArtur Świgoń3-15/+5
This change adds a new ActorAccessible class as a common ancestor for both AdaptorAccessible and ControlAccessible. This will allow to reduce code duplication between dali-adaptor and dali-toolkit. There are no significant changes to methods moved from AdaptorAccessible to ActorAccessible, as they will be reworked in a later change. Change-Id: I61fb8c6610e761cd8d49f8cf67f61af35cfe8dda
2021-12-27Merge "[ATSPI] recover ForceUp failure" into devel/masterShinwoo Kim2-36/+66
2021-12-24[ATSPI] recover ForceUp failureShinwoo Kim2-36/+66
It is able to be failed at ForceUp. We did throw an exception if bridge cannot get a11y dbus-daemon address. There is no proper way to handle this exception on application side. So we need to recover the failure of ForceUp with this patch set. Change-Id: I7f58c2fa3283bf6855d58a545ace9acb38252bb8
2021-12-23[AT-SPI] Clean up AT-SPI interfacesArtur Świgoń4-38/+38
This patch adds a `const` qualifier to most getter methods across all AT-SPI interfaces, with the exception of those that return an `Accessible*`, since these objects are by nature mutable (i.e. exposed on DBus for external manipulation, and DBus does not have const objects), and there is always a possibility to return to `this` with the `const` cast away, e.g. GetParent()->GetChildAtIndex(i). There are also some other minor changes like a `noexcept` qualifier for `~Accessible`, the `EditableText` interface now implying `Text`, and a data-driven `GetRoleName` in `Accessible`. Change-Id: I2ab0bb451f188fe0bd6dbd47c4aa0bad56624b42
2021-12-20[AT-SPI] Use a std::shared_ptr for BridgeArtur Świgoń3-9/+9
BridgeImpl was constructed with an unpaired `new`, causing a memory leak. Using a smart pointer guarantees that the memory will be freed at the end of application lifetime. Change-Id: Ib983d600cda082fa68e87c7d67130770acb78bef
2021-12-16[AT-SPI] Split accessibility-impl.hArtur Świgoń19-4/+48
Every AT-SPI interface now resides in a separate header file. There are no major changes besides moving code between files and making necessary adjustments to #include statements. Change-Id: If693012e7babc63518d9d314d27e534497f7014b
2021-12-16[ATSPI] ignore ScreenReaderEnabled property on suppress modeShinwoo Kim4-16/+31
The 'suppress' mode means that we do not want screen-reader working for our ATSPI related event. In this case, it would be better NOT to enable ATSPI bridge. So far we have used 'suppress-screen-reader' attribute. But sometimes GetAttributes does not work with following error message. "get attribute error: Did not receive a reply. Possible causes include: the remote application did not send a reply, the message bus security policy blocked the reply, the reply timeout expired, or the network connection was broken." We could handle this case, but the best is NOT to send unnecessary ATSPI events. The screen-reader should turning on ScreenReaderEnabled property only The ATSPI bridge will be enabled, when IsEnabled property is set by another AT client such as Aurum. Change-Id: I529ae8cc29594915b20c23279371a6488d11ea2d
2021-12-13[ATSPI] Fix for DefaultLabelLukasz Oleksak7-80/+65
Previously the call to GetDefaultLabelInfo() was delegated by bridge to the corresponding Accessible object which computed the reply locally (by default returned self). However default labels should be managed globally within given application. This patch: * replaces existing API AddPopup()/RemovePopup() by RegisterDefaultLabel()/UnregisterDefaultLabel() which has wider applicability (not only for popups) * changes the logic of GetDefaultLabelInfo() to compute default label object globally Related patches: https://review.tizen.org/gerrit/#/c/platform/core/uifw/dali-toolkit/+/267323/ https://review.tizen.org/gerrit/#/c/platform/core/uifw/dali-csharp-binder/+/267375/ Change-Id: I68ccaf55835109139ba00e2204fcdfcf2627d403
2021-12-09[ATSPI] reduce initialization attemptsShinwoo Kim1-3/+72
The at-spi-bus-launcher cannot reponse immediately on booting time. So there were lots of error logs can overwrite other logs. This patch is reducing attempt to initialize bridge and read properties. Change-Id: I546cc71c7e05b7d494a02b4ce73e16f96a8ef707
2021-12-06[AT-SPI] Fix not working screen reader when rerunning itSeoyeon Kim1-2/+2
[Reproduce Steps] 1. Screen Reader ON 2. Run any application 3. Turn Screen Reader OFF 4. Turn Screen Reader ON - It is caused by NULL windowAccessible which is returned by following function used by EmitActivate() Dali::Accessibility::Accessible* GetWindowAccessible(Dali::Window window) - Connected Enabled / Disabled signals to Window so that Window can add and remove itself from bridge when the state of bridge changes. Change-Id: I3bdebedd7bf4f9017d24b72999412a0f70cfd24b Signed-off-by: Seoyeon Kim <seoyeon2.kim@samsung.com>
2021-12-03[AT-SPI] Added support for menu item count listingMaria Bialota1-11/+16
Change-Id: Ic1fd8fc8404614c09d8d35bf630dbc45406ebb92
2021-11-23Merge "[ATSPI] Hypertext and Hyperlink interface support - dbus glue-code" ↵Seoyeon Kim6-1/+284
into devel/master
2021-11-22[ATSPI] Hypertext and Hyperlink interface support - dbus glue-codeLukasz Oleksak6-1/+284
Change-Id: I76987be672b6fba5c994b909973385f4defdeef8
2021-11-19[ATSPI] make NotifyAccessibilityStateChange workShinwoo Kim1-4/+3
The NotifyAccessibilityStateChange did not work correctly. Because "currentState.size()" return 2 always. And following line set newValue to 1 always. data->mBridge->EmitStateChanged(this, index, 1, 0); The NotifyAccessibilityStateChange was totally incorrect. Change-Id: If897084dc5b12b1c92711ef752187cc82fd7b01b
2021-11-12Fixed SVACE error in dbus.hAdeel Kazmi1-1/+1
Change-Id: I4316bb3d1332d5459b6e02676fb9af28933ef954
2021-11-11Merge "[AT-SPI] Add Bridge::{Enabled,Disabled}Signal()" into devel/masterSeoyeon Kim1-0/+5
2021-11-10[ATSPI] Read property in Async wayShinwoo Kim2-28/+72
An application could launch and read a property before at-spi-bus-launcher is running. The at-spi-bus-launcher is a process writing the property. If the application reads the property in syncronous way, then it is waiting until the at-spi-bus-launcher can respond. For the performance reason we will not read properties in syncronous way. Change-Id: I0c7f33b25f99d37d57c67bca48e2e617ab5b1b1a
2021-11-09[AT-SPI] Add Bridge::{Enabled,Disabled}Signal()Artur Świgoń1-0/+5
These signals are emitted whenever the AT-SPI bridge is turned on or off. Note that `EnabledSignal` is only emitted for the first `ForceUp` call, i.e. the one that returns `ForceUpResult::JUST_STARTED` (and a similar story for `DisabledSignal`). These signals are necessarily static members of `Bridge`, to guarantee that they are delivered to consumers even in those use cases in which the object returned by `GetCurrentBridge()` changes during the lifetime of the application. Change-Id: Id266b7ed064b8b2690e093804c3f7d23ac4347ce
2021-11-08[ATSPI] Apply multi-window to ATSPISeoyeon Kim4-38/+209
- Updated ATSPI codes to tell which window is visible or focused now. - DevelWindow::VisibilityChangedSignal is used to check whether the window is shown or not. - Added Window::FocusChangeSignal to check whether the window is activated. 1. Window show / hide -> object:state-chaged:showing 2. Window focus / unfocus -> WindowEvent::ACTIVATE Change-Id: I38a6f8f67c303234857a57e8d812511942a95917 Signed-off-by: Seoyeon Kim <seoyeon2.kim@samsung.com>
2021-10-29[ATSPI] Add more descriptions to Bridge objectsSeoyeon Kim13-158/+541
- Added descriptions of the remaining Bridge classes. - Updated some bridge codes according to dali coding style. Change-Id: Icf1c9d5968b3397ee7a869ec2ba312037c5d3c56 Signed-off-by: Seoyeon Kim <seoyeon2.kim@samsung.com>
2021-10-21[ATSPI] Sort children using middle lineShinwoo Kim2-16/+36
So far, it has been judged that thye are on different lines if the "y" value of child A is less than "y + 0.25 * h" value of child B. But it caused unwanted children order in following case. [(class=ContentPage)],[0,0,720,1280] [(class=AppBar)],[0,0,720,120] [(class=Button)],[64,36,48,48] [(class=TextLabel)],[136,0,300,120],[NUI Tizen Gallery] [(class=Control)],[476,0,180,120] The order should be "Button" > "TextLabel". Change-Id: Icb11cf1fb63de7a5cea8fbf7697cabdf5a5179eb
2021-10-15[ATSPI] Refactor - Remove duplicate linesShinwoo Kim1-32/+17
For clean code. Change-Id: I19615fb3b6f2713b866925957ea9f716dcec5167
2021-10-08[ATSPI] enhance "GetNeighbor" interfaceShinwoo Kim2-11/+56
The next accessible should be showing if the next accessible is under a scrollable parent which is not a scrollable parent of currently highlighted accessible. Change-Id: Id2d21528f6a4a1ecd4b4acc1cd3fff86dd80e0a5
2021-09-28[ATSPI] Add some descriptions to Bridge objectsSeoyeon Kim19-587/+1177
- Added some descriptions for BridgeAccessible and BridgeBase. I'm going to modify other header files, like BridgeAction, to another patch. Otherwise, this patch would become too heavy. - Updated some bridge codes according to dali coding style. Change-Id: I2cc9e7d222c4082af1cc423fd80e0c3eafbf083e Signed-off-by: Seoyeon Kim <seoyeon2.kim@samsung.com>
2021-09-17[ATSPI] Initialize Bridge on IdlerShinwoo Kim2-38/+92
There is an application launching before dbus. In this case application cannot use ATSPI interface. Because the Bridge cannot get a dbus connection. We prepared BridgeDisableAutoInit. But someone does not want to make application change. This patch is providing a way to initialize the Bridge for an application launching before dbus. Change-Id: Ic254f8e001c3d4f198b0a7bb680e5c5792b818cd
2021-09-14[ATSPI] Change function names for WindowSeoyeon Kim2-5/+5
- The original role of ApplicationShown/Hidden is to show/hide 'Window', not Application. Therefore, the name of ApplicationShown/Hidden must be changed to WindowShown/Hidden. Change-Id: I58fc8945d8efc95e7f3d73d5a1cf8654baa2f767 Signed-off-by: Seoyeon Kim <seoyeon2.kim@samsung.com>
2021-08-31[ATSPI] Added support for ToolkitName and Version to daliBartlomiej Grzelewski4-2/+123
Change-Id: Ibee9189930452c4c04856a8a2c1f0fd4512b1680