accessible/src/windows/msaa/EnumVariant.cpp

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
     2 /* vim: set ts=2 et sw=2 tw=80: */
     3 /* This Source Code Form is subject to the terms of the Mozilla Public
     4  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
     5  * You can obtain one at http://mozilla.org/MPL/2.0/. */
     7 #include "EnumVariant.h"
     9 using namespace mozilla;
    10 using namespace mozilla::a11y;
    12 ////////////////////////////////////////////////////////////////////////////////
    13 // ChildrenEnumVariant
    14 ////////////////////////////////////////////////////////////////////////////////
    16 IMPL_IUNKNOWN_QUERY_HEAD(ChildrenEnumVariant)
    17 IMPL_IUNKNOWN_QUERY_IFACE(IEnumVARIANT);
    18 IMPL_IUNKNOWN_QUERY_IFACE(IUnknown);
    19 IMPL_IUNKNOWN_QUERY_AGGR_COND(mAnchorAcc, !mAnchorAcc->IsDefunct());
    20 IMPL_IUNKNOWN_QUERY_TAIL
    22 STDMETHODIMP
    23 ChildrenEnumVariant::Next(ULONG aCount, VARIANT FAR* aItems,
    24                           ULONG FAR* aCountFetched)
    25 {
    26   A11Y_TRYBLOCK_BEGIN
    28   if (!aItems || !aCountFetched)
    29     return E_INVALIDARG;
    31   *aCountFetched = 0;
    33   if (mAnchorAcc->IsDefunct() || mAnchorAcc->GetChildAt(mCurIndex) != mCurAcc)
    34     return CO_E_OBJNOTCONNECTED;
    36   ULONG countFetched = 0;
    37   for (; mCurAcc && countFetched < aCount; countFetched++) {
    38     VariantInit(aItems + countFetched);
    39     aItems[countFetched].pdispVal = AccessibleWrap::NativeAccessible(mCurAcc);
    40     aItems[countFetched].vt = VT_DISPATCH;
    42     mCurIndex++;
    43     mCurAcc = mAnchorAcc->GetChildAt(mCurIndex);
    44   }
    46   (*aCountFetched) = countFetched;
    48   return countFetched < aCount ? S_FALSE : S_OK;
    50   A11Y_TRYBLOCK_END
    51 }
    53 STDMETHODIMP
    54 ChildrenEnumVariant::Skip(ULONG aCount)
    55 {
    56   A11Y_TRYBLOCK_BEGIN
    58   if (mAnchorAcc->IsDefunct() || mAnchorAcc->GetChildAt(mCurIndex) != mCurAcc)
    59     return CO_E_OBJNOTCONNECTED;
    61   mCurIndex += aCount;
    62   mCurAcc = mAnchorAcc->GetChildAt(mCurIndex);
    64   return mCurAcc ? S_OK : S_FALSE;
    66   A11Y_TRYBLOCK_END
    67 }
    69 STDMETHODIMP
    70 ChildrenEnumVariant::Reset()
    71 {
    72   A11Y_TRYBLOCK_BEGIN
    74   if (mAnchorAcc->IsDefunct())
    75     return CO_E_OBJNOTCONNECTED;
    77   mCurIndex = 0;
    78   mCurAcc = mAnchorAcc->GetChildAt(0);
    80   return S_OK;
    82   A11Y_TRYBLOCK_END
    83 }
    85 STDMETHODIMP
    86 ChildrenEnumVariant::Clone(IEnumVARIANT** aEnumVariant)
    87 {
    88   A11Y_TRYBLOCK_BEGIN
    90   if (!aEnumVariant)
    91     return E_INVALIDARG;
    93   *aEnumVariant = new ChildrenEnumVariant(*this);
    94   (*aEnumVariant)->AddRef();
    96   return S_OK;
    98   A11Y_TRYBLOCK_END
    99 }

mercurial