diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 14:29:10 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 14:29:10 +0000 |
commit | 2aa4a82499d4becd2284cdb482213d541b8804dd (patch) | |
tree | b80bf8bf13c3766139fbacc530efd0dd9d54394c /accessible/windows/msaa/XULMenuAccessibleWrap.cpp | |
parent | Initial commit. (diff) | |
download | firefox-2aa4a82499d4becd2284cdb482213d541b8804dd.tar.xz firefox-2aa4a82499d4becd2284cdb482213d541b8804dd.zip |
Adding upstream version 86.0.1.upstream/86.0.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'accessible/windows/msaa/XULMenuAccessibleWrap.cpp')
-rw-r--r-- | accessible/windows/msaa/XULMenuAccessibleWrap.cpp | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/accessible/windows/msaa/XULMenuAccessibleWrap.cpp b/accessible/windows/msaa/XULMenuAccessibleWrap.cpp new file mode 100644 index 0000000000..dc9210dbb6 --- /dev/null +++ b/accessible/windows/msaa/XULMenuAccessibleWrap.cpp @@ -0,0 +1,63 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include "AccessibleWrap.h" +#include "EnumVariant.h" +#include "XULMenuAccessibleWrap.h" +#include "nsNameSpaceManager.h" + +using namespace mozilla::a11y; + +//////////////////////////////////////////////////////////////////////////////// +// XULMenuAccessibleWrap +//////////////////////////////////////////////////////////////////////////////// + +XULMenuitemAccessibleWrap::XULMenuitemAccessibleWrap(nsIContent* aContent, + DocAccessible* aDoc) + : XULMenuitemAccessible(aContent, aDoc) {} + +ENameValueFlag XULMenuitemAccessibleWrap::Name(nsString& aName) const { + // XXX This should be done in MSAA's get_accName() so that Accessible::Name()] + // provides the same results on all platforms + XULMenuitemAccessible::Name(aName); + if (aName.IsEmpty()) return eNameOK; + + nsAutoString accel; + if (mContent->IsElement()) { + mContent->AsElement()->GetAttr(kNameSpaceID_None, nsGkAtoms::acceltext, + accel); + } + if (!accel.IsEmpty()) aName += u"\t"_ns + accel; + + return eNameOK; +} + +STDMETHODIMP +XULMenuitemAccessibleWrap::get_accKeyboardShortcut( + /* [optional][in] */ VARIANT varChild, + /* [retval][out] */ BSTR __RPC_FAR* pszKeyboardShortcut) { + if (!pszKeyboardShortcut) return E_INVALIDARG; + *pszKeyboardShortcut = nullptr; + + if (varChild.vt != VT_I4 || varChild.lVal != CHILDID_SELF) { + return AccessibleWrap::get_accKeyboardShortcut(varChild, + pszKeyboardShortcut); + } + + if (IsDefunct()) { + return CO_E_OBJNOTCONNECTED; + } + + KeyBinding keyBinding = AccessKey(); + if (keyBinding.IsEmpty()) { + return S_FALSE; + } + + nsAutoString shortcut; + keyBinding.ToString(shortcut); + + *pszKeyboardShortcut = ::SysAllocStringLen(shortcut.get(), shortcut.Length()); + return *pszKeyboardShortcut ? S_OK : E_OUTOFMEMORY; +} |