mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 1045270 - Part 2: Focus the text control inside a number control when recreating frames for a focused number control off of the event loop; r=smaug
This is needed because the text control doesn't have a document yet in CreateAnonymousContent, so setting the focus to it will fail.
This commit is contained in:
parent
7b43655435
commit
23c527d9cf
@ -22,6 +22,7 @@
|
||||
#include "nsContentList.h"
|
||||
#include "nsStyleSet.h"
|
||||
#include "nsIDOMMutationEvent.h"
|
||||
#include "nsThreadUtils.h"
|
||||
|
||||
#ifdef ACCESSIBILITY
|
||||
#include "mozilla/a11y/AccTypes.h"
|
||||
@ -259,6 +260,28 @@ nsNumberControlFrame::GetTextFieldFrame()
|
||||
return do_QueryFrame(GetAnonTextControl()->GetPrimaryFrame());
|
||||
}
|
||||
|
||||
class FocusTextField : public nsRunnable
|
||||
{
|
||||
public:
|
||||
FocusTextField(nsIContent* aNumber, nsIContent* aTextField)
|
||||
: mNumber(aNumber),
|
||||
mTextField(aTextField)
|
||||
{}
|
||||
|
||||
NS_IMETHODIMP Run() MOZ_OVERRIDE
|
||||
{
|
||||
if (mNumber->AsElement()->State().HasState(NS_EVENT_STATE_FOCUS)) {
|
||||
HTMLInputElement::FromContent(mTextField)->Focus();
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
private:
|
||||
nsCOMPtr<nsIContent> mNumber;
|
||||
nsCOMPtr<nsIContent> mTextField;
|
||||
};
|
||||
|
||||
nsresult
|
||||
nsNumberControlFrame::MakeAnonymousElement(Element** aResult,
|
||||
nsTArray<ContentInfo>& aElements,
|
||||
@ -364,10 +387,8 @@ nsNumberControlFrame::CreateAnonymousContent(nsTArray<ContentInfo>& aElements)
|
||||
|
||||
if (mContent->AsElement()->State().HasState(NS_EVENT_STATE_FOCUS)) {
|
||||
// We don't want to focus the frame but the text field.
|
||||
nsIFocusManager* fm = nsFocusManager::GetFocusManager();
|
||||
nsCOMPtr<nsIDOMElement> element = do_QueryInterface(mTextField);
|
||||
NS_ASSERTION(element, "Really, this should be a nsIDOMElement!");
|
||||
fm->SetFocus(element, 0);
|
||||
nsRefPtr<FocusTextField> focusJob = new FocusTextField(mContent, mTextField);
|
||||
nsContentUtils::AddScriptRunner(focusJob);
|
||||
}
|
||||
|
||||
if (StyleDisplay()->mAppearance == NS_THEME_TEXTFIELD) {
|
||||
|
Loading…
Reference in New Issue
Block a user