summaryrefslogtreecommitdiff
path: root/dali/internal/accessibility/bridge
diff options
context:
space:
mode:
authorArtur Świgoń <a.swigon@samsung.com>2023-09-15 11:11:24 +0200
committerArtur Świgoń <a.swigon@samsung.com>2024-03-01 10:40:18 +0100
commit9350c59a87ecc00ceb9bc46f19b031af8cd24384 (patch)
treee7dda424a13a3fa80c8e10bd522faa0c5ff6ec06 /dali/internal/accessibility/bridge
parentabcee93f0cabbd6be74cddd9727e8e65e9d6a698 (diff)
downloaddali-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.cpp50
-rw-r--r--dali/internal/accessibility/bridge/dummy/dummy-atspi.h6
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