feat: add screen reader support to Win32 toast notifications (#13834)

This commit is contained in:
Milan Burda 2018-09-12 16:18:35 +02:00 committed by Samuel Attard
parent 2cd03bf360
commit 932f6c8a41
5 changed files with 378 additions and 0 deletions

View file

@ -0,0 +1,80 @@
#ifndef BRIGHTRAY_BROWSER_WIN_WIN32_DESKTOP_NOTIFICATIONS_TOAST_UIA_H_
#define BRIGHTRAY_BROWSER_WIN_WIN32_DESKTOP_NOTIFICATIONS_TOAST_UIA_H_
#include "brightray/browser/win/win32_desktop_notifications/toast.h"
#include <combaseapi.h>
#include <UIAutomationCore.h>
namespace brightray {
class DesktopNotificationController::Toast::UIAutomationInterface
: public IRawElementProviderSimple,
public IWindowProvider,
public IInvokeProvider,
public ITextProvider {
public:
explicit UIAutomationInterface(Toast* toast);
void DetachToast() { hwnd_ = NULL; }
bool IsDetached() const { return !hwnd_; }
private:
virtual ~UIAutomationInterface() = default;
// IUnknown
public:
ULONG STDMETHODCALLTYPE AddRef() override;
ULONG STDMETHODCALLTYPE Release() override;
STDMETHODIMP QueryInterface(REFIID riid, LPVOID* ppv) override;
// IRawElementProviderSimple
public:
STDMETHODIMP get_ProviderOptions(ProviderOptions* retval) override;
STDMETHODIMP GetPatternProvider(PATTERNID pattern_id,
IUnknown** retval) override;
STDMETHODIMP GetPropertyValue(PROPERTYID property_id,
VARIANT* retval) override;
STDMETHODIMP get_HostRawElementProvider(
IRawElementProviderSimple** retval) override;
// IWindowProvider
public:
STDMETHODIMP SetVisualState(WindowVisualState state) override;
STDMETHODIMP Close() override;
STDMETHODIMP WaitForInputIdle(int milliseconds, BOOL* retval) override;
STDMETHODIMP get_CanMaximize(BOOL* retval) override;
STDMETHODIMP get_CanMinimize(BOOL* retval) override;
STDMETHODIMP get_IsModal(BOOL* retval) override;
STDMETHODIMP get_WindowVisualState(WindowVisualState* retval) override;
STDMETHODIMP get_WindowInteractionState(
WindowInteractionState* retval) override;
STDMETHODIMP get_IsTopmost(BOOL* retval) override;
// IInvokeProvider
public:
STDMETHODIMP Invoke() override;
// ITextProvider
public:
STDMETHODIMP GetSelection(SAFEARRAY** retval) override;
STDMETHODIMP GetVisibleRanges(SAFEARRAY** retval) override;
STDMETHODIMP RangeFromChild(IRawElementProviderSimple* child_element,
ITextRangeProvider** retval) override;
STDMETHODIMP RangeFromPoint(UiaPoint point,
ITextRangeProvider** retval) override;
STDMETHODIMP get_DocumentRange(ITextRangeProvider** retval) override;
STDMETHODIMP get_SupportedTextSelection(
SupportedTextSelection* retval) override;
private:
volatile LONG cref_ = 0;
HWND hwnd_;
std::wstring text_;
};
} // namespace brightray
#endif // BRIGHTRAY_BROWSER_WIN_WIN32_DESKTOP_NOTIFICATIONS_TOAST_UIA_H_