mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 1210407 - teach nsMaiInterfaceTable to use proxies, r=tbsaunde
This commit is contained in:
parent
efdb42747e
commit
5ccd441014
@ -14,6 +14,8 @@
|
||||
#include "OuterDocAccessible.h"
|
||||
#include "ProxyAccessible.h"
|
||||
#include "RootAccessible.h"
|
||||
#include "TableAccessible.h"
|
||||
#include "TableCellAccessible.h"
|
||||
#include "nsMai.h"
|
||||
#include "nsMaiHyperlink.h"
|
||||
#include "nsString.h"
|
||||
@ -1617,3 +1619,71 @@ AccessibleWrap::GetKeyBinding(Accessible* aAccessible, nsAString& aResult)
|
||||
}
|
||||
aResult = keyBindingsStr;
|
||||
}
|
||||
|
||||
// static
|
||||
Accessible*
|
||||
AccessibleWrap::GetColumnHeader(TableAccessible* aAccessible, int32_t aColIdx)
|
||||
{
|
||||
if (!aAccessible) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
Accessible* cell = aAccessible->CellAt(0, aColIdx);
|
||||
if (!cell) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
// If the cell at the first row is column header then assume it is column
|
||||
// header for all rows,
|
||||
if (cell->Role() == roles::COLUMNHEADER) {
|
||||
return cell;
|
||||
}
|
||||
|
||||
// otherwise get column header for the data cell at the first row.
|
||||
TableCellAccessible* tableCell = cell->AsTableCell();
|
||||
if (!tableCell) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
nsAutoTArray<Accessible*, 10> headerCells;
|
||||
tableCell->ColHeaderCells(&headerCells);
|
||||
if (headerCells.IsEmpty()) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
return headerCells[0];
|
||||
}
|
||||
|
||||
// static
|
||||
Accessible*
|
||||
AccessibleWrap::GetRowHeader(TableAccessible* aAccessible, int32_t aRowIdx)
|
||||
{
|
||||
if (!aAccessible) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
Accessible* cell = aAccessible->CellAt(aRowIdx, 0);
|
||||
if (!cell) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
// If the cell at the first column is row header then assume it is row
|
||||
// header for all columns,
|
||||
if (cell->Role() == roles::ROWHEADER) {
|
||||
return cell;
|
||||
}
|
||||
|
||||
// otherwise get row header for the data cell at the first column.
|
||||
TableCellAccessible* tableCell = cell->AsTableCell();
|
||||
if (!tableCell) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
nsAutoTArray<Accessible*, 10> headerCells;
|
||||
tableCell->RowHeaderCells(&headerCells);
|
||||
if (headerCells.IsEmpty()) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
return headerCells[0];
|
||||
}
|
||||
|
@ -70,6 +70,11 @@ public:
|
||||
}
|
||||
|
||||
static void GetKeyBinding(Accessible* aAccessible, nsAString& aResult);
|
||||
|
||||
static Accessible* GetColumnHeader(TableAccessible* aAccessible,
|
||||
int32_t aColIdx);
|
||||
static Accessible* GetRowHeader(TableAccessible* aAccessible,
|
||||
int32_t aRowIdx);
|
||||
protected:
|
||||
|
||||
nsresult FireAtkStateChangeEvent(AccEvent* aEvent, AtkObject *aObject);
|
||||
|
@ -12,7 +12,7 @@
|
||||
#include "TableAccessible.h"
|
||||
#include "TableCellAccessible.h"
|
||||
#include "nsMai.h"
|
||||
|
||||
#include "ProxyAccessible.h"
|
||||
#include "nsArrayUtils.h"
|
||||
|
||||
#include "mozilla/Likely.h"
|
||||
@ -23,17 +23,31 @@ extern "C" {
|
||||
static AtkObject*
|
||||
refAtCB(AtkTable* aTable, gint aRowIdx, gint aColIdx)
|
||||
{
|
||||
if (aRowIdx < 0 || aColIdx < 0) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
AtkObject* cellAtkObj = nullptr;
|
||||
AccessibleWrap* accWrap = GetAccessibleWrap(ATK_OBJECT(aTable));
|
||||
if (!accWrap || aRowIdx < 0 || aColIdx < 0)
|
||||
return nullptr;
|
||||
if (accWrap) {
|
||||
Accessible* cell = accWrap->AsTable()->CellAt(aRowIdx, aColIdx);
|
||||
if (!cell) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
Accessible* cell = accWrap->AsTable()->CellAt(aRowIdx, aColIdx);
|
||||
if (!cell)
|
||||
return nullptr;
|
||||
cellAtkObj = AccessibleWrap::GetAtkObject(cell);
|
||||
} else if (ProxyAccessible* proxy = GetProxy(ATK_OBJECT(aTable))) {
|
||||
ProxyAccessible* cell = proxy->TableCellAt(aRowIdx, aColIdx);
|
||||
if (!cell) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
AtkObject* cellAtkObj = AccessibleWrap::GetAtkObject(cell);
|
||||
if (cellAtkObj)
|
||||
cellAtkObj = GetWrapperFor(cell);
|
||||
}
|
||||
|
||||
if (cellAtkObj) {
|
||||
g_object_ref(cellAtkObj);
|
||||
}
|
||||
|
||||
return cellAtkObj;
|
||||
}
|
||||
@ -41,93 +55,153 @@ refAtCB(AtkTable* aTable, gint aRowIdx, gint aColIdx)
|
||||
static gint
|
||||
getIndexAtCB(AtkTable* aTable, gint aRowIdx, gint aColIdx)
|
||||
{
|
||||
AccessibleWrap* accWrap = GetAccessibleWrap(ATK_OBJECT(aTable));
|
||||
if (!accWrap || aRowIdx < 0 || aColIdx < 0)
|
||||
if (aRowIdx < 0 || aColIdx < 0) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
return static_cast<gint>(accWrap->AsTable()->CellIndexAt(aRowIdx, aColIdx));
|
||||
AccessibleWrap* accWrap = GetAccessibleWrap(ATK_OBJECT(aTable));
|
||||
if (accWrap) {
|
||||
return static_cast<gint>(accWrap->AsTable()->CellIndexAt(aRowIdx, aColIdx));
|
||||
}
|
||||
|
||||
if (ProxyAccessible* proxy = GetProxy(ATK_OBJECT(aTable))) {
|
||||
return static_cast<gint>(proxy->TableCellIndexAt(aRowIdx, aColIdx));
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
static gint
|
||||
getColumnAtIndexCB(AtkTable *aTable, gint aIdx)
|
||||
{
|
||||
AccessibleWrap* accWrap = GetAccessibleWrap(ATK_OBJECT(aTable));
|
||||
if (!accWrap || aIdx < 0)
|
||||
if (aIdx < 0) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
AccessibleWrap* accWrap = GetAccessibleWrap(ATK_OBJECT(aTable));
|
||||
if (accWrap) {
|
||||
return static_cast<gint>(accWrap->AsTable()->ColIndexAt(aIdx));
|
||||
}
|
||||
|
||||
if (ProxyAccessible* proxy = GetProxy(ATK_OBJECT(aTable))) {
|
||||
return static_cast<gint>(proxy->TableColumnIndexAt(aIdx));
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
static gint
|
||||
getRowAtIndexCB(AtkTable *aTable, gint aIdx)
|
||||
{
|
||||
AccessibleWrap* accWrap = GetAccessibleWrap(ATK_OBJECT(aTable));
|
||||
if (!accWrap || aIdx < 0)
|
||||
if (aIdx < 0) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
AccessibleWrap* accWrap = GetAccessibleWrap(ATK_OBJECT(aTable));
|
||||
if (accWrap) {
|
||||
return static_cast<gint>(accWrap->AsTable()->RowIndexAt(aIdx));
|
||||
}
|
||||
|
||||
if (ProxyAccessible* proxy = GetProxy(ATK_OBJECT(aTable))) {
|
||||
return static_cast<gint>(proxy->TableRowIndexAt(aIdx));
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
static gint
|
||||
getColumnCountCB(AtkTable *aTable)
|
||||
{
|
||||
AccessibleWrap* accWrap = GetAccessibleWrap(ATK_OBJECT(aTable));
|
||||
if (!accWrap)
|
||||
return -1;
|
||||
|
||||
if (accWrap) {
|
||||
return static_cast<gint>(accWrap->AsTable()->ColCount());
|
||||
}
|
||||
|
||||
if (ProxyAccessible* proxy = GetProxy(ATK_OBJECT(aTable))) {
|
||||
return static_cast<gint>(proxy->TableColumnCount());
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
static gint
|
||||
getRowCountCB(AtkTable *aTable)
|
||||
{
|
||||
AccessibleWrap* accWrap = GetAccessibleWrap(ATK_OBJECT(aTable));
|
||||
if (!accWrap)
|
||||
return -1;
|
||||
|
||||
if (accWrap) {
|
||||
return static_cast<gint>(accWrap->AsTable()->RowCount());
|
||||
}
|
||||
|
||||
if (ProxyAccessible* proxy = GetProxy(ATK_OBJECT(aTable))) {
|
||||
return static_cast<gint>(proxy->TableRowCount());
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
static gint
|
||||
getColumnExtentAtCB(AtkTable *aTable, gint aRowIdx, gint aColIdx)
|
||||
{
|
||||
AccessibleWrap* accWrap = GetAccessibleWrap(ATK_OBJECT(aTable));
|
||||
if (!accWrap || aRowIdx < 0 || aColIdx < 0)
|
||||
if (aRowIdx < 0 || aColIdx < 0) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
AccessibleWrap* accWrap = GetAccessibleWrap(ATK_OBJECT(aTable));
|
||||
if (accWrap) {
|
||||
return static_cast<gint>(accWrap->AsTable()->ColExtentAt(aRowIdx, aColIdx));
|
||||
}
|
||||
|
||||
if (ProxyAccessible* proxy = GetProxy(ATK_OBJECT(aTable))) {
|
||||
return static_cast<gint>(proxy->TableColumnExtentAt(aRowIdx, aColIdx));
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
static gint
|
||||
getRowExtentAtCB(AtkTable *aTable, gint aRowIdx, gint aColIdx)
|
||||
{
|
||||
AccessibleWrap* accWrap = GetAccessibleWrap(ATK_OBJECT(aTable));
|
||||
if (!accWrap)
|
||||
return -1;
|
||||
if (accWrap) {
|
||||
return static_cast<gint>(accWrap->AsTable()->RowExtentAt(aRowIdx, aColIdx));
|
||||
}
|
||||
|
||||
return static_cast<gint>(accWrap->AsTable()->RowExtentAt(aRowIdx, aColIdx));
|
||||
if (ProxyAccessible* proxy = GetProxy(ATK_OBJECT(aTable))) {
|
||||
return static_cast<gint>(proxy->TableRowExtentAt(aRowIdx, aColIdx));
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
static AtkObject*
|
||||
getCaptionCB(AtkTable* aTable)
|
||||
{
|
||||
AccessibleWrap* accWrap = GetAccessibleWrap(ATK_OBJECT(aTable));
|
||||
if (!accWrap)
|
||||
return nullptr;
|
||||
if (accWrap) {
|
||||
Accessible* caption = accWrap->AsTable()->Caption();
|
||||
return caption ? AccessibleWrap::GetAtkObject(caption) : nullptr;
|
||||
}
|
||||
|
||||
Accessible* caption = accWrap->AsTable()->Caption();
|
||||
return caption ? AccessibleWrap::GetAtkObject(caption) : nullptr;
|
||||
if (ProxyAccessible* proxy = GetProxy(ATK_OBJECT(aTable))) {
|
||||
ProxyAccessible* caption = proxy->TableCaption();
|
||||
return caption ? GetWrapperFor(caption) : nullptr;
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
static const gchar*
|
||||
getColumnDescriptionCB(AtkTable *aTable, gint aColumn)
|
||||
{
|
||||
AccessibleWrap* accWrap = GetAccessibleWrap(ATK_OBJECT(aTable));
|
||||
if (!accWrap)
|
||||
return nullptr;
|
||||
|
||||
nsAutoString autoStr;
|
||||
accWrap->AsTable()->ColDescription(aColumn, autoStr);
|
||||
AccessibleWrap* accWrap = GetAccessibleWrap(ATK_OBJECT(aTable));
|
||||
if (accWrap) {
|
||||
accWrap->AsTable()->ColDescription(aColumn, autoStr);
|
||||
} else if (ProxyAccessible* proxy = GetProxy(ATK_OBJECT(aTable))) {
|
||||
proxy->TableColumnDescription(aColumn, autoStr);
|
||||
} else {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
return AccessibleWrap::ReturnString(autoStr);
|
||||
}
|
||||
@ -136,40 +210,32 @@ static AtkObject*
|
||||
getColumnHeaderCB(AtkTable *aTable, gint aColIdx)
|
||||
{
|
||||
AccessibleWrap* accWrap = GetAccessibleWrap(ATK_OBJECT(aTable));
|
||||
if (!accWrap)
|
||||
return nullptr;
|
||||
if (accWrap) {
|
||||
Accessible* header =
|
||||
AccessibleWrap::GetColumnHeader(accWrap->AsTable(), aColIdx);
|
||||
return header ? AccessibleWrap::GetAtkObject(header) : nullptr;
|
||||
}
|
||||
|
||||
Accessible* cell = accWrap->AsTable()->CellAt(0, aColIdx);
|
||||
if (!cell)
|
||||
return nullptr;
|
||||
if (ProxyAccessible* proxy = GetProxy(ATK_OBJECT(aTable))) {
|
||||
ProxyAccessible* header = proxy->AtkTableColumnHeader(aColIdx);
|
||||
return header ? GetWrapperFor(header) : nullptr;
|
||||
}
|
||||
|
||||
// If the cell at the first row is column header then assume it is column
|
||||
// header for all rows,
|
||||
if (cell->Role() == roles::COLUMNHEADER)
|
||||
return AccessibleWrap::GetAtkObject(cell);
|
||||
|
||||
// otherwise get column header for the data cell at the first row.
|
||||
TableCellAccessible* tableCell = cell->AsTableCell();
|
||||
if (!tableCell)
|
||||
return nullptr;
|
||||
|
||||
nsAutoTArray<Accessible*, 10> headerCells;
|
||||
tableCell->ColHeaderCells(&headerCells);
|
||||
if (headerCells.IsEmpty())
|
||||
return nullptr;
|
||||
|
||||
return AccessibleWrap::GetAtkObject(headerCells[0]);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
static const gchar*
|
||||
getRowDescriptionCB(AtkTable *aTable, gint aRow)
|
||||
{
|
||||
AccessibleWrap* accWrap = GetAccessibleWrap(ATK_OBJECT(aTable));
|
||||
if (!accWrap)
|
||||
return nullptr;
|
||||
|
||||
nsAutoString autoStr;
|
||||
accWrap->AsTable()->RowDescription(aRow, autoStr);
|
||||
AccessibleWrap* accWrap = GetAccessibleWrap(ATK_OBJECT(aTable));
|
||||
if (accWrap) {
|
||||
accWrap->AsTable()->RowDescription(aRow, autoStr);
|
||||
} else if (ProxyAccessible* proxy = GetProxy(ATK_OBJECT(aTable))) {
|
||||
proxy->TableRowDescription(aRow, autoStr);
|
||||
} else {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
return AccessibleWrap::ReturnString(autoStr);
|
||||
}
|
||||
@ -178,29 +244,18 @@ static AtkObject*
|
||||
getRowHeaderCB(AtkTable *aTable, gint aRowIdx)
|
||||
{
|
||||
AccessibleWrap* accWrap = GetAccessibleWrap(ATK_OBJECT(aTable));
|
||||
if (!accWrap)
|
||||
return nullptr;
|
||||
if (accWrap) {
|
||||
Accessible* header =
|
||||
AccessibleWrap::GetRowHeader(accWrap->AsTable(), aRowIdx);
|
||||
return header ? AccessibleWrap::GetAtkObject(header) : nullptr;
|
||||
}
|
||||
|
||||
Accessible* cell = accWrap->AsTable()->CellAt(aRowIdx, 0);
|
||||
if (!cell)
|
||||
return nullptr;
|
||||
if (ProxyAccessible* proxy = GetProxy(ATK_OBJECT(aTable))) {
|
||||
ProxyAccessible* header = proxy->AtkTableRowHeader(aRowIdx);
|
||||
return header ? GetWrapperFor(header) : nullptr;
|
||||
}
|
||||
|
||||
// If the cell at the first column is row header then assume it is row
|
||||
// header for all columns,
|
||||
if (cell->Role() == roles::ROWHEADER)
|
||||
return AccessibleWrap::GetAtkObject(cell);
|
||||
|
||||
// otherwise get row header for the data cell at the first column.
|
||||
TableCellAccessible* tableCell = cell->AsTableCell();
|
||||
if (!tableCell)
|
||||
return nullptr;
|
||||
|
||||
nsAutoTArray<Accessible*, 10> headerCells;
|
||||
tableCell->RowHeaderCells(&headerCells);
|
||||
if (headerCells.IsEmpty())
|
||||
return nullptr;
|
||||
|
||||
return AccessibleWrap::GetAtkObject(headerCells[0]);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
static AtkObject*
|
||||
@ -218,12 +273,16 @@ getSelectedColumnsCB(AtkTable *aTable, gint** aSelected)
|
||||
{
|
||||
*aSelected = nullptr;
|
||||
|
||||
AccessibleWrap* accWrap = GetAccessibleWrap(ATK_OBJECT(aTable));
|
||||
if (!accWrap)
|
||||
return 0;
|
||||
|
||||
nsAutoTArray<uint32_t, 10> cols;
|
||||
accWrap->AsTable()->SelectedColIndices(&cols);
|
||||
AccessibleWrap* accWrap = GetAccessibleWrap(ATK_OBJECT(aTable));
|
||||
if (accWrap) {
|
||||
accWrap->AsTable()->SelectedColIndices(&cols);
|
||||
} else if (ProxyAccessible* proxy = GetProxy(ATK_OBJECT(aTable))) {
|
||||
proxy->TableSelectedColumnIndices(&cols);
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (cols.IsEmpty())
|
||||
return 0;
|
||||
|
||||
@ -241,12 +300,15 @@ getSelectedColumnsCB(AtkTable *aTable, gint** aSelected)
|
||||
static gint
|
||||
getSelectedRowsCB(AtkTable *aTable, gint **aSelected)
|
||||
{
|
||||
AccessibleWrap* accWrap = GetAccessibleWrap(ATK_OBJECT(aTable));
|
||||
if (!accWrap)
|
||||
return 0;
|
||||
|
||||
nsAutoTArray<uint32_t, 10> rows;
|
||||
accWrap->AsTable()->SelectedRowIndices(&rows);
|
||||
AccessibleWrap* accWrap = GetAccessibleWrap(ATK_OBJECT(aTable));
|
||||
if (accWrap) {
|
||||
accWrap->AsTable()->SelectedRowIndices(&rows);
|
||||
} else if (ProxyAccessible* proxy = GetProxy(ATK_OBJECT(aTable))) {
|
||||
proxy->TableSelectedRowIndices(&rows);
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
|
||||
gint* atkRows = g_new(gint, rows.Length());
|
||||
if (!atkRows) {
|
||||
@ -263,31 +325,40 @@ static gboolean
|
||||
isColumnSelectedCB(AtkTable *aTable, gint aColIdx)
|
||||
{
|
||||
AccessibleWrap* accWrap = GetAccessibleWrap(ATK_OBJECT(aTable));
|
||||
if (!accWrap)
|
||||
return FALSE;
|
||||
if (accWrap) {
|
||||
return static_cast<gboolean>(accWrap->AsTable()->IsColSelected(aColIdx));
|
||||
} else if (ProxyAccessible* proxy = GetProxy(ATK_OBJECT(aTable))) {
|
||||
return static_cast<gboolean>(proxy->TableColumnSelected(aColIdx));
|
||||
}
|
||||
|
||||
return static_cast<gboolean>(accWrap->AsTable()->IsColSelected(aColIdx));
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
isRowSelectedCB(AtkTable *aTable, gint aRowIdx)
|
||||
{
|
||||
AccessibleWrap* accWrap = GetAccessibleWrap(ATK_OBJECT(aTable));
|
||||
if (!accWrap)
|
||||
return FALSE;
|
||||
if (accWrap) {
|
||||
return static_cast<gboolean>(accWrap->AsTable()->IsRowSelected(aRowIdx));
|
||||
} else if (ProxyAccessible* proxy = GetProxy(ATK_OBJECT(aTable))) {
|
||||
return static_cast<gboolean>(proxy->TableRowSelected(aRowIdx));
|
||||
}
|
||||
|
||||
return static_cast<gboolean>(accWrap->AsTable()->IsRowSelected(aRowIdx));
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
isCellSelectedCB(AtkTable *aTable, gint aRowIdx, gint aColIdx)
|
||||
{
|
||||
AccessibleWrap* accWrap = GetAccessibleWrap(ATK_OBJECT(aTable));
|
||||
if (!accWrap)
|
||||
return FALSE;
|
||||
|
||||
if (accWrap) {
|
||||
return static_cast<gboolean>(accWrap->AsTable()->
|
||||
IsCellSelected(aRowIdx, aColIdx));
|
||||
} else if (ProxyAccessible* proxy = GetProxy(ATK_OBJECT(aTable))) {
|
||||
return static_cast<gboolean>(proxy->TableCellSelected(aRowIdx, aColIdx));
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1452,6 +1452,52 @@ DocAccessibleChild::RecvTableIsProbablyForLayout(const uint64_t& aID,
|
||||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
DocAccessibleChild::RecvAtkTableColumnHeader(const uint64_t& aID,
|
||||
const int32_t& aCol,
|
||||
uint64_t* aHeader,
|
||||
bool* aOk)
|
||||
{
|
||||
*aHeader = 0;
|
||||
*aOk = false;
|
||||
|
||||
#ifdef MOZ_ACCESSIBILITY_ATK
|
||||
TableAccessible* acc = IdToTableAccessible(aID);
|
||||
if (acc) {
|
||||
Accessible* header = AccessibleWrap::GetColumnHeader(acc, aCol);
|
||||
if (header) {
|
||||
*aHeader = reinterpret_cast<uint64_t>(header->UniqueID());
|
||||
*aOk = true;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
DocAccessibleChild::RecvAtkTableRowHeader(const uint64_t& aID,
|
||||
const int32_t& aRow,
|
||||
uint64_t* aHeader,
|
||||
bool* aOk)
|
||||
{
|
||||
*aHeader = 0;
|
||||
*aOk = false;
|
||||
|
||||
#ifdef MOZ_ACCESSIBILITY_ATK
|
||||
TableAccessible* acc = IdToTableAccessible(aID);
|
||||
if (acc) {
|
||||
Accessible* header = AccessibleWrap::GetRowHeader(acc, aRow);
|
||||
if (header) {
|
||||
*aHeader = reinterpret_cast<uint64_t>(header->UniqueID());
|
||||
*aOk = true;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
DocAccessibleChild::RecvSelectedItems(const uint64_t& aID,
|
||||
nsTArray<uint64_t>* aSelectedItemIDs)
|
||||
|
@ -363,6 +363,14 @@ public:
|
||||
const uint32_t& aRow) override;
|
||||
virtual bool RecvTableIsProbablyForLayout(const uint64_t& aID,
|
||||
bool* aForLayout) override;
|
||||
virtual bool RecvAtkTableColumnHeader(const uint64_t& aID,
|
||||
const int32_t& aCol,
|
||||
uint64_t* aHeader,
|
||||
bool* aOk) override;
|
||||
virtual bool RecvAtkTableRowHeader(const uint64_t& aID,
|
||||
const int32_t& aRow,
|
||||
uint64_t* aHeader,
|
||||
bool* aOk) override;
|
||||
|
||||
virtual bool RecvSelectedItems(const uint64_t& aID,
|
||||
nsTArray<uint64_t>* aSelectedItemIDs) override;
|
||||
|
@ -202,6 +202,10 @@ child:
|
||||
prio(high) sync TableUnselectColumn(uint64_t aID, uint32_t aCol);
|
||||
prio(high) sync TableUnselectRow(uint64_t aID, uint32_t aRow);
|
||||
prio(high) sync TableIsProbablyForLayout(uint64_t aID) returns(bool aForLayout);
|
||||
prio(high) sync AtkTableColumnHeader(uint64_t aID, int32_t aCol)
|
||||
returns(uint64_t aHeaderID, bool aOk);
|
||||
prio(high) sync AtkTableRowHeader(uint64_t aID, int32_t aRow)
|
||||
returns(uint64_t aHeaderID, bool aOk);
|
||||
|
||||
prio(high) sync SelectedItems(uint64_t aID) returns(uint64_t[] aSelectedItemIDs);
|
||||
prio(high) sync SelectedItemCount(uint64_t aID) returns(uint32_t aCount);
|
||||
|
@ -820,6 +820,24 @@ ProxyAccessible::TableIsProbablyForLayout()
|
||||
return forLayout;
|
||||
}
|
||||
|
||||
ProxyAccessible*
|
||||
ProxyAccessible::AtkTableColumnHeader(int32_t aCol)
|
||||
{
|
||||
uint64_t headerID = 0;
|
||||
bool ok = false;
|
||||
unused << mDoc->SendAtkTableColumnHeader(mID, aCol, &headerID, &ok);
|
||||
return ok ? mDoc->GetAccessible(headerID) : nullptr;
|
||||
}
|
||||
|
||||
ProxyAccessible*
|
||||
ProxyAccessible::AtkTableRowHeader(int32_t aRow)
|
||||
{
|
||||
uint64_t headerID = 0;
|
||||
bool ok = false;
|
||||
unused << mDoc->SendAtkTableRowHeader(mID, aRow, &headerID, &ok);
|
||||
return ok ? mDoc->GetAccessible(headerID) : nullptr;
|
||||
}
|
||||
|
||||
void
|
||||
ProxyAccessible::SelectedItems(nsTArray<ProxyAccessible*>* aSelectedItems)
|
||||
{
|
||||
|
@ -297,6 +297,8 @@ public:
|
||||
void TableUnselectColumn(uint32_t aCol);
|
||||
void TableUnselectRow(uint32_t aRow);
|
||||
bool TableIsProbablyForLayout();
|
||||
ProxyAccessible* AtkTableColumnHeader(int32_t aCol);
|
||||
ProxyAccessible* AtkTableRowHeader(int32_t aRow);
|
||||
|
||||
void SelectedItems(nsTArray<ProxyAccessible*>* aSelectedItems);
|
||||
uint32_t SelectedItemCount();
|
||||
|
Loading…
Reference in New Issue
Block a user