From: Artur Świgoń Date: Fri, 12 Mar 2021 17:05:02 +0000 (+0100) Subject: [Tizen] Use dummy AT-SPI bridge in the absence of a DBus session X-Git-Tag: accepted/tizen/unified/20210328.230644^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F92%2F255892%2F1;p=platform%2Fcore%2Fuifw%2Fdali-adaptor.git [Tizen] Use dummy AT-SPI bridge in the absence of a DBus session This is hotfix using following patch on devel/master branch https://review.tizen.org/gerrit/#/c/platform/core/uifw/dali-adaptor/+/255162/ Change-Id: I62690d899ffc615ccd9f709b3e7ea1ac6cfdb2d5 --- diff --git a/dali/internal/accessibility/bridge/bridge-impl.cpp b/dali/internal/accessibility/bridge/bridge-impl.cpp index f76a9b4..b7b026f 100644 --- a/dali/internal/accessibility/bridge/bridge-impl.cpp +++ b/dali/internal/accessibility/bridge/bridge-impl.cpp @@ -31,6 +31,7 @@ #include #include #include +#include using namespace Dali::Accessibility; @@ -316,8 +317,21 @@ public: } }; +static Bridge* CreateBridge() +{ + try + { + return new BridgeImpl; + } + catch (const std::exception&) + { + DALI_LOG_ERROR("Failed to initialize AT-SPI bridge"); + return Dali::Accessibility::DummyBridge::GetInstance(); + } +} + Bridge* Bridge::GetCurrentBridge() { - static BridgeImpl* bridge = new BridgeImpl; + static Bridge* bridge = CreateBridge(); return bridge; } diff --git a/dali/internal/accessibility/bridge/dummy-atspi.cpp b/dali/internal/accessibility/bridge/dummy-atspi.cpp index 695cb9d..8eec6b8 100644 --- a/dali/internal/accessibility/bridge/dummy-atspi.cpp +++ b/dali/internal/accessibility/bridge/dummy-atspi.cpp @@ -17,133 +17,10 @@ #include #include +#include namespace Dali { -namespace -{ -struct DummyBridge : Dali::Accessibility::Bridge -{ - const std::string& GetBusName() const override - { - static const std::string name = ""; - return name; - } - - void AddTopLevelWindow(Accessibility::Accessible*) override - { - } - - void RemoveTopLevelWindow(Accessibility::Accessible*) override - { - } - - void AddPopup(Accessibility::Accessible*) override - { - } - - void RemovePopup(Accessibility::Accessible*) override - { - } - - void SetApplicationName(std::string) override - { - } - - Accessibility::Accessible* GetApplication() const override - { - return nullptr; - } - - Accessibility::Accessible* FindByPath(const std::string& s) const override - { - return nullptr; - } - - void ApplicationShown() override - { - } - - void ApplicationHidden() override - { - } - - void Initialize() override - { - } - - void Terminate() override - { - } - - ForceUpResult ForceUp() override - { - return ForceUpResult::JUST_STARTED; - } - - void ForceDown() override - { - } - - void EmitCaretMoved(Accessibility::Accessible* obj, unsigned int cursorPosition) override - { - } - - void EmitActiveDescendantChanged(Accessibility::Accessible* obj, Accessibility::Accessible* child) override - { - } - - void EmitTextChanged(Accessibility::Accessible* obj, Accessibility::TextChangedState state, unsigned int position, unsigned int length, const std::string& content) override - { - } - - void EmitStateChanged(Accessibility::Accessible* obj, Accessibility::State state, int val1, int val2) override - { - } - - void Emit(Accessibility::Accessible* obj, Accessibility::WindowEvent we, unsigned int detail1) override - { - } - - void Emit(Accessibility::Accessible* obj, Accessibility::ObjectPropertyChangeEvent event) override - { - } - - void EmitBoundsChanged(Accessibility::Accessible* obj, Rect<> rect) override - { - } - - Accessibility::Consumed Emit(Accessibility::KeyEventType type, unsigned int keyCode, const std::string& keyName, unsigned int timeStamp, bool isText) override - { - return Accessibility::Consumed::YES; - } - - void Say(const std::string& text, bool discardable, std::function callback) override - { - } - - void Pause() override - { - } - - void Resume() override - { - } - - bool GetScreenReaderEnabled() override - { - return false; - } - - bool GetIsEnabled() override - { - return false; - } -}; - -DummyBridge dummyBridge; - -} // namespace Accessibility::Accessible::Accessible() { @@ -195,7 +72,7 @@ Accessibility::Accessible* Accessibility::Component::GetAccessibleAtPoint(Access Accessibility::Bridge* Accessibility::Bridge::GetCurrentBridge() { - return &dummyBridge; + return Accessibility::DummyBridge::GetInstance(); } void Accessibility::Accessible::EmitStateChanged(Accessibility::State state, int newValue1, int newValue2) diff --git a/dali/internal/accessibility/bridge/dummy-atspi.h b/dali/internal/accessibility/bridge/dummy-atspi.h new file mode 100644 index 0000000..02b1d25 --- /dev/null +++ b/dali/internal/accessibility/bridge/dummy-atspi.h @@ -0,0 +1,150 @@ +/* + * Copyright (c) 2021 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include +#include + +namespace Dali::Accessibility +{ + +struct DummyBridge : Dali::Accessibility::Bridge +{ + static DummyBridge *GetInstance() + { + static DummyBridge instance; + + return &instance; + } + + const std::string& GetBusName() const override + { + static const std::string name = ""; + return name; + } + + void AddTopLevelWindow(Accessibility::Accessible*) override + { + } + + void RemoveTopLevelWindow(Accessibility::Accessible*) override + { + } + + void AddPopup(Accessibility::Accessible*) override + { + } + + void RemovePopup(Accessibility::Accessible*) override + { + } + + void SetApplicationName(std::string) override + { + } + + Accessibility::Accessible* GetApplication() const override + { + return nullptr; + } + + Accessibility::Accessible* FindByPath(const std::string& s) const override + { + return nullptr; + } + + void ApplicationShown() override + { + } + + void ApplicationHidden() override + { + } + + void Initialize() override + { + } + + void Terminate() override + { + } + + ForceUpResult ForceUp() override + { + return ForceUpResult::JUST_STARTED; + } + + void ForceDown() override + { + } + + void EmitCaretMoved(Accessibility::Accessible* obj, unsigned int cursorPosition) override + { + } + + void EmitActiveDescendantChanged(Accessibility::Accessible* obj, Accessibility::Accessible* child) override + { + } + + void EmitTextChanged(Accessibility::Accessible* obj, Accessibility::TextChangedState state, unsigned int position, unsigned int length, const std::string& content) override + { + } + + void EmitStateChanged(Accessibility::Accessible* obj, Accessibility::State state, int val1, int val2) override + { + } + + void Emit(Accessibility::Accessible* obj, Accessibility::WindowEvent we, unsigned int detail1) override + { + } + + void Emit(Accessibility::Accessible* obj, Accessibility::ObjectPropertyChangeEvent event) override + { + } + + void EmitBoundsChanged(Accessibility::Accessible* obj, Rect<> rect) override + { + } + + Accessibility::Consumed Emit(Accessibility::KeyEventType type, unsigned int keyCode, const std::string& keyName, unsigned int timeStamp, bool isText) override + { + return Accessibility::Consumed::YES; + } + + void Say(const std::string& text, bool discardable, std::function callback) override + { + } + + void Pause() override + { + } + + void Resume() override + { + } + + bool GetScreenReaderEnabled() override + { + return false; + } + + bool GetIsEnabled() override + { + return false; + } +}; + +} // namespace Dali::Accessibility