diff options
author | Artur Świgoń <a.swigon@samsung.com> | 2023-09-15 11:11:24 +0200 |
---|---|---|
committer | Artur Świgoń <a.swigon@samsung.com> | 2024-03-01 10:40:18 +0100 |
commit | 9350c59a87ecc00ceb9bc46f19b031af8cd24384 (patch) | |
tree | e7dda424a13a3fa80c8e10bd522faa0c5ff6ec06 /dali/internal/accessibility/bridge | |
parent | abcee93f0cabbd6be74cddd9727e8e65e9d6a698 (diff) | |
download | dali-adaptor-9350c59a87ecc00ceb9bc46f19b031af8cd24384.tar.gz dali-adaptor-9350c59a87ecc00ceb9bc46f19b031af8cd24384.tar.bz2 dali-adaptor-9350c59a87ecc00ceb9bc46f19b031af8cd24384.zip |
[AT-SPI] Rework intercepting key events
- Make KeyEvent intercepting asynchronous to prevent deadlocks.
- Support intercepting on windows other than the main window.
Change-Id: I0f8683c82900483498479c501c0555f2cf1683d0
Diffstat (limited to 'dali/internal/accessibility/bridge')
-rw-r--r-- | dali/internal/accessibility/bridge/bridge-impl.cpp | 50 | ||||
-rw-r--r-- | dali/internal/accessibility/bridge/dummy/dummy-atspi.h | 6 |
2 files changed, 28 insertions, 28 deletions
diff --git a/dali/internal/accessibility/bridge/bridge-impl.cpp b/dali/internal/accessibility/bridge/bridge-impl.cpp index 3851cbccc..2fd6c4961 100644 --- a/dali/internal/accessibility/bridge/bridge-impl.cpp +++ b/dali/internal/accessibility/bridge/bridge-impl.cpp @@ -94,43 +94,43 @@ public: BridgeImpl() = default; /** - * @copydoc Dali::Accessibility::Bridge::Emit() + * @copydoc Dali::Accessibility::Bridge::EmitKeyEvent() */ - Consumed Emit(KeyEventType type, unsigned int keyCode, const std::string& keyName, unsigned int timeStamp, bool isText) override + bool EmitKeyEvent(Dali::KeyEvent keyEvent, std::function<void(Dali::KeyEvent, bool)> callback) override { + using ArgumentTypes = std::tuple<uint32_t, int32_t, int32_t, int32_t, int32_t, std::string, bool>; + + static const char* methodName = "NotifyListenersSync"; + if(!IsUp()) { - return Consumed::NO; + return false; } - unsigned int keyType = 0; + uint32_t keyType = (keyEvent.GetState() == Dali::KeyEvent::DOWN ? 0U : 1U); + auto timeStamp = static_cast<std::int32_t>(keyEvent.GetTime()); + bool isText = !keyEvent.GetKeyString().empty(); - switch(type) - { - case KeyEventType::KEY_PRESSED: - { - keyType = 0; - break; - } - case KeyEventType::KEY_RELEASED: + ArgumentTypes arguments(keyType, 0, keyEvent.GetKeyCode(), 0, timeStamp, keyEvent.GetKeyName(), isText); + + auto functor = [keyEvent = std::move(keyEvent), callback = std::move(callback)](DBus::ValueOrError<bool> reply) { + bool consumed = false; + + if(!reply) { - keyType = 1; - break; + DALI_LOG_ERROR("%s call failed: %s", methodName, reply.getError().message.c_str()); } - default: + else { - return Consumed::NO; + consumed = std::get<0>(reply.getValues()); } - } - auto methodObject = mRegistryClient.method<bool(std::tuple<uint32_t, int32_t, int32_t, int32_t, int32_t, std::string, bool>)>("NotifyListenersSync"); - auto result = methodObject.call(std::tuple<uint32_t, int32_t, int32_t, int32_t, int32_t, std::string, bool>{keyType, 0, static_cast<int32_t>(keyCode), 0, static_cast<int32_t>(timeStamp), keyName, isText ? 1 : 0}); - if(!result) - { - LOG() << result.getError().message; - return Consumed::NO; - } - return std::get<0>(result) ? Consumed::YES : Consumed::NO; + callback(std::move(keyEvent), consumed); + }; + + mRegistryClient.method<bool(ArgumentTypes)>(methodName).asyncCall(std::move(functor), arguments); + + return true; } /** diff --git a/dali/internal/accessibility/bridge/dummy/dummy-atspi.h b/dali/internal/accessibility/bridge/dummy/dummy-atspi.h index 9e0035a6c..a5ed28962 100644 --- a/dali/internal/accessibility/bridge/dummy/dummy-atspi.h +++ b/dali/internal/accessibility/bridge/dummy/dummy-atspi.h @@ -2,7 +2,7 @@ #define DALI_ADAPTOR_DUMMY_ATSPI_H /* - * Copyright (c) 2022 Samsung Electronics Co., Ltd. + * Copyright (c) 2024 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. @@ -174,9 +174,9 @@ struct DummyBridge : Dali::Accessibility::Bridge { } - Accessibility::Consumed Emit(Accessibility::KeyEventType type, unsigned int keyCode, const std::string& keyName, unsigned int timeStamp, bool isText) override + bool EmitKeyEvent(Dali::KeyEvent keyEvent, std::function<void(Dali::KeyEvent, bool)> callback) override { - return Accessibility::Consumed::YES; + return false; } void Say(const std::string& text, bool discardable, std::function<void(std::string)> callback) override |