Bug 385437 - event object for EVENT_TEXT_CARET_MOVED, r=aaronlev

This commit is contained in:
surkov.alexander@gmail.com 2007-06-22 02:27:22 -07:00
Родитель afc255d373
Коммит 2191eb90c8
6 изменённых файлов: 69 добавлений и 9 удалений

Просмотреть файл

@ -541,3 +541,12 @@ interface nsIAccessibleTextChangeEvent : nsIAccessibleEvent
boolean isInserted();
};
[scriptable, uuid(b9076dce-4cd3-4e3d-a7f6-7f33a7f40c31)]
interface nsIAccessibleCaretMoveEvent: nsIAccessibleEvent
{
/**
* Return caret offset.
*/
readonly attribute long caretOffset;
};

Просмотреть файл

@ -1159,17 +1159,23 @@ nsAccessibleWrap::FireAccessibleEvent(nsIAccessibleEvent *aEvent)
break;
case nsIAccessibleEvent::EVENT_TEXT_CARET_MOVED:
{
MAI_LOG_DEBUG(("\n\nReceived: EVENT_TEXT_CARET_MOVED\n"));
NS_ASSERTION(eventData, "Event needs event data");
if (!eventData)
nsCOMPtr<nsIAccessibleCaretMoveEvent> caretMoveEvent(do_QueryInterface(aEvent));
NS_ASSERTION(caretMoveEvent, "Event needs event data");
if (!caretMoveEvent)
break;
MAI_LOG_DEBUG(("\n\nCaret postion: %d", *(gint *)eventData ));
PRInt32 caretOffset = -1;
caretMoveEvent->GetCaretOffset(&caretOffset);
MAI_LOG_DEBUG(("\n\nCaret postion: %d", *(gint *)caretOffset));
g_signal_emit_by_name(atkObj,
"text_caret_moved",
// Curent caret position
*(gint *)eventData);
break;
*(gint *)caretOffset);
} break;
case nsIAccessibleEvent::EVENT_TABLE_MODEL_CHANGED:
MAI_LOG_DEBUG(("\n\nReceived: EVENT_TABLE_MODEL_CHANGED\n"));

Просмотреть файл

@ -225,3 +225,26 @@ nsAccTextChangeEvent::IsInserted(PRBool *aIsInserted)
return NS_OK;
}
nsAccCaretMoveEvent::
nsAccCaretMoveEvent(nsIAccessible *aAccessible, PRInt32 aCaretOffset) :
nsAccEvent(::nsIAccessibleEvent::EVENT_TEXT_CARET_MOVED, aAccessible, nsnull),
mCaretOffset(aCaretOffset)
{
}
nsAccCaretMoveEvent::
nsAccCaretMoveEvent(nsIDOMNode *aNode) :
nsAccEvent(::nsIAccessibleEvent::EVENT_TEXT_CARET_MOVED, aNode, nsnull),
mCaretOffset(-1)
{
}
NS_IMETHODIMP
nsAccCaretMoveEvent::GetCaretOffset(PRInt32* aCaretOffset)
{
NS_ENSURE_ARG_POINTER(aCaretOffset);
*aCaretOffset = mCaretOffset;
return NS_OK;
}

Просмотреть файл

@ -113,6 +113,21 @@ private:
PRBool mIsInserted;
};
class nsAccCaretMoveEvent: public nsAccEvent,
public nsIAccessibleCaretMoveEvent
{
public:
nsAccCaretMoveEvent(nsIAccessible *aAccessible, PRInt32 aCaretOffset);
nsAccCaretMoveEvent(nsIDOMNode *aNode);
NS_DECL_ISUPPORTS_INHERITED
NS_FORWARD_NSIACCESSIBLEEVENT(nsAccEvent::)
NS_DECL_NSIACCESSIBLECARETMOVEEVENT
private:
PRInt32 mCaretOffset;
};
// XXX todo: We might want to use XPCOM interfaces instead of structs
// e.g., nsAccessibleTextChangeEvent: public nsIAccessibleTextChangeEvent

Просмотреть файл

@ -217,8 +217,11 @@ NS_IMETHODIMP nsCaretAccessible::NotifySelectionChanged(nsIDOMDocument *aDoc, ns
mLastCaretOffset = caretOffset;
mLastTextAccessible = textAcc;
return mRootAccessible->FireDelayedToolkitEvent(nsIAccessibleEvent::EVENT_TEXT_CARET_MOVED,
focusNode, nsnull, PR_FALSE);
nsCOMPtr<nsIAccessibleCaretMoveEvent> event =
new nsAccCaretMoveEvent(focusNode);
NS_ENSURE_TRUE(event, NS_ERROR_OUT_OF_MEMORY);
return mRootAccessible->FireDelayedAccessibleEvent(event, PR_FALSE);
}
nsRect

Просмотреть файл

@ -1262,8 +1262,12 @@ NS_IMETHODIMP nsDocAccessible::FlushPendingEvents()
nsCOMPtr<nsIAccessibleText> accessibleText = do_QueryInterface(accessible);
PRInt32 caretOffset;
if (accessibleText && NS_SUCCEEDED(accessibleText->GetCaretOffset(&caretOffset))) {
FireToolkitEvent(nsIAccessibleEvent::EVENT_TEXT_CARET_MOVED,
accessible, &caretOffset);
nsCOMPtr<nsIAccessibleCaretMoveEvent> caretMoveEvent =
new nsAccCaretMoveEvent(accessible, caretOffset);
NS_ENSURE_TRUE(caretMoveEvent, NS_ERROR_OUT_OF_MEMORY);
FireAccessibleEvent(caretMoveEvent);
PRInt32 selectionCount;
accessibleText->GetSelectionCount(&selectionCount);
if (selectionCount) { // There's a selection so fire selection change as well