зеркало из https://github.com/mozilla/gecko-dev.git
Bug 571501 - don't query accessible events internally, r=davidb, sr=neil
This commit is contained in:
Родитель
159299441a
Коммит
ea259c048f
|
@ -1177,13 +1177,12 @@ nsAccessibleWrap::FirePlatformEvent(nsAccEvent *aEvent)
|
||||||
{
|
{
|
||||||
MAI_LOG_DEBUG(("\n\nReceived: EVENT_TEXT_CARET_MOVED\n"));
|
MAI_LOG_DEBUG(("\n\nReceived: EVENT_TEXT_CARET_MOVED\n"));
|
||||||
|
|
||||||
nsCOMPtr<nsIAccessibleCaretMoveEvent> caretMoveEvent(do_QueryInterface(aEvent));
|
nsAccCaretMoveEvent *caretMoveEvent = downcast_accEvent(aEvent);
|
||||||
NS_ASSERTION(caretMoveEvent, "Event needs event data");
|
NS_ASSERTION(caretMoveEvent, "Event needs event data");
|
||||||
if (!caretMoveEvent)
|
if (!caretMoveEvent)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
PRInt32 caretOffset = -1;
|
PRInt32 caretOffset = caretMoveEvent->GetCaretOffset();
|
||||||
caretMoveEvent->GetCaretOffset(&caretOffset);
|
|
||||||
|
|
||||||
MAI_LOG_DEBUG(("\n\nCaret postion: %d", caretOffset));
|
MAI_LOG_DEBUG(("\n\nCaret postion: %d", caretOffset));
|
||||||
g_signal_emit_by_name(atkObj,
|
g_signal_emit_by_name(atkObj,
|
||||||
|
@ -1207,12 +1206,11 @@ nsAccessibleWrap::FirePlatformEvent(nsAccEvent *aEvent)
|
||||||
case nsIAccessibleEvent::EVENT_TABLE_ROW_INSERT:
|
case nsIAccessibleEvent::EVENT_TABLE_ROW_INSERT:
|
||||||
{
|
{
|
||||||
MAI_LOG_DEBUG(("\n\nReceived: EVENT_TABLE_ROW_INSERT\n"));
|
MAI_LOG_DEBUG(("\n\nReceived: EVENT_TABLE_ROW_INSERT\n"));
|
||||||
nsCOMPtr<nsIAccessibleTableChangeEvent> tableEvent = do_QueryInterface(aEvent);
|
nsAccTableChangeEvent *tableEvent = downcast_accEvent(aEvent);
|
||||||
NS_ENSURE_TRUE(tableEvent, NS_ERROR_FAILURE);
|
NS_ENSURE_TRUE(tableEvent, NS_ERROR_FAILURE);
|
||||||
|
|
||||||
PRInt32 rowIndex, numRows;
|
PRInt32 rowIndex = tableEvent->GetIndex();
|
||||||
tableEvent->GetRowOrColIndex(&rowIndex);
|
PRInt32 numRows = tableEvent->GetCount();
|
||||||
tableEvent->GetNumRowsOrCols(&numRows);
|
|
||||||
|
|
||||||
g_signal_emit_by_name(atkObj,
|
g_signal_emit_by_name(atkObj,
|
||||||
"row_inserted",
|
"row_inserted",
|
||||||
|
@ -1225,12 +1223,11 @@ nsAccessibleWrap::FirePlatformEvent(nsAccEvent *aEvent)
|
||||||
case nsIAccessibleEvent::EVENT_TABLE_ROW_DELETE:
|
case nsIAccessibleEvent::EVENT_TABLE_ROW_DELETE:
|
||||||
{
|
{
|
||||||
MAI_LOG_DEBUG(("\n\nReceived: EVENT_TABLE_ROW_DELETE\n"));
|
MAI_LOG_DEBUG(("\n\nReceived: EVENT_TABLE_ROW_DELETE\n"));
|
||||||
nsCOMPtr<nsIAccessibleTableChangeEvent> tableEvent = do_QueryInterface(aEvent);
|
nsAccTableChangeEvent *tableEvent = downcast_accEvent(aEvent);
|
||||||
NS_ENSURE_TRUE(tableEvent, NS_ERROR_FAILURE);
|
NS_ENSURE_TRUE(tableEvent, NS_ERROR_FAILURE);
|
||||||
|
|
||||||
PRInt32 rowIndex, numRows;
|
PRInt32 rowIndex = tableEvent->GetIndex();
|
||||||
tableEvent->GetRowOrColIndex(&rowIndex);
|
PRInt32 numRows = tableEvent->GetCount();
|
||||||
tableEvent->GetNumRowsOrCols(&numRows);
|
|
||||||
|
|
||||||
g_signal_emit_by_name(atkObj,
|
g_signal_emit_by_name(atkObj,
|
||||||
"row_deleted",
|
"row_deleted",
|
||||||
|
@ -1250,12 +1247,11 @@ nsAccessibleWrap::FirePlatformEvent(nsAccEvent *aEvent)
|
||||||
case nsIAccessibleEvent::EVENT_TABLE_COLUMN_INSERT:
|
case nsIAccessibleEvent::EVENT_TABLE_COLUMN_INSERT:
|
||||||
{
|
{
|
||||||
MAI_LOG_DEBUG(("\n\nReceived: EVENT_TABLE_COLUMN_INSERT\n"));
|
MAI_LOG_DEBUG(("\n\nReceived: EVENT_TABLE_COLUMN_INSERT\n"));
|
||||||
nsCOMPtr<nsIAccessibleTableChangeEvent> tableEvent = do_QueryInterface(aEvent);
|
nsAccTableChangeEvent *tableEvent = downcast_accEvent(aEvent);
|
||||||
NS_ENSURE_TRUE(tableEvent, NS_ERROR_FAILURE);
|
NS_ENSURE_TRUE(tableEvent, NS_ERROR_FAILURE);
|
||||||
|
|
||||||
PRInt32 colIndex, numCols;
|
PRInt32 colIndex = tableEvent->GetIndex();
|
||||||
tableEvent->GetRowOrColIndex(&colIndex);
|
PRInt32 numCols = tableEvent->GetCount();
|
||||||
tableEvent->GetNumRowsOrCols(&numCols);
|
|
||||||
|
|
||||||
g_signal_emit_by_name(atkObj,
|
g_signal_emit_by_name(atkObj,
|
||||||
"column_inserted",
|
"column_inserted",
|
||||||
|
@ -1268,12 +1264,11 @@ nsAccessibleWrap::FirePlatformEvent(nsAccEvent *aEvent)
|
||||||
case nsIAccessibleEvent::EVENT_TABLE_COLUMN_DELETE:
|
case nsIAccessibleEvent::EVENT_TABLE_COLUMN_DELETE:
|
||||||
{
|
{
|
||||||
MAI_LOG_DEBUG(("\n\nReceived: EVENT_TABLE_COLUMN_DELETE\n"));
|
MAI_LOG_DEBUG(("\n\nReceived: EVENT_TABLE_COLUMN_DELETE\n"));
|
||||||
nsCOMPtr<nsIAccessibleTableChangeEvent> tableEvent = do_QueryInterface(aEvent);
|
nsAccTableChangeEvent *tableEvent = downcast_accEvent(aEvent);
|
||||||
NS_ENSURE_TRUE(tableEvent, NS_ERROR_FAILURE);
|
NS_ENSURE_TRUE(tableEvent, NS_ERROR_FAILURE);
|
||||||
|
|
||||||
PRInt32 colIndex, numCols;
|
PRInt32 colIndex = tableEvent->GetIndex();
|
||||||
tableEvent->GetRowOrColIndex(&colIndex);
|
PRInt32 numCols = tableEvent->GetCount();
|
||||||
tableEvent->GetNumRowsOrCols(&numCols);
|
|
||||||
|
|
||||||
g_signal_emit_by_name(atkObj,
|
g_signal_emit_by_name(atkObj,
|
||||||
"column_deleted",
|
"column_deleted",
|
||||||
|
@ -1377,18 +1372,12 @@ nsAccessibleWrap::FireAtkStateChangeEvent(nsAccEvent *aEvent,
|
||||||
{
|
{
|
||||||
MAI_LOG_DEBUG(("\n\nReceived: EVENT_STATE_CHANGE\n"));
|
MAI_LOG_DEBUG(("\n\nReceived: EVENT_STATE_CHANGE\n"));
|
||||||
|
|
||||||
nsCOMPtr<nsIAccessibleStateChangeEvent> event =
|
nsAccStateChangeEvent *event = downcast_accEvent(aEvent);
|
||||||
do_QueryInterface(aEvent);
|
|
||||||
NS_ENSURE_TRUE(event, NS_ERROR_FAILURE);
|
NS_ENSURE_TRUE(event, NS_ERROR_FAILURE);
|
||||||
|
|
||||||
PRUint32 state = 0;
|
PRUint32 state = event->GetState();
|
||||||
event->GetState(&state);
|
PRBool isExtra = event->IsExtraState();
|
||||||
|
PRBool isEnabled = event->IsStateEnabled();
|
||||||
PRBool isExtra;
|
|
||||||
event->IsExtraState(&isExtra);
|
|
||||||
|
|
||||||
PRBool isEnabled;
|
|
||||||
event->IsEnabled(&isEnabled);
|
|
||||||
|
|
||||||
PRInt32 stateIndex = AtkStateMap::GetStateIndexFor(state);
|
PRInt32 stateIndex = AtkStateMap::GetStateIndexFor(state);
|
||||||
if (stateIndex >= 0) {
|
if (stateIndex >= 0) {
|
||||||
|
@ -1419,18 +1408,12 @@ nsAccessibleWrap::FireAtkTextChangedEvent(nsAccEvent *aEvent,
|
||||||
{
|
{
|
||||||
MAI_LOG_DEBUG(("\n\nReceived: EVENT_TEXT_REMOVED/INSERTED\n"));
|
MAI_LOG_DEBUG(("\n\nReceived: EVENT_TEXT_REMOVED/INSERTED\n"));
|
||||||
|
|
||||||
nsCOMPtr<nsIAccessibleTextChangeEvent> event =
|
nsAccTextChangeEvent *event = downcast_accEvent(aEvent);
|
||||||
do_QueryInterface(aEvent);
|
|
||||||
NS_ENSURE_TRUE(event, NS_ERROR_FAILURE);
|
NS_ENSURE_TRUE(event, NS_ERROR_FAILURE);
|
||||||
|
|
||||||
PRInt32 start = 0;
|
PRInt32 start = event->GetStartOffset();
|
||||||
event->GetStart(&start);
|
PRUint32 length = event->GetLength();
|
||||||
|
PRBool isInserted = event->IsTextInserted();
|
||||||
PRUint32 length = 0;
|
|
||||||
event->GetLength(&length);
|
|
||||||
|
|
||||||
PRBool isInserted;
|
|
||||||
event->IsInserted(&isInserted);
|
|
||||||
|
|
||||||
PRBool isFromUserInput = aEvent->IsFromUserInput();
|
PRBool isFromUserInput = aEvent->IsFromUserInput();
|
||||||
|
|
||||||
|
|
|
@ -382,14 +382,10 @@ private:
|
||||||
} else if (type == nsIAccessibleEvent::EVENT_DOCUMENT_RELOAD) { \
|
} else if (type == nsIAccessibleEvent::EVENT_DOCUMENT_RELOAD) { \
|
||||||
strEventType.AssignLiteral("reload"); \
|
strEventType.AssignLiteral("reload"); \
|
||||||
} else if (type == nsIAccessibleEvent::EVENT_STATE_CHANGE) { \
|
} else if (type == nsIAccessibleEvent::EVENT_STATE_CHANGE) { \
|
||||||
nsCOMPtr<nsIAccessibleStateChangeEvent> event(do_QueryObject(aEvent)); \
|
nsAccStateChangeEvent *event = downcast_accEvent(aEvent); \
|
||||||
PRUint32 state = 0; \
|
if (event->GetState() == nsIAccessibleStates::STATE_BUSY) { \
|
||||||
event->GetState(&state); \
|
|
||||||
if (state == nsIAccessibleStates::STATE_BUSY) { \
|
|
||||||
PRBool isEnabled; \
|
|
||||||
event->IsEnabled(&isEnabled); \
|
|
||||||
strEventType.AssignLiteral("busy "); \
|
strEventType.AssignLiteral("busy "); \
|
||||||
if (isEnabled) \
|
if (event->IsStateEnabled()) \
|
||||||
strEventType.AppendLiteral("true"); \
|
strEventType.AppendLiteral("true"); \
|
||||||
else \
|
else \
|
||||||
strEventType.AppendLiteral("false"); \
|
strEventType.AppendLiteral("false"); \
|
||||||
|
|
|
@ -72,7 +72,6 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
|
||||||
|
|
||||||
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsAccEvent)
|
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsAccEvent)
|
||||||
NS_INTERFACE_MAP_ENTRY(nsIAccessibleEvent)
|
NS_INTERFACE_MAP_ENTRY(nsIAccessibleEvent)
|
||||||
NS_INTERFACE_MAP_ENTRY(nsAccEvent)
|
|
||||||
NS_INTERFACE_MAP_ENTRY(nsISupports)
|
NS_INTERFACE_MAP_ENTRY(nsISupports)
|
||||||
NS_INTERFACE_MAP_END
|
NS_INTERFACE_MAP_END
|
||||||
|
|
||||||
|
@ -273,8 +272,7 @@ nsAccEvent::CaptureIsFromUserInput(EIsFromUserInput aIsFromUserInput)
|
||||||
// nsAccReorderEvent
|
// nsAccReorderEvent
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
NS_IMPL_ISUPPORTS_INHERITED1(nsAccReorderEvent, nsAccEvent,
|
NS_IMPL_ISUPPORTS_INHERITED0(nsAccReorderEvent, nsAccEvent)
|
||||||
nsAccReorderEvent)
|
|
||||||
|
|
||||||
nsAccReorderEvent::nsAccReorderEvent(nsAccessible *aAccTarget,
|
nsAccReorderEvent::nsAccReorderEvent(nsAccessible *aAccTarget,
|
||||||
PRBool aIsAsynch,
|
PRBool aIsAsynch,
|
||||||
|
@ -352,6 +350,7 @@ nsAccStateChangeEvent::
|
||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
nsAccStateChangeEvent::GetState(PRUint32 *aState)
|
nsAccStateChangeEvent::GetState(PRUint32 *aState)
|
||||||
{
|
{
|
||||||
|
NS_ENSURE_ARG_POINTER(aState);
|
||||||
*aState = mState;
|
*aState = mState;
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
@ -359,6 +358,7 @@ nsAccStateChangeEvent::GetState(PRUint32 *aState)
|
||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
nsAccStateChangeEvent::IsExtraState(PRBool *aIsExtraState)
|
nsAccStateChangeEvent::IsExtraState(PRBool *aIsExtraState)
|
||||||
{
|
{
|
||||||
|
NS_ENSURE_ARG_POINTER(aIsExtraState);
|
||||||
*aIsExtraState = mIsExtraState;
|
*aIsExtraState = mIsExtraState;
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
@ -366,6 +366,7 @@ nsAccStateChangeEvent::IsExtraState(PRBool *aIsExtraState)
|
||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
nsAccStateChangeEvent::IsEnabled(PRBool *aIsEnabled)
|
nsAccStateChangeEvent::IsEnabled(PRBool *aIsEnabled)
|
||||||
{
|
{
|
||||||
|
NS_ENSURE_ARG_POINTER(aIsEnabled);
|
||||||
*aIsEnabled = mIsEnabled;
|
*aIsEnabled = mIsEnabled;
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
@ -400,6 +401,7 @@ nsAccTextChangeEvent::
|
||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
nsAccTextChangeEvent::GetStart(PRInt32 *aStart)
|
nsAccTextChangeEvent::GetStart(PRInt32 *aStart)
|
||||||
{
|
{
|
||||||
|
NS_ENSURE_ARG_POINTER(aStart);
|
||||||
*aStart = mStart;
|
*aStart = mStart;
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
@ -407,6 +409,7 @@ nsAccTextChangeEvent::GetStart(PRInt32 *aStart)
|
||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
nsAccTextChangeEvent::GetLength(PRUint32 *aLength)
|
nsAccTextChangeEvent::GetLength(PRUint32 *aLength)
|
||||||
{
|
{
|
||||||
|
NS_ENSURE_ARG_POINTER(aLength);
|
||||||
*aLength = mLength;
|
*aLength = mLength;
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
@ -414,6 +417,7 @@ nsAccTextChangeEvent::GetLength(PRUint32 *aLength)
|
||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
nsAccTextChangeEvent::IsInserted(PRBool *aIsInserted)
|
nsAccTextChangeEvent::IsInserted(PRBool *aIsInserted)
|
||||||
{
|
{
|
||||||
|
NS_ENSURE_ARG_POINTER(aIsInserted);
|
||||||
*aIsInserted = mIsInserted;
|
*aIsInserted = mIsInserted;
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
|
@ -58,14 +58,9 @@ enum EIsFromUserInput
|
||||||
eAutoDetect = -1
|
eAutoDetect = -1
|
||||||
};
|
};
|
||||||
|
|
||||||
#define NS_ACCEVENT_IMPL_CID \
|
/**
|
||||||
{ /* 39bde096-317e-4294-b23b-4af4a9b283f7 */ \
|
* Generic accessible event.
|
||||||
0x39bde096, \
|
*/
|
||||||
0x317e, \
|
|
||||||
0x4294, \
|
|
||||||
{ 0xb2, 0x3b, 0x4a, 0xf4, 0xa9, 0xb2, 0x83, 0xf7 } \
|
|
||||||
}
|
|
||||||
|
|
||||||
class nsAccEvent: public nsIAccessibleEvent
|
class nsAccEvent: public nsIAccessibleEvent
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -94,8 +89,6 @@ public:
|
||||||
eDoNotEmit
|
eDoNotEmit
|
||||||
};
|
};
|
||||||
|
|
||||||
NS_DECLARE_STATIC_IID_ACCESSOR(NS_ACCEVENT_IMPL_CID)
|
|
||||||
|
|
||||||
// Initialize with an nsIAccessible
|
// Initialize with an nsIAccessible
|
||||||
nsAccEvent(PRUint32 aEventType, nsAccessible *aAccessible,
|
nsAccEvent(PRUint32 aEventType, nsAccessible *aAccessible,
|
||||||
PRBool aIsAsynch = PR_FALSE,
|
PRBool aIsAsynch = PR_FALSE,
|
||||||
|
@ -122,6 +115,21 @@ public:
|
||||||
nsINode* GetNode();
|
nsINode* GetNode();
|
||||||
nsDocAccessible* GetDocAccessible();
|
nsDocAccessible* GetDocAccessible();
|
||||||
|
|
||||||
|
enum EventGroup {
|
||||||
|
eGenericEvent,
|
||||||
|
eReorderEvent,
|
||||||
|
eStateChangeEvent,
|
||||||
|
eTextChangeEvent,
|
||||||
|
eCaretMoveEvent,
|
||||||
|
eTableChangeEvent
|
||||||
|
};
|
||||||
|
|
||||||
|
static const EventGroup kEventGroup = eGenericEvent;
|
||||||
|
virtual unsigned int GetEventGroups() const
|
||||||
|
{
|
||||||
|
return 1U << eGenericEvent;
|
||||||
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
/**
|
/**
|
||||||
* Get an accessible from event target node.
|
* Get an accessible from event target node.
|
||||||
|
@ -145,28 +153,26 @@ protected:
|
||||||
friend class nsAccEventQueue;
|
friend class nsAccEventQueue;
|
||||||
};
|
};
|
||||||
|
|
||||||
NS_DEFINE_STATIC_IID_ACCESSOR(nsAccEvent, NS_ACCEVENT_IMPL_CID)
|
|
||||||
|
|
||||||
|
|
||||||
#define NS_ACCREORDEREVENT_IMPL_CID \
|
|
||||||
{ /* f2629eb8-2458-4358-868c-3912b15b767a */ \
|
|
||||||
0xf2629eb8, \
|
|
||||||
0x2458, \
|
|
||||||
0x4358, \
|
|
||||||
{ 0x86, 0x8c, 0x39, 0x12, 0xb1, 0x5b, 0x76, 0x7a } \
|
|
||||||
}
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Accessible reorder event.
|
||||||
|
*/
|
||||||
class nsAccReorderEvent : public nsAccEvent
|
class nsAccReorderEvent : public nsAccEvent
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
nsAccReorderEvent(nsAccessible *aAccTarget, PRBool aIsAsynch,
|
nsAccReorderEvent(nsAccessible *aAccTarget, PRBool aIsAsynch,
|
||||||
PRBool aIsUnconditional, nsINode *aReasonNode);
|
PRBool aIsUnconditional, nsINode *aReasonNode);
|
||||||
|
|
||||||
NS_DECLARE_STATIC_IID_ACCESSOR(NS_ACCREORDEREVENT_IMPL_CID)
|
|
||||||
|
|
||||||
NS_DECL_ISUPPORTS_INHERITED
|
NS_DECL_ISUPPORTS_INHERITED
|
||||||
|
|
||||||
|
// nsAccEvent
|
||||||
|
static const EventGroup kEventGroup = eReorderEvent;
|
||||||
|
virtual unsigned int GetEventGroups() const
|
||||||
|
{
|
||||||
|
return nsAccEvent::GetEventGroups() | (1U << eReorderEvent);
|
||||||
|
}
|
||||||
|
|
||||||
|
// nsAccReorderEvent
|
||||||
/**
|
/**
|
||||||
* Return true if event is unconditional, i.e. must be fired.
|
* Return true if event is unconditional, i.e. must be fired.
|
||||||
*/
|
*/
|
||||||
|
@ -182,9 +188,10 @@ private:
|
||||||
nsCOMPtr<nsINode> mReasonNode;
|
nsCOMPtr<nsINode> mReasonNode;
|
||||||
};
|
};
|
||||||
|
|
||||||
NS_DEFINE_STATIC_IID_ACCESSOR(nsAccReorderEvent, NS_ACCREORDEREVENT_IMPL_CID)
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Accessible state change event.
|
||||||
|
*/
|
||||||
class nsAccStateChangeEvent: public nsAccEvent,
|
class nsAccStateChangeEvent: public nsAccEvent,
|
||||||
public nsIAccessibleStateChangeEvent
|
public nsIAccessibleStateChangeEvent
|
||||||
{
|
{
|
||||||
|
@ -202,12 +209,28 @@ public:
|
||||||
NS_DECL_ISUPPORTS_INHERITED
|
NS_DECL_ISUPPORTS_INHERITED
|
||||||
NS_DECL_NSIACCESSIBLESTATECHANGEEVENT
|
NS_DECL_NSIACCESSIBLESTATECHANGEEVENT
|
||||||
|
|
||||||
|
// nsAccEvent
|
||||||
|
static const EventGroup kEventGroup = eStateChangeEvent;
|
||||||
|
virtual unsigned int GetEventGroups() const
|
||||||
|
{
|
||||||
|
return nsAccEvent::GetEventGroups() | (1U << eStateChangeEvent);
|
||||||
|
}
|
||||||
|
|
||||||
|
// nsAccStateChangeEvent
|
||||||
|
PRUint32 GetState() const { return mState; }
|
||||||
|
PRBool IsExtraState() const { return mIsExtraState; }
|
||||||
|
PRBool IsStateEnabled() const { return mIsEnabled; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
PRUint32 mState;
|
PRUint32 mState;
|
||||||
PRBool mIsExtraState;
|
PRBool mIsExtraState;
|
||||||
PRBool mIsEnabled;
|
PRBool mIsEnabled;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Accessible text change event.
|
||||||
|
*/
|
||||||
class nsAccTextChangeEvent: public nsAccEvent,
|
class nsAccTextChangeEvent: public nsAccEvent,
|
||||||
public nsIAccessibleTextChangeEvent
|
public nsIAccessibleTextChangeEvent
|
||||||
{
|
{
|
||||||
|
@ -220,6 +243,18 @@ public:
|
||||||
NS_DECL_ISUPPORTS_INHERITED
|
NS_DECL_ISUPPORTS_INHERITED
|
||||||
NS_DECL_NSIACCESSIBLETEXTCHANGEEVENT
|
NS_DECL_NSIACCESSIBLETEXTCHANGEEVENT
|
||||||
|
|
||||||
|
// nsAccEvent
|
||||||
|
static const EventGroup kEventGroup = eTextChangeEvent;
|
||||||
|
virtual unsigned int GetEventGroups() const
|
||||||
|
{
|
||||||
|
return nsAccEvent::GetEventGroups() | (1U << eTextChangeEvent);
|
||||||
|
}
|
||||||
|
|
||||||
|
// nsAccTextChangeEvent
|
||||||
|
PRInt32 GetStartOffset() const { return mStart; }
|
||||||
|
PRUint32 GetLength() const { return mLength; }
|
||||||
|
PRBool IsTextInserted() const { return mIsInserted; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
PRInt32 mStart;
|
PRInt32 mStart;
|
||||||
PRUint32 mLength;
|
PRUint32 mLength;
|
||||||
|
@ -227,6 +262,10 @@ private:
|
||||||
nsString mModifiedText;
|
nsString mModifiedText;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Accessible caret move event.
|
||||||
|
*/
|
||||||
class nsAccCaretMoveEvent: public nsAccEvent,
|
class nsAccCaretMoveEvent: public nsAccEvent,
|
||||||
public nsIAccessibleCaretMoveEvent
|
public nsIAccessibleCaretMoveEvent
|
||||||
{
|
{
|
||||||
|
@ -237,24 +276,72 @@ public:
|
||||||
NS_DECL_ISUPPORTS_INHERITED
|
NS_DECL_ISUPPORTS_INHERITED
|
||||||
NS_DECL_NSIACCESSIBLECARETMOVEEVENT
|
NS_DECL_NSIACCESSIBLECARETMOVEEVENT
|
||||||
|
|
||||||
|
// nsAccEvent
|
||||||
|
static const EventGroup kEventGroup = eCaretMoveEvent;
|
||||||
|
virtual unsigned int GetEventGroups() const
|
||||||
|
{
|
||||||
|
return nsAccEvent::GetEventGroups() | (1U << eCaretMoveEvent);
|
||||||
|
}
|
||||||
|
|
||||||
|
// nsAccCaretMoveEvent
|
||||||
|
PRInt32 GetCaretOffset() const { return mCaretOffset; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
PRInt32 mCaretOffset;
|
PRInt32 mCaretOffset;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Accessible table change event.
|
||||||
|
*/
|
||||||
class nsAccTableChangeEvent : public nsAccEvent,
|
class nsAccTableChangeEvent : public nsAccEvent,
|
||||||
public nsIAccessibleTableChangeEvent {
|
public nsIAccessibleTableChangeEvent
|
||||||
|
{
|
||||||
public:
|
public:
|
||||||
nsAccTableChangeEvent(nsAccessible *aAccessible, PRUint32 aEventType,
|
nsAccTableChangeEvent(nsAccessible *aAccessible, PRUint32 aEventType,
|
||||||
PRInt32 aRowOrColIndex, PRInt32 aNumRowsOrCols,
|
PRInt32 aRowOrColIndex, PRInt32 aNumRowsOrCols,
|
||||||
PRBool aIsAsynch);
|
PRBool aIsAsynch);
|
||||||
|
|
||||||
NS_DECL_ISUPPORTS
|
NS_DECL_ISUPPORTS_INHERITED
|
||||||
NS_DECL_NSIACCESSIBLETABLECHANGEEVENT
|
NS_DECL_NSIACCESSIBLETABLECHANGEEVENT
|
||||||
|
|
||||||
|
// nsAccEvent
|
||||||
|
static const EventGroup kEventGroup = eTableChangeEvent;
|
||||||
|
virtual unsigned int GetEventGroups() const
|
||||||
|
{
|
||||||
|
return nsAccEvent::GetEventGroups() | (1U << eTableChangeEvent);
|
||||||
|
}
|
||||||
|
|
||||||
|
// nsAccTableChangeEvent
|
||||||
|
PRUint32 GetIndex() const { return mRowOrColIndex; }
|
||||||
|
PRUint32 GetCount() const { return mNumRowsOrCols; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
PRUint32 mRowOrColIndex; // the start row/column after which the rows are inserted/deleted.
|
PRUint32 mRowOrColIndex; // the start row/column after which the rows are inserted/deleted.
|
||||||
PRUint32 mNumRowsOrCols; // the number of inserted/deleted rows/columns
|
PRUint32 mNumRowsOrCols; // the number of inserted/deleted rows/columns
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Downcast the generic accessible event object to derived type.
|
||||||
|
*/
|
||||||
|
class downcast_accEvent
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
downcast_accEvent(nsAccEvent *e) : mRawPtr(e) { }
|
||||||
|
|
||||||
|
template<class Destination>
|
||||||
|
operator Destination*() {
|
||||||
|
if (!mRawPtr)
|
||||||
|
return nsnull;
|
||||||
|
|
||||||
|
return mRawPtr->GetEventGroups() & (1U << Destination::kEventGroup) ?
|
||||||
|
static_cast<Destination*>(mRawPtr) : nsnull;
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
nsAccEvent *mRawPtr;
|
||||||
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -1591,7 +1591,7 @@ nsDocAccessible::ProcessPendingEvent(nsAccEvent *aEvent)
|
||||||
// Fire reorder event if it's unconditional (see InvalidateCacheSubtree
|
// Fire reorder event if it's unconditional (see InvalidateCacheSubtree
|
||||||
// method) or if changed node (that is the reason of this reorder event)
|
// method) or if changed node (that is the reason of this reorder event)
|
||||||
// is accessible or has accessible children.
|
// is accessible or has accessible children.
|
||||||
nsCOMPtr<nsAccReorderEvent> reorderEvent = do_QueryInterface(aEvent);
|
nsAccReorderEvent *reorderEvent = downcast_accEvent(aEvent);
|
||||||
if (reorderEvent->IsUnconditionalEvent() ||
|
if (reorderEvent->IsUnconditionalEvent() ||
|
||||||
reorderEvent->HasAccessibleInReasonSubtree()) {
|
reorderEvent->HasAccessibleInReasonSubtree()) {
|
||||||
nsEventShell::FireEvent(aEvent);
|
nsEventShell::FireEvent(aEvent);
|
||||||
|
|
|
@ -437,14 +437,14 @@ nsAccEventQueue::CoalesceReorderEventsFromSameSource(nsAccEvent *aAccEvent1,
|
||||||
nsAccEvent *aAccEvent2)
|
nsAccEvent *aAccEvent2)
|
||||||
{
|
{
|
||||||
// Do not emit event2 if event1 is unconditional.
|
// Do not emit event2 if event1 is unconditional.
|
||||||
nsCOMPtr<nsAccReorderEvent> reorderEvent1 = do_QueryInterface(aAccEvent1);
|
nsAccReorderEvent *reorderEvent1 = downcast_accEvent(aAccEvent1);
|
||||||
if (reorderEvent1->IsUnconditionalEvent()) {
|
if (reorderEvent1->IsUnconditionalEvent()) {
|
||||||
aAccEvent2->mEventRule = nsAccEvent::eDoNotEmit;
|
aAccEvent2->mEventRule = nsAccEvent::eDoNotEmit;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Do not emit event1 if event2 is unconditional.
|
// Do not emit event1 if event2 is unconditional.
|
||||||
nsCOMPtr<nsAccReorderEvent> reorderEvent2 = do_QueryInterface(aAccEvent2);
|
nsAccReorderEvent *reorderEvent2 = downcast_accEvent(aAccEvent2);
|
||||||
if (reorderEvent2->IsUnconditionalEvent()) {
|
if (reorderEvent2->IsUnconditionalEvent()) {
|
||||||
aAccEvent1->mEventRule = nsAccEvent::eDoNotEmit;
|
aAccEvent1->mEventRule = nsAccEvent::eDoNotEmit;
|
||||||
return;
|
return;
|
||||||
|
@ -462,7 +462,7 @@ nsAccEventQueue::CoalesceReorderEventsFromSameTree(nsAccEvent *aAccEvent,
|
||||||
nsAccEvent *aDescendantAccEvent)
|
nsAccEvent *aDescendantAccEvent)
|
||||||
{
|
{
|
||||||
// Do not emit descendant event if this event is unconditional.
|
// Do not emit descendant event if this event is unconditional.
|
||||||
nsCOMPtr<nsAccReorderEvent> reorderEvent = do_QueryInterface(aAccEvent);
|
nsAccReorderEvent *reorderEvent = downcast_accEvent(aAccEvent);
|
||||||
if (reorderEvent->IsUnconditionalEvent())
|
if (reorderEvent->IsUnconditionalEvent())
|
||||||
aDescendantAccEvent->mEventRule = nsAccEvent::eDoNotEmit;
|
aDescendantAccEvent->mEventRule = nsAccEvent::eDoNotEmit;
|
||||||
}
|
}
|
||||||
|
|
|
@ -70,7 +70,7 @@ PRBool nsAccessNodeWrap::gIsEnumVariantSupportDisabled = 0;
|
||||||
// Used to determine whether an IAccessible2 compatible screen reader is loaded.
|
// Used to determine whether an IAccessible2 compatible screen reader is loaded.
|
||||||
PRBool nsAccessNodeWrap::gIsIA2Disabled = PR_FALSE;
|
PRBool nsAccessNodeWrap::gIsIA2Disabled = PR_FALSE;
|
||||||
|
|
||||||
nsIAccessibleTextChangeEvent *nsAccessNodeWrap::gTextEvent = nsnull;
|
nsAccTextChangeEvent *nsAccessNodeWrap::gTextEvent = nsnull;
|
||||||
|
|
||||||
// Pref to disallow CtrlTab preview functionality if JAWS or Window-Eyes are
|
// Pref to disallow CtrlTab preview functionality if JAWS or Window-Eyes are
|
||||||
// running.
|
// running.
|
||||||
|
|
|
@ -71,6 +71,8 @@
|
||||||
typedef LRESULT (STDAPICALLTYPE *LPFNNOTIFYWINEVENT)(DWORD event,HWND hwnd,LONG idObjectType,LONG idObject);
|
typedef LRESULT (STDAPICALLTYPE *LPFNNOTIFYWINEVENT)(DWORD event,HWND hwnd,LONG idObjectType,LONG idObject);
|
||||||
typedef LRESULT (STDAPICALLTYPE *LPFNGETGUITHREADINFO)(DWORD idThread, GUITHREADINFO* pgui);
|
typedef LRESULT (STDAPICALLTYPE *LPFNGETGUITHREADINFO)(DWORD idThread, GUITHREADINFO* pgui);
|
||||||
|
|
||||||
|
class nsAccTextChangeEvent;
|
||||||
|
|
||||||
class nsAccessNodeWrap : public nsAccessNode,
|
class nsAccessNodeWrap : public nsAccessNode,
|
||||||
public nsIWinAccessNode,
|
public nsIWinAccessNode,
|
||||||
public ISimpleDOMNode,
|
public ISimpleDOMNode,
|
||||||
|
@ -186,7 +188,7 @@ protected:
|
||||||
* It is used in nsHyperTextAccessibleWrap for IA2::newText/oldText
|
* It is used in nsHyperTextAccessibleWrap for IA2::newText/oldText
|
||||||
* implementation.
|
* implementation.
|
||||||
*/
|
*/
|
||||||
static nsIAccessibleTextChangeEvent *gTextEvent;
|
static nsAccTextChangeEvent *gTextEvent;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -66,8 +66,8 @@ nsHyperTextAccessibleWrap::HandleAccEvent(nsAccEvent *aEvent)
|
||||||
&instancePtr);
|
&instancePtr);
|
||||||
if (NS_SUCCEEDED(rv)) {
|
if (NS_SUCCEEDED(rv)) {
|
||||||
NS_IF_RELEASE(gTextEvent);
|
NS_IF_RELEASE(gTextEvent);
|
||||||
|
NS_IF_ADDREF(gTextEvent = downcast_accEvent(aEvent));
|
||||||
|
|
||||||
CallQueryInterface(aEvent, &gTextEvent);
|
|
||||||
(static_cast<IUnknown*>(instancePtr))->Release();
|
(static_cast<IUnknown*>(instancePtr))->Release();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -90,25 +90,16 @@ nsHyperTextAccessibleWrap::GetModifiedText(PRBool aGetInsertedText,
|
||||||
if (!gTextEvent)
|
if (!gTextEvent)
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
|
|
||||||
PRBool isInserted;
|
PRBool isInserted = gTextEvent->IsTextInserted();
|
||||||
gTextEvent->IsInserted(&isInserted);
|
|
||||||
if (aGetInsertedText != isInserted)
|
if (aGetInsertedText != isInserted)
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
|
|
||||||
nsCOMPtr<nsIAccessibleEvent> event(do_QueryInterface(gTextEvent));
|
nsAccessible *targetAcc = gTextEvent->GetAccessible();
|
||||||
|
|
||||||
nsCOMPtr<nsIAccessible> targetAcc;
|
|
||||||
event->GetAccessible(getter_AddRefs(targetAcc));
|
|
||||||
if (targetAcc != this)
|
if (targetAcc != this)
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
|
|
||||||
PRInt32 offset;
|
*aStartOffset = gTextEvent->GetStartOffset();
|
||||||
PRUint32 length;
|
*aEndOffset = *aStartOffset + gTextEvent->GetLength();
|
||||||
|
|
||||||
gTextEvent->GetStart(&offset);
|
|
||||||
gTextEvent->GetLength(&length);
|
|
||||||
*aStartOffset = offset;
|
|
||||||
*aEndOffset = offset + length;
|
|
||||||
return gTextEvent->GetModifiedText(aText);
|
return gTextEvent->GetModifiedText(aText);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче