зеркало из https://github.com/mozilla/gecko-dev.git
Bug 546068 - Position is not being updated when atk_text_set_caret_offset is used, r=marcoz, enndeakin
This commit is contained in:
Родитель
b632193bc0
Коммит
cb91797c4e
|
@ -226,6 +226,10 @@ nsCaretAccessible::NotifySelectionChanged(nsIDOMDocument* aDOMDocument,
|
|||
printf("\nSelection changed, selection type: %s, notification %s\n",
|
||||
(isNormalSelection ? "normal" : "spellcheck"),
|
||||
(isIgnored ? "ignored" : "pending"));
|
||||
} else {
|
||||
bool isIgnored = !document || !document->IsContentLoaded();
|
||||
printf("\nSelection changed, selection type: unknown, notification %s\n",
|
||||
(isIgnored ? "ignored" : "pending"));
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
|
@ -46,6 +46,7 @@
|
|||
|
||||
#include "nsIClipboard.h"
|
||||
#include "nsContentCID.h"
|
||||
#include "nsFocusManager.h"
|
||||
#include "nsIDOMCharacterData.h"
|
||||
#include "nsIDOMDocument.h"
|
||||
#include "nsIDOMRange.h"
|
||||
|
@ -1595,11 +1596,20 @@ nsHyperTextAccessible::SetSelectionRange(PRInt32 aStartPos, PRInt32 aEndPos)
|
|||
domSel->RemoveRange(range);
|
||||
}
|
||||
|
||||
// XXX I'm not sure this can do synchronous scrolling. If the last param is
|
||||
// set to true, this calling might flush the pending reflow. See bug 418470.
|
||||
return frameSelection->ScrollSelectionIntoView(nsISelectionController::SELECTION_NORMAL,
|
||||
nsISelectionController::SELECTION_FOCUS_REGION,
|
||||
0);
|
||||
// Now that selection is done, move the focus to the selection.
|
||||
nsFocusManager* DOMFocusManager = nsFocusManager::GetFocusManager();
|
||||
if (DOMFocusManager) {
|
||||
nsCOMPtr<nsIPresShell> shell = GetPresShell();
|
||||
NS_ENSURE_TRUE(shell, NS_ERROR_FAILURE);
|
||||
nsCOMPtr<nsIDocument> doc = shell->GetDocument();
|
||||
NS_ENSURE_TRUE(doc, NS_ERROR_FAILURE);
|
||||
nsCOMPtr<nsPIDOMWindow> window = doc->GetWindow();
|
||||
nsCOMPtr<nsIDOMElement> result;
|
||||
DOMFocusManager->MoveFocus(window, nsnull, nsIFocusManager::MOVEFOCUS_CARET,
|
||||
nsIFocusManager::FLAG_BYMOVEFOCUS, getter_AddRefs(result));
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
|
|
|
@ -34,9 +34,11 @@
|
|||
/**
|
||||
* Invokers.
|
||||
*/
|
||||
function setCaretOffsetInvoker(aID, aOffset)
|
||||
function setCaretOffsetInvoker(aID, aOffset, aFocusableContainerID)
|
||||
{
|
||||
this.target = getAccessible(aID, [nsIAccessibleText]);
|
||||
this.focus = aFocusableContainerID ?
|
||||
getAccessible(aFocusableContainerID) : this.target;
|
||||
|
||||
this.invoke = function setCaretOffsetInvoker_invoke()
|
||||
{
|
||||
|
@ -45,29 +47,47 @@
|
|||
|
||||
this.getID = function setCaretOffsetInvoker_getID()
|
||||
{
|
||||
return "nsIAccessibleText::caretOffset test";
|
||||
return "Set caretOffset on " + prettyName(aID) + " at " + aOffset;
|
||||
}
|
||||
|
||||
this.eventSeq = [
|
||||
new invokerChecker(EVENT_FOCUS, this.target),
|
||||
new caretMovedChecker(this.target, aOffset)
|
||||
new caretMovedChecker(this.target, aOffset),
|
||||
new asyncInvokerChecker(EVENT_FOCUS, this.focus)
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Turn on/off the caret browsing mode.
|
||||
*/
|
||||
function turnCaretBrowsing(aIsOn)
|
||||
{
|
||||
var prefs = Components.classes["@mozilla.org/preferences-service;1"].
|
||||
getService(Components.interfaces.nsIPrefBranch);
|
||||
prefs.setBoolPref("accessibility.browsewithcaret", aIsOn);
|
||||
}
|
||||
|
||||
/**
|
||||
* Do tests.
|
||||
*/
|
||||
var gQueue = null;
|
||||
|
||||
// gA11yEventDumpID = "eventdump"; // debug stuff
|
||||
//gA11yEventDumpID = "eventdump"; // debug stuff
|
||||
//gA11yEventDumpToConsole = true;
|
||||
|
||||
function doTests()
|
||||
{
|
||||
turnCaretBrowsing(true);
|
||||
|
||||
// test caret move events and caret offsets
|
||||
gQueue = new eventQueue();
|
||||
|
||||
gQueue.push(new setCaretOffsetInvoker("textbox", 1));
|
||||
gQueue.push(new setCaretOffsetInvoker("link", 1));
|
||||
gQueue.push(new setCaretOffsetInvoker("heading", 1, document));
|
||||
gQueue.onFinish = function()
|
||||
{
|
||||
turnCaretBrowsing(false);
|
||||
}
|
||||
|
||||
gQueue.invoke(); // Will call SimpleTest.finish();
|
||||
}
|
||||
|
@ -84,6 +104,11 @@
|
|||
title="HyperText accessible should get focus when the caret is positioned inside of it, text is changed or copied into clipboard by ATs">
|
||||
Mozilla Bug 524115
|
||||
</a>
|
||||
<a target="_blank"
|
||||
href="https://bugzilla.mozilla.org/show_bug.cgi?id=546068"
|
||||
title="Position is not being updated when atk_text_set_caret_offset is used">
|
||||
Mozilla Bug 546068
|
||||
</a>
|
||||
<p id="display"></p>
|
||||
<div id="content" style="display: none"></div>
|
||||
<pre id="test">
|
||||
|
@ -91,6 +116,7 @@
|
|||
|
||||
<input id="textbox" value="hello"/>
|
||||
<a id="link" href="about:">about mozilla</a>
|
||||
<h5 id="heading">heading</h5>
|
||||
|
||||
<div id="eventdump"></div>
|
||||
</body>
|
||||
|
|
Загрузка…
Ссылка в новой задаче